feat: modify io and ram impl

This commit is contained in:
maksyuki committed 2025-01-23 23:52:46 +08:00
1 parent 4bc07e0e68
commit 2e559f091f
4 files changed
+75 -66

No files matched your search

+6 -3
View File
@@ -12,12 +12,15 @@ retrosim: retrosoc_tb.vvp retrosoc_fw.hex retrosoc_fw.bin
retrosynsim: retrosoc_syn_tb.vvp retrosoc_fw.hex
vvp -N $< +firmware=retrosoc_fw.hex +syn_$(WAVE)
retrosoc_tb.vvp: retrosoc_tb.v retrosoc.v spram_model.v spimemio.v simpleuart.v picosoc.v picorv32.v spiflash.v
retrosoc_tb.vvp: retrosoc_tb.v retrosoc.v spram_model.v spimemio.v simpleuart.v picosoc.v picorv32.v spiflash.v ../tech/tc_io.v ../tech/tc_clk.v ../tech/tc_sram.v ../syn/IHP-Open-PDK/ihp-sg13g2/libs.ref/sg13g2_io/verilog/sg13g2_io.v ../syn/IHP-Open-PDK/ihp-sg13g2/libs.ref/sg13g2_sram/verilog/RM_IHPSG13_1P_core_behavioral_bm_bist.v ../syn/IHP-Open-PDK/ihp-sg13g2/libs.ref/sg13g2_sram/verilog/RM_IHPSG13_1P_1024x16_c2_bm_bist.v
iverilog -s retrosoc_tb -o $@ $^
retrosoc_syn_tb.vvp: retrosoc_tb.v retrosoc_syn.v spiflash.v ../syn/IHP-Open-PDK/ihp-sg13g2/libs.ref/sg13g2_stdcell/verilog/sg13g2_stdcell.v
retrosoc_syn_tb.vvp: retrosoc_tb.v ../syn/yosys/out/retrosoc_yosys.v spiflash.v ../syn/IHP-Open-PDK/ihp-sg13g2/libs.ref/sg13g2_stdcell/verilog/sg13g2_stdcell.v ../syn/IHP-Open-PDK/ihp-sg13g2/libs.ref/sg13g2_io/verilog/sg13g2_io.v ../syn/IHP-Open-PDK/ihp-sg13g2/libs.ref/sg13g2_sram/verilog/RM_IHPSG13_1P_core_behavioral_bm_bist.v ../syn/IHP-Open-PDK/ihp-sg13g2/libs.ref/sg13g2_sram/verilog/RM_IHPSG13_1P_1024x16_c2_bm_bist.v
iverilog -s retrosoc_tb -o $@ $^
../syn/yosys/out/retrosoc_yosys.v:
$(MAKE) -C ../syn/yosys -f yosys.mk
retrosoc_syn.v:
yosys ../syn/synth_retrosoc.ys
@@ -52,4 +55,4 @@ clean:
rm -f retrosoc_syn.v
.PHONY: spiflash_tb clean
.PHONY: retrosim retrosynsim retrosoc_syn.v
.PHONY: retrosim retrosynsim retrosoc_syn.v
+38 -36
View File
@@ -31,23 +31,25 @@ module retrosoc #(
) (
input clk_i,
input rst_n_i,
output uart_tx_o,
input uart_rx_i,
output led1_o,
output led2_o,
output led3_o,
output led4_o,
output led5_o,
output led6_o,
output led7_o,
output flash_csb_o,
output flash_clk_o,
inout flash_io0_io,
inout flash_io1_io,
inout flash_io2_io,
inout flash_io3_io
output uart_tx_o_pad,
input uart_rx_i_pad,
output flash_csb_o_pad,
output flash_clk_o_pad,
inout flash_io0_io_pad,
inout flash_io1_io_pad,
inout flash_io2_io_pad,
inout flash_io3_io_pad,
output led1_o_pad,
output led2_o_pad,
output led3_o_pad,
output led4_o_pad,
output led5_o_pad,
output led6_o_pad,
output led7_o_pad
);
wire s_flash_csb_o, s_flash_clk_o;
wire s_uart_rx_i, s_uart_tx_o;
wire s_flash_io0_oe, s_flash_io0_do, s_flash_io0_di;
wire s_flash_io1_oe, s_flash_io1_do, s_flash_io1_di;
wire s_flash_io2_oe, s_flash_io2_do, s_flash_io2_di;
@@ -61,23 +63,23 @@ module retrosoc #(
wire [ 7:0] s_leds;
reg [31:0] r_gpio;
assign flash_io0_io = s_flash_io0_oe ? s_flash_io0_do : 1'bz;
assign s_flash_io0_di = flash_io0_io;
assign flash_io1_io = s_flash_io1_oe ? s_flash_io1_do : 1'bz;
assign s_flash_io1_di = flash_io1_io;
assign flash_io2_io = s_flash_io2_oe ? s_flash_io2_do : 1'bz;
assign s_flash_io2_di = flash_io2_io;
assign flash_io3_io = s_flash_io3_oe ? s_flash_io3_do : 1'bz;
assign s_flash_io3_di = flash_io3_io;
assign led1_o = s_leds[1];
assign led2_o = s_leds[2];
assign led3_o = s_leds[3];
assign led4_o = s_leds[4];
assign led5_o = s_leds[5];
assign led6_o = s_leds[6];
assign led7_o = s_leds[7];
assign s_leds = r_gpio;
// verilog_format: off
tc_io_tri_pad u_uart_tx_o_pad (.pad(uart_tx_o_pad), .c2p(s_uart_tx_o), .c2p_en(1'b1), .p2c());
tc_io_tri_pad u_uart_rx_i_pad (.pad(uart_rx_i_pad), .c2p(), .c2p_en(1'b0), .p2c(s_uart_rx_i));
tc_io_tri_pad u_flash_csb_o_pad (.pad(flash_csb_o_pad), .c2p(s_flash_csb_o), .c2p_en(1'b1), .p2c());
tc_io_tri_pad u_flash_clk_o_pad (.pad(flash_clk_o_pad), .c2p(s_flash_clk_o), .c2p_en(1'b1), .p2c());
tc_io_tri_pad u_flash_io0_io_pad(.pad(flash_io0_io_pad), .c2p(s_flash_io0_do), .c2p_en(s_flash_io0_oe), .p2c(s_flash_io0_di));
tc_io_tri_pad u_flash_io1_io_pad(.pad(flash_io1_io_pad), .c2p(s_flash_io1_do), .c2p_en(s_flash_io1_oe), .p2c(s_flash_io1_di));
tc_io_tri_pad u_flash_io2_io_pad(.pad(flash_io2_io_pad), .c2p(s_flash_io2_do), .c2p_en(s_flash_io2_oe), .p2c(s_flash_io2_di));
tc_io_tri_pad u_led1_o_pad (.pad(led1_o_pad), .c2p(s_leds[1]), .c2p_en(1'b1), .p2c());
tc_io_tri_pad u_led2_o_pad (.pad(led2_o_pad), .c2p(s_leds[2]), .c2p_en(1'b1), .p2c());
tc_io_tri_pad u_led3_o_pad (.pad(led3_o_pad), .c2p(s_leds[3]), .c2p_en(1'b1), .p2c());
tc_io_tri_pad u_led4_o_pad (.pad(led4_o_pad), .c2p(s_leds[4]), .c2p_en(1'b1), .p2c());
tc_io_tri_pad u_led5_o_pad (.pad(led5_o_pad), .c2p(s_leds[5]), .c2p_en(1'b1), .p2c());
tc_io_tri_pad u_led6_o_pad (.pad(led6_o_pad), .c2p(s_leds[6]), .c2p_en(1'b1), .p2c());
tc_io_tri_pad u_led7_o_pad (.pad(led7_o_pad), .c2p(s_leds[7]), .c2p_en(1'b1), .p2c());
// verilog_format: on
assign s_leds = r_gpio;
always @(posedge clk_i) begin
if (!rst_n_i) begin
@@ -104,10 +106,10 @@ module retrosoc #(
) u_picosoc (
.clk_i (clk_i),
.rst_n_i (rst_n_i),
.uart_tx_o (uart_tx_o),
.uart_rx_i (uart_rx_i),
.flash_csb_o (flash_csb_o),
.flash_clk_o (flash_clk_o),
.uart_tx_o (s_uart_tx_o),
.uart_rx_i (s_uart_rx_i),
.flash_csb_o (s_flash_csb_o),
.flash_clk_o (s_flash_clk_o),
.flash_io0_oe_o(s_flash_io0_oe),
.flash_io1_oe_o(s_flash_io1_oe),
.flash_io2_oe_o(s_flash_io2_oe),
+23 -23
View File
@@ -50,23 +50,23 @@ module retrosoc_tb;
end
retrosoc u_retrosoc (
.clk_i (r_clk),
.rst_n_i (s_rst_n),
.led1_o (s_led1),
.led2_o (s_led2),
.led3_o (s_led3),
.led4_o (s_led4),
.led5_o (s_led5),
.led6_o (s_led6),
.led7_o (s_led7),
.uart_rx_i (s_uart_rx),
.uart_tx_o (s_uart_tx),
.flash_csb_o (s_flash_csb),
.flash_clk_o (s_flash_clk),
.flash_io0_io(s_flash_io0),
.flash_io1_io(s_flash_io1),
.flash_io2_io(s_flash_io2),
.flash_io3_io(s_flash_io3)
.clk_i (r_clk),
.rst_n_i (s_rst_n),
.uart_tx_o_pad (s_uart_tx),
.uart_rx_i_pad (s_uart_rx),
.flash_csb_o_pad (s_flash_csb),
.flash_clk_o_pad (s_flash_clk),
.flash_io0_io_pad(s_flash_io0),
.flash_io1_io_pad(s_flash_io1),
.flash_io2_io_pad(s_flash_io2),
.flash_io3_io_pad(s_flash_io3),
.led1_o_pad (s_led1),
.led2_o_pad (s_led2),
.led3_o_pad (s_led3),
.led4_o_pad (s_led4),
.led5_o_pad (s_led5),
.led6_o_pad (s_led6),
.led7_o_pad (s_led7)
);
spiflash u_spiflash (
@@ -109,18 +109,18 @@ module retrosoc_tb;
end
initial begin
if($test$plusargs("behv_wave")) begin
if ($test$plusargs("behv_wave")) begin
$dumpfile("retrosoc_tb.vcd");
$dumpvars(0, retrosoc_tb);
end else if($test$plusargs("syn_wave")) begin
end else if ($test$plusargs("syn_wave")) begin
$dumpfile("retrosoc_syn_tb.vcd");
$dumpvars(0, retrosoc_tb);
$dumpvars(0, retrosoc_tb);
end
repeat (100) begin
repeat (5000) @(posedge r_clk);
// $display("+5000 cycles");
repeat (5000) @(posedge r_clk);
// $display("+5000 cycles");
end
$finish;
// $finish;
end
endmodule
+8 -4
View File
@@ -39,7 +39,8 @@ module spram_model (
({32{cs_10}} & rdata_10) | ({32{cs_11}} & rdata_11);
// 4x4KB=16KB
SPRAM1024X32 u_ram00 (
// SPRAM1024X32 u_ram00 (
tc_sram_1024x32 u_ram00 (
.clk_i (clk),
.cs_i (cs_00),
.addr_i(addr[9:0]),
@@ -49,7 +50,8 @@ module spram_model (
.data_o(rdata_00)
);
SPRAM1024X32 u_ram01 (
// SPRAM1024X32 u_ram01 (
tc_sram_1024x32 u_ram01 (
.clk_i (clk),
.cs_i (cs_01),
.addr_i(addr[9:0]),
@@ -59,7 +61,8 @@ module spram_model (
.data_o(rdata_01)
);
SPRAM1024X32 u_ram10 (
// SPRAM1024X32 u_ram10 (
tc_sram_1024x32 u_ram10 (
.clk_i (clk),
.cs_i (cs_10),
.addr_i(addr[9:0]),
@@ -69,7 +72,8 @@ module spram_model (
.data_o(rdata_10)
);
SPRAM1024X32 u_ram11 (
// SPRAM1024X32 u_ram11 (
tc_sram_1024x32 u_ram11 (
.clk_i (clk),
.cs_i (cs_11),
.addr_i(addr[9:0]),