Testbench simulations are now all working correctly with the pre-release version of sky130_fd_io.
diff --git a/verilog/dv/caravel/mgmt_soc/gpio/gpio_tb.v b/verilog/dv/caravel/mgmt_soc/gpio/gpio_tb.v index 01dc63e..7932cbd 100644 --- a/verilog/dv/caravel/mgmt_soc/gpio/gpio_tb.v +++ b/verilog/dv/caravel/mgmt_soc/gpio/gpio_tb.v
@@ -24,10 +24,10 @@ `include "spiflash.v" module gpio_tb; - wire VDD3V3; - assign VDD3V3 = 1'b1; reg clock; + reg power1; + reg power2; always #10 clock <= (clock === 1'b0); @@ -106,16 +106,28 @@ #2000; end + initial begin // Power-up + power1 <= 1'b0; + power2 <= 1'b0; + #200; + power1 <= 1'b1; + #200; + power2 <= 1'b1; + end + + always @(checkbits) begin #1 $display("GPIO state = %b (%d - %d)", checkbits, checkbits_hi, checkbits_lo); end + wire VDD3V3; wire VDD1V8; wire VSS; + assign VDD3V3 = power1; + assign VDD1V8 = power2; assign VSS = 1'b0; - assign VDD1V8 = 1'b1; // These are the mappings of mprj_io GPIO pads that are set to // specific functions on startup:
diff --git a/verilog/dv/caravel/mgmt_soc/hkspi/hkspi_tb.v b/verilog/dv/caravel/mgmt_soc/hkspi/hkspi_tb.v index c08aa6f..dd1aca2 100644 --- a/verilog/dv/caravel/mgmt_soc/hkspi/hkspi_tb.v +++ b/verilog/dv/caravel/mgmt_soc/hkspi/hkspi_tb.v
@@ -11,6 +11,7 @@ module hkspi_tb; reg clock; reg SDI, CSB, SCK, RSTB; + reg power1, power2; wire gpio; wire [15:0] checkbits; @@ -33,6 +34,15 @@ clock = 0; end + initial begin // Power-up sequence + power1 <= 1'b0; + power2 <= 1'b0; + #200; + power1 <= 1'b1; + #200; + power2 <= 1'b1; + end + // The main testbench is here. Put the housekeeping SPI into // pass-thru mode and read several bytes from the flash SPI. @@ -204,8 +214,8 @@ $display("Read register 16 = 0x%02x (should be 0x03)", tbdata); if(tbdata !== 8'h03) begin $display("Monitor: Test HK SPI (RTL) Failed"); $finish; end read_byte(tbdata); - $display("Read register 17 = 0x%02x (should be 0x02)", tbdata); - if(tbdata !== 8'h02) begin $display("Monitor: Test HK SPI (RTL) Failed"); $finish; end + $display("Read register 17 = 0x%02x (should be 0x12)", tbdata); + if(tbdata !== 8'h12) begin $display("Monitor: Test HK SPI (RTL) Failed"); $finish; end read_byte(tbdata); $display("Read register 18 = 0x%02x (should be 0x04)", tbdata); if(tbdata !== 8'h04) begin $display("Monitor: Test HK SPI (RTL) Failed"); $finish; end @@ -222,9 +232,9 @@ wire VDD1V8; wire VSS; - assign VDD3V3 = 1'b1; + assign VDD3V3 = power1; + assign VDD1V8 = power2; assign VSS = 1'b0; - assign VDD1V8 = 1'b1; wire hk_sck; wire hk_csb;
diff --git a/verilog/dv/caravel/mgmt_soc/mem/mem_tb.v b/verilog/dv/caravel/mgmt_soc/mem/mem_tb.v index c3afb8b..f0fbcae 100644 --- a/verilog/dv/caravel/mgmt_soc/mem/mem_tb.v +++ b/verilog/dv/caravel/mgmt_soc/mem/mem_tb.v
@@ -26,6 +26,7 @@ module mem_tb; reg clock; reg RSTB; + reg power1, power2; wire gpio; wire [15:0] checkbits; @@ -69,6 +70,15 @@ #2000; end + initial begin // Power-up sequence + power1 <= 1'b0; + power2 <= 1'b0; + #200; + power1 <= 1'b1; + #200; + power2 <= 1'b1; + end + always @(checkbits) begin if(checkbits == 16'hA040) begin $display("Mem Test (word rw) started"); @@ -115,8 +125,8 @@ wire VSS; assign VSS = 1'b0; - assign VDD3V3 = 1'b1; - assign VDD1V8 = 1'b1; + assign VDD3V3 = power1; + assign VDD1V8 = power2; caravel uut ( .vddio (VDD3V3),
diff --git a/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v b/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v index c248521..85f0c48 100644 --- a/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v +++ b/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v
@@ -7,6 +7,7 @@ module mprj_ctrl_tb; reg clock; reg RSTB; + reg power1, power2; wire gpio; wire flash_csb; @@ -86,6 +87,15 @@ #2000; end + initial begin + power1 <= 1'b0; + power2 <= 1'b0; + #200; + power1 <= 1'b1; + #200; + power2 <= 1'b1; + end + always @(gpio) begin #1 $display("GPIO state = %b ", gpio); end @@ -94,9 +104,9 @@ wire VDD1V8; wire VSS; + assign VDD3V3 = power1; + assign VDD1V8 = power2; assign VSS = 1'b0; - assign VDD1V8 = 1'b1; - assign VDD3V3 = 1'b1; caravel uut ( .vddio (VDD3V3),
diff --git a/verilog/dv/caravel/mgmt_soc/pass_thru/pass_thru_tb.v b/verilog/dv/caravel/mgmt_soc/pass_thru/pass_thru_tb.v index dbe5322..e741a29 100644 --- a/verilog/dv/caravel/mgmt_soc/pass_thru/pass_thru_tb.v +++ b/verilog/dv/caravel/mgmt_soc/pass_thru/pass_thru_tb.v
@@ -11,6 +11,7 @@ module pass_thru_tb; reg clock; reg SDI, CSB, SCK, RSTB; + reg power1, power2; wire gpio; wire [15:0] checkbits; @@ -33,6 +34,15 @@ clock = 0; end + initial begin // Power-up sequence + power1 <= 1'b0; + power2 <= 1'b0; + #200; + power1 <= 1'b1; + #200; + power2 <= 1'b1; + end + // The main testbench is here. Put the housekeeping SPI into // pass-thru mode and read several bytes from the flash SPI. @@ -195,9 +205,9 @@ wire VDD1V8; wire VSS; - assign VDD3V3 = 1'b1; + assign VDD3V3 = power1; + assign VDD1V8 = power2; assign VSS = 1'b0; - assign VDD1V8 = 1'b1; wire hk_sck; wire hk_csb;
diff --git a/verilog/dv/caravel/mgmt_soc/perf/perf_tb.v b/verilog/dv/caravel/mgmt_soc/perf/perf_tb.v index 3323480..c5721f9 100644 --- a/verilog/dv/caravel/mgmt_soc/perf/perf_tb.v +++ b/verilog/dv/caravel/mgmt_soc/perf/perf_tb.v
@@ -26,6 +26,7 @@ module perf_tb; reg clock; reg RSTB; + reg power1, power2; wire gpio; wire [15:0] checkbits; @@ -73,6 +74,15 @@ #2000; end + initial begin // Power-up sequence + power1 <= 1'b0; + power2 <= 1'b0; + #200; + power1 <= 1'b1; + #200; + power2 <= 1'b1; + end + always @(checkbits) begin //#1 $display("GPIO state = %X ", gpio); if(checkbits == 16'hA000) begin @@ -90,9 +100,9 @@ wire VDD1V8; wire VSS; + assign VDD3V3 = power1; + assign VDD1V8 = power2; assign VSS = 1'b0; - assign VDD1V8 = 1'b1; - assign VDD3V3 = 1'b1; caravel uut ( .vddio (VDD3V3),
diff --git a/verilog/dv/caravel/mgmt_soc/pll/pll_tb.v b/verilog/dv/caravel/mgmt_soc/pll/pll_tb.v index 5921a03..613364b 100644 --- a/verilog/dv/caravel/mgmt_soc/pll/pll_tb.v +++ b/verilog/dv/caravel/mgmt_soc/pll/pll_tb.v
@@ -6,6 +6,8 @@ module pll_tb; reg clock; + reg power1; + reg power2; reg RSTB; wire gpio; @@ -74,6 +76,15 @@ #2000; end + initial begin + power1 <= 1'b0; + power2 <= 1'b0; + #200; + power1 <= 1'b1; + #200; + power2 <= 1'b1; + end + always @(checkbits) begin #1 $display("GPIO state = %b ", checkbits); end @@ -82,9 +93,9 @@ wire VDD1V8; wire VSS; + assign VDD3V3 = power1; + assign VDD1V8 = power2; assign VSS = 1'b0; - assign VDD1V8 = 1'b1; - assign VDD3V3 = 1'b1; caravel uut ( .vddio (VDD3V3),
diff --git a/verilog/dv/caravel/mgmt_soc/sysctrl/sysctrl_tb.v b/verilog/dv/caravel/mgmt_soc/sysctrl/sysctrl_tb.v index 06362c8..6fb2f69 100644 --- a/verilog/dv/caravel/mgmt_soc/sysctrl/sysctrl_tb.v +++ b/verilog/dv/caravel/mgmt_soc/sysctrl/sysctrl_tb.v
@@ -7,6 +7,7 @@ module sysctrl_tb; reg clock; reg RSTB; + reg power1, power2; wire gpio; wire [15:0] checkbits; @@ -104,8 +105,8 @@ $finish; end wait(checkbits == 16'hA04a); - $display(" SPI value = 0x%x (should be 0x02)", spivalue); - if(spivalue !== 32'h02) begin + $display(" SPI value = 0x%x (should be 0x12)", spivalue); + if(spivalue !== 32'h12) begin $display("Monitor: Test Sysctrl (RTL) Failed"); $finish; end @@ -128,6 +129,15 @@ #2000; end + initial begin // Power-up sequence + power1 <= 1'b0; + power2 <= 1'b0; + #200; + power1 <= 1'b1; + #200; + power2 <= 1'b1; + end + always @(checkbits) begin #1 $display("GPIO state = %b ", checkbits); end @@ -136,9 +146,9 @@ wire VDD1V8; wire VSS; + assign VDD3V3 = power1; + assign VDD1V8 = power2; assign VSS = 1'b0; - assign VDD1V8 = 1'b1; - assign VDD3V3 = 1'b1; caravel uut ( .vddio (VDD3V3),
diff --git a/verilog/dv/caravel/mgmt_soc/timer/timer_tb.v b/verilog/dv/caravel/mgmt_soc/timer/timer_tb.v index 44b50db..c41fb6d 100644 --- a/verilog/dv/caravel/mgmt_soc/timer/timer_tb.v +++ b/verilog/dv/caravel/mgmt_soc/timer/timer_tb.v
@@ -24,10 +24,10 @@ `include "spiflash.v" module timer_tb; - wire VDD3V3; - assign VDD3V3 = 1'b1; + reg RSTB; reg clock; + reg power1, power2; always #10 clock <= (clock === 1'b0); @@ -62,8 +62,6 @@ wire flash_io0; wire flash_io1; - reg RSTB; - // Monitor initial begin wait(checkbits == 5'h0a); @@ -107,21 +105,30 @@ initial begin RSTB <= 1'b0; - #1000; RSTB <= 1'b1; // Release reset - #2000; + end + + initial begin // Power-up sequence + power1 <= 1'b0; + power2 <= 1'b0; + #200; + power1 <= 1'b1; + #200; + power2 <= 1'b1; end always @(checkbits) begin #1 $display("Timer state = %b (%d)", countbits, countbits); end + wire VDD3V3; wire VDD1V8; wire VSS; + assign VDD3V3 = power1; + assign VDD1V8 = power2; assign VSS = 1'b0; - assign VDD1V8 = 1'b1; // These are the mappings of mprj_io GPIO pads that are set to // specific functions on startup:
diff --git a/verilog/dv/caravel/mgmt_soc/timer2/timer2_tb.v b/verilog/dv/caravel/mgmt_soc/timer2/timer2_tb.v index 4baea92..cd04097 100644 --- a/verilog/dv/caravel/mgmt_soc/timer2/timer2_tb.v +++ b/verilog/dv/caravel/mgmt_soc/timer2/timer2_tb.v
@@ -24,10 +24,10 @@ `include "spiflash.v" module timer2_tb; - wire VDD3V3; - assign VDD3V3 = 1'b1; reg clock; + reg RSTB; + reg power1, power2; always #10 clock <= (clock === 1'b0); @@ -62,8 +62,6 @@ wire flash_io0; wire flash_io1; - reg RSTB; - // Monitor initial begin wait(checkbits == 5'h0a); @@ -107,21 +105,30 @@ initial begin RSTB <= 1'b0; - #1000; RSTB <= 1'b1; // Release reset - #2000; + end + + initial begin // Power-up sequence + power1 <= 1'b0; + power2 <= 1'b0; + #200; + power1 <= 1'b1; + #200; + power2 <= 1'b1; end always @(checkbits) begin #1 $display("Timer state = %b (%d)", countbits, countbits); end + wire VDD3V3; wire VDD1V8; wire VSS; + assign VDD3V3 = power1; + assign VDD1V8 = power2; assign VSS = 1'b0; - assign VDD1V8 = 1'b1; // These are the mappings of mprj_io GPIO pads that are set to // specific functions on startup:
diff --git a/verilog/dv/caravel/mgmt_soc/uart/uart_tb.v b/verilog/dv/caravel/mgmt_soc/uart/uart_tb.v index b3f8bd3..6907155 100644 --- a/verilog/dv/caravel/mgmt_soc/uart/uart_tb.v +++ b/verilog/dv/caravel/mgmt_soc/uart/uart_tb.v
@@ -27,6 +27,7 @@ module uart_tb; reg clock; reg RSTB; + reg power1, power2; wire gpio; wire flash_csb; @@ -66,6 +67,15 @@ #2000; end + initial begin // Power-up sequence + power1 <= 1'b0; + power2 <= 1'b0; + #200; + power1 <= 1'b1; + #200; + power2 <= 1'b1; + end + always @(checkbits) begin if(checkbits == 16'hA000) begin $display("UART Test started"); @@ -80,9 +90,9 @@ wire VDD1V8; wire VSS; + assign VDD3V3 = power1; + assign VDD1V8 = power2; assign VSS = 1'b0; - assign VDD1V8 = 1'b1; - assign VDD3V3 = 1'b1; caravel uut ( .vddio (VDD3V3),
diff --git a/verilog/dv/caravel/user_proj_example/io_ports/io_ports_tb.v b/verilog/dv/caravel/user_proj_example/io_ports/io_ports_tb.v index a83b64f..741a982 100644 --- a/verilog/dv/caravel/user_proj_example/io_ports/io_ports_tb.v +++ b/verilog/dv/caravel/user_proj_example/io_ports/io_ports_tb.v
@@ -7,7 +7,8 @@ module io_ports_tb; reg clock; reg RSTB; - wire SDO; + reg power1, power2; + reg power3, power4; wire gpio; wire [36:0] mprj_io; @@ -61,27 +62,43 @@ initial begin RSTB <= 1'b0; - #1000; - RSTB <= 1'b1; // Release reset #2000; + RSTB <= 1'b1; // Release reset + end + + initial begin // Power-up sequence + power1 <= 1'b0; + power2 <= 1'b0; + power3 <= 1'b0; + power4 <= 1'b0; + #200; + power1 <= 1'b1; + #200; + power2 <= 1'b1; + #200; + power3 <= 1'b1; + #200; + power4 <= 1'b1; end always @(mprj_io) begin #1 $display("MPRJ-IO state = %b ", mprj_io[7:0]); end - wire VDD1V8; - wire VDD3V3; - wire VSS; - wire flash_csb; wire flash_clk; wire flash_io0; wire flash_io1; + wire VDD1V8; + wire VDD3V3; + wire VSS; + + assign VDD3V3 = power1; + assign VDD1V8 = power2; + assign USER_VDD3V3 = power3; + assign USER_VDD1V8 = power4; assign VSS = 1'b0; - assign VDD1V8 = 1'b1; - assign VDD3V3 = 1'b1; caravel uut ( .vddio (VDD3V3), @@ -90,12 +107,12 @@ .vssa (VSS), .vccd (VDD1V8), .vssd (VSS), - .vdda1 (VDD3V3), - .vdda2 (VDD3V3), + .vdda1 (USER_VDD3V3), + .vdda2 (USER_VDD3V3), .vssa1 (VSS), .vssa2 (VSS), - .vccd1 (VDD1V8), - .vccd2 (VDD1V8), + .vccd1 (USER_VDD1V8), + .vccd2 (USER_VDD1V8), .vssd1 (VSS), .vssd2 (VSS), .clock (clock),
diff --git a/verilog/dv/caravel/user_proj_example/la_test1/la_test1_tb.v b/verilog/dv/caravel/user_proj_example/la_test1/la_test1_tb.v index df9bfaf..9bee0a6 100644 --- a/verilog/dv/caravel/user_proj_example/la_test1/la_test1_tb.v +++ b/verilog/dv/caravel/user_proj_example/la_test1/la_test1_tb.v
@@ -8,7 +8,7 @@ module la_test1_tb; reg clock; reg RSTB; - wire SDO; + reg power1, power2; wire gpio; wire uart_tx; @@ -55,18 +55,27 @@ #2000; end - wire VDD1V8; - wire VDD3V3; - wire VSS; - + initial begin // Power-up sequence + power1 <= 1'b0; + power2 <= 1'b0; + #200; + power1 <= 1'b1; + #200; + power2 <= 1'b1; + end + wire flash_csb; wire flash_clk; wire flash_io0; wire flash_io1; + wire VDD1V8; + wire VDD3V3; + wire VSS; + + assign VDD3V3 = power1; + assign VDD1V8 = power2; assign VSS = 1'b0; - assign VDD1V8 = 1'b1; - assign VDD3V3 = 1'b1; caravel uut ( .vddio (VDD3V3),
diff --git a/verilog/dv/caravel/user_proj_example/la_test2/la_test2_tb.v b/verilog/dv/caravel/user_proj_example/la_test2/la_test2_tb.v index fff6e2e..54b671f 100644 --- a/verilog/dv/caravel/user_proj_example/la_test2/la_test2_tb.v +++ b/verilog/dv/caravel/user_proj_example/la_test2/la_test2_tb.v
@@ -7,7 +7,7 @@ module la_test2_tb; reg clock; reg RSTB; - wire SDO; + reg power1, power2; wire gpio; wire [36:0] mprj_io; @@ -51,18 +51,27 @@ #2000; end - wire VDD1V8; - wire VDD3V3; - wire VSS; - + initial begin // Power-up sequence + power1 <= 1'b0; + power2 <= 1'b0; + #200; + power1 <= 1'b1; + #200; + power2 <= 1'b1; + end + wire flash_csb; wire flash_clk; wire flash_io0; wire flash_io1; + wire VDD1V8; + wire VDD3V3; + wire VSS; + + assign VDD3V3 = power1; + assign VDD1V8 = power2; assign VSS = 1'b0; - assign VDD1V8 = 1'b1; - assign VDD3V3 = 1'b1; caravel uut ( .vddio (VDD3V3),
diff --git a/verilog/rtl/caravel.v b/verilog/rtl/caravel.v index 10bcde8..433dd91 100644 --- a/verilog/rtl/caravel.v +++ b/verilog/rtl/caravel.v
@@ -390,12 +390,11 @@ wire [31:0] mprj_dat_o_user; mgmt_protect mgmt_buffers ( - `ifdef LVS .vccd(vccd), .vssd(vssd), .vccd1(vccd1), .vssd1(vssd1), - `endif + .caravel_clk(caravel_clk), .caravel_clk2(caravel_clk2), .caravel_rstn(caravel_rstn), @@ -429,16 +428,15 @@ .IO_PADS(`MPRJ_IO_PADS), .PWR_PADS(`MPRJ_PWR_PADS) ) mprj ( - `ifdef LVS - vdda1, // User area 1 3.3V power - vdda2, // User area 2 3.3V power - vssa1, // User area 1 analog ground - vssa2, // User area 2 analog ground - vccd1, // User area 1 1.8V power - vccd2, // User area 2 1.8V power - vssa1, // User area 1 digital ground - vssa2, // User area 2 digital ground - `endif + .vdda1(vdda1), // User area 1 3.3V power + .vdda2(vdda2), // User area 2 3.3V power + .vssa1(vssa1), // User area 1 analog ground + .vssa2(vssa2), // User area 2 analog ground + .vccd1(vccd1), // User area 1 1.8V power + .vccd2(vccd2), // User area 2 1.8V power + .vssd1(vssd1), // User area 1 digital ground + .vssd2(vssd2), // User area 2 digital ground + .wb_clk_i(mprj_clock), .wb_rst_i(!mprj_resetn), // MGMT SoC Wishbone Slave @@ -564,13 +562,11 @@ ); sky130_fd_sc_hvl__lsbufhv2lv porb_level ( - `ifdef LVS - .vpwr(vddio), - .vpb(vddio), - .lvpwr(vccd), - .vnb(vssio), - .vgnd(vssio), - `endif + .VPWR(vddio), + .VPB(vddio), + .LVPWR(vccd), + .VNB(vssio), + .VGND(vssio), .A(porb_h), .X(porb_l) ); @@ -578,6 +574,8 @@ user_id_programming #( .USER_PROJECT_ID(USER_PROJECT_ID) ) user_id_value ( + .vdd1v8(vccd), + .vss(vssd), .mask_rev(mask_rev) ); @@ -590,13 +588,11 @@ // XRES (chip input pin reset) reset level converter sky130_fd_sc_hvl__lsbufhv2lv rstb_level ( - `ifdef LVS - .vpwr(vddio), - .vpb(vddio), - .lvpwr(vdd1v8), - .vnb(vssio), - .vgnd(vssio), - `endif + .VPWR(vddio), + .VPB(vddio), + .LVPWR(vccd), + .VNB(vssio), + .VGND(vssio), .A(rstb_h), .X(rstb_l) );
diff --git a/verilog/rtl/gpio_control_block.v b/verilog/rtl/gpio_control_block.v index ab08e46..681da94 100644 --- a/verilog/rtl/gpio_control_block.v +++ b/verilog/rtl/gpio_control_block.v
@@ -208,23 +208,19 @@ /* Buffer user_gpio_in with an enable that is set by the user domain vccd */ sky130_fd_sc_hd__conb_1 gpio_logic_high ( - `ifdef LVS .VPWR(vccd1), .VGND(vssd1), .VPB(vccd1), .VNB(vssd1), - `endif .HI(gpio_logic1), .LO() ); sky130_fd_sc_hd__einvp_8 gpio_in_buf ( - `ifdef LVS .VPWR(vccd), .VGND(vssd), .VPB(vccd), .VNB(vssd), - `endif .Z(user_gpio_in), .A(~gpio_in_unbuf), .TE(gpio_logic1)
diff --git a/verilog/rtl/mgmt_protect.v b/verilog/rtl/mgmt_protect.v index 1b04731..8865ee4 100644 --- a/verilog/rtl/mgmt_protect.v +++ b/verilog/rtl/mgmt_protect.v
@@ -14,12 +14,10 @@ /*----------------------------------------------------------------------*/ module mgmt_protect ( -`ifdef LVS inout vccd, inout vssd, inout vccd1, inout vssd1, -`endif input caravel_clk, input caravel_clk2, @@ -48,119 +46,99 @@ wire [73:0] mprj_logic1; sky130_fd_sc_hd__conb_1 mprj_logic_high [73:0] ( - `ifdef LVS .VPWR(vccd1), .VGND(vssd1), .VPB(vccd1), .VNB(vssd1), - `endif .HI(mprj_logic1), .LO() ); sky130_fd_sc_hd__einvp_8 mprj_rstn_buf ( - `ifdef LVS .VPWR(vccd), .VGND(vssd), .VPB(vccd), .VNB(vssd), - `endif .Z(user_resetn), .A(~caravel_rstn), .TE(mprj_logic1[0]) ); sky130_fd_sc_hd__einvp_8 mprj_clk_buf ( - `ifdef LVS .VPWR(vccd), .VGND(vssd), .VPB(vccd), .VNB(vssd), - `endif .Z(user_clock), .A(~caravel_clk), .TE(mprj_logic1[1]) ); sky130_fd_sc_hd__einvp_8 mprj_clk2_buf ( - `ifdef LVS .VPWR(vccd), .VGND(vssd), .VPB(vccd), .VNB(vssd), - `endif .Z(user_clock2), .A(~caravel_clk2), .TE(mprj_logic1[2]) ); sky130_fd_sc_hd__einvp_8 mprj_cyc_buf ( - `ifdef LVS .VPWR(vccd), .VGND(vssd), .VPB(vccd), .VNB(vssd), - `endif .Z(mprj_cyc_o_user), .A(~mprj_cyc_o_core), .TE(mprj_logic1[3]) ); sky130_fd_sc_hd__einvp_8 mprj_stb_buf ( - `ifdef LVS .VPWR(vccd), .VGND(vssd), .VPB(vccd), .VNB(vssd), - `endif .Z(mprj_stb_o_user), .A(~mprj_stb_o_core), .TE(mprj_logic1[4]) ); sky130_fd_sc_hd__einvp_8 mprj_we_buf ( - `ifdef LVS .VPWR(vccd), .VGND(vssd), .VPB(vccd), .VNB(vssd), - `endif .Z(mprj_we_o_user), .A(~mprj_we_o_core), .TE(mprj_logic1[5]) ); sky130_fd_sc_hd__einvp_8 mprj_sel_buf [3:0] ( - `ifdef LVS .VPWR(vccd), .VGND(vssd), .VPB(vccd), .VNB(vssd), - `endif .Z(mprj_sel_o_user), .A(~mprj_sel_o_core), .TE(mprj_logic1[9:6]) ); sky130_fd_sc_hd__einvp_8 mprj_adr_buf [31:0] ( - `ifdef LVS .VPWR(vccd), .VGND(vssd), .VPB(vccd), .VNB(vssd), - `endif .Z(mprj_adr_o_user), .A(~mprj_adr_o_core), .TE(mprj_logic1[41:10]) ); sky130_fd_sc_hd__einvp_8 mprj_dat_buf [31:0] ( - `ifdef LVS .VPWR(vccd), .VGND(vssd), .VPB(vccd), .VNB(vssd), - `endif .Z(mprj_dat_o_user), .A(~mprj_dat_o_core), .TE(mprj_logic1[73:42]) @@ -173,12 +151,10 @@ /* power-down of vccd1. */ sky130_fd_sc_hd__einvp_8 la_buf [127:0] ( - `ifdef LVS .VPWR(vccd), .VGND(vssd), .VPB(vccd), .VNB(vssd), - `endif .Z(la_data_in_mprj), .A(~la_output_core), .TE(~la_oen)
diff --git a/verilog/rtl/pads.v b/verilog/rtl/pads.v index e427b08..9ce690a 100644 --- a/verilog/rtl/pads.v +++ b/verilog/rtl/pads.v
@@ -38,7 +38,7 @@ .VDDIO(vddio),\ .VCCD(vccd),\ .VSSIO(vssio),\ - .VSSD(vssa),\ + .VSSD(vssd),\ .VSSIO_Q(vssio_q), `else `define USER1_ABUTMENT_PINS @@ -64,30 +64,30 @@ `ifndef TOP_ROUTING \ .PAD(X), \ `endif \ - .OUT(vssa), \ + .OUT(vssd), \ .OE_N(vccd), \ - .HLD_H_N(vddio), \ + .HLD_H_N(vddio), \ .ENABLE_H(porb_h), \ .ENABLE_INP_H(loop_``X), \ .ENABLE_VDDA_H(porb_h), \ .ENABLE_VSWITCH_H(vssa), \ .ENABLE_VDDIO(vccd), \ .INP_DIS(por), \ - .IB_MODE_SEL(vssa), \ - .VTRIP_SEL(vssa), \ - .SLOW(vssa), \ - .HLD_OVR(vssa), \ - .ANALOG_EN(vssa), \ - .ANALOG_SEL(vssa), \ - .ANALOG_POL(vssa), \ - .DM({vssa, vssa, vccd}), \ + .IB_MODE_SEL(vssd), \ + .VTRIP_SEL(vssd), \ + .SLOW(vssd), \ + .HLD_OVR(vssd), \ + .ANALOG_EN(vssd), \ + .ANALOG_SEL(vssd), \ + .ANALOG_POL(vssd), \ + .DM({vssd, vssd, vccd}), \ .PAD_A_NOESD_H(), \ .PAD_A_ESD_0_H(), \ .PAD_A_ESD_1_H(), \ .IN(Y), \ .IN_H(), \ .TIE_HI_ESD(), \ - .TIE_LO_ESD(loop_``X) ) + .TIE_LO_ESD(loop_``X) ) `define OUTPUT_PAD(X,Y,INPUT_DIS,OUT_EN_N) \ wire loop_``X; \ @@ -105,14 +105,14 @@ .ENABLE_VSWITCH_H(vssa), \ .ENABLE_VDDIO(vccd), \ .INP_DIS(INPUT_DIS), \ - .IB_MODE_SEL(vssa), \ - .VTRIP_SEL(vssa), \ - .SLOW(vssa), \ - .HLD_OVR(vssa), \ - .ANALOG_EN(vssa), \ - .ANALOG_SEL(vssa), \ - .ANALOG_POL(vssa), \ - .DM({vccd, vccd, vssa}), \ + .IB_MODE_SEL(vssd), \ + .VTRIP_SEL(vssd), \ + .SLOW(vssd), \ + .HLD_OVR(vssd), \ + .ANALOG_EN(vssd), \ + .ANALOG_SEL(vssd), \ + .ANALOG_POL(vssd), \ + .DM({vccd, vccd, vssd}), \ .PAD_A_NOESD_H(), \ .PAD_A_ESD_0_H(), \ .PAD_A_ESD_1_H(), \ @@ -136,13 +136,13 @@ .ENABLE_VSWITCH_H(vssa), \ .ENABLE_VDDIO(vccd), \ .INP_DIS(INPUT_DIS), \ - .IB_MODE_SEL(vssa), \ - .VTRIP_SEL(vssa), \ - .SLOW(vssa), \ - .HLD_OVR(vssa), \ - .ANALOG_EN(vssa), \ - .ANALOG_SEL(vssa), \ - .ANALOG_POL(vssa), \ + .IB_MODE_SEL(vssd), \ + .VTRIP_SEL(vssd), \ + .SLOW(vssd), \ + .HLD_OVR(vssd), \ + .ANALOG_EN(vssd), \ + .ANALOG_SEL(vssd), \ + .ANALOG_POL(vssd), \ .DM(MODE), \ .PAD_A_NOESD_H(), \ .PAD_A_ESD_0_H(), \
diff --git a/verilog/rtl/simple_por.v b/verilog/rtl/simple_por.v index 4b92a55..f308fbf 100644 --- a/verilog/rtl/simple_por.v +++ b/verilog/rtl/simple_por.v
@@ -1,3 +1,5 @@ +`timescale 1 ns / 1 ps + module simple_por( input vdd3v3, input vss, @@ -12,7 +14,7 @@ // two schmitt triggers for strong hysteresis/glitch tolerance. initial begin - inode <= 1'b0; + inode <= 1'b0; end // Emulate current source on capacitor as a 500ns delay either up or @@ -28,23 +30,19 @@ // Instantiate two shmitt trigger buffers in series sky130_fd_sc_hvl__schmittbuf hystbuf1 ( -`ifdef LVS .VPWR(vdd3v3), .VGND(vss), .VPB(vdd3v3), .VNB(vss), -`endif .A(inode), .X(mid) ); sky130_fd_sc_hvl__schmittbuf hystbuf2 ( -`ifdef LVS .VPWR(vdd3v3), .VGND(vss), .VPB(vdd3v3), .VNB(vss), -`endif .A(mid), .X(porb_h) );
diff --git a/verilog/rtl/user_id_programming.v b/verilog/rtl/user_id_programming.v index 30f5eb8..5133605 100644 --- a/verilog/rtl/user_id_programming.v +++ b/verilog/rtl/user_id_programming.v
@@ -6,6 +6,8 @@ module user_id_programming #( parameter [ 0:0] USER_PROJECT_ID = 32'h0 ) ( + inout vdd1v8, + inout vss, output [31:0] mask_rev ); wire [31:0] mask_rev; @@ -15,12 +17,10 @@ // For the mask revision input, use an array of digital constant logic cells sky130_fd_sc_hd__conb_1 mask_rev_value [31:0] ( - `ifdef LVS .VPWR(vdd1v8), .VPB(vdd1v8), .VNB(vss), .VGND(vss), - `endif .HI(user_proj_id_high), .LO(user_proj_id_low) );
diff --git a/verilog/rtl/user_proj_example.v b/verilog/rtl/user_proj_example.v index 4c2a6b9..1edc2dc 100644 --- a/verilog/rtl/user_proj_example.v +++ b/verilog/rtl/user_proj_example.v
@@ -24,7 +24,6 @@ parameter PWR_PADS = 4, parameter BITS = 32 )( -`ifdef LVS inout vdda1, // User area 1 3.3V supply inout vdda2, // User area 2 3.3V supply inout vssa1, // User area 1 analog ground @@ -33,7 +32,6 @@ inout vccd2, // User area 2 1.8v supply inout vssd1, // User area 1 digital ground inout vssd2, // User area 2 digital ground -`endif // Wishbone Slave ports (WB MI A) input wb_clk_i,