Caravel 2nd phase (branch phase2): First pass at removing the analog signals left over from Raven/Ravenna but not used on StriVe. Reduced the GPIO for the management area to 2 bits. Removed additional unused signals, removed the controls to the deleted analog signals, and reduced the remaining controls. Renamed the digital libraries for the sky130 Google/SkyWater naming conventions. Work in progress; much more left to do.
diff --git a/verilog/dv/harness/defs.h b/verilog/dv/caravel/defs.h similarity index 71% rename from verilog/dv/harness/defs.h rename to verilog/dv/caravel/defs.h index d9eec3a..68ef6b0 100644 --- a/verilog/dv/harness/defs.h +++ b/verilog/dv/caravel/defs.h
@@ -89,53 +89,16 @@ #define reg_spi_pll_bypass (*(volatile uint32_t*)0x2E000018) // System Area (0x2F00_0000) -#define reg_rcosc_enable (*(volatile uint32_t*)0x2F000000) -#define reg_rcosc_out_dest (*(volatile uint32_t*)0x2F000004) - -#define reg_xtal_out_dest (*(volatile uint32_t*)0x2F000008) #define reg_pll_out_dest (*(volatile uint32_t*)0x2F00000c) #define reg_trap_out_dest (*(volatile uint32_t*)0x2F000010) - #define reg_irq7_source (*(volatile uint32_t*)0x2F000014) #define reg_irq8_source (*(volatile uint32_t*)0x2F000018) -#define reg_overtemp_ena (*(volatile uint32_t*)0x2F00001c) -#define reg_overtemp_data (*(volatile uint32_t*)0x2F000020) -#define reg_overtemp_out_dest (*(volatile uint32_t*)0x2F000024) - // Crosbbar Slave Addresses (0x8000_0000 - 0xB000_0000) #define qspi_ctrl_slave (*(volatile uint32_t*)0x80000000) #define storage_area_slave (*(volatile uint32_t*)0x90000000) #define mega_any_slave1 (*(volatile uint32_t*)0xA0000000) #define mega_any_slave2 (*(volatile uint32_t*)0xB0000000) -// #define reg_adc0_ena (*(volatile uint32_t*)0x21000010) -// #define reg_adc0_data (*(volatile uint32_t*)0x21000014) -// #define reg_adc0_done (*(volatile uint32_t*)0x21000018) -// #define reg_adc0_convert (*(volatile uint32_t*)0x2100001c) -// #define reg_adc0_clk_source (*(volatile uint32_t*)0x21000020) -// #define reg_adc0_input_source (*(volatile uint32_t*)0x21000024) - -// #define reg_adc1_ena (*(volatile uint32_t*)0x21000030) -// #define reg_adc1_data (*(volatile uint32_t*)0x21000034) -// #define reg_adc1_done (*(volatile uint32_t*)0x21000038) -// #define reg_adc1_convert (*(volatile uint32_t*)0x2100003c) -// #define reg_adc1_clk_source (*(volatile uint32_t*)0x21000040) -// #define reg_adc1_input_source (*(volatile uint32_t*)0x21000044) - -// #define reg_dac_ena (*(volatile uint32_t*)0x21000050) -// #define reg_dac_data (*(volatile uint32_t*)0x21000054) - -// #define reg_comp_enable (*(volatile uint32_t*)0x21000060) -// #define reg_comp_n_source (*(volatile uint32_t*)0x21000064) -// #define reg_comp_p_source (*(volatile uint32_t*)0x21000068) -// #define reg_comp_out_dest (*(volatile uint32_t*)0x2100006c) - -// #define reg_analog_out_sel (*(volatile uint32_t*)0x210000c0) -// #define reg_analog_out_bias_ena (*(volatile uint32_t*)0x210000c4) -// #define reg_analog_out_ena (*(volatile uint32_t*)0x210000c8) - -// #define reg_bandgap_ena (*(volatile uint32_t*)0x210000d0) - // -------------------------------------------------------- #endif
diff --git a/verilog/dv/harness/mgmt_soc/Makefile b/verilog/dv/caravel/mgmt_soc/Makefile similarity index 100% rename from verilog/dv/harness/mgmt_soc/Makefile rename to verilog/dv/caravel/mgmt_soc/Makefile
diff --git a/verilog/dv/harness/mgmt_soc/gpio/Makefile b/verilog/dv/caravel/mgmt_soc/gpio/Makefile similarity index 100% rename from verilog/dv/harness/mgmt_soc/gpio/Makefile rename to verilog/dv/caravel/mgmt_soc/gpio/Makefile
diff --git a/verilog/dv/harness/mgmt_soc/gpio/gpio.c b/verilog/dv/caravel/mgmt_soc/gpio/gpio.c similarity index 100% rename from verilog/dv/harness/mgmt_soc/gpio/gpio.c rename to verilog/dv/caravel/mgmt_soc/gpio/gpio.c
diff --git a/verilog/dv/harness/mgmt_soc/gpio/gpio_tb.v b/verilog/dv/caravel/mgmt_soc/gpio/gpio_tb.v similarity index 62% rename from verilog/dv/harness/mgmt_soc/gpio/gpio_tb.v rename to verilog/dv/caravel/mgmt_soc/gpio/gpio_tb.v index 35c8cf3..40fffaa 100644 --- a/verilog/dv/harness/mgmt_soc/gpio/gpio_tb.v +++ b/verilog/dv/caravel/mgmt_soc/gpio/gpio_tb.v
@@ -20,48 +20,19 @@ `timescale 1 ns / 1 ps -`include "harness_chip.v" +`include "caravel.v" `include "spiflash.v" module gpio_tb; - reg XCLK; - wire VDD3V3; assign VDD3V3 = 1'b1; - reg XI; + reg clock; - reg real adc_h, adc_l; - reg real adc_0, adc_1; - reg real comp_n, comp_p; - - // External clock is used by default. Make this artificially fast for the - // simulation. Normally this would be a slow clock and the digital PLL - // would be the fast clock. - - always #10 XCLK <= (XCLK === 1'b0); - always #220 XI <= (XI === 1'b0); + always #10 clock <= (clock === 1'b0); initial begin - XI = 0; - XCLK = 0; - end - - initial begin - // Analog input pin values - adc_h = 0.0; - adc_l = 0.0; - adc_0 = 0.0; - adc_1 = 0.0; - comp_n = 0.0; - comp_p = 0.0; - #2000; - adc_h = 3.25; - adc_l = 0.05; - adc_0 = 1.0; - adc_1 = 1.5; - comp_n = 2.0; - comp_p = 2.5; + clock = 0; end initial begin @@ -79,13 +50,13 @@ $finish; end - wire [15:0] gpio; + wire [1:0] gpio; - reg [7:0] gpio_lo; - wire [7:0] gpio_hi; + reg gpio_lo; + reg gpio_hi; - assign gpio[7:0] = gpio_lo; - assign gpio_hi = gpio[15:8]; + assign gpio[0] = gpio_lo; + assign gpio[1] = gpio_hi; wire flash_csb; wire flash_clk; @@ -99,32 +70,32 @@ // Transactor initial begin - gpio_lo = {8{1'bz}}; - wait(gpio_hi==8'hA0); - gpio_lo = 8'hF0; - wait(gpio_hi==8'h0B); - gpio_lo = 8'h0F; - wait(gpio_hi==8'hAB); - gpio_lo = 8'h0; - repeat (1000) @(posedge XCLK); - gpio_lo = 8'h1; - repeat (1000) @(posedge XCLK); - gpio_lo = 8'h3; + gpio_lo = 1'bz; + wait(gpio_hi == 1'b1); + gpio_lo = 1'b0; + wait(gpio_hi == 1'b0); + gpio_lo = 1'b1; + wait(gpio_hi == 1'hb1); + gpio_lo = 1'b0; + repeat (1000) @(posedge clock); + gpio_lo = 1'b1; + repeat (1000) @(posedge clock); + gpio_lo = 1'b0; end // Monitor initial begin - wait(gpio_hi==8'hA0); - wait(gpio[7:0]==8'hF0); - wait(gpio_hi==8'h0B); - wait(gpio[7:0]==8'h0F); - wait(gpio_hi==8'hAB); - wait(gpio[7:0]==8'h00); - wait(gpio_hi==8'h01); - wait(gpio[7:0]==8'h01); - wait(gpio_hi==8'h02); - wait(gpio[7:0]==8'h03); - wait(gpio_hi==8'h04); + wait(gpio_hi == 1'b0); + wait(gpio == 2'b0); + wait(gpio_hi== 1'b1); + wait(gpio == 2'b0); + wait(gpio_hi== 1'b1); + wait(gpio == 2'b0); + wait(gpio_hi== 1'b0); + wait(gpio == 2'b01); + wait(gpio_hi== 1'b0); + wait(gpio == 2'b0); + wait(gpio_hi== 1'b1); $display("Monitor: Test GPIO (RTL) Passed"); $finish; end @@ -151,12 +122,11 @@ assign VSS = 1'b0; assign VDD1V8 = 1'b1; - harness_chip uut ( - .vdd (VDD3V3), + caravel uut ( + .vdd3v3 (VDD3V3), .vdd1v8 (VDD1V8), .vss (VSS), - .xi (XI), - .xclk (XCLK), + .clock (CLOCK), .SDI (SDI), .SDO (SDO), .CSB (CSB), @@ -171,13 +141,7 @@ .flash_io1(flash_io1), .flash_io2(flash_io2), .flash_io3(flash_io3), - .adc_high (adc_h), - .adc_low (adc_l), - .adc0_in (adc_0), - .adc1_in (adc_1), - .RSTB (RSTB), - .comp_inp (comp_p), - .comp_inn (comp_n) + .RSTB (RSTB) ); spiflash #(
diff --git a/verilog/dv/harness/mgmt_soc/hkspi/Makefile b/verilog/dv/caravel/mgmt_soc/hkspi/Makefile similarity index 100% rename from verilog/dv/harness/mgmt_soc/hkspi/Makefile rename to verilog/dv/caravel/mgmt_soc/hkspi/Makefile
diff --git a/verilog/dv/harness/mgmt_soc/hkspi/hkspi.c b/verilog/dv/caravel/mgmt_soc/hkspi/hkspi.c similarity index 100% rename from verilog/dv/harness/mgmt_soc/hkspi/hkspi.c rename to verilog/dv/caravel/mgmt_soc/hkspi/hkspi.c
diff --git a/verilog/dv/harness/mgmt_soc/hkspi/hkspi_tb.v b/verilog/dv/caravel/mgmt_soc/hkspi/hkspi_tb.v similarity index 89% rename from verilog/dv/harness/mgmt_soc/hkspi/hkspi_tb.v rename to verilog/dv/caravel/mgmt_soc/hkspi/hkspi_tb.v index 09d1dab..13677f7 100644 --- a/verilog/dv/harness/mgmt_soc/hkspi/hkspi_tb.v +++ b/verilog/dv/caravel/mgmt_soc/hkspi/hkspi_tb.v
@@ -4,21 +4,15 @@ `timescale 1 ns / 1 ps -`include "harness_chip.v" +`include "caravel.v" `include "spiflash.v" `include "tbuart.v" module hkspi_tb; - reg XCLK; - reg XI; - - reg real adc_h, adc_l; - reg real adc_0, adc_1; - reg real comp_n, comp_p; + reg clock; reg SDI, CSB, SCK, RSTB; - - wire [15:0] gpio; + wire [1:0] gpio; wire flash_csb; wire flash_clk; @@ -29,22 +23,10 @@ wire SDO; - always #10 XCLK <= (XCLK === 1'b0); - always #220 XI <= (XI === 1'b0); + always #10 clock <= (clock === 1'b0); initial begin - XI = 0; - XCLK = 0; - end - - initial begin - // Analog input pin values (static) - adc_h = 0.0; - adc_l = 0.0; - adc_0 = 0.0; - adc_1 = 0.0; - comp_n = 0.0; - comp_p = 0.0; + clock = 0; end // The main testbench is here. Put the housekeeping SPI into @@ -209,12 +191,11 @@ assign VSS = 1'b0; assign VDD1V8 = 1'b1; - harness_chip uut ( - .vdd (VDD3V3), + caravel uut ( + .vdd3v3 (VDD3V3), .vdd1v8 (VDD1V8), .vss (VSS), - .xi (XI), - .xclk (XCLK), + .clock (clock), .SDI (SDI), .SDO (SDO), .CSB (CSB), @@ -229,13 +210,7 @@ .flash_io1(flash_io1), .flash_io2(flash_io2), .flash_io3(flash_io3), - .adc_high (adc_h), - .adc_low (adc_l), - .adc0_in (adc_0), - .adc1_in (adc_1), - .RSTB (RSTB), - .comp_inp (comp_p), - .comp_inn (comp_n) + .RSTB (RSTB) ); spiflash #(
diff --git a/verilog/dv/harness/mgmt_soc/mem/Makefile b/verilog/dv/caravel/mgmt_soc/mem/Makefile similarity index 100% rename from verilog/dv/harness/mgmt_soc/mem/Makefile rename to verilog/dv/caravel/mgmt_soc/mem/Makefile
diff --git a/verilog/dv/harness/mgmt_soc/mem/mem.c b/verilog/dv/caravel/mgmt_soc/mem/mem.c similarity index 100% rename from verilog/dv/harness/mgmt_soc/mem/mem.c rename to verilog/dv/caravel/mgmt_soc/mem/mem.c
diff --git a/verilog/dv/harness/mgmt_soc/mem/mem_tb.v b/verilog/dv/caravel/mgmt_soc/mem/mem_tb.v similarity index 83% rename from verilog/dv/harness/mgmt_soc/mem/mem_tb.v rename to verilog/dv/caravel/mgmt_soc/mem/mem_tb.v index 0d0c93d..5248cd7 100644 --- a/verilog/dv/harness/mgmt_soc/mem/mem_tb.v +++ b/verilog/dv/caravel/mgmt_soc/mem/mem_tb.v
@@ -20,19 +20,15 @@ `timescale 1 ns / 1 ps -`include "harness_chip.v" +`include "caravel.v" `include "spiflash.v" module mem_tb; - reg XCLK; - reg XI; + reg clock; - reg real adc_h, adc_l; - reg real adc_0, adc_1; - reg real comp_n, comp_p; reg SDI, CSB, SCK, RSTB; - wire [15:0] gpio; + wire [1:0] gpio; wire flash_csb; wire flash_clk; wire flash_io0; @@ -45,29 +41,10 @@ // simulation. Normally this would be a slow clock and the digital PLL // would be the fast clock. - always #10 XCLK <= (XCLK === 1'b0); - always #220 XI <= (XI === 1'b0); + always #10 clock <= (clock === 1'b0); initial begin - XI = 0; - XCLK = 0; - end - - initial begin - // Analog input pin values - adc_h = 0.0; - adc_l = 0.0; - adc_0 = 0.0; - adc_1 = 0.0; - comp_n = 0.0; - comp_p = 0.0; - #2000; - adc_h = 3.25; - adc_l = 0.05; - adc_0 = 1.0; - adc_1 = 1.5; - comp_n = 2.0; - comp_p = 2.5; + clock = 0; end initial begin @@ -146,11 +123,11 @@ assign VDD3V3 = 1'b1; assign VDD1V8 = 1'b1; - harness_chip uut ( - .vdd (VDD3V3), + caravel uut ( + .vdd3v3 (VDD3V3), .vdd1v8 (VDD1V8), .vss (VSS), - .xi (XI), + .clock (clock), .xclk (XCLK), .SDI (SDI), .SDO (SDO), @@ -166,13 +143,7 @@ .flash_io1(flash_io1), .flash_io2(flash_io2), .flash_io3(flash_io3), - .adc_high (adc_h), - .adc_low (adc_l), - .adc0_in (adc_0), - .adc1_in (adc_1), - .RSTB (RSTB), - .comp_inp (comp_p), - .comp_inn (comp_n) + .RSTB (RSTB) ); spiflash #(
diff --git a/verilog/dv/harness/mgmt_soc/mprj_ctrl/Makefile b/verilog/dv/caravel/mgmt_soc/mprj_ctrl/Makefile similarity index 100% rename from verilog/dv/harness/mgmt_soc/mprj_ctrl/Makefile rename to verilog/dv/caravel/mgmt_soc/mprj_ctrl/Makefile
diff --git a/verilog/dv/harness/mgmt_soc/mprj_ctrl/mprj_ctrl.c b/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl.c similarity index 100% rename from verilog/dv/harness/mgmt_soc/mprj_ctrl/mprj_ctrl.c rename to verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl.c
diff --git a/verilog/dv/harness/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v b/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v similarity index 84% rename from verilog/dv/harness/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v rename to verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v index bcbbe12..8e1c608 100644 --- a/verilog/dv/harness/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v +++ b/verilog/dv/caravel/mgmt_soc/mprj_ctrl/mprj_ctrl_tb.v
@@ -1,19 +1,15 @@ `timescale 1 ns / 1 ps -`include "harness_chip.v" +`include "caravel.v" `include "spiflash.v" module mprj_ctrl_tb; - reg XCLK; - reg XI; + reg clock; - reg real adc_h, adc_l; - reg real adc_0, adc_1; - reg real comp_n, comp_p; reg SDI, CSB, SCK, RSTB; - wire [15:0] gpio; + wire [1:0] gpio; wire flash_csb; wire flash_clk; wire flash_io0; @@ -26,12 +22,10 @@ // simulation. Normally this would be a slow clock and the digital PLL // would be the fast clock. - always #10 XCLK <= (XCLK === 1'b0); - always #220 XI <= (XI === 1'b0); + always #10 clock <= (clock === 1'b0); initial begin - XI = 0; - XCLK = 0; + clock = 0; end initial begin @@ -95,11 +89,11 @@ assign VDD1V8 = 1'b1; assign VDD3V3 = 1'b1; - harness_chip uut ( - .vdd (VDD3V3), + caravel uut ( + .vdd3v3 (VDD3V3), .vdd1v8 (VDD1V8), .vss (VSS), - .xi (XI), + .clock (clock), .xclk (XCLK), .SDI (SDI), .SDO (SDO), @@ -115,13 +109,7 @@ .flash_io1(flash_io1), .flash_io2(flash_io2), .flash_io3(flash_io3), - .adc_high (adc_h), - .adc_low (adc_l), - .adc0_in (adc_0), - .adc1_in (adc_1), - .RSTB (RSTB), - .comp_inp (comp_p), - .comp_inn (comp_n) + .RSTB (RSTB) ); spiflash #(
diff --git a/verilog/dv/harness/mgmt_soc/perf/Makefile b/verilog/dv/caravel/mgmt_soc/perf/Makefile similarity index 100% rename from verilog/dv/harness/mgmt_soc/perf/Makefile rename to verilog/dv/caravel/mgmt_soc/perf/Makefile
diff --git a/verilog/dv/harness/mgmt_soc/perf/perf.c b/verilog/dv/caravel/mgmt_soc/perf/perf.c similarity index 100% rename from verilog/dv/harness/mgmt_soc/perf/perf.c rename to verilog/dv/caravel/mgmt_soc/perf/perf.c
diff --git a/verilog/dv/harness/mgmt_soc/perf/perf_tb.v b/verilog/dv/caravel/mgmt_soc/perf/perf_tb.v similarity index 81% rename from verilog/dv/harness/mgmt_soc/perf/perf_tb.v rename to verilog/dv/caravel/mgmt_soc/perf/perf_tb.v index 3e5edbc..61a044d 100644 --- a/verilog/dv/harness/mgmt_soc/perf/perf_tb.v +++ b/verilog/dv/caravel/mgmt_soc/perf/perf_tb.v
@@ -20,19 +20,15 @@ `timescale 1 ns / 1 ps -`include "harness_chip.v" +`include "caravel.v" `include "spiflash.v" module striVe_perf_tb; - reg XCLK; - reg XI; + reg clock; - reg real adc_h, adc_l; - reg real adc_0, adc_1; - reg real comp_n, comp_p; reg SDI, CSB, SCK, RSTB; - wire [15:0] gpio; + wire [1:0] gpio; wire flash_csb; wire flash_clk; wire flash_io0; @@ -45,29 +41,10 @@ // simulation. Normally this would be a slow clock and the digital PLL // would be the fast clock. - always #10 XCLK <= (XCLK === 1'b0); - always #220 XI <= (XI === 1'b0); + always #10 clock <= (clock === 1'b0); initial begin - XI = 0; - XCLK = 0; - end - - initial begin - // Analog input pin values - adc_h = 0.0; - adc_l = 0.0; - adc_0 = 0.0; - adc_1 = 0.0; - comp_n = 0.0; - comp_p = 0.0; - #2000; - adc_h = 3.25; - adc_l = 0.05; - adc_0 = 1.0; - adc_1 = 1.5; - comp_n = 2.0; - comp_p = 2.5; + clock = 0; end reg [31:0] kcycles; @@ -122,11 +99,11 @@ assign VDD1V8 = 1'b1; assign VDD3V3 = 1'b1; - harness_chip uut ( - .vdd (VDD3V3 ), + caravel uut ( + .vdd3v3 (VDD3V3 ), .vdd1v8 (VDD1V8), .vss (VSS), - .xi (XI), + .clock (clock), .xclk (XCLK), .SDI (SDI), .SDO (SDO), @@ -142,13 +119,7 @@ .flash_io1(flash_io1), .flash_io2(flash_io2), .flash_io3(flash_io3), - .adc_high (adc_h), - .adc_low (adc_l), - .adc0_in (adc_0), - .adc1_in (adc_1), - .RSTB (RSTB), - .comp_inp (comp_p), - .comp_inn (comp_n) + .RSTB (RSTB) ); spiflash #(
diff --git a/verilog/dv/harness/mgmt_soc/sysctrl/Makefile b/verilog/dv/caravel/mgmt_soc/sysctrl/Makefile similarity index 100% rename from verilog/dv/harness/mgmt_soc/sysctrl/Makefile rename to verilog/dv/caravel/mgmt_soc/sysctrl/Makefile
diff --git a/verilog/dv/harness/mgmt_soc/sysctrl/sysctrl.c b/verilog/dv/caravel/mgmt_soc/sysctrl/sysctrl.c similarity index 100% rename from verilog/dv/harness/mgmt_soc/sysctrl/sysctrl.c rename to verilog/dv/caravel/mgmt_soc/sysctrl/sysctrl.c
diff --git a/verilog/dv/harness/mgmt_soc/sysctrl/sysctrl_tb.v b/verilog/dv/caravel/mgmt_soc/sysctrl/sysctrl_tb.v similarity index 88% rename from verilog/dv/harness/mgmt_soc/sysctrl/sysctrl_tb.v rename to verilog/dv/caravel/mgmt_soc/sysctrl/sysctrl_tb.v index 4932e0d..708bc9e 100644 --- a/verilog/dv/harness/mgmt_soc/sysctrl/sysctrl_tb.v +++ b/verilog/dv/caravel/mgmt_soc/sysctrl/sysctrl_tb.v
@@ -1,19 +1,15 @@ `timescale 1 ns / 1 ps -`include "harness_chip.v" +`include "caravel.v" `include "spiflash.v" module sysctrl_tb; - reg XCLK; - reg XI; + reg clock; - reg real adc_h, adc_l; - reg real adc_0, adc_1; - reg real comp_n, comp_p; reg SDI, CSB, SCK, RSTB; - wire [15:0] gpio; + wire [1:0] gpio; wire flash_csb; wire flash_clk; wire flash_io0; @@ -26,12 +22,10 @@ // simulation. Normally this would be a slow clock and the digital PLL // would be the fast clock. - always #10 XCLK <= (XCLK === 1'b0); - always #220 XI <= (XI === 1'b0); + always #10 clock <= (clock === 1'b0); initial begin - XI = 0; - XCLK = 0; + clock = 0; end initial begin @@ -127,12 +121,11 @@ assign VDD1V8 = 1'b1; assign VDD3V3 = 1'b1; - harness_chip uut ( - .vdd (VDD3V3), + caravel uut ( + .vdd3v3 (VDD3V3), .vdd1v8 (VDD1V8), .vss (VSS), - .xi (XI), - .xclk (XCLK), + .clock (clock), .SDI (SDI), .SDO (SDO), .CSB (CSB), @@ -147,13 +140,7 @@ .flash_io1(flash_io1), .flash_io2(flash_io2), .flash_io3(flash_io3), - .adc_high (adc_h), - .adc_low (adc_l), - .adc0_in (adc_0), - .adc1_in (adc_1), - .RSTB (RSTB), - .comp_inp (comp_p), - .comp_inn (comp_n) + .RSTB (RSTB) ); spiflash #(
diff --git a/verilog/dv/harness/mgmt_soc/uart/Makefile b/verilog/dv/caravel/mgmt_soc/uart/Makefile similarity index 100% rename from verilog/dv/harness/mgmt_soc/uart/Makefile rename to verilog/dv/caravel/mgmt_soc/uart/Makefile
diff --git a/verilog/dv/harness/mgmt_soc/uart/uart.c b/verilog/dv/caravel/mgmt_soc/uart/uart.c similarity index 100% rename from verilog/dv/harness/mgmt_soc/uart/uart.c rename to verilog/dv/caravel/mgmt_soc/uart/uart.c
diff --git a/verilog/dv/harness/mgmt_soc/uart/uart_tb.v b/verilog/dv/caravel/mgmt_soc/uart/uart_tb.v similarity index 75% rename from verilog/dv/harness/mgmt_soc/uart/uart_tb.v rename to verilog/dv/caravel/mgmt_soc/uart/uart_tb.v index c031659..80bc0b4 100644 --- a/verilog/dv/harness/mgmt_soc/uart/uart_tb.v +++ b/verilog/dv/caravel/mgmt_soc/uart/uart_tb.v
@@ -20,20 +20,16 @@ `timescale 1 ns / 1 ps -`include "harness_chip.v" +`include "caravel.v" `include "spiflash.v" `include "tbuart.v" module uart_tb; - reg XCLK; - reg XI; + reg clock; - reg real adc_h, adc_l; - reg real adc_0, adc_1; - reg real comp_n, comp_p; reg SDI, CSB, SCK, RSTB; - wire [15:0] gpio; + wire [1:0] gpio; wire flash_csb; wire flash_clk; wire flash_io0; @@ -42,26 +38,10 @@ wire flash_io3; wire SDO; - // External clock is used by default. Make this artificially fast for the - // simulation. Normally this would be a slow clock and the digital PLL - // would be the fast clock. - - always #12.5 XCLK <= (XCLK === 1'b0); - always #220 XI <= (XI === 1'b0); + always #12.5 clock <= (clock === 1'b0); initial begin - XI = 0; - XCLK = 0; - end - - initial begin - // Analog input pin values (static) - adc_h = 0.0; - adc_l = 0.0; - adc_0 = 0.0; - adc_1 = 0.0; - comp_n = 0.0; - comp_p = 0.0; + clock = 0; end initial begin @@ -105,13 +85,11 @@ assign VDD1V8 = 1'b1; assign VDD3V3 = 1'b1; - harness_chip uut ( - .vdd (VDD3V3), + caravel uut ( + .vdd3v3 (VDD3V3), .vdd1v8 (VDD1V8), .vss (VSS), - .xi (XI), - .xo (), - .xclk (XCLK), + .clock (clock), .SDI (SDI), .SDO (SDO), .CSB (CSB), @@ -126,13 +104,7 @@ .flash_io1(flash_io1), .flash_io2(flash_io2), .flash_io3(flash_io3), - .adc_high (adc_h), - .adc_low (adc_l), - .adc0_in (adc_0), - .adc1_in (adc_1), - .RSTB (RSTB), - .comp_inp (comp_p), - .comp_inn (comp_n) + .RSTB (RSTB) ); spiflash #(
diff --git a/verilog/dv/harness/mprj_counter/Makefile b/verilog/dv/caravel/mprj_counter/Makefile similarity index 100% rename from verilog/dv/harness/mprj_counter/Makefile rename to verilog/dv/caravel/mprj_counter/Makefile
diff --git a/verilog/dv/harness/mprj_counter/README.md b/verilog/dv/caravel/mprj_counter/README.md similarity index 100% rename from verilog/dv/harness/mprj_counter/README.md rename to verilog/dv/caravel/mprj_counter/README.md
diff --git a/verilog/dv/harness/mprj_counter/io_ports/Makefile b/verilog/dv/caravel/mprj_counter/io_ports/Makefile similarity index 100% rename from verilog/dv/harness/mprj_counter/io_ports/Makefile rename to verilog/dv/caravel/mprj_counter/io_ports/Makefile
diff --git a/verilog/dv/harness/mprj_counter/io_ports/io_ports.c b/verilog/dv/caravel/mprj_counter/io_ports/io_ports.c similarity index 100% rename from verilog/dv/harness/mprj_counter/io_ports/io_ports.c rename to verilog/dv/caravel/mprj_counter/io_ports/io_ports.c
diff --git a/verilog/dv/harness/mprj_counter/io_ports/io_ports_tb.v b/verilog/dv/caravel/mprj_counter/io_ports/io_ports_tb.v similarity index 80% rename from verilog/dv/harness/mprj_counter/io_ports/io_ports_tb.v rename to verilog/dv/caravel/mprj_counter/io_ports/io_ports_tb.v index e30f139..d779167 100644 --- a/verilog/dv/harness/mprj_counter/io_ports/io_ports_tb.v +++ b/verilog/dv/caravel/mprj_counter/io_ports/io_ports_tb.v
@@ -1,21 +1,17 @@ `timescale 1 ns / 1 ps -`include "harness_chip.v" +`include "caravel.v" `include "spiflash.v" module io_ports_tb; - reg XCLK; - reg XI; + reg clock; - reg real adc_h, adc_l; - reg real adc_0, adc_1; - reg real comp_n, comp_p; - reg SDI, CSB, SCK, RSTB; + reg SDI, CSB, SCK, RSTB; wire SDO; - wire [15:0] gpio; - wire [31:0] mprj_io; + wire [1:0] gpio; + wire [31:0] mprj_io; wire [7:0] mprj_io_0; assign mprj_io_0 = mprj_io[7:0]; @@ -24,12 +20,10 @@ // simulation. Normally this would be a slow clock and the digital PLL // would be the fast clock. - always #12.5 XCLK <= (XCLK === 1'b0); - always #220 XI <= (XI === 1'b0); + always #12.5 clock <= (clock === 1'b0); initial begin - XI = 0; - XCLK = 0; + clock = 0; end initial begin @@ -95,12 +89,11 @@ assign VDD1V8 = 1'b1; assign VDD3V3 = 1'b1; - harness_chip uut ( - .vdd (VDD3V3), + caravel uut ( + .vdd3v3 (VDD3V3), .vdd1v8 (VDD1V8), .vss (VSS), - .xi (XI), - .xclk (XCLK), + .clock (clock), .SDI (SDI), .SDO (SDO), .CSB (CSB), @@ -109,20 +102,14 @@ .ser_tx (tbuart_rx), .irq (1'b0), .gpio (gpio), - .mprj_io (mprj_io), + .mprj_io (mprj_io), .flash_csb(flash_csb), .flash_clk(flash_clk), .flash_io0(flash_io0), .flash_io1(flash_io1), .flash_io2(flash_io2), .flash_io3(flash_io3), - .adc_high (adc_h), - .adc_low (adc_l), - .adc0_in (adc_0), - .adc1_in (adc_1), - .RSTB (RSTB), - .comp_inp (comp_p), - .comp_inn (comp_n) + .RSTB (RSTB) ); spiflash #(
diff --git a/verilog/dv/harness/mprj_counter/la_test1/Makefile b/verilog/dv/caravel/mprj_counter/la_test1/Makefile similarity index 100% rename from verilog/dv/harness/mprj_counter/la_test1/Makefile rename to verilog/dv/caravel/mprj_counter/la_test1/Makefile
diff --git a/verilog/dv/harness/mprj_counter/la_test1/la_test1.c b/verilog/dv/caravel/mprj_counter/la_test1/la_test1.c similarity index 100% rename from verilog/dv/harness/mprj_counter/la_test1/la_test1.c rename to verilog/dv/caravel/mprj_counter/la_test1/la_test1.c
diff --git a/verilog/dv/harness/mprj_counter/la_test1/la_test1_tb.v b/verilog/dv/caravel/mprj_counter/la_test1/la_test1_tb.v similarity index 70% rename from verilog/dv/harness/mprj_counter/la_test1/la_test1_tb.v rename to verilog/dv/caravel/mprj_counter/la_test1/la_test1_tb.v index 1eb6885..a665093 100644 --- a/verilog/dv/harness/mprj_counter/la_test1/la_test1_tb.v +++ b/verilog/dv/caravel/mprj_counter/la_test1/la_test1_tb.v
@@ -1,36 +1,26 @@ `timescale 1 ns / 1 ps -`include "harness_chip.v" +`include "caravel.v" `include "spiflash.v" `include "tbuart.v" module la_test1_tb; - reg XCLK; - reg XI; + reg clock; - reg real adc_h, adc_l; - reg real adc_0, adc_1; - reg real comp_n, comp_p; - reg SDI, CSB, SCK, RSTB; + reg SDI, CSB, SCK, RSTB; wire SDO; - wire [15:0] gpio; - wire [31:0] mprj_io; + wire [1:0] gpio; + wire [31:0] mprj_io; wire [7:0] mprj_io_0; assign mprj_io_0 = mprj_io[7:0]; - // External clock is used by default. Make this artificially fast for the - // simulation. Normally this would be a slow clock and the digital PLL - // would be the fast clock. - - always #12.5 XCLK <= (XCLK === 1'b0); - always #220 XI <= (XI === 1'b0); + always #12.5 clock <= (clock === 1'b0); initial begin - XI = 0; - XCLK = 0; + clock = 0; end initial begin @@ -69,10 +59,10 @@ end wire VDD1V8; - wire VDD3V3; + wire VDD3V3; wire VSS; - wire flash_csb; + wire flash_csb; wire flash_clk; wire flash_io0; wire flash_io1; @@ -83,12 +73,11 @@ assign VDD1V8 = 1'b1; assign VDD3V3 = 1'b1; - harness_chip uut ( - .vdd (VDD3V3), + caravel uut ( + .vdd3v3 (VDD3V3), .vdd1v8 (VDD1V8), .vss (VSS), - .xi (XI), - .xclk (XCLK), + .clock (clock), .SDI (SDI), .SDO (SDO), .CSB (CSB), @@ -104,13 +93,7 @@ .flash_io1(flash_io1), .flash_io2(flash_io2), .flash_io3(flash_io3), - .adc_high (adc_h), - .adc_low (adc_l), - .adc0_in (adc_0), - .adc1_in (adc_1), - .RSTB (RSTB), - .comp_inp (comp_p), - .comp_inn (comp_n) + .RSTB (RSTB) ); spiflash #(
diff --git a/verilog/dv/harness/mprj_counter/la_test2/Makefile b/verilog/dv/caravel/mprj_counter/la_test2/Makefile similarity index 100% rename from verilog/dv/harness/mprj_counter/la_test2/Makefile rename to verilog/dv/caravel/mprj_counter/la_test2/Makefile
diff --git a/verilog/dv/harness/mprj_counter/la_test2/la_test2.c b/verilog/dv/caravel/mprj_counter/la_test2/la_test2.c similarity index 100% rename from verilog/dv/harness/mprj_counter/la_test2/la_test2.c rename to verilog/dv/caravel/mprj_counter/la_test2/la_test2.c
diff --git a/verilog/dv/harness/mprj_counter/la_test2/la_test2_tb.v b/verilog/dv/caravel/mprj_counter/la_test2/la_test2_tb.v similarity index 68% rename from verilog/dv/harness/mprj_counter/la_test2/la_test2_tb.v rename to verilog/dv/caravel/mprj_counter/la_test2/la_test2_tb.v index a3e6223..230b331 100644 --- a/verilog/dv/harness/mprj_counter/la_test2/la_test2_tb.v +++ b/verilog/dv/caravel/mprj_counter/la_test2/la_test2_tb.v
@@ -1,35 +1,25 @@ `timescale 1 ns / 1 ps -`include "harness_chip.v" +`include "caravel.v" `include "spiflash.v" module la_test2_tb; - reg XCLK; - reg XI; + reg clock; - reg real adc_h, adc_l; - reg real adc_0, adc_1; - reg real comp_n, comp_p; - reg SDI, CSB, SCK, RSTB; + reg SDI, CSB, SCK, RSTB; wire SDO; - wire [15:0] gpio; - wire [31:0] mprj_io; + wire [1:0] gpio; + wire [31:0] mprj_io; wire [7:0] mprj_io_0; assign mprj_io_0 = mprj_io[7:0]; - // External clock is used by default. Make this artificially fast for the - // simulation. Normally this would be a slow clock and the digital PLL - // would be the fast clock. - - always #12.5 XCLK <= (XCLK === 1'b0); - always #220 XI <= (XI === 1'b0); + always #12.5 clock <= (clock === 1'b0); initial begin - XI = 0; - XCLK = 0; + clock = 0; end initial begin @@ -67,10 +57,10 @@ end wire VDD1V8; - wire VDD3V3; + wire VDD3V3; wire VSS; - wire flash_csb; + wire flash_csb; wire flash_clk; wire flash_io0; wire flash_io1; @@ -81,12 +71,11 @@ assign VDD1V8 = 1'b1; assign VDD3V3 = 1'b1; - harness_chip uut ( - .vdd (VDD3V3), + caravel uut ( + .vdd3v3 (VDD3V3), .vdd1v8 (VDD1V8), .vss (VSS), - .xi (XI), - .xclk (XCLK), + .clock (clock), .SDI (SDI), .SDO (SDO), .CSB (CSB), @@ -95,20 +84,14 @@ .ser_tx (), .irq (1'b0), .gpio (gpio), - .mprj_io (mprj_io), + .mprj_io (mprj_io), .flash_csb(flash_csb), .flash_clk(flash_clk), .flash_io0(flash_io0), .flash_io1(flash_io1), .flash_io2(flash_io2), .flash_io3(flash_io3), - .adc_high (adc_h), - .adc_low (adc_l), - .adc0_in (adc_0), - .adc1_in (adc_1), - .RSTB (RSTB), - .comp_inp (comp_p), - .comp_inn (comp_n) + .RSTB (RSTB) ); spiflash #(
diff --git a/verilog/dv/harness/sections.lds b/verilog/dv/caravel/sections.lds similarity index 100% rename from verilog/dv/harness/sections.lds rename to verilog/dv/caravel/sections.lds
diff --git a/verilog/dv/harness/spiflash.v b/verilog/dv/caravel/spiflash.v similarity index 100% rename from verilog/dv/harness/spiflash.v rename to verilog/dv/caravel/spiflash.v
diff --git a/verilog/dv/harness/start.s b/verilog/dv/caravel/start.s similarity index 100% rename from verilog/dv/harness/start.s rename to verilog/dv/caravel/start.s
diff --git a/verilog/dv/harness/stub.c b/verilog/dv/caravel/stub.c similarity index 100% rename from verilog/dv/harness/stub.c rename to verilog/dv/caravel/stub.c
diff --git a/verilog/dv/harness/tbuart.v b/verilog/dv/caravel/tbuart.v similarity index 100% rename from verilog/dv/harness/tbuart.v rename to verilog/dv/caravel/tbuart.v
diff --git a/verilog/dv/harness/verify.log b/verilog/dv/harness/verify.log deleted file mode 100644 index e69de29..0000000 --- a/verilog/dv/harness/verify.log +++ /dev/null
diff --git a/verilog/dv/wb_utests/gpio_wb/gpio_wb_tb.v b/verilog/dv/wb_utests/gpio_wb/gpio_wb_tb.v index 8db196c..ddee1a5 100644 --- a/verilog/dv/wb_utests/gpio_wb/gpio_wb_tb.v +++ b/verilog/dv/wb_utests/gpio_wb/gpio_wb_tb.v
@@ -7,19 +7,19 @@ module gpio_wb_tb; reg wb_clk_i; - reg wb_rst_i; + reg wb_rst_i; reg wb_stb_i; reg wb_cyc_i; - reg wb_we_i; - reg [3:0] wb_sel_i; + reg wb_we_i; + reg [3:0] wb_sel_i; - reg [31:0] wb_dat_i; - reg [31:0] wb_adr_i; + reg [31:0] wb_dat_i; + reg [31:0] wb_adr_i; reg [15:0] gpio_in_pad; - wire wb_ack_o; - wire [31:0] wb_dat_o; + wire wb_ack_o; + wire [31:0] wb_dat_o; initial begin wb_clk_i = 0; @@ -167,16 +167,16 @@ gpio_wb uut( .wb_clk_i(wb_clk_i), - .wb_rst_i(wb_rst_i), + .wb_rst_i(wb_rst_i), .wb_stb_i(wb_stb_i), - .wb_cyc_i(wb_cyc_i), - .wb_sel_i(wb_sel_i), - .wb_we_i(wb_we_i), - .wb_dat_i(wb_dat_i), - .wb_adr_i(wb_adr_i), + .wb_cyc_i(wb_cyc_i), + .wb_sel_i(wb_sel_i), + .wb_we_i(wb_we_i), + .wb_dat_i(wb_dat_i), + .wb_adr_i(wb_adr_i), .wb_ack_o(wb_ack_o), - .wb_dat_o(wb_dat_o), + .wb_dat_o(wb_dat_o), .gpio_in_pad(gpio_in_pad) ); -endmodule \ No newline at end of file +endmodule
diff --git a/verilog/rtl/caravel.v b/verilog/rtl/caravel.v new file mode 100644 index 0000000..7cba9d4 --- /dev/null +++ b/verilog/rtl/caravel.v
@@ -0,0 +1,331 @@ +/*--------------------------------------------------------------*/ +/* caravel, a project harness for the Google/SkyWater sky130 */ +/* fabrication process and open source PDK */ +/* */ +/* Copyright 2020 efabless, Inc. */ +/* Written by Tim Edwards, December 2019 */ +/* and Mohamed Shalan, August 2020 */ +/* This file is open source hardware released under the */ +/* Apache 2.0 license. See file LICENSE. */ +/* */ +/*--------------------------------------------------------------*/ + +`timescale 1 ns / 1 ps + +`define USE_OPENRAM +`define USE_PG_PIN +`define functional + +`define MPRJ_IO_PADS 32 + +`include "pads.v" + +/* To be removed when sky130_fd_io is available */ +// `include "/ef/tech/SW/EFS8A/libs.ref/verilog/s8iom0s8/s8iom0s8.v" +// `include "/ef/tech/SW/EFS8A/libs.ref/verilog/s8iom0s8/power_pads_lib.v" +// `include "/ef/tech/SW/sky130A/libs.ref/verilog/sky130_fd_sc_hd/sky130_fd_sc_hd.v" +// `include "/ef/tech/SW/sky130A/libs.ref/verilog/sky130_fd_sc_hvl/sky130_fd_sc_hvl.v" + +/* Local only, please remove */ +// `include "/home/tim/projects/efabless/tech/SW/sky130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v" +// `include "/home/tim/projects/efabless/tech/SW/sky130A/libs.ref/sky130_fd_io/verilog/power_pads_lib.v" +`include "/home/tim/projects/efabless/tech/SW/EFS8A/libs.ref/s8iom0s8/verilog/s8iom0s8.v" +`include "/home/tim/projects/efabless/tech/SW/EFS8A/libs.ref/s8iom0s8/verilog/power_pads_lib.v" +`include "/home/tim/projects/efabless/tech/SW/sky130A/libs.ref/verilog/sky130_fd_sc_hd/sky130_fd_sc_hd.v" +`include "/home/tim/projects/efabless/tech/SW/sky130A/libs.ref/verilog/sky130_fd_sc_hd/sky130_fd_sc_hvl.v" + +`include "mgmt_soc.v" +`include "striVe_spi.v" +`include "digital_pll.v" +`include "striVe_clkrst.v" +`include "mprj_counter.v" +`include "mgmt_core.v" +`include "mprj_io.v" +`include "chip_io.v" + +`ifdef USE_OPENRAM + `include "sram_1rw1r_32_8192_8_sky130.v" +`endif + +module caravel ( + inout vdd3v3, + inout vdd1v8, + inout vss, + inout [1:0] gpio, // Local digital only for management area + inout [`MPRJ_IO_PADS-1:0] mprj_io, + input clock, // CMOS core clock input, not a crystal + input RSTB, + input ser_rx, + output ser_tx, + input irq, + output SDO, + input SDI, + input CSB, + input SCK, + output flash_csb, + output flash_clk, + output flash_io0, + output flash_io1, + output flash_io2, + output flash_io3 +); + + wire [1:0] gpio_out_core; + wire [1:0] gpio_in_core; + wire [1:0] gpio_mode0_core; + wire [1:0] gpio_mode1_core; + wire [1:0] gpio_outenb_core; + wire [1:0] gpio_inenb_core; + + // Mega-Project Control + wire [`MPRJ_IO_PADS-1:0] mprj_io_oeb_n; + wire [`MPRJ_IO_PADS-1:0] mprj_io_hldh_n; + wire [`MPRJ_IO_PADS-1:0] mprj_io_enh; + wire [`MPRJ_IO_PADS-1:0] mprj_io_inp_dis; + wire [`MPRJ_IO_PADS-1:0] mprj_io_ib_mode_sel; + wire [`MPRJ_IO_PADS-1:0] mprj_io_analog_en; + wire [`MPRJ_IO_PADS-1:0] mprj_io_analog_sel; + wire [`MPRJ_IO_PADS-1:0] mprj_io_analog_pol; + wire [`MPRJ_IO_PADS*3-1:0] mprj_io_dm; + wire [`MPRJ_IO_PADS-1:0] mprj_io_in; + wire [`MPRJ_IO_PADS-1:0] mprj_io_out; + + wire porb_h; + wire porb_l; + wire por; + wire SCK_core; + wire SDI_core; + wire CSB_core; + wire SDO_core; + wire SDO_enb; + + chip_io padframe( + // Package Pins + .vdd3v3(vdd3v3), + .vdd1v8(vdd1v8), + .vss(vss), + .gpio(gpio), + .mprj_io(mprj_io), + .clock(clock), + .RSTB(RSTB), + .ser_rx(ser_rx), + .ser_tx(ser_tx), + .irq(irq), + .SDO(SDO), + .SDI(SDI), + .CSB(CSB), + .SCK(SCK), + .flash_csb(flash_csb), + .flash_clk(flash_clk), + .flash_io0(flash_io0), + .flash_io1(flash_io1), + .flash_io2(flash_io2), + .flash_io3(flash_io3), + // SoC Core Interface + .por(por), + .porb_h(porb_h), + .clock_core(clock_core), + .gpio_out_core(gpio_out_core), + .gpio_in_core(gpio_in_core), + .gpio_mode0_core(gpio_mode0_core), + .gpio_mode1_core(gpio_mode1_core), + .gpio_outenb_core(gpio_outenb_core), + .gpio_inenb_core(gpio_inenb_core), + .SCK_core(SCK_core), + .ser_rx_core(ser_rx_core), + .ser_tx_core(ser_tx_core), + .irq_pin_core(irq_pin_core), + .flash_csb_core(flash_csb_core), + .flash_clk_core(flash_clk_core), + .flash_csb_oeb_core(flash_csb_oeb_core), + .flash_clk_oeb_core(flash_clk_oeb_core), + .flash_io0_oeb_core(flash_io0_oeb_core), + .flash_io1_oeb_core(flash_io1_oeb_core), + .flash_io2_oeb_core(flash_io2_oeb_core), + .flash_io3_oeb_core(flash_io3_oeb_core), + .flash_csb_ieb_core(flash_csb_ieb_core), + .flash_clk_ieb_core(flash_clk_ieb_core), + .flash_io0_ieb_core(flash_io0_ieb_core), + .flash_io1_ieb_core(flash_io1_ieb_core), + .flash_io2_ieb_core(flash_io2_ieb_core), + .flash_io3_ieb_core(flash_io3_ieb_core), + .flash_io0_do_core(flash_io0_do_core), + .flash_io1_do_core(flash_io1_do_core), + .flash_io2_do_core(flash_io2_do_core), + .flash_io3_do_core(flash_io3_do_core), + .flash_io0_di_core(flash_io0_di_core), + .flash_io1_di_core(flash_io1_di_core), + .flash_io2_di_core(flash_io2_di_core), + .flash_io3_di_core(flash_io3_di_core), + .SDI_core(SDI_core), + .CSB_core(CSB_core), + .pll_clk16(pll_clk16), + .SDO_core(SDO_core), + .mprj_io_in(mprj_io_in), + .mprj_io_out(mprj_io_out), + .mprj_io_oeb_n(mprj_io_oeb_n), + .mprj_io_hldh_n(mprj_io_hldh_n), + .mprj_io_enh(mprj_io_enh), + .mprj_io_inp_dis(mprj_io_inp_dis), + .mprj_io_ib_mode_sel(mprj_io_ib_mode_sel), + .mprj_io_analog_en(mprj_io_analog_en), + .mprj_io_analog_sel(mprj_io_analog_sel), + .mprj_io_analog_pol(mprj_io_analog_pol), + .mprj_io_dm(mprj_io_dm) + ); + + // SoC core + wire striVe_clk; + wire striVe_rstn; + + wire [7:0] spi_ro_config_core; + + // LA signals + wire [127:0] la_output_core; // From CPU to MPRJ + wire [127:0] la_data_in_mprj; // From CPU to MPRJ + wire [127:0] la_data_out_mprj; // From CPU to MPRJ + wire [127:0] la_output_mprj; // From MPRJ to CPU + wire [127:0] la_oen; // LA output enable from CPU perspective (active-low) + + // WB MI A (Mega Project) + wire mprj_cyc_o_core; + wire mprj_stb_o_core; + wire mprj_we_o_core; + wire [3:0] mprj_sel_o_core; + wire [31:0] mprj_adr_o_core; + wire [31:0] mprj_dat_o_core; + wire mprj_ack_i_core; + wire [31:0] mprj_dat_i_core; + + // WB MI B (xbar) + wire xbar_cyc_o_core; + wire xbar_stb_o_core; + wire xbar_we_o_core; + wire [3:0] xbar_sel_o_core; + wire [31:0] xbar_adr_o_core; + wire [31:0] xbar_dat_o_core; + wire xbar_ack_i_core; + wire [31:0] xbar_dat_i_core; + + mgmt_core soc ( + `ifdef LVS + .vdd1v8(vdd1v8), + .vss(vss), + `endif + .gpio_out_pad(gpio_out_core), + .gpio_in_pad(gpio_in_core), + .gpio_mode0_pad(gpio_mode0_core), + .gpio_mode1_pad(gpio_mode1_core), + .gpio_outenb_pad(gpio_outenb_core), + .gpio_inenb_pad(gpio_inenb_core), + .spi_sck(SCK_core), + .spi_ro_config(spi_ro_config_core), + .ser_tx(ser_tx_core), + .ser_rx(ser_rx_core), + .irq_pin(irq_pin_core), + .flash_csb(flash_csb_core), + .flash_clk(flash_clk_core), + .flash_csb_oeb(flash_csb_oeb_core), + .flash_clk_oeb(flash_clk_oeb_core), + .flash_io0_oeb(flash_io0_oeb_core), + .flash_io1_oeb(flash_io1_oeb_core), + .flash_io2_oeb(flash_io2_oeb_core), + .flash_io3_oeb(flash_io3_oeb_core), + .flash_csb_ieb(flash_csb_ieb_core), + .flash_clk_ieb(flash_clk_ieb_core), + .flash_io0_ieb(flash_io0_ieb_core), + .flash_io1_ieb(flash_io1_ieb_core), + .flash_io2_ieb(flash_io2_ieb_core), + .flash_io3_ieb(flash_io3_ieb_core), + .flash_io0_do(flash_io0_do_core), + .flash_io1_do(flash_io1_do_core), + .flash_io2_do(flash_io2_do_core), + .flash_io3_do(flash_io3_do_core), + .flash_io0_di(flash_io0_di_core), + .flash_io1_di(flash_io1_di_core), + .flash_io2_di(flash_io2_di_core), + .flash_io3_di(flash_io3_di_core), + .por(por), + .porb_l(porb_l), + .clock(clock_core), + .pll_clk16(pll_clk16), + .SDI_core(SDI_core), + .CSB_core(CSB_core), + .SDO_core(SDO_core), + .SDO_enb(SDO_enb), + .striVe_clk(striVe_clk), + .striVe_rstn(striVe_rstn), + // Logic Analyzer + .la_input(la_data_out_mprj), + .la_output(la_output_core), + .la_oen(la_oen), + // Mega Project IO Control + .mprj_io_oeb_n(mprj_io_oeb_n), + .mprj_io_enh(mprj_io_enh), + .mprj_io_hldh_n(mprj_io_hldh_n), + .mprj_io_inp_dis(mprj_io_inp_dis), + .mprj_io_ib_mode_sel(mprj_io_ib_mode_sel), + .mprj_io_analog_en(mprj_io_analog_en), + .mprj_io_analog_sel(mprj_io_analog_sel), + .mprj_io_analog_pol(mprj_io_analog_pol), + .mprj_io_dm(mprj_io_dm), + // Mega Project Slave ports (WB MI A) + .mprj_cyc_o(mprj_cyc_o_core), + .mprj_stb_o(mprj_stb_o_core), + .mprj_we_o(mprj_we_o_core), + .mprj_sel_o(mprj_sel_o_core), + .mprj_adr_o(mprj_adr_o_core), + .mprj_dat_o(mprj_dat_o_core), + .mprj_ack_i(mprj_ack_i_core), + .mprj_dat_i(mprj_dat_i_core), + // Xbar Switch (WB MI B) + .xbar_cyc_o(xbar_cyc_o_core), + .xbar_stb_o(xbar_stb_o_core), + .xbar_we_o (xbar_we_o_core), + .xbar_sel_o(xbar_sel_o_core), + .xbar_adr_o(xbar_adr_o_core), + .xbar_dat_o(xbar_dat_o_core), + .xbar_ack_i(xbar_ack_i_core), + .xbar_dat_i(xbar_dat_i_core) + ); + + sky130_fd_sc_hd__ebufn_8 la_buf[127:0]( + .Z(la_data_in_mprj), + .A(la_output_core), + .TEB(la_oen) + ); + + mega_project mprj ( + .wb_clk_i(striVe_clk), + .wb_rst_i(!striVe_rstn), + // MGMT SoC Wishbone Slave + .wbs_cyc_i(mprj_cyc_o_core), + .wbs_stb_i(mprj_stb_o_core), + .wbs_we_i(mprj_we_o_core), + .wbs_sel_i(mprj_sel_o_core), + .wbs_adr_i(mprj_adr_o_core), + .wbs_dat_i(mprj_dat_o_core), + .wbs_ack_o(mprj_ack_i_core), + .wbs_dat_o(mprj_dat_i_core), + // Logic Analyzer + .la_data_in(la_data_in_mprj), + .la_data_out(la_data_out_mprj), + .la_oen (la_oen), + // IO Pads + .io_out(mprj_io_out), + .io_in (mprj_io_in) + ); + + sky130_fd_sc_hvl__lsbufhv2lv ( + `ifdef LVS + .vpwr(vdd3v3), + .vpb(vdd3v3), + .lvpwr(vdd1v8), + .vnb(vss), + .vgnd(vss), + `endif + .A(porb_h), + .X(porb_l) + ); + +endmodule
diff --git a/verilog/rtl/chip_io.v b/verilog/rtl/chip_io.v index 0203ede..df0ca62 100644 --- a/verilog/rtl/chip_io.v +++ b/verilog/rtl/chip_io.v
@@ -1,17 +1,10 @@ module chip_io( // Package Pins - inout vdd, - inout vdd1v8, - inout vss, - input [15:0] gpio, - inout xi, - output xo, - inout adc0_in, - inout adc1_in, - inout adc_high, - inout adc_low, - inout comp_inn, - inout comp_inp, + inout vdd3v3, + inout vdd1v8, + inout vss, + input [1:0] gpio, + inout clock, inout RSTB, inout ser_rx, output ser_tx, @@ -20,7 +13,6 @@ inout SDI, inout CSB, inout SCK, - inout xclk, output flash_csb, output flash_clk, output flash_io0, @@ -30,14 +22,13 @@ // Chip Core Interface input por, output porb_h, - output ext_clk_core, - output xi_core, - input [15:0] gpio_out_core, - output [15:0] gpio_in_core, - input [15:0] gpio_mode0_core, - input [15:0] gpio_mode1_core, - input [15:0] gpio_outenb_core, - input [15:0] gpio_inenb_core, + output clock_core, + input [1:0] gpio_out_core, + output [1:0] gpio_in_core, + input [1:0] gpio_mode0_core, + input [1:0] gpio_mode1_core, + input [1:0] gpio_outenb_core, + input [1:0] gpio_inenb_core, output SCK_core, output ser_rx_core, inout ser_tx_core, @@ -72,108 +63,95 @@ input [`MPRJ_IO_PADS-1:0] mprj_io, input [`MPRJ_IO_PADS-1:0] mprj_io_out, input [`MPRJ_IO_PADS-1:0] mprj_io_oeb_n, - input [`MPRJ_IO_PADS-1:0] mprj_io_hldh_n, + input [`MPRJ_IO_PADS-1:0] mprj_io_hldh_n, input [`MPRJ_IO_PADS-1:0] mprj_io_enh, - input [`MPRJ_IO_PADS-1:0] mprj_io_inp_dis, - input [`MPRJ_IO_PADS-1:0] mprj_io_ib_mode_sel, - input [`MPRJ_IO_PADS-1:0] mprj_io_analog_en, - input [`MPRJ_IO_PADS-1:0] mprj_io_analog_sel, - input [`MPRJ_IO_PADS-1:0] mprj_io_analog_pol, - input [`MPRJ_IO_PADS*3-1:0] mprj_io_dm, + input [`MPRJ_IO_PADS-1:0] mprj_io_inp_dis, + input [`MPRJ_IO_PADS-1:0] mprj_io_ib_mode_sel, + input [`MPRJ_IO_PADS-1:0] mprj_io_analog_en, + input [`MPRJ_IO_PADS-1:0] mprj_io_analog_sel, + input [`MPRJ_IO_PADS-1:0] mprj_io_analog_pol, + input [`MPRJ_IO_PADS*3-1:0] mprj_io_dm, output [`MPRJ_IO_PADS-1:0] mprj_io_in ); + wire analog_a, analog_b; wire vddio_q, vssio_q; // Instantiate power cells for VDD3V3 domain (8 total; 4 high clamps and - // 4 low clamps) - s8iom0_vdda_hvc_pad vdd3v3hclamp [1:0] ( + // 4 low clamps) + s8iom0_vdda_hvc_pad vdd3v3hclamp [1:0] ( `ABUTMENT_PINS .drn_hvc(), .src_bdy_hvc() - ); + ); - s8iom0_vddio_hvc_pad vddiohclamp [1:0] ( + s8iom0_vddio_hvc_pad vddiohclamp [1:0] ( `ABUTMENT_PINS .drn_hvc(), .src_bdy_hvc() - ); + ); - s8iom0_vdda_lvc_pad vdd3v3lclamp [3:0] ( + s8iom0_vdda_lvc_pad vdd3v3lclamp [3:0] ( `ABUTMENT_PINS .bdy2_b2b(), .drn_lvc1(), .drn_lvc2(), .src_bdy_lvc1(), .src_bdy_lvc2() - ); + ); - // Instantiate the core voltage supply (since it is not generated on-chip) - // (1.8V) (4 total, 2 high and 2 low clamps) - s8iom0_vccd_hvc_pad vdd1v8hclamp [1:0] ( + // Instantiate the core voltage supply (since it is not generated on-chip) + // (1.8V) (4 total, 2 high and 2 low clamps) + s8iom0_vccd_hvc_pad vdd1v8hclamp [1:0] ( `ABUTMENT_PINS .drn_hvc(), .src_bdy_hvc() - ); + ); - s8iom0_vccd_lvc_pad vdd1v8lclamp [1:0] ( + s8iom0_vccd_lvc_pad vdd1v8lclamp [1:0] ( `ABUTMENT_PINS .bdy2_b2b(), .drn_lvc1(), .drn_lvc2(), .src_bdy_lvc1(), .src_bdy_lvc2() - ); + ); - // Instantiate ground cells (7 total, 4 high clamps and 3 low clamps) - s8iom0_vssa_hvc_pad vsshclamp [3:0] ( + // Instantiate ground cells (7 total, 4 high clamps and 3 low clamps) + s8iom0_vssa_hvc_pad vsshclamp [3:0] ( `ABUTMENT_PINS .drn_hvc(), .src_bdy_hvc() - ); + ); - s8iom0_vssa_lvc_pad vssalclamp ( + s8iom0_vssa_lvc_pad vssalclamp ( `ABUTMENT_PINS .bdy2_b2b(), .drn_lvc1(), .drn_lvc2(), .src_bdy_lvc1(), .src_bdy_lvc2() - ); + ); - s8iom0_vssd_lvc_pad vssdlclamp ( + s8iom0_vssd_lvc_pad vssdlclamp ( `ABUTMENT_PINS .bdy2_b2b(), .drn_lvc1(), .drn_lvc2(), .src_bdy_lvc1(), .src_bdy_lvc2() - ); + ); - s8iom0_vssio_lvc_pad vssiolclamp ( + s8iom0_vssio_lvc_pad vssiolclamp ( `ABUTMENT_PINS .bdy2_b2b(), .drn_lvc1(), .drn_lvc2(), .src_bdy_lvc1(), .src_bdy_lvc2() - ); + ); - wire [47:0] dm_all; - assign dm_all = {gpio_mode1_core[15], gpio_mode1_core[15], gpio_mode0_core[15], - gpio_mode1_core[14], gpio_mode1_core[14], gpio_mode0_core[14], - gpio_mode1_core[13], gpio_mode1_core[13], gpio_mode0_core[13], - gpio_mode1_core[12], gpio_mode1_core[12], gpio_mode0_core[12], - gpio_mode1_core[11], gpio_mode1_core[11], gpio_mode0_core[11], - gpio_mode1_core[10], gpio_mode1_core[10], gpio_mode0_core[10], - gpio_mode1_core[9], gpio_mode1_core[9], gpio_mode0_core[9], - gpio_mode1_core[8], gpio_mode1_core[8], gpio_mode0_core[8], - gpio_mode1_core[7], gpio_mode1_core[7], gpio_mode0_core[7], - gpio_mode1_core[6], gpio_mode1_core[6], gpio_mode0_core[6], - gpio_mode1_core[5], gpio_mode1_core[5], gpio_mode0_core[5], - gpio_mode1_core[4], gpio_mode1_core[4], gpio_mode0_core[4], - gpio_mode1_core[3], gpio_mode1_core[3], gpio_mode0_core[3], - gpio_mode1_core[2], gpio_mode1_core[2], gpio_mode0_core[2], - gpio_mode1_core[1], gpio_mode1_core[1], gpio_mode0_core[1], + wire [5:0] dm_all; + assign dm_all = {gpio_mode1_core[1], gpio_mode1_core[1], gpio_mode0_core[1], gpio_mode1_core[0], gpio_mode1_core[0], gpio_mode0_core[0]}; wire[2:0] flash_io0_mode = @@ -185,7 +163,7 @@ wire[2:0] flash_io3_mode = {flash_io3_ieb_core, flash_io3_ieb_core, flash_io3_oeb_core}; - // GPIO pads + // GPIO pads `INOUT_PAD_V( gpio, gpio_in_core, gpio_out_core, 16, gpio_inenb_core, gpio_outenb_core, dm_all); @@ -204,79 +182,64 @@ flash_io3, flash_io3_di_core, flash_io3_do_core, flash_io3_ieb_core, flash_io3_oeb_core, flash_io3_mode); - `INPUT_PAD(xi, xi_core); + `INPUT_PAD(clock, clock_core); `INPUT_PAD(irq, irq_pin_core); - `INPUT_PAD(xclk,ext_clk_core); `INPUT_PAD(SDI, SDI_core); `INPUT_PAD(CSB, CSB_core); `INPUT_PAD(SCK, SCK_core); - - // Analog Pads - `INPUT_PAD_ANALOG(adc0_in,vss,vss); - `INPUT_PAD_ANALOG(adc1_in,vss,vss); - `INPUT_PAD_ANALOG(adc_high,vdd1v8,vdd1v8); - `INPUT_PAD_ANALOG(adc_low,vss,vss); - `INPUT_PAD_ANALOG(comp_inn,vss,vss); - `INPUT_PAD_ANALOG(comp_inp,vdd1v8,vss); + `INPUT_PAD(ser_rx, ser_rx_core); // Output Pads - `OUTPUT_PAD(xo,pll_clk16,vdd1v8,vss); - `OUTPUT_PAD(SDO,SDO_core,vdd1v8,SDO_enb); - + `OUTPUT_PAD(SDO, SDO_core, vdd1v8, SDO_enb); `OUTPUT_PAD(flash_csb, flash_csb_core, flash_csb_ieb_core, flash_csb_oeb_core); `OUTPUT_PAD(flash_clk, flash_clk_core, flash_clk_ieb_core, flash_clk_oeb_core); + `OUTPUT_PAD(ser_tx, ser_tx_core, vdd1v8, ser_tx_ena); - // Instantiate GPIO overvoltage (I2C) compliant cell - // (Use this for ser_rx and ser_tx; no reason other than testing - // the use of the cell.) (Might be worth adding in the I2C IP from - // ravenna just to test on a proper I2C channel.) - `I2C_RX(ser_rx, ser_rx_core); - `I2C_TX(ser_tx, ser_tx_core); // NOTE: The analog_out pad from the raven chip has been replaced by - // the digital reset input RSTB on striVe due to the lack of an on-board - // power-on-reset circuit. The XRES pad is used for providing a glitch- - // free reset. + // the digital reset input RSTB on striVe due to the lack of an on-board + // power-on-reset circuit. The XRES pad is used for providing a glitch- + // free reset. s8iom0s8_top_xres4v2 RSTB_pad ( `ABUTMENT_PINS -`ifndef TOP_ROUTING - .pad(RSTB), -`endif + `ifndef TOP_ROUTING + .pad(RSTB), + `endif .tie_weak_hi_h(xresloop), // Loop-back connection to pad through pad_a_esd_h .tie_hi_esd(), .tie_lo_esd(), .pad_a_esd_h(xresloop), .xres_h_n(porb_h), .disable_pullup_h(vss), // 0 = enable pull-up on reset pad - .enable_h(vdd), // Power-on-reset to the power-on-reset input?? + .enable_h(vdd3v3), // Power-on-reset to the power-on-reset input?? .en_vddio_sig_h(vss), // No idea. .inp_sel_h(vss), // 1 = use filt_in_h else filter the pad input .filt_in_h(vss), // Alternate input for glitch filter .pullup_h(vss), // Pullup connection for alternate filter input .enable_vddio(vdd1v8) - ); + ); // Corner cells (These are overlay cells; it is not clear what is normally - // supposed to go under them.) - `ifndef TOP_ROUTING - s8iom0_corner_pad corner [3:0] ( + // supposed to go under them.) + `ifndef TOP_ROUTING + s8iom0_corner_pad corner [3:0] ( .vssio(vss), - .vddio(vdd), + .vddio(vdd3v3), .vddio_q(vddio_q), .vssio_q(vssio_q), .amuxbus_a(analog_a), .amuxbus_b(analog_b), .vssd(vss), .vssa(vss), - .vswitch(vdd), - .vdda(vdd), + .vswitch(vdd3v3), + .vdda(vdd3v3), .vccd(vdd1v8), .vcchib(vdd1v8) - ); -`endif + ); + `endif mprj_io mprj_pads( - .vdd(vdd), + .vdd(vdd3v3), .vdd1v8(vdd1v8), .vss(vss), .vddio_q(vddio_q), @@ -297,4 +260,4 @@ .io_in(mprj_io_in) ); -endmodule \ No newline at end of file +endmodule
diff --git a/verilog/rtl/digital_pll.v b/verilog/rtl/digital_pll.v index d7dc839..0efe7bb 100644 --- a/verilog/rtl/digital_pll.v +++ b/verilog/rtl/digital_pll.v
@@ -64,7 +64,7 @@ // Derive negative-sense reset from the input positive-sense reset - scs8hd_inv_4 irb ( + sky130_fd_sc_hd__inv_4 irb ( .A(reset), .Y(resetb) ); @@ -73,7 +73,7 @@ // with digital standard cells with inverted resets, so the // reset has to be inverted as well. - scs8hd_dfrbp_1 idiv2 ( + sky130_fd_sc_hd__dfrbp_1 idiv2 ( .CLK(clockp[1]), .D(clockd[0]), .Q(nint[0]), @@ -81,7 +81,7 @@ .RESETB(resetb) ); - scs8hd_dfrbp_1 idiv4 ( + sky130_fd_sc_hd__dfrbp_1 idiv4 ( .CLK(clockd[0]), .D(clockd[1]), .Q(nint[1]), @@ -89,7 +89,7 @@ .RESETB(resetb) ); - scs8hd_dfrbp_1 idiv8 ( + sky130_fd_sc_hd__dfrbp_1 idiv8 ( .CLK(clockd[1]), .D(clockd[2]), .Q(nint[2]), @@ -97,7 +97,7 @@ .RESETB(resetb) ); - scs8hd_dfrbp_1 idiv16 ( + sky130_fd_sc_hd__dfrbp_1 idiv16 ( .CLK(clockd[2]), .D(clockd[3]), .Q(nint[3]),
diff --git a/verilog/rtl/harness_chip.v b/verilog/rtl/harness_chip.v deleted file mode 100644 index 52992eb..0000000 --- a/verilog/rtl/harness_chip.v +++ /dev/null
@@ -1,378 +0,0 @@ -/*----------------------------------------------------------*/ -/* striVe, a raven/ravenna-like architecture in SkyWater s8 */ -/* */ -/* 1st edition, test of SkyWater s8 process */ -/* This version is missing all analog functionality, */ -/* including crystal oscillator, voltage regulator, and PLL */ -/* For simplicity, the pad arrangement of Raven has been */ -/* retained, even though many pads have no internal */ -/* connection. */ -/* */ -/* Copyright 2020 efabless, Inc. */ -/* Written by Tim Edwards, December 2019 */ -/* This file is open source hardware released under the */ -/* Apache 2.0 license. See file LICENSE. */ -/* */ -/*----------------------------------------------------------*/ - -`timescale 1 ns / 1 ps - -`define USE_OPENRAM -`define USE_PG_PIN -`define functional - -`define MPRJ_IO_PADS 32 - -`include "pads.v" - -`include "/ef/tech/SW/EFS8A/libs.ref/verilog/s8iom0s8/s8iom0s8.v" -`include "/ef/tech/SW/EFS8A/libs.ref/verilog/s8iom0s8/power_pads_lib.v" -`include "/ef/tech/SW/EFS8A/libs.ref/verilog/scs8hd/scs8hd.v" - -`include "lvlshiftdown.v" -`include "mgmt_soc.v" -`include "striVe_spi.v" -`include "digital_pll.v" -`include "striVe_clkrst.v" -`include "mprj_counter.v" -`include "mgmt_core.v" -`include "mprj_io.v" -`include "chip_io.v" - -`ifdef USE_OPENRAM - `include "sram_1rw1r_32_8192_8_sky130.v" -`endif - -module harness_chip ( - inout vdd, - inout vdd1v8, - inout vss, - inout [15:0] gpio, - inout [`MPRJ_IO_PADS-1:0] mprj_io, - input xi, // CMOS clock input, not a crystal - output xo, // divide-by-16 clock output - input adc0_in, - input adc1_in, - input adc_high, - input adc_low, - input comp_inn, - input comp_inp, - input RSTB, // NOTE: Replaces analog_out pin from raven chip - input ser_rx, - output ser_tx, - input irq, - output SDO, - input SDI, - input CSB, - input SCK, - input xclk, - output flash_csb, - output flash_clk, - output flash_io0, - output flash_io1, - output flash_io2, - output flash_io3 -); - - wire [15:0] gpio_out_core; - wire [15:0] gpio_in_core; - wire [15:0] gpio_mode0_core; - wire [15:0] gpio_mode1_core; - wire [15:0] gpio_outenb_core; - wire [15:0] gpio_inenb_core; - - // Mega-Project Control - wire [`MPRJ_IO_PADS-1:0] mprj_io_oeb_n; - wire [`MPRJ_IO_PADS-1:0] mprj_io_hldh_n; - wire [`MPRJ_IO_PADS-1:0] mprj_io_enh; - wire [`MPRJ_IO_PADS-1:0] mprj_io_inp_dis; - wire [`MPRJ_IO_PADS-1:0] mprj_io_ib_mode_sel; - wire [`MPRJ_IO_PADS-1:0] mprj_io_analog_en; - wire [`MPRJ_IO_PADS-1:0] mprj_io_analog_sel; - wire [`MPRJ_IO_PADS-1:0] mprj_io_analog_pol; - wire [`MPRJ_IO_PADS*3-1:0] mprj_io_dm; - wire [`MPRJ_IO_PADS-1:0] mprj_io_in; - wire [`MPRJ_IO_PADS-1:0] mprj_io_out; - - wire porb_h; - wire porb_l; - wire por; - wire SCK_core; - wire SDI_core; - wire CSB_core; - wire SDO_core; - wire SDO_enb; - - chip_io padframe( - // Package Pins - .vdd(vdd), - .vdd1v8(vdd1v8), - .vss(vss), - .gpio(gpio), - .mprj_io(mprj_io), - .xi(xi), - .xo(xo), - .adc0_in(adc0_in), - .adc1_in(adc1_in), - .adc_high(adc_high), - .adc_low(adc_low), - .comp_inn(comp_inn), - .comp_inp(comp_inp), - .RSTB(RSTB), - .ser_rx(ser_rx), - .ser_tx(ser_tx), - .irq(irq), - .SDO(SDO), - .SDI(SDI), - .CSB(CSB), - .SCK(SCK), - .xclk(xclk), - .flash_csb(flash_csb), - .flash_clk(flash_clk), - .flash_io0(flash_io0), - .flash_io1(flash_io1), - .flash_io2(flash_io2), - .flash_io3(flash_io3), - // SoC Core Interface - .por(por), - .porb_h(porb_h), - .ext_clk_core(ext_clk_core), - .xi_core(xi_core), - .gpio_out_core(gpio_out_core), - .gpio_in_core(gpio_in_core), - .gpio_mode0_core(gpio_mode0_core), - .gpio_mode1_core(gpio_mode1_core), - .gpio_outenb_core(gpio_outenb_core), - .gpio_inenb_core(gpio_inenb_core), - .SCK_core(SCK_core), - .ser_rx_core(ser_rx_core), - .ser_tx_core(ser_tx_core), - .irq_pin_core(irq_pin_core), - .flash_csb_core(flash_csb_core), - .flash_clk_core(flash_clk_core), - .flash_csb_oeb_core(flash_csb_oeb_core), - .flash_clk_oeb_core(flash_clk_oeb_core), - .flash_io0_oeb_core(flash_io0_oeb_core), - .flash_io1_oeb_core(flash_io1_oeb_core), - .flash_io2_oeb_core(flash_io2_oeb_core), - .flash_io3_oeb_core(flash_io3_oeb_core), - .flash_csb_ieb_core(flash_csb_ieb_core), - .flash_clk_ieb_core(flash_clk_ieb_core), - .flash_io0_ieb_core(flash_io0_ieb_core), - .flash_io1_ieb_core(flash_io1_ieb_core), - .flash_io2_ieb_core(flash_io2_ieb_core), - .flash_io3_ieb_core(flash_io3_ieb_core), - .flash_io0_do_core(flash_io0_do_core), - .flash_io1_do_core(flash_io1_do_core), - .flash_io2_do_core(flash_io2_do_core), - .flash_io3_do_core(flash_io3_do_core), - .flash_io0_di_core(flash_io0_di_core), - .flash_io1_di_core(flash_io1_di_core), - .flash_io2_di_core(flash_io2_di_core), - .flash_io3_di_core(flash_io3_di_core), - .SDI_core(SDI_core), - .CSB_core(CSB_core), - .pll_clk16(pll_clk16), - .SDO_core(SDO_core), - .mprj_io_in(mprj_io_in), - .mprj_io_out(mprj_io_out), - .mprj_io_oeb_n(mprj_io_oeb_n), - .mprj_io_hldh_n(mprj_io_hldh_n), - .mprj_io_enh(mprj_io_enh), - .mprj_io_inp_dis(mprj_io_inp_dis), - .mprj_io_ib_mode_sel(mprj_io_ib_mode_sel), - .mprj_io_analog_en(mprj_io_analog_en), - .mprj_io_analog_sel(mprj_io_analog_sel), - .mprj_io_analog_pol(mprj_io_analog_pol), - .mprj_io_dm(mprj_io_dm) - ); - - // SoC core - wire striVe_clk; - wire striVe_rstn; - - wire [9:0] adc0_data_core; - wire [1:0] adc0_inputsrc_core; - wire [9:0] adc1_data_core; - wire [1:0] adc1_inputsrc_core; - wire [9:0] dac_value_core; - wire [1:0] comp_ninputsrc_core; - wire [1:0] comp_pinputsrc_core; - wire [7:0] spi_ro_config_core; - - // LA signals - wire [127:0] la_output_core; // From CPU to MPRJ - wire [127:0] la_data_in_mprj; // From CPU to MPRJ - wire [127:0] la_data_out_mprj; // From CPU to MPRJ - wire [127:0] la_output_mprj; // From MPRJ to CPU - wire [127:0] la_oen; // LA output enable from CPU perspective (active-low) - - // WB MI A (Mega Project) - wire mprj_cyc_o_core; - wire mprj_stb_o_core; - wire mprj_we_o_core; - wire [3:0] mprj_sel_o_core; - wire [31:0] mprj_adr_o_core; - wire [31:0] mprj_dat_o_core; - wire mprj_ack_i_core; - wire [31:0] mprj_dat_i_core; - - // WB MI B (xbar) - wire xbar_cyc_o_core; - wire xbar_stb_o_core; - wire xbar_we_o_core; - wire [3:0] xbar_sel_o_core; - wire [31:0] xbar_adr_o_core; - wire [31:0] xbar_dat_o_core; - wire xbar_ack_i_core; - wire [31:0] xbar_dat_i_core; - - mgmt_core soc ( - `ifdef LVS - .vdd1v8(vdd1v8), - .vss(vss), - `endif - .ext_clk(ext_clk_core), - .gpio_out_pad(gpio_out_core), - .gpio_in_pad(gpio_in_core), - .gpio_mode0_pad(gpio_mode0_core), - .gpio_mode1_pad(gpio_mode1_core), - .gpio_outenb_pad(gpio_outenb_core), - .gpio_inenb_pad(gpio_inenb_core), - .adc0_ena(adc0_ena_core), - .adc0_convert(adc0_convert_core), - .adc0_data(adc0_data_core), - .adc0_done(adc0_done_core), - .adc0_clk(adc0_clk_core), - .adc0_inputsrc(adc0_inputsrc_core), - .adc1_ena(adc1_ena_core), - .adc1_convert(adc1_convert_core), - .adc1_clk(adc1_clk_core), - .adc1_inputsrc(adc1_inputsrc_core), - .adc1_data(adc1_data_core), - .adc1_done(adc1_done_core), - .dac_ena(dac_ena_core), - .dac_value(dac_value_core), - .analog_out_sel(analog_out_sel_core), - .opamp_ena(opamp_ena_core), - .opamp_bias_ena(opamp_bias_ena_core), - .bg_ena(bg_ena_core), - .comp_ena(comp_ena_core), - .comp_ninputsrc(comp_ninputsrc_core), - .comp_pinputsrc(comp_pinputsrc_core), - .rcosc_ena(rcosc_ena_core), - .overtemp_ena(overtemp_ena_core), - .overtemp(overtemp_core), - .rcosc_in(rcosc_in_core), - .xtal_in(xtal_in_core), - .comp_in(comp_in_core), - .spi_sck(SCK_core), - .spi_ro_config(spi_ro_config_core), - .ser_tx(ser_tx_core), - .ser_rx(ser_rx_core), - .irq_pin(irq_pin_core), - .flash_csb(flash_csb_core), - .flash_clk(flash_clk_core), - .flash_csb_oeb(flash_csb_oeb_core), - .flash_clk_oeb(flash_clk_oeb_core), - .flash_io0_oeb(flash_io0_oeb_core), - .flash_io1_oeb(flash_io1_oeb_core), - .flash_io2_oeb(flash_io2_oeb_core), - .flash_io3_oeb(flash_io3_oeb_core), - .flash_csb_ieb(flash_csb_ieb_core), - .flash_clk_ieb(flash_clk_ieb_core), - .flash_io0_ieb(flash_io0_ieb_core), - .flash_io1_ieb(flash_io1_ieb_core), - .flash_io2_ieb(flash_io2_ieb_core), - .flash_io3_ieb(flash_io3_ieb_core), - .flash_io0_do(flash_io0_do_core), - .flash_io1_do(flash_io1_do_core), - .flash_io2_do(flash_io2_do_core), - .flash_io3_do(flash_io3_do_core), - .flash_io0_di(flash_io0_di_core), - .flash_io1_di(flash_io1_di_core), - .flash_io2_di(flash_io2_di_core), - .flash_io3_di(flash_io3_di_core), - .por(por), - .porb_l(porb_l), - .xi(xi_core), - .pll_clk16(pll_clk16), - .SDI_core(SDI_core), - .CSB_core(CSB_core), - .SDO_core(SDO_core), - .SDO_enb(SDO_enb), - .striVe_clk(striVe_clk), - .striVe_rstn(striVe_rstn), - // Logic Analyzer - .la_input(la_data_out_mprj), - .la_output(la_output_core), - .la_oen(la_oen), - // Mega Project IO Control - .mprj_io_oeb_n(mprj_io_oeb_n), - .mprj_io_enh(mprj_io_enh), - .mprj_io_hldh_n(mprj_io_hldh_n), - .mprj_io_inp_dis(mprj_io_inp_dis), - .mprj_io_ib_mode_sel(mprj_io_ib_mode_sel), - .mprj_io_analog_en(mprj_io_analog_en), - .mprj_io_analog_sel(mprj_io_analog_sel), - .mprj_io_analog_pol(mprj_io_analog_pol), - .mprj_io_dm(mprj_io_dm), - // Mega Project Slave ports (WB MI A) - .mprj_cyc_o(mprj_cyc_o_core), - .mprj_stb_o(mprj_stb_o_core), - .mprj_we_o(mprj_we_o_core), - .mprj_sel_o(mprj_sel_o_core), - .mprj_adr_o(mprj_adr_o_core), - .mprj_dat_o(mprj_dat_o_core), - .mprj_ack_i(mprj_ack_i_core), - .mprj_dat_i(mprj_dat_i_core), - // Xbar Switch (WB MI B) - .xbar_cyc_o(xbar_cyc_o_core), - .xbar_stb_o(xbar_stb_o_core), - .xbar_we_o (xbar_we_o_core), - .xbar_sel_o(xbar_sel_o_core), - .xbar_adr_o(xbar_adr_o_core), - .xbar_dat_o(xbar_dat_o_core), - .xbar_ack_i(xbar_ack_i_core), - .xbar_dat_i(xbar_dat_i_core) - ); - - scs8hd_ebufn_8 la_buf[127:0]( - .Z(la_data_in_mprj), - .A(la_output_core), - .TEB(la_oen) - ); - - mega_project mprj ( - .wb_clk_i(striVe_clk), - .wb_rst_i(!striVe_rstn), - // MGMT SoC Wishbone Slave - .wbs_cyc_i(mprj_cyc_o_core), - .wbs_stb_i(mprj_stb_o_core), - .wbs_we_i(mprj_we_o_core), - .wbs_sel_i(mprj_sel_o_core), - .wbs_adr_i(mprj_adr_o_core), - .wbs_dat_i(mprj_dat_o_core), - .wbs_ack_o(mprj_ack_i_core), - .wbs_dat_o(mprj_dat_i_core), - // Logic Analyzer - .la_data_in(la_data_in_mprj), - .la_data_out(la_data_out_mprj), - .la_oen (la_oen), - // IO Pads - .io_out(mprj_io_out), - .io_in (mprj_io_in) - ); - - lvlshiftdown porb_level_shift ( - `ifdef LVS - .vpwr(vdd1v8), - .vpb(vdd1v8), - .vnb(vss), - .vgnd(vss), - `endif - .A(porb_h), - .X(porb_l) - ); - -endmodule
diff --git a/verilog/rtl/lvlshiftdown.v b/verilog/rtl/lvlshiftdown.v deleted file mode 100644 index a647cf6..0000000 --- a/verilog/rtl/lvlshiftdown.v +++ /dev/null
@@ -1,30 +0,0 @@ -/* Level shifter (simplified model, as buffer only) */ - -module lvlshiftdown ( -`ifdef LVS - vpwr, vpb, vnb, vgnd, -`endif - A, - X - ); - - -`ifdef LVS - input vpwr; - input vpb; - input vnb; - input vgnd; -`endif - -input A; -output X; - -`ifdef LVS - wire vpwr, vpb, vnb, vgnd; -`endif - -wire A, X; - -assign X = A; - -endmodule // lvlshiftdown
diff --git a/verilog/rtl/mgmt_core.v b/verilog/rtl/mgmt_core.v index 9fe3a79..b959155 100644 --- a/verilog/rtl/mgmt_core.v +++ b/verilog/rtl/mgmt_core.v
@@ -1,44 +1,17 @@ module mgmt_core( `ifdef LVS + inout vdd3v3, inout vdd1v8, inout vss, `endif input ext_clk, - output[ 15:0] gpio_out_pad, // Connect to out on gpio pad - input [15:0] gpio_in_pad, // Connect to in on gpio pad + output[ 15:0] gpio_out_pad, // Connect to out on gpio pad + input [15:0] gpio_in_pad, // Connect to in on gpio pad output [15:0] gpio_mode0_pad, // Connect to dm[0] on gpio pad output [15:0] gpio_mode1_pad, // Connect to dm[2] on gpio pad output [15:0] gpio_outenb_pad, // Connect to oe_n on gpio pad output [15:0] gpio_inenb_pad, // Connect to inp_dis on gpio pad - output adc0_ena, - output adc0_convert, - input [9:0] adc0_data, - input adc0_done, - output adc0_clk, - output [1:0] adc0_inputsrc, - output adc1_ena, - output adc1_convert, - output adc1_clk, - output [1:0] adc1_inputsrc, - input [9:0] adc1_data, - input adc1_done, - output dac_ena, - output [9:0] dac_value, - output analog_out_sel, // Analog output select (DAC or bandgap) - output opamp_ena, // Op-amp enable for analog output - output opamp_bias_ena, // Op-amp bias enable for analog output - output bg_ena, // Bandgap enable - output comp_ena, - output [1:0] comp_ninputsrc, - output [1:0] comp_pinputsrc, - output rcosc_ena, - output overtemp_ena, - input overtemp, - input rcosc_in, // RC oscillator output - input xtal_in, // crystal oscillator output - input comp_in, // comparator output - input spi_sck, - input [7:0] spi_ro_config, + input [7:0] spi_ro_config, output ser_tx, input ser_rx, // IRQ @@ -68,52 +41,52 @@ input flash_io3_di, output por, input porb_l, - input xi, + input clock, output pll_clk16, input SDI_core, input CSB_core, output SDO_core, output SDO_enb, // LA signals - input [127:0] la_input, // From Mega-Project to cpu - output [127:0] la_output, // From CPU to Mega-Project - output [127:0] la_oen, // LA output enable + input [127:0] la_input, // From Mega-Project to cpu + output [127:0] la_output, // From CPU to Mega-Project + output [127:0] la_oen, // LA output enable // Mega-Project Control Signals output [`MPRJ_IO_PADS-1:0] mprj_io_oeb_n, - output [`MPRJ_IO_PADS-1:0] mprj_io_hldh_n, + output [`MPRJ_IO_PADS-1:0] mprj_io_hldh_n, output [`MPRJ_IO_PADS-1:0] mprj_io_enh, - output [`MPRJ_IO_PADS-1:0] mprj_io_inp_dis, - output [`MPRJ_IO_PADS-1:0] mprj_io_ib_mode_sel, - output [`MPRJ_IO_PADS-1:0] mprj_io_analog_en, - output [`MPRJ_IO_PADS-1:0] mprj_io_analog_sel, - output [`MPRJ_IO_PADS-1:0] mprj_io_analog_pol, - output [`MPRJ_IO_PADS*3-1:0] mprj_io_dm, + output [`MPRJ_IO_PADS-1:0] mprj_io_inp_dis, + output [`MPRJ_IO_PADS-1:0] mprj_io_ib_mode_sel, + output [`MPRJ_IO_PADS-1:0] mprj_io_analog_en, + output [`MPRJ_IO_PADS-1:0] mprj_io_analog_sel, + output [`MPRJ_IO_PADS-1:0] mprj_io_analog_pol, + output [`MPRJ_IO_PADS*3-1:0] mprj_io_dm, // WB MI A (Mega project) - input mprj_ack_i, + input mprj_ack_i, input [31:0] mprj_dat_i, - output mprj_cyc_o, + output mprj_cyc_o, output mprj_stb_o, output mprj_we_o, output [3:0] mprj_sel_o, output [31:0] mprj_adr_o, output [31:0] mprj_dat_o, - // WB MI B Switch - input xbar_ack_i, - input [31:0] xbar_dat_i, - output xbar_cyc_o, - output xbar_stb_o, - output xbar_we_o, - output [3:0] xbar_sel_o, - output [31:0] xbar_adr_o, - output [31:0] xbar_dat_o, + // WB MI B Switch + input xbar_ack_i, + input [31:0] xbar_dat_i, + output xbar_cyc_o, + output xbar_stb_o, + output xbar_we_o, + output [3:0] xbar_sel_o, + output [31:0] xbar_adr_o, + output [31:0] xbar_dat_o, - output striVe_clk, - output striVe_rstn + output striVe_clk, + output striVe_rstn ); - wire ext_clk_sel; - wire ext_clk; - wire pll_clk; - wire ext_reset; + wire ext_clk_sel; + wire ext_clk; + wire pll_clk; + wire ext_reset; striVe_clkrst clkrst( `ifdef LVS @@ -129,30 +102,30 @@ .resetn(striVe_rstn) ); - // SoC core - wire [9:0] adc0_data_core; - wire [1:0] adc0_inputsrc_core; - wire [9:0] adc1_data_core; - wire [1:0] adc1_inputsrc_core; - wire [9:0] dac_value_core; - wire [1:0] comp_ninputsrc_core; - wire [1:0] comp_pinputsrc_core; - wire [7:0] spi_ro_config_core; + // SoC core + wire [9:0] adc0_data_core; + wire [1:0] adc0_inputsrc_core; + wire [9:0] adc1_data_core; + wire [1:0] adc1_inputsrc_core; + wire [9:0] dac_value_core; + wire [1:0] comp_ninputsrc_core; + wire [1:0] comp_pinputsrc_core; + wire [7:0] spi_ro_config_core; - // HKSPI + // HKSPI wire [11:0] spi_ro_mfgr_id; - wire [7:0] spi_ro_prod_id; - wire [3:0] spi_ro_mask_rev; + wire [7:0] spi_ro_prod_id; + wire [3:0] spi_ro_mask_rev; wire [2:0] spi_ro_pll_sel; - wire [4:0] spi_ro_pll_div; - wire [25:0] spi_ro_pll_trim; + wire [4:0] spi_ro_pll_div; + wire [25:0] spi_ro_pll_trim; mgmt_soc soc ( - `ifdef LVS - .vdd1v8(vdd1v8), - .vss(vss), - `endif - .pll_clk(pll_clk), + `ifdef LVS + .vdd1v8(vdd1v8), + .vss(vss), + `endif + .pll_clk(pll_clk), .ext_clk(ext_clk), .ext_clk_sel(ext_clk_sel), .clk(striVe_clk), @@ -163,37 +136,7 @@ .gpio_mode1_pad(gpio_mode1_pad), .gpio_outenb_pad(gpio_outenb_pad), .gpio_inenb_pad(gpio_inenb_pad), - .adc0_ena(adc0_ena), - .adc0_convert(adc0_convert), - .adc0_data(adc0_data), - .adc0_done(adc0_done), - .adc0_clk(adc0_clk), - .adc0_inputsrc(adc0_inputsrc), - .adc1_ena(adc1_ena), - .adc1_convert(adc1_convert), - .adc1_clk(adc1_clk), - .adc1_inputsrc(adc1_inputsrc), - .adc1_data(adc1_data), - .adc1_done(adc1_done), - .dac_ena(dac_ena), - .dac_value(dac_value), - .analog_out_sel(analog_out_sel), - .opamp_ena(opamp_ena), - .opamp_bias_ena(opamp_bias_ena), - .bg_ena(bg_ena), - .comp_ena(comp_ena), - .comp_ninputsrc(comp_ninputsrc), - .comp_pinputsrc(comp_pinputsrc), - .rcosc_ena(rcosc_ena), - .overtemp_ena(overtemp_ena), - .overtemp(overtemp), - .rcosc_in(rcosc_in), - .xtal_in(xtal_in), - .comp_in(comp_in), - .spi_sck(spi_sck), .spi_ro_config(spi_ro_config), - .spi_ro_xtal_ena(spi_ro_xtal_ena), - .spi_ro_reg_ena(spi_ro_reg_ena), .spi_ro_pll_dco_ena(spi_ro_pll_dco_ena), .spi_ro_pll_div(spi_ro_pll_div), .spi_ro_pll_sel(spi_ro_pll_sel), @@ -235,14 +178,14 @@ .la_oen(la_oen), // Mega-Project Control .mprj_io_oeb_n(mprj_io_oeb_n), - .mprj_io_hldh_n(mprj_io_hldh_n), + .mprj_io_hldh_n(mprj_io_hldh_n), .mprj_io_enh(mprj_io_enh), - .mprj_io_inp_dis(mprj_io_inp_dis), - .mprj_io_ib_mode_sel(mprj_io_ib_mode_sel), - .mprj_io_analog_en(mprj_io_analog_en), - .mprj_io_analog_sel(mprj_io_analog_sel), - .mprj_io_analog_pol(mprj_io_analog_pol), - .mprj_io_dm(mprj_io_dm), + .mprj_io_inp_dis(mprj_io_inp_dis), + .mprj_io_ib_mode_sel(mprj_io_ib_mode_sel), + .mprj_io_analog_en(mprj_io_analog_en), + .mprj_io_analog_sel(mprj_io_analog_sel), + .mprj_io_analog_pol(mprj_io_analog_pol), + .mprj_io_dm(mprj_io_dm), // Mega Project Slave ports (WB MI A) .mprj_cyc_o(mprj_cyc_o), .mprj_stb_o(mprj_stb_o), @@ -253,21 +196,21 @@ .mprj_ack_i(mprj_ack_i), .mprj_dat_i(mprj_dat_i), // Crossbar Switch - .xbar_cyc_o(xbar_cyc_o), - .xbar_stb_o(xbar_stb_o), - .xbar_we_o (xbar_we_o), - .xbar_sel_o(xbar_sel_o), - .xbar_adr_o(xbar_adr_o), - .xbar_dat_o(xbar_dat_o), - .xbar_ack_i(xbar_ack_i), - .xbar_dat_i(xbar_dat_i) - ); + .xbar_cyc_o(xbar_cyc_o), + .xbar_stb_o(xbar_stb_o), + .xbar_we_o (xbar_we_o), + .xbar_sel_o(xbar_sel_o), + .xbar_adr_o(xbar_adr_o), + .xbar_dat_o(xbar_dat_o), + .xbar_ack_i(xbar_ack_i), + .xbar_dat_i(xbar_dat_i) + ); - digital_pll pll ( - `ifdef LVS + digital_pll pll ( + `ifdef LVS .vdd(vdd1v8), .vss(vss), - `endif + `endif .reset(por), .extclk_sel(ext_clk_sel), .osc(xi), @@ -278,49 +221,48 @@ .sel(spi_ro_pll_sel), .dco(spi_ro_pll_dco_ena), .ext_trim(spi_ro_pll_trim) - ); + ); // For the mask revision input, use an array of digital constant logic cells wire [3:0] mask_rev; - wire [3:0] no_connect; - scs8hd_conb_1 mask_rev_value [3:0] ( - `ifdef LVS - .vpwr(vdd1v8), - .vpb(vdd1v8), - .vnb(vss), - .vgnd(vss), - `endif - .HI({no_connect[3:1], mask_rev[0]}), - .LO({mask_rev[3:1], no_connect[0]}) - ); + wire [3:0] no_connect; - // Housekeeping SPI at 1.8V. - striVe_spi housekeeping ( - `ifdef LVS - .vdd(vdd1v8), + scs8hd_conb_1 mask_rev_value [3:0] ( + `ifdef LVS + .vpwr(vdd1v8), + .vpb(vdd1v8), + .vnb(vss), + .vgnd(vss), + `endif + .HI({no_connect[3:1], mask_rev[0]}), + .LO({mask_rev[3:1], no_connect[0]}) + ); + + // Housekeeping SPI at 3.3V. + striVe_spi housekeeping ( + `ifdef LVS + .vdd(vdd3v3), .vss(vss), - `endif + `endif .RSTB(porb_l), .SCK(spi_sck), .SDI(SDI_core), .CSB(CSB_core), .SDO(SDO_core), .sdo_enb(SDO_enb), - .xtal_ena(spi_ro_xtal_ena), - .reg_ena(spi_ro_reg_ena), .pll_dco_ena(spi_ro_pll_dco_ena), .pll_sel(spi_ro_pll_sel), .pll_div(spi_ro_pll_div), - .pll_trim(spi_ro_pll_trim), + .pll_trim(spi_ro_pll_trim), .pll_bypass(ext_clk_sel), .irq(irq_spi), .RST(por), .reset(ext_reset), .trap(trap), - .mfgr_id(spi_ro_mfgr_id), + .mfgr_id(spi_ro_mfgr_id), .prod_id(spi_ro_prod_id), .mask_rev_in(mask_rev), .mask_rev(spi_ro_mask_rev) - ); + ); -endmodule \ No newline at end of file +endmodule
diff --git a/verilog/rtl/mgmt_soc.v b/verilog/rtl/mgmt_soc.v index af27f99..ab1ff53 100644 --- a/verilog/rtl/mgmt_soc.v +++ b/verilog/rtl/mgmt_soc.v
@@ -53,12 +53,12 @@ input resetn, // Memory mapped I/O signals - output [15:0] gpio_out_pad, // Connect to out on gpio pad - input [15:0] gpio_in_pad, // Connect to in on gpio pad - output [15:0] gpio_mode0_pad, // Connect to dm[0] on gpio pad - output [15:0] gpio_mode1_pad, // Connect to dm[2] on gpio pad - output [15:0] gpio_outenb_pad, // Connect to oe_n on gpio pad - output [15:0] gpio_inenb_pad, // Connect to inp_dis on gpio pad + output [1:0] gpio_out_pad, // Connect to out on gpio pad + input [1:0] gpio_in_pad, // Connect to in on gpio pad + output [1:0] gpio_mode0_pad, // Connect to dm[0] on gpio pad + output [1:0] gpio_mode1_pad, // Connect to dm[2] on gpio pad + output [1:0] gpio_outenb_pad, // Connect to oe_n on gpio pad + output [1:0] gpio_inenb_pad, // Connect to inp_dis on gpio pad // LA signals input [127:0] la_input, // From Mega-Project to cpu @@ -76,43 +76,8 @@ output [MPRJ_IO_PADS-1:0] mprj_io_analog_pol, output [MPRJ_IO_PADS*3-1:0] mprj_io_dm, - output adc0_ena, - output adc0_convert, - input [9:0] adc0_data, - input adc0_done, - output adc0_clk, - output [1:0] adc0_inputsrc, - output adc1_ena, - output adc1_convert, - output adc1_clk, - output [1:0] adc1_inputsrc, - input [9:0] adc1_data, - input adc1_done, - - output dac_ena, - output [9:0] dac_value, - - output analog_out_sel, // Analog output select (DAC or bandgap) - output opamp_ena, // Op-amp enable for analog output - output opamp_bias_ena, // Op-amp bias enable for analog output - output bg_ena, // Bandgap enable - - output comp_ena, - output [1:0] comp_ninputsrc, - output [1:0] comp_pinputsrc, - output rcosc_ena, - - output overtemp_ena, - input overtemp, - input rcosc_in, // RC oscillator output - input xtal_in, // crystal oscillator output - input comp_in, // comparator output - input spi_sck, - input [7:0] spi_ro_config, - input spi_ro_xtal_ena, - input spi_ro_reg_ena, - input spi_ro_pll_dco_ena, + input spi_ro_pll_dco_ena, input [4:0] spi_ro_pll_div, input [2:0] spi_ro_pll_sel, input [25:0] spi_ro_pll_trim, @@ -163,13 +128,13 @@ // WB MI A (Mega project) input mprj_ack_i, - input [31:0] mprj_dat_i, + input [31:0] mprj_dat_i, output mprj_cyc_o, - output mprj_stb_o, - output mprj_we_o, - output [3:0] mprj_sel_o, - output [31:0] mprj_adr_o, - output [31:0] mprj_dat_o, + output mprj_stb_o, + output mprj_we_o, + output [3:0] mprj_sel_o, + output [31:0] mprj_adr_o, + output [31:0] mprj_dat_o, // WB MI B (xbar) input [31:0] xbar_dat_i, @@ -279,129 +244,36 @@ }; // memory-mapped I/O control registers - wire [15:0] gpio_pullup; // Intermediate GPIO pullup - wire [15:0] gpio_pulldown; // Intermediate GPIO pulldown - wire [15:0] gpio_outenb; // Intermediate GPIO out enable (bar) - wire [15:0] gpio_out; // Intermediate GPIO output + wire [1:0] gpio_pullup; // Intermediate GPIO pullup + wire [1:0] gpio_pulldown; // Intermediate GPIO pulldown + wire [1:0] gpio_outenb; // Intermediate GPIO out enable (bar) + wire [1:0] gpio_out; // Intermediate GPIO output - wire [15:0] gpio; // GPIO output data - wire [15:0] gpio_pu; // GPIO pull-up enable - wire [15:0] gpio_pd; // GPIO pull-down enable - wire [15:0] gpio_oeb; // GPIO output enable (sense negative) + wire [1:0] gpio; // GPIO output data + wire [1:0] gpio_pu; // GPIO pull-up enable + wire [1:0] gpio_pd; // GPIO pull-down enable + wire [1:0] gpio_oeb; // GPIO output enable (sense negative) - wire [1:0] rcosc_output_dest; // RC oscillator output destination - wire [1:0] overtemp_dest; // Over-temperature alarm destination - wire [1:0] pll_output_dest; // PLL clock output destination - wire [1:0] xtal_output_dest; // Crystal oscillator output destination - wire [1:0] trap_output_dest; // Trap signal output destination - wire [1:0] irq_7_inputsrc; // IRQ 5 source - wire [1:0] irq_8_inputsrc; // IRQ 6 source - - // Analgo registers (not-used) - reg adc0_ena; // ADC0 enable - reg adc0_convert; // ADC0 convert - reg [1:0] adc0_clksrc; // ADC0 clock source - reg [1:0] adc0_inputsrc; // ADC0 input source - reg adc1_ena; // ADC1 enable - reg adc1_convert; // ADC1 convert - reg [1:0] adc1_clksrc; // ADC1 clock source - reg [1:0] adc1_inputsrc; // ADC1 input source - reg dac_ena; // DAC enable - reg [9:0] dac_value; // DAC output value - reg comp_ena; // Comparator enable - reg [1:0] comp_ninputsrc; // Comparator negative input source - reg [1:0] comp_pinputsrc; // Comparator positive input source - reg [1:0] comp_output_dest; // Comparator output destination - - reg analog_out_sel; // Analog output select - reg opamp_ena; // Analog output op-amp enable - reg opamp_bias_ena; // Analog output op-amp bias enable - reg bg_ena; // Bandgap enable - wire adc0_clk; // ADC0 clock (multiplexed) - wire adc1_clk; // ADC1 clock (multiplexed) - - // ADC clock assignments - assign adc0_clk = (adc0_clksrc == 2'b00) ? rcosc_in : - (adc0_clksrc == 2'b01) ? spi_sck : - (adc0_clksrc == 2'b10) ? xtal_in : - ext_clk; - - assign adc1_clk = (adc1_clksrc == 2'b00) ? rcosc_in : - (adc1_clksrc == 2'b01) ? spi_sck : - (adc1_clksrc == 2'b10) ? xtal_in : - ext_clk; + wire pll_output_dest; // PLL clock output destination + wire trap_output_dest; // Trap signal output destination + wire irq_7_inputsrc; // IRQ 7 source + wire irq_8_inputsrc; // IRQ 8 source // GPIO assignments - assign gpio_out[0] = (comp_output_dest == 2'b01) ? comp_in : gpio[0]; - assign gpio_out[1] = (comp_output_dest == 2'b10) ? comp_in : gpio[1]; - assign gpio_out[2] = (rcosc_output_dest == 2'b01) ? rcosc_in : gpio[2]; - assign gpio_out[3] = (rcosc_output_dest == 2'b10) ? rcosc_in : gpio[3]; - assign gpio_out[4] = (rcosc_output_dest == 2'b11) ? rcosc_in : gpio[4]; - assign gpio_out[5] = (xtal_output_dest == 2'b01) ? xtal_in : gpio[5]; - assign gpio_out[6] = (xtal_output_dest == 2'b10) ? xtal_in : gpio[6]; - assign gpio_out[7] = (xtal_output_dest == 2'b11) ? xtal_in : gpio[7]; - assign gpio_out[8] = (pll_output_dest == 2'b01) ? pll_clk : gpio[8]; - assign gpio_out[9] = (pll_output_dest == 2'b10) ? pll_clk : gpio[9]; - assign gpio_out[10] = (pll_output_dest == 2'b11) ? clk : gpio[10]; - assign gpio_out[11] = (trap_output_dest == 2'b01) ? trap : gpio[11]; - assign gpio_out[12] = (trap_output_dest == 2'b10) ? trap : gpio[12]; - assign gpio_out[13] = (trap_output_dest == 2'b11) ? trap : gpio[13]; - assign gpio_out[14] = (overtemp_dest == 2'b01) ? overtemp : gpio[14]; - assign gpio_out[15] = (overtemp_dest == 2'b10) ? overtemp : gpio[15]; + assign gpio_out[0] = (pll_output_dest == 1'b1) ? pll_clk : gpio[0]; + assign gpio_out[1] = (trap_output_dest == 1'b1) ? trap : gpio[1]; - assign gpio_outenb[0] = (comp_output_dest == 2'b00) ? gpio_oeb[0] : 1'b0; - assign gpio_outenb[1] = (comp_output_dest == 2'b00) ? gpio_oeb[1] : 1'b0; - assign gpio_outenb[2] = (rcosc_output_dest == 2'b00) ? gpio_oeb[2] : 1'b0; - assign gpio_outenb[3] = (rcosc_output_dest == 2'b00) ? gpio_oeb[3] : 1'b0; - assign gpio_outenb[4] = (rcosc_output_dest == 2'b00) ? gpio_oeb[4] : 1'b0; - assign gpio_outenb[5] = (xtal_output_dest == 2'b00) ? gpio_oeb[5] : 1'b0; - assign gpio_outenb[6] = (xtal_output_dest == 2'b00) ? gpio_oeb[6] : 1'b0; - assign gpio_outenb[7] = (xtal_output_dest == 2'b00) ? gpio_oeb[7] : 1'b0; - assign gpio_outenb[8] = (pll_output_dest == 2'b00) ? gpio_oeb[8] : 1'b0; - assign gpio_outenb[9] = (pll_output_dest == 2'b00) ? gpio_oeb[9] : 1'b0; - assign gpio_outenb[10] = (pll_output_dest == 2'b00) ? gpio_oeb[10] : 1'b0; - assign gpio_outenb[11] = (trap_output_dest == 2'b00) ? gpio_oeb[11] : 1'b0; - assign gpio_outenb[12] = (trap_output_dest == 2'b00) ? gpio_oeb[12] : 1'b0; - assign gpio_outenb[13] = (trap_output_dest == 2'b00) ? gpio_oeb[13] : 1'b0; - assign gpio_outenb[14] = (overtemp_dest == 2'b00) ? gpio_oeb[14] : 1'b0; - assign gpio_outenb[15] = (overtemp_dest == 2'b00) ? gpio_oeb[15] : 1'b0; + assign gpio_outenb[0] = (pll_output_dest == 1'b0) ? gpio_oeb[0] : 1'b0; + assign gpio_outenb[1] = (trap_output_dest == 1'b0) ? gpio_oeb[1] : 1'b0; - assign gpio_pullup[0] = (comp_output_dest == 2'b00) ? gpio_pu[0] : 1'b0; - assign gpio_pullup[1] = (comp_output_dest == 2'b00) ? gpio_pu[1] : 1'b0; - assign gpio_pullup[2] = (rcosc_output_dest == 2'b00) ? gpio_pu[2] : 1'b0; - assign gpio_pullup[3] = (rcosc_output_dest == 2'b00) ? gpio_pu[3] : 1'b0; - assign gpio_pullup[4] = (rcosc_output_dest == 2'b00) ? gpio_pu[4] : 1'b0; - assign gpio_pullup[5] = (xtal_output_dest == 2'b00) ? gpio_pu[5] : 1'b0; - assign gpio_pullup[6] = (xtal_output_dest == 2'b00) ? gpio_pu[6] : 1'b0; - assign gpio_pullup[7] = (xtal_output_dest == 2'b00) ? gpio_pu[7] : 1'b0; - assign gpio_pullup[8] = (pll_output_dest == 2'b00) ? gpio_pu[8] : 1'b0; - assign gpio_pullup[9] = (pll_output_dest == 2'b00) ? gpio_pu[9] : 1'b0; - assign gpio_pullup[10] = (pll_output_dest == 2'b00) ? gpio_pu[10] : 1'b0; - assign gpio_pullup[11] = (trap_output_dest == 2'b00) ? gpio_pu[11] : 1'b0; - assign gpio_pullup[12] = (trap_output_dest == 2'b00) ? gpio_pu[12] : 1'b0; - assign gpio_pullup[13] = (trap_output_dest == 2'b00) ? gpio_pu[13] : 1'b0; - assign gpio_pullup[14] = (overtemp_dest == 2'b00) ? gpio_pu[14] : 1'b0; - assign gpio_pullup[15] = (overtemp_dest == 2'b00) ? gpio_pu[15] : 1'b0; + assign gpio_pullup[0] = (pll_output_dest == 1'b0) ? gpio_pu[0] : 1'b0; + assign gpio_pullup[1] = (trap_output_dest == 1'b0) ? gpio_pu[1] : 1'b0; - assign gpio_pulldown[0] = (comp_output_dest == 2'b00) ? gpio_pd[0] : 1'b0; - assign gpio_pulldown[1] = (comp_output_dest == 2'b00) ? gpio_pd[1] : 1'b0; - assign gpio_pulldown[2] = (rcosc_output_dest == 2'b00) ? gpio_pd[2] : 1'b0; - assign gpio_pulldown[3] = (rcosc_output_dest == 2'b00) ? gpio_pd[3] : 1'b0; - assign gpio_pulldown[4] = (rcosc_output_dest == 2'b00) ? gpio_pd[4] : 1'b0; - assign gpio_pulldown[5] = (xtal_output_dest == 2'b00) ? gpio_pd[5] : 1'b0; - assign gpio_pulldown[6] = (xtal_output_dest == 2'b00) ? gpio_pd[6] : 1'b0; - assign gpio_pulldown[7] = (xtal_output_dest == 2'b00) ? gpio_pd[7] : 1'b0; - assign gpio_pulldown[8] = (pll_output_dest == 2'b00) ? gpio_pd[8] : 1'b0; - assign gpio_pulldown[9] = (pll_output_dest == 2'b00) ? gpio_pd[9] : 1'b0; - assign gpio_pulldown[10] = (pll_output_dest == 2'b00) ? gpio_pd[10] : 1'b0; - assign gpio_pulldown[11] = (trap_output_dest == 2'b00) ? gpio_pd[11] : 1'b0; - assign gpio_pulldown[12] = (trap_output_dest == 2'b00) ? gpio_pd[12] : 1'b0; - assign gpio_pulldown[13] = (trap_output_dest == 2'b00) ? gpio_pd[13] : 1'b0; - assign gpio_pulldown[14] = (overtemp_dest == 2'b00) ? gpio_pd[14] : 1'b0; - assign gpio_pulldown[15] = (overtemp_dest == 2'b00) ? gpio_pd[15] : 1'b0; + assign gpio_pulldown[0] = (pll_output_dest == 1'b0) ? gpio_pd[0] : 1'b0; + assign gpio_pulldown[1] = (trap_output_dest == 1'b0) ? gpio_pd[1] : 1'b0; - // Convert GPIO signals to s8 pad signals - convert_gpio_sigs convert_gpio_bit [15:0] ( + // Convert GPIO signals to sky130_fd_io pad signals + convert_gpio_sigs convert_gpio_bit [1:0] ( .gpio_out(gpio_out), .gpio_outenb(gpio_outenb), .gpio_pu(gpio_pullup), @@ -432,15 +304,10 @@ wire irq_stall; wire irq_uart; - assign irq_7 = (irq_7_inputsrc == 2'b01) ? gpio_in_pad[0] : - (irq_7_inputsrc == 2'b10) ? gpio_in_pad[1] : - (irq_7_inputsrc == 2'b11) ? gpio_in_pad[2] : 1'b0; - assign irq_8 = (irq_8_inputsrc == 2'b01) ? gpio_in_pad[3] : - (irq_8_inputsrc == 2'b10) ? gpio_in_pad[4] : - (irq_8_inputsrc == 2'b11) ? gpio_in_pad[5] : 1'b0; - assign irq_uart = 0; assign irq_stall = 0; + assign irq_7 = (irq_7_inputsrc == 1'b1) ? gpio_in_pad[0] : 1'b0; + assign irq_8 = (irq_8_inputsrc == 1'b1) ? gpio_in_pad[1] : 1'b0; always @* begin irq = 0; @@ -450,51 +317,8 @@ irq[6] = irq_spi; irq[7] = irq_7; irq[8] = irq_8; - irq[9] = comp_output_dest[0] & comp_output_dest[1] & comp_in; - irq[10] = overtemp_dest[0] & overtemp_dest[1] & overtemp; end - // wire mem_valid; - // wire mem_instr; - // wire mem_ready; - // wire [31:0] mem_addr; - // wire [31:0] mem_wdata; - // wire [3:0] mem_wstrb; - // wire [31:0] mem_rdata; - - // wire spimem_ready; - // wire [31:0] spimem_rdata; - - // reg ram_ready; - // wire [31:0] ram_rdata; - - // assign iomem_valid = mem_valid && (mem_addr[31:24] > 8'h 01); - // assign iomem_wstrb = mem_wstrb; - // assign iomem_addr = mem_addr; - // assign iomem_wdata = mem_wdata; - - // wire spimemio_cfgreg_sel = mem_valid && (mem_addr == 32'h 0200_0000); - // wire [31:0] spimemio_cfgreg_do; - - // wire simpleuart_reg_div_sel = mem_valid && (mem_addr == 32'h 0200_0004); - // wire [31:0] simpleuart_reg_div_do; - - // wire simpleuart_reg_dat_sel = mem_valid && (mem_addr == 32'h 0200_0008); - // wire [31:0] simpleuart_reg_dat_do; - // wire simpleuart_reg_dat_wait; - - // Akin to the slave ack ? - // assign mem_ready = (iomem_valid && iomem_ready) || spimem_ready || ram_ready || spimemio_cfgreg_sel || - // simpleuart_reg_div_sel || (simpleuart_reg_dat_sel && !simpleuart_reg_dat_wait); - - // Akin to wb_intercon -- mem_rdata like cpu_dat_i - // assign mem_rdata = (iomem_valid && iomem_ready) ? iomem_rdata : spimem_ready ? spimem_rdata : ram_ready ? ram_rdata : - // spimemio_cfgreg_sel ? spimemio_cfgreg_do : simpleuart_reg_div_sel ? simpleuart_reg_div_do : - // simpleuart_reg_dat_sel ? simpleuart_reg_dat_do : 32'h 0000_0000; - - wire wb_clk_i; - wire wb_rst_i; - // Assumption : no syscon module and wb_clk is the clock coming from the chip pin ? assign wb_clk_i = clk; assign wb_rst_i = ~resetn; // Redundant @@ -707,16 +531,10 @@ sysctrl_wb #( .BASE_ADR(SYS_BASE_ADR), - .OSC_ENA(OSC_ENA), - .OSC_OUT(OSC_OUT), - .XTAL_OUT(XTAL_OUT), .PLL_OUT(PLL_OUT), .TRAP_OUT(TRAP_OUT), .IRQ7_SRC(IRQ7_SRC), - .IRQ8_SRC(IRQ8_SRC), - .OVERTEMP_ENA(OVERTEMP_ENA), - .OVERTEMP_DATA(OVERTEMP_DATA), - .OVERTEMP_OUT(OVERTEMP_OUT) + .IRQ8_SRC(IRQ8_SRC) ) sysctrl ( .wb_clk_i(wb_clk_i), .wb_rst_i(wb_rst_i), @@ -731,16 +549,10 @@ .wb_ack_o(sys_ack_o), .wb_dat_o(sys_dat_o), - .overtemp(overtemp), - .rcosc_ena(rcosc_ena), - .rcosc_output_dest(rcosc_output_dest), - .xtal_output_dest(xtal_output_dest), .pll_output_dest(pll_output_dest), .trap_output_dest(trap_output_dest), .irq_7_inputsrc(irq_7_inputsrc), - .irq_8_inputsrc(irq_8_inputsrc), - .overtemp_ena(overtemp_ena), - .overtemp_dest(overtemp_dest) + .irq_8_inputsrc(irq_8_inputsrc) ); // Logic Analyzer @@ -851,50 +663,6 @@ .wbs_ack_i({ xbar_ack_i, sys_ack_o, spi_sys_ack_o, spimemio_cfg_ack_o, mprj_ack_i, mprj_ctrl_ack_o, la_ack_o, gpio_ack_o, uart_ack_o, spimemio_flash_ack_o, mem_ack_o }) ); - // Akin to ram ack - // always @(posedge clk) - // ram_ready <= mem_valid && !mem_ready && mem_addr < 4*MEM_WORDS; - - always @(posedge clk) begin - if (!resetn) begin - adc0_ena <= 0; - adc0_convert <= 0; - adc0_clksrc <= 0; - adc0_inputsrc <= 0; - adc1_ena <= 0; - adc1_convert <= 0; - adc1_clksrc <= 0; - adc1_inputsrc <= 0; - dac_ena <= 0; - dac_value <= 0; - comp_ena <= 0; - comp_ninputsrc <= 0; - comp_pinputsrc <= 0; - comp_output_dest <= 0; - analog_out_sel <= 0; - opamp_ena <= 0; - opamp_bias_ena <= 0; - bg_ena <= 0; - end else begin - // iomem_ready <= 0; - // if (iomem_valid && !iomem_ready && iomem_addr[31:8] == 24'h030000) begin - // iomem_ready <= 1; - // end else if (iomem_addr[7:0] == 8'hc0) begin - // iomem_rdata <= {31'd0, analog_out_sel}; - // if (iomem_wstrb[0]) analog_out_sel <= iomem_wdata[0]; - // end else if (iomem_addr[7:0] == 8'hc4) begin - // iomem_rdata <= {31'd0, opamp_bias_ena}; - // if (iomem_wstrb[0]) opamp_bias_ena <= iomem_wdata[0]; - // end else if (iomem_addr[7:0] == 8'hc8) begin - // iomem_rdata <= {31'd0, opamp_ena}; - // if (iomem_wstrb[0]) opamp_ena <= iomem_wdata[0]; - // end else if (iomem_addr[7:0] == 8'hd0) begin - // iomem_rdata <= {31'd0, bg_ena}; - // if (iomem_wstrb[0]) bg_ena <= iomem_wdata[0]; - // end - end - end - endmodule @@ -934,6 +702,7 @@ // Implementation note: // Replace the following two modules with wrappers for your SRAM cells. + module openstriVe_soc_regs ( input clk, wen, input [5:0] waddr,
diff --git a/verilog/rtl/pads.v b/verilog/rtl/pads.v index 640216b..16a288e 100644 --- a/verilog/rtl/pads.v +++ b/verilog/rtl/pads.v
@@ -3,8 +3,8 @@ .amuxbus_a(analog_a),\ .amuxbus_b(analog_b),\ .vssa(vss),\ - .vdda(vdd),\ - .vswitch(vdd),\ + .vdda(vdd3v3),\ + .vswitch(vdd3v3),\ .vddio_q(vddio_q),\ .vcchib(vdd1v8),\ .vddio(vdd),\ @@ -25,7 +25,7 @@ `endif \ .out(vss), \ .oe_n(vdd1v8), \ - .hld_h_n(vdd), \ + .hld_h_n(vdd3v3), \ .enable_h(porb_h), \ .enable_inp_h(loop_``X), \ .enable_vdda_h(porb_h), \ @@ -57,7 +57,7 @@ `endif \ .out(vss), \ .oe_n(vdd1v8), \ - .hld_h_n(vdd), \ + .hld_h_n(vdd3v3), \ .enable_h(porb_h), \ .enable_inp_h(loop_``X), \ .enable_vdda_h(porb_h), \ @@ -89,10 +89,10 @@ `endif \ .out(), \ .oe_n(vdd1v8), \ - .hld_h_n(vdd), \ - .enable_h(vdd), \ + .hld_h_n(vdd3v3), \ + .enable_h(vdd3v3), \ .enable_inp_h(loop_``X), \ - .enable_vdda_h(vdd), \ + .enable_vdda_h(vdd3v3), \ .enable_vswitch_h(vss), \ .enable_vddio(vdd1v8), \ .inp_dis(por), \ @@ -121,7 +121,7 @@ `endif \ .out(Y), \ .oe_n(OUT_EN_N), \ - .hld_h_n(vdd), \ + .hld_h_n(vdd3v3), \ .enable_h(porb_h), \ .enable_inp_h(loop_``X), \ .enable_vdda_h(porb_h), \ @@ -153,7 +153,7 @@ `endif \ .out(Y_OUT), \ .oe_n(OUT_EN_N), \ - .hld_h_n(vdd), \ + .hld_h_n(vdd3v3), \ .enable_h(porb_h), \ .enable_inp_h(loop_``X), \ .enable_vdda_h(porb_h), \ @@ -184,7 +184,7 @@ `endif \ .out(Y_OUT), \ .oe_n(OUT_EN_N), \ - .hld_h_n(vdd), \ + .hld_h_n(vdd3v3), \ .enable_h(porb_h), \ .enable_inp_h(loop_``X), \ .enable_vdda_h(porb_h), \ @@ -248,7 +248,7 @@ `endif \ .out(vss), \ .oe_n(vdd1v8), \ - .hld_h_n(vdd), \ + .hld_h_n(vdd3v3), \ .enable_h(porb_h), \ .enable_inp_h(loop_``X), \ .enable_vdda_h(porb_h), \ @@ -283,7 +283,7 @@ `endif \ .out(Y), \ .oe_n(vss), \ - .hld_h_n(vdd), \ + .hld_h_n(vdd3v3), \ .enable_h(porb_h), \ .enable_inp_h(loop_``X), \ .enable_vdda_h(porb_h), \
diff --git a/verilog/rtl/ring_osc2x13.v b/verilog/rtl/ring_osc2x13.v index 58a01af..4363c00 100644 --- a/verilog/rtl/ring_osc2x13.v +++ b/verilog/rtl/ring_osc2x13.v
@@ -10,40 +10,40 @@ wire d0, d1, d2; - scs8hd_clkbuf_2 delaybuf0 ( + sky130_fd_sc_hd__clkbuf_2 delaybuf0 ( .A(in), .X(ts) ); - scs8hd_clkbuf_1 delaybuf1 ( + sky130_fd_sc_hd__clkbuf_1 delaybuf1 ( .A(ts), .X(d0) ); - scs8hd_einvp_2 delayen1 ( + sky130_fd_sc_hd__einvp_2 delayen1 ( .A(d0), .TE(trim[1]), .Z(d1) ); - scs8hd_einvn_4 delayenb1 ( + sky130_fd_sc_hd__einvn_4 delayenb1 ( .A(ts), .TEB(trim[1]), .Z(d1) ); - scs8hd_clkinv_1 delayint0 ( + sky130_fd_sc_hd__clkinv_1 delayint0 ( .A(d1), .Y(d2) ); - scs8hd_einvp_2 delayen0 ( + sky130_fd_sc_hd__einvp_2 delayen0 ( .A(d2), .TE(trim[0]), .Z(out) ); - scs8hd_einvn_8 delayenb0 ( + sky130_fd_sc_hd__einvn_8 delayenb0 ( .A(ts), .TEB(trim[0]), .Z(out) @@ -59,53 +59,53 @@ wire d0, d1, d2, ctrl0, one; - scs8hd_clkbuf_1 delaybuf0 ( + sky130_fd_sc_hd__clkbuf_1 delaybuf0 ( .A(in), .X(d0) ); - scs8hd_einvp_2 delayen1 ( + sky130_fd_sc_hd__einvp_2 delayen1 ( .A(d0), .TE(trim[1]), .Z(d1) ); - scs8hd_einvn_4 delayenb1 ( + sky130_fd_sc_hd__einvn_4 delayenb1 ( .A(in), .TEB(trim[1]), .Z(d1) ); - scs8hd_clkinv_1 delayint0 ( + sky130_fd_sc_hd__clkinv_1 delayint0 ( .A(d1), .Y(d2) ); - scs8hd_einvp_2 delayen0 ( + sky130_fd_sc_hd__einvp_2 delayen0 ( .A(d2), .TE(trim[0]), .Z(out) ); - scs8hd_einvn_8 delayenb0 ( + sky130_fd_sc_hd__einvn_8 delayenb0 ( .A(in), .TEB(ctrl0), .Z(out) ); - scs8hd_einvp_1 reseten0 ( + sky130_fd_sc_hd__einvp_1 reseten0 ( .A(one), .TE(reset), .Z(out) ); - scs8hd_or2_2 ctrlen0 ( + sky130_fd_sc_hd__or2_2 ctrlen0 ( .A(reset), .B(trim[0]), .X(ctrl0) ); - scs8hd_conb_1 const1 ( + sky130_fd_sc_hd__conb_1 const1 ( .HI(one), .LO() ); @@ -159,19 +159,19 @@ // Buffered outputs a 0 and 90 degrees phase (approximately) - scs8hd_clkinv_2 ibufp00 ( + sky130_fd_sc_hd__clkinv_2 ibufp00 ( .A(d[0]), .Y(c[0]) ); - scs8hd_clkinv_8 ibufp01 ( + sky130_fd_sc_hd__clkinv_8 ibufp01 ( .A(c[0]), .Y(clockp[0]) ); - scs8hd_clkinv_2 ibufp10 ( + sky130_fd_sc_hd__clkinv_2 ibufp10 ( .A(d[6]), .Y(c[1]) ); - scs8hd_clkinv_8 ibufp11 ( + sky130_fd_sc_hd__clkinv_8 ibufp11 ( .A(c[1]), .Y(clockp[1]) );
diff --git a/verilog/rtl/sysctrl.v b/verilog/rtl/sysctrl.v index 5daf5b3..05861cd 100644 --- a/verilog/rtl/sysctrl.v +++ b/verilog/rtl/sysctrl.v
@@ -1,15 +1,9 @@ module sysctrl_wb #( parameter BASE_ADR = 32'h2F00_0000, - parameter OSC_ENA = 8'h00, - parameter OSC_OUT = 8'h04, - parameter XTAL_OUT = 8'h08, parameter PLL_OUT = 8'h0c, parameter TRAP_OUT = 8'h10, parameter IRQ7_SRC = 8'h14, - parameter IRQ8_SRC = 8'h18, - parameter OVERTEMP_ENA = 8'h1c, - parameter OVERTEMP_DATA = 8'h20, - parameter OVERTEMP_OUT = 8'h24 + parameter IRQ8_SRC = 8'h18 ) ( input wb_clk_i, input wb_rst_i, @@ -24,17 +18,10 @@ output [31:0] wb_dat_o, output wb_ack_o, - input overtemp, - - output rcosc_ena, - output [1:0] rcosc_output_dest, - output [1:0] xtal_output_dest, - output [1:0] pll_output_dest, - output [1:0] trap_output_dest, - output [1:0] irq_7_inputsrc, - output [1:0] irq_8_inputsrc, - output overtemp_ena, - output [1:0] overtemp_dest + output pll_output_dest, + output trap_output_dest, + output irq_7_inputsrc, + output irq_8_inputsrc ); @@ -51,22 +38,14 @@ sysctrl #( .BASE_ADR(BASE_ADR), - .OSC_ENA(OSC_ENA), - .OSC_OUT(OSC_OUT), - .XTAL_OUT(XTAL_OUT), .PLL_OUT(PLL_OUT), .TRAP_OUT(TRAP_OUT), .IRQ7_SRC(IRQ7_SRC), - .IRQ8_SRC(IRQ8_SRC), - .OVERTEMP_ENA(OVERTEMP_ENA), - .OVERTEMP_DATA(OVERTEMP_DATA), - .OVERTEMP_OUT(OVERTEMP_OUT) + .IRQ8_SRC(IRQ8_SRC) ) sysctrl ( .clk(wb_clk_i), .resetn(resetn), - .overtemp(overtemp), - .iomem_addr(wb_adr_i), .iomem_valid(valid), .iomem_wstrb(iomem_we), @@ -74,39 +53,25 @@ .iomem_rdata(wb_dat_o), .iomem_ready(ready), - .rcosc_ena(rcosc_ena), // (verify) wire input to the core not connected to HKSPI, what should it be connected to ? - .rcosc_output_dest(rcosc_output_dest), - .xtal_output_dest(xtal_output_dest), .pll_output_dest(pll_output_dest), .trap_output_dest(trap_output_dest), .irq_7_inputsrc(irq_7_inputsrc), - .irq_8_inputsrc(irq_8_inputsrc), - - .overtemp_ena(overtemp_ena), - .overtemp_dest(overtemp_dest) + .irq_8_inputsrc(irq_8_inputsrc) ); endmodule module sysctrl #( parameter BASE_ADR = 32'h2300_0000, - parameter OSC_ENA = 8'h00, - parameter OSC_OUT = 8'h04, - parameter XTAL_OUT = 8'h08, parameter PLL_OUT = 8'h0c, parameter TRAP_OUT = 8'h10, parameter IRQ7_SRC = 8'h14, - parameter IRQ8_SRC = 8'h18, - parameter OVERTEMP_ENA = 8'h1c, - parameter OVERTEMP_DATA = 8'h20, - parameter OVERTEMP_OUT = 8'h24 + parameter IRQ8_SRC = 8'h18 ) ( input clk, input resetn, - input overtemp, - input [31:0] iomem_addr, input iomem_valid, input [3:0] iomem_wstrb, @@ -114,28 +79,17 @@ output reg [31:0] iomem_rdata, output reg iomem_ready, - output rcosc_ena, - output [1:0] rcosc_output_dest, - output [1:0] xtal_output_dest, - output [1:0] pll_output_dest, - output [1:0] trap_output_dest, - output [1:0] irq_7_inputsrc, - output [1:0] irq_8_inputsrc, - output overtemp_ena, - output [1:0] overtemp_dest + output pll_output_dest, + output trap_output_dest, + output irq_7_inputsrc, + output irq_8_inputsrc ); - reg rcosc_ena; - reg [1:0] rcosc_output_dest; - reg [1:0] xtal_output_dest; - reg [1:0] pll_output_dest; - reg [1:0] trap_output_dest; - reg [1:0] irq_7_inputsrc; - reg [1:0] irq_8_inputsrc; - reg overtemp_ena; - reg [1:0] overtemp_dest; - assign osc_ena_sel = (iomem_addr[7:0] == OSC_ENA); - assign osc_out_sel = (iomem_addr[7:0] == OSC_OUT); + reg pll_output_dest; + reg trap_output_dest; + reg irq_7_inputsrc; + reg irq_8_inputsrc; + assign pll_out_sel = (iomem_addr[7:0] == PLL_OUT); assign trap_out_sel = (iomem_addr[7:0] == TRAP_OUT); assign xtal_out_sel = (iomem_addr[7:0] == XTAL_OUT); @@ -143,77 +97,40 @@ assign irq7_sel = (iomem_addr[7:0] == IRQ7_SRC); assign irq8_sel = (iomem_addr[7:0] == IRQ8_SRC); - assign overtemp_sel = (iomem_addr[7:0] == OVERTEMP_DATA); - assign overtemp_ena_sel = (iomem_addr[7:0] == OVERTEMP_ENA); - assign overtemp_dest_sel = (iomem_addr[7:0] == OVERTEMP_OUT); - always @(posedge clk) begin if (!resetn) begin - rcosc_ena <= 0; - rcosc_output_dest <= 0; pll_output_dest <= 0; - xtal_output_dest <= 0; trap_output_dest <= 0; irq_7_inputsrc <= 0; irq_8_inputsrc <= 0; - overtemp_dest <= 0; - overtemp_ena <= 0; end else begin iomem_ready <= 0; if (iomem_valid && !iomem_ready && iomem_addr[31:8] == BASE_ADR[31:8]) begin iomem_ready <= 1'b 1; - if (osc_ena_sel) begin - iomem_rdata <= {31'd0, rcosc_ena}; + if (pll_out_sel) begin + iomem_rdata <= {31'd0, pll_output_dest}; if (iomem_wstrb[0]) - rcosc_ena <= iomem_wdata[0]; - - end else if (osc_out_sel) begin - iomem_rdata <= {30'd0, rcosc_output_dest}; - if (iomem_wstrb[0]) - rcosc_output_dest <= iomem_wdata[1:0]; - - end else if (xtal_out_sel) begin - iomem_rdata <= {30'd0, xtal_output_dest}; - if (iomem_wstrb[0]) - xtal_output_dest <= iomem_wdata[1:0]; - - end else if (pll_out_sel) begin - iomem_rdata <= {30'd0, pll_output_dest}; - if (iomem_wstrb[0]) - pll_output_dest <= iomem_wdata[1:0]; + pll_output_dest <= iomem_wdata[0]; end else if (trap_out_sel) begin - iomem_rdata <= {30'd0, trap_output_dest}; + iomem_rdata <= {31'd0, trap_output_dest}; if (iomem_wstrb[0]) - trap_output_dest <= iomem_wdata[1:0]; + trap_output_dest <= iomem_wdata[0]; end else if (irq7_sel) begin - iomem_rdata <= {30'd0, irq_7_inputsrc}; + iomem_rdata <= {31'd0, irq_7_inputsrc}; if (iomem_wstrb[0]) - irq_7_inputsrc <= iomem_wdata[1:0]; + irq_7_inputsrc <= iomem_wdata[0]; end else if (irq8_sel) begin - iomem_rdata <= {30'd0, irq_8_inputsrc}; + iomem_rdata <= {31'd0, irq_8_inputsrc}; if (iomem_wstrb[0]) - irq_8_inputsrc <= iomem_wdata[1:0]; - - end else if (overtemp_ena_sel) begin - iomem_rdata <= {31'd0, overtemp_ena}; - if (iomem_wstrb[0]) - overtemp_ena <= iomem_wdata[0]; - - end else if (overtemp_sel) begin - iomem_rdata <= {31'd0, overtemp}; - - end else if (overtemp_dest_sel) begin - iomem_rdata <= {30'd0, overtemp_dest}; - if (iomem_wstrb[0]) - overtemp_dest <= iomem_wdata[1:0]; + irq_8_inputsrc <= iomem_wdata[0]; end end end end -endmodule \ No newline at end of file +endmodule