Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

To support hyperbus module and fix some issues in the boot process #138

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions generate-scripts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ parser.add_argument('--flash-vip', action='store_true',
parser.add_argument('--i2s-vip', action='store_true',
help="""Use the i2s model (24FC1025).
Needs to be installed.""")
parser.add_argument('--hyper-vip', action='store_true',
help="""Use the hyperbus models (S27KS0641 and S26KS512S).
Needs to be installed.""")
parser.add_argument('--verbose', action='store_true',
help='Show more information about commands')

Expand Down Expand Up @@ -62,6 +65,9 @@ if not args.i2c_vip:
if not args.flash_vip:
del (ipdb.rtl_dic['vip'].sub_ips['S25FS256_model'])

if not args.hyper_vip:
del (ipdb.rtl_dic['vip'].sub_ips['HYPER_model'])

if not args.i2s_vip:
del (ipdb.rtl_dic['vip'].sub_ips['i2s_model'])

Expand Down
50 changes: 47 additions & 3 deletions rtl/pulpissimo/pad_frame.sv
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ module pad_frame
input logic oe_i2c0_scl_i ,
input logic oe_uart_rx_i ,
input logic oe_uart_tx_i ,
input logic oe_hyper_rwds_i ,
input logic oe_hyper_dq_i ,


// INPUTS SIGNALS TO THE PADS
input logic out_sdio_clk_i ,
Expand Down Expand Up @@ -93,6 +96,13 @@ module pad_frame
input logic out_i2c0_scl_i ,
input logic out_uart_rx_i ,
input logic out_uart_tx_i ,
input logic [1:0] out_hyper_csn_i ,
input logic out_hyper_ck_i ,
input logic out_hyper_ckn_i ,
input logic out_hyper_rwds_i ,
input logic [7:0] out_hyper_dq_i ,
input logic out_hyper_resetn_i ,


// OUTPUT SIGNALS FROM THE PADS
output logic in_sdio_clk_o ,
Expand Down Expand Up @@ -127,8 +137,11 @@ module pad_frame
output logic in_i2c0_scl_o ,
output logic in_uart_rx_o ,
output logic in_uart_tx_o ,
output logic in_hyper_rwds_o,
output logic [7:0] in_hyper_dq_o,

output logic bootsel_o ,

output logic [1:0] bootsel_o ,

// EXT CHIP TP PADS
inout wire pad_sdio_clk ,
Expand Down Expand Up @@ -165,12 +178,27 @@ module pad_frame
inout wire pad_uart_tx ,

inout wire pad_reset_n ,
inout wire pad_bootsel ,
inout wire pad_bootsel0 ,
inout wire pad_bootsel1 ,
inout wire pad_jtag_tck ,
inout wire pad_jtag_tdi ,
inout wire pad_jtag_tdo ,
inout wire pad_jtag_tms ,
inout wire pad_jtag_trst ,
inout wire pad_hyper_cs_no0 ,
inout wire pad_hyper_cs_no1 ,
inout wire pad_hyper_cko ,
inout wire pad_hyper_ckno ,
inout wire pad_hyper_rwds ,
inout wire pad_hyper_dqio0 ,
inout wire pad_hyper_dqio1 ,
inout wire pad_hyper_dqio2 ,
inout wire pad_hyper_dqio3 ,
inout wire pad_hyper_dqio4 ,
inout wire pad_hyper_dqio5 ,
inout wire pad_hyper_dqio6 ,
inout wire pad_hyper_dqio7 ,
inout wire pad_hyper_resetn ,
inout wire pad_xtal_in


Expand Down Expand Up @@ -214,7 +242,23 @@ module pad_frame
pad_functional_pu padinst_i2c0_scl (.OEN(~oe_i2c0_scl_i ), .I(out_i2c0_scl_i ), .O(in_i2c0_scl_o ), .PAD(pad_i2c0_scl ), .PEN(~pad_cfg_i[8][0] ) );


pad_functional_pu padinst_bootsel (.OEN(1'b1 ), .I( ), .O(bootsel_o ), .PAD(pad_bootsel ), .PEN(1'b1 ) );
pad_functional_pu padinst_bootsel0 (.OEN(1'b1 ), .I( ), .O(bootsel_o[0] ), .PAD(pad_bootsel0 ), .PEN(1'b1 ) );
pad_functional_pu padinst_bootsel1 (.OEN(1'b1 ), .I( ), .O(bootsel_o[1] ), .PAD(pad_bootsel1 ), .PEN(1'b1 ) );

pad_functional_pu padinst_hyper_csno0 (.OEN( 1'b0 ), .I( out_hyper_csn_i[0] ), .O( ), .PAD( pad_hyper_cs_no0 ), .PEN(1'b1 ) );
pad_functional_pu padinst_hyper_csno1 (.OEN( 1'b0 ), .I( out_hyper_csn_i[1] ), .O( ), .PAD( pad_hyper_cs_no1 ), .PEN(1'b1 ) );
pad_functional_pu padinst_hyper_ck (.OEN( 1'b0 ), .I( out_hyper_ck_i ), .O( ), .PAD( pad_hyper_cko ), .PEN(1'b1 ) );
pad_functional_pu padinst_hyper_ckno (.OEN( 1'b0 ), .I( out_hyper_ckn_i ), .O( ), .PAD( pad_hyper_ckno ), .PEN(1'b1 ) );
pad_functional_pu padinst_hyper_dqio0 (.OEN( !oe_hyper_dq_i ), .I( out_hyper_dq_i[0] ), .O( in_hyper_dq_o[0] ), .PAD( pad_hyper_dqio0 ), .PEN(1'b1 ) );
pad_functional_pu padinst_hyper_dqio1 (.OEN( !oe_hyper_dq_i ), .I( out_hyper_dq_i[1] ), .O( in_hyper_dq_o[1] ), .PAD( pad_hyper_dqio1 ), .PEN(1'b1 ) );
pad_functional_pu padinst_hyper_dqio2 (.OEN( !oe_hyper_dq_i ), .I( out_hyper_dq_i[2] ), .O( in_hyper_dq_o[2] ), .PAD( pad_hyper_dqio2 ), .PEN(1'b1 ) );
pad_functional_pu padinst_hyper_dqio3 (.OEN( !oe_hyper_dq_i ), .I( out_hyper_dq_i[3] ), .O( in_hyper_dq_o[3] ), .PAD( pad_hyper_dqio3 ), .PEN(1'b1 ) );
pad_functional_pu padinst_hyper_dqio4 (.OEN( !oe_hyper_dq_i ), .I( out_hyper_dq_i[4] ), .O( in_hyper_dq_o[4] ), .PAD( pad_hyper_dqio4 ), .PEN(1'b1 ) );
pad_functional_pu padinst_hyper_dqio5 (.OEN( !oe_hyper_dq_i ), .I( out_hyper_dq_i[5] ), .O( in_hyper_dq_o[5] ), .PAD( pad_hyper_dqio5 ), .PEN(1'b1 ) );
pad_functional_pu padinst_hyper_dqio6 (.OEN( !oe_hyper_dq_i ), .I( out_hyper_dq_i[6] ), .O( in_hyper_dq_o[6] ), .PAD( pad_hyper_dqio6 ), .PEN(1'b1 ) );
pad_functional_pu padinst_hyper_dqio7 (.OEN( !oe_hyper_dq_i ), .I( out_hyper_dq_i[7] ), .O( in_hyper_dq_o[7] ), .PAD( pad_hyper_dqio7 ), .PEN(1'b1 ) );
pad_functional_pu padinst_hyper_rwds (.OEN( !oe_hyper_rwds_i ), .I( out_hyper_rwds_i ), .O( in_hyper_rwds_o ), .PAD( pad_hyper_rwds ), .PEN(1'b1 ) );
pad_functional_pu padinst_hyper_resetn (.OEN( 1'b0 ), .I( out_hyper_resetn_i ), .O( ), .PAD( pad_hyper_resetn ), .PEN(1'b1 ) );


`ifndef PULP_FPGA_EMUL
Expand Down
72 changes: 68 additions & 4 deletions rtl/pulpissimo/pulpissimo.sv
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,24 @@ module pulpissimo #(
inout wire pad_i2s0_sdi,
inout wire pad_i2s1_sdi,

inout wire pad_hyper_cs_no0 ,
inout wire pad_hyper_cs_no1 ,
inout wire pad_hyper_cko ,
inout wire pad_hyper_ckno ,
inout wire pad_hyper_rwds ,
inout wire pad_hyper_dqio0 ,
inout wire pad_hyper_dqio1 ,
inout wire pad_hyper_dqio2 ,
inout wire pad_hyper_dqio3 ,
inout wire pad_hyper_dqio4 ,
inout wire pad_hyper_dqio5 ,
inout wire pad_hyper_dqio6 ,
inout wire pad_hyper_dqio7 ,
inout wire pad_hyper_resetn ,

inout wire pad_reset_n,
inout wire pad_bootsel,
inout wire pad_bootsel0,
inout wire pad_bootsel1,

inout wire pad_jtag_tck,
inout wire pad_jtag_tdi,
Expand Down Expand Up @@ -327,6 +343,18 @@ module pulpissimo #(
logic [127:0] s_pad_mux_soc;
logic [383:0] s_pad_cfg_soc;

logic [1:0] s_out_hyper_csn;
logic s_out_hyper_ck;
logic s_out_hyper_ckn;
logic s_out_hyper_rwds;
logic s_in_hyper_rwds;
logic s_oe_hyper_rwds;
logic [7:0] s_out_hyper_dq;
logic [7:0] s_in_hyper_dq;
logic s_oe_hyper_dq;
logic s_out_hyper_resetn;


//***********************************************************
//********** SOC TO CLUSTER DOMAINS SIGNALS *****************
//***********************************************************
Expand All @@ -343,7 +371,7 @@ module pulpissimo #(
logic [EVENT_WIDTH-1:0] s_event_dataasync;
logic s_cluster_irq;

logic s_bootsel;
logic [1:0] s_bootsel;

APB_BUS apb_debug();
XBAR_TCDM_BUS lint_debug();
Expand Down Expand Up @@ -395,6 +423,8 @@ module pulpissimo #(
.oe_i2c0_scl_i ( s_oe_i2c0_scl ),
.oe_uart_rx_i ( s_oe_uart_rx ),
.oe_uart_tx_i ( s_oe_uart_tx ),
.oe_hyper_rwds_i ( s_oe_hyper_rwds ),
.oe_hyper_dq_i ( s_oe_hyper_dq ),

.out_spim_sdio0_i ( s_out_spim_sdio0 ),
.out_spim_sdio1_i ( s_out_spim_sdio1 ),
Expand Down Expand Up @@ -428,6 +458,12 @@ module pulpissimo #(
.out_i2c0_scl_i ( s_out_i2c0_scl ),
.out_uart_rx_i ( s_out_uart_rx ),
.out_uart_tx_i ( s_out_uart_tx ),
.out_hyper_csn_i ( s_out_hyper_csn ),
.out_hyper_ck_i ( s_out_hyper_ck ),
.out_hyper_ckn_i ( s_out_hyper_ckn ),
.out_hyper_rwds_i ( s_out_hyper_rwds ),
.out_hyper_dq_i ( s_out_hyper_dq ),
.out_hyper_resetn_i ( s_out_hyper_resetn ),

.in_spim_sdio0_o ( s_in_spim_sdio0 ),
.in_spim_sdio1_o ( s_in_spim_sdio1 ),
Expand Down Expand Up @@ -461,6 +497,8 @@ module pulpissimo #(
.in_i2c0_scl_o ( s_in_i2c0_scl ),
.in_uart_rx_o ( s_in_uart_rx ),
.in_uart_tx_o ( s_in_uart_tx ),
.in_hyper_rwds_o ( s_in_hyper_rwds ),
.in_hyper_dq_o ( s_in_hyper_dq ),
.bootsel_o ( s_bootsel ),

//EXT CHIP to PAD
Expand Down Expand Up @@ -496,8 +534,23 @@ module pulpissimo #(
.pad_i2c0_scl ( pad_i2c0_scl ),
.pad_uart_rx ( pad_uart_rx ),
.pad_uart_tx ( pad_uart_tx ),

.pad_bootsel ( pad_bootsel ),
.pad_hyper_cs_no0 ( pad_hyper_cs_no0 ),
.pad_hyper_cs_no1 ( pad_hyper_cs_no1 ),
.pad_hyper_cko ( pad_hyper_cko ),
.pad_hyper_ckno ( pad_hyper_ckno ),
.pad_hyper_rwds ( pad_hyper_rwds ),
.pad_hyper_dqio0 ( pad_hyper_dqio0 ),
.pad_hyper_dqio1 ( pad_hyper_dqio1 ),
.pad_hyper_dqio2 ( pad_hyper_dqio2 ),
.pad_hyper_dqio3 ( pad_hyper_dqio3 ),
.pad_hyper_dqio4 ( pad_hyper_dqio4 ),
.pad_hyper_dqio5 ( pad_hyper_dqio5 ),
.pad_hyper_dqio6 ( pad_hyper_dqio6 ),
.pad_hyper_dqio7 ( pad_hyper_dqio7 ),
.pad_hyper_resetn ( pad_hyper_resetn ),

.pad_bootsel0 ( pad_bootsel0 ),
.pad_bootsel1 ( pad_bootsel1 ),
.pad_reset_n ( pad_reset_n ),
.pad_jtag_tck ( pad_jtag_tck ),
.pad_jtag_tdi ( pad_jtag_tdi ),
Expand Down Expand Up @@ -817,6 +870,17 @@ module pulpissimo #(
.sdio_data_i ( s_sdio_datai ),
.sdio_data_oen_o ( s_sdio_data_oen ),

.hyper_cs_no ( s_out_hyper_csn ),
.hyper_ck_o ( s_out_hyper_ck ),
.hyper_ck_no ( s_out_hyper_ckn ),
.hyper_rwds_o ( s_out_hyper_rwds ),
.hyper_rwds_i ( s_in_hyper_rwds ),
.hyper_rwds_oe_o ( s_oe_hyper_rwds ),
.hyper_dq_i ( s_in_hyper_dq ),
.hyper_dq_o ( s_out_hyper_dq ),
.hyper_dq_oe_o ( s_oe_hyper_dq ),
.hyper_reset_no ( s_out_hyper_resetn ),

.cluster_busy_i ( s_cluster_busy ),

.cluster_events_wt_o ( s_event_writetoken ),
Expand Down
17 changes: 14 additions & 3 deletions rtl/pulpissimo/soc_domain.sv
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ module soc_domain #(

input logic mode_select_i,

input logic bootsel_i,
input logic [1:0] bootsel_i,

input logic jtag_tck_i,
input logic jtag_trst_ni,
Expand Down Expand Up @@ -115,9 +115,20 @@ module soc_domain #(
output logic sdio_cmd_oen_o,
output logic [3:0] sdio_data_o,
input logic [3:0] sdio_data_i,
output logic [3:0] sdio_data_oen_o
output logic [3:0] sdio_data_oen_o ,

output logic [1:0] hyper_cs_no,
output logic hyper_ck_o,
output logic hyper_ck_no,
output logic hyper_rwds_o,
input logic hyper_rwds_i,
output logic hyper_rwds_oe_o,
input logic [7:0] hyper_dq_i,
output logic [7:0] hyper_dq_o,
output logic hyper_dq_oe_o,
output logic hyper_reset_no,


,
// CLUSTER
output logic cluster_clk_o,
output logic cluster_rstn_o,
Expand Down
Loading