Timing Closure related clean-up. Hold fix added at spi-master and clock delay adjusted inside the clock_skew module
diff --git a/docs/source/_static/user_project_wrapper.gds.png b/docs/source/_static/user_project_wrapper.gds.png
new file mode 100644
index 0000000..b856180
--- /dev/null
+++ b/docs/source/_static/user_project_wrapper.gds.png
Binary files differ
diff --git a/openlane/clk_skew_adjust/config.tcl b/openlane/clk_skew_adjust/config.tcl
index d1b3e25..df2b534 100644
--- a/openlane/clk_skew_adjust/config.tcl
+++ b/openlane/clk_skew_adjust/config.tcl
@@ -44,6 +44,8 @@
### Macro Placement
set ::env(FP_PIN_ORDER_CFG) $::env(DESIGN_DIR)/pin_order.cfg
+#set ::env(FP_SIZING) absolute
+#set ::env(DIE_AREA) "0 0 50 50"
@@ -56,7 +58,7 @@
# Fill this
set ::env(CLOCK_TREE_SYNTH) 0
-set ::env(CELL_PAD) 0
+set ::env(CELL_PAD) 4
set ::env(FP_CORE_UTIL) 40
set ::env(PL_RANDOM_GLB_PLACEMENT) 1
diff --git a/openlane/sdram/base.sdc b/openlane/sdram/base.sdc
index 350ae31..2bdd058 100644
--- a/openlane/sdram/base.sdc
+++ b/openlane/sdram/base.sdc
@@ -35,6 +35,7 @@
set_input_delay 2.0 -clock [get_clocks $::env(WB_CLOCK_PORT)] {wb_rst_n}
+set_input_delay 2.0 -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] {sdram_resetn}
set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wb_stb_i*]
set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wb_addr_i*]
@@ -54,6 +55,8 @@
set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_sdr_twr_d*]
set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_sdr_rfsh*]
set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_sdr_rfmax*]
+set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_colbits*]
+set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port cfg_sdr_width*]
set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wb_dat_o*]
set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wb_ack_o*]
@@ -68,37 +71,69 @@
puts "\[INFO\]: Setting wb output delay to:$wb_output_delay_value"
puts "\[INFO\]: Setting wb input delay to: $wb_input_delay_value"
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[0]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[1]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[2]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[3]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[4]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[5]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[6]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[7]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[8]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[9]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[10]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[11]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[12]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[13]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[14]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[15]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[16]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[17]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[18]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[19]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[20]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[21]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[22]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[23]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[24]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[25]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[26]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[27]]
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[28]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[0]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[1]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[2]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[3]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[4]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[5]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[6]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[7]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[8]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[9]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[10]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[11]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[12]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[13]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[14]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[15]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[16]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[17]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[18]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[19]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[20]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[21]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[22]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[23]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[24]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[25]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[26]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[27]]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[28]]
#set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[29]] Masked SDRAM clock
-set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_oeb*]
+set_output_delay $sdram_output_delay_value -max -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_oeb*]
+
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[0]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[1]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[2]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[3]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[4]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[5]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[6]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[7]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[8]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[9]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[10]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[11]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[12]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[13]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[14]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[15]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[16]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[17]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[18]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[19]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[20]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[21]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[22]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[23]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[24]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[25]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[26]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[27]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[28]]
+#set_output_delay $sdram_output_delay_value -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_out[29]] Masked SDRAM clock
+set_output_delay -0.5 -min -clock [get_clocks $::env(SDRAM_CLOCK_PORT)] [get_port io_oeb*]
################################################
# PAD SDRAM Clock domain input output
@@ -107,7 +142,8 @@
################################################
create_clock [get_ports $::env(PAD_SDRAM_CLOCK_PORT)] -name $::env(PAD_SDRAM_CLOCK_PORT) -period $::env(SDRAM_CLOCK_PERIOD)
-set_input_delay $sdram_input_delay_value -clock [get_clocks $::env(PAD_SDRAM_CLOCK_PORT)] [get_port io_in*]
+set_input_delay $sdram_input_delay_value -max -clock [get_clocks $::env(PAD_SDRAM_CLOCK_PORT)] [get_port io_in*]
+set_input_delay 1 -min -clock [get_clocks $::env(PAD_SDRAM_CLOCK_PORT)] [get_port io_in*]
set_clock_groups -name async_clock -asynchronous -comment "Async Clock group" -group [get_clocks $::env(WB_CLOCK_PORT)] -group [get_clocks $::env(SDRAM_CLOCK_PORT)]
diff --git a/openlane/sdram/pin_order.cfg b/openlane/sdram/pin_order.cfg
index 8f3bcb1..d05e596 100644
--- a/openlane/sdram/pin_order.cfg
+++ b/openlane/sdram/pin_order.cfg
@@ -6,7 +6,6 @@
wb_rst_n 0000 1
-
#N
io_oeb\[29\]
io_out\[29\]
@@ -163,6 +162,38 @@
cfg_sdr_rfmax\[1\] 0000 59
cfg_sdr_rfmax\[0\] 0000 60
+sdram_debug\[0\] 200 0
+sdram_debug\[1\]
+sdram_debug\[2\]
+sdram_debug\[3\]
+sdram_debug\[4\]
+sdram_debug\[5\]
+sdram_debug\[6\]
+sdram_debug\[7\]
+sdram_debug\[8\]
+sdram_debug\[9\]
+sdram_debug\[10\]
+sdram_debug\[11\]
+sdram_debug\[12\]
+sdram_debug\[13\]
+sdram_debug\[14\]
+sdram_debug\[15\]
+sdram_debug\[16\]
+sdram_debug\[17\]
+sdram_debug\[18\]
+sdram_debug\[19\]
+sdram_debug\[20\]
+sdram_debug\[21\]
+sdram_debug\[22\]
+sdram_debug\[23\]
+sdram_debug\[24\]
+sdram_debug\[25\]
+sdram_debug\[26\]
+sdram_debug\[27\]
+sdram_debug\[28\]
+sdram_debug\[29\]
+sdram_debug\[30\]
+sdram_debug\[31\]
#S
wb_stb_i 0000 0
diff --git a/openlane/spi_master/base.sdc b/openlane/spi_master/base.sdc
index cd78ed8..aab27ac 100644
--- a/openlane/spi_master/base.sdc
+++ b/openlane/spi_master/base.sdc
@@ -19,10 +19,16 @@
set ::env(WB_CLOCK_PERIOD) "10"
set ::env(WB_CLOCK_PORT) "mclk"
+set ::env(SPI_CLOCK_PORT) "spiclk"
+set ::env(SPI_CLOCK_PERIOD) "20"
+
######################################
# WB Clock domain input output
######################################
create_clock [get_ports $::env(WB_CLOCK_PORT)] -name $::env(WB_CLOCK_PORT) -period $::env(WB_CLOCK_PERIOD)
+
+create_generated_clock -name $::env(SPI_CLOCK_PORT) -source [get_ports $::env(WB_CLOCK_PORT)] -master_clock $::env(WB_CLOCK_PORT) -divide_by 2 -add -comment "SPI Clock Out" [get_port io_out[0]]
+
set wb_input_delay_value [expr $::env(WB_CLOCK_PERIOD) * 0.6]
set wb_output_delay_value [expr $::env(WB_CLOCK_PERIOD) * 0.6]
puts "\[INFO\]: Setting wb output delay to:$wb_output_delay_value"
@@ -37,27 +43,54 @@
set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wbd_dat_i*]
set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wbd_sel_i*]
-set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_in[5]]
-set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_in[4]]
-set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_in[3]]
-set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_in[2]]
set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wbd_dat_o*]
set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wbd_ack_o*]
set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port wbd_err_o*]
set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port spi_debug*]
-set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_out[5]]
-set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_out[4]]
-set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_out[3]]
-set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_out[2]]
-set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_out[1]]
-set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_out[0]]
-set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_oeb[5]]
-set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_oeb[4]]
-set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_oeb[3]]
-set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_oeb[2]]
-set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_oeb[1]]
-set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WB_CLOCK_PORT)] [get_port io_oeb[0]]
+
+### SPI I/F constaints
+set spi_input_delay_value [expr $::env(SPI_CLOCK_PERIOD) * 0.6]
+set spi_output_delay_value [expr $::env(SPI_CLOCK_PERIOD) * 0.6]
+
+set_input_delay 6 -max -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_in[5]]
+set_input_delay 6 -max -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_in[4]]
+set_input_delay 6 -max -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_in[3]]
+set_input_delay 6 -max -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_in[2]]
+
+set_input_delay 0 -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_in[5]]
+set_input_delay 0 -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_in[4]]
+set_input_delay 0 -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_in[3]]
+set_input_delay 0 -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_in[2]]
+
+#io_out[0] is spiclcok
+#set_output_delay $wb_output_delay_value -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_out[0]]
+set_output_delay 6 -max -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_out[5]]
+set_output_delay 6 -max -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_out[4]]
+set_output_delay 6 -max -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_out[3]]
+set_output_delay 6 -max -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_out[2]]
+set_output_delay 6 -max -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_out[1]]
+
+set_output_delay 6 -max -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_oeb[5]]
+set_output_delay 6 -max -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_oeb[4]]
+set_output_delay 6 -max -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_oeb[3]]
+set_output_delay 6 -max -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_oeb[2]]
+set_output_delay 6 -max -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_oeb[1]]
+
+set_output_delay -0.5 -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_out[5]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_out[4]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_out[3]]
+set_output_delay -0.5 -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_out[2]]
+set_output_delay 0.0 -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_out[1]]
+
+# Chip select asserted multiple cycle eariler than spi clock
+set_output_delay 0 -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_out[1]]
+
+set_output_delay 0 -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_oeb[5]]
+set_output_delay 0 -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_oeb[4]]
+set_output_delay 0 -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_oeb[3]]
+set_output_delay 0 -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_oeb[2]]
+set_output_delay 0 -min -clock [get_clocks $::env(SPI_CLOCK_PORT)] [get_port io_oeb[1]]
# TODO set this as parameter
set_driving_cell -lib_cell $::env(SYNTH_DRIVING_CELL) -pin $::env(SYNTH_DRIVING_CELL_PIN) [all_inputs]
diff --git a/openlane/spi_master/config.tcl b/openlane/spi_master/config.tcl
index 7c87b91..ade6318 100755
--- a/openlane/spi_master/config.tcl
+++ b/openlane/spi_master/config.tcl
@@ -45,6 +45,7 @@
$script_dir/../../verilog/rtl/spi_master/src/spim_rx.sv \
$script_dir/../../verilog/rtl/spi_master/src/spim_tx.sv "
+set ::env(SYNTH_READ_BLACKBOX_LIB) 1
set ::env(SDC_FILE) "$script_dir/base.sdc"
set ::env(BASE_SDC_FILE) "$script_dir/base.sdc"
diff --git a/openlane/spi_master/pin_order.cfg b/openlane/spi_master/pin_order.cfg
index 2413319..fc7556c 100644
--- a/openlane/spi_master/pin_order.cfg
+++ b/openlane/spi_master/pin_order.cfg
@@ -4,42 +4,7 @@
#W
mclk 0000 0
rst_n
-spi_debug\[31\]
-spi_debug\[30\]
-spi_debug\[29\]
-spi_debug\[28\]
-spi_debug\[27\]
-spi_debug\[26\]
-spi_debug\[25\]
-spi_debug\[24\]
-spi_debug\[23\]
-spi_debug\[22\]
-spi_debug\[21\]
-spi_debug\[20\]
-spi_debug\[19\]
-spi_debug\[18\]
-spi_debug\[17\]
-spi_debug\[16\]
-spi_debug\[15\]
-spi_debug\[14\]
-spi_debug\[13\]
-spi_debug\[12\]
-spi_debug\[11\]
-spi_debug\[10\]
-spi_debug\[9\]
-spi_debug\[8\]
-spi_debug\[7\]
-spi_debug\[6\]
-spi_debug\[5\]
-spi_debug\[4\]
-spi_debug\[3\]
-spi_debug\[2\]
-spi_debug\[1\]
-spi_debug\[0\]
-
-
-#N
-io_in\[5\] 0000 0
+io_in\[5\] 0200 0
io_out\[5\]
io_oeb\[5\]
io_in\[4\]
@@ -58,6 +23,39 @@
io_out\[0\]
io_oeb\[0\]
+#E
+spi_debug\[0\] 0000 0
+spi_debug\[1\]
+spi_debug\[2\]
+spi_debug\[3\]
+spi_debug\[4\]
+spi_debug\[5\]
+spi_debug\[6\]
+spi_debug\[7\]
+spi_debug\[8\]
+spi_debug\[9\]
+spi_debug\[10\]
+spi_debug\[11\]
+spi_debug\[12\]
+spi_debug\[13\]
+spi_debug\[14\]
+spi_debug\[15\]
+spi_debug\[16\]
+spi_debug\[17\]
+spi_debug\[18\]
+spi_debug\[19\]
+spi_debug\[20\]
+spi_debug\[21\]
+spi_debug\[22\]
+spi_debug\[23\]
+spi_debug\[24\]
+spi_debug\[25\]
+spi_debug\[26\]
+spi_debug\[27\]
+spi_debug\[28\]
+spi_debug\[29\]
+spi_debug\[30\]
+spi_debug\[31\]
#S
wbd_stb_i 0000 0
diff --git a/openlane/syntacore/pin_order.cfg b/openlane/syntacore/pin_order.cfg
index fb94b98..1ecdcf1 100644
--- a/openlane/syntacore/pin_order.cfg
+++ b/openlane/syntacore/pin_order.cfg
@@ -10,7 +10,8 @@
wb_clk 0000 0
wb_rst_n
pwrup_rst_n
-rst_n
+rst_n
+
#N
wbd_imem_stb_o 0000 0
@@ -272,3 +273,71 @@
fuse_mhartid\[2\]
fuse_mhartid\[1\]
fuse_mhartid\[0\]
+
+#S
+
+riscv_debug\[0\] 500 0 4
+riscv_debug\[1\]
+riscv_debug\[2\]
+riscv_debug\[3\]
+riscv_debug\[4\]
+riscv_debug\[5\]
+riscv_debug\[6\]
+riscv_debug\[7\]
+riscv_debug\[8\]
+riscv_debug\[9\]
+riscv_debug\[10\]
+riscv_debug\[11\]
+riscv_debug\[12\]
+riscv_debug\[13\]
+riscv_debug\[14\]
+riscv_debug\[15\]
+riscv_debug\[16\]
+riscv_debug\[17\]
+riscv_debug\[18\]
+riscv_debug\[19\]
+riscv_debug\[20\]
+riscv_debug\[21\]
+riscv_debug\[22\]
+riscv_debug\[23\]
+riscv_debug\[24\]
+riscv_debug\[25\]
+riscv_debug\[26\]
+riscv_debug\[27\]
+riscv_debug\[28\]
+riscv_debug\[29\]
+riscv_debug\[30\]
+riscv_debug\[31\]
+riscv_debug\[32\]
+riscv_debug\[33\]
+riscv_debug\[34\]
+riscv_debug\[35\]
+riscv_debug\[36\]
+riscv_debug\[37\]
+riscv_debug\[38\]
+riscv_debug\[39\]
+riscv_debug\[40\]
+riscv_debug\[41\]
+riscv_debug\[42\]
+riscv_debug\[43\]
+riscv_debug\[44\]
+riscv_debug\[45\]
+riscv_debug\[46\]
+riscv_debug\[47\]
+riscv_debug\[48\]
+riscv_debug\[49\]
+riscv_debug\[50\]
+riscv_debug\[51\]
+riscv_debug\[52\]
+riscv_debug\[53\]
+riscv_debug\[54\]
+riscv_debug\[55\]
+riscv_debug\[56\]
+riscv_debug\[57\]
+riscv_debug\[58\]
+riscv_debug\[59\]
+riscv_debug\[60\]
+riscv_debug\[61\]
+riscv_debug\[62\]
+riscv_debug\[63\]
+
diff --git a/openlane/uart/base.sdc b/openlane/uart/base.sdc
index c93fb52..01e5123 100644
--- a/openlane/uart/base.sdc
+++ b/openlane/uart/base.sdc
@@ -19,12 +19,23 @@
set ::env(CORE_CLOCK_PERIOD) "10"
set ::env(CORE_CLOCK_PORT) "app_clk"
+set ::env(LINE_CLOCK_PERIOD) "100"
+set ::env(LINE_CLOCK_PORT) "line_clk"
+
######################################
# WB Clock domain input output
######################################
create_clock [get_ports $::env(CORE_CLOCK_PORT)] -name $::env(CORE_CLOCK_PORT) -period $::env(CORE_CLOCK_PERIOD)
+create_clock [get_pins u_lineclk_buf/X ] -name $::env(LINE_CLOCK_PORT) -period $::env(LINE_CLOCK_PERIOD)
+
+
+set_clock_groups -name sys_clk -asynchronous -group $::env(CORE_CLOCK_PORT) -group $::env(LINE_CLOCK_PORT)
+
set core_input_delay_value [expr $::env(CORE_CLOCK_PERIOD) * 0.6]
set core_output_delay_value [expr $::env(CORE_CLOCK_PERIOD) * 0.6]
+
+set line_input_delay_value [expr $::env(LINE_CLOCK_PERIOD) * 0.6]
+set line_output_delay_value [expr $::env(LINE_CLOCK_PERIOD) * 0.6]
puts "\[INFO\]: Setting wb output delay to:$core_output_delay_value"
puts "\[INFO\]: Setting wb input delay to: $core_input_delay_value"
@@ -41,6 +52,9 @@
set_output_delay $core_output_delay_value -clock [get_clocks $::env(CORE_CLOCK_PORT)] [get_port reg_rdata*]
set_output_delay $core_output_delay_value -clock [get_clocks $::env(CORE_CLOCK_PORT)] [get_port reg_ack*]
+set_input_delay $line_input_delay_value -clock [get_clocks $::env(LINE_CLOCK_PORT)] [get_port io_in*]
+set_output_delay $line_input_delay_value -clock [get_clocks $::env(LINE_CLOCK_PORT)] [get_port io_oeb*]
+set_output_delay $line_output_delay_value -clock [get_clocks $::env(LINE_CLOCK_PORT)] [get_port io_out*]
# TODO set this as parameter
diff --git a/openlane/uart/config.tcl b/openlane/uart/config.tcl
index 51088e3..0a94c66 100644
--- a/openlane/uart/config.tcl
+++ b/openlane/uart/config.tcl
@@ -47,6 +47,7 @@
$script_dir/../../verilog/rtl/lib/registers.v \
"
+set ::env(SYNTH_READ_BLACKBOX_LIB) 1
#set ::env(VERILOG_INCLUDE_DIRS) [glob $script_dir/../../verilog/rtl/sdram_ctrl/src/defs ]
set ::env(SDC_FILE) "$script_dir/base.sdc"
diff --git a/openlane/wb_host/base.sdc b/openlane/wb_host/base.sdc
new file mode 100644
index 0000000..0b5df4d
--- /dev/null
+++ b/openlane/wb_host/base.sdc
@@ -0,0 +1,67 @@
+# SPDX-FileCopyrightText: 2021 , Dinesh Annayya
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# SPDX-License-Identifier: Apache-2.0
+# SPDX-FileContributor: Modified by Dinesh Annayya <dinesha@opencores.org>
+
+
+set_units -time ns
+set ::env(WBM_CLOCK_PERIOD) "10"
+set ::env(WBM_CLOCK_PORT) "wbm_clk_i"
+
+set ::env(WBS_CLOCK_PERIOD) "10"
+set ::env(WBS_CLOCK_PORT) "wbs_clk_i"
+
+######################################
+# WB Clock domain input output
+######################################
+create_clock [get_ports $::env(WBM_CLOCK_PORT)] -name $::env(WBM_CLOCK_PORT) -period $::env(WBM_CLOCK_PERIOD)
+create_clock [get_ports $::env(WBS_CLOCK_PORT)] -name $::env(WBS_CLOCK_PORT) -period $::env(WBS_CLOCK_PERIOD)
+
+
+set wb_input_delay_value [expr $::env(WBM_CLOCK_PERIOD) * 0.6]
+set wb_output_delay_value [expr $::env(WBM_CLOCK_PERIOD) * 0.6]
+puts "\[INFO\]: Setting wb output delay to:$wb_output_delay_value"
+puts "\[INFO\]: Setting wb input delay to: $wb_input_delay_value"
+
+
+set_input_delay 2.0 -clock [get_clocks $::env(WBM_CLOCK_PORT)] {wbm_rst_i}
+set_input_delay 2.0 -clock [get_clocks $::env(WBM_CLOCK_PORT)] {wbm_rst_i}
+
+set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WBM_CLOCK_PORT)] [get_port wbm_cyc_i*]
+set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WBM_CLOCK_PORT)] [get_port wbm_stb_i*]
+set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WBM_CLOCK_PORT)] [get_port wbm_adr_i*]
+set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WBM_CLOCK_PORT)] [get_port wbm_we_i*]
+set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WBM_CLOCK_PORT)] [get_port wbm_dat_i*]
+set_input_delay $wb_input_delay_value -clock [get_clocks $::env(WBM_CLOCK_PORT)] [get_port wbm_sel_i*]
+set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WBM_CLOCK_PORT)] [get_port wbm_dat_o*]
+set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WBM_CLOCK_PORT)] [get_port wbm_ack_o*]
+set_output_delay $wb_output_delay_value -clock [get_clocks $::env(WBM_CLOCK_PORT)] [get_port wbm_err_o*]
+
+set_output_delay $wb_input_delay_value -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_cyc_o*]
+set_output_delay $wb_input_delay_value -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_stb_o*]
+set_output_delay $wb_input_delay_value -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_adr_o*]
+set_output_delay $wb_input_delay_value -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_we_o*]
+set_output_delay $wb_input_delay_value -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_dat_o*]
+set_output_delay $wb_input_delay_value -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_sel_o*]
+
+set_input_delay $wb_output_delay_value -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_dat_i*]
+set_input_delay $wb_output_delay_value -clock [get_clocks $::env(WBS_CLOCK_PORT)] [get_port wbs_ack_i*]
+
+
+# TODO set this as parameter
+set_driving_cell -lib_cell $::env(SYNTH_DRIVING_CELL) -pin $::env(SYNTH_DRIVING_CELL_PIN) [all_inputs]
+set cap_load [expr $::env(SYNTH_CAP_LOAD) / 1000.0]
+puts "\[INFO\]: Setting load to: $cap_load"
+set_load $cap_load [all_outputs]
+
diff --git a/openlane/wb_host/config.tcl b/openlane/wb_host/config.tcl
index 1c7005b..6c17252 100755
--- a/openlane/wb_host/config.tcl
+++ b/openlane/wb_host/config.tcl
@@ -42,8 +42,8 @@
$script_dir/../../verilog/rtl/lib/clk_ctl.v \
$script_dir/../../verilog/rtl/lib/registers.v"
-#set ::env(SDC_FILE) "$script_dir/base.sdc"
-#set ::env(BASE_SDC_FILE) "$script_dir/base.sdc"
+set ::env(SDC_FILE) "$script_dir/base.sdc"
+set ::env(BASE_SDC_FILE) "$script_dir/base.sdc"
set ::env(LEC_ENABLE) 0
@@ -57,7 +57,7 @@
set ::env(FP_PIN_ORDER_CFG) $::env(DESIGN_DIR)/pin_order.cfg
set ::env(FP_SIZING) absolute
-set ::env(DIE_AREA) "0 0 1000 200"
+set ::env(DIE_AREA) "0 0 400 200"
# If you're going to use multiple power domains, then keep this disabled.
diff --git a/openlane/wb_host/pin_order.cfg b/openlane/wb_host/pin_order.cfg
index 488bc22..db8f388 100644
--- a/openlane/wb_host/pin_order.cfg
+++ b/openlane/wb_host/pin_order.cfg
@@ -118,390 +118,6 @@
wbm_dat_o\[31\]
wbm_err_o
-la_data_in\[0\] 500 0 2
-la_data_out\[0\]
-la_oenb\[0\]
-la_data_in\[1\]
-la_data_out\[1\]
-la_oenb\[1\]
-la_data_in\[2\]
-la_data_out\[2\]
-la_oenb\[2\]
-la_data_in\[3\]
-la_data_out\[3\]
-la_oenb\[3\]
-la_data_in\[4\]
-la_data_out\[4\]
-la_oenb\[4\]
-la_data_in\[5\]
-la_data_out\[5\]
-la_oenb\[5\]
-la_data_in\[6\]
-la_data_out\[6\]
-la_oenb\[6\]
-la_data_in\[7\]
-la_data_out\[7\]
-la_oenb\[7\]
-la_data_in\[8\]
-la_data_out\[8\]
-la_oenb\[8\]
-la_data_in\[9\]
-la_data_out\[9\]
-la_oenb\[9\]
-la_data_in\[10\]
-la_data_out\[10\]
-la_oenb\[10\]
-la_data_in\[11\]
-la_data_out\[11\]
-la_oenb\[11\]
-la_data_in\[12\]
-la_data_out\[12\]
-la_oenb\[12\]
-la_data_in\[13\]
-la_data_out\[13\]
-la_oenb\[13\]
-la_data_in\[14\]
-la_data_out\[14\]
-la_oenb\[14\]
-la_data_in\[15\]
-la_data_out\[15\]
-la_oenb\[15\]
-la_data_in\[16\]
-la_data_out\[16\]
-la_oenb\[16\]
-la_data_in\[17\]
-la_data_out\[17\]
-la_oenb\[17\]
-la_data_in\[18\]
-la_data_out\[18\]
-la_oenb\[18\]
-la_data_in\[19\]
-la_data_out\[19\]
-la_oenb\[19\]
-la_data_in\[20\]
-la_data_out\[20\]
-la_oenb\[20\]
-la_data_in\[21\]
-la_data_out\[21\]
-la_oenb\[21\]
-la_data_in\[22\]
-la_data_out\[22\]
-la_oenb\[22\]
-la_data_in\[23\]
-la_data_out\[23\]
-la_oenb\[23\]
-la_data_in\[24\]
-la_data_out\[24\]
-la_oenb\[24\]
-la_data_in\[25\]
-la_data_out\[25\]
-la_oenb\[25\]
-la_data_in\[26\]
-la_data_out\[26\]
-la_oenb\[26\]
-la_data_in\[27\]
-la_data_out\[27\]
-la_oenb\[27\]
-la_data_in\[28\]
-la_data_out\[28\]
-la_oenb\[28\]
-la_data_in\[29\]
-la_data_out\[29\]
-la_oenb\[29\]
-la_data_in\[30\]
-la_data_out\[30\]
-la_oenb\[30\]
-la_data_in\[31\]
-la_data_out\[31\]
-la_oenb\[31\]
-la_data_in\[32\]
-la_data_out\[32\]
-la_oenb\[32\]
-la_data_in\[33\]
-la_data_out\[33\]
-la_oenb\[33\]
-la_data_in\[34\]
-la_data_out\[34\]
-la_oenb\[34\]
-la_data_in\[35\]
-la_data_out\[35\]
-la_oenb\[35\]
-la_data_in\[36\]
-la_data_out\[36\]
-la_oenb\[36\]
-la_data_in\[37\]
-la_data_out\[37\]
-la_oenb\[37\]
-la_data_in\[38\]
-la_data_out\[38\]
-la_oenb\[38\]
-la_data_in\[39\]
-la_data_out\[39\]
-la_oenb\[39\]
-la_data_in\[40\]
-la_data_out\[40\]
-la_oenb\[40\]
-la_data_in\[41\]
-la_data_out\[41\]
-la_oenb\[41\]
-la_data_in\[42\]
-la_data_out\[42\]
-la_oenb\[42\]
-la_data_in\[43\]
-la_data_out\[43\]
-la_oenb\[43\]
-la_data_in\[44\]
-la_data_out\[44\]
-la_oenb\[44\]
-la_data_in\[45\]
-la_data_out\[45\]
-la_oenb\[45\]
-la_data_in\[46\]
-la_data_out\[46\]
-la_oenb\[46\]
-la_data_in\[47\]
-la_data_out\[47\]
-la_oenb\[47\]
-la_data_in\[48\]
-la_data_out\[48\]
-la_oenb\[48\]
-la_data_in\[49\]
-la_data_out\[49\]
-la_oenb\[49\]
-la_data_in\[50\]
-la_data_out\[50\]
-la_oenb\[50\]
-la_data_in\[51\]
-la_data_out\[51\]
-la_oenb\[51\]
-la_data_in\[52\]
-la_data_out\[52\]
-la_oenb\[52\]
-la_data_in\[53\]
-la_data_out\[53\]
-la_oenb\[53\]
-la_data_in\[54\]
-la_data_out\[54\]
-la_oenb\[54\]
-la_data_in\[55\]
-la_data_out\[55\]
-la_oenb\[55\]
-la_data_in\[56\]
-la_data_out\[56\]
-la_oenb\[56\]
-la_data_in\[57\]
-la_data_out\[57\]
-la_oenb\[57\]
-la_data_in\[58\]
-la_data_out\[58\]
-la_oenb\[58\]
-la_data_in\[59\]
-la_data_out\[59\]
-la_oenb\[59\]
-la_data_in\[60\]
-la_data_out\[60\]
-la_oenb\[60\]
-la_data_in\[61\]
-la_data_out\[61\]
-la_oenb\[61\]
-la_data_in\[62\]
-la_data_out\[62\]
-la_oenb\[62\]
-la_data_in\[63\]
-la_data_out\[63\]
-la_oenb\[63\]
-la_data_in\[64\]
-la_data_out\[64\]
-la_oenb\[64\]
-la_data_in\[65\]
-la_data_out\[65\]
-la_oenb\[65\]
-la_data_in\[66\]
-la_data_out\[66\]
-la_oenb\[66\]
-la_data_in\[67\]
-la_data_out\[67\]
-la_oenb\[67\]
-la_data_in\[68\]
-la_data_out\[68\]
-la_oenb\[68\]
-la_data_in\[69\]
-la_data_out\[69\]
-la_oenb\[69\]
-la_data_in\[70\]
-la_data_out\[70\]
-la_oenb\[70\]
-la_data_in\[71\]
-la_data_out\[71\]
-la_oenb\[71\]
-la_data_in\[72\]
-la_data_out\[72\]
-la_oenb\[72\]
-la_data_in\[73\]
-la_data_out\[73\]
-la_oenb\[73\]
-la_data_in\[74\]
-la_data_out\[74\]
-la_oenb\[74\]
-la_data_in\[75\]
-la_data_out\[75\]
-la_oenb\[75\]
-la_data_in\[76\]
-la_data_out\[76\]
-la_oenb\[76\]
-la_data_in\[77\]
-la_data_out\[77\]
-la_oenb\[77\]
-la_data_in\[78\]
-la_data_out\[78\]
-la_oenb\[78\]
-la_data_in\[79\]
-la_data_out\[79\]
-la_oenb\[79\]
-la_data_in\[80\]
-la_data_out\[80\]
-la_oenb\[80\]
-la_data_in\[81\]
-la_data_out\[81\]
-la_oenb\[81\]
-la_data_in\[82\]
-la_data_out\[82\]
-la_oenb\[82\]
-la_data_in\[83\]
-la_data_out\[83\]
-la_oenb\[83\]
-la_data_in\[84\]
-la_data_out\[84\]
-la_oenb\[84\]
-la_data_in\[85\]
-la_data_out\[85\]
-la_oenb\[85\]
-la_data_in\[86\]
-la_data_out\[86\]
-la_oenb\[86\]
-la_data_in\[87\]
-la_data_out\[87\]
-la_oenb\[87\]
-la_data_in\[88\]
-la_data_out\[88\]
-la_oenb\[88\]
-la_data_in\[89\]
-la_data_out\[89\]
-la_oenb\[89\]
-la_data_in\[90\]
-la_data_out\[90\]
-la_oenb\[90\]
-la_data_in\[91\]
-la_data_out\[91\]
-la_oenb\[91\]
-la_data_in\[92\]
-la_data_out\[92\]
-la_oenb\[92\]
-la_data_in\[93\]
-la_data_out\[93\]
-la_oenb\[93\]
-la_data_in\[94\]
-la_data_out\[94\]
-la_oenb\[94\]
-la_data_in\[95\]
-la_data_out\[95\]
-la_oenb\[95\]
-la_data_in\[96\]
-la_data_out\[96\]
-la_oenb\[96\]
-la_data_in\[97\]
-la_data_out\[97\]
-la_oenb\[97\]
-la_data_in\[98\]
-la_data_out\[98\]
-la_oenb\[98\]
-la_data_in\[99\]
-la_data_out\[99\]
-la_oenb\[99\]
-la_data_in\[100\]
-la_data_out\[100\]
-la_oenb\[100\]
-la_data_in\[101\]
-la_data_out\[101\]
-la_oenb\[101\]
-la_data_in\[102\]
-la_data_out\[102\]
-la_oenb\[102\]
-la_data_in\[103\]
-la_data_out\[103\]
-la_oenb\[103\]
-la_data_in\[104\]
-la_data_out\[104\]
-la_oenb\[104\]
-la_data_in\[105\]
-la_data_out\[105\]
-la_oenb\[105\]
-la_data_in\[106\]
-la_data_out\[106\]
-la_oenb\[106\]
-la_data_in\[107\]
-la_data_out\[107\]
-la_oenb\[107\]
-la_data_in\[108\]
-la_data_out\[108\]
-la_oenb\[108\]
-la_data_in\[109\]
-la_data_out\[109\]
-la_oenb\[109\]
-la_data_in\[110\]
-la_data_out\[110\]
-la_oenb\[110\]
-la_data_in\[111\]
-la_data_out\[111\]
-la_oenb\[111\]
-la_data_in\[112\]
-la_data_out\[112\]
-la_oenb\[112\]
-la_data_in\[113\]
-la_data_out\[113\]
-la_oenb\[113\]
-la_data_in\[114\]
-la_data_out\[114\]
-la_oenb\[114\]
-la_data_in\[115\]
-la_data_out\[115\]
-la_oenb\[115\]
-la_data_in\[116\]
-la_data_out\[116\]
-la_oenb\[116\]
-la_data_in\[117\]
-la_data_out\[117\]
-la_oenb\[117\]
-la_data_in\[118\]
-la_data_out\[118\]
-la_oenb\[118\]
-la_data_in\[119\]
-la_data_out\[119\]
-la_oenb\[119\]
-la_data_in\[120\]
-la_data_out\[120\]
-la_oenb\[120\]
-la_data_in\[121\]
-la_data_out\[121\]
-la_oenb\[121\]
-la_data_in\[122\]
-la_data_out\[122\]
-la_oenb\[122\]
-la_data_in\[123\]
-la_data_out\[123\]
-la_oenb\[123\]
-la_data_in\[124\]
-la_data_out\[124\]
-la_oenb\[124\]
-la_data_in\[125\]
-la_data_out\[125\]
-la_oenb\[125\]
-la_data_in\[126\]
-la_data_out\[126\]
-la_oenb\[126\]
-la_data_in\[127\]
-la_data_out\[127\]
-la_oenb\[127\]
#N
wbs_stb_o 0000 0 2
@@ -682,4 +298,4 @@
cfg_clk_ctrl2\[2\]
cfg_clk_ctrl2\[1\]
cfg_clk_ctrl2\[0\]
-
+
diff --git a/openlane/yifive/config.tcl b/openlane/yifive/config.tcl
index 1787f12..2fe0330 100644
--- a/openlane/yifive/config.tcl
+++ b/openlane/yifive/config.tcl
@@ -1,4 +1,4 @@
-# SPDX-FileCopyrightText: 2021 , Dinesh Annayya
+# SPDX-FileCopyrightText: 2020 Efabless Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -12,49 +12,56 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# SPDX-License-Identifier: Apache-2.0
-# SPDX-FileContributor: Modified by Dinesh Annayya <dinesha@opencores.org>
-
+# Base Configurations. Don't Touch
+# section begin
set script_dir [file dirname [file normalize [info script]]]
-set ::env(DESIGN_NAME) digital_core
+source $script_dir/../../caravel/openlane/user_project_wrapper_empty/fixed_wrapper_cfgs.tcl
+set ::env(DESIGN_NAME) yifive
set verilog_root $script_dir/../../verilog/
set lef_root $script_dir/../../lef/
set gds_root $script_dir/../../gds/
+#section end
+
+# User Configurations
+#
+set ::env(DESIGN_IS_CORE) 1
+set ::env(FP_PDN_CORE_RING) 1
+## Source Verilog Files
set ::env(VERILOG_FILES) "\
- $script_dir/../../verilog/rtl/digital_core/src/digital_core.sv \
+ $script_dir/../../caravel/verilog/rtl/defines.v \
+ $script_dir/yifive.v"
+
+## Clock configurations
+set ::env(CLOCK_PORT) "user_clock2 wb_clk_i"
+#set ::env(CLOCK_NET) "mprj.clk"
+
+set ::env(CLOCK_PERIOD) "10"
+
+## Internal Macros
+### Macro Placement
+set ::env(FP_SIZING) "absolute"
+set ::env(MACRO_PLACEMENT_CFG) $script_dir/macro.cfg
+
+set ::env(SDC_FILE) "$script_dir/base.sdc"
+set ::env(BASE_SDC_FILE) "$script_dir/base.sdc"
+
+
+### Black-box verilog and views
+set ::env(VERILOG_FILES_BLACKBOX) "\
+ $script_dir/../../verilog/gl/spi_master.v \
+ $script_dir/../../verilog/gl/wb_interconnect.v \
+ $script_dir/../../verilog/gl/glbl_cfg.v \
+ $script_dir/../../verilog/gl/uart.v \
+ $script_dir/../../verilog/gl/sdram.v \
+ $script_dir/../../verilog/gl/wb_host.v \
+ $script_dir/../../verilog/gl/clk_skew_adjust.v \
+ $script_dir/../../verilog/gl/syntacore.v \
"
-set ::env(SYNTH_READ_BLACKBOX_LIB) "1"
-set ::env(CLOCK_PORT) "wb_clk_i"
-set ::env(CLOCK_PERIOD) "50"
-set ::env(SYNTH_STRATEGY) "AREA 0"
-set ::env(SYNTH_MAX_FANOUT) 4
-
-set ::env(FP_PDN_VPITCH) 50
-set ::env(PDN_CFG) $script_dir/pdn.tcl
-
-set ::env(PL_BASIC_PLACEMENT) 1
-
-set ::env(FP_VERTICAL_HALO) 6
-set ::env(FP_PIN_ORDER_CFG) $script_dir/pin_order.cfg
-
-
-set ::env(DESIGN_IS_CORE) 0
-set ::env(FP_PDN_CORE_RING) 0
-set ::env(GLB_RT_MAXLAYER) 5
-
-
-set ::env(VDD_NETS) [list {vccd1} {vccd2} {vdda1} {vdda2}]
-set ::env(GND_NETS) [list {vssd1} {vssd2} {vssa1} {vssa2}]
-set ::env(SYNTH_USE_PG_PINS_DEFINES) "USE_POWER_PINS"
-
-
-set ::env(SYNTH_DEFINES) [list SYNTHESIS ]
-
-set ::env(VERILOG_INCLUDE_DIRS) [glob $script_dir/../../verilog/rtl/syntacore/scr1/src/includes $script_dir/../../verilog/rtl/sdram_ctrl/src/defs ]
set ::env(EXTRA_LEFS) "\
$lef_root/spi_master.lef \
@@ -62,6 +69,8 @@
$lef_root/wb_interconnect.lef \
$lef_root/sdram.lef \
$lef_root/uart.lef \
+ $lef_root/wb_host.lef \
+ $lef_root/clk_skew_adjust.lef \
$lef_root/syntacore.lef \
"
@@ -69,45 +78,44 @@
$gds_root/spi_master.gds \
$gds_root/glbl_cfg.gds \
$gds_root/wb_interconnect.gds \
- $gds_root/sdram.gds \
$gds_root/uart.gds \
+ $gds_root/sdram.gds \
+ $gds_root/wb_host.gds \
+ $gds_root/clk_skew_adjust.gds \
$gds_root/syntacore.gds \
- "
-
-set ::env(VERILOG_FILES_BLACKBOX) "\
- $script_dir/../../verilog/gl/spi_master.v \
- $script_dir/../../verilog/gl/wb_interconnect.v \
- $script_dir/../../verilog/gl/glbl_cfg.v \
- $script_dir/../../verilog/gl/uart.v \
- $script_dir/../../verilog/gl/sdram.v \
- $script_dir/../../verilog/gl/syntacore.v \
"
+set ::env(SYNTH_DEFINES) [list SYNTHESIS ]
-set ::env(FP_SIZING) relative
-set ::env(DIE_AREA) "0 0 2500 3500"
+set ::env(VERILOG_INCLUDE_DIRS) [glob $script_dir/../../verilog/rtl/syntacore/scr1/src/includes $script_dir/../../verilog/rtl/sdram_ctrl/src/defs ]
-set ::env(LEC_ENABLE) 0
+set ::env(GLB_RT_MAXLAYER) 5
+
+set ::env(FP_PDN_CHECK_NODES) 0
+
+set ::env(RUN_KLAYOUT_DRC) 0
+
+set ::env(VDD_PIN) [list {vccd1}]
+set ::env(GND_PIN) [list {vssd1}]
-set ::env(MACRO_PLACEMENT_CFG) $script_dir/macro_placement.cfg
-set ::env(PL_BASIC_PLACEMENT) 1
-set ::env(PL_TARGET_DENSITY) 0.20
-set ::env(PL_TARGET_DENSITY_CELLS) 0.20
-set ::env(PL_OPENPHYSYN_OPTIMIZATIONS) 0
-set ::env(CELL_PAD) 4
+# The following is because there are no std cells in the example wrapper project.
+#set ::env(SYNTH_TOP_LEVEL) 1
+set ::env(PL_RANDOM_GLB_PLACEMENT) 1
-set ::env(GLB_RT_ADJUSTMENT) 0
-set ::env(GLB_RT_L2_ADJUSTMENT) 0.2
-set ::env(GLB_RT_L3_ADJUSTMENT) 0.25
-set ::env(GLB_RT_L4_ADJUSTMENT) 0.2
-set ::env(GLB_RT_L5_ADJUSTMENT) 0.1
-set ::env(GLB_RT_L6_ADJUSTMENT) 0.1
-set ::env(GLB_RT_TILES) 14
-set ::env(PL_DIAMOND_SEARCH_HEIGHT) "400"
+set ::env(PL_RESIZER_DESIGN_OPTIMIZATIONS) 0
+set ::env(PL_RESIZER_TIMING_OPTIMIZATIONS) 0
+set ::env(PL_RESIZER_BUFFER_INPUT_PORTS) 0
+set ::env(PL_RESIZER_BUFFER_OUTPUT_PORTS) 0
+#
+set ::env(DIODE_INSERTION_STRATEGY) 0
+set ::env(FILL_INSERTION) 0
+set ::env(TAP_DECAP_INSERTION) 0
+set ::env(CLOCK_TREE_SYNTH) 0
-set ::env(DIODE_INSERTION_STRATEGY) 4
+#set ::env(MAGIC_EXT_USE_GDS) "1"
+set ::env(PL_DIAMOND_SEARCH_HEIGHT) "250"
diff --git a/openlane/yifive/macro_placement.cfg b/openlane/yifive/macro_placement.cfg
deleted file mode 100644
index 7b2d9a8..0000000
--- a/openlane/yifive/macro_placement.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-u_riscv_top 300 1200 N
-u_intercon 300 900 N
-u_sdram_ctrl 1100 300 N
-u_glbl_cfg 2300 300 N
-u_spi_master 200 200 N
diff --git a/openlane/yifive/pdn.tcl b/openlane/yifive/pdn.tcl
deleted file mode 100644
index 19314bf..0000000
--- a/openlane/yifive/pdn.tcl
+++ /dev/null
@@ -1,49 +0,0 @@
-# SPDX-FileCopyrightText: 2020 Efabless Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# SPDX-License-Identifier: Apache-2.0
-
-# Power nets
-set ::power_nets $::env(VDD_PIN)
-set ::ground_nets $::env(GND_PIN)
-
-set ::macro_blockage_layer_list "li1 met1 met2 met3 met4 met5"
-
-pdngen::specify_grid stdcell {
- name grid
- rails {
- met1 {width 0.48 pitch $::env(PLACE_SITE_HEIGHT) offset 0}
- }
- straps {
- met4 {width 1.6 pitch $::env(FP_PDN_VPITCH) offset $::env(FP_PDN_VOFFSET)}
- met5 {width 1.6 pitch $::env(FP_PDN_HPITCH) offset $::env(FP_PDN_HOFFSET)}
- }
- connect {{met1 met4} {met4 met5}}
-}
-
-pdngen::specify_grid macro {
- power_pins "VPWR"
- ground_pins "VGND"
- blockages "li1 met1 met2 met3 met4"
- straps {
- }
- connect {{met4_PIN_ver met5}}
-}
-
-set ::halo 4
-
-# POWER or GROUND #Std. cell rails starting with power or ground rails at the bottom of the core area
-set ::rails_start_with "POWER" ;
-
-# POWER or GROUND #Upper metal stripes starting with power or ground rails at the left/bottom of the core area
-set ::stripes_start_with "POWER" ;
diff --git a/openlane/yifive/pin_order.cfg b/openlane/yifive/pin_order.cfg
index e44d520..90cde69 100644
--- a/openlane/yifive/pin_order.cfg
+++ b/openlane/yifive/pin_order.cfg
@@ -1,37 +1,45 @@
#BUS_SORT
#NR
+analog_io\[8\]
io_in\[15\]
io_out\[15\]
io_oeb\[15\]
+analog_io\[9\]
io_in\[16\]
io_out\[16\]
io_oeb\[16\]
+analog_io\[10\]
io_in\[17\]
io_out\[17\]
io_oeb\[17\]
+analog_io\[11\]
io_in\[18\]
io_out\[18\]
io_oeb\[18\]
+analog_io\[12\]
io_in\[19\]
io_out\[19\]
io_oeb\[19\]
+analog_io\[13\]
io_in\[20\]
io_out\[20\]
io_oeb\[20\]
+analog_io\[14\]
io_in\[21\]
io_out\[21\]
io_oeb\[21\]
+analog_io\[15\]
io_in\[22\]
io_out\[22\]
io_oeb\[22\]
+analog_io\[16\]
io_in\[23\]
io_out\[23\]
io_oeb\[23\]
#S
-
wb_.*
-wbd_.*
+wbs_.*
la_.*
user_clock2
user_irq.*
@@ -58,65 +66,85 @@
io_in\[6\]
io_out\[6\]
io_oeb\[6\]
+analog_io\[0\]
io_in\[7\]
io_out\[7\]
io_oeb\[7\]
+analog_io\[1\]
io_in\[8\]
io_out\[8\]
io_oeb\[8\]
+analog_io\[2\]
io_in\[9\]
io_out\[9\]
io_oeb\[9\]
+analog_io\[3\]
io_in\[10\]
io_out\[10\]
io_oeb\[10\]
+analog_io\[4\]
io_in\[11\]
io_out\[11\]
io_oeb\[11\]
+analog_io\[5\]
io_in\[12\]
io_out\[12\]
io_oeb\[12\]
+analog_io\[6\]
io_in\[13\]
io_out\[13\]
io_oeb\[13\]
+analog_io\[7\]
io_in\[14\]
io_out\[14\]
io_oeb\[14\]
#WR
+analog_io\[17\]
io_in\[24\]
io_out\[24\]
io_oeb\[24\]
+analog_io\[18\]
io_in\[25\]
io_out\[25\]
io_oeb\[25\]
+analog_io\[19\]
io_in\[26\]
io_out\[26\]
io_oeb\[26\]
+analog_io\[20\]
io_in\[27\]
io_out\[27\]
io_oeb\[27\]
+analog_io\[21\]
io_in\[28\]
io_out\[28\]
io_oeb\[28\]
+analog_io\[22\]
io_in\[29\]
io_out\[29\]
io_oeb\[29\]
+analog_io\[23\]
io_in\[30\]
io_out\[30\]
io_oeb\[30\]
+analog_io\[24\]
io_in\[31\]
io_out\[31\]
io_oeb\[31\]
+analog_io\[25\]
io_in\[32\]
io_out\[32\]
io_oeb\[32\]
+analog_io\[26\]
io_in\[33\]
io_out\[33\]
io_oeb\[33\]
+analog_io\[27\]
io_in\[34\]
io_out\[34\]
io_oeb\[34\]
+analog_io\[28\]
io_in\[35\]
io_out\[35\]
io_oeb\[35\]
diff --git a/signoff/clk_skew_adjust/final_summary_report.csv b/signoff/clk_skew_adjust/final_summary_report.csv
index 61ff946..713cb84 100644
--- a/signoff/clk_skew_adjust/final_summary_report.csv
+++ b/signoff/clk_skew_adjust/final_summary_report.csv
@@ -1,2 +1,2 @@
,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/clk_skew_adjust,clk_skew_adjust,clk_skew_adjust,Flow_completed,0h1m6s,0h0m30s,64878.892733564026,0.0011560000000000001,25951.55709342561,51,384.71,30,0,0,0,0,0,0,0,0,0,0,0,677,212,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0.0,12.65,11.49,0.0,-1,-1,32,35,32,35,0,0,0,30,0,0,0,0,0,0,0,0,-1,-1,-1,16,5,0,21,90.9090909090909,11,10,AREA 0,5,40,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,0,3
+0,/project/openlane/clk_skew_adjust,clk_skew_adjust,clk_skew_adjust,Flow_completed,0h1m8s,0h0m32s,46875.0,0.0016,18750.0,48,385.05,30,0,0,0,0,0,0,0,0,0,0,0,980,208,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0.0,16.57,18.31,0.0,-1,-1,32,35,32,35,0,0,0,30,0,0,0,0,0,0,0,0,-1,-1,-1,20,6,0,26,90.9090909090909,11,10,AREA 0,5,40,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,3
diff --git a/signoff/sdram/final_summary_report.csv b/signoff/sdram/final_summary_report.csv
index 390656f..7d8ac3a 100644
--- a/signoff/sdram/final_summary_report.csv
+++ b/signoff/sdram/final_summary_report.csv
@@ -1,2 +1,2 @@
,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/sdram,sdrc_top,sdram,Flow_completed,0h8m28s,0h4m15s,40668.57142857143,0.35,20334.285714285714,27,639.29,7117,0,0,0,0,0,0,0,15,0,-1,0,302912,50760,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,239724191,0.0,20.25,16.33,1.79,-1,-1,7052,7280,1239,1467,0,0,0,7117,197,107,81,102,354,212,31,2263,1256,1154,27,350,4248,0,4598,100.0,10.0,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,3
+0,/project/openlane/sdram,sdrc_top,sdram,Flow_completed,0h9m25s,0h5m13s,41131.42857142857,0.35,20565.714285714286,27,654.48,7198,0,0,0,0,0,0,0,14,0,-1,0,307108,51429,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,245789185,0.0,20.86,16.44,1.36,-1,-1,7102,7361,1246,1505,0,0,0,7198,197,107,83,94,354,211,32,2289,1267,1186,27,350,4248,0,4598,100.0,10.0,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,3
diff --git a/signoff/spi_master/final_summary_report.csv b/signoff/spi_master/final_summary_report.csv
index 7ecde4c..c34974f 100644
--- a/signoff/spi_master/final_summary_report.csv
+++ b/signoff/spi_master/final_summary_report.csv
@@ -1,2 +1,2 @@
,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/spi_master,spim_top,spi_master,Flow_completed,0h6m38s,0h3m39s,45283.33333333334,0.24,22641.66666666667,33,605.61,5434,0,0,0,0,0,0,0,1,5,-1,0,248271,41053,-0.54,-0.54,-0.42,-0.42,-0.39,-0.98,-0.98,-0.94,-0.94,-0.89,196972893,0.0,18.06,28.16,0.23,-1,-1,5370,5512,872,1014,0,0,0,5434,217,0,185,97,764,130,35,1615,982,919,24,424,2889,0,3313,96.24639076034649,10.39,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,3
+0,/project/openlane/spi_master,spim_top,spi_master,Flow_completed,0h8m14s,0h4m36s,45758.33333333334,0.24,22879.16666666667,33,610.27,5491,0,0,0,0,0,0,0,0,4,-1,0,245032,41843,-0.01,-0.01,0.0,0.0,0.0,-0.01,-0.01,0.0,0.0,0.0,192057060,0.0,17.63,27.97,0.04,-1,-1,5427,5569,901,1043,0,0,0,5491,223,0,184,93,748,126,37,1613,982,921,24,424,2889,0,3313,100.0,10.0,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,3
diff --git a/signoff/syntacore/final_summary_report.csv b/signoff/syntacore/final_summary_report.csv
index 2fc1d06..a01c86f 100644
--- a/signoff/syntacore/final_summary_report.csv
+++ b/signoff/syntacore/final_summary_report.csv
@@ -1,2 +1,2 @@
,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/syntacore,scr1_top_wb,syntacore,Flow_completed,0h50m19s,0h27m57s,34420.0,1.8,17210.0,22,1198.49,30978,0,0,0,0,0,0,0,56,2,-1,0,1529372,247821,-0.3,-0.3,-0.44,-0.44,-0.49,-12.11,-12.11,-25.78,-25.78,-26.46,1263825045,0.0,18.47,15.11,4.15,0.29,-1,30864,31102,2807,3045,0,0,0,30978,631,0,685,2044,4015,2105,1318,7432,2838,2786,94,866,22836,0,23702,95.32888465204957,10.49,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,3
+0,/project/openlane/syntacore,scr1_top_wb,syntacore,Flow_completed,0h51m11s,0h28m28s,34498.88888888888,1.8,17249.44444444444,23,1210.03,31049,0,0,0,0,0,0,0,76,9,-1,0,1617218,250691,-4.42,-4.42,-4.38,-4.38,-4.45,-34.56,-34.56,-34.86,-34.86,-35.41,1349556396,0.0,18.48,16.7,4.85,0.56,-1,30872,31173,2777,3078,0,0,0,31049,637,0,695,2031,3988,2108,1314,7432,2838,2808,95,866,22836,0,23702,69.20415224913495,14.45,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,3
diff --git a/signoff/uart/final_summary_report.csv b/signoff/uart/final_summary_report.csv
index e9d8ff5..63ea5b4 100644
--- a/signoff/uart/final_summary_report.csv
+++ b/signoff/uart/final_summary_report.csv
@@ -1,2 +1,2 @@
,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/uart,uart_core,uart,Flow_completed,0h5m4s,0h3m18s,46133.33333333334,0.12,23066.66666666667,35,545.71,2768,0,0,0,0,0,0,0,1,0,-1,0,91647,20662,-0.67,-0.67,-0.47,-0.47,-0.73,-37.32,-37.32,-45.39,-45.39,-68.63,62910936,0.0,19.11,18.79,0.06,-1,-1,2767,2787,454,474,0,0,0,2768,59,0,30,41,182,125,26,685,435,396,17,278,1410,0,1688,93.19664492078284,10.73,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,4
+0,/project/openlane/uart,uart_core,uart,Flow_completed,0h4m21s,0h2m40s,46166.66666666667,0.12,23083.333333333336,35,540.52,2770,0,0,0,0,0,0,0,0,0,-1,0,91807,20722,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,62462955,0.0,19.42,18.96,0.0,-1,-1,2769,2789,456,476,0,0,0,2770,56,0,29,41,182,125,26,685,435,396,18,278,1410,0,1688,100.0,10.0,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,4
diff --git a/signoff/user_project_wrapper/final_summary_report.csv b/signoff/user_project_wrapper/final_summary_report.csv
index a4e190b..4ddaa70 100644
--- a/signoff/user_project_wrapper/final_summary_report.csv
+++ b/signoff/user_project_wrapper/final_summary_report.csv
@@ -1,2 +1,2 @@
,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/user_project_wrapper,user_project_wrapper,user_project_wrapper,Flow_completed,0h42m41s,0h5m47s,3.3079078455790785,10.2784,1.6539539227895392,0,580.84,17,0,0,0,0,0,0,0,0,30,-1,-1,1296299,5489,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1,0.0,2.61,3.74,0.82,1.49,-1,884,1502,853,1471,0,0,0,17,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,100.0,10.0,10,AREA 0,5,50,1,180,180,0.55,0,sky130_fd_sc_hd,4,0
+0,/project/openlane/user_project_wrapper,user_project_wrapper,user_project_wrapper,Flow_completed,0h41m45s,0h5m8s,3.3079078455790785,10.2784,1.6539539227895392,0,569.2,17,0,0,0,0,0,0,0,0,30,-1,-1,1188996,4053,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1,0.0,1.29,4.08,0.96,2.29,-1,852,1470,852,1470,0,0,0,17,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,100.0,10.0,10,AREA 0,5,50,1,180,180,0.55,0,sky130_fd_sc_hd,4,0
diff --git a/signoff/wb_host/final_summary_report.csv b/signoff/wb_host/final_summary_report.csv
index be336b3..d6c67a7 100644
--- a/signoff/wb_host/final_summary_report.csv
+++ b/signoff/wb_host/final_summary_report.csv
@@ -1,2 +1,2 @@
,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/wb_host,wb_host,wb_host,Flow_completed,0h7m6s,0h4m32s,30340.0,0.2,15170.0,25,618.03,3034,0,0,0,0,0,0,0,3,0,-1,0,323344,30030,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,276033708,0.0,49.92,13.67,23.25,-1,-1,2756,3398,457,1099,0,0,0,3034,78,0,3,11,37,27,10,770,589,744,14,130,2343,0,2473,100.0,10.0,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,5
+0,/project/openlane/wb_host,wb_host,wb_host,Flow_completed,0h5m32s,0h3m51s,72650.0,0.08,36325.0,58,563.27,2906,0,0,0,0,0,0,0,3,0,-1,0,155769,24752,-2.71,-2.71,-2.68,-2.68,-2.73,-85.53,-85.53,-84.64,-84.64,-87.05,121784250,0.0,55.83,29.09,15.64,-1,-1,2753,3014,454,715,0,0,0,2906,77,0,2,14,32,25,10,769,589,744,14,130,905,0,1035,78.55459544383346,12.73,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,5
diff --git a/signoff/wb_interconnect/final_summary_report.csv b/signoff/wb_interconnect/final_summary_report.csv
index 751e1e1..61ca705 100644
--- a/signoff/wb_interconnect/final_summary_report.csv
+++ b/signoff/wb_interconnect/final_summary_report.csv
@@ -1,2 +1,2 @@
,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/wb_interconnect,wb_interconnect,wb_interconnect,Flow_completed,0h10m43s,0h6m55s,5877.272727272727,0.44,2938.6363636363635,5,580.27,1293,0,0,0,0,0,0,0,2,0,-1,0,496849,21106,0.0,0.0,0.0,0.0,-0.83,0.0,0.0,0.0,0.0,-79.64,424741802,0.0,31.77,8.67,21.85,-1,-1,1043,1616,204,777,0,0,0,1293,244,0,75,15,111,0,0,180,431,418,11,130,5189,0,5319,92.33610341643582,10.83,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,4
+0,/project/openlane/wb_interconnect,wb_interconnect,wb_interconnect,Flow_completed,0h8m41s,0h4m48s,5868.181818181818,0.44,2934.090909090909,5,582.16,1291,0,0,0,0,0,0,0,1,0,-1,0,483038,20167,0.0,0.0,0.0,0.0,-1.08,0.0,0.0,0.0,0.0,-86.31,415470896,0.0,32.3,8.43,19.36,-1,-1,1041,1614,204,777,0,0,0,1291,244,0,75,15,111,0,0,180,431,414,11,130,5189,0,5319,90.25270758122744,11.08,10,AREA 0,4,50,1,153.6,153.18,0.55,0,sky130_fd_sc_hd,4,4
diff --git a/verilog/dv/risc_boot/risc_boot_tb.v b/verilog/dv/risc_boot/risc_boot_tb.v
index 457dcf7..26eeaf8 100644
--- a/verilog/dv/risc_boot/risc_boot_tb.v
+++ b/verilog/dv/risc_boot/risc_boot_tb.v
@@ -380,6 +380,68 @@
);
+`ifndef GL // Drive Power for Hold Fix Buf
+ // All standard cell need power hook-up for functionality work
+ initial begin
+ force uut.mprj.u_spi_master.u_delay1_sdio0.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio0.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio0.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay1_sdio0.VNB = VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio0.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio0.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio0.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio0.VNB = VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio0.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio0.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio0.VGND =VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio0.VNB =VSS;
+
+
+ force uut.mprj.u_spi_master.u_delay1_sdio1.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio1.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio1.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay1_sdio1.VNB = VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio1.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio1.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio1.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio1.VNB = VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio1.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio1.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio1.VGND =VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio1.VNB =VSS;
+
+ force uut.mprj.u_spi_master.u_delay1_sdio2.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio2.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio2.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay1_sdio2.VNB = VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio2.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio2.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio2.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio2.VNB = VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio2.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio2.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio2.VGND =VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio2.VNB =VSS;
+
+ force uut.mprj.u_spi_master.u_delay1_sdio3.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio3.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio3.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay1_sdio3.VNB = VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio3.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio3.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio3.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio3.VNB = VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio3.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio3.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio3.VGND =VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio3.VNB =VSS;
+
+ force uut.mprj.u_uart_core.u_lineclk_buf.VPWR =USER_VDD1V8;
+ force uut.mprj.u_uart_core.u_lineclk_buf.VPB =USER_VDD1V8;
+ force uut.mprj.u_uart_core.u_lineclk_buf.VGND =VSS;
+ force uut.mprj.u_uart_core.u_lineclk_buf.VNB = VSS;
+ end
+`endif
/**
diff --git a/verilog/dv/user_risc_boot/user_risc_boot_tb.v b/verilog/dv/user_risc_boot/user_risc_boot_tb.v
index 348ecd0..bb63a42 100644
--- a/verilog/dv/user_risc_boot/user_risc_boot_tb.v
+++ b/verilog/dv/user_risc_boot/user_risc_boot_tb.v
@@ -252,6 +252,68 @@
);
+`ifndef GL // Drive Power for Hold Fix Buf
+ // All standard cell need power hook-up for functionality work
+ initial begin
+ force u_top.u_spi_master.u_delay1_sdio0.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio0.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio0.VGND =VSS;
+ force u_top.u_spi_master.u_delay1_sdio0.VNB = VSS;
+ force u_top.u_spi_master.u_delay2_sdio0.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio0.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio0.VGND =VSS;
+ force u_top.u_spi_master.u_delay2_sdio0.VNB = VSS;
+ force u_top.u_spi_master.u_buf_sdio0.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio0.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio0.VGND =VSS;
+ force u_top.u_spi_master.u_buf_sdio0.VNB =VSS;
+
+ force u_top.u_spi_master.u_delay1_sdio1.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio1.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio1.VGND =VSS;
+ force u_top.u_spi_master.u_delay1_sdio1.VNB = VSS;
+ force u_top.u_spi_master.u_delay2_sdio1.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio1.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio1.VGND =VSS;
+ force u_top.u_spi_master.u_delay2_sdio1.VNB = VSS;
+ force u_top.u_spi_master.u_buf_sdio1.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio1.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio1.VGND =VSS;
+ force u_top.u_spi_master.u_buf_sdio1.VNB =VSS;
+
+ force u_top.u_spi_master.u_delay1_sdio2.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio2.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio2.VGND =VSS;
+ force u_top.u_spi_master.u_delay1_sdio2.VNB = VSS;
+ force u_top.u_spi_master.u_delay2_sdio2.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio2.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio2.VGND =VSS;
+ force u_top.u_spi_master.u_delay2_sdio2.VNB = VSS;
+ force u_top.u_spi_master.u_buf_sdio2.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio2.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio2.VGND =VSS;
+ force u_top.u_spi_master.u_buf_sdio2.VNB =VSS;
+
+ force u_top.u_spi_master.u_delay1_sdio3.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio3.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio3.VGND =VSS;
+ force u_top.u_spi_master.u_delay1_sdio3.VNB = VSS;
+ force u_top.u_spi_master.u_delay2_sdio3.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio3.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio3.VGND =VSS;
+ force u_top.u_spi_master.u_delay2_sdio3.VNB = VSS;
+ force u_top.u_spi_master.u_buf_sdio3.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio3.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio3.VGND =VSS;
+ force u_top.u_spi_master.u_buf_sdio3.VNB =VSS;
+
+ force u_top.u_uart_core.u_lineclk_buf.VPWR =USER_VDD1V8;
+ force u_top.u_uart_core.u_lineclk_buf.VPB =USER_VDD1V8;
+ force u_top.u_uart_core.u_lineclk_buf.VGND =VSS;
+ force u_top.u_uart_core.u_lineclk_buf.VNB = VSS;
+ end
+`endif
+
//------------------------------------------------------
// Integrate the Serial flash with qurd support to
// user core using the gpio pads
diff --git a/verilog/dv/user_spi/user_spi_tb.v b/verilog/dv/user_spi/user_spi_tb.v
index de9fe38..0489af7 100644
--- a/verilog/dv/user_spi/user_spi_tb.v
+++ b/verilog/dv/user_spi/user_spi_tb.v
@@ -386,6 +386,68 @@
);
+`ifndef GL // Drive Power for Hold Fix Buf
+ // All standard cell need power hook-up for functionality work
+ initial begin
+ force u_top.u_spi_master.u_delay1_sdio0.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio0.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio0.VGND =VSS;
+ force u_top.u_spi_master.u_delay1_sdio0.VNB = VSS;
+ force u_top.u_spi_master.u_delay2_sdio0.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio0.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio0.VGND =VSS;
+ force u_top.u_spi_master.u_delay2_sdio0.VNB = VSS;
+ force u_top.u_spi_master.u_buf_sdio0.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio0.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio0.VGND =VSS;
+ force u_top.u_spi_master.u_buf_sdio0.VNB =VSS;
+
+ force u_top.u_spi_master.u_delay1_sdio1.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio1.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio1.VGND =VSS;
+ force u_top.u_spi_master.u_delay1_sdio1.VNB = VSS;
+ force u_top.u_spi_master.u_delay2_sdio1.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio1.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio1.VGND =VSS;
+ force u_top.u_spi_master.u_delay2_sdio1.VNB = VSS;
+ force u_top.u_spi_master.u_buf_sdio1.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio1.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio1.VGND =VSS;
+ force u_top.u_spi_master.u_buf_sdio1.VNB =VSS;
+
+ force u_top.u_spi_master.u_delay1_sdio2.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio2.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio2.VGND =VSS;
+ force u_top.u_spi_master.u_delay1_sdio2.VNB = VSS;
+ force u_top.u_spi_master.u_delay2_sdio2.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio2.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio2.VGND =VSS;
+ force u_top.u_spi_master.u_delay2_sdio2.VNB = VSS;
+ force u_top.u_spi_master.u_buf_sdio2.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio2.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio2.VGND =VSS;
+ force u_top.u_spi_master.u_buf_sdio2.VNB =VSS;
+
+ force u_top.u_spi_master.u_delay1_sdio3.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio3.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio3.VGND =VSS;
+ force u_top.u_spi_master.u_delay1_sdio3.VNB = VSS;
+ force u_top.u_spi_master.u_delay2_sdio3.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio3.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio3.VGND =VSS;
+ force u_top.u_spi_master.u_delay2_sdio3.VNB = VSS;
+ force u_top.u_spi_master.u_buf_sdio3.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio3.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio3.VGND =VSS;
+ force u_top.u_spi_master.u_buf_sdio3.VNB =VSS;
+
+ force u_top.u_uart_core.u_lineclk_buf.VPWR =USER_VDD1V8;
+ force u_top.u_uart_core.u_lineclk_buf.VPB =USER_VDD1V8;
+ force u_top.u_uart_core.u_lineclk_buf.VGND =VSS;
+ force u_top.u_uart_core.u_lineclk_buf.VNB = VSS;
+ end
+`endif
+
//------------------------------------------------------
// Integrate the Serial flash with qurd support to
// user core using the gpio pads
diff --git a/verilog/dv/user_uart/uprj_netlists.v b/verilog/dv/user_uart/uprj_netlists.v
index ae6502e..e8f024b 100644
--- a/verilog/dv/user_uart/uprj_netlists.v
+++ b/verilog/dv/user_uart/uprj_netlists.v
@@ -15,11 +15,10 @@
// Include caravel global defines for the number of the user project IO pads
`include "defines.v"
-`define USE_POWER_PINS
-`define UNIT_DELAY #0.1
+ `define USE_POWER_PINS
+ `define UNIT_DELAY #0.1
`ifdef GL
-
`include "libs.ref/sky130_fd_sc_hd/verilog/primitives.v"
`include "libs.ref/sky130_fd_sc_hd/verilog/sky130_fd_sc_hd.v"
`include "libs.ref/sky130_fd_sc_hvl/verilog/primitives.v"
@@ -37,7 +36,6 @@
`include "clk_skew_adjust.v"
`else
-
`include "libs.ref/sky130_fd_sc_hd/verilog/primitives.v"
`include "libs.ref/sky130_fd_sc_hd/verilog/sky130_fd_sc_hd.v"
`include "libs.ref/sky130_fd_sc_hvl/verilog/primitives.v"
diff --git a/verilog/dv/user_uart/user_uart_tb.v b/verilog/dv/user_uart/user_uart_tb.v
index 4852c4b..9f3e22c 100644
--- a/verilog/dv/user_uart/user_uart_tb.v
+++ b/verilog/dv/user_uart/user_uart_tb.v
@@ -149,7 +149,7 @@
`ifdef WFDUMP
initial begin
$dumpfile("risc_boot.vcd");
- $dumpvars(2, user_uart_tb);
+ $dumpvars(3, user_uart_tb);
end
`endif
@@ -291,6 +291,67 @@
);
+`ifndef GL // Drive Power for Hold Fix Buf
+ // All standard cell need power hook-up for functionality work
+ initial begin
+ force u_top.u_spi_master.u_delay1_sdio0.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio0.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio0.VGND =VSS;
+ force u_top.u_spi_master.u_delay1_sdio0.VNB = VSS;
+ force u_top.u_spi_master.u_delay2_sdio0.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio0.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio0.VGND =VSS;
+ force u_top.u_spi_master.u_delay2_sdio0.VNB = VSS;
+ force u_top.u_spi_master.u_buf_sdio0.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio0.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio0.VGND =VSS;
+ force u_top.u_spi_master.u_buf_sdio0.VNB =VSS;
+
+ force u_top.u_spi_master.u_delay1_sdio1.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio1.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio1.VGND =VSS;
+ force u_top.u_spi_master.u_delay1_sdio1.VNB = VSS;
+ force u_top.u_spi_master.u_delay2_sdio1.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio1.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio1.VGND =VSS;
+ force u_top.u_spi_master.u_delay2_sdio1.VNB = VSS;
+ force u_top.u_spi_master.u_buf_sdio1.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio1.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio1.VGND =VSS;
+ force u_top.u_spi_master.u_buf_sdio1.VNB =VSS;
+
+ force u_top.u_spi_master.u_delay1_sdio2.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio2.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio2.VGND =VSS;
+ force u_top.u_spi_master.u_delay1_sdio2.VNB = VSS;
+ force u_top.u_spi_master.u_delay2_sdio2.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio2.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio2.VGND =VSS;
+ force u_top.u_spi_master.u_delay2_sdio2.VNB = VSS;
+ force u_top.u_spi_master.u_buf_sdio2.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio2.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio2.VGND =VSS;
+ force u_top.u_spi_master.u_buf_sdio2.VNB =VSS;
+
+ force u_top.u_spi_master.u_delay1_sdio3.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio3.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay1_sdio3.VGND =VSS;
+ force u_top.u_spi_master.u_delay1_sdio3.VNB = VSS;
+ force u_top.u_spi_master.u_delay2_sdio3.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio3.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_delay2_sdio3.VGND =VSS;
+ force u_top.u_spi_master.u_delay2_sdio3.VNB = VSS;
+ force u_top.u_spi_master.u_buf_sdio3.VPWR =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio3.VPB =USER_VDD1V8;
+ force u_top.u_spi_master.u_buf_sdio3.VGND =VSS;
+ force u_top.u_spi_master.u_buf_sdio3.VNB =VSS;
+
+ force u_top.u_uart_core.u_lineclk_buf.VPWR =USER_VDD1V8;
+ force u_top.u_uart_core.u_lineclk_buf.VPB =USER_VDD1V8;
+ force u_top.u_uart_core.u_lineclk_buf.VGND =VSS;
+ force u_top.u_uart_core.u_lineclk_buf.VNB = VSS;
+ end
+`endif
//------------------------------------------------------
// Integrate the Serial flash with qurd support to
// user core using the gpio pads
diff --git a/verilog/dv/wb_port/Makefile b/verilog/dv/wb_port/Makefile
index 19c32ee..d156539 100644
--- a/verilog/dv/wb_port/Makefile
+++ b/verilog/dv/wb_port/Makefile
@@ -25,6 +25,7 @@
## User Project Pointers
UPRJ_VERILOG_PATH ?= ../../../verilog
UPRJ_RTL_PATH = $(UPRJ_VERILOG_PATH)/rtl
+UPRJ_GL_PATH = $(UPRJ_VERILOG_PATH)/gl
UPRJ_BEHAVIOURAL_MODELS = ../
UPRJ_INCLUDE_PATH1 = $(UPRJ_RTL_PATH)/syntacore/scr1/src/includes
UPRJ_INCLUDE_PATH2 = $(UPRJ_RTL_PATH)/sdram_ctrl/src/defs
@@ -55,9 +56,9 @@
-I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) \
$< -o $@
else
- iverilog -DFUNCTIONAL -DSIM -DGL -I $(PDK_PATH) \
+ iverilog -g2005-sv -DFUNCTIONAL -DSIM -DGL -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \
- -I $(UPRJ_BEHAVIOURAL_MODELS) -I$(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_MODELS) -I$(UPRJ_GL_PATH) -I$(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
$< -o $@
endif
diff --git a/verilog/dv/wb_port/run_verilog b/verilog/dv/wb_port/run_verilog
new file mode 100644
index 0000000..c28480e
--- /dev/null
+++ b/verilog/dv/wb_port/run_verilog
@@ -0,0 +1,2 @@
+#iverilog -g2005-sv -DFUNCTIONAL -DSIM -DGL -I /home/dinesha/workarea/pdk/sky130A -I /home/dinesha/workarea/opencore/git/yifive_r0/caravel/verilog/dv/caravel -I /home/dinesha/workarea/opencore/git/yifive_r0/caravel/verilog/rtl -I /home/dinesha/workarea/opencore/git/yifive_r0/caravel/verilog -I ../ -I../../../verilog/rtl -I../../../verilog/gl -I ../../../verilog wb_port_tb.v -o wb_port.vvp
+iverilog -g2005-sv -DWFDUMP -DFUNCTIONAL -DSIM -DGL -I /home/dinesha/workarea/pdk/sky130A -I /home/dinesha/workarea/opencore/git/yifive_r0/caravel/verilog/dv/caravel -I /home/dinesha/workarea/opencore/git/yifive_r0/caravel/verilog/rtl -I /home/dinesha/workarea/opencore/git/yifive_r0/caravel/verilog -I ../ -I../../../verilog/rtl -I../../../verilog/gl -I ../../../verilog wb_port_tb.v -o wb_port.vvp
diff --git a/verilog/dv/wb_port/wb_port.c b/verilog/dv/wb_port/wb_port.c
index 684f275..9292946 100644
--- a/verilog/dv/wb_port/wb_port.c
+++ b/verilog/dv/wb_port/wb_port.c
@@ -123,18 +123,27 @@
if (reg_mprj_globl_reg6 != 0x11223344) bFail = 1;
+ if (bFail == 1) reg_mprj_datal = 0xAB610000;
if (reg_mprj_globl_reg7 != 0x22334455) bFail = 1;
+ if (bFail == 1) reg_mprj_datal = 0xAB620000;
if (reg_mprj_globl_reg8 != 0x33445566) bFail = 1;
+ if (bFail == 1) reg_mprj_datal = 0xAB630000;
if (reg_mprj_globl_reg9 != 0x44556677) bFail = 1;
+ if (bFail == 1) reg_mprj_datal = 0xAB640000;
if (reg_mprj_globl_reg10 != 0x55667788) bFail = 1;
+ if (bFail == 1) reg_mprj_datal = 0xAB650000;
if (reg_mprj_globl_reg11 != 0x66778899) bFail = 1;
+ if (bFail == 1) reg_mprj_datal = 0xAB660000;
if (reg_mprj_globl_reg12 != 0x778899AA) bFail = 1;
+ if (bFail == 1) reg_mprj_datal = 0xAB670000;
if (reg_mprj_globl_reg13 != 0x8899AABB) bFail = 1;
+ if (bFail == 1) reg_mprj_datal = 0xAB680000;
if (reg_mprj_globl_reg14 != 0x99AABBCC) bFail = 1;
+ if (bFail == 1) reg_mprj_datal = 0xAB690000;
if (reg_mprj_globl_reg15 != 0xAABBCCDD) bFail = 1;
if(bFail == 0) {
- reg_mprj_datal = 0xAB610000;
+ reg_mprj_datal = 0xAB6A0000;
} else {
reg_mprj_datal = 0xAB600000;
}
diff --git a/verilog/dv/wb_port/wb_port_tb.v b/verilog/dv/wb_port/wb_port_tb.v
index 2455069..1ea0baa 100644
--- a/verilog/dv/wb_port/wb_port_tb.v
+++ b/verilog/dv/wb_port/wb_port_tb.v
@@ -50,7 +50,10 @@
`ifdef WFDUMP
initial begin
$dumpfile("wb_port.vcd");
- $dumpvars(0, wb_port_tb.uut.mprj);
+ $dumpvars(1, wb_port_tb);
+ $dumpvars(2, wb_port_tb.uut);
+ //$dumpvars(1, wb_port_tb.uut.mprj);
+ $dumpvars(1, wb_port_tb.uut.mprj.u_wb_host);
end
`endif
@@ -76,7 +79,7 @@
initial begin
wait(checkbits == 16'h AB60);
$display("Monitor: MPRJ-Logic WB Started");
- wait(checkbits == 16'h AB61);
+ wait(checkbits == 16'h AB6A);
$display ("##########################################################");
`ifdef GL
$display("Monitor: Mega-Project WB (GL) Passed");
@@ -162,5 +165,67 @@
.io3() // not used
);
+`ifndef GL // Drive Power for Hold Fix Buf
+ // All standard cell need power hook-up for functionality work
+ initial begin
+ force uut.mprj.u_spi_master.u_delay1_sdio0.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio0.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio0.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay1_sdio0.VNB = VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio0.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio0.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio0.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio0.VNB = VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio0.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio0.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio0.VGND =VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio0.VNB =VSS;
+
+
+ force uut.mprj.u_spi_master.u_delay1_sdio1.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio1.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio1.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay1_sdio1.VNB = VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio1.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio1.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio1.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio1.VNB = VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio1.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio1.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio1.VGND =VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio1.VNB =VSS;
+
+ force uut.mprj.u_spi_master.u_delay1_sdio2.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio2.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio2.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay1_sdio2.VNB = VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio2.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio2.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio2.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio2.VNB = VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio2.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio2.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio2.VGND =VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio2.VNB =VSS;
+
+ force uut.mprj.u_spi_master.u_delay1_sdio3.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio3.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay1_sdio3.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay1_sdio3.VNB = VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio3.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio3.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_delay2_sdio3.VGND =VSS;
+ force uut.mprj.u_spi_master.u_delay2_sdio3.VNB = VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio3.VPWR =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio3.VPB =USER_VDD1V8;
+ force uut.mprj.u_spi_master.u_buf_sdio3.VGND =VSS;
+ force uut.mprj.u_spi_master.u_buf_sdio3.VNB =VSS;
+
+ force uut.mprj.u_uart_core.u_lineclk_buf.VPWR =USER_VDD1V8;
+ force uut.mprj.u_uart_core.u_lineclk_buf.VPB =USER_VDD1V8;
+ force uut.mprj.u_uart_core.u_lineclk_buf.VGND =VSS;
+ force uut.mprj.u_uart_core.u_lineclk_buf.VNB = VSS;
+ end
+`endif
endmodule
`default_nettype wire
diff --git a/verilog/rtl/clk_skew_adjust/src/clk_skew_adjust.gv b/verilog/rtl/clk_skew_adjust/src/clk_skew_adjust.gv
index 038ef52..b826235 100644
--- a/verilog/rtl/clk_skew_adjust/src/clk_skew_adjust.gv
+++ b/verilog/rtl/clk_skew_adjust/src/clk_skew_adjust.gv
@@ -129,21 +129,21 @@
wire d30;
- sky130_fd_sc_hd__clkbuf_1 clkbuf_1 (.A(clk_in), .X(clk_d1));
- sky130_fd_sc_hd__clkbuf_1 clkbuf_2 (.A(clk_d1), .X(clk_d2));
- sky130_fd_sc_hd__clkbuf_1 clkbuf_3 (.A(clk_d2), .X(clk_d3));
- sky130_fd_sc_hd__clkbuf_1 clkbuf_4 (.A(clk_d3), .X(clk_d4));
- sky130_fd_sc_hd__clkbuf_1 clkbuf_5 (.A(clk_d4), .X(clk_d5));
- sky130_fd_sc_hd__clkbuf_1 clkbuf_6 (.A(clk_d5), .X(clk_d6));
- sky130_fd_sc_hd__clkbuf_1 clkbuf_7 (.A(clk_d6), .X(clk_d7));
- sky130_fd_sc_hd__clkbuf_1 clkbuf_8 (.A(clk_d7), .X(clk_d8));
- sky130_fd_sc_hd__clkbuf_1 clkbuf_9 (.A(clk_d8), .X(clk_d9));
- sky130_fd_sc_hd__clkbuf_1 clkbuf_10 (.A(clk_d9), .X(clk_d10));
- sky130_fd_sc_hd__clkbuf_1 clkbuf_11 (.A(clk_d10), .X(clk_d11));
- sky130_fd_sc_hd__clkbuf_1 clkbuf_12 (.A(clk_d11), .X(clk_d12));
- sky130_fd_sc_hd__clkbuf_1 clkbuf_13 (.A(clk_d12), .X(clk_d13));
- sky130_fd_sc_hd__clkbuf_1 clkbuf_14 (.A(clk_d13), .X(clk_d14));
- sky130_fd_sc_hd__clkbuf_1 clkbuf_15 (.A(clk_d14), .X(clk_d15));
+ sky130_fd_sc_hd__clkdlybuf4s15_2 clkbuf_1 (.A(clk_in), .X(clk_d1));
+ sky130_fd_sc_hd__clkdlybuf4s15_2 clkbuf_2 (.A(clk_d1), .X(clk_d2));
+ sky130_fd_sc_hd__clkdlybuf4s15_2 clkbuf_3 (.A(clk_d2), .X(clk_d3));
+ sky130_fd_sc_hd__clkdlybuf4s15_2 clkbuf_4 (.A(clk_d3), .X(clk_d4));
+ sky130_fd_sc_hd__clkdlybuf4s15_2 clkbuf_5 (.A(clk_d4), .X(clk_d5));
+ sky130_fd_sc_hd__clkdlybuf4s15_2 clkbuf_6 (.A(clk_d5), .X(clk_d6));
+ sky130_fd_sc_hd__clkdlybuf4s15_2 clkbuf_7 (.A(clk_d6), .X(clk_d7));
+ sky130_fd_sc_hd__clkdlybuf4s15_2 clkbuf_8 (.A(clk_d7), .X(clk_d8));
+ sky130_fd_sc_hd__clkdlybuf4s15_2 clkbuf_9 (.A(clk_d8), .X(clk_d9));
+ sky130_fd_sc_hd__clkdlybuf4s15_2 clkbuf_10 (.A(clk_d9), .X(clk_d10));
+ sky130_fd_sc_hd__clkdlybuf4s15_2 clkbuf_11 (.A(clk_d10), .X(clk_d11));
+ sky130_fd_sc_hd__clkdlybuf4s15_2 clkbuf_12 (.A(clk_d11), .X(clk_d12));
+ sky130_fd_sc_hd__clkdlybuf4s15_2 clkbuf_13 (.A(clk_d12), .X(clk_d13));
+ sky130_fd_sc_hd__clkdlybuf4s15_2 clkbuf_14 (.A(clk_d13), .X(clk_d14));
+ sky130_fd_sc_hd__clkdlybuf4s15_2 clkbuf_15 (.A(clk_d14), .X(clk_d15));
// Tap point selection
@@ -186,7 +186,7 @@
sky130_fd_sc_hd__mux2_1 u_mux_level_21 ( .X (d21) , .A0 (d12), .A1(d13), .S(sel[2]));
// fourth level mux - 1
- sky130_fd_sc_hd__mux2_1 u_mux_level_30 ( .X (d30) , .A0 (d20), .A1(d21), .S(sel[3]));
+ sky130_fd_sc_hd__mux2_4 u_mux_level_30 ( .X (d30) , .A0 (d20), .A1(d21), .S(sel[3]));
assign clk_out = d30;
diff --git a/verilog/rtl/digital_core/src/digital_core.sv b/verilog/rtl/digital_core/src/digital_core.sv
index 4b8a056..2eb4b27 100644
--- a/verilog/rtl/digital_core/src/digital_core.sv
+++ b/verilog/rtl/digital_core/src/digital_core.sv
@@ -83,6 +83,11 @@
//// m0 - External HOST ////
//// m1 - RISC IMEM ////
//// m2 - RISC DMEM ////
+//// 0.8 - 6th July 2021, Dinesh A ////
+//// For Better SDRAM Interface timing we have taping ////
+//// sdram_clock goint to io_out[29] directly from ////
+//// global register block, this help in better SDRAM ////
+//// interface timing control ////
//// ////
//////////////////////////////////////////////////////////////////////
//// ////
@@ -136,6 +141,11 @@
output wire [WB_WIDTH-1:0] wbs_dat_o , // data input
output wire wbs_ack_o , // acknowlegement
+ // Analog (direct connection to GPIO pad---use with caution)
+ // Note that analog I/O is not available on the 7 lowest-numbered
+ // GPIO pads, and so the analog_io indexing is offset from the
+ // GPIO indexing by 7 (also upper 2 GPIOs do not have analog_io).
+ inout [`MPRJ_IO_PADS-10:0] analog_io,
// Logic Analyzer Signals
input wire [127:0] la_data_in ,
@@ -775,7 +785,7 @@
.vccd1 (vccd1 ),// User area 1 1.8V supply
.vssd1 (vssd1 ),// User area 1 digital ground
`endif
- .clk_in (io_in[29] ),
+ .clk_in (sdram_clk ),
.sel (cfg_cska_sd_ci ),
.clk_out (io_in_29_ )
);
diff --git a/verilog/rtl/sdram_ctrl/src/core/sdrc_core.v b/verilog/rtl/sdram_ctrl/src/core/sdrc_core.v
index bf1cd8b..6c06615 100755
--- a/verilog/rtl/sdram_ctrl/src/core/sdrc_core.v
+++ b/verilog/rtl/sdram_ctrl/src/core/sdrc_core.v
@@ -100,6 +100,7 @@
reset_n,
sdr_width,
cfg_colbits,
+ debug,
/* Request from app */
app_req, // Transfer Request
@@ -163,7 +164,7 @@
input reset_n ; // Reset Signal
input [1:0] sdr_width ; // 2'b00 - 32 Bit SDR, 2'b01 - 16 Bit SDR, 2'b1x - 8 Bit
input [1:0] cfg_colbits ; // 2'b00 - 8 Bit column address, 2'b01 - 9 Bit, 10 - 10 bit, 11 - 11Bits
-
+output [21:0] debug ;
//------------------------------------------------
// Request from app
@@ -294,6 +295,10 @@
assign sdr_dout = sdr_dout_int ;
+assign debug = {r2x_idle,r2b_req,r2b_start,r2b_last,b2r_ack,b2r_arb_ok,r2b_write,
+ b2x_idle,b2x_req,b2x_start,b2x_wrap,x2b_ack,b2x_tras_ok,x2b_refresh,x2b_pre_ok,x2b_act_ok,
+ x2b_rdok,x2b_wrok,x2a_rdstart,x2a_wrstart,x2a_rdlast,x2a_wrlast};
+
// To meet the timing at read path, read data is registered w.r.t pad_sdram_clock and register back to sdram_clk
// assumption, pad_sdram_clk is synhronous and delayed clock of sdram_clk.
// register w.r.t pad sdram clk
diff --git a/verilog/rtl/sdram_ctrl/src/top/sdrc_top.v b/verilog/rtl/sdram_ctrl/src/top/sdrc_top.v
index 6aba2a6..c845d02 100755
--- a/verilog/rtl/sdram_ctrl/src/top/sdrc_top.v
+++ b/verilog/rtl/sdram_ctrl/src/top/sdrc_top.v
@@ -57,6 +57,8 @@
Unused port wb_cti_i removed
0.5 - 29th June 2021
Wishbone Stagging FF added to break timing path
+ 0.6 - 6th July 2021, Dinesh A
+ 32 bit debug port added
Copyright (C) 2000 Authors and OPENCORES.ORG
@@ -90,6 +92,8 @@
(
cfg_sdr_width ,
cfg_colbits ,
+
+ sdram_debug ,
// WB bus
wb_rst_n ,
@@ -149,6 +153,7 @@
input [1:0] cfg_sdr_width ; // 2'b00 - 32 Bit SDR, 2'b01 - 16 Bit SDR, 2'b1x - 8 Bit
input [1:0] cfg_colbits ; // 2'b00 - 8 Bit column address,
// 2'b01 - 9 Bit, 10 - 10 bit, 11 - 11Bits
+output [31:0] sdram_debug ; // SDRAM debug signals
//--------------------------------------
// Wish Bone Interface
@@ -265,6 +270,11 @@
// sdram pad clock is routed back through pad
// SDRAM Clock from Pad, used for registering Read Data
//wire #(1.0) sdram_pad_clk = sdram_clk;
+//
+wire [21:0] core_debug;
+assign sdram_debug = {sdr_init_done,wb_stag_stb_i,wb_stag_we_i,wb_stag_ack_o,
+ app_req,app_req_wr_n,app_req_ack,app_busy_n,app_wr_next_req, app_rd_valid,
+ core_debug[21:0]};
/************** Ends Here **************************/
@@ -340,6 +350,7 @@
.reset_n (sdram_resetn ) ,
.sdr_width (cfg_sdr_width ) ,
.cfg_colbits (cfg_colbits ) ,
+ .debug (core_debug ) ,
/* Request from app */
.app_req (app_req ) ,// Transfer Request
diff --git a/verilog/rtl/spi_master/src/spim_top.sv b/verilog/rtl/spi_master/src/spim_top.sv
index fbb25b8..1d153b5 100644
--- a/verilog/rtl/spi_master/src/spim_top.sv
+++ b/verilog/rtl/spi_master/src/spim_top.sv
@@ -51,6 +51,9 @@
//// V.1 - June 25, 2021 ////
//// Pad logic is brought inside the block to avoid ////
//// logic at digital core level for caravel project ////
+//// V.2 - July 6, 2021 ////
+//// Added Hold fix cell for SPI data out signal to ////
+//// met interface hold ////
//// ////
//////////////////////////////////////////////////////////////////////
//// ////
@@ -182,7 +185,7 @@
logic [3:0] ctrl_state ;
- assign spi_debug = {3'h0,
+ assign spi_debug = {m0_res_fifo_flush,m1_res_fifo_flush,spi_init_done,
m0_cmd_fifo_full,m0_cmd_fifo_empty,m0_res_fifo_full,m0_res_fifo_empty,
m1_cmd_fifo_full,m1_cmd_fifo_empty,m1_res_fifo_full,m1_res_fifo_empty,
ctrl_state[3:0], m0_state[3:0],m1_state[3:0],spi_ctrl_status};
@@ -207,6 +210,15 @@
logic spi_sdi3;
logic spi_en_tx;
logic spi_init_done;
+logic spi_sdo0_out;
+logic spi_sdo1_out;
+logic spi_sdo2_out;
+logic spi_sdo3_out;
+
+logic spi_sdo0_dl;
+logic spi_sdo1_dl;
+logic spi_sdo2_dl;
+logic spi_sdo3_dl;
assign spi_sdi0 = io_in[2];
@@ -215,12 +227,30 @@
assign spi_sdi3 = io_in[5];
assign io_out[0] = spi_clk;
-assign io_out[1] = spi_csn0;
-assign io_out[2] = spi_sdo0;
-assign io_out[3] = spi_sdo1;
-assign io_out[4] = spi_sdo2;
-assign io_out[5] = spi_sdo3;
-
+assign io_out[1] = spi_csn0;// No hold fix for CS#, as it asserted much eariler than SPI clock
+assign io_out[2] = spi_sdo0_out;
+assign io_out[3] = spi_sdo1_out;
+assign io_out[4] = spi_sdo2_out;
+assign io_out[5] = spi_sdo3_out;
+
+// ADDing Delay cells for Interface hold fix
+sky130_fd_sc_hd__dlygate4sd3_1 u_delay1_sdio0 (.X(spi_sdo0_d1),.A(spi_sdo0));
+sky130_fd_sc_hd__dlygate4sd3_1 u_delay2_sdio0 (.X(spi_sdo0_d2),.A(spi_sdo0_d1));
+sky130_fd_sc_hd__clkbuf_16 u_buf_sdio0 (.X(spi_sdo0_out),.A(spi_sdo0_d2));
+
+sky130_fd_sc_hd__dlygate4sd3_1 u_delay1_sdio1 (.X(spi_sdo1_d1),.A(spi_sdo1));
+sky130_fd_sc_hd__dlygate4sd3_1 u_delay2_sdio1 (.X(spi_sdo1_d2),.A(spi_sdo1_d1));
+sky130_fd_sc_hd__clkbuf_16 u_buf_sdio1 (.X(spi_sdo1_out),.A(spi_sdo1_d2));
+
+sky130_fd_sc_hd__dlygate4sd3_1 u_delay1_sdio2 (.X(spi_sdo2_d1),.A(spi_sdo2));
+sky130_fd_sc_hd__dlygate4sd3_1 u_delay2_sdio2 (.X(spi_sdo2_d2),.A(spi_sdo2_d1));
+sky130_fd_sc_hd__clkbuf_16 u_buf_sdio2 (.X(spi_sdo2_out),.A(spi_sdo2_d2));
+
+sky130_fd_sc_hd__dlygate4sd3_1 u_delay1_sdio3 (.X(spi_sdo3_d1),.A(spi_sdo3));
+sky130_fd_sc_hd__dlygate4sd3_1 u_delay2_sdio3 (.X(spi_sdo3_d2),.A(spi_sdo3_d1));
+sky130_fd_sc_hd__clkbuf_16 u_buf_sdio3 (.X(spi_sdo3_out),.A(spi_sdo3_d2));
+
+
assign io_oeb[0] = 1'b0; // spi_clk
assign io_oeb[1] = 1'b0; // spi_csn
assign io_oeb[2] = !spi_en_tx; // spi_dio0
diff --git a/verilog/rtl/syntacore/scr1/src/core/pipeline/scr1_pipe_top.sv b/verilog/rtl/syntacore/scr1/src/core/pipeline/scr1_pipe_top.sv
index 3779eb5..634069e 100644
--- a/verilog/rtl/syntacore/scr1/src/core/pipeline/scr1_pipe_top.sv
+++ b/verilog/rtl/syntacore/scr1/src/core/pipeline/scr1_pipe_top.sv
@@ -47,6 +47,7 @@
module scr1_pipe_top (
// Common
input logic pipe_rst_n, // Pipe reset
+ output logic [48:0] pipe_debug,
`ifdef SCR1_DBG_EN
input logic pipe2hdu_rdc_qlfy_i, // Pipe RDC qualifier
input logic dbg_rst_n, // Debug reset
@@ -289,6 +290,10 @@
logic pipe2clkctl_wake_req_o;
`endif // SCR1_CLKCTRL_EN
+
+assign pipe_debug = {curr_pc[31:0],new_pc_req,stop_fetch, exu_exc_req,brkpt,exu_init_pc,wfi_run2halt,instret,
+ ifu2idu_vd,idu2ifu_rdy,idu2exu_req,exu2idu_rdy,exu2mprf_w_req,exu2csr_r_req,csr2exu_rw_exc,
+ exu2csr_mret_update,csr2exu_irq,csr2exu_mstatus_mie_up};
//-------------------------------------------------------------------------------
// Pipeline logic
//-------------------------------------------------------------------------------
diff --git a/verilog/rtl/syntacore/scr1/src/core/scr1_core_top.sv b/verilog/rtl/syntacore/scr1/src/core/scr1_core_top.sv
index 6df5558..92bbb10 100644
--- a/verilog/rtl/syntacore/scr1/src/core/scr1_core_top.sv
+++ b/verilog/rtl/syntacore/scr1/src/core/scr1_core_top.sv
@@ -43,6 +43,7 @@
input logic clk, // Core clock
output logic core_rst_n_o, // Core reset
output logic core_rdc_qlfy_o, // Core RDC qualifier
+ output logic [48:0] core_debug ,
`ifdef SCR1_DBG_EN
output logic sys_rst_n_o, // System reset
output logic sys_rdc_qlfy_o, // System RDC qualifier
@@ -290,6 +291,7 @@
scr1_pipe_top i_pipe_top (
// Control
.pipe_rst_n (core_rst_n ),
+ .pipe_debug (core_debug ),
`ifdef SCR1_DBG_EN
.pipe2hdu_rdc_qlfy_i (core2hdu_rdc_qlfy ),
.dbg_rst_n (hdu_rst_n ),
diff --git a/verilog/rtl/syntacore/scr1/src/top/scr1_top_wb.sv b/verilog/rtl/syntacore/scr1/src/top/scr1_top_wb.sv
index ccb49e8..bf6affc 100644
--- a/verilog/rtl/syntacore/scr1/src/top/scr1_top_wb.sv
+++ b/verilog/rtl/syntacore/scr1/src/top/scr1_top_wb.sv
@@ -38,6 +38,8 @@
//// v1: June 17, 2021, Dinesh A ////
//// core and wishbone clock domain are seperated ////
//// Async fifo added in imem and dmem path ////
+//// v2: July 7, 2021, Dinesh A ////
+//// 64bit debug signal added ////
//// ////
//////////////////////////////////////////////////////////////////////
//// ////
@@ -92,6 +94,7 @@
// input logic test_rst_n, // Test mode's reset - unused
input logic core_clk, // Core clock
input logic rtc_clk, // Real-time clock
+ output logic [63:0] riscv_debug,
`ifdef SCR1_DBG_EN
output logic sys_rst_n_o, // External System Reset output
// (for the processor cluster's components or
@@ -242,6 +245,11 @@
// --------------------------------------------------------------------------------
assign test_mode = 1'b0;
assign test_rst_n = 1'b0;
+
+logic [48:0] core_debug;
+assign riscv_debug = {core_imem_req,core_imem_req,core_imem_cmd,core_imem_resp[1:0],
+ core_dmem_req_ack,core_dmem_req,core_dmem_cmd,core_dmem_resp[1:0],
+ wb_imem_req,wb_imem_req,wb_imem_cmd,wb_imem_resp[1:0], core_debug };
//-------------------------------------------------------------------------------
// Reset logic
//-------------------------------------------------------------------------------
@@ -304,6 +312,7 @@
.clk (core_clk ),
.core_rst_n_o (core_rst_n_local ),
.core_rdc_qlfy_o ( ),
+ .core_debug (core_debug ),
`ifdef SCR1_DBG_EN
.sys_rst_n_o (sys_rst_n_o ),
.sys_rdc_qlfy_o (sys_rdc_qlfy_o ),
diff --git a/verilog/rtl/uart/src/uart_core.sv b/verilog/rtl/uart/src/uart_core.sv
index 1141b3d..79c0b47 100644
--- a/verilog/rtl/uart/src/uart_core.sv
+++ b/verilog/rtl/uart/src/uart_core.sv
@@ -205,11 +205,13 @@
// cfg_baud_16x = 0xA0 (160)
//###############################################################
-wire line_clk_16x;
+wire line_clk_16x_in;
+
+sky130_fd_sc_hd__clkbuf_16 u_lineclk_buf (.A(line_clk_16x_in), .X(line_clk_16x));
clk_ctl #(11) u_clk_ctl (
// Outputs
- .clk_o (line_clk_16x),
+ .clk_o (line_clk_16x_in),
// Inputs
.mclk (app_clk),
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v
index 1b2d6b2..65f936c 100644
--- a/verilog/rtl/user_project_wrapper.v
+++ b/verilog/rtl/user_project_wrapper.v
@@ -83,6 +83,11 @@
//// m0 - External HOST ////
//// m1 - RISC IMEM ////
//// m2 - RISC DMEM ////
+//// 0.8 - 6th July 2021, Dinesh A ////
+//// For Better SDRAM Interface timing we have taping ////
+//// sdram_clock goint to io_out[29] directly from ////
+//// global register block, this help in better SDRAM ////
+//// interface timing control ////
//// ////
//////////////////////////////////////////////////////////////////////
//// ////
@@ -315,7 +320,9 @@
wire [11: 0] cfg_sdr_rfsh ;
wire [2 : 0] cfg_sdr_rfmax ;
-
+wire [31:0] spi_debug ;
+wire [31:0] sdram_debug ;
+wire [63:0] riscv_debug ;
@@ -339,6 +346,9 @@
assign cfg_cska_sd_ci = cfg_clk_ctrl2[7:4]; // SDRAM clock in control
assign cfg_cska_sp_co = cfg_clk_ctrl2[11:8];// SPI clock out control
+//assign la_data_out = {riscv_debug,spi_debug,sdram_debug};
+assign la_data_out[127:0] = {sdram_debug,spi_debug,riscv_debug};
+
wb_host u_wb_host(
@@ -370,12 +380,8 @@
.cfg_glb_ctrl (cfg_glb_ctrl ),
.cfg_clk_ctrl1 (cfg_clk_ctrl1 ),
- .cfg_clk_ctrl2 (cfg_clk_ctrl2 ),
+ .cfg_clk_ctrl2 (cfg_clk_ctrl2 )
- // Logic Analyzer Signals
- .la_data_in (la_data_in ),
- .la_data_out (la_data_out ),
- .la_oenb (la_oenb )
);
@@ -389,6 +395,7 @@
.pwrup_rst_n (wbd_int_rst_n ),
.rst_n (wbd_int_rst_n ),
.cpu_rst_n (cpu_rst_n ),
+ .riscv_debug (riscv_debug ),
// Clock
.core_clk (cpu_clk ),
@@ -476,6 +483,7 @@
u_sdram_ctrl (
.cfg_sdr_width (cfg_sdr_width ),
.cfg_colbits (cfg_colbits ),
+ .sdram_debug (sdram_debug ),
// WB bus
.wb_rst_n (wbd_int_rst_n ),
@@ -780,7 +788,7 @@
.vccd1 (vccd1 ),// User area 1 1.8V supply
.vssd1 (vssd1 ),// User area 1 digital ground
`endif
- .clk_in (io_in[29] ),
+ .clk_in (sdram_clk ),
.sel (cfg_cska_sd_ci ),
.clk_out (io_in_29_ )
);
diff --git a/verilog/rtl/wb_host/src/wb_host.sv b/verilog/rtl/wb_host/src/wb_host.sv
index 8032f11..8f9a6dd 100644
--- a/verilog/rtl/wb_host/src/wb_host.sv
+++ b/verilog/rtl/wb_host/src/wb_host.sv
@@ -98,12 +98,8 @@
output logic [7:0] cfg_glb_ctrl ,
output logic [31:0] cfg_clk_ctrl1 ,
- output logic [31:0] cfg_clk_ctrl2 ,
+ output logic [31:0] cfg_clk_ctrl2
- // Logic Analyzer Signals
- input logic [127:0] la_data_in ,
- output logic [127:0] la_data_out ,
- input logic [127:0] la_oenb
);
@@ -138,6 +134,7 @@
logic [2:0] cfg_wb_clk_ctr;
+
assign wbm_rst_n = !wbm_rst_i;
assign wbs_rst_n = !wbm_rst_i;