Clock Skew adjust network added + Inside SDRAM WB Stagging FF added
diff --git a/openlane/clk_skew_adjust/config.tcl b/openlane/clk_skew_adjust/config.tcl
new file mode 100644
index 0000000..0c507cc
--- /dev/null
+++ b/openlane/clk_skew_adjust/config.tcl
@@ -0,0 +1,89 @@
+# 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
+
+# Base Configurations. Don't Touch
+# section begin
+set script_dir [file dirname [file normalize [info script]]]
+
+set ::env(DESIGN_NAME) clk_skew_adjust
+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) 0
+set ::env(FP_PDN_CORE_RING) "0"
+set ::env(SYNTH_READ_BLACKBOX_LIB) "1"
+
+
+## Source Verilog Files
+set ::env(VERILOG_FILES) "\
+ $script_dir/../../verilog/rtl/clk_skew_adjust/src/clk_skew_adjust.gv"
+
+## Clock configurations
+set ::env(CLOCK_PORT) "clk_in"
+
+set ::env(CLOCK_PERIOD) "10"
+
+## Internal Macros
+### 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"
+set ::env(PL_TARGET_DENSITY) 0.85
+set ::env(FP_CORE_UTIL) "60"
+
+
+
+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}]
+
+# If you're going to use multiple power domains, then keep this disabled.
+set ::env(RUN_CVC) 0
+
+# The following is because there are no std cells in the example wrapper project.
+set ::env(SYNTH_TOP_LEVEL) 1
+
+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
+
+# No Synthesis and CTS
+set ::env(RUN_SIMPLE_CTS) 0
+set ::env(SYNTH_BUFFERING) 0
+set ::env(SYNTH_SIZING) 0
+set ::env(CLOCK_TREE_SYNTH) 0
+set ::env(PL_OPENPHYSYN_OPTIMIZATIONS) 0
+set ::env(FILL_INSERTION) 1
+set ::env(RUN_SIMPLE_CTS) 0
+set ::env(LVS_CONNECT_BY_LABEL) 1
+set ::env(CELL_PAD) 0
+
+
+
+
+set ::env(PL_ROUTABILITY_DRIVEN) 1
+set ::env(FP_IO_VEXTEND) 4
+set ::env(FP_IO_HEXTEND) 4
+set ::env(GLB_RT_MAXLAYER) 4
+set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 10
+set ::env(DIODE_INSERTION_STRATEGY) 4
diff --git a/openlane/clk_skew_adjust/pin_order.cfg b/openlane/clk_skew_adjust/pin_order.cfg
new file mode 100644
index 0000000..73fa0a0
--- /dev/null
+++ b/openlane/clk_skew_adjust/pin_order.cfg
@@ -0,0 +1,13 @@
+#BUS_SORT
+
+#MANUAL_PLACE
+
+#W
+clk_out 0000 0
+
+#E
+clk_in 0000 0
+sel\[3\] 0000 10
+sel\[2\] 0000 11
+sel\[1\] 0000 12
+sel\[0\] 0000 13
diff --git a/openlane/glbl_cfg/pin_order.cfg b/openlane/glbl_cfg/pin_order.cfg
index 5867718..022eda4 100644
--- a/openlane/glbl_cfg/pin_order.cfg
+++ b/openlane/glbl_cfg/pin_order.cfg
@@ -4,59 +4,11 @@
#E
cpu_clk 0000 0
rtc_clk
-irq_lines\[15\]
-irq_lines\[14\]
-irq_lines\[13\]
-irq_lines\[12\]
-irq_lines\[11\]
-irq_lines\[10\]
-irq_lines\[9\]
-irq_lines\[8\]
-irq_lines\[7\]
-irq_lines\[6\]
-irq_lines\[5\]
-irq_lines\[4\]
-irq_lines\[3\]
-irq_lines\[2\]
-irq_lines\[1\]
-irq_lines\[0\]
-soft_irq
-fuse_mhartid\[31\]
-fuse_mhartid\[30\]
-fuse_mhartid\[29\]
-fuse_mhartid\[28\]
-fuse_mhartid\[27\]
-fuse_mhartid\[26\]
-fuse_mhartid\[25\]
-fuse_mhartid\[24\]
-fuse_mhartid\[23\]
-fuse_mhartid\[22\]
-fuse_mhartid\[21\]
-fuse_mhartid\[20\]
-fuse_mhartid\[19\]
-fuse_mhartid\[18\]
-fuse_mhartid\[17\]
-fuse_mhartid\[16\]
-fuse_mhartid\[15\]
-fuse_mhartid\[14\]
-fuse_mhartid\[13\]
-fuse_mhartid\[12\]
-fuse_mhartid\[11\]
-fuse_mhartid\[10\]
-fuse_mhartid\[9\]
-fuse_mhartid\[8\]
-fuse_mhartid\[7\]
-fuse_mhartid\[6\]
-fuse_mhartid\[5\]
-fuse_mhartid\[4\]
-fuse_mhartid\[3\]
-fuse_mhartid\[2\]
-fuse_mhartid\[1\]
-fuse_mhartid\[0\]
#N
mclk 0000 0
reset_n
+user_clock1
user_clock2
user_irq\[2\]
user_irq\[1\]
@@ -237,3 +189,55 @@
reg_rdata\[1\]
reg_rdata\[0\]
reg_ack
+
+
+irq_lines\[15\] 200 0 2
+irq_lines\[14\]
+irq_lines\[13\]
+irq_lines\[12\]
+irq_lines\[11\]
+irq_lines\[10\]
+irq_lines\[9\]
+irq_lines\[8\]
+irq_lines\[7\]
+irq_lines\[6\]
+irq_lines\[5\]
+irq_lines\[4\]
+irq_lines\[3\]
+irq_lines\[2\]
+irq_lines\[1\]
+irq_lines\[0\]
+soft_irq
+fuse_mhartid\[31\]
+fuse_mhartid\[30\]
+fuse_mhartid\[29\]
+fuse_mhartid\[28\]
+fuse_mhartid\[27\]
+fuse_mhartid\[26\]
+fuse_mhartid\[25\]
+fuse_mhartid\[24\]
+fuse_mhartid\[23\]
+fuse_mhartid\[22\]
+fuse_mhartid\[21\]
+fuse_mhartid\[20\]
+fuse_mhartid\[19\]
+fuse_mhartid\[18\]
+fuse_mhartid\[17\]
+fuse_mhartid\[16\]
+fuse_mhartid\[15\]
+fuse_mhartid\[14\]
+fuse_mhartid\[13\]
+fuse_mhartid\[12\]
+fuse_mhartid\[11\]
+fuse_mhartid\[10\]
+fuse_mhartid\[9\]
+fuse_mhartid\[8\]
+fuse_mhartid\[7\]
+fuse_mhartid\[6\]
+fuse_mhartid\[5\]
+fuse_mhartid\[4\]
+fuse_mhartid\[3\]
+fuse_mhartid\[2\]
+fuse_mhartid\[1\]
+fuse_mhartid\[0\]
+
diff --git a/openlane/sdram/config.tcl b/openlane/sdram/config.tcl
index b35501d..230d1e6 100755
--- a/openlane/sdram/config.tcl
+++ b/openlane/sdram/config.tcl
@@ -39,6 +39,7 @@
$script_dir/../../verilog/rtl/sdram_ctrl/src/top/sdrc_top.v \
$script_dir/../../verilog/rtl/sdram_ctrl/src/wb2sdrc/wb2sdrc.v \
$script_dir/../../verilog/rtl/lib/async_fifo.sv \
+ $script_dir/../../verilog/rtl/lib/wb_stagging.sv \
$script_dir/../../verilog/rtl/sdram_ctrl/src/core/sdrc_core.v \
$script_dir/../../verilog/rtl/sdram_ctrl/src/core/sdrc_bank_ctl.v \
$script_dir/../../verilog/rtl/sdram_ctrl/src/core/sdrc_bank_fsm.v \
diff --git a/openlane/syntacore/config.tcl b/openlane/syntacore/config.tcl
index c23dcc5..ad5d9bb 100755
--- a/openlane/syntacore/config.tcl
+++ b/openlane/syntacore/config.tcl
@@ -101,3 +101,5 @@
set ::env(GLB_RT_MAXLAYER) 5
set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 10
+#set ::env(LVS_CONNECT_BY_LABEL) 1
+
diff --git a/openlane/syntacore/pin_order.cfg b/openlane/syntacore/pin_order.cfg
index 5f52899..fb94b98 100644
--- a/openlane/syntacore/pin_order.cfg
+++ b/openlane/syntacore/pin_order.cfg
@@ -3,272 +3,272 @@
#MANUAL_PLACE
#E
core_clk 0000 0
-rtc_clk 0000 1
-cpu_rst_n 0000 2
-irq_lines\[15\] 0000 3
-irq_lines\[14\] 0000 4
-irq_lines\[13\] 0000 5
-irq_lines\[12\] 0000 6
-irq_lines\[11\] 0000 7
-irq_lines\[10\] 0000 8
-irq_lines\[9\] 0000 9
-irq_lines\[8\] 0000 10
-irq_lines\[7\] 0000 11
-irq_lines\[6\] 0000 12
-irq_lines\[5\] 0000 13
-irq_lines\[4\] 0000 14
-irq_lines\[3\] 0000 15
-irq_lines\[2\] 0000 16
-irq_lines\[1\] 0000 17
-irq_lines\[0\] 0000 18
-soft_irq 0000 19
-fuse_mhartid\[31\] 0000 20
-fuse_mhartid\[30\] 0000 21
-fuse_mhartid\[29\] 0000 22
-fuse_mhartid\[28\] 0000 23
-fuse_mhartid\[27\] 0000 24
-fuse_mhartid\[26\] 0000 25
-fuse_mhartid\[25\] 0000 26
-fuse_mhartid\[24\] 0000 27
-fuse_mhartid\[23\] 0000 28
-fuse_mhartid\[22\] 0000 29
-fuse_mhartid\[21\] 0000 30
-fuse_mhartid\[20\] 0000 31
-fuse_mhartid\[19\] 0000 32
-fuse_mhartid\[18\] 0000 33
-fuse_mhartid\[17\] 0000 34
-fuse_mhartid\[16\] 0000 35
-fuse_mhartid\[15\] 0000 36
-fuse_mhartid\[14\] 0000 37
-fuse_mhartid\[13\] 0000 38
-fuse_mhartid\[12\] 0000 39
-fuse_mhartid\[11\] 0000 40
-fuse_mhartid\[10\] 0000 41
-fuse_mhartid\[9\] 0000 42
-fuse_mhartid\[8\] 0000 43
-fuse_mhartid\[7\] 0000 44
-fuse_mhartid\[6\] 0000 45
-fuse_mhartid\[5\] 0000 46
-fuse_mhartid\[4\] 0000 47
-fuse_mhartid\[3\] 0000 48
-fuse_mhartid\[2\] 0000 49
-fuse_mhartid\[1\] 0000 50
-fuse_mhartid\[0\] 0000 51
+rtc_clk
+cpu_rst_n
#W
wb_clk 0000 0
-wb_rst_n 0000 1
-pwrup_rst_n 0000 2
-rst_n 0000 3
+wb_rst_n
+pwrup_rst_n
+rst_n
#N
-wbd_imem_stb_o 0000 0
-wbd_imem_we_o 0000 1
-wbd_imem_adr_o\[31\] 0000 2
-wbd_imem_adr_o\[30\] 0000 3
-wbd_imem_adr_o\[29\] 0000 4
-wbd_imem_adr_o\[28\] 0000 5
-wbd_imem_adr_o\[27\] 0000 6
-wbd_imem_adr_o\[26\] 0000 7
-wbd_imem_adr_o\[25\] 0000 8
-wbd_imem_adr_o\[24\] 0000 9
-wbd_imem_adr_o\[23\] 0000 10
-wbd_imem_adr_o\[22\] 0000 11
-wbd_imem_adr_o\[21\] 0000 12
-wbd_imem_adr_o\[20\] 0000 13
-wbd_imem_adr_o\[19\] 0000 14
-wbd_imem_adr_o\[18\] 0000 15
-wbd_imem_adr_o\[17\] 0000 16
-wbd_imem_adr_o\[16\] 0000 17
-wbd_imem_adr_o\[15\] 0000 18
-wbd_imem_adr_o\[14\] 0000 19
-wbd_imem_adr_o\[13\] 0000 20
-wbd_imem_adr_o\[12\] 0000 21
-wbd_imem_adr_o\[11\] 0000 22
-wbd_imem_adr_o\[10\] 0000 23
-wbd_imem_adr_o\[9\] 0000 24
-wbd_imem_adr_o\[8\] 0000 25
-wbd_imem_adr_o\[7\] 0000 26
-wbd_imem_adr_o\[6\] 0000 27
-wbd_imem_adr_o\[5\] 0000 28
-wbd_imem_adr_o\[4\] 0000 29
-wbd_imem_adr_o\[3\] 0000 30
-wbd_imem_adr_o\[2\] 0000 31
-wbd_imem_adr_o\[1\] 0000 32
-wbd_imem_adr_o\[0\] 0000 33
-wbd_imem_sel_o\[3\] 0000 34
-wbd_imem_sel_o\[2\] 0000 35
-wbd_imem_sel_o\[1\] 0000 36
-wbd_imem_sel_o\[0\] 0000 37
-wbd_imem_dat_o\[31\] 0000 38
-wbd_imem_dat_o\[30\] 0000 39
-wbd_imem_dat_o\[29\] 0000 40
-wbd_imem_dat_o\[28\] 0000 41
-wbd_imem_dat_o\[27\] 0000 42
-wbd_imem_dat_o\[26\] 0000 43
-wbd_imem_dat_o\[25\] 0000 44
-wbd_imem_dat_o\[24\] 0000 45
-wbd_imem_dat_o\[23\] 0000 46
-wbd_imem_dat_o\[22\] 0000 47
-wbd_imem_dat_o\[21\] 0000 48
-wbd_imem_dat_o\[20\] 0000 49
-wbd_imem_dat_o\[19\] 0000 50
-wbd_imem_dat_o\[18\] 0000 51
-wbd_imem_dat_o\[17\] 0000 52
-wbd_imem_dat_o\[16\] 0000 53
-wbd_imem_dat_o\[15\] 0000 54
-wbd_imem_dat_o\[14\] 0000 55
-wbd_imem_dat_o\[13\] 0000 56
-wbd_imem_dat_o\[12\] 0000 57
-wbd_imem_dat_o\[11\] 0000 58
-wbd_imem_dat_o\[10\] 0000 59
-wbd_imem_dat_o\[9\] 0000 60
-wbd_imem_dat_o\[8\] 0000 61
-wbd_imem_dat_o\[7\] 0000 62
-wbd_imem_dat_o\[6\] 0000 63
-wbd_imem_dat_o\[5\] 0000 64
-wbd_imem_dat_o\[4\] 0000 65
-wbd_imem_dat_o\[3\] 0000 66
-wbd_imem_dat_o\[2\] 0000 67
-wbd_imem_dat_o\[1\] 0000 68
-wbd_imem_dat_o\[0\] 0000 69
-wbd_imem_dat_i\[31\] 0000 70
-wbd_imem_dat_i\[30\] 0000 71
-wbd_imem_dat_i\[29\] 0000 72
-wbd_imem_dat_i\[28\] 0000 73
-wbd_imem_dat_i\[27\] 0000 74
-wbd_imem_dat_i\[26\] 0000 75
-wbd_imem_dat_i\[25\] 0000 76
-wbd_imem_dat_i\[24\] 0000 77
-wbd_imem_dat_i\[23\] 0000 78
-wbd_imem_dat_i\[22\] 0000 79
-wbd_imem_dat_i\[21\] 0000 80
-wbd_imem_dat_i\[20\] 0000 81
-wbd_imem_dat_i\[19\] 0000 82
-wbd_imem_dat_i\[18\] 0000 83
-wbd_imem_dat_i\[17\] 0000 84
-wbd_imem_dat_i\[16\] 0000 85
-wbd_imem_dat_i\[15\] 0000 86
-wbd_imem_dat_i\[14\] 0000 87
-wbd_imem_dat_i\[13\] 0000 88
-wbd_imem_dat_i\[12\] 0000 89
-wbd_imem_dat_i\[11\] 0000 90
-wbd_imem_dat_i\[10\] 0000 91
-wbd_imem_dat_i\[9\] 0000 92
-wbd_imem_dat_i\[8\] 0000 93
-wbd_imem_dat_i\[7\] 0000 94
-wbd_imem_dat_i\[6\] 0000 95
-wbd_imem_dat_i\[5\] 0000 96
-wbd_imem_dat_i\[4\] 0000 97
-wbd_imem_dat_i\[3\] 0000 98
-wbd_imem_dat_i\[2\] 0000 99
-wbd_imem_dat_i\[1\] 0000 100
-wbd_imem_dat_i\[0\] 0000 101
-wbd_imem_ack_i 0000 102
-wbd_imem_err_i 0000 103
+wbd_imem_stb_o 0000 0
+wbd_imem_we_o
+wbd_imem_adr_o\[31\]
+wbd_imem_adr_o\[30\]
+wbd_imem_adr_o\[29\]
+wbd_imem_adr_o\[28\]
+wbd_imem_adr_o\[27\]
+wbd_imem_adr_o\[26\]
+wbd_imem_adr_o\[25\]
+wbd_imem_adr_o\[24\]
+wbd_imem_adr_o\[23\]
+wbd_imem_adr_o\[22\]
+wbd_imem_adr_o\[21\]
+wbd_imem_adr_o\[20\]
+wbd_imem_adr_o\[19\]
+wbd_imem_adr_o\[18\]
+wbd_imem_adr_o\[17\]
+wbd_imem_adr_o\[16\]
+wbd_imem_adr_o\[15\]
+wbd_imem_adr_o\[14\]
+wbd_imem_adr_o\[13\]
+wbd_imem_adr_o\[12\]
+wbd_imem_adr_o\[11\]
+wbd_imem_adr_o\[10\]
+wbd_imem_adr_o\[9\]
+wbd_imem_adr_o\[8\]
+wbd_imem_adr_o\[7\]
+wbd_imem_adr_o\[6\]
+wbd_imem_adr_o\[5\]
+wbd_imem_adr_o\[4\]
+wbd_imem_adr_o\[3\]
+wbd_imem_adr_o\[2\]
+wbd_imem_adr_o\[1\]
+wbd_imem_adr_o\[0\]
+wbd_imem_sel_o\[3\]
+wbd_imem_sel_o\[2\]
+wbd_imem_sel_o\[1\]
+wbd_imem_sel_o\[0\]
+wbd_imem_dat_o\[31\]
+wbd_imem_dat_o\[30\]
+wbd_imem_dat_o\[29\]
+wbd_imem_dat_o\[28\]
+wbd_imem_dat_o\[27\]
+wbd_imem_dat_o\[26\]
+wbd_imem_dat_o\[25\]
+wbd_imem_dat_o\[24\]
+wbd_imem_dat_o\[23\]
+wbd_imem_dat_o\[22\]
+wbd_imem_dat_o\[21\]
+wbd_imem_dat_o\[20\]
+wbd_imem_dat_o\[19\]
+wbd_imem_dat_o\[18\]
+wbd_imem_dat_o\[17\]
+wbd_imem_dat_o\[16\]
+wbd_imem_dat_o\[15\]
+wbd_imem_dat_o\[14\]
+wbd_imem_dat_o\[13\]
+wbd_imem_dat_o\[12\]
+wbd_imem_dat_o\[11\]
+wbd_imem_dat_o\[10\]
+wbd_imem_dat_o\[9\]
+wbd_imem_dat_o\[8\]
+wbd_imem_dat_o\[7\]
+wbd_imem_dat_o\[6\]
+wbd_imem_dat_o\[5\]
+wbd_imem_dat_o\[4\]
+wbd_imem_dat_o\[3\]
+wbd_imem_dat_o\[2\]
+wbd_imem_dat_o\[1\]
+wbd_imem_dat_o\[0\]
+wbd_imem_dat_i\[31\]
+wbd_imem_dat_i\[30\]
+wbd_imem_dat_i\[29\]
+wbd_imem_dat_i\[28\]
+wbd_imem_dat_i\[27\]
+wbd_imem_dat_i\[26\]
+wbd_imem_dat_i\[25\]
+wbd_imem_dat_i\[24\]
+wbd_imem_dat_i\[23\]
+wbd_imem_dat_i\[22\]
+wbd_imem_dat_i\[21\]
+wbd_imem_dat_i\[20\]
+wbd_imem_dat_i\[19\]
+wbd_imem_dat_i\[18\]
+wbd_imem_dat_i\[17\]
+wbd_imem_dat_i\[16\]
+wbd_imem_dat_i\[15\]
+wbd_imem_dat_i\[14\]
+wbd_imem_dat_i\[13\]
+wbd_imem_dat_i\[12\]
+wbd_imem_dat_i\[11\]
+wbd_imem_dat_i\[10\]
+wbd_imem_dat_i\[9\]
+wbd_imem_dat_i\[8\]
+wbd_imem_dat_i\[7\]
+wbd_imem_dat_i\[6\]
+wbd_imem_dat_i\[5\]
+wbd_imem_dat_i\[4\]
+wbd_imem_dat_i\[3\]
+wbd_imem_dat_i\[2\]
+wbd_imem_dat_i\[1\]
+wbd_imem_dat_i\[0\]
+wbd_imem_ack_i
+wbd_imem_err_i
-wbd_dmem_stb_o 0500 0
-wbd_dmem_we_o 0500 1
-wbd_dmem_adr_o\[31\] 0500 2
-wbd_dmem_adr_o\[30\] 0500 3
-wbd_dmem_adr_o\[29\] 0500 4
-wbd_dmem_adr_o\[28\] 0500 5
-wbd_dmem_adr_o\[27\] 0500 6
-wbd_dmem_adr_o\[26\] 0500 7
-wbd_dmem_adr_o\[25\] 0500 8
-wbd_dmem_adr_o\[24\] 0500 9
-wbd_dmem_adr_o\[23\] 0500 10
-wbd_dmem_adr_o\[22\] 0500 11
-wbd_dmem_adr_o\[21\] 0500 12
-wbd_dmem_adr_o\[20\] 0500 13
-wbd_dmem_adr_o\[19\] 0500 14
-wbd_dmem_adr_o\[18\] 0500 15
-wbd_dmem_adr_o\[17\] 0500 16
-wbd_dmem_adr_o\[16\] 0500 17
-wbd_dmem_adr_o\[15\] 0500 18
-wbd_dmem_adr_o\[14\] 0500 19
-wbd_dmem_adr_o\[13\] 0500 20
-wbd_dmem_adr_o\[12\] 0500 21
-wbd_dmem_adr_o\[11\] 0500 22
-wbd_dmem_adr_o\[10\] 0500 23
-wbd_dmem_adr_o\[9\] 0500 24
-wbd_dmem_adr_o\[8\] 0500 25
-wbd_dmem_adr_o\[7\] 0500 26
-wbd_dmem_adr_o\[6\] 0500 27
-wbd_dmem_adr_o\[5\] 0500 28
-wbd_dmem_adr_o\[4\] 0500 29
-wbd_dmem_adr_o\[3\] 0500 30
-wbd_dmem_adr_o\[2\] 0500 31
-wbd_dmem_adr_o\[1\] 0500 32
-wbd_dmem_adr_o\[0\] 0500 33
-wbd_dmem_sel_o\[3\] 0500 34
-wbd_dmem_sel_o\[2\] 0500 35
-wbd_dmem_sel_o\[1\] 0500 36
-wbd_dmem_sel_o\[0\] 0500 37
-wbd_dmem_dat_o\[31\] 0500 38
-wbd_dmem_dat_o\[30\] 0500 39
-wbd_dmem_dat_o\[29\] 0500 40
-wbd_dmem_dat_o\[28\] 0500 41
-wbd_dmem_dat_o\[27\] 0500 42
-wbd_dmem_dat_o\[26\] 0500 43
-wbd_dmem_dat_o\[25\] 0500 44
-wbd_dmem_dat_o\[24\] 0500 45
-wbd_dmem_dat_o\[23\] 0500 46
-wbd_dmem_dat_o\[22\] 0500 47
-wbd_dmem_dat_o\[21\] 0500 48
-wbd_dmem_dat_o\[20\] 0500 49
-wbd_dmem_dat_o\[19\] 0500 50
-wbd_dmem_dat_o\[18\] 0500 51
-wbd_dmem_dat_o\[17\] 0500 52
-wbd_dmem_dat_o\[16\] 0500 53
-wbd_dmem_dat_o\[15\] 0500 54
-wbd_dmem_dat_o\[14\] 0500 55
-wbd_dmem_dat_o\[13\] 0500 56
-wbd_dmem_dat_o\[12\] 0500 57
-wbd_dmem_dat_o\[11\] 0500 58
-wbd_dmem_dat_o\[10\] 0500 59
-wbd_dmem_dat_o\[9\] 0500 60
-wbd_dmem_dat_o\[8\] 0500 61
-wbd_dmem_dat_o\[7\] 0500 62
-wbd_dmem_dat_o\[6\] 0500 63
-wbd_dmem_dat_o\[5\] 0500 64
-wbd_dmem_dat_o\[4\] 0500 65
-wbd_dmem_dat_o\[3\] 0500 66
-wbd_dmem_dat_o\[2\] 0500 67
-wbd_dmem_dat_o\[1\] 0500 68
-wbd_dmem_dat_o\[0\] 0500 69
-wbd_dmem_dat_i\[31\] 0500 70
-wbd_dmem_dat_i\[30\] 0500 71
-wbd_dmem_dat_i\[29\] 0500 72
-wbd_dmem_dat_i\[28\] 0500 73
-wbd_dmem_dat_i\[27\] 0500 74
-wbd_dmem_dat_i\[26\] 0500 75
-wbd_dmem_dat_i\[25\] 0500 76
-wbd_dmem_dat_i\[24\] 0500 77
-wbd_dmem_dat_i\[23\] 0500 78
-wbd_dmem_dat_i\[22\] 0500 79
-wbd_dmem_dat_i\[21\] 0500 80
-wbd_dmem_dat_i\[20\] 0500 81
-wbd_dmem_dat_i\[19\] 0500 82
-wbd_dmem_dat_i\[18\] 0500 83
-wbd_dmem_dat_i\[17\] 0500 84
-wbd_dmem_dat_i\[16\] 0500 85
-wbd_dmem_dat_i\[15\] 0500 86
-wbd_dmem_dat_i\[14\] 0500 87
-wbd_dmem_dat_i\[13\] 0500 88
-wbd_dmem_dat_i\[12\] 0500 89
-wbd_dmem_dat_i\[11\] 0500 90
-wbd_dmem_dat_i\[10\] 0500 91
-wbd_dmem_dat_i\[9\] 0500 92
-wbd_dmem_dat_i\[8\] 0500 93
-wbd_dmem_dat_i\[7\] 0500 94
-wbd_dmem_dat_i\[6\] 0500 95
-wbd_dmem_dat_i\[5\] 0500 96
-wbd_dmem_dat_i\[4\] 0500 97
-wbd_dmem_dat_i\[3\] 0500 98
-wbd_dmem_dat_i\[2\] 0500 99
-wbd_dmem_dat_i\[1\] 0500 100
-wbd_dmem_dat_i\[0\] 0500 101
-wbd_dmem_ack_i 0500 102
-wbd_dmem_err_i 0500 103
+wbd_dmem_stb_o 0500 0 2
+wbd_dmem_we_o
+wbd_dmem_adr_o\[31\]
+wbd_dmem_adr_o\[30\]
+wbd_dmem_adr_o\[29\]
+wbd_dmem_adr_o\[28\]
+wbd_dmem_adr_o\[27\]
+wbd_dmem_adr_o\[26\]
+wbd_dmem_adr_o\[25\]
+wbd_dmem_adr_o\[24\]
+wbd_dmem_adr_o\[23\]
+wbd_dmem_adr_o\[22\]
+wbd_dmem_adr_o\[21\]
+wbd_dmem_adr_o\[20\]
+wbd_dmem_adr_o\[19\]
+wbd_dmem_adr_o\[18\]
+wbd_dmem_adr_o\[17\]
+wbd_dmem_adr_o\[16\]
+wbd_dmem_adr_o\[15\]
+wbd_dmem_adr_o\[14\]
+wbd_dmem_adr_o\[13\]
+wbd_dmem_adr_o\[12\]
+wbd_dmem_adr_o\[11\]
+wbd_dmem_adr_o\[10\]
+wbd_dmem_adr_o\[9\]
+wbd_dmem_adr_o\[8\]
+wbd_dmem_adr_o\[7\]
+wbd_dmem_adr_o\[6\]
+wbd_dmem_adr_o\[5\]
+wbd_dmem_adr_o\[4\]
+wbd_dmem_adr_o\[3\]
+wbd_dmem_adr_o\[2\]
+wbd_dmem_adr_o\[1\]
+wbd_dmem_adr_o\[0\]
+wbd_dmem_sel_o\[3\]
+wbd_dmem_sel_o\[2\]
+wbd_dmem_sel_o\[1\]
+wbd_dmem_sel_o\[0\]
+wbd_dmem_dat_o\[31\]
+wbd_dmem_dat_o\[30\]
+wbd_dmem_dat_o\[29\]
+wbd_dmem_dat_o\[28\]
+wbd_dmem_dat_o\[27\]
+wbd_dmem_dat_o\[26\]
+wbd_dmem_dat_o\[25\]
+wbd_dmem_dat_o\[24\]
+wbd_dmem_dat_o\[23\]
+wbd_dmem_dat_o\[22\]
+wbd_dmem_dat_o\[21\]
+wbd_dmem_dat_o\[20\]
+wbd_dmem_dat_o\[19\]
+wbd_dmem_dat_o\[18\]
+wbd_dmem_dat_o\[17\]
+wbd_dmem_dat_o\[16\]
+wbd_dmem_dat_o\[15\]
+wbd_dmem_dat_o\[14\]
+wbd_dmem_dat_o\[13\]
+wbd_dmem_dat_o\[12\]
+wbd_dmem_dat_o\[11\]
+wbd_dmem_dat_o\[10\]
+wbd_dmem_dat_o\[9\]
+wbd_dmem_dat_o\[8\]
+wbd_dmem_dat_o\[7\]
+wbd_dmem_dat_o\[6\]
+wbd_dmem_dat_o\[5\]
+wbd_dmem_dat_o\[4\]
+wbd_dmem_dat_o\[3\]
+wbd_dmem_dat_o\[2\]
+wbd_dmem_dat_o\[1\]
+wbd_dmem_dat_o\[0\]
+wbd_dmem_dat_i\[31\]
+wbd_dmem_dat_i\[30\]
+wbd_dmem_dat_i\[29\]
+wbd_dmem_dat_i\[28\]
+wbd_dmem_dat_i\[27\]
+wbd_dmem_dat_i\[26\]
+wbd_dmem_dat_i\[25\]
+wbd_dmem_dat_i\[24\]
+wbd_dmem_dat_i\[23\]
+wbd_dmem_dat_i\[22\]
+wbd_dmem_dat_i\[21\]
+wbd_dmem_dat_i\[20\]
+wbd_dmem_dat_i\[19\]
+wbd_dmem_dat_i\[18\]
+wbd_dmem_dat_i\[17\]
+wbd_dmem_dat_i\[16\]
+wbd_dmem_dat_i\[15\]
+wbd_dmem_dat_i\[14\]
+wbd_dmem_dat_i\[13\]
+wbd_dmem_dat_i\[12\]
+wbd_dmem_dat_i\[11\]
+wbd_dmem_dat_i\[10\]
+wbd_dmem_dat_i\[9\]
+wbd_dmem_dat_i\[8\]
+wbd_dmem_dat_i\[7\]
+wbd_dmem_dat_i\[6\]
+wbd_dmem_dat_i\[5\]
+wbd_dmem_dat_i\[4\]
+wbd_dmem_dat_i\[3\]
+wbd_dmem_dat_i\[2\]
+wbd_dmem_dat_i\[1\]
+wbd_dmem_dat_i\[0\]
+wbd_dmem_ack_i
+wbd_dmem_err_i
+irq_lines\[15\] 1200 0 2
+irq_lines\[14\]
+irq_lines\[13\]
+irq_lines\[12\]
+irq_lines\[11\]
+irq_lines\[10\]
+irq_lines\[9\]
+irq_lines\[8\]
+irq_lines\[7\]
+irq_lines\[6\]
+irq_lines\[5\]
+irq_lines\[4\]
+irq_lines\[3\]
+irq_lines\[2\]
+irq_lines\[1\]
+irq_lines\[0\]
+soft_irq
+fuse_mhartid\[31\]
+fuse_mhartid\[30\]
+fuse_mhartid\[29\]
+fuse_mhartid\[28\]
+fuse_mhartid\[27\]
+fuse_mhartid\[26\]
+fuse_mhartid\[25\]
+fuse_mhartid\[24\]
+fuse_mhartid\[23\]
+fuse_mhartid\[22\]
+fuse_mhartid\[21\]
+fuse_mhartid\[20\]
+fuse_mhartid\[19\]
+fuse_mhartid\[18\]
+fuse_mhartid\[17\]
+fuse_mhartid\[16\]
+fuse_mhartid\[15\]
+fuse_mhartid\[14\]
+fuse_mhartid\[13\]
+fuse_mhartid\[12\]
+fuse_mhartid\[11\]
+fuse_mhartid\[10\]
+fuse_mhartid\[9\]
+fuse_mhartid\[8\]
+fuse_mhartid\[7\]
+fuse_mhartid\[6\]
+fuse_mhartid\[5\]
+fuse_mhartid\[4\]
+fuse_mhartid\[3\]
+fuse_mhartid\[2\]
+fuse_mhartid\[1\]
+fuse_mhartid\[0\]
diff --git a/openlane/user_project_wrapper/config.tcl b/openlane/user_project_wrapper/config.tcl
index 7661525..51dc0f8 100644
--- a/openlane/user_project_wrapper/config.tcl
+++ b/openlane/user_project_wrapper/config.tcl
@@ -60,6 +60,7 @@
$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 \
"
@@ -70,6 +71,7 @@
$lef_root/sdram.lef \
$lef_root/uart.lef \
$lef_root/wb_host.lef \
+ $lef_root/clk_skew_adjust.lef \
$lef_root/syntacore.lef \
"
@@ -80,6 +82,7 @@
$gds_root/uart.gds \
$gds_root/sdram.gds \
$gds_root/wb_host.gds \
+ $gds_root/clk_skew_adjust.gds \
$gds_root/syntacore.gds \
"
@@ -87,7 +90,7 @@
set ::env(VERILOG_INCLUDE_DIRS) [glob $script_dir/../../verilog/rtl/syntacore/scr1/src/includes $script_dir/../../verilog/rtl/sdram_ctrl/src/defs ]
-set ::env(GLB_RT_MAXLAYER) 6
+set ::env(GLB_RT_MAXLAYER) 5
set ::env(FP_PDN_CHECK_NODES) 0
@@ -111,6 +114,9 @@
set ::env(TAP_DECAP_INSERTION) 0
set ::env(CLOCK_TREE_SYNTH) 0
+set ::env(MAGIC_EXT_USE_GDS) "1"
+
+
set ::env(PL_DIAMOND_SEARCH_HEIGHT) "250"
diff --git a/openlane/user_project_wrapper/macro.cfg b/openlane/user_project_wrapper/macro.cfg
index 9ef1988..2843978 100644
--- a/openlane/user_project_wrapper/macro.cfg
+++ b/openlane/user_project_wrapper/macro.cfg
@@ -5,3 +5,13 @@
u_core.u_uart_core 2200 1600 N
u_core.u_intercon 300 2300 N
u_core.u_wb_host 300 300 N
+u_core.u_skew_wi 2600 2300 N
+u_core.u_skew_riscv 400 800 N
+u_core.u_skew_uart 2200 1500 N
+u_core.u_skew_spi 200 2700 E
+u_core.u_skew_sdram 900 2700 E
+u_core.u_skew_glbl 2000 3200 N
+u_core.u_skew_wh 1400 300 N
+u_core.u_skew_sd_co 950 3300 N
+u_core.u_skew_sd_ci 1100 3300 N
+u_core.u_skew_sp_co 300 3400 N
diff --git a/openlane/wb_host/config.tcl b/openlane/wb_host/config.tcl
index 56efc5b..1c7005b 100755
--- a/openlane/wb_host/config.tcl
+++ b/openlane/wb_host/config.tcl
@@ -37,8 +37,9 @@
# Local sources + no2usb sources
set ::env(VERILOG_FILES) "\
$script_dir/../../verilog/rtl/wb_host/src/wb_host.sv \
- $script_dir/../../verilog/rtl/lib/async_fifo.sv \
- $script_dir/../../verilog/rtl/lib/async_wb.sv \
+ $script_dir/../../verilog/rtl/lib/async_fifo.sv \
+ $script_dir/../../verilog/rtl/lib/async_wb.sv \
+ $script_dir/../../verilog/rtl/lib/clk_ctl.v \
$script_dir/../../verilog/rtl/lib/registers.v"
#set ::env(SDC_FILE) "$script_dir/base.sdc"
diff --git a/verilog/dv/risc_boot/Makefile b/verilog/dv/risc_boot/Makefile
index ed2fa74..635b188 100644
--- a/verilog/dv/risc_boot/Makefile
+++ b/verilog/dv/risc_boot/Makefile
@@ -63,7 +63,7 @@
ifeq ($(SIM),RTL)
iverilog -g2005-sv -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
- -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
-I $(UPRJ_BEHAVIOURAL_AGENTS) \
-I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) \
$< -o $@
diff --git a/verilog/dv/user_risc_boot/run_iverilog b/verilog/dv/user_risc_boot/run_iverilog
index 63083a1..f083d6d 100755
--- a/verilog/dv/user_risc_boot/run_iverilog
+++ b/verilog/dv/user_risc_boot/run_iverilog
@@ -29,9 +29,13 @@
rm crt_tcm.o user_risc_boot.o
#iverilog with waveform dump
-#iverilog -g2005-sv -DWFDUMP -I $PDK_PATH -I ../ -I ../../../verilog/rtl -I ../../../verilog/rtl/syntacore/scr1/src/includes -I ../../../verilog/rtl/sdram_ctrl/src/defs -I $CARAVEL_ROOT/verilog/dv/caravel -I ../model user_risc_boot_tb.v -o user_risc_boot_tb.vvp
+iverilog -g2005-sv -DWFDUMP -DFUNCTIONAL -DSIM -I $PDK_PATH -I ../../../caravel/verilog/rtl -I ../ -I ../../../verilog/rtl -I ../ -I ../../../verilog -I ../../../verilog/rtl/syntacore/scr1/src/includes -I ../../../verilog/rtl/sdram_ctrl/src/defs -I $CARAVEL_ROOT/verilog/dv/caravel -I ../model -I ../agents user_risc_boot_tb.v -o user_risc_boot_tb.vvp
-iverilog -g2005-sv -I $PDK_PATH -I ../ -I ../../../verilog/rtl -I ../../../verilog/rtl/syntacore/scr1/src/includes -I ../../../verilog/rtl/sdram_ctrl/src/defs -I $CARAVEL_ROOT/verilog/dv/caravel -I ../model user_risc_boot_tb.v -o user_risc_boot_tb.vvp
+
+#iverilog -g2005-sv -I $PDK_PATH -DFUNCTIONAL -DSIM -I ../../../caravel/verilog/rtl -I ../ -I ../../../verilog/rtl -I ../../../verilog -I ../../../verilog/rtl/syntacore/scr1/src/includes -I ../../../verilog/rtl/sdram_ctrl/src/defs -I $CARAVEL_ROOT/verilog/dv/caravel -I ../model -I ../agents user_risc_boot_tb.v -o user_risc_boot_tb.vvp
+
+# GLS
+#iverilog -g2005-sv -DGL -I $PDK_PATH -I ../../../caravel/verilog/rtl -I ../ -I ../../../verilog/rtl -I ../../../verilog -I /home/dinesha/workarea/pdk/sky130A -I ../../../verilog/rtl/syntacore/scr1/src/includes -I ../../../verilog/rtl/sdram_ctrl/src/defs -I $CARAVEL_ROOT/verilog/dv/caravel -I ../model -I ../agents user_uart_tb.v -o user_risc_boot_tb.vvp
vvp user_risc_boot_tb.vvp | tee test.log
diff --git a/verilog/dv/user_risc_boot/uprj_netlists.v b/verilog/dv/user_risc_boot/uprj_netlists.v
index 1668caa..24c1d6d 100644
--- a/verilog/dv/user_risc_boot/uprj_netlists.v
+++ b/verilog/dv/user_risc_boot/uprj_netlists.v
@@ -16,14 +16,17 @@
// Include caravel global defines for the number of the user project IO pads
`include "defines.v"
`define USE_POWER_PINS
+`define UNIT_DELAY #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"
- `include "libs.ref/sky130_fd_sc_hvl/verilog/sky130_fd_sc_hvl.v"
- `include "digital_core/src/digital_core.sv"
+ `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"
+ `include "libs.ref/sky130_fd_sc_hvl/verilog/sky130_fd_sc_hvl.v"
+
+
+
`include "glbl_cfg.v"
`include "sdram.v"
`include "spi_master.v"
@@ -66,6 +69,11 @@
`include "lib/sync_fifo.sv"
`include "lib/async_fifo.sv"
`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"
+ `include "libs.ref/sky130_fd_sc_hvl/verilog/sky130_fd_sc_hvl.v"
+
`include "spi_master/src/spim_top.sv"
`include "spi_master/src/spim_regs.sv"
`include "spi_master/src/spim_clkgen.sv"
@@ -136,4 +144,7 @@
`include "lib/sync_fifo.sv"
`include "user_project_wrapper.v"
+ // we are using netlist file for clk_skew_adjust as it has
+ // standard cell + power pin
+ `include "gl/clk_skew_adjust.v"
`endif
diff --git a/verilog/dv/user_uart/Makefile b/verilog/dv/user_uart/Makefile
index 45b15cc..c05ec68 100644
--- a/verilog/dv/user_uart/Makefile
+++ b/verilog/dv/user_uart/Makefile
@@ -63,7 +63,7 @@
ifeq ($(SIM),RTL)
iverilog -g2005-sv -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
- -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
-I $(UPRJ_BEHAVIOURAL_AGENTS) \
-I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) \
$< -o $@
diff --git a/verilog/dv/user_uart/run_iverilog b/verilog/dv/user_uart/run_iverilog
index 00d1d51..6cac66f 100755
--- a/verilog/dv/user_uart/run_iverilog
+++ b/verilog/dv/user_uart/run_iverilog
@@ -28,13 +28,13 @@
rm crt_tcm.o user_uart.o
#iverilog with waveform dump
-iverilog -g2005-sv -DWFDUMP -I $PDK_PATH -I ../../../caravel/verilog/rtl -I ../ -I ../../../verilog/rtl -I ../../../verilog/rtl/syntacore/scr1/src/includes -I ../../../verilog/rtl/sdram_ctrl/src/defs -I $CARAVEL_ROOT/verilog/dv/caravel -I ../model -I ../agents user_uart_tb.v -o user_uart_tb.vvp
+iverilog -g2005-sv -DWFDUMP -DFUNCTIONAL -DSIM -I $PDK_PATH -I ../../../caravel/verilog/rtl -I ../ -I ../../../verilog/rtl -I ../ -I ../../../verilog -I ../../../verilog/rtl/syntacore/scr1/src/includes -I ../../../verilog/rtl/sdram_ctrl/src/defs -I $CARAVEL_ROOT/verilog/dv/caravel -I ../model -I ../agents user_uart_tb.v -o user_uart_tb.vvp
-#iverilog -g2005-sv -I $PDK_PATH -I ../../../caravel/verilog/rtl -I ../ -I ../../../verilog/rtl -I ../../../verilog/rtl/syntacore/scr1/src/includes -I ../../../verilog/rtl/sdram_ctrl/src/defs -I $CARAVEL_ROOT/verilog/dv/caravel -I ../model -I ../agents user_uart_tb.v -o user_uart_tb.vvp
+#iverilog -g2005-sv -I $PDK_PATH -DFUNCTIONAL -DSIM -I ../../../caravel/verilog/rtl -I ../ -I ../../../verilog/rtl -I ../../../verilog -I ../../../verilog/rtl/syntacore/scr1/src/includes -I ../../../verilog/rtl/sdram_ctrl/src/defs -I $CARAVEL_ROOT/verilog/dv/caravel -I ../model -I ../agents user_uart_tb.v -o user_uart_tb.vvp
# GLS
-#iverilog -g2005-sv -DGL -I $PDK_PATH -I ../../../caravel/verilog/rtl -I ../../gl -I ../ -I ../../../verilog/rtl -I /home/dinesha/workarea/pdk/sky130A -I ../../../verilog/rtl/syntacore/scr1/src/includes -I ../../../verilog/rtl/sdram_ctrl/src/defs -I $CARAVEL_ROOT/verilog/dv/caravel -I ../model -I ../agents user_uart_tb.v -o user_uart_tb.vvp
+#iverilog -g2005-sv -DGL -I $PDK_PATH -I ../../../caravel/verilog/rtl -I ../ -I ../../../verilog/rtl -I ../../../verilog -I /home/dinesha/workarea/pdk/sky130A -I ../../../verilog/rtl/syntacore/scr1/src/includes -I ../../../verilog/rtl/sdram_ctrl/src/defs -I $CARAVEL_ROOT/verilog/dv/caravel -I ../model -I ../agents user_uart_tb.v -o user_uart_tb.vvp
vvp user_uart_tb.vvp | tee test.log
diff --git a/verilog/dv/user_uart/uprj_netlists.v b/verilog/dv/user_uart/uprj_netlists.v
index 5e42730..d140c85 100644
--- a/verilog/dv/user_uart/uprj_netlists.v
+++ b/verilog/dv/user_uart/uprj_netlists.v
@@ -16,12 +16,16 @@
// Include caravel global defines for the number of the user project IO pads
`include "defines.v"
`define USE_POWER_PINS
+`define UNIT_DELAY #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"
- `include "libs.ref/sky130_fd_sc_hvl/verilog/sky130_fd_sc_hvl.v"
+
+ `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"
+ `include "libs.ref/sky130_fd_sc_hvl/verilog/sky130_fd_sc_hvl.v"
+
+
`include "glbl_cfg.v"
`include "sdram.v"
@@ -34,6 +38,13 @@
`include "wb_host.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"
+ `include "libs.ref/sky130_fd_sc_hvl/verilog/sky130_fd_sc_hvl.v"
+
+
`include "spi_master/src/spim_top.sv"
`include "spi_master/src/spim_regs.sv"
`include "spi_master/src/spim_clkgen.sv"
@@ -104,4 +115,7 @@
`include "lib/sync_fifo.sv"
`include "user_project_wrapper.v"
+ // we are using netlist file for clk_skew_adjust as it has
+ // standard cell + power pin
+ `include "gl/clk_skew_adjust.v"
`endif
diff --git a/verilog/dv/user_uart/user_uart_tb.v b/verilog/dv/user_uart/user_uart_tb.v
index 3dcc653..cfe4819 100644
--- a/verilog/dv/user_uart/user_uart_tb.v
+++ b/verilog/dv/user_uart/user_uart_tb.v
@@ -150,9 +150,6 @@
initial begin
$dumpfile("risc_boot.vcd");
$dumpvars(4, user_uart_tb);
-
- #1000;
- $finish;
end
`endif
diff --git a/verilog/dv/wb_port/Makefile b/verilog/dv/wb_port/Makefile
index f1565bb..19c32ee 100644
--- a/verilog/dv/wb_port/Makefile
+++ b/verilog/dv/wb_port/Makefile
@@ -51,7 +51,7 @@
ifeq ($(SIM),RTL)
iverilog -g2005-sv -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
- -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
-I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) \
$< -o $@
else
diff --git a/verilog/rtl/clk_skew_adjust/src/clk_skew_adjust.gv b/verilog/rtl/clk_skew_adjust/src/clk_skew_adjust.gv
new file mode 100644
index 0000000..038ef52
--- /dev/null
+++ b/verilog/rtl/clk_skew_adjust/src/clk_skew_adjust.gv
@@ -0,0 +1,194 @@
+//////////////////////////////////////////////////////////////////////////////
+// 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: Created by Dinesh Annayya <dinesha@opencores.org>
+//
+//////////////////////////////////////////////////////////////////////
+//// ////
+//// clock skew adjust ////
+//// ////
+//// This file is part of the YIFive cores project ////
+//// https://github.com/dineshannayya/yifive_r0.git ////
+//// http://www.opencores.org/cores/yifive/ ////
+//// ////
+//// Description ////
+//// This block is useful for global clock skew adjustment ////
+//// logic implementation: ////
+//// clk_out = (sel=0) ? clk_in : ////
+//// (sel=1) ? clk_d1 : ////
+//// (sel=1) ? clk_d2 : ////
+//// ..... ////
+//// (sel=15)? clk_d15 :clk_in ////
+//// ////
+//// Note: each d* indicate clk buf delay ////
+//// ////
+//// ////
+//// To Do: ////
+//// nothing ////
+//// ////
+//// Author(s): ////
+//// - Dinesh Annayya, dinesha@opencores.org ////
+//// ////
+//// Revision : ////
+//// 0.0 - 29th Feb 2021, Dinesh A ////
+//// Initial version ////
+///
+//// ////
+//////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2000 Authors and OPENCORES.ORG ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer. ////
+//// ////
+//// This source file is free software; you can redistribute it ////
+//// and/or modify it under the terms of the GNU Lesser General ////
+//// Public License as published by the Free Software Foundation; ////
+//// either version 2.1 of the License, or (at your option) any ////
+//// later version. ////
+//// ////
+//// This source is distributed in the hope that it will be ////
+//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
+//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
+//// PURPOSE. See the GNU Lesser General Public License for more ////
+//// details. ////
+//// ////
+//// You should have received a copy of the GNU Lesser General ////
+//// Public License along with this source; if not, download it ////
+//// from http://www.opencores.org/lgpl.shtml ////
+//// ////
+//////////////////////////////////////////////////////////////////////
+// Clock-in is east pad direction
+// clock out give in other three direction for better placement
+/////////////////////////////////////////////////////////////////////
+module clk_skew_adjust(clk_in, sel, clk_out);
+ input clk_in;
+ output clk_out;
+ input [3:0] sel;
+ wire in0;
+ wire in1;
+ wire in2;
+ wire in3;
+ wire in4;
+ wire in5;
+ wire in6;
+ wire in7;
+ wire in8;
+ wire in9;
+ wire in10;
+ wire in11;
+ wire in12;
+ wire in13;
+ wire in14;
+ wire in15;
+
+ wire clk_d1;
+ wire clk_d2;
+ wire clk_d3;
+ wire clk_d4;
+ wire clk_d5;
+ wire clk_d6;
+ wire clk_d7;
+ wire clk_d8;
+ wire clk_d9;
+ wire clk_d10;
+ wire clk_d11;
+ wire clk_d12;
+ wire clk_d13;
+ wire clk_d14;
+ wire clk_d15;
+
+ wire d00;
+ wire d01;
+ wire d02;
+ wire d03;
+ wire d04;
+ wire d05;
+ wire d06;
+ wire d07;
+ wire d10;
+ wire d11;
+ wire d12;
+ wire d13;
+ wire d20;
+ wire d21;
+ 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));
+
+
+ // Tap point selection
+ assign in0 = clk_in;
+ assign in1 = clk_d1;
+ assign in2 = clk_d2;
+ assign in3 = clk_d3;
+ assign in4 = clk_d4;
+ assign in5 = clk_d5;
+ assign in6 = clk_d6;
+ assign in7 = clk_d7;
+ assign in8 = clk_d8;
+ assign in9 = clk_d9;
+ assign in10 = clk_d10;
+ assign in11 = clk_d11;
+ assign in12 = clk_d12;
+ assign in13 = clk_d13;
+ assign in14 = clk_d14;
+ assign in15 = clk_d15;
+
+
+ // first level mux - 8
+ sky130_fd_sc_hd__mux2_1 u_mux_level_00 ( .X (d00) , .A0 (in0), .A1(in1), .S(sel[0]));
+ sky130_fd_sc_hd__mux2_1 u_mux_level_01 ( .X (d01) , .A0 (in2), .A1(in3), .S(sel[0]));
+ sky130_fd_sc_hd__mux2_1 u_mux_level_02 ( .X (d02) , .A0 (in4), .A1(in5), .S(sel[0]));
+ sky130_fd_sc_hd__mux2_1 u_mux_level_03 ( .X (d03) , .A0 (in6), .A1(in7), .S(sel[0]));
+ sky130_fd_sc_hd__mux2_1 u_mux_level_04 ( .X (d04) , .A0 (in8), .A1(in9), .S(sel[0]));
+ sky130_fd_sc_hd__mux2_1 u_mux_level_05 ( .X (d05) , .A0 (in10), .A1(in11), .S(sel[0]));
+ sky130_fd_sc_hd__mux2_1 u_mux_level_06 ( .X (d06) , .A0 (in12), .A1(in13), .S(sel[0]));
+ sky130_fd_sc_hd__mux2_1 u_mux_level_07 ( .X (d07) , .A0 (in14), .A1(in15), .S(sel[0]));
+
+ // second level mux - 4
+ sky130_fd_sc_hd__mux2_1 u_mux_level_10 ( .X (d10) , .A0 (d00), .A1(d01), .S(sel[1]));
+ sky130_fd_sc_hd__mux2_1 u_mux_level_11 ( .X (d11) , .A0 (d02), .A1(d03), .S(sel[1]));
+ sky130_fd_sc_hd__mux2_1 u_mux_level_12 ( .X (d12) , .A0 (d04), .A1(d05), .S(sel[1]));
+ sky130_fd_sc_hd__mux2_1 u_mux_level_13 ( .X (d13) , .A0 (d06), .A1(d07), .S(sel[1]));
+
+ // third level mux - 2
+ sky130_fd_sc_hd__mux2_1 u_mux_level_20 ( .X (d20) , .A0 (d10), .A1(d11), .S(sel[2]));
+ 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]));
+
+
+ assign clk_out = d30;
+
+endmodule
diff --git a/verilog/rtl/clk_skew_adjust/synth/Makefile b/verilog/rtl/clk_skew_adjust/synth/Makefile
new file mode 100644
index 0000000..f6ae1df
--- /dev/null
+++ b/verilog/rtl/clk_skew_adjust/synth/Makefile
@@ -0,0 +1,49 @@
+# //////////////////////////////////////////////////////////////////////////////
+# // 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: Dinesh Annayya <dinesha@opencores.org>
+# // //////////////////////////////////////////////////////////////////////////
+#------------------------------------------------------------------------------
+# Makefile for Synthesis
+#------------------------------------------------------------------------------
+
+# Paths
+export ROOT_DIR := $(shell pwd)
+export REPORT_DIR := $(ROOT_DIR)/reports
+export NETLIST_DIR := $(ROOT_DIR)/netlist
+export TMP_DIR := $(ROOT_DIR)/tmp
+
+
+# Targets
+.PHONY: clean create synth
+
+default: clean create synth
+
+synth: clean create
+ yosys -g -c synth.tcl -l synth.log
+
+create:
+ mkdir -p ./tmp/synthesis;
+ mkdir -p ./reports;
+ mkdir -p ./netlist;
+ $(OPENLANE_ROOT)/scripts/libtrim.pl $(PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__tt_025C_1v80.lib $(PDK_ROOT)/sky130A/libs.tech/openlane/sky130_fd_sc_hd/no_synth.cells > ./tmp/trimmed.lib
+
+
+
+clean:
+ $(RM) -R synth.log
+ $(RM) -R $(REPORT_DIR)
+ $(RM) -R $(NETLIST_DIR)
+ $(RM) -R $(TMP_DIR)
diff --git a/verilog/rtl/clk_skew_adjust/synth/synth.tcl b/verilog/rtl/clk_skew_adjust/synth/synth.tcl
new file mode 100755
index 0000000..b7adea6
--- /dev/null
+++ b/verilog/rtl/clk_skew_adjust/synth/synth.tcl
@@ -0,0 +1,385 @@
+# //////////////////////////////////////////////////////////////////////////////
+# // 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: Dinesh Annayya <dinesha@opencores.org>
+# // //////////////////////////////////////////////////////////////////////////
+# inputs expected as env vars
+#set opt $::env(SYNTH_OPT)
+########### config.tcl ##################
+# User config
+
+# User config
+set ::env(DESIGN_DIR) ../
+
+set ::env(PROJ_DIR) ../../../../
+
+# User config
+set ::env(DESIGN_NAME) clk_mux
+
+# Change if needed
+set ::env(VERILOG_FILES) [glob \
+ ../src/clk_mux.v ]
+
+
+set ::env(SYNTH_DEFINES) [list YOSYS ]
+
+
+set ::env(LIB_SYNTH) ./tmp/trimmed.lib
+
+
+# Fill this
+set ::env(CLOCK_PERIOD) "10"
+#set ::env(CLOCK_PORT) "mclk"
+set ::env(CLOCK_TREE_SYNTH) 0
+
+set ::env(RUN_SIMPLE_CTS) 0
+set ::env(SYNTH_BUFFERING) 0
+set ::env(SYNTH_SIZING) 0
+
+set ::env(SYNTH_DRIVING_CELL) "sky130_fd_sc_hd__inv_8"
+set ::env(SYNTH_CAP_LOAD) "17.65"
+set ::env(SYNTH_MAX_TRAN) "[expr {0.1*10.0}]"
+
+set ::env(SYNTH_MAX_FANOUT) 6
+set ::env(FP_CORE_UTIL) 50
+set ::env(PL_TARGET_DENSITY) [ expr ($::env(FP_CORE_UTIL)+5) / 100.0 ]
+set ::env(CELL_PAD) 4
+
+set ::env(SYNTH_NO_FLAT) "0"
+
+
+set ::env(SYNTH_STRATEGY) "AREA 0"
+set ::env(SYNTH_TIELO_PORT) "sky130_fd_sc_hd__conb_1 LO"
+set ::env(SYNTH_TIEHI_PORT) "sky130_fd_sc_hd__conb_1 HI"
+set ::env(SYNTH_MIN_BUF_PORT) "sky130_fd_sc_hd__buf_2 A X"
+
+
+#set ::env(CLOCK_NET) $::env(CLOCK_PORT)
+
+
+
+set ::env(yosys_tmp_file_tag) "./tmp/"
+set ::env(TMP_DIR) "./tmp/"
+set ::env(yosys_netlist_dir) "./netlist"
+set ::env(yosys_report_file_tag) "./reports/yosys"
+set ::env(yosys_result_file_tag) "./reports/yosys.synthesis"
+
+set ::env(SAVE_NETLIST) $::env(yosys_netlist_dir)/$::env(DESIGN_NAME).gv
+
+
+
+########### End of config.tcl
+set buffering $::env(SYNTH_BUFFERING)
+set sizing $::env(SYNTH_SIZING)
+
+yosys -import
+
+set vtop $::env(DESIGN_NAME)
+#set sdc_file $::env(SDC_FILE)
+set sclib $::env(LIB_SYNTH)
+
+if { [info exists ::env(SYNTH_DEFINES) ] } {
+ foreach define $::env(SYNTH_DEFINES) {
+ log "Defining $define"
+ verilog_defines -D$define
+ }
+}
+
+set vIdirsArgs ""
+if {[info exist ::env(VERILOG_INCLUDE_DIRS)]} {
+ foreach dir $::env(VERILOG_INCLUDE_DIRS) {
+ log "Adding include file -I$dir "
+ lappend vIdirsArgs "-I$dir"
+ }
+ set vIdirsArgs [join $vIdirsArgs]
+}
+
+
+
+if { [info exists ::env(EXTRA_LIBS) ] } {
+ foreach lib $::env(EXTRA_LIBS) {
+ read_liberty {*}$vIdirsArgs -lib -ignore_miss_dir -setattr blackbox $lib
+ }
+}
+
+
+
+# ns expected (in sdc as well)
+set clock_period [expr {$::env(CLOCK_PERIOD)*1000}]
+
+set driver $::env(SYNTH_DRIVING_CELL)
+set cload $::env(SYNTH_CAP_LOAD)
+# input pin cap of IN_3VX8
+set max_FO $::env(SYNTH_MAX_FANOUT)
+if {![info exist ::env(SYNTH_MAX_TRAN)]} {
+ set ::env(SYNTH_MAX_TRAN) [expr {0.1*$clock_period}]
+} else {
+ set ::env(SYNTH_MAX_TRAN) [expr {$::env(SYNTH_MAX_TRAN) * 1000}]
+}
+set max_Tran $::env(SYNTH_MAX_TRAN)
+
+
+# Mapping parameters
+set A_factor 0.00
+set B_factor 0.88
+set F_factor 0.00
+
+# Don't change these unless you know what you are doing
+set stat_ext ".stat.rpt"
+set chk_ext ".chk.rpt"
+set gl_ext ".gl.v"
+set constr_ext ".$clock_period.constr"
+set timing_ext ".timing.txt"
+set abc_ext ".abc"
+
+
+# get old sdc, add library specific stuff for abc scripts
+set sdc_file $::env(yosys_tmp_file_tag).sdc
+set outfile [open ${sdc_file} w]
+#puts $outfile $sdc_data
+puts $outfile "set_driving_cell ${driver}"
+puts $outfile "set_load ${cload}"
+close $outfile
+
+
+# ABC Scrips
+set abc_rs_K "resub,-K,"
+set abc_rs "resub"
+set abc_rsz "resub,-z"
+set abc_rw_K "rewrite,-K,"
+set abc_rw "rewrite"
+set abc_rwz "rewrite,-z"
+set abc_rf "refactor"
+set abc_rfz "refactor,-z"
+set abc_b "balance"
+
+set abc_resyn2 "${abc_b}; ${abc_rw}; ${abc_rf}; ${abc_b}; ${abc_rw}; ${abc_rwz}; ${abc_b}; ${abc_rfz}; ${abc_rwz}; ${abc_b}"
+set abc_share "strash; multi,-m; ${abc_resyn2}"
+set abc_resyn2a "${abc_b};${abc_rw};${abc_b};${abc_rw};${abc_rwz};${abc_b};${abc_rwz};${abc_b}"
+set abc_resyn3 "balance;resub;resub,-K,6;balance;resub,-z;resub,-z,-K,6;balance;resub,-z,-K,5;balance"
+set abc_resyn2rs "${abc_b};${abc_rs_K},6;${abc_rw};${abc_rs_K},6,-N,2;${abc_rf};${abc_rs_K},8;${abc_rw};${abc_rs_K},10;${abc_rwz};${abc_rs_K},10,-N,2;${abc_b},${abc_rs_K},12;${abc_rfz};${abc_rs_K},12,-N,2;${abc_rwz};${abc_b}"
+
+set abc_choice "fraig_store; ${abc_resyn2}; fraig_store; ${abc_resyn2}; fraig_store; fraig_restore"
+set abc_choice2 "fraig_store; balance; fraig_store; ${abc_resyn2}; fraig_store; ${abc_resyn2}; fraig_store; ${abc_resyn2}; fraig_store; fraig_restore"
+
+set abc_map_old_cnt "map,-p,-a,-B,0.2,-A,0.9,-M,0"
+set abc_map_old_dly "map,-p,-B,0.2,-A,0.9,-M,0"
+set abc_retime_area "retime,-D,{D},-M,5"
+set abc_retime_dly "retime,-D,{D},-M,6"
+set abc_map_new_area "amap,-m,-Q,0.1,-F,20,-A,20,-C,5000"
+
+set abc_area_recovery_1 "${abc_choice}; map;"
+set abc_area_recovery_2 "${abc_choice2}; map;"
+
+set map_old_cnt "map,-p,-a,-B,0.2,-A,0.9,-M,0"
+set map_old_dly "map,-p,-B,0.2,-A,0.9,-M,0"
+set abc_retime_area "retime,-D,{D},-M,5"
+set abc_retime_dly "retime,-D,{D},-M,6"
+set abc_map_new_area "amap,-m,-Q,0.1,-F,20,-A,20,-C,5000"
+
+if {$buffering==1} {
+ set abc_fine_tune "buffer,-N,${max_FO},-S,${max_Tran};upsize,{D};dnsize,{D}"
+} elseif {$sizing} {
+ set abc_fine_tune "upsize,{D};dnsize,{D}"
+} else {
+ set abc_fine_tune ""
+}
+
+
+set delay_scripts [list \
+ "+read_constr,${sdc_file};fx;mfs;strash;refactor;${abc_resyn2};${abc_retime_dly}; scleanup;${abc_map_old_dly};retime,-D,{D};${abc_fine_tune};stime,-p;print_stats -m" \
+ \
+ "+read_constr,${sdc_file};fx;mfs;strash;refactor;${abc_resyn2};${abc_retime_dly}; scleanup;${abc_choice2};${abc_map_old_dly};${abc_area_recovery_2}; retime,-D,{D};${abc_fine_tune};stime,-p;print_stats -m" \
+ \
+ "+read_constr,${sdc_file};fx;mfs;strash;refactor;${abc_resyn2};${abc_retime_dly}; scleanup;${abc_choice};${abc_map_old_dly};${abc_area_recovery_1}; retime,-D,{D};${abc_fine_tune};stime,-p;print_stats -m" \
+ \
+ "+read_constr,${sdc_file};fx;mfs;strash;refactor;${abc_resyn2};${abc_retime_area};scleanup;${abc_choice2};${abc_map_new_area};${abc_choice2};${abc_map_old_dly};retime,-D,{D};${abc_fine_tune};stime,-p;print_stats -m" \
+ ]
+
+set area_scripts [list \
+ "+read_constr,${sdc_file};fx;mfs;strash;refactor;${abc_resyn2};${abc_retime_area};scleanup;${abc_choice2};${abc_map_new_area};retime,-D,{D};${abc_fine_tune};stime,-p;print_stats -m" \
+ \
+ "+read_constr,${sdc_file};fx;mfs;strash;refactor;${abc_resyn2};${abc_retime_area};scleanup;${abc_choice2};${abc_map_new_area};${abc_choice2};${abc_map_new_area};retime,-D,{D};${abc_fine_tune};stime,-p;print_stats -m" \
+ \
+ "+read_constr,${sdc_file};fx;mfs;strash;refactor;${abc_choice2};${abc_retime_area};scleanup;${abc_choice2};${abc_map_new_area};${abc_choice2};${abc_map_new_area};retime,-D,{D};${abc_fine_tune};stime,-p;print_stats -m" \
+ ]
+
+set all_scripts [list {*}$delay_scripts {*}$area_scripts]
+
+set strategy_parts [split $::env(SYNTH_STRATEGY)]
+
+proc synth_strategy_format_err { } {
+ upvar area_scripts area_scripts
+ upvar delay_scripts delay_scripts
+ log -stderr "\[ERROR] Misformatted SYNTH_STRATEGY (\"$::env(SYNTH_STRATEGY)\")."
+ log -stderr "\[ERROR] Correct format is \"DELAY|AREA 0-[expr [llength $delay_scripts]-1]|0-[expr [llength $area_scripts]-1]\"."
+ exit 1
+}
+
+if { [llength $strategy_parts] != 2 } {
+ synth_strategy_format_err
+}
+
+set strategy_type [lindex $strategy_parts 0]
+set strategy_type_idx [lindex $strategy_parts 1]
+
+if { $strategy_type != "AREA" && $strategy_type != "DELAY" } {
+ log -stderr "\[ERROR] AREA|DELAY tokens not found. ($strategy_type)"
+ synth_strategy_format_err
+}
+
+if { $strategy_type == "DELAY" && $strategy_type_idx >= [llength $delay_scripts] } {
+ log -stderr "\[ERROR] strategy index ($strategy_type_idx) is too high."
+ synth_strategy_format_err
+}
+
+if { $strategy_type == "AREA" && $strategy_type_idx >= [llength $area_scripts] } {
+ log -stderr "\[ERROR] strategy index ($strategy_type_idx) is too high."
+ synth_strategy_format_err
+}
+
+if { $strategy_type == "DELAY" } {
+ set strategy $strategy_type_idx
+} else {
+ set strategy [expr {[llength $delay_scripts]+$strategy_type_idx}]
+}
+
+
+for { set i 0 } { $i < [llength $::env(VERILOG_FILES)] } { incr i } {
+ read_verilog -sv {*}$vIdirsArgs [lindex $::env(VERILOG_FILES) $i]
+}
+
+if { [info exists ::env(VERILOG_FILES_BLACKBOX)] } {
+ foreach verilog_file $::env(VERILOG_FILES_BLACKBOX) {
+ read_verilog -sv {*}$vIdirsArgs -lib $verilog_file
+ }
+}
+select -module $vtop
+show -format dot -prefix $::env(TMP_DIR)/synthesis/hierarchy
+select -clear
+
+hierarchy -check -top $vtop
+
+# Infer tri-state buffers.
+set tbuf_map false
+if { [info exists ::env(TRISTATE_BUFFER_MAP)] } {
+ if { [file exists $::env(TRISTATE_BUFFER_MAP)] } {
+ set tbuf_map true
+ tribuf
+ } else {
+ log "WARNING: TRISTATE_BUFFER_MAP is defined but could not be found: $::env(TRISTATE_BUFFER_MAP)"
+ }
+}
+
+if { $::env(SYNTH_NO_FLAT) } {
+ synth -top $vtop
+} else {
+ synth -top $vtop -flatten
+}
+
+share -aggressive
+opt
+opt_clean -purge
+
+tee -o "$::env(yosys_report_file_tag)_pre.stat" stat
+
+# Map tri-state buffers.
+if { $tbuf_map } {
+ log {mapping tbuf}
+ techmap -map $::env(TRISTATE_BUFFER_MAP)
+ simplemap
+}
+
+# handle technology mapping of 4-MUX, and tell Yosys to infer 4-muxes
+if { [info exists ::env(SYNTH_MUX4_MAP)] && [file exists $::env(SYNTH_MUX4_MAP)] } {
+ muxcover -mux4
+ techmap -map $::env(SYNTH_MUX4_MAP)
+ simplemap
+}
+
+# handle technology mapping of 2-MUX
+if { [info exists ::env(SYNTH_MUX_MAP)] && [file exists $::env(SYNTH_MUX_MAP)] } {
+ techmap -map $::env(SYNTH_MUX_MAP)
+ simplemap
+}
+
+# handle technology mapping of latches
+if { [info exists ::env(SYNTH_LATCH_MAP)] && [file exists $::env(SYNTH_LATCH_MAP)] } {
+ techmap -map $::env(SYNTH_LATCH_MAP)
+ simplemap
+}
+
+dfflibmap -liberty $sclib
+tee -o "$::env(yosys_report_file_tag)_dff.stat" stat
+
+if { [info exists ::env(SYNTH_EXPLORE)] && $::env(SYNTH_EXPLORE) } {
+ design -save myDesign
+
+ for { set index 0 } { $index < [llength $all_scripts] } { incr index } {
+ log "\[INFO\]: ABC: WireLoad : S_$index"
+ design -load myDesign
+
+ abc -D $clock_period \
+ -constr "$sdc_file" \
+ -liberty $sclib \
+ -script [lindex $all_scripts $index]
+
+ setundef -zero
+
+ hilomap -hicell {*}$::env(SYNTH_TIEHI_PORT) -locell {*}$::env(SYNTH_TIELO_PORT)
+
+ # get rid of the assignments that make verilog2def fail
+ splitnets
+ opt_clean -purge
+ insbuf -buf {*}$::env(SYNTH_MIN_BUF_PORT)
+
+ tee -o "$::env(yosys_report_file_tag)_$index$chk_ext" check
+ write_verilog -noattr -noexpr -nohex -nodec -defparam "$::env(yosys_result_file_tag)_$index.v"
+ design -reset
+ }
+} else {
+
+ log "\[INFO\]: ABC: WireLoad : S_$strategy"
+
+ abc -D $clock_period \
+ -constr "$sdc_file" \
+ -liberty $sclib \
+ -script [lindex $all_scripts $strategy] \
+ -showtmp;
+
+ setundef -zero
+
+ hilomap -hicell {*}$::env(SYNTH_TIEHI_PORT) -locell {*}$::env(SYNTH_TIELO_PORT)
+
+ # get rid of the assignments that make verilog2def fail
+ splitnets
+ opt_clean -purge
+ insbuf -buf {*}$::env(SYNTH_MIN_BUF_PORT)
+
+ tee -o "$::env(yosys_report_file_tag)_$strategy$chk_ext" check
+ write_verilog -noattr -noexpr -nohex -nodec -defparam "$::env(SAVE_NETLIST)"
+}
+
+if { $::env(SYNTH_NO_FLAT) } {
+ design -reset
+ file copy -force $::env(SAVE_NETLIST) $::env(yosys_tmp_file_tag)_unflat.v
+ read_verilog -sv $::env(SAVE_NETLIST)
+ synth -top $vtop -flatten
+ splitnets
+ opt_clean -purge
+ insbuf -buf {*}$::env(SYNTH_MIN_BUF_PORT)
+ write_verilog -noattr -noexpr -nohex -nodec -defparam "$::env(SAVE_NETLIST)"
+ tee -o "$::env(yosys_report_file_tag)_$strategy$chk_ext" check
+}
diff --git a/verilog/rtl/digital_core/src/digital_core.sv b/verilog/rtl/digital_core/src/digital_core.sv
index 2ead606..2e042cd 100644
--- a/verilog/rtl/digital_core/src/digital_core.sv
+++ b/verilog/rtl/digital_core/src/digital_core.sv
@@ -112,28 +112,29 @@
//////////////////////////////////////////////////////////////////////
-module digital_core
-#(
- parameter SDR_DW = 8, // SDR Data Width
- parameter SDR_BW = 1, // SDR Byte Width
- parameter WB_WIDTH = 32 // WB ADDRESS/DARA WIDTH
- ) (
+module digital_core (
`ifdef USE_POWER_PINS
+ inout vdda1, // User area 1 3.3V supply
+ inout vdda2, // User area 2 3.3V supply
+ inout vssa1, // User area 1 analog ground
+ inout vssa2, // User area 2 analog ground
inout vccd1, // User area 1 1.8V supply
+ inout vccd2, // User area 2 1.8v supply
inout vssd1, // User area 1 digital ground
+ inout vssd2, // User area 2 digital ground
`endif
input wire wb_clk_i , // System clock
input wire user_clock2 , // user Clock
input wire wb_rst_i , // Regular Reset signal
- input wire wbd_ext_cyc_i , // strobe/request
- input wire wbd_ext_stb_i , // strobe/request
- input wire [WB_WIDTH-1:0] wbd_ext_adr_i , // address
- input wire wbd_ext_we_i , // write
- input wire [WB_WIDTH-1:0] wbd_ext_dat_i , // data output
- input wire [3:0] wbd_ext_sel_i , // byte enable
- output wire [WB_WIDTH-1:0] wbd_ext_dat_o , // data input
- output wire wbd_ext_ack_o , // acknowlegement
+ input wire wbs_cyc_i , // strobe/request
+ input wire wbs_stb_i , // strobe/request
+ input wire [WB_WIDTH-1:0] wbs_adr_i , // address
+ input wire wbs_we_i , // write
+ input wire [WB_WIDTH-1:0] wbs_dat_i , // data output
+ input wire [3:0] wbs_sel_i , // byte enable
+ output wire [WB_WIDTH-1:0] wbs_dat_o , // data input
+ output wire wbs_ack_o , // acknowlegement
// Logic Analyzer Signals
@@ -155,6 +156,9 @@
// Local Parameter Declaration
// --------------------------------------------------
+parameter SDR_DW = 8; // SDR Data Width
+parameter SDR_BW = 1; // SDR Byte Width
+parameter WB_WIDTH = 32; // WB ADDRESS/DARA WIDTH
//---------------------------------------------------------------------
// Wishbone Risc V Instruction Memory Interface
@@ -263,6 +267,30 @@
wire [7:0] cfg_glb_ctrl ;
wire [31:0] cfg_clk_ctrl1 ;
wire [31:0] cfg_clk_ctrl2 ;
+wire [3:0] cfg_cska_wi ; // clock skew adjust for wishbone interconnect
+wire [3:0] cfg_cska_riscv; // clock skew adjust for riscv
+wire [3:0] cfg_cska_uart ; // clock skew adjust for uart
+wire [3:0] cfg_cska_spi ; // clock skew adjust for spi
+wire [3:0] cfg_cska_sdram; // clock skew adjust for sdram
+wire [3:0] cfg_cska_glbl ; // clock skew adjust for global reg
+wire [3:0] cfg_cska_wh ; // clock skew adjust for web host
+
+
+wire wbd_clk_wi ; // clock for wishbone interconnect
+wire wbd_clk_riscv ; // clock for riscv
+wire wbd_clk_uart ; // clock for uart
+wire wbd_clk_spi ; // clock for spi
+wire wbd_clk_sdram ; // clock for sdram
+wire wbd_clk_glbl ; // clock for global reg
+wire wbd_clk_wh ; // clock for global reg
+
+wire [3:0] cfg_cska_sd_co; // clock skew adjust for sdram clock out
+wire [3:0] cfg_cska_sd_ci; // clock skew adjust for sdram clock input
+wire [3:0] cfg_cska_sp_co; // clock skew adjust for SPI clock out
+
+wire io_out_29_ ; // Internally tapped SDRAM clock
+wire io_in_29_ ; // Clock Skewed Pad SDRAM clock
+wire io_in_30_ ; // SPI clock out
//------------------------------------------------
// Configuration Parameter
@@ -289,11 +317,22 @@
/////////////////////////////////////////////////////////
// Generating acive low wishbone reset
// //////////////////////////////////////////////////////
-assign wbd_int_rst_n = cfg_glb_ctrl[0];
-assign cpu_rst_n = cfg_glb_ctrl[1];
-assign spi_rst_n = cfg_glb_ctrl[2];
-assign sdram_rst_n = cfg_glb_ctrl[3];
+assign wbd_int_rst_n = cfg_glb_ctrl[0];
+assign cpu_rst_n = cfg_glb_ctrl[1];
+assign spi_rst_n = cfg_glb_ctrl[2];
+assign sdram_rst_n = cfg_glb_ctrl[3];
+assign cfg_cska_wi = cfg_clk_ctrl1[3:0];
+assign cfg_cska_riscv = cfg_clk_ctrl1[7:4];
+assign cfg_cska_uart = cfg_clk_ctrl1[11:8];
+assign cfg_cska_spi = cfg_clk_ctrl1[15:12];
+assign cfg_cska_sdram = cfg_clk_ctrl1[19:16];
+assign cfg_cska_glbl = cfg_clk_ctrl1[23:20];
+assign cfg_cska_wh = cfg_clk_ctrl1[27:24];
+
+assign cfg_cska_sd_co = cfg_clk_ctrl2[3:0]; // SDRAM clock out control
+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
wb_host u_wb_host(
@@ -301,19 +340,19 @@
// Master Port
.wbm_rst_i (wb_rst_i ),
.wbm_clk_i (wb_clk_i ),
- .wbm_cyc_i (wbd_ext_cyc_i ),
- .wbm_stb_i (wbd_ext_stb_i ),
- .wbm_adr_i (wbd_ext_adr_i ),
- .wbm_we_i (wbd_ext_we_i ),
- .wbm_dat_i (wbd_ext_dat_i ),
- .wbm_sel_i (wbd_ext_sel_i ),
- .wbm_dat_o (wbd_ext_dat_o ),
- .wbm_ack_o (wbd_ext_ack_o ),
+ .wbm_cyc_i (wbs_cyc_i ),
+ .wbm_stb_i (wbs_stb_i ),
+ .wbm_adr_i (wbs_adr_i ),
+ .wbm_we_i (wbs_we_i ),
+ .wbm_dat_i (wbs_dat_i ),
+ .wbm_sel_i (wbs_sel_i ),
+ .wbm_dat_o (wbs_dat_o ),
+ .wbm_ack_o (wbs_ack_o ),
.wbm_err_o ( ),
// Slave Port
.wbs_clk_out (wbd_clk_int ),
- .wbs_clk_i (wbd_clk_int ),
+ .wbs_clk_i (wbd_clk_wh ),
.wbs_cyc_o (wbd_int_cyc_i ),
.wbs_stb_o (wbd_int_stb_i ),
.wbs_adr_o (wbd_int_adr_i ),
@@ -362,8 +401,8 @@
// .test_rst_n (1'b1 ), // Moved inside IP
- .wb_rst_n (wbd_int_rst_n ),
- .wb_clk (wbd_clk_int ),
+ .wb_rst_n (wbd_int_rst_n ),
+ .wb_clk (wbd_clk_riscv ),
// Instruction memory interface
.wbd_imem_stb_o (wbd_riscv_imem_stb_i ),
.wbd_imem_adr_o (wbd_riscv_imem_adr_i ),
@@ -399,7 +438,7 @@
`endif
) u_spi_master
(
- .mclk (wbd_clk_int ),
+ .mclk (wbd_clk_spi ),
.rst_n (spi_rst_n ),
.wbd_stb_i (wbd_spim_stb_o ),
@@ -415,7 +454,7 @@
// Pad Interface
.io_in (io_in[35:30] ),
- .io_out (io_out[35:30] ),
+ .io_out ({io_out[35:31],io_in_30_} ),
.io_oeb (io_oeb[35:30] )
);
@@ -435,7 +474,7 @@
// WB bus
.wb_rst_n (wbd_int_rst_n ),
- .wb_clk_i (wbd_clk_int ),
+ .wb_clk_i (wbd_clk_sdram ),
.wb_stb_i (wbd_sdram_stb_o ),
.wb_addr_i (wbd_sdram_adr_o ),
@@ -452,9 +491,9 @@
.sdram_resetn (sdram_rst_n ),
/** Pad Interface **/
- .io_in (io_in[29:0] ),
+ .io_in ({io_in_29_,io_in[28:0]} ),
.io_oeb (io_oeb[29:0] ),
- .io_out (io_out[29:0] ),
+ .io_out ({io_out_29_,io_out[28:0]} ),
/* Parameters */
.sdr_init_done (sdr_init_done ),
@@ -473,7 +512,7 @@
wb_interconnect u_intercon (
- .clk_i (wbd_clk_int ),
+ .clk_i (wbd_clk_wi ),
.rst_n (wbd_int_rst_n ),
// Master 0 Interface
@@ -557,8 +596,9 @@
glbl_cfg u_glbl_cfg (
- .mclk (wbd_clk_int ),
+ .mclk (wbd_clk_glbl ),
.reset_n (wbd_int_rst_n ),
+ .user_clock1 (wb_clk_i ),
.user_clock2 (user_clock2 ),
.device_idcode ( ),
@@ -608,7 +648,7 @@
uart_core u_uart_core (
.arst_n (wbd_int_rst_n ), // async reset
- .app_clk (wbd_clk_int ),
+ .app_clk (wbd_clk_uart ),
// Reg Bus Interface Signal
.reg_cs (wbd_uart_stb_o ),
@@ -628,5 +668,128 @@
);
+////////////////////////////////////////////////////////////////
+// Clock Skew adjust module
+// ///////////////////////////////////////////////////////////
+
+// Wishbone interconnect clock skew control
+clk_skew_adjust u_skew_wi
+ (
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ),// User area 1 1.8V supply
+ .vssd1 (vssd1 ),// User area 1 digital ground
+`endif
+ .clk_in (wbd_clk_int ),
+ .sel (cfg_cska_wi ),
+ .clk_out (wbd_clk_wi )
+ );
+
+// riscv clock skew control
+clk_skew_adjust u_skew_riscv
+ (
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ),// User area 1 1.8V supply
+ .vssd1 (vssd1 ),// User area 1 digital ground
+`endif
+ .clk_in (wbd_clk_int ),
+ .sel (cfg_cska_riscv ),
+ .clk_out (wbd_clk_riscv )
+ );
+
+// uart clock skew control
+clk_skew_adjust u_skew_uart
+ (
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ),// User area 1 1.8V supply
+ .vssd1 (vssd1 ),// User area 1 digital ground
+`endif
+ .clk_in (wbd_clk_int ),
+ .sel (cfg_cska_uart ),
+ .clk_out (wbd_clk_uart )
+ );
+
+// spi clock skew control
+clk_skew_adjust u_skew_spi
+ (
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ),// User area 1 1.8V supply
+ .vssd1 (vssd1 ),// User area 1 digital ground
+`endif
+ .clk_in (wbd_clk_int ),
+ .sel (cfg_cska_spi ),
+ .clk_out (wbd_clk_spi )
+ );
+
+// sdram clock skew control
+clk_skew_adjust u_skew_sdram
+ (
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ),// User area 1 1.8V supply
+ .vssd1 (vssd1 ),// User area 1 digital ground
+`endif
+ .clk_in (wbd_clk_int ),
+ .sel (cfg_cska_sdram ),
+ .clk_out (wbd_clk_sdram )
+ );
+
+// global clock skew control
+clk_skew_adjust u_skew_glbl
+ (
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ),// User area 1 1.8V supply
+ .vssd1 (vssd1 ),// User area 1 digital ground
+`endif
+ .clk_in (wbd_clk_int ),
+ .sel (cfg_cska_glbl ),
+ .clk_out (wbd_clk_glbl )
+ );
+
+// wb_host clock skew control
+clk_skew_adjust u_skew_wh
+ (
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ),// User area 1 1.8V supply
+ .vssd1 (vssd1 ),// User area 1 digital ground
+`endif
+ .clk_in (wbd_clk_int ),
+ .sel (cfg_cska_wh ),
+ .clk_out (wbd_clk_wh )
+ );
+
+// SDRAM clock out clock skew control
+clk_skew_adjust u_skew_sd_co
+ (
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ),// User area 1 1.8V supply
+ .vssd1 (vssd1 ),// User area 1 digital ground
+`endif
+ .clk_in (io_out_29_ ),
+ .sel (cfg_cska_sd_co ),
+ .clk_out (io_out[29] )
+ );
+
+// Clock Skey for PAD SDRAM clock
+clk_skew_adjust u_skew_sd_ci
+ (
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ),// User area 1 1.8V supply
+ .vssd1 (vssd1 ),// User area 1 digital ground
+`endif
+ .clk_in (io_in[29] ),
+ .sel (cfg_cska_sd_ci ),
+ .clk_out (io_in_29_ )
+ );
+
+// Clock Skey for SPI clock out
+clk_skew_adjust u_skew_sp_co
+ (
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1 ),// User area 1 1.8V supply
+ .vssd1 (vssd1 ),// User area 1 digital ground
+`endif
+ .clk_in (io_in_30_ ),
+ .sel (cfg_cska_sp_co ),
+ .clk_out (io_out[30] )
+ );
endmodule : digital_core
diff --git a/verilog/rtl/digital_core/src/glbl_cfg.sv b/verilog/rtl/digital_core/src/glbl_cfg.sv
index a91502e..74557e7 100644
--- a/verilog/rtl/digital_core/src/glbl_cfg.sv
+++ b/verilog/rtl/digital_core/src/glbl_cfg.sv
@@ -66,6 +66,7 @@
module glbl_cfg (
input logic mclk,
+ input logic user_clock1,
input logic user_clock2,
input logic reset_n,
output logic [31:0] device_idcode,
@@ -1067,7 +1068,7 @@
wire sdram_clk_div;
wire sdram_ref_clk;
-assign sdram_ref_clk = (cfg_sdram_clk_src_sel) ? user_clock2 : mclk;
+assign sdram_ref_clk = (cfg_sdram_clk_src_sel) ? user_clock2 :user_clock1;
@@ -1090,7 +1091,7 @@
wire cpu_clk_div;
wire cpu_ref_clk;
-assign cpu_ref_clk = (cfg_cpu_clk_src_sel) ? user_clock2 : mclk;
+assign cpu_ref_clk = (cfg_cpu_clk_src_sel) ? user_clock2 : user_clock1;
assign cpu_clk = (cfg_cpu_clk_div) ? cpu_clk_div : cpu_ref_clk;
@@ -1109,7 +1110,7 @@
wire rtc_clk_div;
wire rtc_ref_clk;
-assign rtc_ref_clk = (cfg_rtc_clk_src_sel) ? user_clock2 : mclk;
+assign rtc_ref_clk = (cfg_rtc_clk_src_sel) ? user_clock2 : user_clock1;
assign rtc_clk = (cfg_rtc_clk_div) ? rtc_clk_div : rtc_ref_clk;
diff --git a/verilog/rtl/lib/async_wb.sv b/verilog/rtl/lib/async_wb.sv
index 9908e54..df1fbce 100644
--- a/verilog/rtl/lib/async_wb.sv
+++ b/verilog/rtl/lib/async_wb.sv
@@ -15,7 +15,6 @@
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileContributor: Created by Dinesh Annayya <dinesha@opencores.org>
//
-/*********************************************************************
//////////////////////////////////////////////////////////////////////
//// ////
//// Async Wishbone Interface ////
diff --git a/verilog/rtl/sdram_ctrl/src/defs/sdrc_define.v b/verilog/rtl/sdram_ctrl/src/defs/sdrc_define.v
index dc66c23..2430831 100755
--- a/verilog/rtl/sdram_ctrl/src/defs/sdrc_define.v
+++ b/verilog/rtl/sdram_ctrl/src/defs/sdrc_define.v
@@ -14,8 +14,8 @@
// limitations under the License.
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileContributor: Created by Dinesh Annayya <dinesha@opencores.org>
-//
-/*********************************************************************
+///////////////////////////////////////////////////////////////////////////
+
`define SDR_REQ_ID_W 4
`define SDR_RFSH_TIMER_W 12
diff --git a/verilog/rtl/sdram_ctrl/src/top/sdrc_top.v b/verilog/rtl/sdram_ctrl/src/top/sdrc_top.v
index ab49c52..6aba2a6 100755
--- a/verilog/rtl/sdram_ctrl/src/top/sdrc_top.v
+++ b/verilog/rtl/sdram_ctrl/src/top/sdrc_top.v
@@ -55,6 +55,8 @@
at digital core level
0.4 - 27th June 2021
Unused port wb_cti_i removed
+ 0.5 - 29th June 2021
+ Wishbone Stagging FF added to break timing path
Copyright (C) 2000 Authors and OPENCORES.ORG
@@ -218,6 +220,17 @@
wire [APP_DW-1:0] app_wr_data ; // sdr write data
wire [APP_DW-1:0] app_rd_data ; // sdr read data
+//--------------------------------------------------
+// WishBone Stagging FF
+//--------------------------------------------------
+wire wb_stag_stb_i ;
+wire wb_stag_ack_o ;
+wire [APP_AW-1:0] wb_stag_addr_i ;
+wire wb_stag_we_i ; // 1 - Write, 0 - Read
+wire [APP_DW-1:0] wb_stag_dat_i ;
+wire [APP_DW/8-1:0] wb_stag_sel_i ; // Byte enable
+wire [APP_DW-1:0] wb_stag_dat_o ;
+wire wb_stag_cyc_i ;
//-----------------------------------------------------------------
// To avoid the logic at digital core, pad control are brought inside the
// block to support efabless/carvel soc enviornmental support
@@ -254,19 +267,52 @@
//wire #(1.0) sdram_pad_clk = sdram_clk;
/************** Ends Here **************************/
+
+// Adding Wishbone stagging FF to break timing path
+//
+wb_stagging u_wb_stage (
+ .clk_i (wb_clk_i ),
+ .rst_n (wb_rst_n ),
+ // WishBone Input master I/P
+ .m_wbd_dat_i (wb_dat_i ),
+ .m_wbd_adr_i (wb_addr_i ),
+ .m_wbd_sel_i (wb_sel_i ),
+ .m_wbd_we_i (wb_we_i ),
+ .m_wbd_cyc_i (wb_cyc_i ),
+ .m_wbd_stb_i (wb_stb_i ),
+ .m_wbd_tid_i ('h0 ),
+ .m_wbd_dat_o (wb_dat_o ),
+ .m_wbd_ack_o (wb_ack_o ),
+ .m_wbd_err_o ( ),
+
+ // Slave Interface
+ .s_wbd_dat_i (wb_stag_dat_o ),
+ .s_wbd_ack_i (wb_stag_ack_o ),
+ .s_wbd_err_i (1'b0 ),
+ .s_wbd_dat_o (wb_stag_dat_i ),
+ .s_wbd_adr_o (wb_stag_addr_i ),
+ .s_wbd_sel_o (wb_stag_sel_i ),
+ .s_wbd_we_o (wb_stag_we_i ),
+ .s_wbd_cyc_o (wb_stag_cyc_i ),
+ .s_wbd_stb_o (wb_stag_stb_i ),
+ .s_wbd_tid_o ( )
+
+);
+
+
wb2sdrc #(.dw(APP_DW),.tw(tw),.bl(bl),.APP_AW(APP_AW)) u_wb2sdrc (
// WB bus
.wb_rst_n (wb_rst_n ) ,
.wb_clk_i (wb_clk_i ) ,
- .wb_stb_i (wb_stb_i ) ,
- .wb_ack_o (wb_ack_o ) ,
- .wb_addr_i (wb_addr_i ) ,
- .wb_we_i (wb_we_i ) ,
- .wb_dat_i (wb_dat_i ) ,
- .wb_sel_i (wb_sel_i ) ,
- .wb_dat_o (wb_dat_o ) ,
- .wb_cyc_i (wb_cyc_i ) ,
+ .wb_stb_i (wb_stag_stb_i ) ,
+ .wb_ack_o (wb_stag_ack_o ) ,
+ .wb_addr_i (wb_stag_addr_i ) ,
+ .wb_we_i (wb_stag_we_i ) ,
+ .wb_dat_i (wb_stag_dat_i ) ,
+ .wb_sel_i (wb_stag_sel_i ) ,
+ .wb_dat_o (wb_stag_dat_o ) ,
+ .wb_cyc_i (wb_stag_cyc_i ) ,
//SDRAM Controller Hand-Shake Signal
diff --git a/verilog/rtl/sdram_ctrl/src/wb2sdrc/wb2sdrc.v b/verilog/rtl/sdram_ctrl/src/wb2sdrc/wb2sdrc.v
index 1a6cc6b..f6eadc1 100755
--- a/verilog/rtl/sdram_ctrl/src/wb2sdrc/wb2sdrc.v
+++ b/verilog/rtl/sdram_ctrl/src/wb2sdrc/wb2sdrc.v
@@ -386,3 +386,4 @@
endmodule
+
diff --git a/verilog/rtl/syntacore/scr1/sim/tests/common/link_tcm.ld b/verilog/rtl/syntacore/scr1/sim/tests/common/link_tcm.ld
index d2bccd2..1580b36 100644
--- a/verilog/rtl/syntacore/scr1/sim/tests/common/link_tcm.ld
+++ b/verilog/rtl/syntacore/scr1/sim/tests/common/link_tcm.ld
@@ -1,3 +1,4 @@
+/*
//////////////////////////////////////////////////////////////////////////////
// SPDX-FileCopyrightText: Syntacore LLC © 2016-2021
//
@@ -15,6 +16,7 @@
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileContributor: Syntacore LLC
// //////////////////////////////////////////////////////////////////////////
+*/
/*
* @file <link.ld>
* @brief bare metal tests' linker script
diff --git a/verilog/rtl/syntacore/scr1/src/includes/scr1_arch_types.svh b/verilog/rtl/syntacore/scr1/src/includes/scr1_arch_types.svh
index ebe67e6..1b1b273 100644
--- a/verilog/rtl/syntacore/scr1/src/includes/scr1_arch_types.svh
+++ b/verilog/rtl/syntacore/scr1/src/includes/scr1_arch_types.svh
@@ -87,3 +87,4 @@
} type_scr1_op_width_e;
`endif //SCR1_ARCH_TYPES_SVH
+
diff --git a/verilog/rtl/uprj_netlists.v b/verilog/rtl/uprj_netlists.v
index e31d589..8445819 100644
--- a/verilog/rtl/uprj_netlists.v
+++ b/verilog/rtl/uprj_netlists.v
@@ -16,10 +16,10 @@
// Include caravel global defines for the number of the user project IO pads
`include "defines.v"
`define USE_POWER_PINS
+`define UNIT_DELAY #1
`ifdef GL
// Assume default net type to be wire because GL netlists don't have the wire definitions
- `default_nettype wire
`include "gl/user_project_wrapper.v"
`include "gl/user_proj_example.v"
`else
@@ -91,5 +91,8 @@
`include "syntacore/scr1/src/top/scr1_imem_wb.sv"
`include "syntacore/scr1/src/top/scr1_top_wb.sv"
`include "lib/sync_fifo.sv"
-
+ // we are using netlist file for clk_skew_adjust as it has
+ // standard cell + power pin
+ `include "gl/clk_skew_adjust.v"
`endif
+
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v
index bf72715..404711c 100644
--- a/verilog/rtl/user_project_wrapper.v
+++ b/verilog/rtl/user_project_wrapper.v
@@ -85,8 +85,14 @@
digital_core u_core (
`ifdef USE_POWER_PINS
- .vccd1(vccd1), // User area 1 1.8V power
- .vssd1(vssd1), // User area 1 digital ground
+ .vdda1(vdda1), // User area 1 3.3V supply
+ .vdda2(vdda2), // User area 2 3.3V supply
+ .vssa1(vssa1), // User area 1 analog ground
+ .vssa2(vssa2), // User area 2 analog ground
+ .vccd1(vccd1), // User area 1 1.8V supply
+ .vccd2(vccd2), // User area 2 1.8v supply
+ .vssd1(vssd1), // User area 1 digital ground
+ .vssd2(vssd2), // User area 2 digital ground
`endif
.wb_clk_i(wb_clk_i),
@@ -95,14 +101,14 @@
// MGMT SoC Wishbone Slave
- .wbd_ext_cyc_i(wbs_cyc_i),
- .wbd_ext_stb_i(wbs_stb_i),
- .wbd_ext_we_i(wbs_we_i),
- .wbd_ext_sel_i(wbs_sel_i),
- .wbd_ext_adr_i(wbs_adr_i),
- .wbd_ext_dat_i(wbs_dat_i),
- .wbd_ext_ack_o(wbs_ack_o),
- .wbd_ext_dat_o(wbs_dat_o),
+ .wbs_cyc_i(wbs_cyc_i),
+ .wbs_stb_i(wbs_stb_i),
+ .wbs_we_i(wbs_we_i),
+ .wbs_sel_i(wbs_sel_i),
+ .wbs_adr_i(wbs_adr_i),
+ .wbs_dat_i(wbs_dat_i),
+ .wbs_ack_o(wbs_ack_o),
+ .wbs_dat_o(wbs_dat_o),
// Logic Analyzer
diff --git a/verilog/rtl/wb_host/src/wb_host.sv b/verilog/rtl/wb_host/src/wb_host.sv
index 6464c64..8032f11 100644
--- a/verilog/rtl/wb_host/src/wb_host.sv
+++ b/verilog/rtl/wb_host/src/wb_host.sv
@@ -135,11 +135,12 @@
logic [31:0] wbm_adr_int;
logic wbm_stb_int;
+logic [2:0] cfg_wb_clk_ctr;
+
assign wbm_rst_n = !wbm_rst_i;
assign wbs_rst_n = !wbm_rst_i;
-assign wbs_clk_out = wbm_clk_i;
assign wbm_dat_o = (reg_sel) ? reg_rdata : wbm_dat_int; // data input
assign wbm_ack_o = (reg_sel) ? reg_ack : wbm_ack_int; // acknowlegement
@@ -194,7 +195,7 @@
reg_out [31:0] = 8'd0;
case (sw_addr [1:0])
- 2'b00 : reg_out [31:0] = {24'h0,cfg_glb_ctrl [7:0]};
+ 2'b00 : reg_out [31:0] = {21'h0,cfg_wb_clk_ctr[2:0],cfg_glb_ctrl [7:0]};
2'b01 : reg_out [31:0] = {24'h0,cfg_bank_sel [7:0]};
2'b10 : reg_out [31:0] = cfg_clk_ctrl1 [31:0];
2'b11 : reg_out [31:0] = cfg_clk_ctrl2 [31:0];
@@ -204,14 +205,15 @@
-generic_register #(8,0 ) u_glb_ctrl (
- .we ({8{sw_wr_en_0}} ),
- .data_in (wbm_dat_i[7:0] ),
+generic_register #(11,0 ) u_glb_ctrl (
+ .we ({11{sw_wr_en_0}} ),
+ .data_in (wbm_dat_i[10:0] ),
.reset_n (wbm_rst_n ),
.clk (wbm_clk_i ),
//List of Outs
- .data_out (cfg_glb_ctrl[7:0] )
+ .data_out ({cfg_wb_clk_ctr[2:0],
+ cfg_glb_ctrl[7:0]} )
);
generic_register #(8,8'h30 ) u_bank_sel (
@@ -282,6 +284,28 @@
);
+//----------------------------------
+// Generate Internal WishBone Clock
+//----------------------------------
+logic wb_clk_div;
+logic cfg_wb_clk_div;
+logic [1:0] cfg_wb_clk_ratio;
+
+assign cfg_wb_clk_ratio = cfg_wb_clk_ctr[1:0];
+assign cfg_wb_clk_div = cfg_wb_clk_ctr[2];
+
+
+assign wbs_clk_out = (cfg_wb_clk_div) ? wb_clk_div : wbm_clk_i;
+
+
+clk_ctl #(1) u_wbclk (
+ // Outputs
+ .clk_o (wb_clk_div ),
+ // Inputs
+ .mclk (wbm_clk_i ),
+ .reset_n (wbm_rst_n ),
+ .clk_div_ratio (cfg_wb_clk_ratio )
+ );
endmodule