diff --git a/ASIC/44pin/Cadence/scripts/design_import_noDFT.tcl b/ASIC/44pin/Cadence/scripts/design_import_noDFT.tcl index 2aaa9d6c4161f5890557f0a6eb6506b5f1709fe7..2a7ede16228a71719633916ef9132bd208ed7a2e 100644 --- a/ASIC/44pin/Cadence/scripts/design_import_noDFT.tcl +++ b/ASIC/44pin/Cadence/scripts/design_import_noDFT.tcl @@ -14,10 +14,11 @@ 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 TECH_LEF /home/dwn1c21/SoC-Labs/util/PRTF_EDI_65nm_001_Cad_V24a/PRTF_EDI_N65_9M_6X1Z1U_RDL.24a.tlef +#$::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 +set IO_PAD_LEF /home/dwn1c21/SoC-Labs/phys_ip/TSMC/65/iolib/tpbn65v_200b_FE/TSMCHOME/digital/Back_End/lef/tpbn65v_200b/cup/9m/9M_6X1Z1U/lef/tpbn65v_9lm.lef +set IO_PAD_DRIVER_LEF /home/dwn1c21/SoC-Labs/phys_ip/TSMC/65/CMOS/LP/IO2.5V/iolib/linear/tpdn65lpnv2od3_200a_FE/TSMCHOME/digital/Back_End/lef/tpdn65lpnv2od3_140b/mt_2/9lm/lef/tpdn65lpnv2od3_9lm.lef # !! THESE SHOULD BE CORRECT FOR ANY ENVIRONMENT AS THEY ARE GENERATED BY MAKEFILE diff --git a/ASIC/44pin/Cadence/scripts/filler.tcl b/ASIC/44pin/Cadence/scripts/filler.tcl new file mode 100644 index 0000000000000000000000000000000000000000..3219c08e94bb355842fd1d924415afd53d743ca0 --- /dev/null +++ b/ASIC/44pin/Cadence/scripts/filler.tcl @@ -0,0 +1,13 @@ +add_fillers -base_cells [list FILL128_A12TR WELLANTENNATIEPW2_A12TR FILLTIE8_A12TR FILLTIE64_A12TR FILLTIE4_A12TR FILLTIE32_A12TR FILLTIE2_A12TR FILLTIE16_A12TR FILLTIE128_A12TR FILLCAPTIE8_A12TR] -prefix FILLER -fill_gap -merge true -power_domain ACCEL -check_drc true +add_fillers -base_cells [list FILL128_A12TR WELLANTENNATIEPW2_A12TR FILLTIE8_A12TR FILLTIE64_A12TR FILLTIE4_A12TR FILLTIE32_A12TR FILLTIE2_A12TR FILLTIE16_A12TR FILLTIE128_A12TR FILLCAPTIE8_A12TR] -prefix FILLER -fill_gap -merge true -power_domain TOP -check_drc true + +add_filler_gaps 0.8 -effort high + + + + + +check_filler > check_filler.log +add_fillers -base_cells [list FILL128_A12TR WELLANTENNATIEPW2_A12TR FILLTIE8_A12TR FILLTIE64_A12TR FILLTIE4_A12TR FILLTIE32_A12TR FILLTIE2_A12TR FILLTIE16_A12TR FILLTIE128_A12TR FILLCAPTIE8_A12TR] -prefix FILLER -power_domain ACCEL -check_drc true -fix_drc +add_fillers -base_cells [list FILL128_A12TR WELLANTENNATIEPW2_A12TR FILLTIE8_A12TR FILLTIE64_A12TR FILLTIE4_A12TR FILLTIE32_A12TR FILLTIE2_A12TR FILLTIE16_A12TR FILLTIE128_A12TR FILLCAPTIE8_A12TR] -prefix FILLER -power_domain TOP -check_drc true -fix_drc + diff --git a/ASIC/44pin/Cadence/scripts/genus.tcl b/ASIC/44pin/Cadence/scripts/genus.tcl index 964a72170c96c69b8da789d7777664e42e2a689d..3ff6e5f5bf7ff6555e0a274811bfde7521b96639 100644 --- a/ASIC/44pin/Cadence/scripts/genus.tcl +++ b/ASIC/44pin/Cadence/scripts/genus.tcl @@ -54,7 +54,7 @@ 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_test_signal -name SE -active high -shared_input -hookup_pin u_nanosoc_chip_cfg/soc_scan_enable -function shift_enable -default -index 0 SE 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 diff --git a/ASIC/44pin/Cadence/scripts/genus_nodft.tcl b/ASIC/44pin/Cadence/scripts/genus_nodft.tcl index a9bbe21ddbff7265a44b6a80133440b6c9fa2edf..6f01ef0f2b03c9c3c870b9bd21f1d892e6226070 100644 --- a/ASIC/44pin/Cadence/scripts/genus_nodft.tcl +++ b/ASIC/44pin/Cadence/scripts/genus_nodft.tcl @@ -11,7 +11,7 @@ # # Copyright (C) 2023, SoC Labs (www.soclabs.org) #----------------------------------------------------------------------------- - +set_multi_cpu_usage -local_cpu 8 ## -- 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 @@ -50,6 +50,7 @@ read_sdc $::env(SOCLABS_NANOSOC_TECH_DIR)/ASIC/constraints.sdc set_db syn_generic_effort high set_db syn_map_effort high +set_db syn_opt_effort high syn_generic syn_map diff --git a/ASIC/44pin/Cadence/scripts/nanosoc.mmmc b/ASIC/44pin/Cadence/scripts/nanosoc.mmmc index 8c0b52ae9bf7ece24008817f70eaaca5901c779b..6e6c726c653e51dfd99a8008ce3529ffe63de825 100644 --- a/ASIC/44pin/Cadence/scripts/nanosoc.mmmc +++ b/ASIC/44pin/Cadence/scripts/nanosoc.mmmc @@ -95,4 +95,4 @@ create_analysis_view -name typical_analysis_view_hold -constraint_mode default_c create_analysis_view -name typical_analysis_view -constraint_mode default_constraint_mode -delay_corner typical_delay_corner -set_analysis_view -setup [list default_analysis_view_setup] -hold [list default_analysis_view_hold] +set_analysis_view -setup [list default_analysis_view_setup typical_analysis_view] -hold [list default_analysis_view_hold typical_analysis_view] diff --git a/ASIC/44pin/Cadence/scripts/nanosoc_io_plan.io b/ASIC/44pin/Cadence/scripts/nanosoc_io_plan.io index 290c50d0ae60238a039688af0ddd4267aa8b3f1b..6b018469f2a583db6c958f65d80bf5aec641744b 100644 --- a/ASIC/44pin/Cadence/scripts/nanosoc_io_plan.io +++ b/ASIC/44pin/Cadence/scripts/nanosoc_io_plan.io @@ -37,7 +37,7 @@ (bottom (inst name="uPAD_P0_02" offset=149.29 place_status=placed ) (inst name="uPAD_VDDACC_1" offset=257.86 place_status=placed ) - (inst name="uPAD_VDDIO_1" offset=366.43 place_status=placed ) + (inst name="uPAD_SE_I" offset=366.43 place_status=placed ) (inst name="uPAD_VDD_1" offset=475.00 place_status=placed ) (inst name="uPAD_VSS_1" offset=583.57 place_status=placed ) (inst name="uPAD_P0_01" offset=692.14 place_status=placed ) diff --git a/ASIC/44pin/Cadence/scripts/place.tcl b/ASIC/44pin/Cadence/scripts/place.tcl index 4a947134844890ba92eb796f81c09d0057452b66..0ca4c53dc145de8d6efaa1e272c414b6d66f50c4 100644 --- a/ASIC/44pin/Cadence/scripts/place.tcl +++ b/ASIC/44pin/Cadence/scripts/place.tcl @@ -9,9 +9,9 @@ set_db design_process_node 65 set_db place_global_cong_effort auto set_db place_global_timing_effort high -### Uniform Cell Distribution - +### Uniform Cell Distribution and fill gap set_db place_global_uniform_density true +set_db place_detail_legalization_inst_gap 2 ### Placement Mode Config set_db place_design_floorplan_mode false diff --git a/ASIC/44pin/Cadence/scripts/pnr_flow.tcl b/ASIC/44pin/Cadence/scripts/pnr_flow.tcl index a383dd6b5e08615b61b307aeaa7bc156be696d79..68704dd15cd8e317c2abdc343a2bea3cc6df7356 100644 --- a/ASIC/44pin/Cadence/scripts/pnr_flow.tcl +++ b/ASIC/44pin/Cadence/scripts/pnr_flow.tcl @@ -38,25 +38,33 @@ source power_plan.tcl ### Power Route source power_route.tcl -report_timing > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/1pre_place_nanosoc_imp_timing.rep +report_timing -late > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/1pre_place_nanosoc_imp_timing_late.rep +report_timing -early > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/1pre_place_nanosoc_imp_timing_early.rep + uniquify nanosoc_chip_pads -verbose write_db nanosoc_chip_pads ### 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 +report_timing -late > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/2post_place_nanosoc_imp_timing_late.rep +report_timing -early > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/2post_place_nanosoc_imp_timing_early.rep + +reorder_scan write_db nanosoc_chip_pads ### CTS source clock_tree_synthesis.tcl -reorder_scan -skip_mode skipNone -allow_swapping false -keep_power_domain_ports true -clock_aware true +reorder_scan -clock_aware true -report_timing > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/3post_clock_nanosoc_imp_timing.rep +report_timing -late > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/3post_clock_nanosoc_imp_timing_late.rep +report_timing -early > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/3post_clock_nanosoc_imp_timing_early.rep write_db nanosoc_chip_pads +### Add fillers +source filler.tcl + ### Routing source route.tcl @@ -65,13 +73,6 @@ report_timing > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/4post_route check_antenna write_db nanosoc_chip_pads -### Add filler cells -#eval_legacy { addFiller -cell FILL128_A12TR WELLANTENNATIEPW2_A12TR FILLTIE8_A12TR FILLTIE64_A12TR FILLTIE4_A12TR FILLTIE32_A12TR FILLTIE2_A12TR FILLTIE16_A12TR FILLTIE128_A12TR FILLCAPTIE8_A12TR -prefix FILLER -powerDomain ACCEL -doDRC } -#eval_legacy { addFiller -cell WELLANTENNATIEPW2_A12TR FILLTIE8_A12TR FILLTIE64_A12TR FILLTIE4_A12TR FILLTIE32_A12TR FILLTIE2_A12TR FILLTIE16_A12TR FILLTIE128_A12TR FILLCAPTIE8_A12TR -prefix FILLER -powerDomain TOP -doDRC } -add_fillers -base_cells [list FILL128_A12TR WELLANTENNATIEPW2_A12TR FILLTIE8_A12TR FILLTIE64_A12TR FILLTIE4_A12TR FILLTIE32_A12TR FILLTIE2_A12TR FILLTIE16_A12TR FILLTIE128_A12TR FILLCAPTIE8_A12TR] -prefix FILLER -power_domain ACCEL -check_drc true -add_fillers -base_cells [list FILL128_A12TR WELLANTENNATIEPW2_A12TR FILLTIE8_A12TR FILLTIE64_A12TR FILLTIE4_A12TR FILLTIE32_A12TR FILLTIE2_A12TR FILLTIE16_A12TR FILLTIE128_A12TR FILLCAPTIE8_A12TR] -prefix FILLER -power_domain TOP -check_drc true -add_fillers -base_cells [list FILL128_A12TR WELLANTENNATIEPW2_A12TR FILLTIE8_A12TR FILLTIE64_A12TR FILLTIE4_A12TR FILLTIE32_A12TR FILLTIE2_A12TR FILLTIE16_A12TR FILLTIE128_A12TR FILLCAPTIE8_A12TR] -prefix FILLER -power_domain ACCEL -check_drc true -fix_drc -add_fillers -base_cells [list FILL128_A12TR WELLANTENNATIEPW2_A12TR FILLTIE8_A12TR FILLTIE64_A12TR FILLTIE4_A12TR FILLTIE32_A12TR FILLTIE2_A12TR FILLTIE16_A12TR FILLTIE128_A12TR FILLCAPTIE8_A12TR] -prefix FILLER -power_domain TOP -check_drc true -fix_drc delete_routes -net VDDIO source place_bondpads.tcl @@ -83,11 +84,6 @@ write_stream $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/nanosoc.gds \ -merge [list ${SC_GDS2} ${RF_16K_GDS2} ${RF_08K_GDS2} ${ROM_VIA_GDS2}]\ -output_macros -unit 1000 -mode all - -write_netlist $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist_PnR/nanosoc_chip_pads_44pin.v -write_sdf $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist_PnR/nanosoc_chip_pads_44pin.sdf - - report_area > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/nanosoc_imp_area.rep report_power > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/nanosoc_imp_power.rep @@ -95,4 +91,9 @@ report_timing > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/nanosoc_imp set_analysis_view -setup [list typical_analysis_view] -hold [list typical_analysis_view] report_timing > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/nanosoc_imp_timing_typical.rep +set_analysis_view -setup [list default_analysis_view_setup typical_analysis_view] -hold [list default_analysis_view_hold typical_analysis_view] + +write_netlist $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist_PnR/nanosoc_chip_pads_44pin.v +write_sdf -min_view default_analysis_view_hold -typical_view typical_analysis_view -max_view default_analysis_view_setup $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/netlist_PnR/nanosoc_chip_pads_44pin.sdf + write_db nanosoc_chip_pads diff --git a/ASIC/44pin/Cadence/scripts/power_plan.tcl b/ASIC/44pin/Cadence/scripts/power_plan.tcl index e3d70dcccf3085d52f8bc04388eb1bd8acd10871..52c08f97f0f006bff8dcba4d364eac44525c7e41 100644 --- a/ASIC/44pin/Cadence/scripts/power_plan.tcl +++ b/ASIC/44pin/Cadence/scripts/power_plan.tcl @@ -17,6 +17,7 @@ set_db add_rings_stacked_via_bottom_layer M1 ### Adding Rings add_rings -nets {VDD VDDACC VSS} -type core_rings -follow core -layer {top M9 bottom M9 left M8 right M8} -width {top 3 bottom 3 left 3 right 3} -spacing {top 2 bottom 2 left 2 right 2} -offset {top 2 bottom 2 left 2 right 2} -center 0 -threshold 0 -jog_distance 0 -snap_wire_center_to_grid none +route_special -connect {pad_pin pad_ring} -layer_change_range { M1(1) AP(10) } -block_pin_target nearest_target -pad_pin_port_connect {all_port all_geom} -pad_pin_target nearest_target -allow_jogging 1 -crossover_via_layer_range { M1(1) AP(10) } -nets { VDD VSS VDDACC } -allow_layer_change 1 -pad_pin_width 6 -target_via_layer_range { M1(1) AP(10) } ### Adding Stripes set_db add_stripes_ignore_block_check true diff --git a/ASIC/44pin/Cadence/scripts/tieoff_exclude b/ASIC/44pin/Cadence/scripts/tieoff_exclude index a68416664b978fbcdb8cdf66b3c3bbe90c2d4983..c28aa791fb21bb1267244c41c20eb0743d344a6e 100644 --- a/ASIC/44pin/Cadence/scripts/tieoff_exclude +++ b/ASIC/44pin/Cadence/scripts/tieoff_exclude @@ -1,3 +1,8 @@ +uPAD_SE_I/IE +uPAD_SE_I/PE +uPAD_SE_I/DS +uPAD_SE_I/I +uPAD_SE_I/OEN uPAD_CLK_I/IE uPAD_CLK_I/PE uPAD_CLK_I/DS diff --git a/ASIC/44pin/Mentor/LVS b/ASIC/44pin/Mentor/LVS new file mode 100644 index 0000000000000000000000000000000000000000..4205367719242208a9246248385be11532dd2ea9 --- /dev/null +++ b/ASIC/44pin/Mentor/LVS @@ -0,0 +1,8 @@ +*lvsRulesFile: /home/dwn1c21/SoC-Labs/phys_ip/TSMC/65/CMOS/LP/pdk/Calibre/lvs/calibre.lvs +*lvsRunDir: /home/dwn1c21/SoC-Labs/TAPEOUT_feb2024/Srimanth/hell-fire-nanosoc/imp/ASIC/nanosoc/./LVS +*lvsLayoutPaths: /home/dwn1c21/SoC-Labs/TAPEOUT_feb2024/Srimanth/hell-fire-nanosoc/imp/ASIC/nanosoc/nanosoc_srimanth_17_02_24.gds +*lvsLayoutPrimary: nanosoc_chip_pads +*lvsSourcePath: /home/dwn1c21/SoC-Labs/TAPEOUT_feb2024/Srimanth/hell-fire-nanosoc/imp/ASIC/nanosoc/netlist/nanosoc_chip_pads_44pin.vp /research/AAA/phys_ip_library/arm/tsmc/cln65lp/sc12_base_lvt/r0p0/verilog/sc12_cln65lp_base_lvt.v +*lvsSourceSystem: VERILOG +*lvsSourcePrimary: nanosoc_chip_pads +*cmnV2LVS_LastTranslation: 1708338090 diff --git a/ASIC/constraints.sdc b/ASIC/constraints.sdc index 06f2c7551dc08ea5d9cc4c5c3e89105d17686687..fa229e0e1eef54f0befa6a5fd429cb01943c4e83 100644 --- a/ASIC/constraints.sdc +++ b/ASIC/constraints.sdc @@ -16,49 +16,56 @@ set SWDCLK "swdclk"; set_units -time ns; set_units -capacitance pF; -set EXTCLK_PERIOD 4.1667; +set EXTCLK_PERIOD 4.16667; set SWDCLK_PERIOD [expr 4*$EXTCLK_PERIOD]; +set CLK_ERROR [expr 0.1*$EXTCLK_PERIOD]; +set INTER_CLOCK_UNCERTAINTY 0.1 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.17*$EXTCLK_PERIOD] [get_clocks $EXTCLK] -set_clock_uncertainty [expr 0.17*$SWDCLK_PERIOD] [get_clocks $SWDCLK] +set_clock_uncertainty $CLK_ERROR [get_clocks $EXTCLK] +set_clock_uncertainty $CLK_ERROR [get_clocks $SWDCLK] -set MINRISE 0.20 -set MAXRISE 0.25 -set MINFALL 0.20 -set MAXFALL 0.25 +set_clock_uncertainty -setup $INTER_CLOCK_UNCERTAINTY -rise_from [get_clocks $SWDCLK] -rise_to [get_clocks $EXTCLK] +set_clock_uncertainty -setup $INTER_CLOCK_UNCERTAINTY -rise_from [get_clocks $EXTCLK] -rise_to [get_clocks $SWDCLK] -set_clock_transition -rise -min $MINRISE [get_clocks $EXTCLK] -set_clock_transition -rise -max $MAXRISE [get_clocks $EXTCLK] -set_clock_transition -fall -min $MINFALL [get_clocks $EXTCLK] -set_clock_transition -fall -min $MINFALL [get_clocks $EXTCLK] +### Multicycle path through asynchronous clock domains +set_multicycle_path 2 -setup -end -from SWDCK -to CLK +set_multicycle_path 1 -hold -end -from SWDCK -to CLK +set_multicycle_path 2 -setup -end -from CLK -to SWDCK +set_multicycle_path 1 -hold -end -from CLK -to SWDCK -set_clock_transition -rise -min $MINRISE [get_clocks $SWDCLK] -set_clock_transition -rise -max $MAXRISE [get_clocks $SWDCLK] -set_clock_transition -fall -min $MINFALL [get_clocks $SWDCLK] -set_clock_transition -fall -min $MINFALL [get_clocks $SWDCLK] +set_false_path -hold -from CLK -to SWDCK ### Multicycle path through pads - -#set_false_path -from uPAD_SWDIO_IO/* -to uPAD_SWDIO_IO/* set_false_path -through uPAD_SWDIO_IO -set_multicycle_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_*/* +set_multicycle_path 2 -through uPAD_SWDIO_IO +#set_false_path -through uPAD_P0_* +#set_false_path -through uPAD_P1_* + +set_multicycle_path 2 -from uPAD_SWDIO_IO/I -to uPAD_SWDIO_IO/C +set_multicycle_path 2 -from uPAD_SWDIO_IO/IE -to uPAD_SWDIO_IO/C +set_multicycle_path 2 -from uPAD_SWDIO_IO/DS -to uPAD_SWDIO_IO/C +set_multicycle_path 2 -from uPAD_SWDIO_IO/OEN -to uPAD_SWDIO_IO/C + +set_multicycle_path 2 -from uPAD_P0_*/I -to uPAD_P0_*/C +set_multicycle_path 2 -from uPAD_P0_*/IE -to uPAD_P0_*/C +set_multicycle_path 2 -from uPAD_P0_*/DS -to uPAD_P0_*/C +set_multicycle_path 2 -from uPAD_P0_*/OEN -to uPAD_P0_*/C +set_multicycle_path 2 -from uPAD_P1_*/I -to uPAD_P1_*/C +set_multicycle_path 2 -from uPAD_P1_*/IE -to uPAD_P1_*/C +set_multicycle_path 2 -from uPAD_P1_*/DS -to uPAD_P1_*/C +set_multicycle_path 2 -from uPAD_P1_*/OEN -to uPAD_P1_*/C #### DELAY DEFINITION -set_input_delay -clock [get_clocks $EXTCLK] -add_delay 0.3 [get_ports NRST] -set_input_delay -clock [get_clocks $EXTCLK] -add_delay 0.3 [get_ports TEST] -set_input_delay -clock [get_clocks $EXTCLK] -add_delay 0.3 [get_ports P0] -set_input_delay -clock [get_clocks $EXTCLK] -add_delay 0.3 [get_ports P1] -set_input_delay -clock [get_clocks $SWDCLK] -add_delay 0.3 [get_ports SWDIO] +set_input_delay -clock [get_clocks $EXTCLK] -add_delay 0.1 [get_ports NRST] +set_input_delay -clock [get_clocks $EXTCLK] -add_delay 0.1 [get_ports TEST] +set_input_delay -clock [get_clocks $EXTCLK] -add_delay 0.1 [get_ports P0] +set_input_delay -clock [get_clocks $EXTCLK] -add_delay 0.1 [get_ports P1] +set_input_delay -clock [get_clocks $SWDCLK] -add_delay 0.1 [get_ports SWDIO] set_max_capacitance 3 [all_outputs] -set_max_fanout 10 [all_inputs] \ No newline at end of file +set_max_fanout 10 [all_inputs] 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 edeb7e442e6f9fa73578db55de22a001d7e01929..08ae5f440d81397c18295589b473482e446885ac 100644 --- a/ASIC/nanosoc_chip_pads/tsmc65lp/nanosoc_chip_pads_44pin.v +++ b/ASIC/nanosoc_chip_pads/tsmc65lp/nanosoc_chip_pads_44pin.v @@ -44,6 +44,7 @@ module nanosoc_chip_pads ( inout wire VSS, inout wire VDDACC, + input wire SE, input wire CLK, // input input wire TEST, // input input wire NRST, // active low reset @@ -104,6 +105,8 @@ wire [15:0] soc_gpio_port1_o; // GPIO SOC trstate output wire [15:0] soc_gpio_port1_e; // GPIO SOC tristate output enable wire [15:0] soc_gpio_port1_z; // GPIO SOC tristate output hiz +wire pad_se_i; + // connect up high order GPIOs assign soc_gpio_port0_i[15:GPIO_TIO] = pad_gpio_port0_i[15:GPIO_TIO]; assign pad_gpio_port0_o[15:GPIO_TIO] = soc_gpio_port0_o[15:GPIO_TIO]; @@ -128,7 +131,7 @@ nanosoc_chip_cfg #( ,.pad_nrst_i (pad_nrst_i ) ,.pad_test_i (pad_test_i ) // Alternate/reconfigurable IP and associated bidirectional I/O - ,.pad_altin_i (pad_swdclk_i ) // SWCLK/UARTRXD/SCAN-ENABLE + ,.pad_altin_i (pad_se_i ) // SWCLK/UARTRXD/SCAN-ENABLE ,.pad_altio_i (pad_swdio_i ) // SWDIO/UARTTXD tristate input ,.pad_altio_o (pad_swdio_o ) // SWDIO/UARTTXD trstate output ,.pad_altio_e (pad_swdio_e ) // SWDIO/UARTTXD tristate output enable @@ -211,7 +214,7 @@ nanosoc_chip_cfg #( .swdio_o(soc_swd_dio_o), .swdio_e(soc_swd_dio_e), .swdio_z(soc_swd_dio_z), - .swdclk_i(soc_swd_clk_i) + .swdclk_i(pad_swdclk_i) ); @@ -224,9 +227,9 @@ nanosoc_chip_cfg #( PVDD2CDG uPAD_VDDIO_0( .VDDPST(VDDIO) ); -PVDD2CDG uPAD_VDDIO_1( - .VDDPST(VDDIO) - ); +//PVDD2CDG uPAD_VDDIO_1( +// .VDDPST(VDDIO) +// ); PVDD2CDG uPAD_VDDIO_2( .VDDPST(VDDIO) ); @@ -234,11 +237,11 @@ PVDD2POC uPAD_VDDIO_3( .VDDPST(VDDIO) ); -PVSS3CDG uPAD_VSSIO_0( - .VSS(VSS) +PVSS2CDG uPAD_VSSIO_0( + .VSSPST(VSSIO) ); -PVSS3CDG uPAD_VSSIO_1( - .VSS(VSS) +PVSS2CDG uPAD_VSSIO_1( + .VSSPST(VSSIO) ); // Core power supplies @@ -256,16 +259,16 @@ PVDD1CDG uPAD_VDD_3( .VDD(VDD) ); -PVSS3CDG uPAD_VSS_0( +PVSS1CDG uPAD_VSS_0( .VSS(VSS) ); -PVSS3CDG uPAD_VSS_1( +PVSS1CDG uPAD_VSS_1( .VSS(VSS) ); -PVSS3CDG uPAD_VSS_2( +PVSS1CDG uPAD_VSS_2( .VSS(VSS) ); -PVSS3CDG uPAD_VSS_3( +PVSS1CDG uPAD_VSS_3( .VSS(VSS) ); // Accelerator Power supplies @@ -281,6 +284,17 @@ PVDD1CDG uPAD_VDDACC_2( // Clock, Reset and Serial Wire Debug ports +PRDW0408SCDG uPAD_SE_I ( + .IE(tiehi), + .C(pad_se_i), + .PE(tielo), + .DS(tielo), + .I(tielo), + .OEN(tiehi), + .PAD(SE) + ); + + PRDW0408SCDG uPAD_CLK_I ( .IE(tiehi), .C(pad_clk_i), diff --git a/flows/makefile.asic b/flows/makefile.asic index 4d9e6d93673b57f016fb780e37944931329177ff..070b8d7608ccdd31dd5a8f4e2ce53086ac36f098 100644 --- a/flows/makefile.asic +++ b/flows/makefile.asic @@ -38,7 +38,8 @@ MEMORIES_DIR := $(SOCLABS_PROJECT_DIR)/memories RF_16K_SPEC_FILE := $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/rf_16k.spec RF_08K_SPEC_FILE := $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/rf_08k.spec ROM_SPEC_FILE := $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/rom_via.spec -BOOTROM_BIN_FILE := $(SOCLABS_PROJECT_DIR)/system/src/bootrom/bintxt/bootrom.bintxt +BOOTROM_BIN_FILE_IN := $(SOCLABS_PROJECT_DIR)/system/src/bootrom/bintxt/bootrom.bintxt +BOOTROM_BIN_FILE := $(SOCLABS_PROJECT_DIR)/system/src/bootrom/bintxt/bootrom.rcf RF_16K_DIR := $(MEMORIES_DIR)/rf_16k RF_08K_DIR := $(MEMORIES_DIR)/rf_08k ROM_DIR := $(MEMORIES_DIR)/bootrom @@ -77,6 +78,7 @@ gen_memories: bootrom @mkdir -p $(RF_16K_DIR) @mkdir -p $(RF_08K_DIR) @mkdir -p $(ROM_DIR) + cp $(BOOTROM_BIN_FILE_IN) $(BOOTROM_BIN_FILE) echo "Generating register file memory libraries" echo "16K RF" cd $(RF_16K_DIR); $(PHYS_IP)/arm/tsmc/cln65lp/rf_sp_hdf_hvt_rvt/r0p0/bin/rf_sp_hdf_hvt_rvt all -spec $(RF_16K_SPEC_FILE); @@ -99,6 +101,12 @@ syn_genus_44pin: @mkdir -p $(SYN_LOGS) cd $(NANOSOC_SYNTH_DIR)/44pin/Cadence/scripts; genus -f $(NANOSOC_SYNTH_DIR)/44pin/Cadence/scripts/genus.tcl -log $(SYN_LOGS)/nanosoc_synth_genus.log +syn_genus_44pin_noDFT: + @mkdir -p $(REPORTS_FOLDER) + @mkdir -p $(NETLIST_FOLDER) + @mkdir -p $(SYN_LOGS) + cd $(NANOSOC_SYNTH_DIR)/44pin/Cadence/scripts; genus -f $(NANOSOC_SYNTH_DIR)/44pin/Cadence/scripts/genus_nodft.tcl -log $(SYN_LOGS)/nanosoc_synth_genus_noDFT.log + syn_dc: @mkdir -p $(REPORTS_FOLDER) @mkdir -p $(NETLIST_FOLDER)/Synopsys diff --git a/nanosoc/nanosoc_chip/pads/glib/verilog/nanosoc_chip_pads.v b/nanosoc/nanosoc_chip/pads/glib/verilog/nanosoc_chip_pads.v index ccd6303ba708a23e783ad94cd3004dbe2f9fa7e7..e83521e3ed8d3059370a502f8f682f0286f063a0 100644 --- a/nanosoc/nanosoc_chip/pads/glib/verilog/nanosoc_chip_pads.v +++ b/nanosoc/nanosoc_chip/pads/glib/verilog/nanosoc_chip_pads.v @@ -43,7 +43,8 @@ module nanosoc_chip_pads ( inout wire VDD, inout wire VSS, inout wire VDDACC, -`endif +`endif + input wire SE, inout wire CLK, // input inout wire TEST, // output inout wire NRST, // active low reset @@ -103,6 +104,9 @@ wire [15:0] soc_gpio_port1_o; // GPIO SOC trstate output wire [15:0] soc_gpio_port1_e; // GPIO SOC tristate output enable wire [15:0] soc_gpio_port1_z; // GPIO SOC tristate output hiz +wire pad_se_i; + + // connect up high order GPIOs assign soc_gpio_port0_i[15:GPIO_TIO] = pad_gpio_port0_i[15:GPIO_TIO]; assign pad_gpio_port0_o[15:GPIO_TIO] = soc_gpio_port0_o[15:GPIO_TIO]; @@ -126,7 +130,7 @@ nanosoc_chip_cfg #( ,.pad_nrst_i (pad_nrst_i ) ,.pad_test_i (pad_test_i ) // Alternate/reconfigurable IP and associated bidirectional I/O - ,.pad_altin_i (pad_swdclk_i ) // SWCLK/UARTRXD/SCAN-ENABLE + ,.pad_altin_i (pad_se_i ) // SWCLK/UARTRXD/SCAN-ENABLE ,.pad_altio_i (pad_swdio_i ) // SWDIO/UARTTXD tristate input ,.pad_altio_o (pad_swdio_o ) // SWDIO/UARTTXD trstate output ,.pad_altio_e (pad_swdio_e ) // SWDIO/UARTTXD tristate output enable @@ -213,7 +217,7 @@ nanosoc_chip_cfg #( .swdio_o (soc_swd_dio_o), .swdio_e (soc_swd_dio_e), .swdio_z (soc_swd_dio_z), - .swdclk_i (soc_swd_clk_i) + .swdclk_i (pad_swd_clk_i) ); @@ -250,6 +254,13 @@ PAD_VDDSOC uPAD_VDDACC_1( // Clock, Reset and Serial Wire Debug ports +PAD_INOUT8MA_NOE uPAD_SE_I ( + .PAD (SE), + .O (tielo), + .I (pad_se_i), + .NOE (tiehi) + ); + PAD_INOUT8MA_NOE uPAD_CLK_I ( .PAD (CLK), .O (tielo), diff --git a/verif/tb/verilog/nanosoc_tb.v b/verif/tb/verilog/nanosoc_tb.v index 7028c23af013e389fdc0527b3e0758ff42550f50..8f41a20d66c16707a0be803ffb62bcb856b160c0 100644 --- a/verif/tb/verilog/nanosoc_tb.v +++ b/verif/tb/verilog/nanosoc_tb.v @@ -135,6 +135,7 @@ initial begin .VSS (VSS), .VDDACC (VDDACC), `endif + .SE (1'b0), .CLK (CLK), // input .TEST (TEST), // input .NRST (NRST), // active low reset @@ -153,6 +154,7 @@ initial begin .VSS (VSS), .VDDACC (VDDACC), `endif + .SE (1'b0), .CLK (CLK), // input .TEST (TEST), // input .NRST (NRST), // active low reset