mpw6 openlane setup
diff --git a/openlane/Makefile b/openlane/Makefile index e2e91a5..4d42a79 100644 --- a/openlane/Makefile +++ b/openlane/Makefile
@@ -1,5 +1,4 @@ # 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 @@ -13,16 +12,16 @@ # limitations under the License. # # SPDX-License-Identifier: Apache-2.0 - #SHELL = sh -xv + BLOCKS = $(shell find * -maxdepth 0 -type d) CONFIG = $(foreach block,$(BLOCKS), ./$(block)/config.tcl) CLEAN = $(foreach block,$(BLOCKS), clean-$(block)) -OPENLANE_TAG = mpw5 +OPENLANE_TAG = mpw6 OPENLANE_IMAGE_NAME = riscduino/openlane:$(OPENLANE_TAG) -OPENLANE_BASIC_COMMAND = "cd /project/openlane && flow.tcl -design ./$* -save_path .. -save -tag $* -overwrite" -OPENLANE_INTERACTIVE_COMMAND = "cd /project/openlane && flow.tcl -it -file ./$*/interactive.tcl -design ./$* -save_path .. -save -tag $* -overwrite" +OPENLANE_BASIC_COMMAND = "cd $(PWD)/../openlane && flow.tcl -design ./$* -save_path .. -save -tag $* -overwrite" +OPENLANE_INTERACTIVE_COMMAND = "cd $(PWD)/../openlane && flow.tcl -design ./$* -save_path .. -save -tag $* -overwrite -it -file ./$*/interactive.tcl" all: $(BLOCKS) @@ -30,18 +29,45 @@ @echo "Missing $@. Please create a configuration for that design" @exit 1 -$(BLOCKS) : % : ./%/config.tcl FORCE +.PHONY: $(BLOCKS) +$(BLOCKS) : % : ./%/config.tcl +ifeq ($(OPENLANE_ROOT),) + @echo "Please export OPENLANE_ROOT" + @exit 1 +endif +ifeq ($(PDK_ROOT),) + @echo "Please export PDK_ROOT" + @exit 1 +endif @echo "###############################################" @sleep 1 @if [ -f ./$*/interactive.tcl ]; then\ - docker run -it \ - -v $(PWD)/..:/project \ + docker run --rm -v $(OPENLANE_ROOT):/openlane \ + -v $(PDK_ROOT):$(PDK_ROOT) \ + -v $(PWD)/..:$(PWD)/.. \ + -v $(MCW_ROOT):$(MCW_ROOT) \ + -v $(CARAVEL_ROOT):$(CARAVEL_ROOT) \ + -e MCW_ROOT=$(MCW_ROOT) \ + -e PDK_ROOT=$(PDK_ROOT) \ + -e CARAVEL_ROOT=$(CARAVEL_ROOT) \ + -e PDK=$(PDK) \ + -e TEST_MISMATCHES=tools \ + -e MISMATCHES_OK=1 \ -u $(shell id -u $(USER)):$(shell id -g $(USER)) \ $(OPENLANE_IMAGE_NAME) sh -c $(OPENLANE_INTERACTIVE_COMMAND);\ else\ - docker run -it \ - -v $(PWD)/..:/project \ + docker run --rm -v $(OPENLANE_ROOT):/openlane \ + -v $(PDK_ROOT):$(PDK_ROOT) \ + -v $(PWD)/..:$(PWD)/.. \ + -v $(CARAVEL_ROOT):$(CARAVEL_ROOT) \ + -v $(MCW_ROOT):$(MCW_ROOT) \ + -e MCW_ROOT=$(MCW_ROOT) \ + -e PDK=$(PDK) \ + -e PDK_ROOT=$(PDK_ROOT) \ + -e CARAVEL_ROOT=$(CARAVEL_ROOT) \ + -e TEST_MISMATCHES=tools \ + -e MISMATCHES_OK=1 \ -u $(shell id -u $(USER)):$(shell id -g $(USER)) \ $(OPENLANE_IMAGE_NAME) sh -c $(OPENLANE_BASIC_COMMAND);\ fi @@ -50,6 +76,25 @@ cp $*/runs/$*/PDK_SOURCES ../signoff/$*/ cp $*/runs/$*/reports/final_summary_report.csv ../signoff/$*/ +.PHONY: openlane +openlane: check-openlane-env + if [ -d "$(OPENLANE_ROOT)" ]; then\ + echo "Deleting exisiting $(OPENLANE_ROOT)" && \ + rm -rf $(OPENLANE_ROOT) && sleep 2; \ + fi + git clone https://github.com/The-OpenROAD-Project/OpenLane --branch=$(OPENLANE_TAG) --depth=1 $(OPENLANE_ROOT) && \ + cd $(OPENLANE_ROOT) && \ + export OPENLANE_IMAGE_NAME=efabless/openlane:$(OPENLANE_TAG) && \ + export IMAGE_NAME=efabless/openlane:$(OPENLANE_TAG) && \ + $(MAKE) pull-openlane + +.PHONY: check-openlane-env +check-openlane-env: +ifeq ($(OPENLANE_ROOT),) + @echo "Please export OPENLANE_ROOT" + @exit 1 +endif + FORCE: clean:
diff --git a/openlane/mbist/base.sdc b/openlane/mbist/base.sdc deleted file mode 100644 index 26a1fe6..0000000 --- a/openlane/mbist/base.sdc +++ /dev/null
@@ -1,128 +0,0 @@ -############################################################################### -# Created by write_sdc -# Sun Nov 14 09:33:23 2021 -############################################################################### -current_design mbist_top -############################################################################### -# Timing Constraints -############################################################################### -create_clock -name wb_clk_i -period 10.0000 [get_ports {wb_clk_i}] -create_clock -name wb_clk2_i -period 10.0000 [get_ports {wb_clk2_i}] -create_generated_clock -name bist_mem_clk_a -add -source [get_ports {wb_clk2_i}] -master_clock [get_clocks wb_clk2_i] -divide_by 1 -comment {Mem Clock A} [get_ports mem_clk_a] -create_generated_clock -name bist_mem_clk_b -add -source [get_ports {wb_clk2_i}] -master_clock [get_clocks wb_clk2_i] -divide_by 1 -comment {Mem Clock B} [get_ports mem_clk_b] - -set_clock_groups -name async_clock -asynchronous -comment "Async Clock group" -group [get_clocks {bist_mem_clk_a bist_mem_clk_b}] -group [get_clocks {wb_clk_i }] -group [get_clocks {wb_clk2_i}] - -set_clock_transition 0.1500 [all_clocks] -set_clock_uncertainty -setup 0.2500 [all_clocks] -set_clock_uncertainty -hold 0.2500 [all_clocks] - -set ::env(SYNTH_TIMING_DERATE) 0.05 -puts "\[INFO\]: Setting timing derate to: [expr {$::env(SYNTH_TIMING_DERATE) * 10}] %" -set_timing_derate -early [expr {1-$::env(SYNTH_TIMING_DERATE)}] -set_timing_derate -late [expr {1+$::env(SYNTH_TIMING_DERATE)}] - -set_input_delay -max 5.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {rst_n}] -set_input_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {rst_n}] - -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_correct}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_done}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[0]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[1]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[2]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[3]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_sdo}] - -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_correct}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_done}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[0]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[1]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[2]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[3]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_sdo}] - -set_false_path -from [get_ports {bist_en}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_load}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_run}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_sdi}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_shift}] - -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_en}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_load}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_run}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_sdi}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_shift}] - -## Functional Inputs -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_adr_i[*]}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_stb_i}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_cyc_i}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_we_i}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wbd_mbist1_dat_o[*]}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_sel_i[*]}] - -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_adr_i[*]}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_stb_i}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_cyc_i}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_we_i}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wbd_mbist1_dat_o[*]}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_sel_i[*]}] - -set_output_delay -max 5 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_dat_o[*]}] -set_output_delay -max 5 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_ack_o}] -set_output_delay -max 5 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_err_o}] - -set_output_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_dat_o[*]}] -set_output_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_ack_o}] -set_output_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_err_o}] - -## Towards MEMORY from MBIST CLOCK -## PORT-A -set_input_delay -max 4.0000 -clock [get_clocks {bist_mem_clk_a}] -add_delay [get_ports {mem_dout_a[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {bist_mem_clk_a}] -add_delay [get_ports {mem_dout_a[*]}] - - -set_output_delay -max 4 -clock [get_clocks {bist_mem_clk_a}] -add_delay [get_ports {mem_addr_a[*]}] -set_output_delay -max 4 -clock [get_clocks {bist_mem_clk_a}] -add_delay [get_ports {mem_cen_a}] - -set_output_delay -min -0.5 -clock [get_clocks {bist_mem_clk_a}] -add_delay [get_ports {mem_addr_a[*]}] -set_output_delay -min -0.5 -clock [get_clocks {bist_mem_clk_a}] -add_delay [get_ports {mem_cen_a}] - - - -## PORT-B -set_output_delay -max 4 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_cen_b}] -set_output_delay -max 4 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_din_b[*]}] -set_output_delay -max 4 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_mask_b[*]}] -set_output_delay -max 4 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_web_b}] -set_output_delay -max 4 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_addr_b[*]}] - -set_output_delay -min -0.5 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_cen_b}] -set_output_delay -min -0.5 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_din_b[*]}] -set_output_delay -min -0.5 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_mask_b[*]}] -set_output_delay -min -0.5 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_web_b}] -set_output_delay -min -0.5 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_addr_b[*]}] - - -# Set max delay for clock skew - -set_max_delay 3.5 -from [get_ports {wbd_clk_int}] -set_max_delay 2 -to [get_ports {wbd_clk_mbist}] -set_max_delay 3.5 -from wbd_clk_int -to wbd_clk_mbist - -############################################################################### -# Environment -############################################################################### -set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -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] - -set_timing_derate -early 0.9500 -set_timing_derate -late 1.0500 -############################################################################### -# Design Rules -############################################################################### -set_max_fanout 4.0000 [current_design]
diff --git a/openlane/mbist/config.tcl b/openlane/mbist/config.tcl deleted file mode 100755 index 78cd955..0000000 --- a/openlane/mbist/config.tcl +++ /dev/null
@@ -1,123 +0,0 @@ -# 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> - -# Global -# ------ - -set script_dir [file dirname [file normalize [info script]]] -# Name - -set ::env(DESIGN_NAME) mbist_top - -set ::env(DESIGN_IS_CORE) "0" - -# Timing configuration -set ::env(CLOCK_PERIOD) "10" -#set ::env(CLOCK_PORT) "u_cts_wb_clk_b1.u_buf/X \ -# u_cts_wb_clk_b2.u_buf/X \ -# " -set ::env(CLOCK_PORT) { wb_clk_i mem_no\[3\].u_mem_sel.u_mem_clk_sel.u_mux/X mem_no\[2\].u_mem_sel.u_mem_clk_sel.u_mux/X mem_no\[1\].u_mem_sel.u_mem_clk_sel.u_mux/X mem_no\[0\].u_mem_sel.u_mem_clk_sel.u_mux/X } - -set ::env(SYNTH_MAX_FANOUT) 4 - -## CTS BUFFER -set ::env(CTS_CLK_BUFFER_LIST) "sky130_fd_sc_hd__clkbuf_4 sky130_fd_sc_hd__clkbuf_8" -set ::env(CTS_SINK_CLUSTERING_SIZE) "16" -set ::env(CLOCK_BUFFER_FANOUT) "8" - - -# Sources -# ------- - -# Local sources + no2usb sources -set ::env(VERILOG_FILES) "\ - $script_dir/../../verilog/rtl/clk_skew_adjust/src/clk_skew_adjust.gv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_addr_gen.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_fsm.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_op_sel.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_repair_addr.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_sti_sel.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_pat_sel.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_mux.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_data_cmp.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_mem_wrapper.sv \ - $script_dir/../../verilog/rtl/mbist/src/top/mbist_top.sv \ - $script_dir/../../verilog/rtl/lib/ctech_cells.sv \ - $script_dir/../../verilog/rtl/lib/reset_sync.sv \ - $script_dir/../../verilog/rtl/lib/ser_shift.sv \ - " - -set ::env(VERILOG_INCLUDE_DIRS) [glob $script_dir/../../verilog/rtl/mbist/include ] -set ::env(SYNTH_DEFINES) [list SYNTHESIS ] - - -set ::env(SYNTH_PARAMS) "BIST_ADDR_WD 9,\ - BIST_DATA_WD 32,\ - BIST_ADDR_START 9'h000,\ - BIST_ADDR_END 9'h1FB,\ - BIST_REPAIR_ADDR_START 9'h1FC,\ - BIST_RAD_WD_I 9,\ - BIST_RAD_WD_O 9\ - " - -set ::env(SYNTH_READ_BLACKBOX_LIB) 1 -set ::env(SDC_FILE) "$script_dir/base.sdc" -set ::env(BASE_SDC_FILE) "$script_dir/base.sdc" - -set ::env(LEC_ENABLE) 0 - -set ::env(VDD_PIN) [list {vccd1}] -set ::env(GND_PIN) [list {vssd1}] - - -# Floorplanning -# ------------- - -set ::env(FP_PIN_ORDER_CFG) $::env(DESIGN_DIR)/pin_order.cfg - -set ::env(FP_SIZING) absolute -set ::env(DIE_AREA) "0 0 1500 200" - - -# If you're going to use multiple power domains, then keep this disabled. -set ::env(RUN_CVC) 1 - -#set ::env(PDN_CFG) $script_dir/pdn.tcl - - -set ::env(PL_TIME_DRIVEN) 1 -set ::env(PL_TARGET_DENSITY) "0.30" - - - -set ::env(FP_IO_VEXTEND) 4 -set ::env(FP_IO_HEXTEND) 4 - -set ::env(FP_PDN_VPITCH) 140 -set ::env(FP_PDN_HPITCH) 140 -set ::env(FP_PDN_VWIDTH) 5 -set ::env(FP_PDN_HWIDTH) 5 - -set ::env(GLB_RT_MAXLAYER) 5 -set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 10 - -set ::env(DIODE_INSERTION_STRATEGY) 4 - - -set ::env(QUIT_ON_TIMING_VIOLATIONS) "0" -set ::env(QUIT_ON_MAGIC_DRC) "1" -set ::env(QUIT_ON_LVS_ERROR) "0" -set ::env(QUIT_ON_SLEW_VIOLATIONS) "0"
diff --git a/openlane/mbist/interactive.tcl b/openlane/mbist/interactive.tcl deleted file mode 100644 index f59586f..0000000 --- a/openlane/mbist/interactive.tcl +++ /dev/null
@@ -1,219 +0,0 @@ -#!/usr/bin/tclsh -# SPDX-FileCopyrightText: 2020 Efabless Corporation -# Copyright 2020 Efabless Corporation -# Copyright 2020 Sylvain Munaut -# -# 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 - -package require openlane; - - -proc run_placement_step {args} { - # set pdndef_dirname [file dirname $::env(pdn_tmp_file_tag).def] - # set pdndef [lindex [glob $pdndef_dirname/*pdn*] 0] - # set_def $pdndef - if { ! [ info exists ::env(PLACEMENT_CURRENT_DEF) ] } { - set ::env(PLACEMENT_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(PLACEMENT_CURRENT_DEF) - } - - run_placement -} - -proc run_cts_step {args} { - # set_def $::env(opendp_result_file_tag).def - if { ! [ info exists ::env(CTS_CURRENT_DEF) ] } { - set ::env(CTS_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(CTS_CURRENT_DEF) - } - - run_cts - run_resizer_timing -} - -proc run_routing_step {args} { - # set resizerdef_dirname [file dirname $::env(resizer_tmp_file_tag)_timing.def] - # set resizerdef [lindex [glob $resizerdef_dirname/*resizer*] 0] - # set_def $resizerdef - if { ! [ info exists ::env(ROUTING_CURRENT_DEF) ] } { - set ::env(ROUTING_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(ROUTING_CURRENT_DEF) - } - run_routing -} - -proc run_diode_insertion_2_5_step {args} { - # set_def $::env(tritonRoute_result_file_tag).def - if { ! [ info exists ::env(DIODE_INSERTION_CURRENT_DEF) ] } { - set ::env(DIODE_INSERTION_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(DIODE_INSERTION_CURRENT_DEF) - } - if { ($::env(DIODE_INSERTION_STRATEGY) == 2) || ($::env(DIODE_INSERTION_STRATEGY) == 5) } { - run_antenna_check - heal_antenna_violators; # modifies the routed DEF - } - -} - -proc run_power_pins_insertion_step {args} { - # set_def $::env(tritonRoute_result_file_tag).def - if { ! [ info exists ::env(POWER_PINS_INSERTION_CURRENT_DEF) ] } { - set ::env(POWER_PINS_INSERTION_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(POWER_PINS_INSERTION_CURRENT_DEF) - } - if { $::env(LVS_INSERT_POWER_PINS) } { - write_powered_verilog - set_netlist $::env(lvs_result_file_tag).powered.v - } - -} - -proc run_lvs_step {{ lvs_enabled 1 }} { - # set_def $::env(tritonRoute_result_file_tag).def - if { ! [ info exists ::env(LVS_CURRENT_DEF) ] } { - set ::env(LVS_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(LVS_CURRENT_DEF) - } - if { $lvs_enabled } { - run_magic_spice_export - run_lvs; # requires run_magic_spice_export - } - -} - -proc run_drc_step {{ drc_enabled 1 }} { - if { ! [ info exists ::env(DRC_CURRENT_DEF) ] } { - set ::env(DRC_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(DRC_CURRENT_DEF) - } - if { $drc_enabled } { - run_magic_drc - run_klayout_drc - } -} - -proc run_antenna_check_step {{ antenna_check_enabled 1 }} { - if { ! [ info exists ::env(ANTENNA_CHECK_CURRENT_DEF) ] } { - set ::env(ANTENNA_CHECK_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(ANTENNA_CHECK_CURRENT_DEF) - } - if { $antenna_check_enabled } { - run_antenna_check - } -} - -proc run_flow {args} { - set script_dir [file dirname [file normalize [info script]]] - - set options { - {-design required} - {-save_path optional} - {-no_lvs optional} - {-no_drc optional} - {-no_antennacheck optional} - } - set flags {-save} - parse_key_args "run_flow" args arg_values $options flags_map $flags -no_consume - - prep {*}$args - - set LVS_ENABLED 1 - set DRC_ENABLED 1 - set ANTENNACHECK_ENABLED 1 - - set steps [dict create "synthesis" {run_synthesis "" } \ - "floorplan" {run_floorplan ""} \ - "placement" {run_placement_step ""} \ - "cts" {run_cts_step ""} \ - "routing" {run_routing_step ""}\ - "diode_insertion" {run_diode_insertion_2_5_step ""} \ - "power_pins_insertion" {run_power_pins_insertion_step ""} \ - "gds_magic" {run_magic ""} \ - "gds_drc_klayout" {run_klayout ""} \ - "gds_xor_klayout" {run_klayout_gds_xor ""} \ - "lvs" "run_lvs_step $LVS_ENABLED" \ - "drc" "run_drc_step $DRC_ENABLED" \ - "antenna_check" "run_antenna_check_step $ANTENNACHECK_ENABLED" \ - "cvc" {run_lef_cvc} - ] - - set_if_unset arg_values(-to) "cvc"; - - if { [info exists ::env(CURRENT_STEP) ] } { - puts "\[INFO\]:Picking up where last execution left off" - puts [format "\[INFO\]:Current stage is %s " $::env(CURRENT_STEP)] - } else { - set ::env(CURRENT_STEP) "synthesis"; - } - set_if_unset arg_values(-from) $::env(CURRENT_STEP); - set exe 0; - dict for {step_name step_exe} $steps { - if { [ string equal $arg_values(-from) $step_name ] } { - set exe 1; - } - - if { $exe } { - # For when it fails - set ::env(CURRENT_STEP) $step_name - [lindex $step_exe 0] [lindex $step_exe 1] ; - } - - if { [ string equal $arg_values(-to) $step_name ] } { - set exe 0: - break; - } - - } - - # for when it resumes - set steps_as_list [dict keys $steps] - set next_idx [expr [lsearch $steps_as_list $::env(CURRENT_STEP)] + 1] - set ::env(CURRENT_STEP) [lindex $steps_as_list $next_idx] - - if { [info exists flags_map(-save) ] } { - if { ! [info exists arg_values(-save_path)] } { - set arg_values(-save_path) "" - } - save_views -lef_path $::env(magic_result_file_tag).lef \ - -def_path $::env(CURRENT_DEF) \ - -gds_path $::env(magic_result_file_tag).gds \ - -mag_path $::env(magic_result_file_tag).mag \ - -maglef_path $::env(magic_result_file_tag).lef.mag \ - -spice_path $::env(magic_result_file_tag).spice \ - -spef_path $::env(CURRENT_SPEF) \ - -verilog_path $::env(CURRENT_NETLIST) \ - -save_path $arg_values(-save_path) \ - -tag $::env(RUN_TAG) - } - - - calc_total_runtime - save_state - generate_final_summary_report - - check_timing_violations - - puts_success "Flow Completed Without Fatal Errors." - -} - -run_flow {*}$argv
diff --git a/openlane/mbist/pin_order.cfg b/openlane/mbist/pin_order.cfg deleted file mode 100644 index 0416192..0000000 --- a/openlane/mbist/pin_order.cfg +++ /dev/null
@@ -1,527 +0,0 @@ -#BUS_SORT - -#MANUAL_PLACE - - -#S -rst_n 0000 0 - - - -#E -cfg_cska_mbist\[3\] 0000 0 4 -cfg_cska_mbist\[2\] -cfg_cska_mbist\[1\] -cfg_cska_mbist\[0\] -wb_clk2_i -wb_clk_i -wbd_clk_mbist -wbd_clk_int - -wb_cyc_i 0025 0 2 -wb_stb_i -wb_we_i -wb_cs_i\[1\] -wb_cs_i\[0\] -wb_adr_i\[8\] -wb_adr_i\[7\] -wb_adr_i\[6\] -wb_adr_i\[5\] -wb_adr_i\[4\] -wb_adr_i\[3\] -wb_adr_i\[2\] -wb_adr_i\[1\] -wb_adr_i\[0\] -wb_dat_i\[31\] -wb_dat_i\[30\] -wb_dat_i\[29\] -wb_dat_i\[28\] -wb_dat_i\[27\] -wb_dat_i\[26\] -wb_dat_i\[25\] -wb_dat_i\[24\] -wb_dat_i\[23\] -wb_dat_i\[22\] -wb_dat_i\[21\] -wb_dat_i\[20\] -wb_dat_i\[19\] -wb_dat_i\[18\] -wb_dat_i\[17\] -wb_dat_i\[16\] -wb_dat_i\[15\] -wb_dat_i\[14\] -wb_dat_i\[13\] -wb_dat_i\[12\] -wb_dat_i\[11\] -wb_dat_i\[10\] -wb_dat_i\[9\] -wb_dat_i\[8\] -wb_dat_i\[7\] -wb_dat_i\[6\] -wb_dat_i\[5\] -wb_dat_i\[4\] -wb_dat_i\[3\] -wb_dat_i\[2\] -wb_dat_i\[1\] -wb_dat_i\[0\] -wb_sel_i\[3\] -wb_sel_i\[2\] -wb_sel_i\[1\] -wb_sel_i\[0\] -wb_dat_o\[31\] -wb_dat_o\[30\] -wb_dat_o\[29\] -wb_dat_o\[28\] -wb_dat_o\[27\] -wb_dat_o\[26\] -wb_dat_o\[25\] -wb_dat_o\[24\] -wb_dat_o\[23\] -wb_dat_o\[22\] -wb_dat_o\[21\] -wb_dat_o\[20\] -wb_dat_o\[19\] -wb_dat_o\[18\] -wb_dat_o\[17\] -wb_dat_o\[16\] -wb_dat_o\[15\] -wb_dat_o\[14\] -wb_dat_o\[13\] -wb_dat_o\[12\] -wb_dat_o\[11\] -wb_dat_o\[10\] -wb_dat_o\[9\] -wb_dat_o\[8\] -wb_dat_o\[7\] -wb_dat_o\[6\] -wb_dat_o\[5\] -wb_dat_o\[4\] -wb_dat_o\[3\] -wb_dat_o\[2\] -wb_dat_o\[1\] -wb_dat_o\[0\] -wb_ack_o -wb_err_o - - -bist_error_cnt3\[3\] 0150 0 2 -bist_error_cnt3\[2\] -bist_error_cnt3\[1\] -bist_error_cnt3\[0\] -bist_correct\[3\] -bist_error\[3\] -bist_error_cnt2\[3\] -bist_error_cnt2\[2\] -bist_error_cnt2\[1\] -bist_error_cnt2\[0\] -bist_correct\[2\] -bist_error\[2\] -bist_error_cnt1\[3\] -bist_error_cnt1\[2\] -bist_error_cnt1\[1\] -bist_error_cnt1\[0\] -bist_correct\[1\] -bist_error\[1\] -bist_error_cnt0\[3\] -bist_error_cnt0\[2\] -bist_error_cnt0\[1\] -bist_error_cnt0\[0\] -bist_correct\[0\] -bist_error\[0\] -bist_done -bist_sdo -bist_shift -bist_sdi -bist_load -bist_run -bist_en - -#S -mem_clk_a\[0\] 250 0 2 -mem_cen_a\[0\] -mem_web_a\[0\] -mem_addr_a0\[0\] -mem_addr_a0\[1\] -mem_addr_a0\[2\] -mem_addr_a0\[3\] -mem_addr_a0\[4\] -mem_addr_a0\[5\] -mem_addr_a0\[6\] -mem_addr_a0\[7\] -mem_addr_a0\[8\] -mem_mask_a0\[0\] -mem_mask_a0\[1\] -mem_mask_a0\[2\] -mem_mask_a0\[3\] -mem_din_a0\[0\] -mem_din_a0\[1\] -mem_din_a0\[2\] -mem_din_a0\[3\] -mem_din_a0\[4\] -mem_din_a0\[5\] -mem_din_a0\[6\] -mem_din_a0\[7\] -mem_din_a0\[8\] -mem_din_a0\[9\] -mem_din_a0\[10\] -mem_din_a0\[11\] -mem_din_a0\[12\] -mem_din_a0\[13\] -mem_din_a0\[14\] -mem_din_a0\[15\] -mem_din_a0\[16\] -mem_din_a0\[17\] -mem_din_a0\[18\] -mem_din_a0\[19\] -mem_din_a0\[20\] -mem_din_a0\[21\] -mem_din_a0\[22\] -mem_din_a0\[23\] -mem_din_a0\[24\] -mem_din_a0\[25\] -mem_din_a0\[26\] -mem_din_a0\[27\] -mem_din_a0\[28\] -mem_din_a0\[29\] -mem_din_a0\[30\] -mem_din_a0\[31\] - - -mem_dout_a0\[0\] 350 0 2 -mem_dout_a0\[1\] -mem_dout_a0\[2\] -mem_dout_a0\[3\] -mem_dout_a0\[4\] -mem_dout_a0\[5\] -mem_dout_a0\[6\] -mem_dout_a0\[7\] -mem_dout_a0\[8\] -mem_dout_a0\[9\] -mem_dout_a0\[10\] -mem_dout_a0\[11\] -mem_dout_a0\[12\] -mem_dout_a0\[13\] -mem_dout_a0\[14\] -mem_dout_a0\[15\] -mem_dout_a0\[16\] -mem_dout_a0\[17\] -mem_dout_a0\[18\] -mem_dout_a0\[19\] -mem_dout_a0\[20\] -mem_dout_a0\[21\] -mem_dout_a0\[22\] -mem_dout_a0\[23\] -mem_dout_a0\[24\] -mem_dout_a0\[25\] -mem_dout_a0\[26\] -mem_dout_a0\[27\] -mem_dout_a0\[28\] -mem_dout_a0\[29\] -mem_dout_a0\[30\] -mem_dout_a0\[31\] - - -mem_clk_b\[0\] 0450 0 2 -mem_cen_b\[0\] -mem_addr_b0\[8\] -mem_addr_b0\[7\] -mem_addr_b0\[6\] -mem_addr_b0\[5\] -mem_addr_b0\[4\] -mem_addr_b0\[3\] -mem_addr_b0\[2\] -mem_addr_b0\[1\] -mem_addr_b0\[0\] - - -mem_clk_a\[1\] 1000 0 2 -mem_cen_a\[1\] -mem_web_a\[1\] -mem_addr_a1\[0\] -mem_addr_a1\[1\] -mem_addr_a1\[2\] -mem_addr_a1\[3\] -mem_addr_a1\[4\] -mem_addr_a1\[5\] -mem_addr_a1\[6\] -mem_addr_a1\[7\] -mem_addr_a1\[8\] -mem_mask_a1\[0\] -mem_mask_a1\[1\] -mem_mask_a1\[2\] -mem_mask_a1\[3\] -mem_din_a1\[0\] -mem_din_a1\[1\] -mem_din_a1\[2\] -mem_din_a1\[3\] -mem_din_a1\[4\] -mem_din_a1\[5\] -mem_din_a1\[6\] -mem_din_a1\[7\] -mem_din_a1\[8\] -mem_din_a1\[9\] -mem_din_a1\[10\] -mem_din_a1\[11\] -mem_din_a1\[12\] -mem_din_a1\[13\] -mem_din_a1\[14\] -mem_din_a1\[15\] -mem_din_a1\[16\] -mem_din_a1\[17\] -mem_din_a1\[18\] -mem_din_a1\[19\] -mem_din_a1\[20\] -mem_din_a1\[21\] -mem_din_a1\[22\] -mem_din_a1\[23\] -mem_din_a1\[24\] -mem_din_a1\[25\] -mem_din_a1\[26\] -mem_din_a1\[27\] -mem_din_a1\[28\] -mem_din_a1\[29\] -mem_din_a1\[30\] -mem_din_a1\[31\] - - -mem_dout_a1\[0\] 1100 0 2 -mem_dout_a1\[1\] -mem_dout_a1\[2\] -mem_dout_a1\[3\] -mem_dout_a1\[4\] -mem_dout_a1\[5\] -mem_dout_a1\[6\] -mem_dout_a1\[7\] -mem_dout_a1\[8\] -mem_dout_a1\[9\] -mem_dout_a1\[10\] -mem_dout_a1\[11\] -mem_dout_a1\[12\] -mem_dout_a1\[13\] -mem_dout_a1\[14\] -mem_dout_a1\[15\] -mem_dout_a1\[16\] -mem_dout_a1\[17\] -mem_dout_a1\[18\] -mem_dout_a1\[19\] -mem_dout_a1\[20\] -mem_dout_a1\[21\] -mem_dout_a1\[22\] -mem_dout_a1\[23\] -mem_dout_a1\[24\] -mem_dout_a1\[25\] -mem_dout_a1\[26\] -mem_dout_a1\[27\] -mem_dout_a1\[28\] -mem_dout_a1\[29\] -mem_dout_a1\[30\] -mem_dout_a1\[31\] - - -mem_clk_b\[1\] 1200 0 2 -mem_cen_b\[1\] -mem_addr_b1\[8\] -mem_addr_b1\[7\] -mem_addr_b1\[6\] -mem_addr_b1\[5\] -mem_addr_b1\[4\] -mem_addr_b1\[3\] -mem_addr_b1\[2\] -mem_addr_b1\[1\] -mem_addr_b1\[0\] - - -#N -mem_clk_a\[2\] 250 0 2 -mem_cen_a\[2\] -mem_web_a\[2\] -mem_addr_a2\[0\] -mem_addr_a2\[1\] -mem_addr_a2\[2\] -mem_addr_a2\[3\] -mem_addr_a2\[4\] -mem_addr_a2\[5\] -mem_addr_a2\[6\] -mem_addr_a2\[7\] -mem_addr_a2\[8\] -mem_mask_a2\[0\] -mem_mask_a2\[1\] -mem_mask_a2\[2\] -mem_mask_a2\[3\] -mem_din_a2\[0\] -mem_din_a2\[1\] -mem_din_a2\[2\] -mem_din_a2\[3\] -mem_din_a2\[4\] -mem_din_a2\[5\] -mem_din_a2\[6\] -mem_din_a2\[7\] -mem_din_a2\[8\] -mem_din_a2\[9\] -mem_din_a2\[10\] -mem_din_a2\[11\] -mem_din_a2\[12\] -mem_din_a2\[13\] -mem_din_a2\[14\] -mem_din_a2\[15\] -mem_din_a2\[16\] -mem_din_a2\[17\] -mem_din_a2\[18\] -mem_din_a2\[19\] -mem_din_a2\[20\] -mem_din_a2\[21\] -mem_din_a2\[22\] -mem_din_a2\[23\] -mem_din_a2\[24\] -mem_din_a2\[25\] -mem_din_a2\[26\] -mem_din_a2\[27\] -mem_din_a2\[28\] -mem_din_a2\[29\] -mem_din_a2\[30\] -mem_din_a2\[31\] - - -mem_dout_a2\[0\] 0350 0 2 -mem_dout_a2\[1\] -mem_dout_a2\[2\] -mem_dout_a2\[3\] -mem_dout_a2\[4\] -mem_dout_a2\[5\] -mem_dout_a2\[6\] -mem_dout_a2\[7\] -mem_dout_a2\[8\] -mem_dout_a2\[9\] -mem_dout_a2\[10\] -mem_dout_a2\[11\] -mem_dout_a2\[12\] -mem_dout_a2\[13\] -mem_dout_a2\[14\] -mem_dout_a2\[15\] -mem_dout_a2\[16\] -mem_dout_a2\[17\] -mem_dout_a2\[18\] -mem_dout_a2\[19\] -mem_dout_a2\[20\] -mem_dout_a2\[21\] -mem_dout_a2\[22\] -mem_dout_a2\[23\] -mem_dout_a2\[24\] -mem_dout_a2\[25\] -mem_dout_a2\[26\] -mem_dout_a2\[27\] -mem_dout_a2\[28\] -mem_dout_a2\[29\] -mem_dout_a2\[30\] -mem_dout_a2\[31\] - - -mem_clk_b\[2\] 0450 0 2 -mem_cen_b\[2\] -mem_addr_b2\[8\] -mem_addr_b2\[7\] -mem_addr_b2\[6\] -mem_addr_b2\[5\] -mem_addr_b2\[4\] -mem_addr_b2\[3\] -mem_addr_b2\[2\] -mem_addr_b2\[1\] -mem_addr_b2\[0\] - - -mem_clk_a\[3\] 1000 0 2 -mem_cen_a\[3\] -mem_web_a\[3\] -mem_addr_a3\[0\] -mem_addr_a3\[1\] -mem_addr_a3\[2\] -mem_addr_a3\[3\] -mem_addr_a3\[4\] -mem_addr_a3\[5\] -mem_addr_a3\[6\] -mem_addr_a3\[7\] -mem_addr_a3\[8\] -mem_mask_a3\[0\] -mem_mask_a3\[1\] -mem_mask_a3\[2\] -mem_mask_a3\[3\] -mem_din_a3\[0\] -mem_din_a3\[1\] -mem_din_a3\[2\] -mem_din_a3\[3\] -mem_din_a3\[4\] -mem_din_a3\[5\] -mem_din_a3\[6\] -mem_din_a3\[7\] -mem_din_a3\[8\] -mem_din_a3\[9\] -mem_din_a3\[10\] -mem_din_a3\[11\] -mem_din_a3\[12\] -mem_din_a3\[13\] -mem_din_a3\[14\] -mem_din_a3\[15\] -mem_din_a3\[16\] -mem_din_a3\[17\] -mem_din_a3\[18\] -mem_din_a3\[19\] -mem_din_a3\[20\] -mem_din_a3\[21\] -mem_din_a3\[22\] -mem_din_a3\[23\] -mem_din_a3\[24\] -mem_din_a3\[25\] -mem_din_a3\[26\] -mem_din_a3\[27\] -mem_din_a3\[28\] -mem_din_a3\[29\] -mem_din_a3\[30\] -mem_din_a3\[31\] - - -mem_dout_a3\[0\] 1100 0 2 -mem_dout_a3\[1\] -mem_dout_a3\[2\] -mem_dout_a3\[3\] -mem_dout_a3\[4\] -mem_dout_a3\[5\] -mem_dout_a3\[6\] -mem_dout_a3\[7\] -mem_dout_a3\[8\] -mem_dout_a3\[9\] -mem_dout_a3\[10\] -mem_dout_a3\[11\] -mem_dout_a3\[12\] -mem_dout_a3\[13\] -mem_dout_a3\[14\] -mem_dout_a3\[15\] -mem_dout_a3\[16\] -mem_dout_a3\[17\] -mem_dout_a3\[18\] -mem_dout_a3\[19\] -mem_dout_a3\[20\] -mem_dout_a3\[21\] -mem_dout_a3\[22\] -mem_dout_a3\[23\] -mem_dout_a3\[24\] -mem_dout_a3\[25\] -mem_dout_a3\[26\] -mem_dout_a3\[27\] -mem_dout_a3\[28\] -mem_dout_a3\[29\] -mem_dout_a3\[30\] -mem_dout_a3\[31\] - - -mem_clk_b\[3\] 1200 0 2 -mem_cen_b\[3\] -mem_addr_b3\[8\] -mem_addr_b3\[7\] -mem_addr_b3\[6\] -mem_addr_b3\[5\] -mem_addr_b3\[4\] -mem_addr_b3\[3\] -mem_addr_b3\[2\] -mem_addr_b3\[1\] -mem_addr_b3\[0\] -
diff --git a/openlane/mbist/sta.tcl b/openlane/mbist/sta.tcl deleted file mode 100644 index 57a6c35..0000000 --- a/openlane/mbist/sta.tcl +++ /dev/null
@@ -1,88 +0,0 @@ -# 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 ::env(LIB_FASTEST) "$::env(PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ff_n40C_1v95.lib" -set ::env(LIB_TYPICAL) "$::env(PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__tt_025C_1v80.lib" -set ::env(LIB_SLOWEST) "$::env(PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ss_100C_1v60.lib" -set ::env(DESIGN_NAME) "mbist_top" -set ::env(BASE_SDC_FILE) "base.sdc" -set ::env(SYNTH_DRIVING_CELL) "sky130_fd_sc_hd__inv_8" -set ::env(SYNTH_DRIVING_CELL_PIN) "Y" -set ::env(SYNTH_CAP_LOAD) "17.65" -set ::env(WIRE_RC_LAYER) "met1" - -#To disable empty filler cell black box get created -#set link_make_black_boxes 0 - - -set_cmd_units -time ns -capacitance pF -current mA -voltage V -resistance kOhm -distance um -define_corners wc bc tt -read_liberty -corner bc $::env(LIB_FASTEST) -read_liberty -corner wc $::env(LIB_SLOWEST) -read_liberty -corner tt $::env(LIB_TYPICAL) - - -read_verilog ../user_project_wrapper/netlist/mbist.v -link_design $::env(DESIGN_NAME) - - -read_spef ../../spef/mbist_top.spef - - -read_sdc -echo $::env(BASE_SDC_FILE) - -# check for missing constraints -check_setup -verbose > unconstraints.rpt - -set_operating_conditions -analysis_type single -# Propgate the clock -set_propagated_clock [all_clocks] - -report_tns -report_wns -#report_power -echo "################ CORNER : WC (SLOW) TIMING Report ###################" > timing_ss_max.rpt -report_checks -unique -path_delay max -slack_max -0.0 -group_count 100 -corner wc >> timing_ss_max.rpt -report_checks -group_count 100 -path_delay max -path_group bist_clk -corner wc >> timing_ss_max.rpt -report_checks -group_count 100 -path_delay max -path_group mem_clk_a -corner wc >> timing_ss_max.rpt -report_checks -group_count 100 -path_delay max -path_group mem_clk_b -corner wc >> timing_ss_max.rpt -report_checks -path_delay max -corner wc >> timing_ss_max.rpt - -echo "################ CORNER : BC (SLOW) TIMING Report ###################" > timing_ff_min.rpt -report_checks -unique -path_delay min -slack_min -0.0 -group_count 100 -corner bc >> timing_ff_min.rpt -report_checks -group_count 100 -path_delay min -path_group bist_clk -corner bc >> timing_ff_min.rpt -report_checks -group_count 100 -path_delay min -path_group mem_clk_a -corner bc >> timing_ff_min.rpt -report_checks -group_count 100 -path_delay min -path_group mem_clk_b -corner bc >> timing_ff_min.rpt -report_checks -path_delay min -corner bc >> timing_ff_min.rpt - -echo "################ CORNER : TT (MAX) TIMING Report ###################" > timing_tt_max.rpt -report_checks -unique -path_delay min -slack_min -0.0 -group_count 100 -corner tt >> timing_tt_max.rpt -report_checks -group_count 100 -path_delay max -path_group bist_clk -corner tt >> timing_tt_max.rpt -report_checks -group_count 100 -path_delay max -path_group mem_clk_a -corner tt >> timing_tt_max.rpt -report_checks -group_count 100 -path_delay max -path_group mem_clk_b -corner tt >> timing_tt_max.rpt -report_checks -path_delay min -corner tt >> timing_tt_min.rpt - -echo "################ CORNER : TT (MIN) TIMING Report ###################" > timing_tt_min.rpt -report_checks -unique -path_delay min -slack_min -0.0 -group_count 100 -corner tt >> timing_tt_min.rpt -report_checks -group_count 100 -path_delay min -path_group bist_clk -corner tt >> timing_tt_min.rpt -report_checks -group_count 100 -path_delay min -path_group mem_clk_a -corner tt >> timing_tt_min.rpt -report_checks -group_count 100 -path_delay min -path_group mem_clk_b -corner tt >> timing_tt_min.rpt -report_checks -path_delay min -corner tt >> timing_tt_min.rpt - -report_checks -path_delay min - -#exit
diff --git a/openlane/mbist1/base.sdc b/openlane/mbist1/base.sdc deleted file mode 100644 index 8ae25b1..0000000 --- a/openlane/mbist1/base.sdc +++ /dev/null
@@ -1,163 +0,0 @@ -############################################################################### -# Created by write_sdc -# Sun Nov 14 09:33:23 2021 -############################################################################### -current_design mbist_top -############################################################################### -# Timing Constraints -############################################################################### -create_clock -name wb_clk_i -period 10.0000 [get_ports {wb_clk_i}] -create_generated_clock -name bist_mem_clk_a -add -source [get_ports {wb_clk_i}] -master_clock [get_clocks wb_clk_i] -divide_by 1 -comment {Mem Clock A} [get_ports mem_clk_a] -create_generated_clock -name bist_mem_clk_b -add -source [get_ports {wb_clk_i}] -master_clock [get_clocks wb_clk_i] -divide_by 1 -comment {Mem Clock B} [get_ports mem_clk_b] - -set_clock_groups -name async_clock -asynchronous -comment "Async Clock group" -group [get_clocks {wb_clk_i bist_mem_clk_a bist_mem_clk_b}] - -set_clock_transition 0.1500 [get_clocks {wb_clk_i}] -set_clock_uncertainty -setup 0.2500 wb_clk_i -set_clock_uncertainty -setup 0.2500 mem_clk_a -set_clock_uncertainty -setup 0.2500 mem_clk_b - -set_clock_uncertainty -hold 0.2500 wb_clk_i -set_clock_uncertainty -hold 0.2500 mem_clk_a -set_clock_uncertainty -hold 0.2500 mem_clk_b - -set ::env(SYNTH_TIMING_DERATE) 0.05 -puts "\[INFO\]: Setting timing derate to: [expr {$::env(SYNTH_TIMING_DERATE) * 10}] %" -set_timing_derate -early [expr {1-$::env(SYNTH_TIMING_DERATE)}] -set_timing_derate -late [expr {1+$::env(SYNTH_TIMING_DERATE)}] - -set_input_delay -max 5.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {rst_n}] -set_input_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {rst_n}] - -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_correct}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_done}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[0]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[1]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[2]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[3]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_sdo}] - -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_correct}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_done}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[0]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[1]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[2]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_error_cnt[3]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_sdo}] - -set_false_path -from [get_ports {bist_en}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_load}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_run}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_sdi}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_shift}] - -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_en}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_load}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_run}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_sdi}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {bist_shift}] - -## Functional Inputs -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_adr_i[*]}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_stb_i}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_cyc_i}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_we_i}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wbd_mbist1_dat_o[*]}] -set_input_delay -max 4 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_sel_i[*]}] - -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_adr_i[*]}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_stb_i}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_cyc_i}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_we_i}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wbd_mbist1_dat_o[*]}] -set_input_delay -min 2 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_sel_i[*]}] - -set_output_delay -max 5 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_dat_o[*]}] -set_output_delay -max 5 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_ack_o}] -set_output_delay -max 5 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_err_o}] - -set_output_delay -min 1 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_dat_o[*]}] -set_output_delay -min 1 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_ack_o}] -set_output_delay -min 1 -clock [get_clocks {wb_clk_i}] -add_delay [get_ports {wb_err_o}] - -## Towards MEMORY from MBIST CLOCK -## PORT-A -set_input_delay -max 4.0000 -clock [get_clocks {bist_mem_clk_a}] -add_delay [get_ports {mem_dout_a[*]}] -set_input_delay -min 1.0000 -clock [get_clocks {bist_mem_clk_a}] -add_delay [get_ports {mem_dout_a[*]}] - - -set_output_delay -max 4 -clock [get_clocks {bist_mem_clk_a}] -add_delay [get_ports {mem_addr_a[*]}] -set_output_delay -max 4 -clock [get_clocks {bist_mem_clk_a}] -add_delay [get_ports {mem_cen_a}] - -set_output_delay -min -0.5 -clock [get_clocks {bist_mem_clk_a}] -add_delay [get_ports {mem_addr_a[*]}] -set_output_delay -min -0.5 -clock [get_clocks {bist_mem_clk_a}] -add_delay [get_ports {mem_cen_a}] - - - -## PORT-B -set_output_delay -max 4 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_cen_b}] -set_output_delay -max 4 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_din_b[*]}] -set_output_delay -max 4 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_mask_b[*]}] -set_output_delay -max 4 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_web_b}] -set_output_delay -max 4 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_addr_b[*]}] - -set_output_delay -min -0.5 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_cen_b}] -set_output_delay -min -0.5 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_din_b[*]}] -set_output_delay -min -0.5 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_mask_b[*]}] -set_output_delay -min -0.5 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_web_b}] -set_output_delay -min -0.5 -clock [get_clocks {bist_mem_clk_b}] -add_delay [get_ports {mem_addr_b[*]}] - - -# Set max delay for clock skew - -set_max_delay 3.5 -from [get_ports {wbd_clk_int}] -set_max_delay 2 -to [get_ports {wbd_clk_mbist}] -set_max_delay 3.5 -from wbd_clk_int -to wbd_clk_mbist - -############################################################################### -# Environment -############################################################################### -set_load -pin_load 0.0334 [get_ports {bist_correct}] -set_load -pin_load 0.0334 [get_ports {bist_done}] -set_load -pin_load 0.0334 [get_ports {bist_error}] -set_load -pin_load 0.0334 [get_ports {bist_sdo}] -set_load -pin_load 0.0334 [get_ports {mem_cen_a}] -set_load -pin_load 0.0334 [get_ports {mem_cen_b}] -set_load -pin_load 0.0334 [get_ports {mem_clk_a}] -set_load -pin_load 0.0334 [get_ports {mem_clk_b}] -set_load -pin_load 0.0334 [get_ports {mem_web_b}] -set_load -pin_load 0.0334 [get_ports {bist_error_cnt[3]}] -set_load -pin_load 0.0334 [get_ports {bist_error_cnt[2]}] -set_load -pin_load 0.0334 [get_ports {bist_error_cnt[1]}] -set_load -pin_load 0.0334 [get_ports {bist_error_cnt[0]}] -set_load -pin_load 0.0334 [get_ports {wb_cyc_i}] -set_load -pin_load 0.0334 [get_ports {wb_stb_i}] -set_load -pin_load 0.0334 [get_ports {wb_adr_i[*]}] -set_load -pin_load 0.0334 [get_ports {wb_we_i}] -set_load -pin_load 0.0334 [get_ports {wb_dat_i[*]}] -set_load -pin_load 0.0334 [get_ports {wb_sel_i[*]}] -set_load -pin_load 0.0334 [get_ports {mem_addr_a[*]}] -set_load -pin_load 0.0334 [get_ports {mem_addr_b[*]}] -set_load -pin_load 0.0334 [get_ports {mem_din_b[*]}] -set_load -pin_load 0.0334 [get_ports {mem_mask_b[*]}] -set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {wb_cyc_i}] -set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {bist_en}] -set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {bist_load}] -set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {bist_run}] -set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {bist_sdi}] -set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {bist_shift}] -set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {wb_cyc_i}] -set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {wb_adr_i[*]}] -set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {wb_we_i}] -set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {wb_dat_i[*]}] -set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {wb_sel_i[*]}] -set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {rst_n}] -set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {mem_dout_a[*]}] -set_timing_derate -early 0.9500 -set_timing_derate -late 1.0500 -############################################################################### -# Design Rules -############################################################################### -set_max_fanout 4.0000 [current_design]
diff --git a/openlane/mbist1/config.tcl b/openlane/mbist1/config.tcl deleted file mode 100755 index 1876487..0000000 --- a/openlane/mbist1/config.tcl +++ /dev/null
@@ -1,113 +0,0 @@ -# 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> - -# Global -# ------ - -set script_dir [file dirname [file normalize [info script]]] -# Name - -set ::env(DESIGN_NAME) mbist_top1 - -set ::env(DESIGN_IS_CORE) "0" - -# Timing configuration -set ::env(CLOCK_PERIOD) "10" -set ::env(CLOCK_PORT) "u_cts_wb_clk_b1.u_buf/X u_cts_wb_clk_b2.u_buf/X u_mem_sel.u_cts_mem_clk_a.u_buf/X u_mem_sel.u_cts_mem_clk_b.u_buf/X" - -set ::env(SYNTH_MAX_FANOUT) 4 - -# Sources -# ------- - -# Local sources + no2usb sources -set ::env(VERILOG_FILES) "\ - $script_dir/../../verilog/rtl/clk_skew_adjust/src/clk_skew_adjust.gv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_addr_gen.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_fsm.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_op_sel.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_repair_addr.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_sti_sel.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_pat_sel.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_mux.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_data_cmp.sv \ - $script_dir/../../verilog/rtl/mbist/src/core/mbist_mem_wrapper.sv \ - $script_dir/../../verilog/rtl/mbist/src/top/mbist_top1.sv \ - $script_dir/../../verilog/rtl/lib/ctech_cells.sv \ - $script_dir/../../verilog/rtl/lib/reset_sync.sv \ - " - -set ::env(VERILOG_INCLUDE_DIRS) [glob $script_dir/../../verilog/rtl/mbist/include ] -set ::env(SYNTH_DEFINES) [list SYNTHESIS ] - - -set ::env(SYNTH_PARAMS) "BIST_ADDR_WD 9,\ - BIST_DATA_WD 32,\ - BIST_ADDR_START 9'h000,\ - BIST_ADDR_END 9'h1FB,\ - BIST_REPAIR_ADDR_START 9'h1FC,\ - BIST_RAD_WD_I 9,\ - BIST_RAD_WD_O 9\ - " - -set ::env(SYNTH_READ_BLACKBOX_LIB) 1 -set ::env(SDC_FILE) "$script_dir/base.sdc" -set ::env(BASE_SDC_FILE) "$script_dir/base.sdc" - -set ::env(LEC_ENABLE) 0 - -set ::env(VDD_PIN) [list {vccd1}] -set ::env(GND_PIN) [list {vssd1}] - - -# Floorplanning -# ------------- - -set ::env(FP_PIN_ORDER_CFG) $::env(DESIGN_DIR)/pin_order.cfg - -set ::env(FP_SIZING) absolute -set ::env(DIE_AREA) "0 0 200 275" - - -# If you're going to use multiple power domains, then keep this disabled. -set ::env(RUN_CVC) 1 - -#set ::env(PDN_CFG) $script_dir/pdn.tcl - - -set ::env(PL_TIME_DRIVEN) 1 -set ::env(PL_TARGET_DENSITY) "0.35" - - - -set ::env(FP_IO_VEXTEND) 4 -set ::env(FP_IO_HEXTEND) 4 - -set ::env(FP_PDN_VPITCH) 100 -set ::env(FP_PDN_HPITCH) 100 -set ::env(FP_PDN_VWIDTH) 5 -set ::env(FP_PDN_HWIDTH) 5 - -set ::env(GLB_RT_MAXLAYER) 5 -set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 10 - -set ::env(DIODE_INSERTION_STRATEGY) 4 - - -set ::env(QUIT_ON_TIMING_VIOLATIONS) "0" -set ::env(QUIT_ON_MAGIC_DRC) "1" -set ::env(QUIT_ON_LVS_ERROR) "0" -set ::env(QUIT_ON_SLEW_VIOLATIONS) "0"
diff --git a/openlane/mbist1/interactive.tcl b/openlane/mbist1/interactive.tcl deleted file mode 100644 index f59586f..0000000 --- a/openlane/mbist1/interactive.tcl +++ /dev/null
@@ -1,219 +0,0 @@ -#!/usr/bin/tclsh -# SPDX-FileCopyrightText: 2020 Efabless Corporation -# Copyright 2020 Efabless Corporation -# Copyright 2020 Sylvain Munaut -# -# 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 - -package require openlane; - - -proc run_placement_step {args} { - # set pdndef_dirname [file dirname $::env(pdn_tmp_file_tag).def] - # set pdndef [lindex [glob $pdndef_dirname/*pdn*] 0] - # set_def $pdndef - if { ! [ info exists ::env(PLACEMENT_CURRENT_DEF) ] } { - set ::env(PLACEMENT_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(PLACEMENT_CURRENT_DEF) - } - - run_placement -} - -proc run_cts_step {args} { - # set_def $::env(opendp_result_file_tag).def - if { ! [ info exists ::env(CTS_CURRENT_DEF) ] } { - set ::env(CTS_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(CTS_CURRENT_DEF) - } - - run_cts - run_resizer_timing -} - -proc run_routing_step {args} { - # set resizerdef_dirname [file dirname $::env(resizer_tmp_file_tag)_timing.def] - # set resizerdef [lindex [glob $resizerdef_dirname/*resizer*] 0] - # set_def $resizerdef - if { ! [ info exists ::env(ROUTING_CURRENT_DEF) ] } { - set ::env(ROUTING_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(ROUTING_CURRENT_DEF) - } - run_routing -} - -proc run_diode_insertion_2_5_step {args} { - # set_def $::env(tritonRoute_result_file_tag).def - if { ! [ info exists ::env(DIODE_INSERTION_CURRENT_DEF) ] } { - set ::env(DIODE_INSERTION_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(DIODE_INSERTION_CURRENT_DEF) - } - if { ($::env(DIODE_INSERTION_STRATEGY) == 2) || ($::env(DIODE_INSERTION_STRATEGY) == 5) } { - run_antenna_check - heal_antenna_violators; # modifies the routed DEF - } - -} - -proc run_power_pins_insertion_step {args} { - # set_def $::env(tritonRoute_result_file_tag).def - if { ! [ info exists ::env(POWER_PINS_INSERTION_CURRENT_DEF) ] } { - set ::env(POWER_PINS_INSERTION_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(POWER_PINS_INSERTION_CURRENT_DEF) - } - if { $::env(LVS_INSERT_POWER_PINS) } { - write_powered_verilog - set_netlist $::env(lvs_result_file_tag).powered.v - } - -} - -proc run_lvs_step {{ lvs_enabled 1 }} { - # set_def $::env(tritonRoute_result_file_tag).def - if { ! [ info exists ::env(LVS_CURRENT_DEF) ] } { - set ::env(LVS_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(LVS_CURRENT_DEF) - } - if { $lvs_enabled } { - run_magic_spice_export - run_lvs; # requires run_magic_spice_export - } - -} - -proc run_drc_step {{ drc_enabled 1 }} { - if { ! [ info exists ::env(DRC_CURRENT_DEF) ] } { - set ::env(DRC_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(DRC_CURRENT_DEF) - } - if { $drc_enabled } { - run_magic_drc - run_klayout_drc - } -} - -proc run_antenna_check_step {{ antenna_check_enabled 1 }} { - if { ! [ info exists ::env(ANTENNA_CHECK_CURRENT_DEF) ] } { - set ::env(ANTENNA_CHECK_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(ANTENNA_CHECK_CURRENT_DEF) - } - if { $antenna_check_enabled } { - run_antenna_check - } -} - -proc run_flow {args} { - set script_dir [file dirname [file normalize [info script]]] - - set options { - {-design required} - {-save_path optional} - {-no_lvs optional} - {-no_drc optional} - {-no_antennacheck optional} - } - set flags {-save} - parse_key_args "run_flow" args arg_values $options flags_map $flags -no_consume - - prep {*}$args - - set LVS_ENABLED 1 - set DRC_ENABLED 1 - set ANTENNACHECK_ENABLED 1 - - set steps [dict create "synthesis" {run_synthesis "" } \ - "floorplan" {run_floorplan ""} \ - "placement" {run_placement_step ""} \ - "cts" {run_cts_step ""} \ - "routing" {run_routing_step ""}\ - "diode_insertion" {run_diode_insertion_2_5_step ""} \ - "power_pins_insertion" {run_power_pins_insertion_step ""} \ - "gds_magic" {run_magic ""} \ - "gds_drc_klayout" {run_klayout ""} \ - "gds_xor_klayout" {run_klayout_gds_xor ""} \ - "lvs" "run_lvs_step $LVS_ENABLED" \ - "drc" "run_drc_step $DRC_ENABLED" \ - "antenna_check" "run_antenna_check_step $ANTENNACHECK_ENABLED" \ - "cvc" {run_lef_cvc} - ] - - set_if_unset arg_values(-to) "cvc"; - - if { [info exists ::env(CURRENT_STEP) ] } { - puts "\[INFO\]:Picking up where last execution left off" - puts [format "\[INFO\]:Current stage is %s " $::env(CURRENT_STEP)] - } else { - set ::env(CURRENT_STEP) "synthesis"; - } - set_if_unset arg_values(-from) $::env(CURRENT_STEP); - set exe 0; - dict for {step_name step_exe} $steps { - if { [ string equal $arg_values(-from) $step_name ] } { - set exe 1; - } - - if { $exe } { - # For when it fails - set ::env(CURRENT_STEP) $step_name - [lindex $step_exe 0] [lindex $step_exe 1] ; - } - - if { [ string equal $arg_values(-to) $step_name ] } { - set exe 0: - break; - } - - } - - # for when it resumes - set steps_as_list [dict keys $steps] - set next_idx [expr [lsearch $steps_as_list $::env(CURRENT_STEP)] + 1] - set ::env(CURRENT_STEP) [lindex $steps_as_list $next_idx] - - if { [info exists flags_map(-save) ] } { - if { ! [info exists arg_values(-save_path)] } { - set arg_values(-save_path) "" - } - save_views -lef_path $::env(magic_result_file_tag).lef \ - -def_path $::env(CURRENT_DEF) \ - -gds_path $::env(magic_result_file_tag).gds \ - -mag_path $::env(magic_result_file_tag).mag \ - -maglef_path $::env(magic_result_file_tag).lef.mag \ - -spice_path $::env(magic_result_file_tag).spice \ - -spef_path $::env(CURRENT_SPEF) \ - -verilog_path $::env(CURRENT_NETLIST) \ - -save_path $arg_values(-save_path) \ - -tag $::env(RUN_TAG) - } - - - calc_total_runtime - save_state - generate_final_summary_report - - check_timing_violations - - puts_success "Flow Completed Without Fatal Errors." - -} - -run_flow {*}$argv
diff --git a/openlane/mbist1/pin_order.cfg b/openlane/mbist1/pin_order.cfg deleted file mode 100644 index 82dd636..0000000 --- a/openlane/mbist1/pin_order.cfg +++ /dev/null
@@ -1,213 +0,0 @@ -#BUS_SORT - -#MANUAL_PLACE - - -#S -rst_n 0000 0 - - - -#E -cfg_cska_mbist\[3\] 0000 0 4 -cfg_cska_mbist\[2\] -cfg_cska_mbist\[1\] -cfg_cska_mbist\[0\] -wb_clk_i -wbd_clk_mbist -wbd_clk_int - -wb_cyc_i 0025 0 2 -wb_stb_i -wb_we_i -wb_adr_i\[8\] -wb_adr_i\[7\] -wb_adr_i\[6\] -wb_adr_i\[5\] -wb_adr_i\[4\] -wb_adr_i\[3\] -wb_adr_i\[2\] -wb_adr_i\[1\] -wb_adr_i\[0\] -wb_dat_i\[31\] -wb_dat_i\[30\] -wb_dat_i\[29\] -wb_dat_i\[28\] -wb_dat_i\[27\] -wb_dat_i\[26\] -wb_dat_i\[25\] -wb_dat_i\[24\] -wb_dat_i\[23\] -wb_dat_i\[22\] -wb_dat_i\[21\] -wb_dat_i\[20\] -wb_dat_i\[19\] -wb_dat_i\[18\] -wb_dat_i\[17\] -wb_dat_i\[16\] -wb_dat_i\[15\] -wb_dat_i\[14\] -wb_dat_i\[13\] -wb_dat_i\[12\] -wb_dat_i\[11\] -wb_dat_i\[10\] -wb_dat_i\[9\] -wb_dat_i\[8\] -wb_dat_i\[7\] -wb_dat_i\[6\] -wb_dat_i\[5\] -wb_dat_i\[4\] -wb_dat_i\[3\] -wb_dat_i\[2\] -wb_dat_i\[1\] -wb_dat_i\[0\] -wb_sel_i\[3\] -wb_sel_i\[2\] -wb_sel_i\[1\] -wb_sel_i\[0\] -wb_dat_o\[31\] -wb_dat_o\[30\] -wb_dat_o\[29\] -wb_dat_o\[28\] -wb_dat_o\[27\] -wb_dat_o\[26\] -wb_dat_o\[25\] -wb_dat_o\[24\] -wb_dat_o\[23\] -wb_dat_o\[22\] -wb_dat_o\[21\] -wb_dat_o\[20\] -wb_dat_o\[19\] -wb_dat_o\[18\] -wb_dat_o\[17\] -wb_dat_o\[16\] -wb_dat_o\[15\] -wb_dat_o\[14\] -wb_dat_o\[13\] -wb_dat_o\[12\] -wb_dat_o\[11\] -wb_dat_o\[10\] -wb_dat_o\[9\] -wb_dat_o\[8\] -wb_dat_o\[7\] -wb_dat_o\[6\] -wb_dat_o\[5\] -wb_dat_o\[4\] -wb_dat_o\[3\] -wb_dat_o\[2\] -wb_dat_o\[1\] -wb_dat_o\[0\] -wb_ack_o -wb_err_o - - -bist_error_cnt\[3\] 0150 0 2 -bist_error_cnt\[2\] -bist_error_cnt\[1\] -bist_error_cnt\[0\] -bist_correct -bist_error -bist_done -bist_sdo -bist_shift -bist_sdi -bist_load -bist_run -bist_en - -#W -mem_clk_b 0000 0 2 -mem_cen_b -mem_web_b -mem_mask_b\[0\] -mem_mask_b\[1\] -mem_mask_b\[2\] -mem_mask_b\[3\] -mem_addr_b\[0\] -mem_addr_b\[1\] -mem_addr_b\[2\] -mem_addr_b\[3\] -mem_addr_b\[4\] -mem_addr_b\[5\] -mem_addr_b\[6\] -mem_addr_b\[7\] -mem_addr_b\[8\] -mem_din_b\[0\] -mem_din_b\[1\] -mem_din_b\[2\] -mem_din_b\[3\] -mem_din_b\[4\] -mem_din_b\[5\] -mem_din_b\[6\] -mem_din_b\[7\] -mem_din_b\[8\] -mem_din_b\[9\] -mem_din_b\[10\] -mem_din_b\[11\] -mem_din_b\[12\] -mem_din_b\[13\] -mem_din_b\[14\] -mem_din_b\[15\] -mem_din_b\[16\] -mem_din_b\[17\] -mem_din_b\[18\] -mem_din_b\[19\] -mem_din_b\[20\] -mem_din_b\[21\] -mem_din_b\[22\] -mem_din_b\[23\] -mem_din_b\[24\] -mem_din_b\[25\] -mem_din_b\[26\] -mem_din_b\[27\] -mem_din_b\[28\] -mem_din_b\[29\] -mem_din_b\[30\] -mem_din_b\[31\] - - -mem_dout_a\[0\] 0100 0 2 -mem_dout_a\[1\] -mem_dout_a\[2\] -mem_dout_a\[3\] -mem_dout_a\[4\] -mem_dout_a\[5\] -mem_dout_a\[6\] -mem_dout_a\[7\] -mem_dout_a\[8\] -mem_dout_a\[9\] -mem_dout_a\[10\] -mem_dout_a\[11\] -mem_dout_a\[12\] -mem_dout_a\[13\] -mem_dout_a\[14\] -mem_dout_a\[15\] -mem_dout_a\[16\] -mem_dout_a\[17\] -mem_dout_a\[18\] -mem_dout_a\[19\] -mem_dout_a\[20\] -mem_dout_a\[21\] -mem_dout_a\[22\] -mem_dout_a\[23\] -mem_dout_a\[24\] -mem_dout_a\[25\] -mem_dout_a\[26\] -mem_dout_a\[27\] -mem_dout_a\[28\] -mem_dout_a\[29\] -mem_dout_a\[30\] -mem_dout_a\[31\] - - -mem_clk_a 0200 0 2 -mem_cen_a -mem_addr_a\[8\] -mem_addr_a\[7\] -mem_addr_a\[6\] -mem_addr_a\[5\] -mem_addr_a\[4\] -mem_addr_a\[3\] -mem_addr_a\[2\] -mem_addr_a\[1\] -mem_addr_a\[0\]
diff --git a/openlane/mbist1/sta.tcl b/openlane/mbist1/sta.tcl deleted file mode 100644 index 57a6c35..0000000 --- a/openlane/mbist1/sta.tcl +++ /dev/null
@@ -1,88 +0,0 @@ -# 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 ::env(LIB_FASTEST) "$::env(PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ff_n40C_1v95.lib" -set ::env(LIB_TYPICAL) "$::env(PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__tt_025C_1v80.lib" -set ::env(LIB_SLOWEST) "$::env(PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ss_100C_1v60.lib" -set ::env(DESIGN_NAME) "mbist_top" -set ::env(BASE_SDC_FILE) "base.sdc" -set ::env(SYNTH_DRIVING_CELL) "sky130_fd_sc_hd__inv_8" -set ::env(SYNTH_DRIVING_CELL_PIN) "Y" -set ::env(SYNTH_CAP_LOAD) "17.65" -set ::env(WIRE_RC_LAYER) "met1" - -#To disable empty filler cell black box get created -#set link_make_black_boxes 0 - - -set_cmd_units -time ns -capacitance pF -current mA -voltage V -resistance kOhm -distance um -define_corners wc bc tt -read_liberty -corner bc $::env(LIB_FASTEST) -read_liberty -corner wc $::env(LIB_SLOWEST) -read_liberty -corner tt $::env(LIB_TYPICAL) - - -read_verilog ../user_project_wrapper/netlist/mbist.v -link_design $::env(DESIGN_NAME) - - -read_spef ../../spef/mbist_top.spef - - -read_sdc -echo $::env(BASE_SDC_FILE) - -# check for missing constraints -check_setup -verbose > unconstraints.rpt - -set_operating_conditions -analysis_type single -# Propgate the clock -set_propagated_clock [all_clocks] - -report_tns -report_wns -#report_power -echo "################ CORNER : WC (SLOW) TIMING Report ###################" > timing_ss_max.rpt -report_checks -unique -path_delay max -slack_max -0.0 -group_count 100 -corner wc >> timing_ss_max.rpt -report_checks -group_count 100 -path_delay max -path_group bist_clk -corner wc >> timing_ss_max.rpt -report_checks -group_count 100 -path_delay max -path_group mem_clk_a -corner wc >> timing_ss_max.rpt -report_checks -group_count 100 -path_delay max -path_group mem_clk_b -corner wc >> timing_ss_max.rpt -report_checks -path_delay max -corner wc >> timing_ss_max.rpt - -echo "################ CORNER : BC (SLOW) TIMING Report ###################" > timing_ff_min.rpt -report_checks -unique -path_delay min -slack_min -0.0 -group_count 100 -corner bc >> timing_ff_min.rpt -report_checks -group_count 100 -path_delay min -path_group bist_clk -corner bc >> timing_ff_min.rpt -report_checks -group_count 100 -path_delay min -path_group mem_clk_a -corner bc >> timing_ff_min.rpt -report_checks -group_count 100 -path_delay min -path_group mem_clk_b -corner bc >> timing_ff_min.rpt -report_checks -path_delay min -corner bc >> timing_ff_min.rpt - -echo "################ CORNER : TT (MAX) TIMING Report ###################" > timing_tt_max.rpt -report_checks -unique -path_delay min -slack_min -0.0 -group_count 100 -corner tt >> timing_tt_max.rpt -report_checks -group_count 100 -path_delay max -path_group bist_clk -corner tt >> timing_tt_max.rpt -report_checks -group_count 100 -path_delay max -path_group mem_clk_a -corner tt >> timing_tt_max.rpt -report_checks -group_count 100 -path_delay max -path_group mem_clk_b -corner tt >> timing_tt_max.rpt -report_checks -path_delay min -corner tt >> timing_tt_min.rpt - -echo "################ CORNER : TT (MIN) TIMING Report ###################" > timing_tt_min.rpt -report_checks -unique -path_delay min -slack_min -0.0 -group_count 100 -corner tt >> timing_tt_min.rpt -report_checks -group_count 100 -path_delay min -path_group bist_clk -corner tt >> timing_tt_min.rpt -report_checks -group_count 100 -path_delay min -path_group mem_clk_a -corner tt >> timing_tt_min.rpt -report_checks -group_count 100 -path_delay min -path_group mem_clk_b -corner tt >> timing_tt_min.rpt -report_checks -path_delay min -corner tt >> timing_tt_min.rpt - -report_checks -path_delay min - -#exit
diff --git a/openlane/pinmux/config.tcl b/openlane/pinmux/config.tcl index 68f6db6..7650732 100755 --- a/openlane/pinmux/config.tcl +++ b/openlane/pinmux/config.tcl
@@ -97,7 +97,7 @@ set ::env(FP_PDN_VWIDTH) 5 set ::env(FP_PDN_HWIDTH) 5 -set ::env(GLB_RT_MAXLAYER) 5 +#set ::env(GLB_RT_MAXLAYER) 5 set ::env(RT_MAX_LAYER) {met4} set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 10
diff --git a/openlane/pinmux/pin_order.cfg b/openlane/pinmux/pin_order.cfg index 2ff62e6..b3273bf 100644 --- a/openlane/pinmux/pin_order.cfg +++ b/openlane/pinmux/pin_order.cfg
@@ -91,6 +91,7 @@ pinmux_debug\[29\] pinmux_debug\[30\] pinmux_debug\[31\] +dbg_clk_mon #W
diff --git a/openlane/qspim_top/config.tcl b/openlane/qspim_top/config.tcl index e2a3b24..f17f63d 100755 --- a/openlane/qspim_top/config.tcl +++ b/openlane/qspim_top/config.tcl
@@ -93,7 +93,7 @@ set ::env(FP_PDN_VWIDTH) 5 set ::env(FP_PDN_HWIDTH) 5 -set ::env(GLB_RT_MAXLAYER) 5 +#set ::env(GLB_RT_MAXLAYER) 5 set ::env(RT_MAX_LAYER) {met4} set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 10 set ::env(DIODE_INSERTION_STRATEGY) 4
diff --git a/openlane/uart_i2cm_usb_spi_top/base.sdc b/openlane/uart_i2cm_usb_spi_top/base.sdc index 735b5fb..4a33fc5 100644 --- a/openlane/uart_i2cm_usb_spi_top/base.sdc +++ b/openlane/uart_i2cm_usb_spi_top/base.sdc
@@ -7,8 +7,8 @@ # Timing Constraints ############################################################################### create_clock -name app_clk -period 10.0000 [get_ports {app_clk}] -create_clock -name uart0_baud_clk -period 100.0000 [get_pins {u_uart0_core.u_lineclk_buf.u_mux/X}] -create_clock -name uart1_baud_clk -period 100.0000 [get_pins {u_uart1_core.u_lineclk_buf.u_mux/X}] +create_clock -name uart0_baud_clk -period 100.0000 [get_pins {u_uart0_core.u_lineclk_buf.genblk1.u_mux/X}] +create_clock -name uart1_baud_clk -period 100.0000 [get_pins {u_uart1_core.u_lineclk_buf.genblk1.u_mux/X}] create_clock -name usb_clk -period 100.0000 [get_ports {usb_clk}] set_clock_transition 0.1500 [all_clocks] @@ -35,10 +35,13 @@ set_max_delay 5 -from wbd_clk_int -to wbd_clk_uart +set_input_delay -max 6.0000 -clock [get_clocks {app_clk}] -add_delay [get_ports {i2c_rstn}] +set_input_delay -max 6.0000 -clock [get_clocks {app_clk}] -add_delay [get_ports {uart_rstn}] +set_input_delay -max 6.0000 -clock [get_clocks {app_clk}] -add_delay [get_ports {usb_rstn}] -set_input_delay 3.0000 -clock [get_clocks {app_clk}] -add_delay [get_ports {i2c_rstn}] -set_input_delay 3.0000 -clock [get_clocks {app_clk}] -add_delay [get_ports {uart_rstn}] -set_input_delay 3.0000 -clock [get_clocks {app_clk}] -add_delay [get_ports {usb_rstn}] +set_input_delay -min 1.5000 -clock [get_clocks {app_clk}] -add_delay [get_ports {i2c_rstn}] +set_input_delay -min 1.5000 -clock [get_clocks {app_clk}] -add_delay [get_ports {uart_rstn}] +set_input_delay -min 1.5000 -clock [get_clocks {app_clk}] -add_delay [get_ports {usb_rstn}] set_input_delay -max 6.0000 -clock [get_clocks {app_clk}] -add_delay [get_ports {reg_addr[*]}]
diff --git a/openlane/uart_i2cm_usb_spi_top/config.tcl b/openlane/uart_i2cm_usb_spi_top/config.tcl index 2627452..a97080d 100644 --- a/openlane/uart_i2cm_usb_spi_top/config.tcl +++ b/openlane/uart_i2cm_usb_spi_top/config.tcl
@@ -27,7 +27,7 @@ # Timing configuration set ::env(CLOCK_PERIOD) "10" -set ::env(CLOCK_PORT) "app_clk usb_clk u_uart_core.u_lineclk_buf.u_mux/X" +set ::env(CLOCK_PORT) "app_clk usb_clk u_uart0_core.u_lineclk_buf.genblk1.u_mux/X u_uart1_core.u_lineclk_buf.genblk1.u_mux/X" set ::env(SYNTH_MAX_FANOUT) 4 @@ -72,6 +72,7 @@ $script_dir/../../verilog/rtl/lib/ctech_cells.sv \ " +set ::env(SYNTH_NO_FLAT) {1} set ::env(SYNTH_READ_BLACKBOX_LIB) 1 set ::env(VERILOG_INCLUDE_DIRS) [glob $script_dir/../../verilog/rtl/i2cm/src/includes $script_dir/../../verilog/rtl/usb1_host/src/includes ] set ::env(SYNTH_DEFINES) [list SYNTHESIS ] @@ -101,7 +102,7 @@ set ::env(PL_TIME_DRIVEN) 1 -set ::env(PL_TARGET_DENSITY) "0.45" +set ::env(PL_TARGET_DENSITY) "0.46" # helps in anteena fix set ::env(USE_ARC_ANTENNA_CHECK) "0" @@ -114,7 +115,7 @@ set ::env(FP_PDN_VWIDTH) 5 set ::env(FP_PDN_HWIDTH) 5 -set ::env(GLB_RT_MAXLAYER) 5 +#set ::env(GLB_RT_MAXLAYER) 5 set ::env(RT_MAX_LAYER) {met4} set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 10 set ::env(DIODE_INSERTION_STRATEGY) 4 @@ -122,6 +123,9 @@ set ::env(GLB_RESIZER_TIMING_OPTIMIZATIONS) {1} set ::env(PL_RESIZER_TIMING_OPTIMIZATIONS) {1} +set ::env(GLB_RT_ADJUSTMENT) {0.25} +set ::env(CELL_PAD) {2} + set ::env(QUIT_ON_TIMING_VIOLATIONS) "0" set ::env(QUIT_ON_MAGIC_DRC) "1" set ::env(QUIT_ON_LVS_ERROR) "0"
diff --git a/openlane/user_project_wrapper/config.tcl b/openlane/user_project_wrapper/config.tcl index c1e47ab..19757e8 100644 --- a/openlane/user_project_wrapper/config.tcl +++ b/openlane/user_project_wrapper/config.tcl
@@ -16,6 +16,7 @@ # Base Configurations. Don't Touch # section begin +set ::env(PDK) "sky130A" set ::env(STD_CELL_LIBRARY) "sky130_fd_sc_hd" # YOU ARE NOT ALLOWED TO CHANGE ANY VARIABLES DEFINED IN THE FIXED WRAPPER CFGS @@ -43,8 +44,10 @@ ## Source Verilog Files set ::env(VERILOG_FILES) "\ + $proj_dir/../../verilog/rtl//yifive/ycr1c/src/top/ycr_top_wb.sv \ $proj_dir/../../verilog/rtl/user_project_wrapper.v" + ## Clock configurations set ::env(CLOCK_PORT) "user_clock2 wb_clk_i" #set ::env(CLOCK_NET) "mprj.clk" @@ -70,8 +73,11 @@ $proj_dir/../../verilog/gl/pinmux.v \ $proj_dir/../../verilog/gl/uart_i2c_usb_spi_top.v \ $proj_dir/../../verilog/gl/wb_host.v \ - $proj_dir/../../verilog/gl/yifive.v \ - $proj_dir/../../verilog/gl/DFFRAM.v \ + $proj_dir/../../verilog/gl/ycr_intf.v \ + $proj_dir/../../verilog/gl/ycr_core_top.v \ + $proj_dir/../../verilog/gl/ycr_iconnect.v \ + $proj_dir/../../verilog/gl/digital_pll.v \ + $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/verilog/sky130_sram_2kbyte_1rw1r_32x512_8.v \ " set ::env(EXTRA_LEFS) "\ @@ -80,8 +86,11 @@ $lef_root/wb_interconnect.lef \ $lef_root/uart_i2c_usb_spi_top.lef \ $lef_root/wb_host.lef \ - $lef_root/yifive.lef \ - $lef_root/DFFRAM.lef \ + $lef_root/ycr_intf.lef \ + $lef_root/ycr_core_top.lef \ + $lef_root/ycr_iconnect.lef \ + $lef_root/digital_pll.lef \ + $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/lef/sky130_sram_2kbyte_1rw1r_32x512_8.lef \ " set ::env(EXTRA_GDS_FILES) "\ @@ -90,15 +99,18 @@ $gds_root/wb_interconnect.gds \ $gds_root/uart_i2c_usb_spi_top.gds \ $gds_root/wb_host.gds \ - $gds_root/yifive.gds \ - $gds_root/DFFRAM.gds \ + $gds_root/ycr_intf.gds \ + $gds_root/ycr_core_top.gds \ + $gds_root/ycr_iconnect.gds \ + $gds_root/digital_pll.gds \ + $::env(PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/gds/sky130_sram_2kbyte_1rw1r_32x512_8.gds \ " set ::env(SYNTH_DEFINES) [list SYNTHESIS ] -#set ::env(VERILOG_INCLUDE_DIRS) [glob $proj_dir/../../verilog/rtl/yifive/ycr1c/src/includes ] +set ::env(VERILOG_INCLUDE_DIRS) [glob $proj_dir/../../verilog/rtl/yifive/ycr1c/src/includes ] -set ::env(GLB_RT_MAXLAYER) 6 +#set ::env(GLB_RT_MAXLAYER) 6 set ::env(RT_MAX_LAYER) {met5} set ::env(FP_PDN_CHECK_NODES) 0 @@ -109,42 +121,52 @@ set ::env(FP_PDN_ENABLE_MACROS_GRID) "1" set ::env(FP_PDN_ENABLE_GLOBAL_CONNECTIONS) "1" -set ::env(VDD_NETS) "vccd1 vccd2 vdda1 vdda2" -set ::env(GND_NETS) "vssd1 vssd2 vssa1 vssa2" +set ::env(VDD_NETS) {vccd1 vccd2 vdda1 vdda2} +set ::env(GND_NETS) {vssd1 vssd2 vssa1 vssa2} # -set ::env(VDD_PIN) "vccd1" -set ::env(GND_PIN) "vssd1" +set ::env(VDD_PIN) {vccd1} +set ::env(GND_PIN) {vssd1} + +set ::env(GLB_RT_OBS) " \ + li1 150 130 833.1 546.54,\ + met1 150 130 833.1 546.54,\ + met2 150 130 833.1 546.54,\ + met3 150 130 833.1 546.54,\ + + li1 950 130 1633.1 546.54,\ + met1 950 130 1633.1 546.54,\ + met2 950 130 1633.1 546.54,\ + met3 950 130 1633.1 546.54,\ + + li1 150 750 833.1 1166.54,\ + met1 150 750 833.1 1166.54,\ + met2 150 750 833.1 1166.54,\ + met3 150 750 833.1 1166.54,\ + met5 0 0 2920 3520" + set ::env(FP_PDN_POWER_STRAPS) "vccd1 vssd1 1, vccd2 vssd2 0, vdda1 vssa1 0, vdda2 vssa2 0" -set ::env(GLB_RT_OBS) " met5 0 0 2920 3520, \ - met4 125 1750 675 2490, \ - met4 125 2645 675 3385, \ - met4 125 900 675 1640, \ - met4 800 110 1350 850, \ - met4 850 2645 1400 3385, \ - met4 1575 2645 2125 3385 \ - " - - -#set ::env(FP_PDN_MACRO_HOOKS) " \ -# u_intercon vccd1 vssd1 \ -# u_pinmux vccd1 vssd1 \ -# u_qspi_master vccd1 vssd1 \ -# u_riscv_top vccd1 vssd1 \ -# u_tsram0_2kb vccd1 vssd1 \ -# u_icache_2kb vccd1 vssd1 \ -# u_dcache_2kb vccd1 vssd1 \ -# u_mbist vccd1 vssd1 \ -# u_sram0_2kb vccd1 vssd1 \ -# u_sram1_2kb vccd1 vssd1 \ -# u_sram2_2kb vccd1 vssd1 \ -# u_sram3_2kb vccd1 vssd1 \ -# u_uart_i2c_usb_spi vccd1 vssd1 \ -# u_wb_host vccd1 vssd1 " +set ::env(FP_PDN_MACRO_HOOKS) " \ + u_intercon vccd1 vssd1,\ + u_pinmux vccd1 vssd1,\ + u_qspi_master vccd1 vssd1,\ + u_riscv_top vccd1 vssd1,\ + u_tsram0_2kb vccd1 vssd1,\ + u_icache_2kb vccd1 vssd1,\ + u_dcache_2kb vccd1 vssd1,\ + u_sram0_2kb vccd1 vssd1,\ + u_sram1_2kb vccd1 vssd1,\ + u_sram2_2kb vccd1 vssd1,\ + u_sram3_2kb vccd1 vssd1,\ + u_uart_i2c_usb_spi vccd1 vssd1,\ + u_wb_host vccd1 vssd1,\ + u_riscv_top.i_core_top_0 vccd1 vssd1, \ + u_riscv_top.u_intf vccd1 vssd1 \ + " # The following is because there are no std cells in the example wrapper project. -set ::env(SYNTH_TOP_LEVEL) 1 +set ::env(SYNTH_TOP_LEVEL) 0 set ::env(PL_RANDOM_GLB_PLACEMENT) 1 set ::env(PL_RESIZER_DESIGN_OPTIMIZATIONS) 0 @@ -160,8 +182,7 @@ set ::env(CLOCK_TREE_SYNTH) 0 set ::env(QUIT_ON_LVS_ERROR) "0" -set ::env(QUIT_ON_TR_DRC) "1" -set ::env(QUIT_ON_MAGIC_DRC) "1" +set ::env(QUIT_ON_MAGIC_DRC) "0" set ::env(QUIT_ON_NEGATIVE_WNS) "0" set ::env(QUIT_ON_SLEW_VIOLATIONS) "0" set ::env(QUIT_ON_TIMING_VIOLATIONS) "0" @@ -170,13 +191,26 @@ set ::env(FP_PDN_HORIZONTAL_HALO) "10" set ::env(FP_PDN_VERTICAL_HALO) "10" +# + +set ::env(FP_PDN_CORE_RING_HOFFSET) {12.45} +set ::env(FP_PDN_CORE_RING_HSPACING) {1.7} +set ::env(FP_PDN_CORE_RING_HWIDTH) {3.1} + +set ::env(FP_PDN_CORE_RING_VOFFSET) {12.45} +set ::env(FP_PDN_CORE_RING_VSPACING) {1.7} +set ::env(FP_PDN_CORE_RING_VWIDTH) {3.1} + + set ::env(FP_PDN_VOFFSET) "5" set ::env(FP_PDN_VPITCH) "80" set ::env(FP_PDN_VSPACING) "15.5" set ::env(FP_PDN_VWIDTH) "3.1" -set ::env(FP_PDN_HOFFSET) "16.65" -set ::env(FP_PDN_HPITCH) "130" +set ::env(FP_PDN_HOFFSET) "10" +set ::env(FP_PDN_HPITCH) "90" +set ::env(FP_PDN_HSPACING) "10" +set ::env(FP_PDN_HWIDTH) "3.1"
diff --git a/openlane/user_project_wrapper/interactive.tcl b/openlane/user_project_wrapper/interactive.tcl index 2842c9f..07190b7 100644 --- a/openlane/user_project_wrapper/interactive.tcl +++ b/openlane/user_project_wrapper/interactive.tcl
@@ -19,41 +19,53 @@ package require openlane; proc run_placement_step {args} { - if { ! [ info exists ::env(PLACEMENT_CURRENT_DEF) ] } { - set ::env(PLACEMENT_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(PLACEMENT_CURRENT_DEF) - } + if { ! [ info exists ::env(PLACEMENT_CURRENT_DEF) ] } { + set ::env(PLACEMENT_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(PLACEMENT_CURRENT_DEF) + } - run_placement + run_placement } proc run_cts_step {args} { - if { ! [ info exists ::env(CTS_CURRENT_DEF) ] } { - set ::env(CTS_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(CTS_CURRENT_DEF) - } + if { ! [ info exists ::env(CTS_CURRENT_DEF) ] } { + set ::env(CTS_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(CTS_CURRENT_DEF) + } - run_cts - run_resizer_timing + run_cts + run_resizer_timing } proc run_routing_step {args} { - if { ! [ info exists ::env(ROUTING_CURRENT_DEF) ] } { - set ::env(ROUTING_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(ROUTING_CURRENT_DEF) - } - run_routing + if { ! [ info exists ::env(ROUTING_CURRENT_DEF) ] } { + set ::env(ROUTING_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(ROUTING_CURRENT_DEF) + } + run_routing +} + +proc run_parasitics_sta_step {args} { + if { ! [ info exists ::env(PARSITICS_CURRENT_DEF) ] } { + set ::env(PARSITICS_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(PARSITICS_CURRENT_DEF) + } + + if { $::env(RUN_SPEF_EXTRACTION) } { + run_parasitics_sta + } } proc run_diode_insertion_2_5_step {args} { - if { ! [ info exists ::env(DIODE_INSERTION_CURRENT_DEF) ] } { - set ::env(DIODE_INSERTION_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(DIODE_INSERTION_CURRENT_DEF) - } + if { ! [ info exists ::env(DIODE_INSERTION_CURRENT_DEF) ] } { + set ::env(DIODE_INSERTION_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(DIODE_INSERTION_CURRENT_DEF) + } if { ($::env(DIODE_INSERTION_STRATEGY) == 2) || ($::env(DIODE_INSERTION_STRATEGY) == 5) } { run_antenna_check heal_antenna_violators; # modifies the routed DEF @@ -62,36 +74,41 @@ } proc run_lvs_step {{ lvs_enabled 1 }} { - if { ! [ info exists ::env(LVS_CURRENT_DEF) ] } { - set ::env(LVS_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(LVS_CURRENT_DEF) - } - if { $lvs_enabled } { - run_magic_spice_export + if { ! [ info exists ::env(LVS_CURRENT_DEF) ] } { + set ::env(LVS_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(LVS_CURRENT_DEF) + } + + if { $lvs_enabled && $::env(RUN_LVS) } { + run_magic_spice_export; run_lvs; # requires run_magic_spice_export } } proc run_drc_step {{ drc_enabled 1 }} { - if { ! [ info exists ::env(DRC_CURRENT_DEF) ] } { - set ::env(DRC_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(DRC_CURRENT_DEF) - } + if { ! [ info exists ::env(DRC_CURRENT_DEF) ] } { + set ::env(DRC_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(DRC_CURRENT_DEF) + } if { $drc_enabled } { - run_magic_drc - run_klayout_drc + if { $::env(RUN_MAGIC_DRC) } { + run_magic_drc + } + if {$::env(RUN_KLAYOUT_DRC)} { + run_klayout_drc + } } } proc run_antenna_check_step {{ antenna_check_enabled 1 }} { - if { ! [ info exists ::env(ANTENNA_CHECK_CURRENT_DEF) ] } { - set ::env(ANTENNA_CHECK_CURRENT_DEF) $::env(CURRENT_DEF) - } else { - set ::env(CURRENT_DEF) $::env(ANTENNA_CHECK_CURRENT_DEF) - } + if { ! [ info exists ::env(ANTENNA_CHECK_CURRENT_DEF) ] } { + set ::env(ANTENNA_CHECK_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(ANTENNA_CHECK_CURRENT_DEF) + } if { $antenna_check_enabled } { run_antenna_check } @@ -99,8 +116,23 @@ proc run_eco_step {args} { if { $::env(ECO_ENABLE) == 1 } { - run_eco - } + run_eco_flow + } +} + +proc run_magic_step {args} { + if {$::env(RUN_MAGIC)} { + run_magic + } +} + +proc run_klayout_step {args} { + if {$::env(RUN_KLAYOUT)} { + run_klayout + } + if {$::env(RUN_KLAYOUT_XOR)} { + run_klayout_gds_xor + } } proc save_final_views {args} { @@ -113,19 +145,19 @@ set arg_list [list] # If they don't exist, save_views will simply not copy them - lappend arg_list -lef_path $::env(finishing_results)/$::env(DESIGN_NAME).lef - lappend arg_list -gds_path $::env(finishing_results)/$::env(DESIGN_NAME).gds - lappend arg_list -mag_path $::env(finishing_results)/$::env(DESIGN_NAME).mag - lappend arg_list -maglef_path $::env(finishing_results)/$::env(DESIGN_NAME).lef.mag - lappend arg_list -spice_path $::env(finishing_results)/$::env(DESIGN_NAME).spice - + lappend arg_list -lef_path $::env(signoff_results)/$::env(DESIGN_NAME).lef + lappend arg_list -gds_path $::env(signoff_results)/$::env(DESIGN_NAME).gds + lappend arg_list -mag_path $::env(signoff_results)/$::env(DESIGN_NAME).mag + lappend arg_list -maglef_path $::env(signoff_results)/$::env(DESIGN_NAME).lef.mag + lappend arg_list -spice_path $::env(signoff_results)/$::env(DESIGN_NAME).spice + # Guaranteed to have default values lappend arg_list -def_path $::env(CURRENT_DEF) lappend arg_list -verilog_path $::env(CURRENT_NETLIST) # Not guaranteed to have default values - if { [info exists ::env(SPEF_TYPICAL)] } { - lappend arg_list -spef_path $::env(SPEF_TYPICAL) + if { [info exists ::env(CURRENT_SPEF)] } { + lappend arg_list -spef_path $::env(CURRENT_SPEF) } if { [info exists ::env(CURRENT_SDF)] } { lappend arg_list -sdf_path $::env(CURRENT_SDF) @@ -154,15 +186,13 @@ } } - - - proc gen_pdn {args} { - puts_info "Generating PDN..." + increment_index TIMER::timer_start - - set ::env(SAVE_DEF) [index_file $::env(floorplan_tmpfiles).def] - set ::env(PGA_RPT_FILE) [index_file $::env(floorplan_tmpfiles).pga.rpt] + puts_info "Generating PDN..." + + set ::env(SAVE_DEF) [index_file $::env(floorplan_tmpfiles)/pdn.def] + set ::env(PGA_RPT_FILE) [index_file $::env(floorplan_tmpfiles)/pdn.pga.rpt] run_openroad_script $::env(SCRIPTS_DIR)/openroad/pdn.tcl \ |& -indexed_log [index_file $::env(floorplan_logs)/pdn.log] @@ -177,12 +207,50 @@ } proc run_power_grid_generation {args} { + if { [info exists ::env(VDD_NETS)] || [info exists ::env(GND_NETS)] } { + # they both must exist and be equal in length + # current assumption: they cannot have a common ground + if { ! [info exists ::env(VDD_NETS)] || ! [info exists ::env(GND_NETS)] } { + puts_err "VDD_NETS and GND_NETS must *both* either be defined or undefined" + return -code error + } + # standard cell power and ground nets are assumed to be the first net + set ::env(VDD_PIN) [lindex $::env(VDD_NETS) 0] + set ::env(GND_PIN) [lindex $::env(GND_NETS) 0] + } elseif { [info exists ::env(SYNTH_USE_PG_PINS_DEFINES)] } { + set ::env(VDD_NETS) [list] + set ::env(GND_NETS) [list] + # get the pins that are in $synthesis_tmpfiles.pg_define.v + # that are not in $synthesis_results.v + # + set full_pins {*}[extract_pins_from_yosys_netlist $::env(synthesis_tmpfiles)/pg_define.v] + puts_info $full_pins - if {[info exists ::env(FP_PDN_POWER_STRAPS)]} { - set power_domains [split $::env(FP_PDN_POWER_STRAPS) ","] + set non_pg_pins {*}[extract_pins_from_yosys_netlist $::env(synthesis_results)/$::env(DESIGN_NAME).v] + puts_info $non_pg_pins + + # assumes the pins are ordered correctly (e.g., vdd1, vss1, vcc1, vss1, ...) + foreach {vdd gnd} $full_pins { + if { $vdd ne "" && $vdd ni $non_pg_pins } { + lappend ::env(VDD_NETS) $vdd + } + if { $gnd ne "" && $gnd ni $non_pg_pins } { + lappend ::env(GND_NETS) $gnd + } + } + } else { + set ::env(VDD_NETS) $::env(VDD_PIN) + set ::env(GND_NETS) $::env(GND_PIN) } - # internal macros power connections + puts_info "Power planning with power {$::env(VDD_NETS)} and ground {$::env(GND_NETS)}..." + + if { [llength $::env(VDD_NETS)] != [llength $::env(GND_NETS)] } { + puts_err "VDD_NETS and GND_NETS must be of equal lengths" + return -code error + } + + # check internal macros' power connection definitions if {[info exists ::env(FP_PDN_MACRO_HOOKS)]} { set macro_hooks [dict create] set pdn_hooks [split $::env(FP_PDN_MACRO_HOOKS) ","] @@ -192,73 +260,19 @@ set ground_net [lindex $pdn_hook 2] dict append macro_hooks $instance_name [subst {$power_net $ground_net}] } - + set power_net_indx [lsearch $::env(VDD_NETS) $power_net] set ground_net_indx [lsearch $::env(GND_NETS) $ground_net] # make sure that the specified power domains exist. if { $power_net_indx == -1 || $ground_net_indx == -1 || $power_net_indx != $ground_net_indx } { puts_err "Can't find $power_net and $ground_net domain. \ - Make sure that both exist in $::env(VDD_NETS) and $::env(GND_NETS)." - } - } - - # generate multiple power grids per pair of (VDD,GND) - # offseted by WIDTH + SPACING - foreach domain $power_domains { - set ::env(VDD_NET) [lindex $domain 0] - set ::env(GND_NET) [lindex $domain 1] - set ::env(_WITH_STRAPS) [lindex $domain 2] - - puts_info "Connecting Power: $::env(VDD_NET) & $::env(GND_NET) to All internal macros." - # internal macros power connections - set ::env(FP_PDN_MACROS) "" - if { $::env(FP_PDN_ENABLE_MACROS_GRID) == 1 } { - # if macros connections to power are explicitly set - # default behavoir macro pins will be connected to the first power domain - if { [info exists ::env(FP_PDN_MACRO_HOOKS)] } { - set ::env(FP_PDN_ENABLE_MACROS_GRID) 0 - foreach {instance_name hooks} $macro_hooks { - set power [lindex $hooks 0] - set ground [lindex $hooks 1] - if { $power == $::env(VDD_NET) && $ground == $::env(GND_NET) } { - set ::env(FP_PDN_ENABLE_MACROS_GRID) 1 - set ::env(FP_PDN_IRDROP) "0" - puts_info "Connecting $instance_name to $power and $ground nets." - lappend ::env(FP_PDN_MACROS) $instance_name - } - } - } - } else { - puts_warn "All internal macros will not be connected to power $::env(VDD_NET) & $::env(GND_NET)." + Make sure that both exist in $::env(VDD_NETS) and $::env(GND_NETS)." } - - gen_pdn - - set ::env(FP_PDN_ENABLE_RAILS) 0 - set ::env(FP_PDN_ENABLE_MACROS_GRID) 0 - set ::env(FP_PDN_IRDROP) "0" - - # allow failure until open_pdks is up to date... - catch {set ::env(FP_PDN_VOFFSET) [expr $::env(FP_PDN_VOFFSET)+$::env(FP_PDN_VWIDTH)+$::env(FP_PDN_VSPACING)]} - catch {set ::env(FP_PDN_HOFFSET) [expr $::env(FP_PDN_HOFFSET)+$::env(FP_PDN_HWIDTH)+$::env(FP_PDN_HSPACING)]} - - catch {set ::env(FP_PDN_CORE_RING_VOFFSET) \ - [expr $::env(FP_PDN_CORE_RING_VOFFSET)\ - +2*($::env(FP_PDN_CORE_RING_VWIDTH)\ - +max($::env(FP_PDN_CORE_RING_VSPACING), $::env(FP_PDN_CORE_RING_HSPACING)))]} - catch {set ::env(FP_PDN_CORE_RING_HOFFSET) [expr $::env(FP_PDN_CORE_RING_HOFFSET)\ - +2*($::env(FP_PDN_CORE_RING_HWIDTH)+\ - max($::env(FP_PDN_CORE_RING_VSPACING), $::env(FP_PDN_CORE_RING_HSPACING)))]} - puts "FP_PDN_VOFFSET: $::env(FP_PDN_VOFFSET)" - puts "FP_PDN_HOFFSET: $::env(FP_PDN_HOFFSET)" - puts "FP_PDN_CORE_RING_VOFFSET: $::env(FP_PDN_CORE_RING_VOFFSET)" - puts "FP_PDN_CORE_RING_HOFFSET: $::env(FP_PDN_CORE_RING_HOFFSET)" - } - set ::env(FP_PDN_ENABLE_RAILS) 1 -} + gen_pdn +} proc run_floorplan {args} { puts_info "Running Floorplanning..." @@ -333,6 +347,10 @@ prep {*}$args # signal trap SIGINT save_state; + if { [info exists flags_map(-gui)] } { + or_gui + return + } if { [info exists arg_values(-override_env)] } { set env_overrides [split $arg_values(-override_env) ','] foreach override $env_overrides { @@ -344,25 +362,25 @@ } set LVS_ENABLED 1 - set DRC_ENABLED 1 + set DRC_ENABLED 0 set ANTENNACHECK_ENABLED 1 - set steps [dict create \ - "synthesis" {run_synthesis "" } \ - "floorplan" {run_floorplan ""} \ - "placement" {run_placement_step ""} \ - "cts" {run_cts_step ""} \ - "routing" {run_routing_step ""}\ - "eco" {run_eco_step ""} \ - "diode_insertion" {run_diode_insertion_2_5_step ""} \ - "gds_magic" {run_magic ""} \ - "gds_drc_klayout" {run_klayout ""} \ - "gds_xor_klayout" {run_klayout_gds_xor ""} \ - "lvs" "run_lvs_step $LVS_ENABLED" \ - "drc" "run_drc_step $DRC_ENABLED" \ - "antenna_check" "run_antenna_check_step $ANTENNACHECK_ENABLED" \ - "cvc" {run_lef_cvc} - ] + set steps [dict create \ + "synthesis" "run_synthesis" \ + "floorplan" "run_floorplan" \ + "placement" "run_placement_step" \ + "cts" "run_cts_step" \ + "routing" "run_routing_step" \ + "parasitics_sta" "run_parasitics_sta_step" \ + "eco" "run_eco_step" \ + "diode_insertion" "run_diode_insertion_2_5_step" \ + "gds_magic" "run_magic_step" \ + "gds_klayout" "run_klayout_step" \ + "lvs" "run_lvs_step $LVS_ENABLED " \ + "drc" "run_drc_step $DRC_ENABLED " \ + "antenna_check" "run_antenna_check_step $ANTENNACHECK_ENABLED " \ + "cvc" "run_lef_cvc" + ] set_if_unset arg_values(-to) "cvc";
diff --git a/openlane/user_project_wrapper/macro.cfg b/openlane/user_project_wrapper/macro.cfg index 9b2fa9f..752b00b 100644 --- a/openlane/user_project_wrapper/macro.cfg +++ b/openlane/user_project_wrapper/macro.cfg
@@ -1,15 +1,15 @@ -u_qspi_master 2275 710 N -u_uart_i2c_usb_spi 2275 1410 N -u_pinmux 2275 2250 N +u_qspi_master 2250 650 N +u_uart_i2c_usb_spi 2250 1350 N +u_pinmux 2250 2150 N -u_tcm_1KB_mem0 125 1750 N -u_tcm_1KB_mem1 125 2645 N -u_riscv_top 850 955 N -u_icache_1KB_mem0 125 900 N -u_icache_1KB_mem1 800 110 N +u_riscv_top.i_core_top_0 50 1400 N +u_riscv_top.u_connect 725 1400 N +u_riscv_top.u_intf 950 650 N +u_dcache_2kb 150 130 N +u_icache_2kb 950 130 N +u_tsram0_2kb 150 750 N -u_dcache_1KB_mem0 850 2645 N -u_dcache_1KB_mem1 1575 2645 N -u_intercon 1850 710 N -u_wb_host 1750 175 N +u_intercon 1850 650 N +u_wb_host 1750 100 N +u_pll 2200 100 N
diff --git a/openlane/user_project_wrapper/pdn_cfg.tcl b/openlane/user_project_wrapper/pdn_cfg.tcl index 7813f95..1bd5f1e 100644 --- a/openlane/user_project_wrapper/pdn_cfg.tcl +++ b/openlane/user_project_wrapper/pdn_cfg.tcl
@@ -8,89 +8,158 @@ set ::env(GND_NET) $::env(GND_PIN) } -set ::power_nets $::env(VDD_NET) -set ::ground_nets $::env(GND_NET) - if { [info exists ::env(FP_PDN_ENABLE_GLOBAL_CONNECTIONS)] } { if { $::env(FP_PDN_ENABLE_GLOBAL_CONNECTIONS) == 1 } { foreach power_pin $::env(STD_CELL_POWER_PINS) { - add_global_connection -net $::env(VDD_NET) -inst_pattern .* -pin_pattern $power_pin -power + add_global_connection \ + -net $::env(VDD_NET) \ + -inst_pattern .* \ + -pin_pattern $power_pin \ + -power } foreach ground_pin $::env(STD_CELL_GROUND_PINS) { - add_global_connection -net $::env(GND_NET) -inst_pattern .* -pin_pattern $ground_pin -ground + add_global_connection \ + -net $::env(GND_NET) \ + -inst_pattern .* \ + -pin_pattern $ground_pin \ + -ground } } } -set_voltage_domain -name CORE -power $::env(VDD_NET) -ground $::env(GND_NET) +if { $::env(FP_PDN_ENABLE_MACROS_GRID) == 1 && + [info exists ::env(FP_PDN_MACRO_HOOKS)]} { + set pdn_hooks [split $::env(FP_PDN_MACRO_HOOKS) ","] + foreach pdn_hook $pdn_hooks { + set instance_name [lindex $pdn_hook 0] + set power_net [lindex $pdn_hook 1] + set ground_net [lindex $pdn_hook 2] + # This assumes the power pin and the power net have the same name. + # The macro hooks only give an instance name and not power pin names. -# Assesses whether the deisgn is the core of the chip or not based on the + add_global_connection \ + -net $power_net \ + -inst_pattern $instance_name \ + -pin_pattern $power_net \ + -power + + add_global_connection \ + -net $ground_net \ + -inst_pattern $instance_name \ + -pin_pattern $ground_net \ + -ground + } +} + +set secondary [] + +foreach vdd $::env(VDD_NETS) gnd $::env(GND_NETS) { + if { $vdd != $::env(VDD_NET)} { + lappend secondary $vdd + + set db_net [[ord::get_db_block] findNet $vdd] + if {$db_net == "NULL"} { + set net [odb::dbNet_create [ord::get_db_block] $vdd] + $net setSpecial + $net setSigType "POWER" + } + } + + if { $gnd != $::env(GND_NET)} { + lappend secondary $gnd + + set db_net [[ord::get_db_block] findNet $gnd] + if {$db_net == "NULL"} { + set net [odb::dbNet_create [ord::get_db_block] $gnd] + $net setSpecial + $net setSigType "GROUND" + } + } +} + +set_voltage_domain -name CORE -power $::env(VDD_NET) -ground $::env(GND_NET) \ + -secondary_power $secondary + +# Assesses whether the design is the core of the chip or not based on the # value of $::env(DESIGN_IS_CORE) and uses the appropriate stdcell section if { $::env(DESIGN_IS_CORE) == 1 } { # Used if the design is the core of the chip - define_pdn_grid -name stdcell_grid -starts_with POWER -voltage_domain CORE -pins [subst {$::env(FP_PDN_LOWER_LAYER) $::env(FP_PDN_UPPER_LAYER)}] - if { $::env(_WITH_STRAPS) } { - add_pdn_stripe -grid stdcell_grid -layer $::env(FP_PDN_LOWER_LAYER) -width $::env(FP_PDN_VWIDTH) -pitch $::env(FP_PDN_VPITCH) -offset $::env(FP_PDN_VOFFSET) -starts_with POWER - add_pdn_stripe -grid stdcell_grid -layer $::env(FP_PDN_UPPER_LAYER) -width $::env(FP_PDN_HWIDTH) -pitch $::env(FP_PDN_HPITCH) -offset $::env(FP_PDN_HOFFSET) -starts_with POWER - } - add_pdn_connect -grid stdcell_grid -layers [subst {$::env(FP_PDN_LOWER_LAYER) $::env(FP_PDN_UPPER_LAYER)}] + define_pdn_grid \ + -name stdcell_grid \ + -starts_with POWER \ + -voltage_domain CORE \ + -pins "$::env(FP_PDN_LOWER_LAYER) $::env(FP_PDN_UPPER_LAYER)" + + add_pdn_stripe \ + -grid stdcell_grid \ + -layer $::env(FP_PDN_LOWER_LAYER) \ + -width $::env(FP_PDN_VWIDTH) \ + -pitch $::env(FP_PDN_VPITCH) \ + -offset $::env(FP_PDN_VOFFSET) \ + -nets "$::env(VDD_NET) $::env(GND_NET)" \ + -starts_with POWER -extend_to_core_ring + + add_pdn_stripe \ + -grid stdcell_grid \ + -layer $::env(FP_PDN_UPPER_LAYER) \ + -width $::env(FP_PDN_HWIDTH) \ + -pitch $::env(FP_PDN_HPITCH) \ + -offset $::env(FP_PDN_HOFFSET) \ + -nets "$::env(VDD_NET) $::env(GND_NET)" \ + -starts_with POWER -extend_to_core_ring + + add_pdn_connect \ + -grid stdcell_grid \ + -layers "$::env(FP_PDN_LOWER_LAYER) $::env(FP_PDN_UPPER_LAYER)" } else { # Used if the design is a macro in the core - define_pdn_grid -name stdcell_grid -starts_with POWER -voltage_domain CORE -pins $::env(FP_PDN_LOWER_LAYER) - add_pdn_stripe -grid stdcell_grid -layer $::env(FP_PDN_LOWER_LAYER) -width $::env(FP_PDN_VWIDTH) -pitch $::env(FP_PDN_VPITCH) -offset $::env(FP_PDN_VOFFSET) -starts_with POWER + define_pdn_grid \ + -name stdcell_grid \ + -starts_with POWER \ + -voltage_domain CORE \ + -pins $::env(FP_PDN_LOWER_LAYER) + + add_pdn_stripe \ + -grid stdcell_grid \ + -layer $::env(FP_PDN_LOWER_LAYER) \ + -width $::env(FP_PDN_VWIDTH) \ + -pitch $::env(FP_PDN_VPITCH) \ + -offset $::env(FP_PDN_VOFFSET) \ + -starts_with POWER } # Adds the standard cell rails if enabled. if { $::env(FP_PDN_ENABLE_RAILS) == 1 } { - add_pdn_stripe -grid stdcell_grid -layer $::env(FP_PDN_RAILS_LAYER) -width $::env(FP_PDN_RAIL_WIDTH) -followpins -starts_with POWER - add_pdn_connect -grid stdcell_grid -layers [subst {$::env(FP_PDN_RAILS_LAYER) $::env(FP_PDN_LOWER_LAYER)}] + add_pdn_stripe \ + -grid stdcell_grid \ + -layer $::env(FP_PDN_RAILS_LAYER) \ + -width $::env(FP_PDN_RAIL_WIDTH) \ + -followpins \ + -starts_with POWER + + add_pdn_connect \ + -grid stdcell_grid \ + -layers "$::env(FP_PDN_RAILS_LAYER) $::env(FP_PDN_LOWER_LAYER)" } # Adds the core ring if enabled. if { $::env(FP_PDN_CORE_RING) == 1 } { - add_pdn_ring -grid stdcell_grid -layer [subst {$::env(FP_PDN_LOWER_LAYER) $::env(FP_PDN_UPPER_LAYER)}] \ - -widths [subst {$::env(FP_PDN_CORE_RING_VWIDTH) $::env(FP_PDN_CORE_RING_HWIDTH)}] \ - -spacings [subst {$::env(FP_PDN_CORE_RING_VSPACING) $::env(FP_PDN_CORE_RING_HSPACING)}] \ - -core_offset [subst {$::env(FP_PDN_CORE_RING_VOFFSET) $::env(FP_PDN_CORE_RING_HOFFSET)}] + add_pdn_ring \ + -grid stdcell_grid \ + -layers "$::env(FP_PDN_LOWER_LAYER) $::env(FP_PDN_UPPER_LAYER)" \ + -widths "$::env(FP_PDN_CORE_RING_VWIDTH) $::env(FP_PDN_CORE_RING_HWIDTH)" \ + -spacings "$::env(FP_PDN_CORE_RING_VSPACING) $::env(FP_PDN_CORE_RING_HSPACING)" \ + -core_offset "$::env(FP_PDN_CORE_RING_VOFFSET) $::env(FP_PDN_CORE_RING_HOFFSET)" } -# A general macro that follows the premise of the set heirarchy. You may want to modify this or add other macro configs -# The macro power pin names are assumed to match the VDD and GND net names -# TODO: parameterize the power pin names -set macro { - orient {R0 R180 MX MY R90 R270 MXR90 MYR90} - power_pins $::env(VDD_NET) - ground_pins $::env(GND_NET) - blockages $::env(MACRO_BLOCKAGES_LAYER) - straps { - } - connect {{$::env(FP_PDN_LOWER_LAYER)_PIN_ver $::env(FP_PDN_UPPER_LAYER)}} -} +define_pdn_grid \ + -macro \ + -default \ + -name macro \ + -starts_with POWER \ + -halo "$::env(FP_PDN_HORIZONTAL_HALO) $::env(FP_PDN_VERTICAL_HALO)" -if { $::env(FP_PDN_ENABLE_MACROS_GRID) == 1} { - if { [llength $::env(FP_PDN_MACROS)] > 0 } { - # generate automatically per instance: - foreach macro_instance $::env(FP_PDN_MACROS) { - set macro_instance_grid [subst $macro] - dict append $macro_instance_grid instance $macro_instance - set ::halo [list $::env(FP_PDN_HORIZONTAL_HALO) $::env(FP_PDN_VERTICAL_HALO)] - pdngen::specify_grid macro [subst $macro_instance_grid] - } - } else { - set ::halo [list $::env(FP_PDN_HORIZONTAL_HALO) $::env(FP_PDN_VERTICAL_HALO)] - pdngen::specify_grid macro [subst $macro] - } - # CAN NOT ENABLE THE TCL COMMAND BECAUSE THERE IS NO ARGUMENT FOR SPECIFYING THE POWER AND GROUND PIN NAMES ON THE MACRO - # define_pdn_grid -macro -orient {R0 R180 MX MY R90 R270 MXR90 MYR90} -grid_over_pg_pins -starts_with POWER -pin_direction vertical -halo [subst {$::env(FP_PDN_HORIZONTAL_HALO) $::env(FP_PDN_VERTICAL_HALO)}] - # add_pdn_connect -layers [subst {$::env(FP_PDN_LOWER_LAYER) $::env(FP_PDN_UPPER_LAYER)}] -} else { - define_pdn_grid -macro -orient {R0 R180 MX MY R90 R270 MXR90 MYR90} -grid_over_pg_pins -starts_with POWER -halo [subst {$::env(FP_PDN_HORIZONTAL_HALO) $::env(FP_PDN_VERTICAL_HALO)}] -} - -# 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" ; - +add_pdn_connect \ + -grid macro \ + -layers "$::env(FP_PDN_LOWER_LAYER) $::env(FP_PDN_UPPER_LAYER)"
diff --git a/openlane/wb_host/base.sdc b/openlane/wb_host/base.sdc index 9d9cc79..a5b2325 100644 --- a/openlane/wb_host/base.sdc +++ b/openlane/wb_host/base.sdc
@@ -8,7 +8,12 @@ ############################################################################### create_clock -name wbm_clk_i -period 10.0000 [get_ports {wbm_clk_i}] create_clock -name wbs_clk_i -period 10.0000 [get_ports {wbs_clk_i}] -create_clock -name uart_clk -period 100.0000 [get_pins {u_uart2wb.u_core.u_uart_clk.u_mux/X}] +create_clock -name uart_clk -period 100.0000 [get_pins {u_uart2wb.u_core.u_uart_clk.genblk1.u_mux/X}] + +create_clock -name int_pll_clock -period 10.0000 [get_pins {u_clkbuf_pll.u_buf/X}] +create_clock -name wbs_ref_clk -period 10.0000 [get_pins {u_wbs_ref_clkbuf.u_buf/X}] +create_clock -name cpu_ref_clk -period 10.0000 [get_pins {u_cpu_ref_clkbuf.u_buf/X}] +create_clock -name usb_ref_clk -period 10.0000 [get_pins {u_usb_ref_clkbuf.u_buf/X}] set_clock_transition 0.1500 [all_clocks] set_clock_uncertainty -setup 0.2500 [all_clocks] @@ -20,9 +25,14 @@ set_timing_derate -late [expr {1+$::env(SYNTH_TIMING_DERATE)}] set_clock_groups -name async_clock -asynchronous \ - -group [get_clocks {uart_clk}] \ - -group [get_clocks {wbs_clk_i}] \ - -group [get_clocks {wbm_clk_i}] -comment {Async Clock group} + -group [get_clocks {uart_clk}] \ + -group [get_clocks {wbs_clk_i}] \ + -group [get_clocks {wbm_clk_i}] \ + -group [get_clocks {int_pll_clock}] \ + -group [get_clocks {wbs_ref_clk}] \ + -group [get_clocks {cpu_ref_clk}] \ + -group [get_clocks {usb_ref_clk}] \ + -comment {Async Clock group} ### ClkSkew Adjust set_case_analysis 0 [get_ports {cfg_cska_wh[0]}]
diff --git a/openlane/wb_host/config.tcl b/openlane/wb_host/config.tcl index 1dabc40..0d8ff81 100755 --- a/openlane/wb_host/config.tcl +++ b/openlane/wb_host/config.tcl
@@ -26,7 +26,7 @@ # Timing configuration set ::env(CLOCK_PERIOD) "10" -set ::env(CLOCK_PORT) "wbm_clk_i wbs_clk_i u_uart2wb.u_core.u_uart_clk.u_mux/X" +set ::env(CLOCK_PORT) "wbm_clk_i wbs_clk_i u_uart2wb.u_core.u_uart_clk.genblk1.u_mux/X" set ::env(SYNTH_MAX_FANOUT) 4 @@ -85,7 +85,7 @@ set ::env(PL_TIME_DRIVEN) 1 -set ::env(PL_TARGET_DENSITY) "0.38" +set ::env(PL_TARGET_DENSITY) "0.40" @@ -97,7 +97,7 @@ set ::env(FP_PDN_VWIDTH) 5 set ::env(FP_PDN_HWIDTH) 5 -set ::env(GLB_RT_MAXLAYER) 5 +#set ::env(GLB_RT_MAXLAYER) 5 set ::env(RT_MAX_LAYER) {met4} set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 10
diff --git a/openlane/wb_host/pin_order.cfg b/openlane/wb_host/pin_order.cfg index 3448c6c..17b3e01 100644 --- a/openlane/wb_host/pin_order.cfg +++ b/openlane/wb_host/pin_order.cfg
@@ -5,22 +5,6 @@ #W usb_clk 0000 0 4 -cfg_clk_ctrl1\[31\] -cfg_clk_ctrl1\[30\] -cfg_clk_ctrl1\[29\] -cfg_clk_ctrl1\[28\] -cfg_clk_ctrl2\[27\] -cfg_clk_ctrl2\[26\] -cfg_clk_ctrl2\[25\] -cfg_clk_ctrl2\[24\] -cfg_clk_ctrl2\[23\] -cfg_clk_ctrl2\[22\] -cfg_clk_ctrl2\[21\] -cfg_clk_ctrl2\[20\] -cfg_clk_ctrl2\[19\] -cfg_clk_ctrl2\[18\] -cfg_clk_ctrl2\[17\] -cfg_clk_ctrl2\[16\] cpu_clk 0100 0 2 rtc_clk @@ -159,33 +143,61 @@ la_data_in\[17\] #E +cfg_dc_trim\[7\] 000 0 2 +cfg_dc_trim\[8\] +cfg_dc_trim\[9\] +cfg_dc_trim\[10\] +cfg_dc_trim\[11\] +cfg_dc_trim\[12\] +cfg_dc_trim\[13\] +cfg_dc_trim\[14\] +cfg_dc_trim\[15\] +cfg_dc_trim\[16\] +cfg_dc_trim\[17\] +cfg_dc_trim\[18\] +cfg_dc_trim\[19\] -uartm_rxd 100 0 2 +cfg_dc_trim\[25\] +cfg_dc_trim\[24\] +cfg_dc_trim\[23\] +cfg_dc_trim\[22\] +cfg_dc_trim\[21\] +cfg_dc_trim\[20\] + +pll_clk_out\[0\] +pll_clk_out\[1\] +cfg_pll_fed_div\[0\] +cfg_pll_fed_div\[1\] +cfg_pll_fed_div\[2\] +cfg_pll_fed_div\[3\] +cfg_pll_fed_div\[4\] +cfg_pll_enb +cfg_dco_mode +cfg_dc_trim\[0\] +cfg_dc_trim\[1\] +cfg_dc_trim\[2\] +cfg_dc_trim\[3\] +cfg_dc_trim\[4\] +cfg_dc_trim\[5\] +cfg_dc_trim\[6\] + +wbd_pll_rst_n +pll_ref_clk + + + +uartm_rxd 300 0 2 uartm_txd +dbg_clk_mon + #N wbd_int_rst_n 0100 0 2 -cfg_clk_ctrl2\[31\] -cfg_clk_ctrl2\[30\] -cfg_clk_ctrl2\[29\] -cfg_clk_ctrl2\[28\] -cfg_clk_ctrl2\[15\] -cfg_clk_ctrl2\[14\] -cfg_clk_ctrl2\[13\] -cfg_clk_ctrl2\[12\] -cfg_clk_ctrl2\[11\] -cfg_clk_ctrl2\[10\] -cfg_clk_ctrl2\[9\] -cfg_clk_ctrl2\[8\] -cfg_clk_ctrl2\[7\] -cfg_clk_ctrl2\[6\] -cfg_clk_ctrl2\[5\] -cfg_clk_ctrl2\[4\] -cfg_clk_ctrl2\[3\] -cfg_clk_ctrl2\[2\] -cfg_clk_ctrl2\[1\] -cfg_clk_ctrl2\[0\] +cfg_clk_ctrl1\[31\] +cfg_clk_ctrl1\[30\] +cfg_clk_ctrl1\[29\] +cfg_clk_ctrl1\[28\] cfg_clk_ctrl1\[27\] cfg_clk_ctrl1\[26\] cfg_clk_ctrl1\[25\]
diff --git a/openlane/wb_interconnect/config.tcl b/openlane/wb_interconnect/config.tcl index 2b03cd9..33ac3c6 100755 --- a/openlane/wb_interconnect/config.tcl +++ b/openlane/wb_interconnect/config.tcl
@@ -113,7 +113,7 @@ set ::env(GLB_RT_ALLOW_CONGESTION) 0 set ::env(GLB_RT_OVERFLOW_ITERS) 200 -set ::env(GLB_RT_MAXLAYER) 5 +#set ::env(GLB_RT_MAXLAYER) 5 set ::env(RT_MAX_LAYER) {met4}
diff --git a/openlane/wb_interconnect/pin_order.cfg b/openlane/wb_interconnect/pin_order.cfg index cca8e25..1534993 100644 --- a/openlane/wb_interconnect/pin_order.cfg +++ b/openlane/wb_interconnect/pin_order.cfg
@@ -147,7 +147,7 @@ #W -ch_data_out\[36\] 0750 0 2 +ch_data_out\[36\] 000 0 2 ch_data_out\[35\] ch_data_out\[34\] ch_data_out\[33\] @@ -172,7 +172,7 @@ ch_clk_out\[0\] -m1_wbd_stb_i 0950 0 2 +m1_wbd_stb_i 100 0 2 m1_wbd_we_i m1_wbd_adr_i\[31\] m1_wbd_adr_i\[30\] @@ -279,7 +279,7 @@ m1_wbd_err_o m1_wbd_cyc_i -m2_wbd_stb_i 1150 0 2 +m2_wbd_stb_i 300 0 2 m2_wbd_we_i m2_wbd_adr_i\[31\] m2_wbd_adr_i\[30\] @@ -397,7 +397,7 @@ m2_wbd_err_o m2_wbd_cyc_i -m3_wbd_stb_i 1350 0 2 +m3_wbd_stb_i 500 0 2 m3_wbd_we_i m3_wbd_adr_i\[31\] m3_wbd_adr_i\[30\] @@ -701,7 +701,7 @@ s1_wbd_ack_i s1_wbd_cyc_o -ch_data_in\[36\] 1400 0 2 +ch_data_in\[36\] 1500 0 2 ch_data_in\[35\] ch_data_in\[34\] ch_data_in\[33\] @@ -725,7 +725,7 @@ ch_data_out\[12\] ch_clk_out\[3\] -s2_wbd_stb_o 1500 0 2 +s2_wbd_stb_o 1600 0 2 s2_wbd_we_o s2_wbd_adr_o\[7\] s2_wbd_adr_o\[6\]
diff --git a/openlane/ycr_core_top/base.sdc b/openlane/ycr_core_top/base.sdc new file mode 100644 index 0000000..0a05d50 --- /dev/null +++ b/openlane/ycr_core_top/base.sdc
@@ -0,0 +1,65 @@ +############################################################################### +# Timing Constraints +############################################################################### +create_clock -name core_clk -period 10.0000 [get_ports {clk}] + +set_clock_transition 0.1500 [all_clocks] +set_clock_uncertainty -setup 0.2500 [all_clocks] +set_clock_uncertainty -hold 0.2500 [all_clocks] + +set ::env(SYNTH_TIMING_DERATE) 0.05 +puts "\[INFO\]: Setting timing derate to: [expr {$::env(SYNTH_TIMING_DERATE) * 10}] %" +set_timing_derate -early [expr {1-$::env(SYNTH_TIMING_DERATE)}] +set_timing_derate -late [expr {1+$::env(SYNTH_TIMING_DERATE)}] + +#IMEM Constraints +set_output_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2imem_cmd_o}] +set_output_delay -max 4.5000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2imem_req_o}] +set_output_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2imem_addr_o[*]}] +set_output_delay -max 4.5000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2imem_bl_o[*]}] + +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2imem_cmd_o}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2imem_req_o}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2imem_addr_o[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2imem_bl_o[*]}] + +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {imem2core_req_ack_i}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {imem2core_rdata_i[*]}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {imem2core_resp_i[*]}] + +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {imem2core_req_ack_i}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {imem2core_rdata_i[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {imem2core_resp_i[*]}] + +#DMEM Constraints +set_output_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2dmem_cmd_o}] +set_output_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2dmem_req_o}] +set_output_delay -max 2.5000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2dmem_addr_o[*]}] +set_output_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2dmem_wdata_o[*]}] +set_output_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2dmem_width_o[*]}] + +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2dmem_cmd_o}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2dmem_req_o}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2dmem_addr_o[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2dmem_wdata_o[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core2dmem_width_o[*]}] + +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {dmem2core_req_ack_i}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {dmem2core_rdata_i[*]}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {dmem2core_resp_i[*]}] + +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {dmem2core_req_ack_i}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {dmem2core_rdata_i[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {dmem2core_resp_i[*]}] + +############################################################################### +# Environment +############################################################################### +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} [all_inputs] +set cap_load 0.0334 +puts "\[INFO\]: Setting load to: $cap_load" +set_load $cap_load [all_outputs] + +############################################################################### +# Design Rules +###############################################################################
diff --git a/openlane/ycr_core_top/config.tcl b/openlane/ycr_core_top/config.tcl new file mode 100644 index 0000000..8d0c0bd --- /dev/null +++ b/openlane/ycr_core_top/config.tcl
@@ -0,0 +1,96 @@ +# 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 + +set script_dir [file dirname [file normalize [info script]]] + +set ::env(ROUTING_CORES) "6" + +set ::env(DESIGN_NAME) ycr_core_top +set ::env(DESIGN_IS_CORE) "0" +set ::env(FP_PDN_CORE_RING) "0" + +set ::env(CLOCK_PERIOD) "10" +set ::env(CLOCK_PORT) "clk" + +set ::env(SYNTH_MAX_FANOUT) 4 + +## CTS BUFFER +set ::env(CTS_CLK_BUFFER_LIST) "sky130_fd_sc_hd__clkbuf_4 sky130_fd_sc_hd__clkbuf_8" +set ::env(CTS_SINK_CLUSTERING_SIZE) "16" +set ::env(CLOCK_BUFFER_FANOUT) "8" +set ::env(LEC_ENABLE) 0 + +set ::env(VERILOG_FILES) "\ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_top.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr_core_top.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr_dm.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr_tapc_synchronizer.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr_clk_ctrl.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr_scu.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr_tapc.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr_tapc_shift_reg.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr_dmi.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/primitives/ycr_reset_cells.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_ifu.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_idu.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_exu.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_mprf.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_csr.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_ialu.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_mul.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_div.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_lsu.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_hdu.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr_pipe_tdu.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr_ipic.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr_req_retiming.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/lib/sync_fifo2.sv \ + " +set ::env(VERILOG_INCLUDE_DIRS) [glob $script_dir/../../verilog/rtl/yifive/ycr1c/src/includes ] +set ::env(SYNTH_READ_BLACKBOX_LIB) 1 +set ::env(SYNTH_DEFINES) [list SYNTHESIS ] + + +set ::env(SDC_FILE) "$script_dir/base.sdc" +set ::env(BASE_SDC_FILE) "$script_dir/base.sdc" + +set ::env(LEC_ENABLE) 0 + +set ::env(VDD_PIN) [list {vccd1}] +set ::env(GND_PIN) [list {vssd1}] + +## Floorplan +set ::env(FP_PIN_ORDER_CFG) $script_dir/pin_order.cfg +set ::env(FP_SIZING) absolute +set ::env(DIE_AREA) "0 0 540 950 " + +set ::env(MACRO_PLACEMENT_CFG) $script_dir/macro_placement.cfg +set ::env(PL_TARGET_DENSITY) 0.43 +set ::env(CELL_PAD) "4" + +#set ::env(GLB_RT_MAXLAYER) 5 +set ::env(RT_MAX_LAYER) {met4} +set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 10 +set ::env(DIODE_INSERTION_STRATEGY) 3 + + +set ::env(QUIT_ON_TIMING_VIOLATIONS) "0" +set ::env(QUIT_ON_MAGIC_DRC) "1" +set ::env(QUIT_ON_LVS_ERROR) "0" +set ::env(QUIT_ON_SLEW_VIOLATIONS) "0" + +#Need to cross-check why global timing opimization creating setup vio with hugh hold fix +set ::env(GLB_RESIZER_TIMING_OPTIMIZATIONS) "0" +
diff --git a/openlane/ycr_core_top/macro_placement.cfg b/openlane/ycr_core_top/macro_placement.cfg new file mode 100644 index 0000000..8ec6301 --- /dev/null +++ b/openlane/ycr_core_top/macro_placement.cfg
@@ -0,0 +1,2 @@ +u_icache.u_cmem_2kb 285.000 291.000 FS +u_dcache.u_cmem_2kb 1185.000 291.000 N
diff --git a/openlane/ycr_core_top/pin_order.cfg b/openlane/ycr_core_top/pin_order.cfg new file mode 100644 index 0000000..79b2c6f --- /dev/null +++ b/openlane/ycr_core_top/pin_order.cfg
@@ -0,0 +1,327 @@ +#BUS_SORT +#MANUAL_PLACE +#E +core_uid\[1\] 0200 00 2 +core_uid\[0\] +imem2core_req_ack_i +core2imem_req_o +core2imem_cmd_o +core2imem_addr_o\[31\] +core2imem_addr_o\[30\] +core2imem_addr_o\[29\] +core2imem_addr_o\[28\] +core2imem_addr_o\[27\] +core2imem_addr_o\[26\] +core2imem_addr_o\[25\] +core2imem_addr_o\[24\] +core2imem_addr_o\[23\] +core2imem_addr_o\[22\] +core2imem_addr_o\[21\] +core2imem_addr_o\[20\] +core2imem_addr_o\[19\] +core2imem_addr_o\[18\] +core2imem_addr_o\[17\] +core2imem_addr_o\[16\] +core2imem_addr_o\[15\] +core2imem_addr_o\[14\] +core2imem_addr_o\[13\] +core2imem_addr_o\[12\] +core2imem_addr_o\[11\] +core2imem_addr_o\[10\] +core2imem_addr_o\[9\] +core2imem_addr_o\[8\] +core2imem_addr_o\[7\] +core2imem_addr_o\[6\] +core2imem_addr_o\[5\] +core2imem_addr_o\[4\] +core2imem_addr_o\[3\] +core2imem_addr_o\[2\] +core2imem_addr_o\[1\] +core2imem_addr_o\[0\] +core2imem_bl_o\[2\] +core2imem_bl_o\[1\] +core2imem_bl_o\[0\] +imem2core_rdata_i\[31\] +imem2core_rdata_i\[30\] +imem2core_rdata_i\[29\] +imem2core_rdata_i\[28\] +imem2core_rdata_i\[27\] +imem2core_rdata_i\[26\] +imem2core_rdata_i\[25\] +imem2core_rdata_i\[24\] +imem2core_rdata_i\[23\] +imem2core_rdata_i\[22\] +imem2core_rdata_i\[21\] +imem2core_rdata_i\[20\] +imem2core_rdata_i\[19\] +imem2core_rdata_i\[18\] +imem2core_rdata_i\[17\] +imem2core_rdata_i\[16\] +imem2core_rdata_i\[15\] +imem2core_rdata_i\[14\] +imem2core_rdata_i\[13\] +imem2core_rdata_i\[12\] +imem2core_rdata_i\[11\] +imem2core_rdata_i\[10\] +imem2core_rdata_i\[9\] +imem2core_rdata_i\[8\] +imem2core_rdata_i\[7\] +imem2core_rdata_i\[6\] +imem2core_rdata_i\[5\] +imem2core_rdata_i\[4\] +imem2core_rdata_i\[3\] +imem2core_rdata_i\[2\] +imem2core_rdata_i\[1\] +imem2core_rdata_i\[0\] +imem2core_resp_i\[1\] +imem2core_resp_i\[0\] + +dmem2core_req_ack_i 0350 0 2 +core2dmem_req_o +core2dmem_cmd_o +core2dmem_width_o\[1\] +core2dmem_width_o\[0\] +core2dmem_addr_o\[31\] +core2dmem_addr_o\[30\] +core2dmem_addr_o\[29\] +core2dmem_addr_o\[28\] +core2dmem_addr_o\[27\] +core2dmem_addr_o\[26\] +core2dmem_addr_o\[25\] +core2dmem_addr_o\[24\] +core2dmem_addr_o\[23\] +core2dmem_addr_o\[22\] +core2dmem_addr_o\[21\] +core2dmem_addr_o\[20\] +core2dmem_addr_o\[19\] +core2dmem_addr_o\[18\] +core2dmem_addr_o\[17\] +core2dmem_addr_o\[16\] +core2dmem_addr_o\[15\] +core2dmem_addr_o\[14\] +core2dmem_addr_o\[13\] +core2dmem_addr_o\[12\] +core2dmem_addr_o\[11\] +core2dmem_addr_o\[10\] +core2dmem_addr_o\[9\] +core2dmem_addr_o\[8\] +core2dmem_addr_o\[7\] +core2dmem_addr_o\[6\] +core2dmem_addr_o\[5\] +core2dmem_addr_o\[4\] +core2dmem_addr_o\[3\] +core2dmem_addr_o\[2\] +core2dmem_addr_o\[1\] +core2dmem_addr_o\[0\] +core2dmem_wdata_o\[31\] +core2dmem_wdata_o\[30\] +core2dmem_wdata_o\[29\] +core2dmem_wdata_o\[28\] +core2dmem_wdata_o\[27\] +core2dmem_wdata_o\[26\] +core2dmem_wdata_o\[25\] +core2dmem_wdata_o\[24\] +core2dmem_wdata_o\[23\] +core2dmem_wdata_o\[22\] +core2dmem_wdata_o\[21\] +core2dmem_wdata_o\[20\] +core2dmem_wdata_o\[19\] +core2dmem_wdata_o\[18\] +core2dmem_wdata_o\[17\] +core2dmem_wdata_o\[16\] +core2dmem_wdata_o\[15\] +core2dmem_wdata_o\[14\] +core2dmem_wdata_o\[13\] +core2dmem_wdata_o\[12\] +core2dmem_wdata_o\[11\] +core2dmem_wdata_o\[10\] +core2dmem_wdata_o\[9\] +core2dmem_wdata_o\[8\] +core2dmem_wdata_o\[7\] +core2dmem_wdata_o\[6\] +core2dmem_wdata_o\[5\] +core2dmem_wdata_o\[4\] +core2dmem_wdata_o\[3\] +core2dmem_wdata_o\[2\] +core2dmem_wdata_o\[1\] +core2dmem_wdata_o\[0\] +dmem2core_rdata_i\[31\] +dmem2core_rdata_i\[30\] +dmem2core_rdata_i\[29\] +dmem2core_rdata_i\[28\] +dmem2core_rdata_i\[27\] +dmem2core_rdata_i\[26\] +dmem2core_rdata_i\[25\] +dmem2core_rdata_i\[24\] +dmem2core_rdata_i\[23\] +dmem2core_rdata_i\[22\] +dmem2core_rdata_i\[21\] +dmem2core_rdata_i\[20\] +dmem2core_rdata_i\[19\] +dmem2core_rdata_i\[18\] +dmem2core_rdata_i\[17\] +dmem2core_rdata_i\[16\] +dmem2core_rdata_i\[15\] +dmem2core_rdata_i\[14\] +dmem2core_rdata_i\[13\] +dmem2core_rdata_i\[12\] +dmem2core_rdata_i\[11\] +dmem2core_rdata_i\[10\] +dmem2core_rdata_i\[9\] +dmem2core_rdata_i\[8\] +dmem2core_rdata_i\[7\] +dmem2core_rdata_i\[6\] +dmem2core_rdata_i\[5\] +dmem2core_rdata_i\[4\] +dmem2core_rdata_i\[3\] +dmem2core_rdata_i\[2\] +dmem2core_rdata_i\[1\] +dmem2core_rdata_i\[0\] +dmem2core_resp_i\[1\] +dmem2core_resp_i\[0\] + +core_debug\[48\] 0500 0 2 +core_debug\[47\] +core_debug\[46\] +core_debug\[45\] +core_debug\[44\] +core_debug\[43\] +core_debug\[42\] +core_debug\[41\] +core_debug\[40\] +core_debug\[39\] +core_debug\[38\] +core_debug\[37\] +core_debug\[36\] +core_debug\[35\] +core_debug\[34\] +core_debug\[33\] +core_debug\[32\] +core_debug\[31\] +core_debug\[30\] +core_debug\[29\] +core_debug\[28\] +core_debug\[27\] +core_debug\[26\] +core_debug\[25\] +core_debug\[24\] +core_debug\[23\] +core_debug\[22\] +core_debug\[21\] +core_debug\[20\] +core_debug\[19\] +core_debug\[18\] +core_debug\[17\] +core_debug\[16\] +core_debug\[15\] +core_debug\[14\] +core_debug\[13\] +core_debug\[12\] +core_debug\[11\] +core_debug\[10\] +core_debug\[9\] +core_debug\[8\] +core_debug\[7\] +core_debug\[6\] +core_debug\[5\] +core_debug\[4\] +core_debug\[3\] +core_debug\[2\] +core_debug\[1\] +core_debug\[0\] + +core_irq_mtimer_i 0600 0 2 +core_mtimer_val_i\[63\] +core_mtimer_val_i\[62\] +core_mtimer_val_i\[61\] +core_mtimer_val_i\[60\] +core_mtimer_val_i\[59\] +core_mtimer_val_i\[58\] +core_mtimer_val_i\[57\] +core_mtimer_val_i\[56\] +core_mtimer_val_i\[55\] +core_mtimer_val_i\[54\] +core_mtimer_val_i\[53\] +core_mtimer_val_i\[52\] +core_mtimer_val_i\[51\] +core_mtimer_val_i\[50\] +core_mtimer_val_i\[49\] +core_mtimer_val_i\[48\] +core_mtimer_val_i\[47\] +core_mtimer_val_i\[46\] +core_mtimer_val_i\[45\] +core_mtimer_val_i\[44\] +core_mtimer_val_i\[43\] +core_mtimer_val_i\[42\] +core_mtimer_val_i\[41\] +core_mtimer_val_i\[40\] +core_mtimer_val_i\[39\] +core_mtimer_val_i\[38\] +core_mtimer_val_i\[37\] +core_mtimer_val_i\[36\] +core_mtimer_val_i\[35\] +core_mtimer_val_i\[34\] +core_mtimer_val_i\[33\] +core_mtimer_val_i\[32\] +core_mtimer_val_i\[31\] +core_mtimer_val_i\[30\] +core_mtimer_val_i\[29\] +core_mtimer_val_i\[28\] +core_mtimer_val_i\[27\] +core_mtimer_val_i\[26\] +core_mtimer_val_i\[25\] +core_mtimer_val_i\[24\] +core_mtimer_val_i\[23\] +core_mtimer_val_i\[22\] +core_mtimer_val_i\[21\] +core_mtimer_val_i\[20\] +core_mtimer_val_i\[19\] +core_mtimer_val_i\[18\] +core_mtimer_val_i\[17\] +core_mtimer_val_i\[16\] +core_mtimer_val_i\[15\] +core_mtimer_val_i\[14\] +core_mtimer_val_i\[13\] +core_mtimer_val_i\[12\] +core_mtimer_val_i\[11\] +core_mtimer_val_i\[10\] +core_mtimer_val_i\[9\] +core_mtimer_val_i\[8\] +core_mtimer_val_i\[7\] +core_mtimer_val_i\[6\] +core_mtimer_val_i\[5\] +core_mtimer_val_i\[4\] +core_mtimer_val_i\[3\] +core_mtimer_val_i\[2\] +core_mtimer_val_i\[1\] +core_mtimer_val_i\[0\] + +core_irq_lines_i\[15\] +core_irq_lines_i\[14\] +core_irq_lines_i\[13\] +core_irq_lines_i\[12\] +core_irq_lines_i\[11\] +core_irq_lines_i\[10\] +core_irq_lines_i\[9\] +core_irq_lines_i\[8\] +core_irq_lines_i\[7\] +core_irq_lines_i\[6\] +core_irq_lines_i\[5\] +core_irq_lines_i\[4\] +core_irq_lines_i\[3\] +core_irq_lines_i\[2\] +core_irq_lines_i\[1\] +core_irq_lines_i\[0\] +core_irq_soft_i +cpu_rst_n + +#S +pwrup_rst_n +rst_n + + + +clk +clk_o +core_rst_n_o +core_rdc_qlfy_o
diff --git a/openlane/ycr_iconnect/base.sdc b/openlane/ycr_iconnect/base.sdc new file mode 100644 index 0000000..a8461ed --- /dev/null +++ b/openlane/ycr_iconnect/base.sdc
@@ -0,0 +1,97 @@ +############################################################################### +# Timing Constraints +############################################################################### +create_clock -name core_clk -period 8.0000 [get_ports {core_clk}] + +set_clock_transition 0.1500 [all_clocks] +set_clock_uncertainty -setup 0.2500 [all_clocks] +set_clock_uncertainty -hold 0.2500 [all_clocks] + +set ::env(SYNTH_TIMING_DERATE) 0.05 +puts "\[INFO\]: Setting timing derate to: [expr {$::env(SYNTH_TIMING_DERATE) * 10}] %" +set_timing_derate -early [expr {1-$::env(SYNTH_TIMING_DERATE)}] +set_timing_derate -late [expr {1+$::env(SYNTH_TIMING_DERATE)}] + +#CORE-0 IMEM Constraints +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_imem_cmd}] +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_imem_req}] +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_imem_addr[*]}] +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_imem_bl[*]}] + +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_imem_cmd}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_imem_req}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_imem_addr[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_imem_bl[*]}] + +set_output_delay -max 4.5000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_imem_req_ack}] +set_output_delay -max 4.5000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_imem_rdata[*]}] + +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_imem_req_ack}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_imem_rdata[*]}] + +#CORE-0 DMEM Constraints +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_dmem_cmd}] +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_dmem_req}] +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_dmem_addr[*]}] +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_dmem_wdata[*]}] +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_dmem_width[*]}] + +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_dmem_cmd}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_dmem_req}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_dmem_addr[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_dmem_wdata[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_dmem_width[*]}] + +set_output_delay -max 4.5000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_dmem_req_ack}] +set_output_delay -max 4.5000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_dmem_rdata[*]}] + +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_dmem_req_ack}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core0_dmem_rdata[*]}] + +#CORE-1 IMEM Constraints +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_imem_cmd}] +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_imem_req}] +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_imem_addr[*]}] +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_imem_bl[*]}] + +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_imem_cmd}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_imem_req}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_imem_addr[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_imem_bl[*]}] + +set_output_delay -max 4.5000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_imem_req_ack}] +set_output_delay -max 4.5000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_imem_rdata[*]}] + +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_imem_req_ack}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_imem_rdata[*]}] + +#CORE-1 DMEM Constraints +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_dmem_cmd}] +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_dmem_req}] +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_dmem_addr[*]}] +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_dmem_wdata[*]}] +set_input_delay -max 8.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_dmem_width[*]}] + +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_dmem_cmd}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_dmem_req}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_dmem_addr[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_dmem_wdata[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_dmem_width[*]}] + +set_output_delay -max 4.5000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_dmem_req_ack}] +set_output_delay -max 4.5000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_dmem_rdata[*]}] + +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_dmem_req_ack}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core1_dmem_rdata[*]}] + +############################################################################### +# Environment +############################################################################### +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} [all_inputs] +set cap_load 0.0334 +puts "\[INFO\]: Setting load to: $cap_load" +set_load $cap_load [all_outputs] + +############################################################################### +# Design Rules +###############################################################################
diff --git a/openlane/ycr_iconnect/config.tcl b/openlane/ycr_iconnect/config.tcl new file mode 100644 index 0000000..45f429b --- /dev/null +++ b/openlane/ycr_iconnect/config.tcl
@@ -0,0 +1,100 @@ +# 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 + +set script_dir [file dirname [file normalize [info script]]] + +set ::env(ROUTING_CORES) "6" + +set ::env(DESIGN_NAME) ycr_iconnect +set ::env(DESIGN_IS_CORE) "0" +set ::env(FP_PDN_CORE_RING) "0" + +# Timing configuration +set ::env(CLOCK_PERIOD) "10" +set ::env(CLOCK_PORT) "core_clk rtc_clk" + +set ::env(SYNTH_MAX_FANOUT) 4 + +## CTS BUFFER +set ::env(CTS_CLK_BUFFER_LIST) "sky130_fd_sc_hd__clkbuf_4 sky130_fd_sc_hd__clkbuf_8" +set ::env(CTS_SINK_CLUSTERING_SIZE) "16" +set ::env(CLOCK_BUFFER_FANOUT) "8" +set ::env(LEC_ENABLE) 0 + +set ::env(VERILOG_FILES) "\ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr_iconnect.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr_cross_bar.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr_router.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr_dmem_router.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr_sram_mux.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr_tcm.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr_timer.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr_req_retiming.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/lib/ycr_arb.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/lib/ctech_cells.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/lib/sync_fifo2.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/primitives/ycr_reset_cells.sv \ + " +set ::env(VERILOG_INCLUDE_DIRS) [glob $script_dir/../../verilog/rtl/yifive/ycr1c/src/includes ] +set ::env(SYNTH_READ_BLACKBOX_LIB) 1 +set ::env(SYNTH_DEFINES) [list SYNTHESIS ] + + +set ::env(SDC_FILE) "$script_dir/base.sdc" +set ::env(BASE_SDC_FILE) "$script_dir/base.sdc" + +set ::env(LEC_ENABLE) 0 + +## Floorplan +set ::env(FP_PIN_ORDER_CFG) $script_dir/pin_order.cfg +set ::env(FP_SIZING) absolute +set ::env(DIE_AREA) "0 0 380 1100" + +#set ::env(PDN_CFG) $script_dir/pdn_cfg.tcl +#set ::env(MACRO_PLACEMENT_CFG) $script_dir/macro_placement.cfg +set ::env(PL_TARGET_DENSITY) 0.20 +set ::env(CELL_PAD) "14" + +#set ::env(PL_ROUTABILITY_DRIVEN) "1" +set ::env(PL_TIME_DRIVEN) "1" + +### PDN +#set ::env(FP_PDN_CHECK_NODES) "0" +#set ::env(FP_PDN_HORIZONTAL_HALO) "10" +#set ::env(FP_PDN_VERTICAL_HALO) "10" +# +#set ::env(FP_PDN_VOFFSET) "5" +#set ::env(FP_PDN_VPITCH) "80" +#set ::env(FP_PDN_VSPACING) "15.5" +#set ::env(FP_PDN_VWIDTH) "3.1" +# +#set ::env(FP_PDN_HOFFSET) "10" +#set ::env(FP_PDN_HPITCH) "100" +#set ::env(FP_PDN_HSPACING) "10" +#set ::env(FP_PDN_HWIDTH) "3.1" + + +#set ::env(GLB_RT_MAXLAYER) 5 +set ::env(RT_MAX_LAYER) {met4} +set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 20 +set ::env(DIODE_INSERTION_STRATEGY) 3 + + +set ::env(QUIT_ON_TIMING_VIOLATIONS) "0" +set ::env(QUIT_ON_MAGIC_DRC) "1" +set ::env(QUIT_ON_LVS_ERROR) "0" +set ::env(QUIT_ON_SLEW_VIOLATIONS) "0" + +
diff --git a/openlane/ycr_iconnect/drc_exclude.cells b/openlane/ycr_iconnect/drc_exclude.cells new file mode 100644 index 0000000..0ecc9c0 --- /dev/null +++ b/openlane/ycr_iconnect/drc_exclude.cells
@@ -0,0 +1,55 @@ +sky130_fd_sc_hd__a2111oi_0 +sky130_fd_sc_hd__a21boi_0 +sky130_fd_sc_hd__and2_0 +sky130_fd_sc_hd__buf_16 +sky130_fd_sc_hd__clkdlybuf4s15_1 +sky130_fd_sc_hd__clkdlybuf4s18_1 +sky130_fd_sc_hd__clkdlybuf4s25_1 +sky130_fd_sc_hd__clkdlybuf4s50_1 +sky130_fd_sc_hd__fa_4 +sky130_fd_sc_hd__lpflow_bleeder_1 +sky130_fd_sc_hd__lpflow_clkbufkapwr_1 +sky130_fd_sc_hd__lpflow_clkbufkapwr_16 +sky130_fd_sc_hd__lpflow_clkbufkapwr_2 +sky130_fd_sc_hd__lpflow_clkbufkapwr_4 +sky130_fd_sc_hd__lpflow_clkbufkapwr_8 +sky130_fd_sc_hd__lpflow_clkinvkapwr_1 +sky130_fd_sc_hd__lpflow_clkinvkapwr_16 +sky130_fd_sc_hd__lpflow_clkinvkapwr_2 +sky130_fd_sc_hd__lpflow_clkinvkapwr_4 +sky130_fd_sc_hd__lpflow_clkinvkapwr_8 +sky130_fd_sc_hd__lpflow_decapkapwr_12 +sky130_fd_sc_hd__lpflow_decapkapwr_3 +sky130_fd_sc_hd__lpflow_decapkapwr_4 +sky130_fd_sc_hd__lpflow_decapkapwr_6 +sky130_fd_sc_hd__lpflow_decapkapwr_8 +sky130_fd_sc_hd__lpflow_inputiso0n_1 +sky130_fd_sc_hd__lpflow_inputiso0p_1 +sky130_fd_sc_hd__lpflow_inputiso1n_1 +sky130_fd_sc_hd__lpflow_inputiso1p_1 +sky130_fd_sc_hd__lpflow_inputisolatch_1 +sky130_fd_sc_hd__lpflow_isobufsrc_1 +sky130_fd_sc_hd__lpflow_isobufsrc_16 +sky130_fd_sc_hd__lpflow_isobufsrc_2 +sky130_fd_sc_hd__lpflow_isobufsrc_4 +sky130_fd_sc_hd__lpflow_isobufsrc_8 +sky130_fd_sc_hd__lpflow_isobufsrckapwr_16 +sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_1 +sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_2 +sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_4 +sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_4 +sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_1 +sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_2 +sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_4 +sky130_fd_sc_hd__mux4_4 +sky130_fd_sc_hd__o21ai_0 +sky130_fd_sc_hd__o311ai_0 +sky130_fd_sc_hd__or2_0 +sky130_fd_sc_hd__probe_p_8 +sky130_fd_sc_hd__probec_p_8 +sky130_fd_sc_hd__xor3_1 +sky130_fd_sc_hd__xor3_2 +sky130_fd_sc_hd__xor3_4 +sky130_fd_sc_hd__xnor3_1 +sky130_fd_sc_hd__xnor3_2 +sky130_fd_sc_hd__xnor3_4 \ No newline at end of file
diff --git a/openlane/ycr_iconnect/pin_order.cfg b/openlane/ycr_iconnect/pin_order.cfg new file mode 100644 index 0000000..1c9fbd6 --- /dev/null +++ b/openlane/ycr_iconnect/pin_order.cfg
@@ -0,0 +1,821 @@ +#BUS_SORT +#MANUAL_PLACE + +#W +sram0_clk0 000 0 2 +sram0_csb0 +sram0_web0 +sram0_addr0\[8\] +sram0_addr0\[7\] +sram0_addr0\[6\] +sram0_addr0\[5\] +sram0_addr0\[4\] +sram0_addr0\[3\] +sram0_addr0\[2\] +sram0_addr0\[1\] +sram0_addr0\[0\] +sram0_wmask0\[3\] +sram0_wmask0\[2\] +sram0_wmask0\[1\] +sram0_wmask0\[0\] +sram0_din0\[31\] +sram0_din0\[30\] +sram0_din0\[29\] +sram0_din0\[28\] +sram0_din0\[27\] +sram0_din0\[26\] +sram0_din0\[25\] +sram0_din0\[24\] +sram0_din0\[23\] +sram0_din0\[22\] +sram0_din0\[21\] +sram0_din0\[20\] +sram0_din0\[19\] +sram0_din0\[18\] +sram0_din0\[17\] +sram0_din0\[16\] +sram0_din0\[15\] +sram0_din0\[14\] +sram0_din0\[13\] +sram0_din0\[12\] +sram0_din0\[11\] +sram0_din0\[10\] +sram0_din0\[9\] +sram0_din0\[8\] +sram0_din0\[7\] +sram0_din0\[6\] +sram0_din0\[5\] +sram0_din0\[4\] +sram0_din0\[3\] +sram0_din0\[2\] +sram0_din0\[1\] +sram0_din0\[0\] +sram0_dout0\[31\] +sram0_dout0\[30\] +sram0_dout0\[29\] +sram0_dout0\[28\] +sram0_dout0\[27\] +sram0_dout0\[26\] +sram0_dout0\[25\] +sram0_dout0\[24\] +sram0_dout0\[23\] +sram0_dout0\[22\] +sram0_dout0\[21\] +sram0_dout0\[20\] +sram0_dout0\[19\] +sram0_dout0\[18\] +sram0_dout0\[17\] +sram0_dout0\[16\] +sram0_dout0\[15\] +sram0_dout0\[14\] +sram0_dout0\[13\] +sram0_dout0\[12\] +sram0_dout0\[11\] +sram0_dout0\[10\] +sram0_dout0\[9\] +sram0_dout0\[8\] +sram0_dout0\[7\] +sram0_dout0\[6\] +sram0_dout0\[5\] +sram0_dout0\[4\] +sram0_dout0\[3\] +sram0_dout0\[2\] +sram0_dout0\[1\] +sram0_dout0\[0\] + + +sram0_clk1 110 0 2 +sram0_csb1 +sram0_addr1\[8\] +sram0_addr1\[7\] +sram0_addr1\[6\] +sram0_addr1\[5\] +sram0_addr1\[4\] +sram0_addr1\[3\] +sram0_addr1\[2\] +sram0_addr1\[1\] +sram0_addr1\[0\] +sram0_dout1\[31\] +sram0_dout1\[30\] +sram0_dout1\[29\] +sram0_dout1\[28\] +sram0_dout1\[27\] +sram0_dout1\[26\] +sram0_dout1\[25\] +sram0_dout1\[24\] +sram0_dout1\[23\] +sram0_dout1\[22\] +sram0_dout1\[21\] +sram0_dout1\[20\] +sram0_dout1\[19\] +sram0_dout1\[18\] +sram0_dout1\[17\] +sram0_dout1\[16\] +sram0_dout1\[15\] +sram0_dout1\[14\] +sram0_dout1\[13\] +sram0_dout1\[12\] +sram0_dout1\[11\] +sram0_dout1\[10\] +sram0_dout1\[9\] +sram0_dout1\[8\] +sram0_dout1\[7\] +sram0_dout1\[6\] +sram0_dout1\[5\] +sram0_dout1\[4\] +sram0_dout1\[3\] +sram0_dout1\[2\] +sram0_dout1\[1\] +sram0_dout1\[0\] + +core0_uid\[1\] 0200 00 2 +core0_uid\[0\] +core0_imem_req_ack +core0_imem_req +core0_imem_cmd +core0_imem_addr\[31\] +core0_imem_addr\[30\] +core0_imem_addr\[29\] +core0_imem_addr\[28\] +core0_imem_addr\[27\] +core0_imem_addr\[26\] +core0_imem_addr\[25\] +core0_imem_addr\[24\] +core0_imem_addr\[23\] +core0_imem_addr\[22\] +core0_imem_addr\[21\] +core0_imem_addr\[20\] +core0_imem_addr\[19\] +core0_imem_addr\[18\] +core0_imem_addr\[17\] +core0_imem_addr\[16\] +core0_imem_addr\[15\] +core0_imem_addr\[14\] +core0_imem_addr\[13\] +core0_imem_addr\[12\] +core0_imem_addr\[11\] +core0_imem_addr\[10\] +core0_imem_addr\[9\] +core0_imem_addr\[8\] +core0_imem_addr\[7\] +core0_imem_addr\[6\] +core0_imem_addr\[5\] +core0_imem_addr\[4\] +core0_imem_addr\[3\] +core0_imem_addr\[2\] +core0_imem_addr\[1\] +core0_imem_addr\[0\] +core0_imem_bl\[2\] +core0_imem_bl\[1\] +core0_imem_bl\[0\] +core0_imem_rdata\[31\] +core0_imem_rdata\[30\] +core0_imem_rdata\[29\] +core0_imem_rdata\[28\] +core0_imem_rdata\[27\] +core0_imem_rdata\[26\] +core0_imem_rdata\[25\] +core0_imem_rdata\[24\] +core0_imem_rdata\[23\] +core0_imem_rdata\[22\] +core0_imem_rdata\[21\] +core0_imem_rdata\[20\] +core0_imem_rdata\[19\] +core0_imem_rdata\[18\] +core0_imem_rdata\[17\] +core0_imem_rdata\[16\] +core0_imem_rdata\[15\] +core0_imem_rdata\[14\] +core0_imem_rdata\[13\] +core0_imem_rdata\[12\] +core0_imem_rdata\[11\] +core0_imem_rdata\[10\] +core0_imem_rdata\[9\] +core0_imem_rdata\[8\] +core0_imem_rdata\[7\] +core0_imem_rdata\[6\] +core0_imem_rdata\[5\] +core0_imem_rdata\[4\] +core0_imem_rdata\[3\] +core0_imem_rdata\[2\] +core0_imem_rdata\[1\] +core0_imem_rdata\[0\] +core0_imem_resp\[1\] +core0_imem_resp\[0\] + +core0_dmem_req_ack 0350 0 2 +core0_dmem_req +core0_dmem_cmd +core0_dmem_width\[1\] +core0_dmem_width\[0\] +core0_dmem_addr\[31\] +core0_dmem_addr\[30\] +core0_dmem_addr\[29\] +core0_dmem_addr\[28\] +core0_dmem_addr\[27\] +core0_dmem_addr\[26\] +core0_dmem_addr\[25\] +core0_dmem_addr\[24\] +core0_dmem_addr\[23\] +core0_dmem_addr\[22\] +core0_dmem_addr\[21\] +core0_dmem_addr\[20\] +core0_dmem_addr\[19\] +core0_dmem_addr\[18\] +core0_dmem_addr\[17\] +core0_dmem_addr\[16\] +core0_dmem_addr\[15\] +core0_dmem_addr\[14\] +core0_dmem_addr\[13\] +core0_dmem_addr\[12\] +core0_dmem_addr\[11\] +core0_dmem_addr\[10\] +core0_dmem_addr\[9\] +core0_dmem_addr\[8\] +core0_dmem_addr\[7\] +core0_dmem_addr\[6\] +core0_dmem_addr\[5\] +core0_dmem_addr\[4\] +core0_dmem_addr\[3\] +core0_dmem_addr\[2\] +core0_dmem_addr\[1\] +core0_dmem_addr\[0\] +core0_dmem_wdata\[31\] +core0_dmem_wdata\[30\] +core0_dmem_wdata\[29\] +core0_dmem_wdata\[28\] +core0_dmem_wdata\[27\] +core0_dmem_wdata\[26\] +core0_dmem_wdata\[25\] +core0_dmem_wdata\[24\] +core0_dmem_wdata\[23\] +core0_dmem_wdata\[22\] +core0_dmem_wdata\[21\] +core0_dmem_wdata\[20\] +core0_dmem_wdata\[19\] +core0_dmem_wdata\[18\] +core0_dmem_wdata\[17\] +core0_dmem_wdata\[16\] +core0_dmem_wdata\[15\] +core0_dmem_wdata\[14\] +core0_dmem_wdata\[13\] +core0_dmem_wdata\[12\] +core0_dmem_wdata\[11\] +core0_dmem_wdata\[10\] +core0_dmem_wdata\[9\] +core0_dmem_wdata\[8\] +core0_dmem_wdata\[7\] +core0_dmem_wdata\[6\] +core0_dmem_wdata\[5\] +core0_dmem_wdata\[4\] +core0_dmem_wdata\[3\] +core0_dmem_wdata\[2\] +core0_dmem_wdata\[1\] +core0_dmem_wdata\[0\] +core0_dmem_rdata\[31\] +core0_dmem_rdata\[30\] +core0_dmem_rdata\[29\] +core0_dmem_rdata\[28\] +core0_dmem_rdata\[27\] +core0_dmem_rdata\[26\] +core0_dmem_rdata\[25\] +core0_dmem_rdata\[24\] +core0_dmem_rdata\[23\] +core0_dmem_rdata\[22\] +core0_dmem_rdata\[21\] +core0_dmem_rdata\[20\] +core0_dmem_rdata\[19\] +core0_dmem_rdata\[18\] +core0_dmem_rdata\[17\] +core0_dmem_rdata\[16\] +core0_dmem_rdata\[15\] +core0_dmem_rdata\[14\] +core0_dmem_rdata\[13\] +core0_dmem_rdata\[12\] +core0_dmem_rdata\[11\] +core0_dmem_rdata\[10\] +core0_dmem_rdata\[9\] +core0_dmem_rdata\[8\] +core0_dmem_rdata\[7\] +core0_dmem_rdata\[6\] +core0_dmem_rdata\[5\] +core0_dmem_rdata\[4\] +core0_dmem_rdata\[3\] +core0_dmem_rdata\[2\] +core0_dmem_rdata\[1\] +core0_dmem_rdata\[0\] +core0_dmem_resp\[1\] +core0_dmem_resp\[0\] + +core0_debug\[48\] 0500 0 2 +core0_debug\[47\] +core0_debug\[46\] +core0_debug\[45\] +core0_debug\[44\] +core0_debug\[43\] +core0_debug\[42\] +core0_debug\[41\] +core0_debug\[40\] +core0_debug\[39\] +core0_debug\[38\] +core0_debug\[37\] +core0_debug\[36\] +core0_debug\[35\] +core0_debug\[34\] +core0_debug\[33\] +core0_debug\[32\] +core0_debug\[31\] +core0_debug\[30\] +core0_debug\[29\] +core0_debug\[28\] +core0_debug\[27\] +core0_debug\[26\] +core0_debug\[25\] +core0_debug\[24\] +core0_debug\[23\] +core0_debug\[22\] +core0_debug\[21\] +core0_debug\[20\] +core0_debug\[19\] +core0_debug\[18\] +core0_debug\[17\] +core0_debug\[16\] +core0_debug\[15\] +core0_debug\[14\] +core0_debug\[13\] +core0_debug\[12\] +core0_debug\[11\] +core0_debug\[10\] +core0_debug\[9\] +core0_debug\[8\] +core0_debug\[7\] +core0_debug\[6\] +core0_debug\[5\] +core0_debug\[4\] +core0_debug\[3\] +core0_debug\[2\] +core0_debug\[1\] +core0_debug\[0\] + +core0_timer_irq 0600 0 2 +core0_timer_val\[63\] +core0_timer_val\[62\] +core0_timer_val\[61\] +core0_timer_val\[60\] +core0_timer_val\[59\] +core0_timer_val\[58\] +core0_timer_val\[57\] +core0_timer_val\[56\] +core0_timer_val\[55\] +core0_timer_val\[54\] +core0_timer_val\[53\] +core0_timer_val\[52\] +core0_timer_val\[51\] +core0_timer_val\[50\] +core0_timer_val\[49\] +core0_timer_val\[48\] +core0_timer_val\[47\] +core0_timer_val\[46\] +core0_timer_val\[45\] +core0_timer_val\[44\] +core0_timer_val\[43\] +core0_timer_val\[42\] +core0_timer_val\[41\] +core0_timer_val\[40\] +core0_timer_val\[39\] +core0_timer_val\[38\] +core0_timer_val\[37\] +core0_timer_val\[36\] +core0_timer_val\[35\] +core0_timer_val\[34\] +core0_timer_val\[33\] +core0_timer_val\[32\] +core0_timer_val\[31\] +core0_timer_val\[30\] +core0_timer_val\[29\] +core0_timer_val\[28\] +core0_timer_val\[27\] +core0_timer_val\[26\] +core0_timer_val\[25\] +core0_timer_val\[24\] +core0_timer_val\[23\] +core0_timer_val\[22\] +core0_timer_val\[21\] +core0_timer_val\[20\] +core0_timer_val\[19\] +core0_timer_val\[18\] +core0_timer_val\[17\] +core0_timer_val\[16\] +core0_timer_val\[15\] +core0_timer_val\[14\] +core0_timer_val\[13\] +core0_timer_val\[12\] +core0_timer_val\[11\] +core0_timer_val\[10\] +core0_timer_val\[9\] +core0_timer_val\[8\] +core0_timer_val\[7\] +core0_timer_val\[6\] +core0_timer_val\[5\] +core0_timer_val\[4\] +core0_timer_val\[3\] +core0_timer_val\[2\] +core0_timer_val\[1\] +core0_timer_val\[0\] + +core0_irq_lines\[15\] +core0_irq_lines\[14\] +core0_irq_lines\[13\] +core0_irq_lines\[12\] +core0_irq_lines\[11\] +core0_irq_lines\[10\] +core0_irq_lines\[9\] +core0_irq_lines\[8\] +core0_irq_lines\[7\] +core0_irq_lines\[6\] +core0_irq_lines\[5\] +core0_irq_lines\[4\] +core0_irq_lines\[3\] +core0_irq_lines\[2\] +core0_irq_lines\[1\] +core0_irq_lines\[0\] +core0_irq_soft + + +#S +core_icache_req_ack 000 0 2 +core_icache_req +core_icache_cmd +core_icache_addr\[31\] +core_icache_addr\[30\] +core_icache_addr\[29\] +core_icache_addr\[28\] +core_icache_addr\[27\] +core_icache_addr\[26\] +core_icache_addr\[25\] +core_icache_addr\[24\] +core_icache_addr\[23\] +core_icache_addr\[22\] +core_icache_addr\[21\] +core_icache_addr\[20\] +core_icache_addr\[19\] +core_icache_addr\[18\] +core_icache_addr\[17\] +core_icache_addr\[16\] +core_icache_addr\[15\] +core_icache_addr\[14\] +core_icache_addr\[13\] +core_icache_addr\[12\] +core_icache_addr\[11\] +core_icache_addr\[10\] +core_icache_addr\[9\] +core_icache_addr\[8\] +core_icache_addr\[7\] +core_icache_addr\[6\] +core_icache_addr\[5\] +core_icache_addr\[4\] +core_icache_addr\[3\] +core_icache_addr\[2\] +core_icache_addr\[1\] +core_icache_addr\[0\] +core_icache_bl\[2\] +core_icache_bl\[1\] +core_icache_bl\[0\] +core_icache_width\[1\] +core_icache_width\[0\] +core_icache_rdata\[31\] +core_icache_rdata\[30\] +core_icache_rdata\[29\] +core_icache_rdata\[28\] +core_icache_rdata\[27\] +core_icache_rdata\[26\] +core_icache_rdata\[25\] +core_icache_rdata\[24\] +core_icache_rdata\[23\] +core_icache_rdata\[22\] +core_icache_rdata\[21\] +core_icache_rdata\[20\] +core_icache_rdata\[19\] +core_icache_rdata\[18\] +core_icache_rdata\[17\] +core_icache_rdata\[16\] +core_icache_rdata\[15\] +core_icache_rdata\[14\] +core_icache_rdata\[13\] +core_icache_rdata\[12\] +core_icache_rdata\[11\] +core_icache_rdata\[10\] +core_icache_rdata\[9\] +core_icache_rdata\[8\] +core_icache_rdata\[7\] +core_icache_rdata\[6\] +core_icache_rdata\[5\] +core_icache_rdata\[4\] +core_icache_rdata\[3\] +core_icache_rdata\[2\] +core_icache_rdata\[1\] +core_icache_rdata\[0\] +core_icache_resp\[1\] +core_icache_resp\[0\] + + +core_dcache_req_ack 100 0 2 +core_dcache_req +core_dcache_cmd +core_dcache_width\[1\] +core_dcache_width\[0\] +core_dcache_addr\[31\] +core_dcache_addr\[30\] +core_dcache_addr\[29\] +core_dcache_addr\[28\] +core_dcache_addr\[27\] +core_dcache_addr\[26\] +core_dcache_addr\[25\] +core_dcache_addr\[24\] +core_dcache_addr\[23\] +core_dcache_addr\[22\] +core_dcache_addr\[21\] +core_dcache_addr\[20\] +core_dcache_addr\[19\] +core_dcache_addr\[18\] +core_dcache_addr\[17\] +core_dcache_addr\[16\] +core_dcache_addr\[15\] +core_dcache_addr\[14\] +core_dcache_addr\[13\] +core_dcache_addr\[12\] +core_dcache_addr\[11\] +core_dcache_addr\[10\] +core_dcache_addr\[9\] +core_dcache_addr\[8\] +core_dcache_addr\[7\] +core_dcache_addr\[6\] +core_dcache_addr\[5\] +core_dcache_addr\[4\] +core_dcache_addr\[3\] +core_dcache_addr\[2\] +core_dcache_addr\[1\] +core_dcache_addr\[0\] +core_dcache_wdata\[31\] +core_dcache_wdata\[30\] +core_dcache_wdata\[29\] +core_dcache_wdata\[28\] +core_dcache_wdata\[27\] +core_dcache_wdata\[26\] +core_dcache_wdata\[25\] +core_dcache_wdata\[24\] +core_dcache_wdata\[23\] +core_dcache_wdata\[22\] +core_dcache_wdata\[21\] +core_dcache_wdata\[20\] +core_dcache_wdata\[19\] +core_dcache_wdata\[18\] +core_dcache_wdata\[17\] +core_dcache_wdata\[16\] +core_dcache_wdata\[15\] +core_dcache_wdata\[14\] +core_dcache_wdata\[13\] +core_dcache_wdata\[12\] +core_dcache_wdata\[11\] +core_dcache_wdata\[10\] +core_dcache_wdata\[9\] +core_dcache_wdata\[8\] +core_dcache_wdata\[7\] +core_dcache_wdata\[6\] +core_dcache_wdata\[5\] +core_dcache_wdata\[4\] +core_dcache_wdata\[3\] +core_dcache_wdata\[2\] +core_dcache_wdata\[1\] +core_dcache_wdata\[0\] +core_dcache_rdata\[31\] +core_dcache_rdata\[30\] +core_dcache_rdata\[29\] +core_dcache_rdata\[28\] +core_dcache_rdata\[27\] +core_dcache_rdata\[26\] +core_dcache_rdata\[25\] +core_dcache_rdata\[24\] +core_dcache_rdata\[23\] +core_dcache_rdata\[22\] +core_dcache_rdata\[21\] +core_dcache_rdata\[20\] +core_dcache_rdata\[19\] +core_dcache_rdata\[18\] +core_dcache_rdata\[17\] +core_dcache_rdata\[16\] +core_dcache_rdata\[15\] +core_dcache_rdata\[14\] +core_dcache_rdata\[13\] +core_dcache_rdata\[12\] +core_dcache_rdata\[11\] +core_dcache_rdata\[10\] +core_dcache_rdata\[9\] +core_dcache_rdata\[8\] +core_dcache_rdata\[7\] +core_dcache_rdata\[6\] +core_dcache_rdata\[5\] +core_dcache_rdata\[4\] +core_dcache_rdata\[3\] +core_dcache_rdata\[2\] +core_dcache_rdata\[1\] +core_dcache_rdata\[0\] +core_dcache_resp\[1\] +core_dcache_resp\[0\] + +core_dmem_req_ack 0200 0 2 +core_dmem_req +core_dmem_cmd +core_dmem_width\[1\] +core_dmem_width\[0\] +core_dmem_addr\[31\] +core_dmem_addr\[30\] +core_dmem_addr\[29\] +core_dmem_addr\[28\] +core_dmem_addr\[27\] +core_dmem_addr\[26\] +core_dmem_addr\[25\] +core_dmem_addr\[24\] +core_dmem_addr\[23\] +core_dmem_addr\[22\] +core_dmem_addr\[21\] +core_dmem_addr\[20\] +core_dmem_addr\[19\] +core_dmem_addr\[18\] +core_dmem_addr\[17\] +core_dmem_addr\[16\] +core_dmem_addr\[15\] +core_dmem_addr\[14\] +core_dmem_addr\[13\] +core_dmem_addr\[12\] +core_dmem_addr\[11\] +core_dmem_addr\[10\] +core_dmem_addr\[9\] +core_dmem_addr\[8\] +core_dmem_addr\[7\] +core_dmem_addr\[6\] +core_dmem_addr\[5\] +core_dmem_addr\[4\] +core_dmem_addr\[3\] +core_dmem_addr\[2\] +core_dmem_addr\[1\] +core_dmem_addr\[0\] +core_dmem_wdata\[31\] +core_dmem_wdata\[30\] +core_dmem_wdata\[29\] +core_dmem_wdata\[28\] +core_dmem_wdata\[27\] +core_dmem_wdata\[26\] +core_dmem_wdata\[25\] +core_dmem_wdata\[24\] +core_dmem_wdata\[23\] +core_dmem_wdata\[22\] +core_dmem_wdata\[21\] +core_dmem_wdata\[20\] +core_dmem_wdata\[19\] +core_dmem_wdata\[18\] +core_dmem_wdata\[17\] +core_dmem_wdata\[16\] +core_dmem_wdata\[15\] +core_dmem_wdata\[14\] +core_dmem_wdata\[13\] +core_dmem_wdata\[12\] +core_dmem_wdata\[11\] +core_dmem_wdata\[10\] +core_dmem_wdata\[9\] +core_dmem_wdata\[8\] +core_dmem_wdata\[7\] +core_dmem_wdata\[6\] +core_dmem_wdata\[5\] +core_dmem_wdata\[4\] +core_dmem_wdata\[3\] +core_dmem_wdata\[2\] +core_dmem_wdata\[1\] +core_dmem_wdata\[0\] +core_dmem_rdata\[31\] +core_dmem_rdata\[30\] +core_dmem_rdata\[29\] +core_dmem_rdata\[28\] +core_dmem_rdata\[27\] +core_dmem_rdata\[26\] +core_dmem_rdata\[25\] +core_dmem_rdata\[24\] +core_dmem_rdata\[23\] +core_dmem_rdata\[22\] +core_dmem_rdata\[21\] +core_dmem_rdata\[20\] +core_dmem_rdata\[19\] +core_dmem_rdata\[18\] +core_dmem_rdata\[17\] +core_dmem_rdata\[16\] +core_dmem_rdata\[15\] +core_dmem_rdata\[14\] +core_dmem_rdata\[13\] +core_dmem_rdata\[12\] +core_dmem_rdata\[11\] +core_dmem_rdata\[10\] +core_dmem_rdata\[9\] +core_dmem_rdata\[8\] +core_dmem_rdata\[7\] +core_dmem_rdata\[6\] +core_dmem_rdata\[5\] +core_dmem_rdata\[4\] +core_dmem_rdata\[3\] +core_dmem_rdata\[2\] +core_dmem_rdata\[1\] +core_dmem_rdata\[0\] +core_dmem_resp\[1\] +core_dmem_resp\[0\] + +cfg_dcache_force_flush +cfg_sram_lphase\[1\] +cfg_sram_lphase\[0\] + + +riscv_debug\[63\] 300 0 2 +riscv_debug\[62\] +riscv_debug\[61\] +riscv_debug\[60\] +riscv_debug\[59\] +riscv_debug\[58\] +riscv_debug\[57\] +riscv_debug\[56\] +riscv_debug\[55\] +riscv_debug\[54\] +riscv_debug\[53\] +riscv_debug\[52\] +riscv_debug\[51\] +riscv_debug\[50\] +riscv_debug\[49\] +riscv_debug\[48\] +riscv_debug\[47\] +riscv_debug\[46\] +riscv_debug\[45\] +riscv_debug\[44\] +riscv_debug\[43\] +riscv_debug\[42\] +riscv_debug\[41\] +riscv_debug\[40\] +riscv_debug\[39\] +riscv_debug\[38\] +riscv_debug\[37\] +riscv_debug\[36\] +riscv_debug\[35\] +riscv_debug\[34\] +riscv_debug\[33\] +riscv_debug\[32\] +riscv_debug\[31\] +riscv_debug\[30\] +riscv_debug\[29\] +riscv_debug\[28\] +riscv_debug\[27\] +riscv_debug\[26\] +riscv_debug\[25\] +riscv_debug\[24\] +riscv_debug\[23\] +riscv_debug\[22\] +riscv_debug\[21\] +riscv_debug\[20\] +riscv_debug\[19\] +riscv_debug\[18\] +riscv_debug\[17\] +riscv_debug\[16\] +riscv_debug\[15\] +riscv_debug\[14\] +riscv_debug\[13\] +riscv_debug\[12\] +riscv_debug\[11\] +riscv_debug\[10\] +riscv_debug\[9\] +riscv_debug\[8\] +riscv_debug\[7\] +riscv_debug\[6\] +riscv_debug\[5\] +riscv_debug\[4\] +riscv_debug\[3\] +riscv_debug\[2\] +riscv_debug\[1\] +riscv_debug\[0\] + +core_irq_lines_i\[15\] +core_irq_lines_i\[14\] +core_irq_lines_i\[13\] +core_irq_lines_i\[12\] +core_irq_lines_i\[11\] +core_irq_lines_i\[10\] +core_irq_lines_i\[9\] +core_irq_lines_i\[8\] +core_irq_lines_i\[7\] +core_irq_lines_i\[6\] +core_irq_lines_i\[5\] +core_irq_lines_i\[4\] +core_irq_lines_i\[3\] +core_irq_lines_i\[2\] +core_irq_lines_i\[1\] +core_irq_lines_i\[0\] +core_irq_soft_i + +core_clk +rtc_clk +pwrup_rst_n +cpu_intf_rst_n
diff --git a/openlane/ycr_intf/base.sdc b/openlane/ycr_intf/base.sdc new file mode 100644 index 0000000..2774794 --- /dev/null +++ b/openlane/ycr_intf/base.sdc
@@ -0,0 +1,250 @@ +############################################################################### +# Timing Constraints +############################################################################### +create_clock -name core_clk -period 10.0000 [get_ports {core_clk}] +create_clock -name rtc_clk -period 40.0000 [get_ports {rtc_clk}] +create_clock -name wb_clk -period 10.0000 [get_ports {wb_clk}] + +create_generated_clock -name dcache_mem_clk0 -add -source [get_ports {core_clk}] -master_clock [get_clocks core_clk] -divide_by 1 -comment {dcache mem clock0} [get_ports dcache_mem_clk0] +create_generated_clock -name dcache_mem_clk1 -add -source [get_ports {core_clk}] -master_clock [get_clocks core_clk] -divide_by 1 -comment {dcache mem clock1} [get_ports dcache_mem_clk1] +create_generated_clock -name icache_mem_clk0 -add -source [get_ports {core_clk}] -master_clock [get_clocks core_clk] -divide_by 1 -comment {icache mem clock0} [get_ports icache_mem_clk0] +create_generated_clock -name icache_mem_clk1 -add -source [get_ports {core_clk}] -master_clock [get_clocks core_clk] -divide_by 1 -comment {icache mem clock1} [get_ports icache_mem_clk1] + +set_clock_transition 0.1500 [all_clocks] +set_clock_uncertainty -setup 0.2500 [all_clocks] +set_clock_uncertainty -hold 0.2500 [all_clocks] + +set ::env(SYNTH_TIMING_DERATE) 0.05 +puts "\[INFO\]: Setting timing derate to: [expr {$::env(SYNTH_TIMING_DERATE) * 10}] %" +set_timing_derate -early [expr {1-$::env(SYNTH_TIMING_DERATE)}] +set_timing_derate -late [expr {1+$::env(SYNTH_TIMING_DERATE)}] + +set_clock_groups -name async_clock -asynchronous \ + -group [get_clocks {core_clk dcache_mem_clk0 dcache_mem_clk1 icache_mem_clk0 icache_mem_clk1}]\ + -group [get_clocks {rtc_clk}]\ + -group [get_clocks {wb_clk}] -comment {Async Clock group} + +#Assumed config are static +set_false_path -from [get_ports {cfg_dcache_force_flush}] +set_false_path -from [get_ports {cfg_dcache_pfet_dis}] +set_false_path -from [get_ports {cfg_icache_ntag_pfet_dis}] +set_false_path -from [get_ports {cfg_icache_pfet_dis}] +set_false_path -from [get_ports {cfg_cska_riscv[3]}] +set_false_path -from [get_ports {cfg_cska_riscv[2]}] +set_false_path -from [get_ports {cfg_cska_riscv[1]}] +set_false_path -from [get_ports {cfg_cska_riscv[0]}] +set_false_path -from [get_ports {cfg_sram_lphase[1]}] +set_false_path -from [get_ports {cfg_sram_lphase[0]}] + +#All reset has reset synchronization logic inside block ?? +set_false_path -from [get_ports {cpu_intf_rst_n}] +set_false_path -from [get_ports {pwrup_rst_n}] +set_false_path -from [get_ports {wb_rst_n}] + +#CORE Instruction Memory Interface +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_req_ack}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_rdata[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_resp[*]}] + +set_output_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_req_ack}] +set_output_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_rdata[*]}] +set_output_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_resp[*]}] + + +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_req}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_cmd}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_req}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_addr[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_bl[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_width[*]}] + +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_req}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_cmd}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_req}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_addr[*]}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_bl[*]}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_icache_width[*]}] + +#Wishbone ICACHE I/F +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_stb_o}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_adr_o[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_we_o}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_sel_o[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_bl_o[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_bry_o}] + +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_stb_o}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_adr_o[*]}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_we_o}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_sel_o[*]}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_bl_o[*]}] +set_output_delay -max 2.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_bry_o}] + +set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_dat_i[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_ack_i}] +set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_lack_i}] +set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_err_i}] + +set_input_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_dat_i[*]}] +set_input_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_ack_i}] +set_input_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_lack_i}] +set_input_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_err_i}] + + + +# CORE Data Memory Interface + +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_req_ack}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_rdata[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_resp[*]}] + +set_output_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_req_ack}] +set_output_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_rdata[*]}] +set_output_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_resp[*]}] + +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_req}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_cmd}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_width[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_addr[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_wdata[*]}] + +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_req}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_cmd}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_width[*]}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_addr[*]}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dcache_wdata[*]}] + + +# Data memory interface from router to WB bridge + +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_req_ack}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_rdata[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_resp[*]}] + +set_output_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_req_ack}] +set_output_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_rdata[*]}] +set_output_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_resp[*]}] + +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_req}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_cmd}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_width[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_addr[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_wdata[*]}] + +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_req}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_cmd}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_width[*]}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_addr[*]}] +set_input_delay -max 6.0000 -clock [get_clocks {core_clk}] -add_delay [get_ports {core_dmem_wdata[*]}] + +#WB Data Memory Interface +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_stb_o}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_adr_o[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_we_o}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_dat_o[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_sel_o[*]}] + +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_stb_o}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_adr_o[*]}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_we_o}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_dat_o[*]}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_sel_o[*]}] + +set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_dat_i[*]}] +set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_ack_i}] +set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_err_i}] + +set_input_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_dat_i[*]}] +set_input_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_ack_i}] +set_input_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_err_i}] + + +## ICACHE PORT-0 SRAM Memory I/F +set_output_delay -min 2.0000 -clock [get_clocks {icache_mem_clk0}] -add_delay [get_ports {icache_mem_csb0}] +set_output_delay -min 2.0000 -clock [get_clocks {icache_mem_clk0}] -add_delay [get_ports {icache_mem_web0}] +set_output_delay -min 2.0000 -clock [get_clocks {icache_mem_clk0}] -add_delay [get_ports {icache_mem_addr0[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {icache_mem_clk0}] -add_delay [get_ports {icache_mem_wmask0[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {icache_mem_clk0}] -add_delay [get_ports {icache_mem_din0[*]}] + +set_output_delay -max 3.5000 -clock [get_clocks {icache_mem_clk0}] -add_delay [get_ports {icache_mem_csb0}] +set_output_delay -max 3.5000 -clock [get_clocks {icache_mem_clk0}] -add_delay [get_ports {icache_mem_web0}] +set_output_delay -max 3.5000 -clock [get_clocks {icache_mem_clk0}] -add_delay [get_ports {icache_mem_addr0[*]}] +set_output_delay -max 3.5000 -clock [get_clocks {icache_mem_clk0}] -add_delay [get_ports {icache_mem_wmask0[*]}] +set_output_delay -max 3.5000 -clock [get_clocks {icache_mem_clk0}] -add_delay [get_ports {icache_mem_din0[*]}] + +## ICACHE PORT-1 SRAM Memory I/F +set_output_delay -min 2.0000 -clock [get_clocks {icache_mem_clk1}] -add_delay [get_ports {icache_mem_csb1}] +set_output_delay -min 2.0000 -clock [get_clocks {icache_mem_clk1}] -add_delay [get_ports {icache_mem_addr1[*]}] +set_output_delay -max 3.5000 -clock [get_clocks {icache_mem_clk1}] -add_delay [get_ports {icache_mem_csb1}] +set_output_delay -max 3.5000 -clock [get_clocks {icache_mem_clk1}] -add_delay [get_ports {icache_mem_addr1[*]}] + +set_input_delay -min 2.0000 -clock [get_clocks {icache_mem_clk1}] -add_delay [get_ports {icache_mem_dout1[*]}] +set_input_delay -max 6.0000 -clock [get_clocks {icache_mem_clk1}] -add_delay [get_ports {icache_mem_dout1[*]}] + + +# Wishbone DCACHE I/F +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_cyc_o}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_stb_o}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_adr_o[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_we_o}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_dat_o[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_bl_o[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_bry_o}] + +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_cyc_o}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_stb_o}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_adr_o[*]}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_we_o}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_dat_o[*]}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_bl_o[*]}] +set_output_delay -max 5.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_bry_o}] + +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_dat_i[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_ack_i}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_lack_i}] +set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_err_i}] + +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_dat_i[*]}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_ack_i}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_lack_i}] +set_output_delay -max 6.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_err_i}] + +## DCACHE PORT-0 SRAM I/F +set_output_delay -min 2.0000 -clock [get_clocks {dcache_mem_clk0}] -add_delay [get_ports {dcache_mem_csb0}] +set_output_delay -min 2.0000 -clock [get_clocks {dcache_mem_clk0}] -add_delay [get_ports {dcache_mem_web0}] +set_output_delay -min 2.0000 -clock [get_clocks {dcache_mem_clk0}] -add_delay [get_ports {dcache_mem_addr0[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {dcache_mem_clk0}] -add_delay [get_ports {dcache_mem_wmask0[*]}] +set_output_delay -min 2.0000 -clock [get_clocks {dcache_mem_clk0}] -add_delay [get_ports {dcache_mem_din0[*]}] + +set_output_delay -max 3.5000 -clock [get_clocks {dcache_mem_clk0}] -add_delay [get_ports {dcache_mem_csb0}] +set_output_delay -max 3.5000 -clock [get_clocks {dcache_mem_clk0}] -add_delay [get_ports {dcache_mem_web0}] +set_output_delay -max 3.5000 -clock [get_clocks {dcache_mem_clk0}] -add_delay [get_ports {dcache_mem_addr0[*]}] +set_output_delay -max 3.5000 -clock [get_clocks {dcache_mem_clk0}] -add_delay [get_ports {dcache_mem_wmask0[*]}] +set_output_delay -max 3.5000 -clock [get_clocks {dcache_mem_clk0}] -add_delay [get_ports {dcache_mem_din0[*]}] + +set_input_delay -min 2.0000 -clock [get_clocks {dcache_mem_clk0}] -add_delay [get_ports {dcache_mem_dout0[*]}] +set_input_delay -max 6.0000 -clock [get_clocks {dcache_mem_clk0}] -add_delay [get_ports {dcache_mem_dout0[*]}] + + +## DCACHE PORT-1 SRAM I/F +set_output_delay -min 2.0000 -clock [get_clocks {dcache_mem_clk1}] -add_delay [get_ports {dcache_mem_csb1}] +set_output_delay -min 2.0000 -clock [get_clocks {dcache_mem_clk1}] -add_delay [get_ports {dcache_mem_addr1[*]}] + +set_output_delay -max 3.5000 -clock [get_clocks {dcache_mem_clk1}] -add_delay [get_ports {dcache_mem_csb1}] +set_output_delay -max 3.5000 -clock [get_clocks {dcache_mem_clk1}] -add_delay [get_ports {dcache_mem_addr1[*]}] + +set_input_delay -min 2.0000 -clock [get_clocks {dcache_mem_clk1}] -add_delay [get_ports {dcache_mem_dout1[*]}] +set_input_delay -max 6.0000 -clock [get_clocks {dcache_mem_clk1}] -add_delay [get_ports {dcache_mem_dout1[*]}] + + +############################################################################### +# Environment +############################################################################### +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -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] + +############################################################################### +# Design Rules +###############################################################################
diff --git a/openlane/ycr_intf/config.tcl b/openlane/ycr_intf/config.tcl new file mode 100644 index 0000000..831ef54 --- /dev/null +++ b/openlane/ycr_intf/config.tcl
@@ -0,0 +1,87 @@ +# 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 + +set script_dir [file dirname [file normalize [info script]]] + +set ::env(ROUTING_CORES) "6" + +set ::env(DESIGN_NAME) ycr_intf +set ::env(DESIGN_IS_CORE) "0" +set ::env(FP_PDN_CORE_RING) "0" + +# Timing configuration +set ::env(CLOCK_PERIOD) "10" +set ::env(CLOCK_PORT) "wb_clk core_clk" + +set ::env(SYNTH_MAX_FANOUT) 4 + +## CTS BUFFER +set ::env(CTS_CLK_BUFFER_LIST) "sky130_fd_sc_hd__clkbuf_4 sky130_fd_sc_hd__clkbuf_8" +set ::env(CTS_SINK_CLUSTERING_SIZE) "16" +set ::env(CLOCK_BUFFER_FANOUT) "8" +set ::env(LEC_ENABLE) 0 + +set ::env(VERILOG_FILES) "\ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/lib/clk_skew_adjust.gv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/lib/ctech_cells.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/cache/src/core/dcache_top.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/cache/src/core/dcache_tag_fifo.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/cache/src/core/icache_tag_fifo.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/cache/src/core/icache_top.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/cache/src/core/icache_app_fsm.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/lib/ycr_async_wbb.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr_dmem_wb.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr_intf.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr_sram_mux.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/lib/async_fifo.sv \ + $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/primitives/ycr_reset_cells.sv \ + " +set ::env(VERILOG_INCLUDE_DIRS) [glob $script_dir/../../verilog/rtl/yifive/ycr1c/src/includes ] +set ::env(SYNTH_READ_BLACKBOX_LIB) 1 +set ::env(SYNTH_DEFINES) [list SYNTHESIS ] + + +set ::env(SDC_FILE) "$script_dir/base.sdc" +set ::env(BASE_SDC_FILE) "$script_dir/base.sdc" + +set ::env(LEC_ENABLE) 0 + +set ::env(VDD_PIN) [list {vccd1}] +set ::env(GND_PIN) [list {vssd1}] + +## Floorplan +set ::env(FP_PIN_ORDER_CFG) $script_dir/pin_order.cfg +set ::env(FP_SIZING) absolute +set ::env(DIE_AREA) "0 0 810 640 " +set ::env(CELL_PAD) "6" + +set ::env(MACRO_PLACEMENT_CFG) $script_dir/macro_placement.cfg +set ::env(PL_TARGET_DENSITY) 0.37 + + +set ::env(RT_MAX_LAYER) {met4} +#set ::env(GLB_RT_MAXLAYER) "5" +set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 10 +set ::env(DIODE_INSERTION_STRATEGY) 3 + + +set ::env(QUIT_ON_TIMING_VIOLATIONS) "0" +set ::env(QUIT_ON_MAGIC_DRC) "1" +set ::env(QUIT_ON_LVS_ERROR) "0" +set ::env(QUIT_ON_SLEW_VIOLATIONS) "0" + +#Need to cross-check why global timing opimization creating setup vio with hugh hold fix +set ::env(GLB_RESIZER_TIMING_OPTIMIZATIONS) "0" +
diff --git a/openlane/ycr_intf/pin_order.cfg b/openlane/ycr_intf/pin_order.cfg new file mode 100644 index 0000000..6b93ea3 --- /dev/null +++ b/openlane/ycr_intf/pin_order.cfg
@@ -0,0 +1,847 @@ +#BUS_SORT +#MANUAL_PLACE + +#N + +core_icache_req_ack 000 0 2 +core_icache_req +core_icache_cmd +core_icache_addr\[31\] +core_icache_addr\[30\] +core_icache_addr\[29\] +core_icache_addr\[28\] +core_icache_addr\[27\] +core_icache_addr\[26\] +core_icache_addr\[25\] +core_icache_addr\[24\] +core_icache_addr\[23\] +core_icache_addr\[22\] +core_icache_addr\[21\] +core_icache_addr\[20\] +core_icache_addr\[19\] +core_icache_addr\[18\] +core_icache_addr\[17\] +core_icache_addr\[16\] +core_icache_addr\[15\] +core_icache_addr\[14\] +core_icache_addr\[13\] +core_icache_addr\[12\] +core_icache_addr\[11\] +core_icache_addr\[10\] +core_icache_addr\[9\] +core_icache_addr\[8\] +core_icache_addr\[7\] +core_icache_addr\[6\] +core_icache_addr\[5\] +core_icache_addr\[4\] +core_icache_addr\[3\] +core_icache_addr\[2\] +core_icache_addr\[1\] +core_icache_addr\[0\] +core_icache_bl\[2\] +core_icache_bl\[1\] +core_icache_bl\[0\] +core_icache_width\[1\] +core_icache_width\[0\] +core_icache_rdata\[31\] +core_icache_rdata\[30\] +core_icache_rdata\[29\] +core_icache_rdata\[28\] +core_icache_rdata\[27\] +core_icache_rdata\[26\] +core_icache_rdata\[25\] +core_icache_rdata\[24\] +core_icache_rdata\[23\] +core_icache_rdata\[22\] +core_icache_rdata\[21\] +core_icache_rdata\[20\] +core_icache_rdata\[19\] +core_icache_rdata\[18\] +core_icache_rdata\[17\] +core_icache_rdata\[16\] +core_icache_rdata\[15\] +core_icache_rdata\[14\] +core_icache_rdata\[13\] +core_icache_rdata\[12\] +core_icache_rdata\[11\] +core_icache_rdata\[10\] +core_icache_rdata\[9\] +core_icache_rdata\[8\] +core_icache_rdata\[7\] +core_icache_rdata\[6\] +core_icache_rdata\[5\] +core_icache_rdata\[4\] +core_icache_rdata\[3\] +core_icache_rdata\[2\] +core_icache_rdata\[1\] +core_icache_rdata\[0\] +core_icache_resp\[1\] +core_icache_resp\[0\] + + +core_dcache_req_ack 100 0 2 +core_dcache_req +core_dcache_cmd +core_dcache_width\[1\] +core_dcache_width\[0\] +core_dcache_addr\[31\] +core_dcache_addr\[30\] +core_dcache_addr\[29\] +core_dcache_addr\[28\] +core_dcache_addr\[27\] +core_dcache_addr\[26\] +core_dcache_addr\[25\] +core_dcache_addr\[24\] +core_dcache_addr\[23\] +core_dcache_addr\[22\] +core_dcache_addr\[21\] +core_dcache_addr\[20\] +core_dcache_addr\[19\] +core_dcache_addr\[18\] +core_dcache_addr\[17\] +core_dcache_addr\[16\] +core_dcache_addr\[15\] +core_dcache_addr\[14\] +core_dcache_addr\[13\] +core_dcache_addr\[12\] +core_dcache_addr\[11\] +core_dcache_addr\[10\] +core_dcache_addr\[9\] +core_dcache_addr\[8\] +core_dcache_addr\[7\] +core_dcache_addr\[6\] +core_dcache_addr\[5\] +core_dcache_addr\[4\] +core_dcache_addr\[3\] +core_dcache_addr\[2\] +core_dcache_addr\[1\] +core_dcache_addr\[0\] +core_dcache_wdata\[31\] +core_dcache_wdata\[30\] +core_dcache_wdata\[29\] +core_dcache_wdata\[28\] +core_dcache_wdata\[27\] +core_dcache_wdata\[26\] +core_dcache_wdata\[25\] +core_dcache_wdata\[24\] +core_dcache_wdata\[23\] +core_dcache_wdata\[22\] +core_dcache_wdata\[21\] +core_dcache_wdata\[20\] +core_dcache_wdata\[19\] +core_dcache_wdata\[18\] +core_dcache_wdata\[17\] +core_dcache_wdata\[16\] +core_dcache_wdata\[15\] +core_dcache_wdata\[14\] +core_dcache_wdata\[13\] +core_dcache_wdata\[12\] +core_dcache_wdata\[11\] +core_dcache_wdata\[10\] +core_dcache_wdata\[9\] +core_dcache_wdata\[8\] +core_dcache_wdata\[7\] +core_dcache_wdata\[6\] +core_dcache_wdata\[5\] +core_dcache_wdata\[4\] +core_dcache_wdata\[3\] +core_dcache_wdata\[2\] +core_dcache_wdata\[1\] +core_dcache_wdata\[0\] +core_dcache_rdata\[31\] +core_dcache_rdata\[30\] +core_dcache_rdata\[29\] +core_dcache_rdata\[28\] +core_dcache_rdata\[27\] +core_dcache_rdata\[26\] +core_dcache_rdata\[25\] +core_dcache_rdata\[24\] +core_dcache_rdata\[23\] +core_dcache_rdata\[22\] +core_dcache_rdata\[21\] +core_dcache_rdata\[20\] +core_dcache_rdata\[19\] +core_dcache_rdata\[18\] +core_dcache_rdata\[17\] +core_dcache_rdata\[16\] +core_dcache_rdata\[15\] +core_dcache_rdata\[14\] +core_dcache_rdata\[13\] +core_dcache_rdata\[12\] +core_dcache_rdata\[11\] +core_dcache_rdata\[10\] +core_dcache_rdata\[9\] +core_dcache_rdata\[8\] +core_dcache_rdata\[7\] +core_dcache_rdata\[6\] +core_dcache_rdata\[5\] +core_dcache_rdata\[4\] +core_dcache_rdata\[3\] +core_dcache_rdata\[2\] +core_dcache_rdata\[1\] +core_dcache_rdata\[0\] +core_dcache_resp\[1\] +core_dcache_resp\[0\] + +core_dmem_req_ack 0200 0 2 +core_dmem_req +core_dmem_cmd +core_dmem_width\[1\] +core_dmem_width\[0\] +core_dmem_addr\[31\] +core_dmem_addr\[30\] +core_dmem_addr\[29\] +core_dmem_addr\[28\] +core_dmem_addr\[27\] +core_dmem_addr\[26\] +core_dmem_addr\[25\] +core_dmem_addr\[24\] +core_dmem_addr\[23\] +core_dmem_addr\[22\] +core_dmem_addr\[21\] +core_dmem_addr\[20\] +core_dmem_addr\[19\] +core_dmem_addr\[18\] +core_dmem_addr\[17\] +core_dmem_addr\[16\] +core_dmem_addr\[15\] +core_dmem_addr\[14\] +core_dmem_addr\[13\] +core_dmem_addr\[12\] +core_dmem_addr\[11\] +core_dmem_addr\[10\] +core_dmem_addr\[9\] +core_dmem_addr\[8\] +core_dmem_addr\[7\] +core_dmem_addr\[6\] +core_dmem_addr\[5\] +core_dmem_addr\[4\] +core_dmem_addr\[3\] +core_dmem_addr\[2\] +core_dmem_addr\[1\] +core_dmem_addr\[0\] +core_dmem_wdata\[31\] +core_dmem_wdata\[30\] +core_dmem_wdata\[29\] +core_dmem_wdata\[28\] +core_dmem_wdata\[27\] +core_dmem_wdata\[26\] +core_dmem_wdata\[25\] +core_dmem_wdata\[24\] +core_dmem_wdata\[23\] +core_dmem_wdata\[22\] +core_dmem_wdata\[21\] +core_dmem_wdata\[20\] +core_dmem_wdata\[19\] +core_dmem_wdata\[18\] +core_dmem_wdata\[17\] +core_dmem_wdata\[16\] +core_dmem_wdata\[15\] +core_dmem_wdata\[14\] +core_dmem_wdata\[13\] +core_dmem_wdata\[12\] +core_dmem_wdata\[11\] +core_dmem_wdata\[10\] +core_dmem_wdata\[9\] +core_dmem_wdata\[8\] +core_dmem_wdata\[7\] +core_dmem_wdata\[6\] +core_dmem_wdata\[5\] +core_dmem_wdata\[4\] +core_dmem_wdata\[3\] +core_dmem_wdata\[2\] +core_dmem_wdata\[1\] +core_dmem_wdata\[0\] +core_dmem_rdata\[31\] +core_dmem_rdata\[30\] +core_dmem_rdata\[29\] +core_dmem_rdata\[28\] +core_dmem_rdata\[27\] +core_dmem_rdata\[26\] +core_dmem_rdata\[25\] +core_dmem_rdata\[24\] +core_dmem_rdata\[23\] +core_dmem_rdata\[22\] +core_dmem_rdata\[21\] +core_dmem_rdata\[20\] +core_dmem_rdata\[19\] +core_dmem_rdata\[18\] +core_dmem_rdata\[17\] +core_dmem_rdata\[16\] +core_dmem_rdata\[15\] +core_dmem_rdata\[14\] +core_dmem_rdata\[13\] +core_dmem_rdata\[12\] +core_dmem_rdata\[11\] +core_dmem_rdata\[10\] +core_dmem_rdata\[9\] +core_dmem_rdata\[8\] +core_dmem_rdata\[7\] +core_dmem_rdata\[6\] +core_dmem_rdata\[5\] +core_dmem_rdata\[4\] +core_dmem_rdata\[3\] +core_dmem_rdata\[2\] +core_dmem_rdata\[1\] +core_dmem_rdata\[0\] +core_dmem_resp\[1\] +core_dmem_resp\[0\] + +cfg_dcache_force_flush + +#S +icache_mem_clk0 +icache_mem_csb0 +icache_mem_web0 +icache_mem_addr0\[0\] +icache_mem_addr0\[1\] +icache_mem_addr0\[2\] +icache_mem_addr0\[3\] +icache_mem_addr0\[4\] +icache_mem_addr0\[5\] +icache_mem_addr0\[6\] +icache_mem_addr0\[7\] +icache_mem_addr0\[8\] +icache_mem_wmask0\[0\] +icache_mem_wmask0\[1\] +icache_mem_wmask0\[2\] +icache_mem_wmask0\[3\] +icache_mem_din0\[0\] +icache_mem_din0\[1\] +icache_mem_din0\[2\] +icache_mem_din0\[3\] +icache_mem_din0\[4\] +icache_mem_din0\[5\] +icache_mem_din0\[6\] +icache_mem_din0\[7\] +icache_mem_din0\[8\] +icache_mem_din0\[9\] +icache_mem_din0\[10\] +icache_mem_din0\[11\] +icache_mem_din0\[12\] +icache_mem_din0\[13\] +icache_mem_din0\[14\] +icache_mem_din0\[15\] +icache_mem_din0\[16\] +icache_mem_din0\[17\] +icache_mem_din0\[18\] +icache_mem_din0\[19\] +icache_mem_din0\[20\] +icache_mem_din0\[21\] +icache_mem_din0\[22\] +icache_mem_din0\[23\] +icache_mem_din0\[24\] +icache_mem_din0\[25\] +icache_mem_din0\[26\] +icache_mem_din0\[27\] +icache_mem_din0\[28\] +icache_mem_din0\[29\] +icache_mem_din0\[30\] +icache_mem_din0\[31\] + +icache_mem_clk1 100 0 2 +icache_mem_csb1 +icache_mem_addr1\[8\] +icache_mem_addr1\[7\] +icache_mem_addr1\[6\] +icache_mem_addr1\[5\] +icache_mem_addr1\[4\] +icache_mem_addr1\[3\] +icache_mem_addr1\[2\] +icache_mem_addr1\[1\] +icache_mem_addr1\[0\] + +icache_mem_dout1\[0\] 150 0 2 +icache_mem_dout1\[1\] +icache_mem_dout1\[2\] +icache_mem_dout1\[3\] +icache_mem_dout1\[4\] +icache_mem_dout1\[5\] +icache_mem_dout1\[6\] +icache_mem_dout1\[7\] +icache_mem_dout1\[8\] +icache_mem_dout1\[9\] +icache_mem_dout1\[10\] +icache_mem_dout1\[11\] +icache_mem_dout1\[12\] +icache_mem_dout1\[13\] +icache_mem_dout1\[14\] +icache_mem_dout1\[15\] +icache_mem_dout1\[16\] +icache_mem_dout1\[17\] +icache_mem_dout1\[18\] +icache_mem_dout1\[19\] +icache_mem_dout1\[20\] +icache_mem_dout1\[21\] +icache_mem_dout1\[22\] +icache_mem_dout1\[23\] +icache_mem_dout1\[24\] +icache_mem_dout1\[25\] +icache_mem_dout1\[26\] +icache_mem_dout1\[27\] +icache_mem_dout1\[28\] +icache_mem_dout1\[29\] +icache_mem_dout1\[30\] +icache_mem_dout1\[31\] + +wb_rst_n 500 0 +pwrup_rst_n +core_clk +cpu_intf_rst_n + +#W +dcache_mem_clk0 000 0 2 +dcache_mem_csb0 +dcache_mem_web0 +dcache_mem_addr0\[0\] +dcache_mem_addr0\[1\] +dcache_mem_addr0\[2\] +dcache_mem_addr0\[3\] +dcache_mem_addr0\[4\] +dcache_mem_addr0\[5\] +dcache_mem_addr0\[6\] +dcache_mem_addr0\[7\] +dcache_mem_addr0\[8\] +dcache_mem_wmask0\[0\] +dcache_mem_wmask0\[1\] +dcache_mem_wmask0\[2\] +dcache_mem_wmask0\[3\] +dcache_mem_din0\[0\] +dcache_mem_din0\[1\] +dcache_mem_din0\[2\] +dcache_mem_din0\[3\] +dcache_mem_din0\[4\] +dcache_mem_din0\[5\] +dcache_mem_din0\[6\] +dcache_mem_din0\[7\] +dcache_mem_din0\[8\] +dcache_mem_din0\[9\] +dcache_mem_din0\[10\] +dcache_mem_din0\[11\] +dcache_mem_din0\[12\] +dcache_mem_din0\[13\] +dcache_mem_din0\[14\] +dcache_mem_din0\[15\] +dcache_mem_din0\[16\] +dcache_mem_din0\[17\] +dcache_mem_din0\[18\] +dcache_mem_din0\[19\] +dcache_mem_din0\[20\] +dcache_mem_din0\[21\] +dcache_mem_din0\[22\] +dcache_mem_din0\[23\] +dcache_mem_din0\[24\] +dcache_mem_din0\[25\] +dcache_mem_din0\[26\] +dcache_mem_din0\[27\] +dcache_mem_din0\[28\] +dcache_mem_din0\[29\] +dcache_mem_din0\[30\] +dcache_mem_din0\[31\] + + +dcache_mem_dout0\[0\] 100 0 2 +dcache_mem_dout0\[1\] +dcache_mem_dout0\[2\] +dcache_mem_dout0\[3\] +dcache_mem_dout0\[4\] +dcache_mem_dout0\[5\] +dcache_mem_dout0\[6\] +dcache_mem_dout0\[7\] +dcache_mem_dout0\[8\] +dcache_mem_dout0\[9\] +dcache_mem_dout0\[10\] +dcache_mem_dout0\[11\] +dcache_mem_dout0\[12\] +dcache_mem_dout0\[13\] +dcache_mem_dout0\[14\] +dcache_mem_dout0\[15\] +dcache_mem_dout0\[16\] +dcache_mem_dout0\[17\] +dcache_mem_dout0\[18\] +dcache_mem_dout0\[19\] +dcache_mem_dout0\[20\] +dcache_mem_dout0\[21\] +dcache_mem_dout0\[22\] +dcache_mem_dout0\[23\] +dcache_mem_dout0\[24\] +dcache_mem_dout0\[25\] +dcache_mem_dout0\[26\] +dcache_mem_dout0\[27\] +dcache_mem_dout0\[28\] +dcache_mem_dout0\[29\] +dcache_mem_dout0\[30\] +dcache_mem_dout0\[31\] + +dcache_mem_clk1 200 0 2 +dcache_mem_csb1 +dcache_mem_addr1\[8\] +dcache_mem_addr1\[7\] +dcache_mem_addr1\[6\] +dcache_mem_addr1\[5\] +dcache_mem_addr1\[4\] +dcache_mem_addr1\[3\] +dcache_mem_addr1\[2\] +dcache_mem_addr1\[1\] +dcache_mem_addr1\[0\] + +dcache_mem_dout1\[0\] 250 0 2 +dcache_mem_dout1\[1\] +dcache_mem_dout1\[2\] +dcache_mem_dout1\[3\] +dcache_mem_dout1\[4\] +dcache_mem_dout1\[5\] +dcache_mem_dout1\[6\] +dcache_mem_dout1\[7\] +dcache_mem_dout1\[8\] +dcache_mem_dout1\[9\] +dcache_mem_dout1\[10\] +dcache_mem_dout1\[11\] +dcache_mem_dout1\[12\] +dcache_mem_dout1\[13\] +dcache_mem_dout1\[14\] +dcache_mem_dout1\[15\] +dcache_mem_dout1\[16\] +dcache_mem_dout1\[17\] +dcache_mem_dout1\[18\] +dcache_mem_dout1\[19\] +dcache_mem_dout1\[20\] +dcache_mem_dout1\[21\] +dcache_mem_dout1\[22\] +dcache_mem_dout1\[23\] +dcache_mem_dout1\[24\] +dcache_mem_dout1\[25\] +dcache_mem_dout1\[26\] +dcache_mem_dout1\[27\] +dcache_mem_dout1\[28\] +dcache_mem_dout1\[29\] +dcache_mem_dout1\[30\] +dcache_mem_dout1\[31\] + + + + + +#E +cfg_cska_riscv\[3\] 0000 0 2 +cfg_cska_riscv\[2\] +cfg_cska_riscv\[1\] +cfg_cska_riscv\[0\] +wbd_clk_int +wbd_clk_riscv +wb_clk + +wbd_dmem_stb_o 0100 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 + +wb_dcache_stb_o 0300 0 2 +wb_dcache_we_o +wb_dcache_adr_o\[31\] +wb_dcache_adr_o\[30\] +wb_dcache_adr_o\[29\] +wb_dcache_adr_o\[28\] +wb_dcache_adr_o\[27\] +wb_dcache_adr_o\[26\] +wb_dcache_adr_o\[25\] +wb_dcache_adr_o\[24\] +wb_dcache_adr_o\[23\] +wb_dcache_adr_o\[22\] +wb_dcache_adr_o\[21\] +wb_dcache_adr_o\[20\] +wb_dcache_adr_o\[19\] +wb_dcache_adr_o\[18\] +wb_dcache_adr_o\[17\] +wb_dcache_adr_o\[16\] +wb_dcache_adr_o\[15\] +wb_dcache_adr_o\[14\] +wb_dcache_adr_o\[13\] +wb_dcache_adr_o\[12\] +wb_dcache_adr_o\[11\] +wb_dcache_adr_o\[10\] +wb_dcache_adr_o\[9\] +wb_dcache_adr_o\[8\] +wb_dcache_adr_o\[7\] +wb_dcache_adr_o\[6\] +wb_dcache_adr_o\[5\] +wb_dcache_adr_o\[4\] +wb_dcache_adr_o\[3\] +wb_dcache_adr_o\[2\] +wb_dcache_adr_o\[1\] +wb_dcache_adr_o\[0\] +wb_dcache_sel_o\[3\] +wb_dcache_sel_o\[2\] +wb_dcache_sel_o\[1\] +wb_dcache_sel_o\[0\] +wb_dcache_bl_o\[9\] +wb_dcache_bl_o\[8\] +wb_dcache_bl_o\[7\] +wb_dcache_bl_o\[6\] +wb_dcache_bl_o\[5\] +wb_dcache_bl_o\[4\] +wb_dcache_bl_o\[3\] +wb_dcache_bl_o\[2\] +wb_dcache_bl_o\[1\] +wb_dcache_bl_o\[0\] +wb_dcache_bry_o +wb_dcache_dat_o\[31\] +wb_dcache_dat_o\[30\] +wb_dcache_dat_o\[29\] +wb_dcache_dat_o\[28\] +wb_dcache_dat_o\[27\] +wb_dcache_dat_o\[26\] +wb_dcache_dat_o\[25\] +wb_dcache_dat_o\[24\] +wb_dcache_dat_o\[23\] +wb_dcache_dat_o\[22\] +wb_dcache_dat_o\[21\] +wb_dcache_dat_o\[20\] +wb_dcache_dat_o\[19\] +wb_dcache_dat_o\[18\] +wb_dcache_dat_o\[17\] +wb_dcache_dat_o\[16\] +wb_dcache_dat_o\[15\] +wb_dcache_dat_o\[14\] +wb_dcache_dat_o\[13\] +wb_dcache_dat_o\[12\] +wb_dcache_dat_o\[11\] +wb_dcache_dat_o\[10\] +wb_dcache_dat_o\[9\] +wb_dcache_dat_o\[8\] +wb_dcache_dat_o\[7\] +wb_dcache_dat_o\[6\] +wb_dcache_dat_o\[5\] +wb_dcache_dat_o\[4\] +wb_dcache_dat_o\[3\] +wb_dcache_dat_o\[2\] +wb_dcache_dat_o\[1\] +wb_dcache_dat_o\[0\] +wb_dcache_dat_i\[31\] +wb_dcache_dat_i\[30\] +wb_dcache_dat_i\[29\] +wb_dcache_dat_i\[28\] +wb_dcache_dat_i\[27\] +wb_dcache_dat_i\[26\] +wb_dcache_dat_i\[25\] +wb_dcache_dat_i\[24\] +wb_dcache_dat_i\[23\] +wb_dcache_dat_i\[22\] +wb_dcache_dat_i\[21\] +wb_dcache_dat_i\[20\] +wb_dcache_dat_i\[19\] +wb_dcache_dat_i\[18\] +wb_dcache_dat_i\[17\] +wb_dcache_dat_i\[16\] +wb_dcache_dat_i\[15\] +wb_dcache_dat_i\[14\] +wb_dcache_dat_i\[13\] +wb_dcache_dat_i\[12\] +wb_dcache_dat_i\[11\] +wb_dcache_dat_i\[10\] +wb_dcache_dat_i\[9\] +wb_dcache_dat_i\[8\] +wb_dcache_dat_i\[7\] +wb_dcache_dat_i\[6\] +wb_dcache_dat_i\[5\] +wb_dcache_dat_i\[4\] +wb_dcache_dat_i\[3\] +wb_dcache_dat_i\[2\] +wb_dcache_dat_i\[1\] +wb_dcache_dat_i\[0\] +wb_dcache_ack_i +wb_dcache_lack_i +wb_dcache_err_i +wb_dcache_cyc_o + +wb_icache_stb_o 500 0 2 +wb_icache_we_o +wb_icache_adr_o\[31\] +wb_icache_adr_o\[30\] +wb_icache_adr_o\[29\] +wb_icache_adr_o\[28\] +wb_icache_adr_o\[27\] +wb_icache_adr_o\[26\] +wb_icache_adr_o\[25\] +wb_icache_adr_o\[24\] +wb_icache_adr_o\[23\] +wb_icache_adr_o\[22\] +wb_icache_adr_o\[21\] +wb_icache_adr_o\[20\] +wb_icache_adr_o\[19\] +wb_icache_adr_o\[18\] +wb_icache_adr_o\[17\] +wb_icache_adr_o\[16\] +wb_icache_adr_o\[15\] +wb_icache_adr_o\[14\] +wb_icache_adr_o\[13\] +wb_icache_adr_o\[12\] +wb_icache_adr_o\[11\] +wb_icache_adr_o\[10\] +wb_icache_adr_o\[9\] +wb_icache_adr_o\[8\] +wb_icache_adr_o\[7\] +wb_icache_adr_o\[6\] +wb_icache_adr_o\[5\] +wb_icache_adr_o\[4\] +wb_icache_adr_o\[3\] +wb_icache_adr_o\[2\] +wb_icache_adr_o\[1\] +wb_icache_adr_o\[0\] +wb_icache_sel_o\[3\] +wb_icache_sel_o\[2\] +wb_icache_sel_o\[1\] +wb_icache_sel_o\[0\] +wb_icache_bl_o\[9\] +wb_icache_bl_o\[8\] +wb_icache_bl_o\[7\] +wb_icache_bl_o\[6\] +wb_icache_bl_o\[5\] +wb_icache_bl_o\[4\] +wb_icache_bl_o\[3\] +wb_icache_bl_o\[2\] +wb_icache_bl_o\[1\] +wb_icache_bl_o\[0\] +wb_icache_bry_o +wb_icache_dat_i\[31\] +wb_icache_dat_i\[30\] +wb_icache_dat_i\[29\] +wb_icache_dat_i\[28\] +wb_icache_dat_i\[27\] +wb_icache_dat_i\[26\] +wb_icache_dat_i\[25\] +wb_icache_dat_i\[24\] +wb_icache_dat_i\[23\] +wb_icache_dat_i\[22\] +wb_icache_dat_i\[21\] +wb_icache_dat_i\[20\] +wb_icache_dat_i\[19\] +wb_icache_dat_i\[18\] +wb_icache_dat_i\[17\] +wb_icache_dat_i\[16\] +wb_icache_dat_i\[15\] +wb_icache_dat_i\[14\] +wb_icache_dat_i\[13\] +wb_icache_dat_i\[12\] +wb_icache_dat_i\[11\] +wb_icache_dat_i\[10\] +wb_icache_dat_i\[9\] +wb_icache_dat_i\[8\] +wb_icache_dat_i\[7\] +wb_icache_dat_i\[6\] +wb_icache_dat_i\[5\] +wb_icache_dat_i\[4\] +wb_icache_dat_i\[3\] +wb_icache_dat_i\[2\] +wb_icache_dat_i\[1\] +wb_icache_dat_i\[0\] +wb_icache_ack_i +wb_icache_lack_i +wb_icache_err_i +wb_icache_cyc_o + +cfg_icache_pfet_dis +cfg_icache_ntag_pfet_dis +cfg_dcache_pfet_dis +cfg_sram_lphase\[1\] +cfg_sram_lphase\[0\]
diff --git a/openlane/yifive/base.sdc b/openlane/yifive/base.sdc deleted file mode 100644 index d2293b6..0000000 --- a/openlane/yifive/base.sdc +++ /dev/null
@@ -1,338 +0,0 @@ -############################################################################### -# Timing Constraints -############################################################################### -create_clock -name core_clk -period 20.0000 [get_ports {core_clk}] -create_clock -name core_clk_mclk -period 20.0000 [get_ports {core_clk_mclk}] -create_clock -name rtc_clk -period 40.0000 [get_ports {rtc_clk}] -create_clock -name wb_clk -period 10.0000 [get_ports {wb_clk}] - -create_generated_clock -name tcm_dffram_clk0 -add -source [get_ports {core_clk_mclk}] -master_clock [get_clocks core_clk_mclk] -divide_by 1 -comment {tcm clock0} [get_ports tcm_dffram_clk0] -create_generated_clock -name tcm_dffram_clk1 -add -source [get_ports {core_clk_mclk}] -master_clock [get_clocks core_clk_mclk] -divide_by 1 -comment {tcm clock1} [get_ports tcm_dffram_clk1] - -create_generated_clock -name icache_dffram_clk0 -add -source [get_ports {core_clk_mclk}] -master_clock [get_clocks core_clk_mclk] -divide_by 1 -comment {icache clock0} [get_ports icache_dffram_clk0] -create_generated_clock -name icache_dffram_clk1 -add -source [get_ports {core_clk_mclk}] -master_clock [get_clocks core_clk_mclk] -divide_by 1 -comment {icache clock1} [get_ports icache_dffram_clk1] - -create_generated_clock -name dcache_dffram_clk0 -add -source [get_ports {core_clk_mclk}] -master_clock [get_clocks core_clk_mclk] -divide_by 1 -comment {dcache clock0} [get_ports dcache_dffram_clk0] -create_generated_clock -name dcache_dffram_clk1 -add -source [get_ports {core_clk_mclk}] -master_clock [get_clocks core_clk_mclk] -divide_by 1 -comment {dcache clock1} [get_ports dcache_dffram_clk1] - -set_clock_transition 0.1500 [all_clocks] -set_clock_uncertainty -setup 0.2500 [all_clocks] -set_clock_uncertainty -hold 0.2500 [all_clocks] - -set_propagated_clock [all_clocks] - - -set ::env(SYNTH_TIMING_DERATE) 0.05 -puts "\[INFO\]: Setting timing derate to: [expr {$::env(SYNTH_TIMING_DERATE) * 10}] %" -set_timing_derate -early [expr {1-$::env(SYNTH_TIMING_DERATE)}] -set_timing_derate -late [expr {1+$::env(SYNTH_TIMING_DERATE)}] - -set_clock_groups -name async_clock -asynchronous \ - -group [get_clocks {core_clk core_clk_mclk tcm_dffram_clk0 tcm_dffram_clk1 icache_dffram_clk0 icache_dffram_clk1 dcache_dffram_clk0 dcache_dffram_clk1} ]\ - -group [get_clocks {rtc_clk}]\ - -group [get_clocks {wb_clk}] -comment {Async Clock group} - -### ClkSkew Adjust -set_case_analysis 0 [get_ports {cfg_cska_riscv[0]}] -set_case_analysis 0 [get_ports {cfg_cska_riscv[1]}] -set_case_analysis 0 [get_ports {cfg_cska_riscv[2]}] -set_case_analysis 0 [get_ports {cfg_cska_riscv[3]}] - - -set_max_delay 3.5 -from [get_ports {wbd_clk_int}] -set_max_delay 2 -to [get_ports {wbd_clk_riscv}] -set_max_delay 3.5 -from wbd_clk_int -to wbd_clk_riscv - -#TCM Memory -set_input_delay -max 6.0000 -clock [get_clocks {tcm_dffram_clk0}] -add_delay [get_ports {tcm_dffram_dout0[*]}] -set_input_delay -min 3.0000 -clock [get_clocks {tcm_dffram_clk0}] -add_delay [get_ports {tcm_dffram_dout0[*]}] - -set_output_delay -max 4.5000 -clock [get_clocks {tcm_dffram_clk0}] -add_delay [get_ports {tcm_dffram_cs0}] -set_output_delay -max 4.5000 -clock [get_clocks {tcm_dffram_clk0}] -add_delay [get_ports {tcm_dffram_addr0[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {tcm_dffram_clk0}] -add_delay [get_ports {tcm_dffram_wmask0[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {tcm_dffram_clk0}] -add_delay [get_ports {tcm_dffram_din0[*]}] - -set_output_delay -min -0.5000 -clock [get_clocks {tcm_dffram_clk0}] -add_delay [get_ports {tcm_dffram_cs0}] -set_output_delay -min -0.5000 -clock [get_clocks {tcm_dffram_clk0}] -add_delay [get_ports {tcm_dffram_addr0[*]}] -set_output_delay -min -0.5000 -clock [get_clocks {tcm_dffram_clk0}] -add_delay [get_ports {tcm_dffram_wmask0[*]}] -set_output_delay -min -3.5000 -clock [get_clocks {tcm_dffram_clk0}] -add_delay [get_ports {tcm_dffram_din0[*]}] - -# mem1 -set_input_delay -max 6.0000 -clock [get_clocks {tcm_dffram_clk1}] -add_delay [get_ports {tcm_dffram_dout1[*]}] -set_input_delay -min 3.0000 -clock [get_clocks {tcm_dffram_clk1}] -add_delay [get_ports {tcm_dffram_dout1[*]}] - -set_output_delay -max 4.5000 -clock [get_clocks {tcm_dffram_clk1}] -add_delay [get_ports {tcm_dffram_cs1}] -set_output_delay -max 4.5000 -clock [get_clocks {tcm_dffram_clk1}] -add_delay [get_ports {tcm_dffram_addr1[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {tcm_dffram_clk1}] -add_delay [get_ports {tcm_dffram_wmask1[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {tcm_dffram_clk1}] -add_delay [get_ports {tcm_dffram_din1[*]}] - -set_output_delay -min -0.5000 -clock [get_clocks {tcm_dffram_clk1}] -add_delay [get_ports {tcm_dffram_cs1}] -set_output_delay -min -0.5000 -clock [get_clocks {tcm_dffram_clk1}] -add_delay [get_ports {tcm_dffram_addr1[*]}] -set_output_delay -min -1.0000 -clock [get_clocks {tcm_dffram_clk1}] -add_delay [get_ports {tcm_dffram_wmask1[*]}] -set_output_delay -min -3.5000 -clock [get_clocks {tcm_dffram_clk1}] -add_delay [get_ports {tcm_dffram_din1[*]}] - -#icache memory -set_input_delay -max 6.0000 -clock [get_clocks {icache_dffram_clk0}] -add_delay [get_ports {icache_dffram_dout0[*]}] -set_input_delay -min 3.0000 -clock [get_clocks {icache_dffram_clk0}] -add_delay [get_ports {icache_dffram_dout0[*]}] - -set_output_delay -max 4.5000 -clock [get_clocks {icache_dffram_clk0}] -add_delay [get_ports {icache_dffram_cs0}] -set_output_delay -max 4.5000 -clock [get_clocks {icache_dffram_clk0}] -add_delay [get_ports {icache_dffram_addr0[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {icache_dffram_clk0}] -add_delay [get_ports {icache_dffram_wmask0[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {icache_dffram_clk0}] -add_delay [get_ports {icache_dffram_din0[*]}] - -set_output_delay -min -0.5000 -clock [get_clocks {icache_dffram_clk0}] -add_delay [get_ports {icache_dffram_cs0}] -set_output_delay -min -0.5000 -clock [get_clocks {icache_dffram_clk0}] -add_delay [get_ports {icache_dffram_addr0[*]}] -set_output_delay -min -0.5000 -clock [get_clocks {icache_dffram_clk0}] -add_delay [get_ports {icache_dffram_wmask0[*]}] -set_output_delay -min -3.5000 -clock [get_clocks {icache_dffram_clk0}] -add_delay [get_ports {icache_dffram_din0[*]}] - -# mem1 -set_input_delay -max 6.0000 -clock [get_clocks {icache_dffram_clk1}] -add_delay [get_ports {icache_dffram_dout1[*]}] -set_input_delay -min 3.0000 -clock [get_clocks {icache_dffram_clk1}] -add_delay [get_ports {icache_dffram_dout1[*]}] - -set_output_delay -max 4.5000 -clock [get_clocks {icache_dffram_clk1}] -add_delay [get_ports {icache_dffram_cs1}] -set_output_delay -max 4.5000 -clock [get_clocks {icache_dffram_clk1}] -add_delay [get_ports {icache_dffram_addr1[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {icache_dffram_clk1}] -add_delay [get_ports {icache_dffram_wmask1[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {icache_dffram_clk1}] -add_delay [get_ports {icache_dffram_din1[*]}] - -set_output_delay -min -0.5000 -clock [get_clocks {icache_dffram_clk1}] -add_delay [get_ports {icache_dffram_cs1}] -set_output_delay -min -0.5000 -clock [get_clocks {icache_dffram_clk1}] -add_delay [get_ports {icache_dffram_addr1[*]}] -set_output_delay -min -0.5000 -clock [get_clocks {icache_dffram_clk1}] -add_delay [get_ports {icache_dffram_wmask1[*]}] -set_output_delay -min -3.5000 -clock [get_clocks {icache_dffram_clk1}] -add_delay [get_ports {icache_dffram_din1[*]}] - -#dcache memory - -set_input_delay -max 6.0000 -clock [get_clocks {dcache_dffram_clk0}] -add_delay [get_ports {dcache_dffram_dout0[*]}] -set_input_delay -min 3.0000 -clock [get_clocks {dcache_dffram_clk0}] -add_delay [get_ports {dcache_dffram_dout0[*]}] - -set_output_delay -max 4.5000 -clock [get_clocks {dcache_dffram_clk0}] -add_delay [get_ports {dcache_dffram_cs0}] -set_output_delay -max 4.5000 -clock [get_clocks {dcache_dffram_clk0}] -add_delay [get_ports {dcache_dffram_addr0[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {dcache_dffram_clk0}] -add_delay [get_ports {dcache_dffram_wmask0[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {dcache_dffram_clk0}] -add_delay [get_ports {dcache_dffram_din0[*]}] - -set_output_delay -min -0.5000 -clock [get_clocks {dcache_dffram_clk0}] -add_delay [get_ports {dcache_dffram_cs0}] -set_output_delay -min -0.5000 -clock [get_clocks {dcache_dffram_clk0}] -add_delay [get_ports {dcache_dffram_addr0[*]}] -set_output_delay -min -2.5000 -clock [get_clocks {dcache_dffram_clk0}] -add_delay [get_ports {dcache_dffram_wmask0[*]}] -set_output_delay -min -3.5000 -clock [get_clocks {dcache_dffram_clk0}] -add_delay [get_ports {dcache_dffram_din0[*]}] - -# mem1 -set_input_delay -max 6.0000 -clock [get_clocks {dcache_dffram_clk1}] -add_delay [get_ports {dcache_dffram_dout1[*]}] -set_input_delay -min 3.0000 -clock [get_clocks {dcache_dffram_clk1}] -add_delay [get_ports {dcache_dffram_dout1[*]}] - -set_output_delay -max 4.5000 -clock [get_clocks {dcache_dffram_clk1}] -add_delay [get_ports {dcache_dffram_cs1}] -set_output_delay -max 4.5000 -clock [get_clocks {dcache_dffram_clk1}] -add_delay [get_ports {dcache_dffram_addr1[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {dcache_dffram_clk1}] -add_delay [get_ports {dcache_dffram_wmask1[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {dcache_dffram_clk1}] -add_delay [get_ports {dcache_dffram_din1[*]}] - -set_output_delay -min -0.5000 -clock [get_clocks {dcache_dffram_clk1}] -add_delay [get_ports {dcache_dffram_cs1}] -set_output_delay -min -0.5000 -clock [get_clocks {dcache_dffram_clk1}] -add_delay [get_ports {dcache_dffram_addr1[*]}] -set_output_delay -min -2.5000 -clock [get_clocks {dcache_dffram_clk1}] -add_delay [get_ports {dcache_dffram_wmask1[*]}] -set_output_delay -min -3.5000 -clock [get_clocks {dcache_dffram_clk1}] -add_delay [get_ports {dcache_dffram_din1[*]}] - - - - -set_input_delay -max 5.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_rst_n}] - -#Wishbone DMEM -set_input_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_ack_i}] -set_input_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_dat_i[*]}] -set_input_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_err_i}] - -set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_ack_i}] -set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_dat_i[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_dat_i[*]}] - -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_adr_o[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_dat_o[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_sel_o[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_stb_o}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_we_o}] - -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_adr_o[*]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_dat_o[*]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_sel_o[*]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_stb_o}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wbd_dmem_we_o}] - -#Wishbone icache -set_input_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_lack_i}] -set_input_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_ack_i}] -set_input_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_dat_i[*]}] -set_input_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_err_i}] - -set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_lack_i}] -set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_ack_i}] -set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_dat_i[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_dat_i[*]}] - -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_adr_o[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_sel_o[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_bl_o[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_bry_o}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_stb_o}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_we_o}] - -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_adr_o[*]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_sel_o[*]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_bl_o[*]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_bry_o}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_stb_o}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_icache_we_o}] - -#Wishbone dcache -set_input_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_lack_i}] -set_input_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_ack_i}] -set_input_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_dat_i[*]}] -set_input_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_err_i}] - -set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_lack_i}] -set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_ack_i}] -set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_dat_i[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_dat_i[*]}] - -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_adr_o[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_dat_o[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_sel_o[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_bl_o[*]}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_bry_o}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_stb_o}] -set_output_delay -max 4.5000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_we_o}] - -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_adr_o[*]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_dat_o[*]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_sel_o[*]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_bl_o[*]}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_bry_o}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_stb_o}] -set_output_delay -min 2.0000 -clock [get_clocks {wb_clk}] -add_delay [get_ports {wb_dcache_we_o}] - -set_false_path\ - -from [get_ports {soft_irq}] -set_false_path\ - -to [list [get_ports {riscv_debug[0]}]\ - [get_ports {riscv_debug[10]}]\ - [get_ports {riscv_debug[11]}]\ - [get_ports {riscv_debug[12]}]\ - [get_ports {riscv_debug[13]}]\ - [get_ports {riscv_debug[14]}]\ - [get_ports {riscv_debug[15]}]\ - [get_ports {riscv_debug[16]}]\ - [get_ports {riscv_debug[17]}]\ - [get_ports {riscv_debug[18]}]\ - [get_ports {riscv_debug[19]}]\ - [get_ports {riscv_debug[1]}]\ - [get_ports {riscv_debug[20]}]\ - [get_ports {riscv_debug[21]}]\ - [get_ports {riscv_debug[22]}]\ - [get_ports {riscv_debug[23]}]\ - [get_ports {riscv_debug[24]}]\ - [get_ports {riscv_debug[25]}]\ - [get_ports {riscv_debug[26]}]\ - [get_ports {riscv_debug[27]}]\ - [get_ports {riscv_debug[28]}]\ - [get_ports {riscv_debug[29]}]\ - [get_ports {riscv_debug[2]}]\ - [get_ports {riscv_debug[30]}]\ - [get_ports {riscv_debug[31]}]\ - [get_ports {riscv_debug[32]}]\ - [get_ports {riscv_debug[33]}]\ - [get_ports {riscv_debug[34]}]\ - [get_ports {riscv_debug[35]}]\ - [get_ports {riscv_debug[36]}]\ - [get_ports {riscv_debug[37]}]\ - [get_ports {riscv_debug[38]}]\ - [get_ports {riscv_debug[39]}]\ - [get_ports {riscv_debug[3]}]\ - [get_ports {riscv_debug[40]}]\ - [get_ports {riscv_debug[41]}]\ - [get_ports {riscv_debug[42]}]\ - [get_ports {riscv_debug[43]}]\ - [get_ports {riscv_debug[44]}]\ - [get_ports {riscv_debug[45]}]\ - [get_ports {riscv_debug[46]}]\ - [get_ports {riscv_debug[47]}]\ - [get_ports {riscv_debug[48]}]\ - [get_ports {riscv_debug[49]}]\ - [get_ports {riscv_debug[4]}]\ - [get_ports {riscv_debug[50]}]\ - [get_ports {riscv_debug[51]}]\ - [get_ports {riscv_debug[52]}]\ - [get_ports {riscv_debug[53]}]\ - [get_ports {riscv_debug[54]}]\ - [get_ports {riscv_debug[55]}]\ - [get_ports {riscv_debug[56]}]\ - [get_ports {riscv_debug[57]}]\ - [get_ports {riscv_debug[58]}]\ - [get_ports {riscv_debug[59]}]\ - [get_ports {riscv_debug[5]}]\ - [get_ports {riscv_debug[60]}]\ - [get_ports {riscv_debug[61]}]\ - [get_ports {riscv_debug[62]}]\ - [get_ports {riscv_debug[63]}]\ - [get_ports {riscv_debug[6]}]\ - [get_ports {riscv_debug[7]}]\ - [get_ports {riscv_debug[8]}]\ - [get_ports {riscv_debug[9]}]] - -set_false_path -from [get_ports {fuse_mhartid[0]}] -set_false_path -from [get_ports {fuse_mhartid[10]}] -set_false_path -from [get_ports {fuse_mhartid[11]}] -set_false_path -from [get_ports {fuse_mhartid[12]}] -set_false_path -from [get_ports {fuse_mhartid[13]}] -set_false_path -from [get_ports {fuse_mhartid[14]}] -set_false_path -from [get_ports {fuse_mhartid[15]}] -set_false_path -from [get_ports {fuse_mhartid[16]}] -set_false_path -from [get_ports {fuse_mhartid[17]}] -set_false_path -from [get_ports {fuse_mhartid[18]}] -set_false_path -from [get_ports {fuse_mhartid[19]}] -set_false_path -from [get_ports {fuse_mhartid[1]}] -set_false_path -from [get_ports {fuse_mhartid[20]}] -set_false_path -from [get_ports {fuse_mhartid[21]}] -set_false_path -from [get_ports {fuse_mhartid[22]}] -set_false_path -from [get_ports {fuse_mhartid[23]}] -set_false_path -from [get_ports {fuse_mhartid[24]}] -set_false_path -from [get_ports {fuse_mhartid[25]}] -set_false_path -from [get_ports {fuse_mhartid[26]}] -set_false_path -from [get_ports {fuse_mhartid[27]}] -set_false_path -from [get_ports {fuse_mhartid[28]}] -set_false_path -from [get_ports {fuse_mhartid[29]}] -set_false_path -from [get_ports {fuse_mhartid[2]}] -set_false_path -from [get_ports {fuse_mhartid[30]}] -set_false_path -from [get_ports {fuse_mhartid[31]}] -set_false_path -from [get_ports {fuse_mhartid[3]}] -set_false_path -from [get_ports {fuse_mhartid[4]}] -set_false_path -from [get_ports {fuse_mhartid[5]}] -set_false_path -from [get_ports {fuse_mhartid[6]}] -set_false_path -from [get_ports {fuse_mhartid[7]}] -set_false_path -from [get_ports {fuse_mhartid[8]}] -set_false_path -from [get_ports {fuse_mhartid[9]}] -set_false_path -from [get_ports {irq_lines[0]}] -set_false_path -from [get_ports {irq_lines[10]}] -set_false_path -from [get_ports {irq_lines[11]}] -set_false_path -from [get_ports {irq_lines[12]}] -set_false_path -from [get_ports {irq_lines[13]}] -set_false_path -from [get_ports {irq_lines[14]}] -set_false_path -from [get_ports {irq_lines[15]}] -set_false_path -from [get_ports {irq_lines[1]}] -set_false_path -from [get_ports {irq_lines[2]}] -set_false_path -from [get_ports {irq_lines[3]}] -set_false_path -from [get_ports {irq_lines[4]}] -set_false_path -from [get_ports {irq_lines[5]}] -set_false_path -from [get_ports {irq_lines[6]}] -set_false_path -from [get_ports {irq_lines[7]}] -set_false_path -from [get_ports {irq_lines[8]}] -set_false_path -from [get_ports {irq_lines[9]}] -set_false_path -from [get_ports {pwrup_rst_n}] -set_false_path -from [get_ports {rst_n}] -set_false_path -from [get_ports {soft_irq}] -############################################################################### -# Environment -############################################################################### -set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -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] - -############################################################################### -# Design Rules -###############################################################################
diff --git a/openlane/yifive/config.tcl b/openlane/yifive/config.tcl deleted file mode 100755 index dc97db9..0000000 --- a/openlane/yifive/config.tcl +++ /dev/null
@@ -1,149 +0,0 @@ -# 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> - -# Global -# ------ - -set script_dir [file dirname [file normalize [info script]]] -# Name -set ::env(DESIGN_NAME) ycr1_top_wb - -set ::env(DESIGN_IS_CORE) "0" -set ::env(FP_PDN_CORE_RING) "0" - -# Timing configuration -set ::env(CLOCK_PERIOD) "10" -set ::env(CLOCK_PORT) "wb_clk core_clk" - -set ::env(SYNTH_MAX_FANOUT) 4 - -## CTS BUFFER -set ::env(CTS_CLK_BUFFER_LIST) "sky130_fd_sc_hd__clkbuf_4 sky130_fd_sc_hd__clkbuf_8" -set ::env(CTS_SINK_CLUSTERING_SIZE) "16" -set ::env(CLOCK_BUFFER_FANOUT) "8" - -# Sources -# ------- - -# Local sources + no2usb sources -set ::env(VERILOG_FILES) "\ - $script_dir/../../verilog/rtl/clk_skew_adjust/src/clk_skew_adjust.gv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr1_pipe_top.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr1_core_top.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr1_dm.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr1_tapc_synchronizer.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr1_clk_ctrl.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr1_scu.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr1_tapc.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr1_tapc_shift_reg.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/ycr1_dmi.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/primitives/ycr1_reset_cells.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr1_pipe_ifu.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr1_pipe_idu.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr1_pipe_exu.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr1_pipe_mprf.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr1_pipe_csr.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr1_pipe_ialu.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr1_pipe_mul.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr1_pipe_div.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr1_pipe_lsu.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr1_pipe_hdu.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr1_pipe_tdu.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/core/pipeline/ycr1_ipic.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr1_dmem_router.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr1_imem_router.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr1_icache_router.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr1_dcache_router.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr1_tcm_router.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr1_timer.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr1_top_wb.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr1_dmem_wb.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr1_imem_wb.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/top/ycr1_intf.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/cache/src/core/icache_top.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/cache/src/core/icache_app_fsm.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/cache/src/core/icache_tag_fifo.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/cache/src/core/dcache_tag_fifo.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/cache/src/core/dcache_top.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/lib/ycr1_async_wbb.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/lib/ycr1_arb.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/lib/sync_fifo.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/lib/async_fifo.sv \ - $script_dir/../../verilog/rtl/yifive/ycr1c/src/lib/ctech_cells.sv \ - " - -set ::env(VERILOG_INCLUDE_DIRS) [glob $script_dir/../../verilog/rtl/yifive/ycr1c/src/includes ] -set ::env(SYNTH_READ_BLACKBOX_LIB) 1 -set ::env(SYNTH_DEFINES) [list SYNTHESIS ] - -set ::env(SDC_FILE) "$script_dir/base.sdc" -set ::env(BASE_SDC_FILE) "$script_dir/base.sdc" -#set ::env(SYNTH_DEFINES) [list SCR1_DBG_EN ] - -set ::env(LEC_ENABLE) 0 - -set ::env(VDD_PIN) [list {vccd1}] -set ::env(GND_PIN) [list {vssd1}] - - -# -------- -# Floorplanning -# ------------- - -set ::env(FP_PIN_ORDER_CFG) $::env(DESIGN_DIR)/pin_order.cfg - -set ::env(FP_SIZING) absolute -set ::env(DIE_AREA) [list 0.0 0.0 815.0 1540.0] - - -# If you're going to use multiple power domains, then keep this disabled. -set ::env(RUN_CVC) 0 - -#set ::env(PDN_CFG) $script_dir/pdn.tcl - - -set ::env(PL_TIME_DRIVEN) 1 -set ::env(PL_TARGET_DENSITY) "0.32" -set ::env(FP_CORE_UTIL) "50" - - - -## Routing - - -set ::env(GLB_RT_MAXLAYER) 5 -set ::env(RT_MAX_LAYER) {met4} -set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 10 -set ::env(DIODE_INSERTION_STRATEGY) 4 - - -set ::env(QUIT_ON_TIMING_VIOLATIONS) "0" -set ::env(QUIT_ON_MAGIC_DRC) "1" -set ::env(QUIT_ON_LVS_ERROR) "0" -set ::env(QUIT_ON_SLEW_VIOLATIONS) "0" -set ::env(QUIT_ON_SETUP_VIOLATIONS) "0" -set ::env(QUIT_ON_HOLD_VIOLATIONS) "0" -set ::env(QUIT_ON_ILLEGAL_OVERLAPS) "1" - - - - - -set ::env(PL_RESIZER_DESIGN_OPTIMIZATIONS) "1" - -#Need to cross-check why global timing opimization creating setup vio with hugh hold fix -set ::env(GLB_RESIZER_TIMING_OPTIMIZATIONS) "1" -
diff --git a/openlane/yifive/pdn.tcl b/openlane/yifive/pdn.tcl deleted file mode 100644 index 1fe689b..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 5 - -# 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 deleted file mode 100644 index c2fb874..0000000 --- a/openlane/yifive/pin_order.cfg +++ /dev/null
@@ -1,896 +0,0 @@ -#BUS_SORT - -#MANUAL_PLACE - - -#E -soft_irq 0500 0 2 -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\] -cfg_cache_ctrl\[2\] -cfg_cache_ctrl\[1\] -cfg_cache_ctrl\[0\] - -cfg_cska_riscv\[3\] -cfg_cska_riscv\[2\] -cfg_cska_riscv\[1\] -cfg_cska_riscv\[0\] -wbd_clk_int -wbd_clk_riscv -wb_clk - - -wbd_dmem_stb_o 0700 0 -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 - -wb_dcache_stb_o 0900 0 2 -wb_dcache_we_o -wb_dcache_adr_o\[31\] -wb_dcache_adr_o\[30\] -wb_dcache_adr_o\[29\] -wb_dcache_adr_o\[28\] -wb_dcache_adr_o\[27\] -wb_dcache_adr_o\[26\] -wb_dcache_adr_o\[25\] -wb_dcache_adr_o\[24\] -wb_dcache_adr_o\[23\] -wb_dcache_adr_o\[22\] -wb_dcache_adr_o\[21\] -wb_dcache_adr_o\[20\] -wb_dcache_adr_o\[19\] -wb_dcache_adr_o\[18\] -wb_dcache_adr_o\[17\] -wb_dcache_adr_o\[16\] -wb_dcache_adr_o\[15\] -wb_dcache_adr_o\[14\] -wb_dcache_adr_o\[13\] -wb_dcache_adr_o\[12\] -wb_dcache_adr_o\[11\] -wb_dcache_adr_o\[10\] -wb_dcache_adr_o\[9\] -wb_dcache_adr_o\[8\] -wb_dcache_adr_o\[7\] -wb_dcache_adr_o\[6\] -wb_dcache_adr_o\[5\] -wb_dcache_adr_o\[4\] -wb_dcache_adr_o\[3\] -wb_dcache_adr_o\[2\] -wb_dcache_adr_o\[1\] -wb_dcache_adr_o\[0\] -wb_dcache_sel_o\[3\] -wb_dcache_sel_o\[2\] -wb_dcache_sel_o\[1\] -wb_dcache_sel_o\[0\] -wb_dcache_bl_o\[9\] -wb_dcache_bl_o\[8\] -wb_dcache_bl_o\[7\] -wb_dcache_bl_o\[6\] -wb_dcache_bl_o\[5\] -wb_dcache_bl_o\[4\] -wb_dcache_bl_o\[3\] -wb_dcache_bl_o\[2\] -wb_dcache_bl_o\[1\] -wb_dcache_bl_o\[0\] -wb_dcache_bry_o -wb_dcache_dat_o\[31\] -wb_dcache_dat_o\[30\] -wb_dcache_dat_o\[29\] -wb_dcache_dat_o\[28\] -wb_dcache_dat_o\[27\] -wb_dcache_dat_o\[26\] -wb_dcache_dat_o\[25\] -wb_dcache_dat_o\[24\] -wb_dcache_dat_o\[23\] -wb_dcache_dat_o\[22\] -wb_dcache_dat_o\[21\] -wb_dcache_dat_o\[20\] -wb_dcache_dat_o\[19\] -wb_dcache_dat_o\[18\] -wb_dcache_dat_o\[17\] -wb_dcache_dat_o\[16\] -wb_dcache_dat_o\[15\] -wb_dcache_dat_o\[14\] -wb_dcache_dat_o\[13\] -wb_dcache_dat_o\[12\] -wb_dcache_dat_o\[11\] -wb_dcache_dat_o\[10\] -wb_dcache_dat_o\[9\] -wb_dcache_dat_o\[8\] -wb_dcache_dat_o\[7\] -wb_dcache_dat_o\[6\] -wb_dcache_dat_o\[5\] -wb_dcache_dat_o\[4\] -wb_dcache_dat_o\[3\] -wb_dcache_dat_o\[2\] -wb_dcache_dat_o\[1\] -wb_dcache_dat_o\[0\] -wb_dcache_dat_i\[31\] -wb_dcache_dat_i\[30\] -wb_dcache_dat_i\[29\] -wb_dcache_dat_i\[28\] -wb_dcache_dat_i\[27\] -wb_dcache_dat_i\[26\] -wb_dcache_dat_i\[25\] -wb_dcache_dat_i\[24\] -wb_dcache_dat_i\[23\] -wb_dcache_dat_i\[22\] -wb_dcache_dat_i\[21\] -wb_dcache_dat_i\[20\] -wb_dcache_dat_i\[19\] -wb_dcache_dat_i\[18\] -wb_dcache_dat_i\[17\] -wb_dcache_dat_i\[16\] -wb_dcache_dat_i\[15\] -wb_dcache_dat_i\[14\] -wb_dcache_dat_i\[13\] -wb_dcache_dat_i\[12\] -wb_dcache_dat_i\[11\] -wb_dcache_dat_i\[10\] -wb_dcache_dat_i\[9\] -wb_dcache_dat_i\[8\] -wb_dcache_dat_i\[7\] -wb_dcache_dat_i\[6\] -wb_dcache_dat_i\[5\] -wb_dcache_dat_i\[4\] -wb_dcache_dat_i\[3\] -wb_dcache_dat_i\[2\] -wb_dcache_dat_i\[1\] -wb_dcache_dat_i\[0\] -wb_dcache_ack_i -wb_dcache_lack_i -wb_dcache_err_i - -wb_icache_stb_o 1100 0 2 -wb_icache_we_o -wb_icache_adr_o\[31\] -wb_icache_adr_o\[30\] -wb_icache_adr_o\[29\] -wb_icache_adr_o\[28\] -wb_icache_adr_o\[27\] -wb_icache_adr_o\[26\] -wb_icache_adr_o\[25\] -wb_icache_adr_o\[24\] -wb_icache_adr_o\[23\] -wb_icache_adr_o\[22\] -wb_icache_adr_o\[21\] -wb_icache_adr_o\[20\] -wb_icache_adr_o\[19\] -wb_icache_adr_o\[18\] -wb_icache_adr_o\[17\] -wb_icache_adr_o\[16\] -wb_icache_adr_o\[15\] -wb_icache_adr_o\[14\] -wb_icache_adr_o\[13\] -wb_icache_adr_o\[12\] -wb_icache_adr_o\[11\] -wb_icache_adr_o\[10\] -wb_icache_adr_o\[9\] -wb_icache_adr_o\[8\] -wb_icache_adr_o\[7\] -wb_icache_adr_o\[6\] -wb_icache_adr_o\[5\] -wb_icache_adr_o\[4\] -wb_icache_adr_o\[3\] -wb_icache_adr_o\[2\] -wb_icache_adr_o\[1\] -wb_icache_adr_o\[0\] -wb_icache_sel_o\[3\] -wb_icache_sel_o\[2\] -wb_icache_sel_o\[1\] -wb_icache_sel_o\[0\] -wb_icache_bl_o\[9\] -wb_icache_bl_o\[8\] -wb_icache_bl_o\[7\] -wb_icache_bl_o\[6\] -wb_icache_bl_o\[5\] -wb_icache_bl_o\[4\] -wb_icache_bl_o\[3\] -wb_icache_bl_o\[2\] -wb_icache_bl_o\[1\] -wb_icache_bl_o\[0\] -wb_icache_bry_o -wb_icache_dat_i\[31\] -wb_icache_dat_i\[30\] -wb_icache_dat_i\[29\] -wb_icache_dat_i\[28\] -wb_icache_dat_i\[27\] -wb_icache_dat_i\[26\] -wb_icache_dat_i\[25\] -wb_icache_dat_i\[24\] -wb_icache_dat_i\[23\] -wb_icache_dat_i\[22\] -wb_icache_dat_i\[21\] -wb_icache_dat_i\[20\] -wb_icache_dat_i\[19\] -wb_icache_dat_i\[18\] -wb_icache_dat_i\[17\] -wb_icache_dat_i\[16\] -wb_icache_dat_i\[15\] -wb_icache_dat_i\[14\] -wb_icache_dat_i\[13\] -wb_icache_dat_i\[12\] -wb_icache_dat_i\[11\] -wb_icache_dat_i\[10\] -wb_icache_dat_i\[9\] -wb_icache_dat_i\[8\] -wb_icache_dat_i\[7\] -wb_icache_dat_i\[6\] -wb_icache_dat_i\[5\] -wb_icache_dat_i\[4\] -wb_icache_dat_i\[3\] -wb_icache_dat_i\[2\] -wb_icache_dat_i\[1\] -wb_icache_dat_i\[0\] -wb_icache_ack_i -wb_icache_lack_i -wb_icache_err_i - -#W - -tcm_dffram_clk0 0000 0 2 -tcm_dffram_cs0 -tcm_dffram_addr0\[7\] -tcm_dffram_addr0\[6\] -tcm_dffram_addr0\[5\] -tcm_dffram_addr0\[4\] -tcm_dffram_addr0\[3\] -tcm_dffram_addr0\[2\] -tcm_dffram_addr0\[1\] -tcm_dffram_addr0\[0\] -tcm_dffram_wmask0\[3\] -tcm_dffram_wmask0\[2\] -tcm_dffram_wmask0\[1\] -tcm_dffram_wmask0\[0\] -tcm_dffram_din0\[31\] -tcm_dffram_din0\[30\] -tcm_dffram_din0\[29\] -tcm_dffram_din0\[28\] -tcm_dffram_din0\[27\] -tcm_dffram_din0\[26\] -tcm_dffram_din0\[25\] -tcm_dffram_din0\[24\] -tcm_dffram_din0\[23\] -tcm_dffram_din0\[22\] -tcm_dffram_din0\[21\] -tcm_dffram_din0\[20\] -tcm_dffram_din0\[19\] -tcm_dffram_din0\[18\] -tcm_dffram_din0\[17\] -tcm_dffram_din0\[16\] -tcm_dffram_din0\[15\] -tcm_dffram_din0\[14\] -tcm_dffram_din0\[13\] -tcm_dffram_din0\[12\] -tcm_dffram_din0\[11\] -tcm_dffram_din0\[10\] -tcm_dffram_din0\[9\] -tcm_dffram_din0\[8\] -tcm_dffram_din0\[7\] -tcm_dffram_din0\[6\] -tcm_dffram_din0\[5\] -tcm_dffram_din0\[4\] -tcm_dffram_din0\[3\] -tcm_dffram_din0\[2\] -tcm_dffram_din0\[1\] -tcm_dffram_din0\[0\] - -tcm_dffram_dout0\[31\] 750 0 2 -tcm_dffram_dout0\[30\] -tcm_dffram_dout0\[29\] -tcm_dffram_dout0\[28\] -tcm_dffram_dout0\[27\] -tcm_dffram_dout0\[26\] -tcm_dffram_dout0\[25\] -tcm_dffram_dout0\[24\] -tcm_dffram_dout0\[23\] -tcm_dffram_dout0\[22\] -tcm_dffram_dout0\[21\] -tcm_dffram_dout0\[20\] -tcm_dffram_dout0\[19\] -tcm_dffram_dout0\[18\] -tcm_dffram_dout0\[17\] -tcm_dffram_dout0\[16\] -tcm_dffram_dout0\[15\] -tcm_dffram_dout0\[14\] -tcm_dffram_dout0\[13\] -tcm_dffram_dout0\[12\] -tcm_dffram_dout0\[11\] -tcm_dffram_dout0\[10\] -tcm_dffram_dout0\[9\] -tcm_dffram_dout0\[8\] -tcm_dffram_dout0\[7\] -tcm_dffram_dout0\[6\] -tcm_dffram_dout0\[5\] -tcm_dffram_dout0\[4\] -tcm_dffram_dout0\[3\] -tcm_dffram_dout0\[2\] -tcm_dffram_dout0\[1\] -tcm_dffram_dout0\[0\] - -tcm_dffram_clk1 0800 0 2 -tcm_dffram_cs1 -tcm_dffram_addr1\[0\] -tcm_dffram_addr1\[1\] -tcm_dffram_addr1\[2\] -tcm_dffram_addr1\[3\] -tcm_dffram_addr1\[4\] -tcm_dffram_addr1\[5\] -tcm_dffram_addr1\[6\] -tcm_dffram_addr1\[7\] -tcm_dffram_wmask1\[0\] -tcm_dffram_wmask1\[1\] -tcm_dffram_wmask1\[2\] -tcm_dffram_wmask1\[3\] -tcm_dffram_din1\[0\] -tcm_dffram_din1\[1\] -tcm_dffram_din1\[2\] -tcm_dffram_din1\[3\] -tcm_dffram_din1\[4\] -tcm_dffram_din1\[5\] -tcm_dffram_din1\[6\] -tcm_dffram_din1\[7\] -tcm_dffram_din1\[8\] -tcm_dffram_din1\[9\] -tcm_dffram_din1\[10\] -tcm_dffram_din1\[11\] -tcm_dffram_din1\[12\] -tcm_dffram_din1\[13\] -tcm_dffram_din1\[14\] -tcm_dffram_din1\[15\] -tcm_dffram_din1\[16\] -tcm_dffram_din1\[17\] -tcm_dffram_din1\[18\] -tcm_dffram_din1\[19\] -tcm_dffram_din1\[20\] -tcm_dffram_din1\[21\] -tcm_dffram_din1\[22\] -tcm_dffram_din1\[23\] -tcm_dffram_din1\[24\] -tcm_dffram_din1\[25\] -tcm_dffram_din1\[26\] -tcm_dffram_din1\[27\] -tcm_dffram_din1\[28\] -tcm_dffram_din1\[29\] -tcm_dffram_din1\[30\] -tcm_dffram_din1\[31\] - -tcm_dffram_dout1\[31\] 1450 0 2 -tcm_dffram_dout1\[30\] -tcm_dffram_dout1\[29\] -tcm_dffram_dout1\[28\] -tcm_dffram_dout1\[27\] -tcm_dffram_dout1\[26\] -tcm_dffram_dout1\[25\] -tcm_dffram_dout1\[24\] -tcm_dffram_dout1\[23\] -tcm_dffram_dout1\[22\] -tcm_dffram_dout1\[21\] -tcm_dffram_dout1\[20\] -tcm_dffram_dout1\[19\] -tcm_dffram_dout1\[18\] -tcm_dffram_dout1\[17\] -tcm_dffram_dout1\[16\] -tcm_dffram_dout1\[15\] -tcm_dffram_dout1\[14\] -tcm_dffram_dout1\[13\] -tcm_dffram_dout1\[12\] -tcm_dffram_dout1\[11\] -tcm_dffram_dout1\[10\] -tcm_dffram_dout1\[9\] -tcm_dffram_dout1\[8\] -tcm_dffram_dout1\[7\] -tcm_dffram_dout1\[6\] -tcm_dffram_dout1\[5\] -tcm_dffram_dout1\[4\] -tcm_dffram_dout1\[3\] -tcm_dffram_dout1\[2\] -tcm_dffram_dout1\[1\] -tcm_dffram_dout1\[0\] - -#N -dcache_dffram_clk0 0000 0 2 -dcache_dffram_din0\[0\] -dcache_dffram_din0\[1\] -dcache_dffram_din0\[2\] -dcache_dffram_din0\[3\] -dcache_dffram_din0\[4\] -dcache_dffram_din0\[5\] -dcache_dffram_din0\[6\] -dcache_dffram_din0\[7\] -dcache_dffram_din0\[8\] -dcache_dffram_din0\[9\] -dcache_dffram_din0\[10\] -dcache_dffram_din0\[11\] -dcache_dffram_din0\[12\] -dcache_dffram_din0\[13\] -dcache_dffram_din0\[14\] -dcache_dffram_din0\[15\] -dcache_dffram_din0\[16\] -dcache_dffram_din0\[17\] -dcache_dffram_din0\[18\] -dcache_dffram_din0\[19\] -dcache_dffram_din0\[20\] -dcache_dffram_din0\[21\] -dcache_dffram_din0\[22\] -dcache_dffram_din0\[23\] -dcache_dffram_din0\[24\] -dcache_dffram_din0\[25\] -dcache_dffram_din0\[26\] -dcache_dffram_din0\[27\] -dcache_dffram_din0\[28\] -dcache_dffram_din0\[29\] -dcache_dffram_din0\[30\] -dcache_dffram_din0\[31\] -dcache_dffram_cs0 -dcache_dffram_addr0\[7\] -dcache_dffram_addr0\[6\] -dcache_dffram_addr0\[5\] -dcache_dffram_addr0\[4\] -dcache_dffram_addr0\[3\] -dcache_dffram_addr0\[2\] -dcache_dffram_addr0\[1\] -dcache_dffram_addr0\[0\] -dcache_dffram_wmask0\[3\] -dcache_dffram_wmask0\[2\] -dcache_dffram_wmask0\[1\] -dcache_dffram_wmask0\[0\] -dcache_dffram_dout0\[0\] -dcache_dffram_dout0\[1\] -dcache_dffram_dout0\[2\] -dcache_dffram_dout0\[3\] -dcache_dffram_dout0\[4\] -dcache_dffram_dout0\[5\] -dcache_dffram_dout0\[6\] -dcache_dffram_dout0\[7\] -dcache_dffram_dout0\[8\] -dcache_dffram_dout0\[9\] -dcache_dffram_dout0\[10\] -dcache_dffram_dout0\[11\] -dcache_dffram_dout0\[12\] -dcache_dffram_dout0\[13\] -dcache_dffram_dout0\[14\] -dcache_dffram_dout0\[15\] -dcache_dffram_dout0\[16\] -dcache_dffram_dout0\[17\] -dcache_dffram_dout0\[18\] -dcache_dffram_dout0\[19\] -dcache_dffram_dout0\[20\] -dcache_dffram_dout0\[21\] -dcache_dffram_dout0\[22\] -dcache_dffram_dout0\[23\] -dcache_dffram_dout0\[24\] -dcache_dffram_dout0\[25\] -dcache_dffram_dout0\[26\] -dcache_dffram_dout0\[27\] -dcache_dffram_dout0\[28\] -dcache_dffram_dout0\[29\] -dcache_dffram_dout0\[30\] -dcache_dffram_dout0\[31\] - -dcache_dffram_clk1 0300 0 2 -dcache_dffram_din1\[0\] -dcache_dffram_din1\[1\] -dcache_dffram_din1\[2\] -dcache_dffram_din1\[3\] -dcache_dffram_din1\[4\] -dcache_dffram_din1\[5\] -dcache_dffram_din1\[6\] -dcache_dffram_din1\[7\] -dcache_dffram_din1\[8\] -dcache_dffram_din1\[9\] -dcache_dffram_din1\[10\] -dcache_dffram_din1\[11\] -dcache_dffram_din1\[12\] -dcache_dffram_din1\[13\] -dcache_dffram_din1\[14\] -dcache_dffram_din1\[15\] -dcache_dffram_din1\[16\] -dcache_dffram_din1\[17\] -dcache_dffram_din1\[18\] -dcache_dffram_din1\[19\] -dcache_dffram_din1\[20\] -dcache_dffram_din1\[21\] -dcache_dffram_din1\[22\] -dcache_dffram_din1\[23\] -dcache_dffram_din1\[24\] -dcache_dffram_din1\[25\] -dcache_dffram_din1\[26\] -dcache_dffram_din1\[27\] -dcache_dffram_din1\[28\] -dcache_dffram_din1\[29\] -dcache_dffram_din1\[30\] -dcache_dffram_din1\[31\] -dcache_dffram_cs1 -dcache_dffram_addr1\[7\] -dcache_dffram_addr1\[6\] -dcache_dffram_addr1\[5\] -dcache_dffram_addr1\[4\] -dcache_dffram_addr1\[3\] -dcache_dffram_addr1\[2\] -dcache_dffram_addr1\[1\] -dcache_dffram_addr1\[0\] -dcache_dffram_wmask1\[3\] -dcache_dffram_wmask1\[2\] -dcache_dffram_wmask1\[1\] -dcache_dffram_wmask1\[0\] -dcache_dffram_dout1\[0\] -dcache_dffram_dout1\[1\] -dcache_dffram_dout1\[2\] -dcache_dffram_dout1\[3\] -dcache_dffram_dout1\[4\] -dcache_dffram_dout1\[5\] -dcache_dffram_dout1\[6\] -dcache_dffram_dout1\[7\] -dcache_dffram_dout1\[8\] -dcache_dffram_dout1\[9\] -dcache_dffram_dout1\[10\] -dcache_dffram_dout1\[11\] -dcache_dffram_dout1\[12\] -dcache_dffram_dout1\[13\] -dcache_dffram_dout1\[14\] -dcache_dffram_dout1\[15\] -dcache_dffram_dout1\[16\] -dcache_dffram_dout1\[17\] -dcache_dffram_dout1\[18\] -dcache_dffram_dout1\[19\] -dcache_dffram_dout1\[20\] -dcache_dffram_dout1\[21\] -dcache_dffram_dout1\[22\] -dcache_dffram_dout1\[23\] -dcache_dffram_dout1\[24\] -dcache_dffram_dout1\[25\] -dcache_dffram_dout1\[26\] -dcache_dffram_dout1\[27\] -dcache_dffram_dout1\[28\] -dcache_dffram_dout1\[29\] -dcache_dffram_dout1\[30\] -dcache_dffram_dout1\[31\] - -#S -icache_dffram_clk0 0000 0 2 -icache_dffram_dout0\[0\] -icache_dffram_dout0\[1\] -icache_dffram_dout0\[2\] -icache_dffram_dout0\[3\] -icache_dffram_dout0\[4\] -icache_dffram_dout0\[5\] -icache_dffram_dout0\[6\] -icache_dffram_dout0\[7\] -icache_dffram_dout0\[8\] -icache_dffram_dout0\[9\] -icache_dffram_dout0\[10\] -icache_dffram_dout0\[11\] -icache_dffram_dout0\[12\] -icache_dffram_dout0\[13\] -icache_dffram_dout0\[14\] -icache_dffram_dout0\[15\] -icache_dffram_dout0\[16\] -icache_dffram_dout0\[17\] -icache_dffram_dout0\[18\] -icache_dffram_dout0\[19\] -icache_dffram_dout0\[20\] -icache_dffram_dout0\[21\] -icache_dffram_dout0\[22\] -icache_dffram_dout0\[23\] -icache_dffram_dout0\[24\] -icache_dffram_dout0\[25\] -icache_dffram_dout0\[26\] -icache_dffram_dout0\[27\] -icache_dffram_dout0\[28\] -icache_dffram_dout0\[29\] -icache_dffram_dout0\[30\] -icache_dffram_dout0\[31\] -icache_dffram_cs0 -icache_dffram_addr0\[7\] -icache_dffram_addr0\[6\] -icache_dffram_addr0\[5\] -icache_dffram_addr0\[4\] -icache_dffram_addr0\[3\] -icache_dffram_addr0\[2\] -icache_dffram_addr0\[1\] -icache_dffram_addr0\[0\] -icache_dffram_wmask0\[3\] -icache_dffram_wmask0\[2\] -icache_dffram_wmask0\[1\] -icache_dffram_wmask0\[0\] -icache_dffram_din0\[0\] -icache_dffram_din0\[1\] -icache_dffram_din0\[2\] -icache_dffram_din0\[3\] -icache_dffram_din0\[4\] -icache_dffram_din0\[5\] -icache_dffram_din0\[6\] -icache_dffram_din0\[7\] -icache_dffram_din0\[8\] -icache_dffram_din0\[9\] -icache_dffram_din0\[10\] -icache_dffram_din0\[11\] -icache_dffram_din0\[12\] -icache_dffram_din0\[13\] -icache_dffram_din0\[14\] -icache_dffram_din0\[15\] -icache_dffram_din0\[16\] -icache_dffram_din0\[17\] -icache_dffram_din0\[18\] -icache_dffram_din0\[19\] -icache_dffram_din0\[20\] -icache_dffram_din0\[21\] -icache_dffram_din0\[22\] -icache_dffram_din0\[23\] -icache_dffram_din0\[24\] -icache_dffram_din0\[25\] -icache_dffram_din0\[26\] -icache_dffram_din0\[27\] -icache_dffram_din0\[28\] -icache_dffram_din0\[29\] -icache_dffram_din0\[30\] -icache_dffram_din0\[31\] - -icache_dffram_clk1 0300 0 2 -icache_dffram_dout1\[0\] -icache_dffram_dout1\[1\] -icache_dffram_dout1\[2\] -icache_dffram_dout1\[3\] -icache_dffram_dout1\[4\] -icache_dffram_dout1\[5\] -icache_dffram_dout1\[6\] -icache_dffram_dout1\[7\] -icache_dffram_dout1\[8\] -icache_dffram_dout1\[9\] -icache_dffram_dout1\[10\] -icache_dffram_dout1\[11\] -icache_dffram_dout1\[12\] -icache_dffram_dout1\[13\] -icache_dffram_dout1\[14\] -icache_dffram_dout1\[15\] -icache_dffram_dout1\[16\] -icache_dffram_dout1\[17\] -icache_dffram_dout1\[18\] -icache_dffram_dout1\[19\] -icache_dffram_dout1\[20\] -icache_dffram_dout1\[21\] -icache_dffram_dout1\[22\] -icache_dffram_dout1\[23\] -icache_dffram_dout1\[24\] -icache_dffram_dout1\[25\] -icache_dffram_dout1\[26\] -icache_dffram_dout1\[27\] -icache_dffram_dout1\[28\] -icache_dffram_dout1\[29\] -icache_dffram_dout1\[30\] -icache_dffram_dout1\[31\] -icache_dffram_cs1 -icache_dffram_addr1\[7\] -icache_dffram_addr1\[6\] -icache_dffram_addr1\[5\] -icache_dffram_addr1\[4\] -icache_dffram_addr1\[3\] -icache_dffram_addr1\[2\] -icache_dffram_addr1\[1\] -icache_dffram_addr1\[0\] -icache_dffram_wmask1\[3\] -icache_dffram_wmask1\[2\] -icache_dffram_wmask1\[1\] -icache_dffram_wmask1\[0\] -icache_dffram_din1\[0\] -icache_dffram_din1\[1\] -icache_dffram_din1\[2\] -icache_dffram_din1\[3\] -icache_dffram_din1\[4\] -icache_dffram_din1\[5\] -icache_dffram_din1\[6\] -icache_dffram_din1\[7\] -icache_dffram_din1\[8\] -icache_dffram_din1\[9\] -icache_dffram_din1\[10\] -icache_dffram_din1\[11\] -icache_dffram_din1\[12\] -icache_dffram_din1\[13\] -icache_dffram_din1\[14\] -icache_dffram_din1\[15\] -icache_dffram_din1\[16\] -icache_dffram_din1\[17\] -icache_dffram_din1\[18\] -icache_dffram_din1\[19\] -icache_dffram_din1\[20\] -icache_dffram_din1\[21\] -icache_dffram_din1\[22\] -icache_dffram_din1\[23\] -icache_dffram_din1\[24\] -icache_dffram_din1\[25\] -icache_dffram_din1\[26\] -icache_dffram_din1\[27\] -icache_dffram_din1\[28\] -icache_dffram_din1\[29\] -icache_dffram_din1\[30\] -icache_dffram_din1\[31\] - -riscv_debug\[0\] 600 0 2 -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\] - - -wb_rst_n 700 0 2 -pwrup_rst_n -rst_n -core_clk -core_clk_mclk -rtc_clk -cpu_rst_n
diff --git a/openlane/yifive/sta.tcl b/openlane/yifive/sta.tcl deleted file mode 100644 index 8168d16..0000000 --- a/openlane/yifive/sta.tcl +++ /dev/null
@@ -1,95 +0,0 @@ -# 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 ::env(LIB_FASTEST) "$::env(PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ff_n40C_1v95.lib" -set ::env(LIB_TYPICAL) "$::env(PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__tt_025C_1v80.lib" -set ::env(LIB_SLOWEST) "$::env(PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ss_100C_1v60.lib" -set ::env(CURRENT_NETLIST) ../user_project_wrapper/netlist/syntacore.v -set ::env(DESIGN_NAME) "scr1_top_wb" -set ::env(CURRENT_SPEF) ../../spef/scr1_top_wb.spef -set ::env(BASE_SDC_FILE) "base.sdc" -set ::env(SYNTH_DRIVING_CELL) "sky130_fd_sc_hd__inv_8" -set ::env(SYNTH_DRIVING_CELL_PIN) "Y" -set ::env(SYNTH_CAP_LOAD) "17.65" -set ::env(WIRE_RC_LAYER) "met1" - - -set_cmd_units -time ns -capacitance pF -current mA -voltage V -resistance kOhm -distance um -define_corners wc bc tt -read_liberty -corner bc $::env(LIB_FASTEST) -read_liberty -corner wc $::env(LIB_SLOWEST) -read_liberty -corner tt $::env(LIB_TYPICAL) - -read_verilog $::env(CURRENT_NETLIST) -link_design $::env(DESIGN_NAME) - -read_spef $::env(CURRENT_SPEF) - -read_sdc -echo $::env(BASE_SDC_FILE) - -# check for missing constraints -check_setup -verbose > unconstraints.rpt - -set_operating_conditions -analysis_type single -# Propgate the clock -set_propagated_clock [all_clocks] - -report_tns -report_wns -#report_power - -echo "################ CORNER : WC (SLOW) TIMING Report ###################" > timing_ss_max.rpt -report_checks -unique -path_delay max -slack_max -0.0 -group_count 100 -corner wc -format full_clock_expanded >> timing_ss_max.rpt -report_checks -group_count 100 -path_delay max -path_group wbm_clk_i -corner wc -format full_clock_expanded >> timing_ss_max.rpt -report_checks -group_count 100 -path_delay max -path_group wbs_clk_i -corner wc -format full_clock_expanded >> timing_ss_max.rpt -report_checks -group_count 100 -path_delay max -path_group cpu_clk -corner wc -format full_clock_expanded >> timing_ss_max.rpt -report_checks -group_count 100 -path_delay max -path_group rtc_clk -corner wc -format full_clock_expanded >> timing_ss_max.rpt -report_checks -group_count 100 -path_delay max -path_group line_clk -corner wc -format full_clock_expanded >> timing_ss_max.rpt -report_checks -path_delay max -corner wc >> timing_ff_max.rpt - -echo "################ CORNER : BC (SLOW) TIMING Report ###################" > timing_ff_min.rpt -report_checks -unique -path_delay min -slack_min -0.0 -group_count 100 -corner bc -format full_clock_expanded >> timing_ff_min.rpt -report_checks -group_count 100 -path_delay min -path_group wbm_clk_i -corner bc -format full_clock_expanded >> timing_ff_min.rpt -report_checks -group_count 100 -path_delay min -path_group wbs_clk_i -corner bc -format full_clock_expanded >> timing_ff_min.rpt -report_checks -group_count 100 -path_delay min -path_group cpu_clk -corner bc -format full_clock_expanded >> timing_ff_min.rpt -report_checks -group_count 100 -path_delay min -path_group rtc_clk -corner bc -format full_clock_expanded >> timing_ff_min.rpt -report_checks -group_count 100 -path_delay min -path_group line_clk -corner bc -format full_clock_expanded >> timing_ff_min.rpt -report_checks -path_delay min -corner bc >> timing_min.rpt - -echo "################ CORNER : TT (MAX) TIMING Report ###################" > timing_tt_max.rpt -report_checks -unique -path_delay max -slack_min -0.0 -group_count 100 -corner tt -format full_clock_expanded >> timing_tt_max.rpt -report_checks -group_count 100 -path_delay max -path_group wbm_clk_i -corner tt -format full_clock_expanded >> timing_tt_max.rpt -report_checks -group_count 100 -path_delay max -path_group wbs_clk_i -corner tt -format full_clock_expanded >> timing_tt_max.rpt -report_checks -group_count 100 -path_delay max -path_group cpu_clk -corner tt -format full_clock_expanded >> timing_tt_max.rpt -report_checks -group_count 100 -path_delay max -path_group rtc_clk -corner tt -format full_clock_expanded >> timing_tt_max.rpt -report_checks -group_count 100 -path_delay max -path_group line_clk -corner tt -format full_clock_expanded >> timing_tt_max.rpt -report_checks -path_delay max -corner tt >> timing_tt_max.rpt - -echo "################ CORNER : TT (MIN) TIMING Report ###################" > timing_tt_min.rpt -report_checks -unique -path_delay min -slack_min -0.0 -group_count 100 -corner tt -format full_clock_expanded >> timing_tt_min.rpt -report_checks -group_count 100 -path_delay min -path_group wbm_clk_i -corner tt -format full_clock_expanded >> timing_tt_min.rpt -report_checks -group_count 100 -path_delay min -path_group wbs_clk_i -corner tt -format full_clock_expanded >> timing_tt_min.rpt -report_checks -group_count 100 -path_delay min -path_group cpu_clk -corner tt -format full_clock_expanded >> timing_tt_min.rpt -report_checks -group_count 100 -path_delay min -path_group rtc_clk -corner tt -format full_clock_expanded >> timing_tt_min.rpt -report_checks -group_count 100 -path_delay min -path_group line_clk -corner tt -format full_clock_expanded >> timing_tt_min.rpt -report_checks -path_delay min -corner tt >> timing_tt_min.rpt - - - - -report_checks -path_delay min_max - -#exit