From e386ca57ca80abe46079877dc3d12ee04da06987 Mon Sep 17 00:00:00 2001 From: Daniel Newbrook <dwn1c21@soton.ac.uk> Date: Fri, 12 Jan 2024 12:21:02 +0000 Subject: [PATCH] Add DFT option to backend --- ASIC/44pin/Cadence/cpf/nanosoc_imp.cpf | 2 +- ASIC/44pin/Cadence/scripts/design_import.tcl | 9 ++- .../Cadence/scripts/design_import_noDFT.tcl | 46 ++++++++++++ ASIC/44pin/Cadence/scripts/genus.tcl | 75 +++++++++++-------- ASIC/44pin/Cadence/scripts/genus_nodft.tcl | 69 +++++++++++++++++ ASIC/44pin/Cadence/scripts/nanosoc.mmmc | 9 ++- ASIC/44pin/Cadence/scripts/place_macros.tcl | 30 ++++---- ASIC/44pin/Cadence/scripts/pnr_flow.tcl | 34 +++++++-- ASIC/44pin/Cadence/scripts/power_plan.tcl | 8 +- ASIC/constraints.sdc | 17 +++-- .../tsmc65lp/nanosoc_chip_pads_44pin.v | 8 +- makefile | 4 +- 12 files changed, 231 insertions(+), 80 deletions(-) create mode 100644 ASIC/44pin/Cadence/scripts/design_import_noDFT.tcl create mode 100644 ASIC/44pin/Cadence/scripts/genus_nodft.tcl diff --git a/ASIC/44pin/Cadence/cpf/nanosoc_imp.cpf b/ASIC/44pin/Cadence/cpf/nanosoc_imp.cpf index e0869e5..7eb1881 100644 --- a/ASIC/44pin/Cadence/cpf/nanosoc_imp.cpf +++ b/ASIC/44pin/Cadence/cpf/nanosoc_imp.cpf @@ -2,7 +2,7 @@ set_cpf_version 1.1 set_design nanosoc_chip_pads create_power_domain -name TOP -default -create_power_domain -name ACCEL -instances u_nanosoc_chip_u_system_u_ss_expansion_u_region_exp_u_ss_accelerator +create_power_domain -name ACCEL -instances u_nanosoc_chip_u_system/u_ss_expansion_u_region_exp_u_ss_accelerator create_nominal_condition -name nom -voltage 1.08 diff --git a/ASIC/44pin/Cadence/scripts/design_import.tcl b/ASIC/44pin/Cadence/scripts/design_import.tcl index 894dd92..9bfbe84 100644 --- a/ASIC/44pin/Cadence/scripts/design_import.tcl +++ b/ASIC/44pin/Cadence/scripts/design_import.tcl @@ -22,16 +22,17 @@ set IO_PAD_DRIVER_LEF /home/dwn1c21/SoC-Labs/phys_ip/tsmc/cln65lp/Backend/lef/tp # !! THESE SHOULD BE CORRECT FOR ANY ENVIRONMENT AS THEY ARE GENERATED BY MAKEFILE set RF_LEF $::env(SOCLABS_PROJECT_DIR)/memories/rf_16k/rf_16k.lef +set RF_08K_LEF $::env(SOCLABS_PROJECT_DIR)/memories/rf_08k/rf_08k.lef set ROM_LEF $::env(SOCLABS_PROJECT_DIR)/memories/bootrom/rom_via.lef ### Reading LEFs -read_physical -lef [list ${TECH_LEF} ${BASE_LEF} ${IO_PAD_LEF} ${IO_PAD_DRIVER_LEF} ${RF_LEF} ${ROM_LEF}] +read_physical -lef [list ${TECH_LEF} ${BASE_LEF} ${IO_PAD_LEF} ${IO_PAD_DRIVER_LEF} ${RF_LEF} ${RF_08K_LEF} ${ROM_LEF}] ### Reading Netlist read_netlist $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist/nanosoc_chip_pads_44pin.v ### Read DEF scan chain -#read_def $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist/nanosoc_chip_pads_44pin.def +read_def $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist/nanosoc_chip_pads_44pin.def ### Initializing the Design init_design @@ -39,9 +40,9 @@ init_design ### Adjusting the GUI gui_fit -ungroup u_nanosoc_chip_u_system +#ungroup u_nanosoc_chip_u_system -create_floorplan -core_margins_by die -flip s -site sc12_cln65lp -die_size 1000.0 1500.0 150.0 150.0 150.0 150.0 +create_floorplan -core_margins_by die -flip s -site sc12_cln65lp -die_size 1000.0 1500.0 140.0 140.0 140.0 140.0 read_power_intent -cpf ../cpf/nanosoc_imp.cpf diff --git a/ASIC/44pin/Cadence/scripts/design_import_noDFT.tcl b/ASIC/44pin/Cadence/scripts/design_import_noDFT.tcl new file mode 100644 index 0000000..2aaa9d6 --- /dev/null +++ b/ASIC/44pin/Cadence/scripts/design_import_noDFT.tcl @@ -0,0 +1,46 @@ +######################################### +# File : Design Import Logic +# Date : 22nd May 2022 +# Author : Srimanth Tenneti +# Description : MMMC + Design Import +######################################### + +### Settting PG Nets +set_db init_power_nets {VDD VDDIO VDDACC} +set_db init_ground_nets {VSS VSSIO} + +### Processing MMMC +read_mmmc nanosoc.mmmc + +# Set library paths +# !! EDIT THIS TO YOUR PATHS IN YOUR ENVIRONMENT +set TECH_LEF $::env(PHYS_IP)/arm/tsmc/cln65lp/arm_tech/r2p0/lef/1p9m_6x2z/sc12_tech.lef +set BASE_LEF $::env(PHYS_IP)/arm/tsmc/cln65lp/sc12_base_rvt/r0p0/lef/sc12_cln65lp_base_rvt.lef +set IO_PAD_LEF /home/dwn1c21/SoC-Labs/phys_ip/tsmc/cln65lp/Backend/lef/tpbn65v_9lm.lef +set IO_PAD_DRIVER_LEF /home/dwn1c21/SoC-Labs/phys_ip/tsmc/cln65lp/Backend/lef/tpdn65lpnv2od3_9lm.lef + + +# !! THESE SHOULD BE CORRECT FOR ANY ENVIRONMENT AS THEY ARE GENERATED BY MAKEFILE +set RF_LEF $::env(SOCLABS_PROJECT_DIR)/memories/rf_16k/rf_16k.lef +set RF_08K_LEF $::env(SOCLABS_PROJECT_DIR)/memories/rf_08k/rf_08k.lef +set ROM_LEF $::env(SOCLABS_PROJECT_DIR)/memories/bootrom/rom_via.lef + +### Reading LEFs +read_physical -lef [list ${TECH_LEF} ${BASE_LEF} ${IO_PAD_LEF} ${IO_PAD_DRIVER_LEF} ${RF_LEF} ${RF_08K_LEF} ${ROM_LEF}] + +### Reading Netlist +read_netlist $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist_noDFT/nanosoc_chip_pads_44pin.v + +### Initializing the Design +init_design + +### Adjusting the GUI +gui_fit + +#ungroup u_nanosoc_chip_u_system + +create_floorplan -core_margins_by die -flip s -site sc12_cln65lp -die_size 1000.0 1500.0 140.0 140.0 140.0 140.0 + +read_power_intent -cpf ../cpf/nanosoc_imp.cpf + + diff --git a/ASIC/44pin/Cadence/scripts/genus.tcl b/ASIC/44pin/Cadence/scripts/genus.tcl index 93d43c7..35cf920 100644 --- a/ASIC/44pin/Cadence/scripts/genus.tcl +++ b/ASIC/44pin/Cadence/scripts/genus.tcl @@ -13,52 +13,66 @@ #----------------------------------------------------------------------------- ## -- Setup libraries -- ## -set_db init_lib_search_path "/home/dwn1c21/SoC-Labs/phys_ip/tsmc/cln65lp/Front_End/timing_power_noise/NLDM/tpdn65lpnv2od3_200a/ $::env(PHYS_IP)/arm/tsmc/cln65lp/sc12_base_rvt/r0p0/lib/ $::env(SOCLABS_PROJECT_DIR)/memories/rf_16k/ $::env(SOCLABS_PROJECT_DIR)/memories/bootrom/" +set_db init_lib_search_path "/home/dwn1c21/SoC-Labs/phys_ip/tsmc/cln65lp/Front_End/timing_power_noise/NLDM/tpdn65lpnv2od3_200a/ $::env(PHYS_IP)/arm/tsmc/cln65lp/sc12_base_rvt/r0p0/lib/ $::env(SOCLABS_PROJECT_DIR)/memories/rf_16k/ $::env(SOCLABS_PROJECT_DIR)/memories/rf_08k/ $::env(SOCLABS_PROJECT_DIR)/memories/bootrom/" set BASE_LIB sc12_cln65lp_base_rvt_ss_typical_max_1p08v_125c.lib set RF_LIB rf_16k_ss_1p08v_1p08v_125c.lib +set RF_08K rf_08k_ss_1p08v_1p08v_125c.lib set ROM_LIB rom_via_ss_1p08v_1p08v_125c.lib set IO_PAD_DRIVER tpdn65lpnv2od3bc.lib create_library_domain domain1 -set_db [get_db library_domains domain1] .library "$BASE_LIB $RF_LIB $ROM_LIB $IO_PAD_DRIVER" +set_db [get_db library_domains domain1] .library "$BASE_LIB $RF_LIB $RF_08K $ROM_LIB $IO_PAD_DRIVER" +# set_dont_touch SDFF* +check_library > syn_lib_check.log ## -- Load power intent for top and accelerator power domains -- ## read_power_intent -cpf -module nanosoc_chip_pads ../cpf/nanosoc.cpf ## -- Uncomment if you want to preserve hierarchy -- ## #set_db auto_ungroup none - + ## -- Read in RTL and elaborate top level source $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/flist/genus_flist.tcl read_hdl -define POWER_PINS $env(SOCLABS_NANOSOC_TECH_DIR)/ASIC/nanosoc_chip_pads/tsmc65lp/nanosoc_chip_pads_44pin.v elaborate nanosoc_chip_pads +# Preserve hierarchy for M0. +# set_db hinst:nanosoc_chip_pads/u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_slcorem0_integration/u_cortexm0 .ungroup_ok false + ## -- Apply power intent and check library and CPF -- ## apply_power_intent -check_library > syn_lib_check.log -check_cpf > syn_cpf_check.log +check_cpf -license lpgxl > syn_cpf_check.log commit_power_intent check_power_structure -license lpgxl > syn_pow_check.log ## -- Read constraints -- ## read_sdc $::env(SOCLABS_NANOSOC_TECH_DIR)/ASIC/constraints.sdc -#set_db dft_scan_style muxed_scan -#set_db design:nanosoc_chip_pads .dft_min_number_of_scan_chains 1 - -#read_dft_abstract_model nanosoc_dft_abstract_model -#define_test_signal -name TEST -active high -function test_mode -index 0 TEST -#define_test_signal -name SWDCK -active high -function scan_clock -index 0 SWDCK -#define_test_signal -name NRST -active low -function async_set_reset -index 0 NRST -#define_test_signal -name SWDIO -active high -function shift_enable -default -index 0 SWDIO -#define_test_signal -name CLK -active high -function test_clock -index 0 CLK - -#define_scan_chain -name chain_ACCEL -sdi DFT_SDI_1 -sdo DFT_SDO_1 -shared_output -#define_scan_chain -name chain_TOP -sdi DFT_SDI_2 -sdo DFT_SDO_2 -shared_output - - -#check_dft_rules -#fix_dft_violations -test_control TEST -async_reset -add_observe_scan -scan_clock_pin SWDCK +set_db dft_scan_style muxed_scan +set_db design:nanosoc_chip_pads .dft_min_number_of_scan_chains 4 +set_db hinst:nanosoc_chip_pads/u_nanosoc_chip_cfg .dft_dont_scan true +define_test_signal -name TEST -active high -shared_input -hookup_pin u_nanosoc_chip/test_i -function test_mode -index 0 TEST +define_test_signal -name CLK -active high -hookup_pin u_nanosoc_chip/clk_i -function test_clock -index 0 CLK +define_test_signal -name NRST -active low -hookup_pin u_nanosoc_chip/nrst_i -function async_set_reset -index 0 NRST +define_test_signal -name SWDCK -active high -shared_input -hookup_pin u_nanosoc_chip_cfg/soc_scan_enable -function shift_enable -default -index 0 SWDCK +define_scan_chain -name chain_ACCEL -sdi P0[0] -hookup_pin_sdi u_nanosoc_chip_cfg/soc_scan_in[0] -sdo P1[0] -hookup_pin_sdo u_nanosoc_chip_cfg/soc_scan_out[0] -shared_output -shared_input +define_scan_chain -name chain_TOP_1 -sdi P0[1] -hookup_pin_sdi u_nanosoc_chip_cfg/soc_scan_in[1] -sdo P1[1] -hookup_pin_sdo u_nanosoc_chip_cfg/soc_scan_out[1] -shared_output -shared_input +define_scan_chain -name chain_TOP_2 -sdi P0[2] -hookup_pin_sdi u_nanosoc_chip_cfg/soc_scan_in[2] -sdo P1[2] -hookup_pin_sdo u_nanosoc_chip_cfg/soc_scan_out[2] -shared_output -shared_input +define_scan_chain -name chain_TOP_3 -sdi P0[3] -hookup_pin_sdi u_nanosoc_chip_cfg/soc_scan_in[3] -sdo P1[3] -hookup_pin_sdo u_nanosoc_chip_cfg/soc_scan_out[3] -shared_output -shared_input + +fix_pad_cfg -mode input -test_control TEST P0[0] +fix_pad_cfg -mode input -test_control TEST P0[1] +fix_pad_cfg -mode input -test_control TEST P0[2] +fix_pad_cfg -mode input -test_control TEST P0[3] + +fix_pad_cfg -mode output -test_control TEST P1[0] +fix_pad_cfg -mode output -test_control TEST P1[1] +fix_pad_cfg -mode output -test_control TEST P1[2] +fix_pad_cfg -mode output -test_control TEST P1[3] + +check_dft_rules +fix_dft_violations -test_control TEST -async_reset -add_observe_scan -scan_clock_pin CLK +fix_dft_violations -test_control TEST -async_set set_db syn_generic_effort high set_db syn_map_effort high @@ -66,10 +80,8 @@ set_db syn_map_effort high syn_generic syn_map -#convert_to_scan - -#connect_scan_chains -chains chain_ACCEL -power_domain ACCEL -incremental -#connect_scan_chains -chains chain_TOP -power_domain TOP -incremental +convert_to_scan +connect_scan_chains syn_opt @@ -84,12 +96,11 @@ write_hdl -pg > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist/nanosoc_chi write_sdf -timescale ns > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist/nanosoc_chip_pads_44pin.sdf write_do_lec -revised_design $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist/nanosoc_chip_pads_44pin.v -no_lp -top nanosoc_chip_pads -logfile $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/ > lec.dofile -#report_scan_chains > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/dft/nanosoc_scan_chains_44pin.rep -#report_scan_setup > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/dft/nanosoc_scan_setup_44pin.rep -#report_scan_registers > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/dft/nanosoc_scan_registers_44pin.rep -#write_dft_abstract_model > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/dft/nanosoc_dft_abstract_model_44pin - -#write_dft_atpg_other_vendor -mentor > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/dft/nanosoc_atpg_44pin -#write_scandef > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist/nanosoc_chip_pads_44pin.def +report_scan_chains > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/dft/nanosoc_scan_chains_44pin.rep +report_scan_setup > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/dft/nanosoc_scan_setup_44pin.rep +report_scan_registers > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/dft/nanosoc_scan_registers_44pin.rep +write_dft_abstract_model > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/dft/nanosoc_dft_abstract_model_44pin +write_dft_atpg_other_vendor -mentor > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/dft/nanosoc_atpg_44pin +write_scandef > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist/nanosoc_chip_pads_44pin.def diff --git a/ASIC/44pin/Cadence/scripts/genus_nodft.tcl b/ASIC/44pin/Cadence/scripts/genus_nodft.tcl new file mode 100644 index 0000000..a9bbe21 --- /dev/null +++ b/ASIC/44pin/Cadence/scripts/genus_nodft.tcl @@ -0,0 +1,69 @@ +#----------------------------------------------------------------------------- +# NanoSoC gate synthesis script for Cadence Genus +# A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +# +# run: genus -f genus.tcl +# Contributors +# +# Daniel Newbrook (d.newbrook@soton.ac.uk) +# David Flynn (d.w.flynn@soton.ac.uk) +# Srimanth Tenneti +# +# Copyright (C) 2023, SoC Labs (www.soclabs.org) +#----------------------------------------------------------------------------- + +## -- Setup libraries -- ## +set_db init_lib_search_path "/home/dwn1c21/SoC-Labs/phys_ip/tsmc/cln65lp/Front_End/timing_power_noise/NLDM/tpdn65lpnv2od3_200a/ $::env(PHYS_IP)/arm/tsmc/cln65lp/sc12_base_rvt/r0p0/lib/ $::env(SOCLABS_PROJECT_DIR)/memories/rf_16k/ $::env(SOCLABS_PROJECT_DIR)/memories/rf_08k/ $::env(SOCLABS_PROJECT_DIR)/memories/bootrom/" +set BASE_LIB sc12_cln65lp_base_rvt_ss_typical_max_1p08v_125c.lib +set RF_LIB rf_16k_ss_1p08v_1p08v_125c.lib +set RF_08K rf_08k_ss_1p08v_1p08v_125c.lib +set ROM_LIB rom_via_ss_1p08v_1p08v_125c.lib +set IO_PAD_DRIVER tpdn65lpnv2od3bc.lib +create_library_domain domain1 +set_db [get_db library_domains domain1] .library "$BASE_LIB $RF_LIB $RF_08K $ROM_LIB $IO_PAD_DRIVER" +# set_dont_touch SDFF* +check_library > syn_lib_check.log + +## -- Load power intent for top and accelerator power domains -- ## +read_power_intent -cpf -module nanosoc_chip_pads ../cpf/nanosoc.cpf + +## -- Uncomment if you want to preserve hierarchy -- ## +#set_db auto_ungroup none + +## -- Read in RTL and elaborate top level +source $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/flist/genus_flist.tcl +read_hdl -define POWER_PINS $env(SOCLABS_NANOSOC_TECH_DIR)/ASIC/nanosoc_chip_pads/tsmc65lp/nanosoc_chip_pads_44pin.v +elaborate nanosoc_chip_pads + +# Preserve hierarchy for M0. +# set_db hinst:nanosoc_chip_pads/u_nanosoc_chip/u_system/u_ss_cpu/u_cpu_0/u_slcorem0_integration/u_cortexm0 .ungroup_ok false + +## -- Apply power intent and check library and CPF -- ## +apply_power_intent +check_cpf -license lpgxl > syn_cpf_check.log +commit_power_intent +check_power_structure -license lpgxl > syn_pow_check.log + +## -- Read constraints -- ## +read_sdc $::env(SOCLABS_NANOSOC_TECH_DIR)/ASIC/constraints.sdc + + +set_db syn_generic_effort high +set_db syn_map_effort high + +syn_generic +syn_map + +syn_opt + +report_area > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/syn_noDFT_nanosoc_area_44pin.rep +report_timing > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/syn_noDFT_nanosoc_timing_44pin.rep +report_gates > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/syn_noDFT_nanosoc_gates_44pin.rep +report_power > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/syn_noDFT_nanosoc_power_44pin.rep + +write_hdl > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist_noDFT/nanosoc_chip_pads_44pin.v +write_hdl -pg > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist_noDFT/nanosoc_chip_pads_44pin.vp + +write_sdf -timescale ns > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist_noDFT/nanosoc_chip_pads_44pin.sdf + +write_do_lec -revised_design $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist_noDFT/nanosoc_chip_pads_44pin.v -no_lp -top nanosoc_chip_pads -logfile $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/ > lec.dofile diff --git a/ASIC/44pin/Cadence/scripts/nanosoc.mmmc b/ASIC/44pin/Cadence/scripts/nanosoc.mmmc index b8c9c0d..3dd1598 100644 --- a/ASIC/44pin/Cadence/scripts/nanosoc.mmmc +++ b/ASIC/44pin/Cadence/scripts/nanosoc.mmmc @@ -2,19 +2,20 @@ set phys_lib /research/AAA/phys_ip_library set base_path ${phys_lib}/arm/tsmc/cln65lp/sc12_base_rvt/r0p0 set tech_path ${phys_lib}/arm/tsmc/cln65lp/arm_tech/r2p0 -set ram_path /home/dwn1c21/SoC-Labs/accelerator-project/memories/rf_16k/ -set rom_path /home/dwn1c21/SoC-Labs/accelerator-project/memories/bootrom/ +set ram_path /home/dwn1c21/SoC-Labs/TAPEOUT_feb2024/Fanis/fast-knn-accelerator-project/memories/rf_16k/ +set ram_08k_path /home/dwn1c21/SoC-Labs/TAPEOUT_feb2024/Fanis/fast-knn-accelerator-project/memories/rf_08k/ +set rom_path /home/dwn1c21/SoC-Labs/TAPEOUT_feb2024/Fanis/fast-knn-accelerator-project/memories/bootrom/ set IO_driver_path /home/dwn1c21/SoC-Labs/phys_ip/tsmc/cln65lp/Front_End/timing_power_noise/NLDM/tpdn65lpnv2od3_200a/ create_library_set -name default_libset_max\ -timing\ - [list ${base_path}/lib/sc12_cln65lp_base_rvt_ss_typical_max_1p08v_125c.lib ${ram_path}/rf_16k_ss_1p08v_1p08v_125c.lib ${rom_path}/rom_via_ss_1p08v_1p08v_125c.lib ${IO_driver_path}/tpdn65lpnv2od3wc.lib] \ + [list ${base_path}/lib/sc12_cln65lp_base_rvt_ss_typical_max_1p08v_125c.lib ${ram_path}/rf_16k_ss_1p08v_1p08v_125c.lib ${ram_08k_path}/rf_08k_ss_1p08v_1p08v_125c.lib ${rom_path}/rom_via_ss_1p08v_1p08v_125c.lib ${IO_driver_path}/tpdn65lpnv2od3wc.lib] \ -si\ [list ${base_path}/celtic/sc12_cln65lp_base_rvt_ss_typical_max_1p08v_125c.cdB] create_library_set -name default_libset_min\ -timing\ - [list ${base_path}/lib/sc12_cln65lp_base_rvt_ff_typical_min_1p32v_m40c.lib ${ram_path}/rf_16k_ff_1p32v_1p32v_m40c.lib ${rom_path}/rom_via_ff_1p32v_1p32v_m40c.lib ${IO_driver_path}/tpdn65lpnv2od3bc.lib] \ + [list ${base_path}/lib/sc12_cln65lp_base_rvt_ff_typical_min_1p32v_m40c.lib ${ram_path}/rf_16k_ff_1p32v_1p32v_m40c.lib ${ram_08k_path}/rf_08k_ff_1p32v_1p32v_m40c.lib ${rom_path}/rom_via_ff_1p32v_1p32v_m40c.lib ${IO_driver_path}/tpdn65lpnv2od3bc.lib] \ -si\ [list ${base_path}/celtic/sc12_cln65lp_base_rvt_ff_typical_min_1p32v_m40c.cdB] diff --git a/ASIC/44pin/Cadence/scripts/place_macros.tcl b/ASIC/44pin/Cadence/scripts/place_macros.tcl index c24cda6..54a9f80 100644 --- a/ASIC/44pin/Cadence/scripts/place_macros.tcl +++ b/ASIC/44pin/Cadence/scripts/place_macros.tcl @@ -11,21 +11,21 @@ # relative floorplan gui_set_draw_view fplan delete_relative_floorplan -all -create_relative_floorplan -ref_type core_boundary -horizontal_edge_separate {1 -4.8 1} -vertical_edge_separate {2 -2.4 2} -place u_nanosoc_chip_u_system_u_ss_expansion_u_region_expram_l_u_expram_l_u_sram_genblk1.u_rf_sp_hdf -create_relative_floorplan -ref_type object -horizontal_edge_separate {3 -12 1} -vertical_edge_separate {3 0 3} -place u_nanosoc_chip_u_system_u_ss_expansion_u_region_expram_h_u_expram_h_u_sram_genblk1.u_rf_sp_hdf -ref u_nanosoc_chip_u_system_u_ss_expansion_u_region_expram_l_u_expram_l_u_sram_genblk1.u_rf_sp_hdf -create_relative_floorplan -ref_type object -horizontal_edge_separate {3 -12 1} -vertical_edge_separate {3 0 3} -place u_nanosoc_chip_u_system_u_ss_cpu_u_region_imem_0_u_imem_0_u_sram_genblk1.u_rf_sp_hdf -ref u_nanosoc_chip_u_system_u_ss_expansion_u_region_expram_h_u_expram_h_u_sram_genblk1.u_rf_sp_hdf -create_relative_floorplan -ref_type object -orient R0 -horizontal_edge_separate {3 -12 1} -vertical_edge_separate {3 0 3} -place u_nanosoc_chip_u_system_u_ss_cpu_u_region_dmem_0_u_dmem_0_u_sram_genblk1.u_rf_sp_hdf -ref u_nanosoc_chip_u_system_u_ss_cpu_u_region_imem_0_u_imem_0_u_sram_genblk1.u_rf_sp_hdf -create_relative_floorplan -ref_type core_boundary -orient R0 -horizontal_edge_separate {1 -4.8 1} -vertical_edge_separate {0 2.4 0} -place u_nanosoc_chip_u_system_u_ss_cpu_u_region_bootrom_0_u_bootrom_cpu_0_u_bootrom_u_sl_rom +create_relative_floorplan -ref_type core_boundary -horizontal_edge_separate {1 -4.8 1} -vertical_edge_separate {2 -2.4 2} -place u_nanosoc_chip_u_system/u_ss_expansion_u_region_expram_l_u_expram_l_u_sram_genblk1.u_rf_sp_hdf +create_relative_floorplan -ref_type object -horizontal_edge_separate {3 -12 1} -vertical_edge_separate {3 0 3} -place u_nanosoc_chip_u_system/u_ss_expansion_u_region_expram_h_u_expram_h_u_sram_genblk1.u_rf_sp_hdf -ref u_nanosoc_chip_u_system/u_ss_expansion_u_region_expram_l_u_expram_l_u_sram_genblk1.u_rf_sp_hdf +create_relative_floorplan -ref_type object -horizontal_edge_separate {3 -12 1} -vertical_edge_separate {3 0 3} -place u_nanosoc_chip_u_system/u_ss_cpu_u_region_imem_0_u_imem_0_u_sram_genblk1.u_rf_sp_hdf -ref u_nanosoc_chip_u_system/u_ss_expansion_u_region_expram_h_u_expram_h_u_sram_genblk1.u_rf_sp_hdf +create_relative_floorplan -ref_type object -orient R0 -horizontal_edge_separate {3 -12 1} -vertical_edge_separate {3 0 3} -place u_nanosoc_chip_u_system/u_ss_cpu_u_region_dmem_0_u_dmem_0_u_sram_genblk1.u_rf_sp_hdf -ref u_nanosoc_chip_u_system/u_ss_cpu_u_region_imem_0_u_imem_0_u_sram_genblk1.u_rf_sp_hdf +create_relative_floorplan -ref_type core_boundary -orient R0 -horizontal_edge_separate {1 -4.8 1} -vertical_edge_separate {0 2.4 0} -place u_nanosoc_chip_u_system/u_ss_cpu_u_region_bootrom_0_u_bootrom_cpu_0_u_bootrom_u_sl_rom -move_obj u_nanosoc_chip_u_system_u_ss_expansion_u_region_exp_u_ss_accelerator -point {500 500} -update_floorplan_obj -obj u_nanosoc_chip_u_system_u_ss_expansion_u_region_exp_u_ss_accelerator -rects {150 150 500 351.6} -add_fences -hinst u_nanosoc_chip_u_system_u_ss_expansion_u_region_exp_u_ss_accelerator -min_gap 2.4 -create_partition -hinst u_nanosoc_chip_u_system_u_ss_expansion_u_region_exp_u_ss_accelerator -core_spacing 2.0 2.0 2.0 2.0 -rail_width 0.0 -min_pitch_left 2 -min_pitch_right 2 -min_pitch_top 2 -min_pitch_bottom 2 -reserved_layer { 1 2 3 4 5 6 7 8 9 10} -pin_layer_top { 2 4 6 8 10} -pin_layer_left { 3 5 7 9} -pin_layer_bottom { 2 4 6 8 10} -pin_layer_right { 3 5 7 9} -place_halo 2 2 2 2 -route_halo 2.0 -route_halo_top_layer 5 -route_halo_bottom_layer 1 +move_obj u_nanosoc_chip_u_system/u_ss_expansion_u_region_exp_u_ss_accelerator -point {500 500} +update_floorplan_obj -obj u_nanosoc_chip_u_system/u_ss_expansion_u_region_exp_u_ss_accelerator -rects {137.6 137.6 862.4 420} +add_fences -hinst u_nanosoc_chip_u_system/u_ss_expansion_u_region_exp_u_ss_accelerator -min_gap 2.4 +create_partition -hinst u_nanosoc_chip_u_system/u_ss_expansion_u_region_exp_u_ss_accelerator -core_spacing 2.0 2.0 2.0 2.0 -rail_width 0.0 -min_pitch_left 0 -min_pitch_right 0 -min_pitch_top 2 -min_pitch_bottom 0 -reserved_layer { 1 2 3 4 5 6 7 8 9 10} -pin_layer_top { 2 4 6 8 10} -pin_layer_left { 3 5 7 9} -pin_layer_bottom { 2 4 6 8 10} -pin_layer_right { 3 5 7 9} -place_halo 2 0 0 0 -route_halo 0.0 -route_halo_top_layer 5 -route_halo_bottom_layer 1 -create_place_halo -halo_deltas {4.8 4.8 2.4 4.8} -insts u_nanosoc_chip_u_system_u_ss_expansion_u_region_expram_l_u_expram_l_u_sram_genblk1.u_rf_sp_hdf -create_place_halo -halo_deltas {4.8 4.8 2.4 4.8} -insts u_nanosoc_chip_u_system_u_ss_expansion_u_region_expram_h_u_expram_h_u_sram_genblk1.u_rf_sp_hdf -create_place_halo -halo_deltas {4.8 4.8 2.4 4.8} -insts u_nanosoc_chip_u_system_u_ss_cpu_u_region_imem_0_u_imem_0_u_sram_genblk1.u_rf_sp_hdf -create_place_halo -halo_deltas {4.8 4.8 2.4 4.8} -insts u_nanosoc_chip_u_system_u_ss_cpu_u_region_dmem_0_u_dmem_0_u_sram_genblk1.u_rf_sp_hdf -create_place_halo -halo_deltas {4.8 4.8 2.4 4.8} -insts u_nanosoc_chip_u_system_u_ss_cpu_u_region_bootrom_0_u_bootrom_cpu_0_u_bootrom_u_sl_rom +create_place_halo -halo_deltas {4.8 4.8 2.4 4.8} -insts u_nanosoc_chip_u_system/u_ss_expansion_u_region_expram_l_u_expram_l_u_sram_genblk1.u_rf_sp_hdf +create_place_halo -halo_deltas {4.8 4.8 2.4 4.8} -insts u_nanosoc_chip_u_system/u_ss_expansion_u_region_expram_h_u_expram_h_u_sram_genblk1.u_rf_sp_hdf +create_place_halo -halo_deltas {4.8 4.8 2.4 4.8} -insts u_nanosoc_chip_u_system/u_ss_cpu_u_region_imem_0_u_imem_0_u_sram_genblk1.u_rf_sp_hdf +create_place_halo -halo_deltas {4.8 4.8 2.4 4.8} -insts u_nanosoc_chip_u_system/u_ss_cpu_u_region_dmem_0_u_dmem_0_u_sram_genblk1.u_rf_sp_hdf +create_place_halo -halo_deltas {4.8 4.8 2.4 4.8} -insts u_nanosoc_chip_u_system/u_ss_cpu_u_region_bootrom_0_u_bootrom_cpu_0_u_bootrom_u_sl_rom -add_fences -hinst u_nanosoc_chip_u_system_u_ss_expansion_u_region_exp_u_ss_accelerator -min_gap 2.4 \ No newline at end of file +add_fences -hinst u_nanosoc_chip_u_system/u_ss_expansion_u_region_exp_u_ss_accelerator -min_gap 2.4 diff --git a/ASIC/44pin/Cadence/scripts/pnr_flow.tcl b/ASIC/44pin/Cadence/scripts/pnr_flow.tcl index 35ff13f..b97b31b 100644 --- a/ASIC/44pin/Cadence/scripts/pnr_flow.tcl +++ b/ASIC/44pin/Cadence/scripts/pnr_flow.tcl @@ -1,9 +1,21 @@ -###################################### -# Script : Place and Route Flow -# Date : 25th May 2023 -# Author : Srimanth Tenneti -# Description : Innovus PnR Flow -###################################### +#----------------------------------------------------------------------------- +# NanoSoC Place and route script for Cadence Innovus +# A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +# +# run: innovus -stylus -f pnr_flow.tcl +# Contributors +# +# Daniel Newbrook (d.newbrook@soton.ac.uk) +# David Flynn (d.w.flynn@soton.ac.uk) +# Srimanth Tenneti +# +# Copyright (C) 2023, SoC Labs (www.soclabs.org) +#----------------------------------------------------------------------------- + +set SC_GDS2 $::env(PHYS_IP)/arm/tsmc/cln65lp/sc12_base_rvt/r0p0/gds2/sc12_cln65lp_base_rvt.gds2 +set RF_16K_GDS2 $::env(SOCLABS_PROJECT_DIR)/memories/rf_16k/rf_16k.gds2 +set ROM_VIA_GDS2 $::env(SOCLABS_PROJECT_DIR)/memories/bootrom/rom_via.gds2 + puts "Starting PnR Flow ..." @@ -26,16 +38,18 @@ source power_plan.tcl source power_route.tcl report_timing > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/1pre_place_nanosoc_imp_timing.rep +uniquify nanosoc_chip_pads -verbose ### Placement source place.tcl report_timing > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/2post_place_nanosoc_imp_timing.rep +reorder_scan -skip_mode skipNone -allow_swapping false -keep_power_domain_ports true -clock_aware false -uniquify nanosoc_chip_pads -verbose ### CTS source clock_tree_synthesis.tcl +reorder_scan -skip_mode skipNone -allow_swapping false -keep_power_domain_ports true -clock_aware true report_timing > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/3post_clock_nanosoc_imp_timing.rep @@ -71,6 +85,10 @@ report_power > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/nanosoc_imp_ gui_show - +write_stream $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/nanosoc.gds \ + -map_file $::env(PHYS_IP)/arm/tsmc/cln65lp/arm_tech/r2p0/lef/1p9m_6x2z/tech.map \ + -lib_name DesignLib \ + -merge [list ${SC_GDS2} ${RF_16K_GDS2} ${ROM_VIA_GDS2}]\ + -output_macros -unit 2000 -mode all diff --git a/ASIC/44pin/Cadence/scripts/power_plan.tcl b/ASIC/44pin/Cadence/scripts/power_plan.tcl index 8e16398..0d81bb3 100644 --- a/ASIC/44pin/Cadence/scripts/power_plan.tcl +++ b/ASIC/44pin/Cadence/scripts/power_plan.tcl @@ -10,7 +10,7 @@ connect_global_net VDD -type pg_pin -pin_base_name VDD -inst_base_name * connect_global_net VDDIO -type pg_pin -pin_base_name VDDIO -inst_base_name * connect_global_net VSS -type pg_pin -pin_base_name VSS -inst_base_name * connect_global_net VSSIO -type pg_pin -pin_base_name VSSIO -inst_base_name * -connect_global_net VDDACC -type pg_pin -pin_base_name VDD -inst_base_name {} -hinst u_nanosoc_chip_u_system_u_ss_expansion_u_region_exp_u_ss_accelerator -override +connect_global_net VDDACC -type pg_pin -pin_base_name VDD -inst_base_name {} -hinst u_nanosoc_chip_u_system/u_ss_expansion_u_region_exp_u_ss_accelerator -override ### Top and Bottom Metal Declartions set_db add_rings_stacked_via_top_layer M8 set_db add_rings_stacked_via_bottom_layer M1 @@ -38,12 +38,12 @@ set_db add_stripes_orthogonal_only true set_db add_stripes_allow_jog { padcore_ring block_ring } set_db add_stripes_skip_via_on_pin { standardcell } set_db add_stripes_skip_via_on_wire_shape { noshape } -add_stripes -nets {VDD VDDACC VSS} -layer M6 -direction vertical -width 1.8 -spacing 0.8 -set_to_set_distance 60 -extend_to all_domains -start_from left -start_offset 50 -stop_offset 0 -switch_layer_over_obs false -max_same_layer_jog_length 2 -pad_core_ring_top_layer_limit AP -pad_core_ring_bottom_layer_limit M1 -block_ring_top_layer_limit AP -block_ring_bottom_layer_limit M1 -use_wire_group 0 -snap_wire_center_to_grid none +add_stripes -nets {VDD VDDACC VSS} -layer M6 -direction vertical -width 1.8 -spacing 0.8 -set_to_set_distance 58 -extend_to all_domains -start_from left -start_offset 39.5 -stop_offset 0 -switch_layer_over_obs false -max_same_layer_jog_length 2 -pad_core_ring_top_layer_limit AP -pad_core_ring_bottom_layer_limit M1 -block_ring_top_layer_limit AP -block_ring_bottom_layer_limit M1 -use_wire_group 0 -snap_wire_center_to_grid none deselect_obj -all # Connect Accelerator region -select_obj u_nanosoc_chip_u_system_u_ss_expansion_u_region_exp_u_ss_accelerator +select_obj u_nanosoc_chip_u_system/u_ss_expansion_u_region_exp_u_ss_accelerator set_db add_stripes_ignore_block_check true set_db add_stripes_break_at none set_db add_stripes_route_over_rows_only false @@ -69,7 +69,7 @@ add_stripes -nets {VDDACC VSS} -layer M9 -direction horizontal -width 1 -spacing deselect_obj -all # connect Macros -select_obj [ list u_nanosoc_chip_u_system_u_ss_cpu_u_region_dmem_0_u_dmem_0_u_sram_genblk1.u_rf_sp_hdf u_nanosoc_chip_u_system_u_ss_cpu_u_region_imem_0_u_imem_0_u_sram_genblk1.u_rf_sp_hdf u_nanosoc_chip_u_system_u_ss_expansion_u_region_expram_h_u_expram_h_u_sram_genblk1.u_rf_sp_hdf u_nanosoc_chip_u_system_u_ss_expansion_u_region_expram_l_u_expram_l_u_sram_genblk1.u_rf_sp_hdf u_nanosoc_chip_u_system_u_ss_cpu_u_region_bootrom_0_u_bootrom_cpu_0_u_bootrom_u_sl_rom] +select_obj [ list u_nanosoc_chip_u_system/u_ss_cpu_u_region_dmem_0_u_dmem_0_u_sram_genblk1.u_rf_sp_hdf u_nanosoc_chip_u_system/u_ss_cpu_u_region_imem_0_u_imem_0_u_sram_genblk1.u_rf_sp_hdf u_nanosoc_chip_u_system/u_ss_expansion_u_region_expram_h_u_expram_h_u_sram_genblk1.u_rf_sp_hdf u_nanosoc_chip_u_system/u_ss_expansion_u_region_expram_l_u_expram_l_u_sram_genblk1.u_rf_sp_hdf u_nanosoc_chip_u_system/u_ss_cpu_u_region_bootrom_0_u_bootrom_cpu_0_u_bootrom_u_sl_rom] set_db add_stripes_ignore_block_check false set_db add_stripes_break_at none set_db add_stripes_route_over_rows_only false diff --git a/ASIC/constraints.sdc b/ASIC/constraints.sdc index 36ed5ab..1784a44 100644 --- a/ASIC/constraints.sdc +++ b/ASIC/constraints.sdc @@ -16,15 +16,15 @@ set SWDCLK "swdclk"; set_units -time ns; set_units -capacitance pF; -set EXTCLK_PERIOD 4; -set SWDCLK_PERIOD 20; +set EXTCLK_PERIOD 4.1666; +set SWDCLK_PERIOD 16.66666; create_clock -name "$EXTCLK" -period "$EXTCLK_PERIOD" -waveform "0 [expr $EXTCLK_PERIOD/2]" [get_ports CLK] create_clock -name "$SWDCLK" -period "$SWDCLK_PERIOD" -waveform "0 [expr $SWDCLK_PERIOD/2]" [get_ports SWDCK] set SKEW 0.800 -set_clock_uncertainty [expr 0.15*$EXTCLK_PERIOD] [get_clocks $EXTCLK] -set_clock_uncertainty [expr 0.15*$SWDCLK_PERIOD] [get_clocks $SWDCLK] +set_clock_uncertainty [expr 0.17*$EXTCLK_PERIOD] [get_clocks $EXTCLK] +set_clock_uncertainty [expr 0.17*$SWDCLK_PERIOD] [get_clocks $SWDCLK] set MINRISE 0.20 set MAXRISE 0.25 @@ -43,9 +43,12 @@ set_clock_transition -fall -min $MINFALL [get_clocks $SWDCLK] ### Multicycle path through pads -set_false_path -from uPAD_SWDIO_IO/* -to uPAD_SWDIO_IO/* -set_false_path -from uPAD_P0_*/* -to uPAD_P0_*/* -set_false_path -from uPAD_P1_*/* -to uPAD_P1_*/* +#set_false_path -from uPAD_SWDIO_IO/* -to uPAD_SWDIO_IO/* +set_false_path -through uPAD_SWDIO_IO +set_false_path -through uPAD_P0_* +set_false_path -through uPAD_P1_* +#set_false_path -from uPAD_P0_*/* -to uPAD_P0_*/* +#set_false_path -from uPAD_P1_*/* -to uPAD_P1_*/* #### DELAY DEFINITION diff --git a/ASIC/nanosoc_chip_pads/tsmc65lp/nanosoc_chip_pads_44pin.v b/ASIC/nanosoc_chip_pads/tsmc65lp/nanosoc_chip_pads_44pin.v index c9acf2d..91e851e 100644 --- a/ASIC/nanosoc_chip_pads/tsmc65lp/nanosoc_chip_pads_44pin.v +++ b/ASIC/nanosoc_chip_pads/tsmc65lp/nanosoc_chip_pads_44pin.v @@ -35,6 +35,8 @@ // Abstract : Top level for example Cortex-M0/Cortex-M0+ microcontroller //----------------------------------------------------------------------------- // +`include "gen_defines.v" + module nanosoc_chip_pads ( inout wire VDDIO, inout wire VSSIO, @@ -189,9 +191,9 @@ nanosoc_chip_cfg #( .bist_enable (soc_bist_enable ), .bist_in (soc_bist_in ), // soc bist control inputs .bist_out (soc_bist_out ), // soc test status outputs - .alt_mode (soc_alt_mode )// ALT MODE = UART - .uart_rxd_i (soc_uart_rxd_i ) // UART RXD - .uart_txd_o (soc_uart_txd_o ) // UART TXD + .alt_mode (soc_alt_mode ),// ALT MODE = UART + .uart_rxd_i (soc_uart_rxd_i ), // UART RXD + .uart_txd_o (soc_uart_txd_o ), // UART TXD .swd_mode (soc_swd_mode ), // SWD mode `endif .clk_i(pad_clk_i), diff --git a/makefile b/makefile index 24d2647..bed9fc9 100644 --- a/makefile +++ b/makefile @@ -77,14 +77,14 @@ else DESIGN_VC ?= $(SOCLABS_PROJECT_DIR)/flist/project/top_ASIC.flist ARM_CORSTONE_101_DIR ?= $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical ARM_CORTEX_M0_DIR ?= $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0/logical - NANOSOC_DEFINES += DMAC_DMA350 POWER_PINS + NANOSOC_DEFINES += DMAC_0_PL230 DMAC_1_PL230 ASIC_TEST_PORTS POWER_PINS else DESIGN_VC ?= $(SOCLABS_PROJECT_DIR)/flist/project/top.flist TBENCH_VC ?= $(SOCLABS_PROJECT_DIR)/flist/project/top.flist ARM_CORSTONE_101_DIR ?= $(ARM_IP_LIBRARY_PATH)/latest/Corstone-101/logical ARM_CORTEX_M0_DIR ?= $(ARM_IP_LIBRARY_PATH)/latest/Cortex-M0/logical TB_TOP ?= nanosoc_tb - NANOSOC_DEFINES += DMAC_0_PL230 + NANOSOC_DEFINES += DMAC_0_PL230 DMAC_1_PL230 endif endif -- GitLab