From 1ebe89b6929421c7fe0d0247fb8c3e857c584b24 Mon Sep 17 00:00:00 2001
From: Daniel Newbrook <dwn1c21@soton.ac.uk>
Date: Thu, 1 Feb 2024 11:38:59 +0000
Subject: [PATCH] update PnR include miniASIC m scheme and bondpad place

---
 ASIC/44pin/Cadence/scripts/design_import.tcl  |  3 +-
 ASIC/44pin/Cadence/scripts/genus.tcl          |  2 +-
 ASIC/44pin/Cadence/scripts/place_bondpads.tcl | 42 +++++++++++++++++++
 ASIC/44pin/Cadence/scripts/pnr_flow.tcl       | 19 ++++++---
 ASIC/44pin/Cadence/scripts/power_plan.tcl     |  4 +-
 flows/makefile.asic                           |  4 +-
 6 files changed, 63 insertions(+), 11 deletions(-)
 create mode 100644 ASIC/44pin/Cadence/scripts/place_bondpads.tcl

diff --git a/ASIC/44pin/Cadence/scripts/design_import.tcl b/ASIC/44pin/Cadence/scripts/design_import.tcl
index 9bfbe84..90dccb2 100644
--- a/ASIC/44pin/Cadence/scripts/design_import.tcl
+++ b/ASIC/44pin/Cadence/scripts/design_import.tcl
@@ -14,7 +14,8 @@ 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
diff --git a/ASIC/44pin/Cadence/scripts/genus.tcl b/ASIC/44pin/Cadence/scripts/genus.tcl
index 35cf920..964a721 100644
--- a/ASIC/44pin/Cadence/scripts/genus.tcl
+++ b/ASIC/44pin/Cadence/scripts/genus.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
diff --git a/ASIC/44pin/Cadence/scripts/place_bondpads.tcl b/ASIC/44pin/Cadence/scripts/place_bondpads.tcl
new file mode 100644
index 0000000..771351c
--- /dev/null
+++ b/ASIC/44pin/Cadence/scripts/place_bondpads.tcl
@@ -0,0 +1,42 @@
+eval_legacy {addInst -cell PAD60LU -inst BPAD_TEST_I    -loc {149.29 1428} -ori R180}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_SWDCK_I   -loc {257.86 1428} -ori R180}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VDD_3     -loc {366.43 1428} -ori R180}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VSS_3     -loc {475.00 1428} -ori R180}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VDDIO_3   -loc {583.57 1428} -ori R180}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P1_00     -loc {692.14 1428} -ori R180}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P1_01     -loc {800.71 1428} -ori R180}
+
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P0_04     -loc {0.0 146.25} -ori R270}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P0_05     -loc {0.0 251.25} -ori R270}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P0_03     -loc {0.0 356.25} -ori R270}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VDDACC_0  -loc {0.0 461.25} -ori R270}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VSS_0     -loc {0.0 566.25} -ori R270}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_CLK_I     -loc {0.0 671.25} -ori R270}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VDD_0     -loc {0.0 776.25} -ori R270}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VDDIO_0   -loc {0.0 881.25} -ori R270}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_SWDIO_IO  -loc {0.0 986.25} -ori R270}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VSSIO_0   -loc {0.0 1091.25} -ori R270}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P0_06     -loc {0.0 1196.25} -ori R270}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P0_07     -loc {0.0 1301.25} -ori R270}
+
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P0_02     -loc {149.29 0} -ori R0}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VDDACC_1  -loc {257.86 0} -ori R0}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VDDIO_1   -loc {366.43 0} -ori R0}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VDD_1     -loc {475.00 0} -ori R0}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VSS_1     -loc {583.57 0} -ori R0}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P0_01     -loc {692.14 0} -ori R0}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P0_00     -loc {800.71 0} -ori R0}
+
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P1_07     -loc {928 146.25} -ori R90}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P1_06     -loc {928 251.25} -ori R90}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VSSIO_1   -loc {928 356.25} -ori R90}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P1_03     -loc {928 461.25} -ori R90}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P1_02     -loc {928 566.25} -ori R90}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VDDACC_2  -loc {928 671.25} -ori R90}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VDD_2     -loc {928 776.25} -ori R90}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VSS_2     -loc {928 881.25} -ori R90}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_VDDIO_2   -loc {928 986.25} -ori R90}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_NRST_I    -loc {928 1091.25} -ori R90}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P1_04     -loc {928 1196.25} -ori R90}
+eval_legacy {addInst -cell PAD60LU -inst BPAD_P1_05     -loc {928 1301.25} -ori R90}
+
diff --git a/ASIC/44pin/Cadence/scripts/pnr_flow.tcl b/ASIC/44pin/Cadence/scripts/pnr_flow.tcl
index d60f9f8..312f543 100644
--- a/ASIC/44pin/Cadence/scripts/pnr_flow.tcl
+++ b/ASIC/44pin/Cadence/scripts/pnr_flow.tcl
@@ -17,7 +17,7 @@ set RF_16K_GDS2 $::env(SOCLABS_PROJECT_DIR)/memories/rf_16k/rf_16k.gds2
 set RF_08K_GDS2 $::env(SOCLABS_PROJECT_DIR)/memories/rf_08k/rf_08k.gds2
 set ROM_VIA_GDS2 $::env(SOCLABS_PROJECT_DIR)/memories/bootrom/rom_via.gds2
 
-
+set_multi_cpu_usage -local_cpu 8
 puts "Starting PnR Flow ..."
 
 
@@ -54,9 +54,7 @@ reorder_scan -skip_mode skipNone -allow_swapping false -keep_power_domain_ports
 
 report_timing > $::env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/reports/3post_clock_nanosoc_imp_timing.rep
 
-### 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 }
+
 write_db nanosoc_chip_pads
 
 ### Routing 
@@ -66,6 +64,17 @@ 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
+
+source place_bondpads.tcl
+
 ### Fill metal
 set_metal_fill -layer M1 -opc_active_spacing 0.090 -border_spacing -0.001
 set_metal_fill -layer M2 -opc_active_spacing 0.100 -border_spacing -0.001
@@ -87,7 +96,7 @@ 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 \
+    -map_file /home/dwn1c21/SoC-Labs/util/PRTF_EDI_65nm_001_Cad_V24a/PR_tech/Cadence/GdsOutMap/PRTF_EDI_N65_gdsout_6X1Z1U.24a.map \
     -lib_name DesignLib \
     -merge [list ${SC_GDS2} ${RF_16K_GDS2} ${RF_08K_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 197b284..e3d70dc 100644
--- a/ASIC/44pin/Cadence/scripts/power_plan.tcl
+++ b/ASIC/44pin/Cadence/scripts/power_plan.tcl
@@ -16,7 +16,7 @@ set_db add_rings_stacked_via_top_layer M8
 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 1 bottom 1 left 1 right 1} -offset {top 2 bottom 2 left 2 right 2} -center 0 -threshold 0 -jog_distance 0 -snap_wire_center_to_grid none
+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
 
 ### Adding Stripes 
 set_db add_stripes_ignore_block_check true
@@ -38,7 +38,7 @@ 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 56 -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
+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 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
 
diff --git a/flows/makefile.asic b/flows/makefile.asic
index 46aa340..4d9e6d9 100644
--- a/flows/makefile.asic
+++ b/flows/makefile.asic
@@ -93,11 +93,11 @@ gen_memories: bootrom
 convert_mem_to_db: 
 	lc_shell -no_log -f  $(NANOSOC_SYNTH_DIR)/synopsys_lib_conversion.tcl
 
-syn_genus: 
+syn_genus_44pin: 
 	@mkdir -p $(REPORTS_FOLDER)
 	@mkdir -p $(NETLIST_FOLDER)
 	@mkdir -p $(SYN_LOGS)
-	cd $(NANOSOC_SYNTH_DIR)/Cadence/Genus; genus -f $(NANOSOC_SYNTH_DIR)/Cadence/Genus/genus.tcl -log $(SYN_LOGS)/nanosoc_synth_genus.log
+	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_dc:
 	@mkdir -p $(REPORTS_FOLDER)
-- 
GitLab