From c95b861c9b84babaca470e6ced4f93b97f707816 Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Mon, 15 Apr 2024 17:52:46 +0000 Subject: [PATCH 01/20] pushing test lvs files --- .../block_lvs_check_sky130pdk/Makefile | 12 +- .../drc-lvs-check/process_extracted_pins.py | 5 + openfasoc/common/drc-lvs-check/run_lvspex.sh | 10 +- openfasoc/generators/cryo-gen/output_file.txt | 561 ++++++++++++++ .../generators/gdsfactory-gen/diff_test.gds | Bin 0 -> 114468 bytes .../generators/gdsfactory-gen/test_lvs.py | 17 + .../generators/temp-sense-gen/flow/Makefile | 446 +---------- .../flow/util/openfasoc/cdl_parser.py | 2 + openfasoc/generators/temp-sense-gen/mkfile | 732 ++++++++++++++++++ 9 files changed, 1331 insertions(+), 454 deletions(-) create mode 100644 openfasoc/generators/cryo-gen/output_file.txt create mode 100644 openfasoc/generators/gdsfactory-gen/diff_test.gds create mode 100644 openfasoc/generators/gdsfactory-gen/test_lvs.py create mode 100644 openfasoc/generators/temp-sense-gen/mkfile diff --git a/openfasoc/common/drc-lvs-check/custom_block_tool/block_lvs_check_sky130pdk/Makefile b/openfasoc/common/drc-lvs-check/custom_block_tool/block_lvs_check_sky130pdk/Makefile index 78ab83dd7..47836d772 100644 --- a/openfasoc/common/drc-lvs-check/custom_block_tool/block_lvs_check_sky130pdk/Makefile +++ b/openfasoc/common/drc-lvs-check/custom_block_tool/block_lvs_check_sky130pdk/Makefile @@ -1,12 +1,14 @@ #---------need to be modified by user-------------------------------------------- # the path for your gds file -GDS_FILE_PATH = /home/elonjia/Desktop/tool_package/ALIGN-public/work/DCDC_MUX/DCDC_MUX.gds +GDS_FILE_PATH = /home/chetanya/OpenFASOC/openfasoc/generators/gdsfactory-gen/diff_test.gds +# GDS_FILE_PATH = /home/elonjia/Desktop/tool_package/ALIGN-public/work/DCDC_MUX/DCDC_MUX.gds #the path for your cdl/ngspice file -CDL_FILE_PATH = /home/elonjia/Desktop/tool_package/ALIGN-public/work/DCDC_MUX/DCDC_MUX.sp +CDL_FILE_PATH = /home/chetanya/OpenFASOC/openfasoc/common/platforms/sky130hd/cdl/sky130_fd_sc_hd.spice +# CDL_FILE_PATH = /home/elonjia/Desktop/tool_package/ALIGN-public/work/DCDC_MUX/DCDC_MUX.sp #the name for your block [the name of block in gds & cdl file must be same.] -DesignName = DCDC_MUX +DesignName = diff_test #the path for your PDK file -> to sky130A eg: my sky130A file in the path: /home/elonjia/Desktop/tool_package/open_pdks/sky130/sky130A -export PDK_ROOT=/home/elonjia/Desktop/tool_package/open_pdks/sky130/ +export PDK_ROOT=/usr/bin/miniconda3/share/pdk/ #-------------------------------------------------------------------------------- .PHONY: lvs lvs : @@ -28,4 +30,4 @@ clean: -rm -rf EXTRACT_PEX -rm -rf EXTRACT_SIM -rm -rf FLATTEN_GDS - -rm *.ext + -rm *.ext diff --git a/openfasoc/common/drc-lvs-check/process_extracted_pins.py b/openfasoc/common/drc-lvs-check/process_extracted_pins.py index cd7d6c8bc..b49b7621c 100644 --- a/openfasoc/common/drc-lvs-check/process_extracted_pins.py +++ b/openfasoc/common/drc-lvs-check/process_extracted_pins.py @@ -158,6 +158,11 @@ def toplevel_process(netlist, toplevel_name, rpin_name, pin_name): pin_name = None # the LDO requires a custom replacment of the VREG pin name extracted_spice = re.sub("r_VREG", "VREG", extracted_spice) + else: + voltage_cell_name = None + pins_to_remove = None + rpin_name = None + pin_name = None # end edits diff --git a/openfasoc/common/drc-lvs-check/run_lvspex.sh b/openfasoc/common/drc-lvs-check/run_lvspex.sh index a471c4d59..e64871d40 100755 --- a/openfasoc/common/drc-lvs-check/run_lvspex.sh +++ b/openfasoc/common/drc-lvs-check/run_lvspex.sh @@ -8,12 +8,12 @@ gds flatglob *\$\$* gds read $1 load $2 -if {![string compare $2 "ldoInst"]} { +if {![string compare $2 "diff_test"]} { select top cell - flatten ldoInst_flat - load ldoInst_flat - cellname delete ldoInst - cellname rename ldoInst_flat ldoInst + flatten diff_test_flat + load diff_test_flat + cellname delete diff_test + cellname rename diff_test_flat diff_test select top cell } else { select top cell diff --git a/openfasoc/generators/cryo-gen/output_file.txt b/openfasoc/generators/cryo-gen/output_file.txt new file mode 100644 index 000000000..f4b5051ac --- /dev/null +++ b/openfasoc/generators/cryo-gen/output_file.txt @@ -0,0 +1,561 @@ +python3 tools/cryo-gen.py --specfile test.json --outputDir ./work --platform sky130hd --mode macro --ninv 144 --prepex +make[1]: Entering directory '/home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow' +[INFO][FLOW] Using platform directory /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/../../../common/platforms/sky130hd +make[1]: Nothing to be done for 'finish'. +make[1]: Leaving directory '/home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow' +make[1]: Entering directory '/home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow' +[INFO][FLOW] Using platform directory /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/../../../common/platforms/sky130hd +/home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/../../../common/drc-lvs-check/run_drc.sh + +Magic 8.3 revision 464 - Compiled on Sat Mar 9 23:18:29 UTC 2024. +Starting magic under Tcl interpreter +Using the terminal as the console. +Using NULL graphics device. +Processing system .magicrc file +Sourcing design .magicrc for technology sky130A ... +2 Magic internal units = 1 Lambda +Input style sky130(): scaleFactor=2, multiplier=2 +The following types are not handled by extraction and will be treated as non-electrical types: + ubm +Scaled tech values by 2 / 1 to match internal grid scaling +Loading sky130A Device Generator Menu ... +Loading "/home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/../../../common/drc-lvs-check/magic_commands.tcl" from command line. +Warning: Calma reading is not undoable! I hope that's OK. +Library written using GDS-II Release 6.0 +Library name: LIB +Reading "VIA_L1M1_PR_MR". +Saving contents of cell VIA_L1M1_PR_MR +Reading "VIA_M1M2_PR". +Saving contents of cell VIA_M1M2_PR +Reading "VIA_via2_3_1600_480_1_5_320_320". +Saving contents of cell VIA_via2_3_1600_480_1_5_320_320 +Reading "VIA_via3_4_1600_480_1_4_400_400". +Saving contents of cell VIA_via3_4_1600_480_1_4_400_400 +Reading "VIA_via4_5_1600_480_1_4_400_400". +Saving contents of cell VIA_via4_5_1600_480_1_4_400_400 +Reading "VIA_via2_3_4200_480_1_13_320_320". +Saving contents of cell VIA_via2_3_4200_480_1_13_320_320 +Reading "VIA_via3_4_4200_480_1_10_400_400". +Saving contents of cell VIA_via3_4_4200_480_1_10_400_400 +Reading "VIA_via4_5_4200_480_1_10_400_400". +Saving contents of cell VIA_via4_5_4200_480_1_10_400_400 +Reading "VIA_via5_6_1600_1600_1_1_1600_1600". +Saving contents of cell VIA_via5_6_1600_1600_1_1_1600_1600 +Reading "VIA_via5_6_1600_4200_2_1_1600_1600". +Saving contents of cell VIA_via5_6_1600_4200_2_1_1600_1600 +Reading "VIA_via5_6_4200_1600_1_2_1600_1600". +Saving contents of cell VIA_via5_6_4200_1600_1_2_1600_1600 +Reading "VIA_via5_6_4200_4200_2_2_1600_1600". +Saving contents of cell VIA_via5_6_4200_4200_2_2_1600_1600 +Reading "sky130_fd_sc_hd__nand2_1". +Reading "sky130_fd_sc_hd__dfxtp_1". +Reading "sky130_fd_sc_hd__inv_1". +Reading "sky130_fd_sc_hd__tapvpwrvgnd_1". +Reading "sky130_fd_sc_hd__decap_4". +Reading "sky130_fd_sc_hd__fill_1". +Reading "sky130_fd_sc_hd__fill_4". +Reading "sky130_fd_sc_hd__fill_2". +Reading "sky130_fd_sc_hd__fill_8". +Reading "cryoInst". +[INFO]: Loading cryoInst + +Loading DRC CIF style. +No errors found. +[INFO]: DONE with /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/reports/sky130hd/cryo//6_final_drc.rpt + +Using technology "sky130A", version 1.0.471-0-g97d0844 +magic -rcfile /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/../../../common/drc-lvs-check/sky130A/sky130A.magicrc -noconsole -dnull /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/../../../common/drc-lvs-check/magic_commands.tcl < /dev/null + +Magic 8.3 revision 464 - Compiled on Sat Mar 9 23:18:29 UTC 2024. +Starting magic under Tcl interpreter +Using the terminal as the console. +Using NULL graphics device. +Processing system .magicrc file +Sourcing design .magicrc for technology sky130A ... +2 Magic internal units = 1 Lambda +Input style sky130(): scaleFactor=2, multiplier=2 +The following types are not handled by extraction and will be treated as non-electrical types: + ubm +Scaled tech values by 2 / 1 to match internal grid scaling +Loading sky130A Device Generator Menu ... +Loading "/home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/../../../common/drc-lvs-check/magic_commands.tcl" from command line. +Warning: Calma reading is not undoable! I hope that's OK. +Library written using GDS-II Release 6.0 +Library name: LIB +Reading "VIA_L1M1_PR_MR". +Saving contents of cell VIA_L1M1_PR_MR +Reading "VIA_M1M2_PR". +Saving contents of cell VIA_M1M2_PR +Reading "VIA_via2_3_1600_480_1_5_320_320". +Saving contents of cell VIA_via2_3_1600_480_1_5_320_320 +Reading "VIA_via3_4_1600_480_1_4_400_400". +Saving contents of cell VIA_via3_4_1600_480_1_4_400_400 +Reading "VIA_via4_5_1600_480_1_4_400_400". +Saving contents of cell VIA_via4_5_1600_480_1_4_400_400 +Reading "VIA_via2_3_4200_480_1_13_320_320". +Saving contents of cell VIA_via2_3_4200_480_1_13_320_320 +Reading "VIA_via3_4_4200_480_1_10_400_400". +Saving contents of cell VIA_via3_4_4200_480_1_10_400_400 +Reading "VIA_via4_5_4200_480_1_10_400_400". +Saving contents of cell VIA_via4_5_4200_480_1_10_400_400 +Reading "VIA_via5_6_1600_1600_1_1_1600_1600". +Saving contents of cell VIA_via5_6_1600_1600_1_1_1600_1600 +Reading "VIA_via5_6_1600_4200_2_1_1600_1600". +Saving contents of cell VIA_via5_6_1600_4200_2_1_1600_1600 +Reading "VIA_via5_6_4200_1600_1_2_1600_1600". +Saving contents of cell VIA_via5_6_4200_1600_1_2_1600_1600 +Reading "VIA_via5_6_4200_4200_2_2_1600_1600". +Saving contents of cell VIA_via5_6_4200_4200_2_2_1600_1600 +Reading "sky130_fd_sc_hd__nand2_1". +Reading "sky130_fd_sc_hd__dfxtp_1". +Reading "sky130_fd_sc_hd__inv_1". +Reading "sky130_fd_sc_hd__tapvpwrvgnd_1". +Reading "sky130_fd_sc_hd__decap_4". +Reading "sky130_fd_sc_hd__fill_1". +Reading "sky130_fd_sc_hd__fill_4". +Reading "sky130_fd_sc_hd__fill_2". +Reading "sky130_fd_sc_hd__fill_8". +Reading "cryoInst". +[INFO]: Loading cryoInst + +Loading DRC CIF style. +No errors found. +[INFO]: DONE with /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/reports/sky130hd/cryo//6_final_drc.rpt + +Using technology "sky130A", version 1.0.471-0-g97d0844 +make[1]: Leaving directory '/home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow' +make[1]: Entering directory '/home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow' +[INFO][FLOW] Using platform directory /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/../../../common/platforms/sky130hd +mkdir -p /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/objects/sky130hd/cryo//netgen_lvs/spice /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/objects/sky130hd/cryo//netgen_lvs/ext +python /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/util/openfasoc/cdl_parser.py -i /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/results/sky130hd/cryo//6_final.cdl -s /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/../../../common/platforms/sky130hd/cdl/sky130_fd_sc_hd.spice -o /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/objects/sky130hd/cryo//netgen_lvs/spice/cryoInst.spice +/home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/../../../common/drc-lvs-check/run_lvspex.sh /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/results/sky130hd/cryo//6_final.gds cryoInst /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/reports/sky130hd/cryo//6_final_lvs.rpt + +Magic 8.3 revision 464 - Compiled on Sat Mar 9 23:18:29 UTC 2024. +Starting magic under Tcl interpreter +Using the terminal as the console. +Using NULL graphics device. +Processing system .magicrc file +Sourcing design .magicrc for technology sky130A ... +2 Magic internal units = 1 Lambda +Input style sky130(): scaleFactor=2, multiplier=2 +The following types are not handled by extraction and will be treated as non-electrical types: + ubm +Scaled tech values by 2 / 1 to match internal grid scaling +Loading sky130A Device Generator Menu ... +Using technology "sky130A", version 1.0.471-0-g97d0844 +Warning: Calma reading is not undoable! I hope that's OK. +Library written using GDS-II Release 6.0 +Library name: LIB +Reading "VIA_L1M1_PR_MR". +Reading "VIA_M1M2_PR". +Reading "VIA_via2_3_1600_480_1_5_320_320". +Reading "VIA_via3_4_1600_480_1_4_400_400". +Reading "VIA_via4_5_1600_480_1_4_400_400". +Reading "VIA_via2_3_4200_480_1_13_320_320". +Reading "VIA_via3_4_4200_480_1_10_400_400". +Reading "VIA_via4_5_4200_480_1_10_400_400". +Reading "VIA_via5_6_1600_1600_1_1_1600_1600". +Reading "VIA_via5_6_1600_4200_2_1_1600_1600". +Reading "VIA_via5_6_4200_1600_1_2_1600_1600". +Reading "VIA_via5_6_4200_4200_2_2_1600_1600". +Reading "sky130_fd_sc_hd__nand2_1". +Reading "sky130_fd_sc_hd__dfxtp_1". +Reading "sky130_fd_sc_hd__inv_1". +Reading "sky130_fd_sc_hd__tapvpwrvgnd_1". +Reading "sky130_fd_sc_hd__decap_4". +Reading "sky130_fd_sc_hd__fill_1". +Reading "sky130_fd_sc_hd__fill_4". +Reading "sky130_fd_sc_hd__fill_2". +Reading "sky130_fd_sc_hd__fill_8". +Reading "cryoInst". +Extracting VIA_via5_6_4200_4200_2_2_1600_1600 into VIA_via5_6_4200_4200_2_2_1600_1600.ext: +Extracting VIA_via5_6_1600_4200_2_1_1600_1600 into VIA_via5_6_1600_4200_2_1_1600_1600.ext: +Extracting VIA_via2_3_4200_480_1_13_320_320 into VIA_via2_3_4200_480_1_13_320_320.ext: +Extracting VIA_via4_5_4200_480_1_10_400_400 into VIA_via4_5_4200_480_1_10_400_400.ext: +Extracting VIA_via3_4_4200_480_1_10_400_400 into VIA_via3_4_4200_480_1_10_400_400.ext: +Extracting sky130_fd_sc_hd__decap_4 into sky130_fd_sc_hd__decap_4.ext: +sky130_fd_sc_hd__decap_4: 2 warnings +Extracting sky130_fd_sc_hd__nand2_1 into sky130_fd_sc_hd__nand2_1.ext: +Extracting sky130_fd_sc_hd__fill_4 into sky130_fd_sc_hd__fill_4.ext: +Extracting sky130_fd_sc_hd__inv_1 into sky130_fd_sc_hd__inv_1.ext: +Extracting sky130_fd_sc_hd__fill_1 into sky130_fd_sc_hd__fill_1.ext: +Extracting sky130_fd_sc_hd__fill_2 into sky130_fd_sc_hd__fill_2.ext: +Extracting VIA_L1M1_PR_MR into VIA_L1M1_PR_MR.ext: +Extracting VIA_M1M2_PR into VIA_M1M2_PR.ext: +Extracting sky130_fd_sc_hd__tapvpwrvgnd_1 into sky130_fd_sc_hd__tapvpwrvgnd_1.ext: +Extracting VIA_via4_5_1600_480_1_4_400_400 into VIA_via4_5_1600_480_1_4_400_400.ext: +Extracting VIA_via2_3_1600_480_1_5_320_320 into VIA_via2_3_1600_480_1_5_320_320.ext: +Extracting VIA_via3_4_1600_480_1_4_400_400 into VIA_via3_4_1600_480_1_4_400_400.ext: +Extracting sky130_fd_sc_hd__fill_8 into sky130_fd_sc_hd__fill_8.ext: +Extracting sky130_fd_sc_hd__dfxtp_1 into sky130_fd_sc_hd__dfxtp_1.ext: +Extracting VIA_via5_6_4200_1600_1_2_1600_1600 into VIA_via5_6_4200_1600_1_2_1600_1600.ext: +Extracting VIA_via5_6_1600_1600_1_1_1600_1600 into VIA_via5_6_1600_1600_1_1_1600_1600.ext: +Extracting cryoInst into cryoInst.ext: +exttospice finished. +Extracting VIA_via5_6_4200_4200_2_2_1600_1600 into VIA_via5_6_4200_4200_2_2_1600_1600.ext: +Extracting VIA_via5_6_1600_4200_2_1_1600_1600 into VIA_via5_6_1600_4200_2_1_1600_1600.ext: +Extracting VIA_via2_3_4200_480_1_13_320_320 into VIA_via2_3_4200_480_1_13_320_320.ext: +Extracting VIA_via4_5_4200_480_1_10_400_400 into VIA_via4_5_4200_480_1_10_400_400.ext: +Extracting VIA_via3_4_4200_480_1_10_400_400 into VIA_via3_4_4200_480_1_10_400_400.ext: +Extracting sky130_fd_sc_hd__decap_4 into sky130_fd_sc_hd__decap_4.ext: +sky130_fd_sc_hd__decap_4: 2 warnings +Extracting sky130_fd_sc_hd__nand2_1 into sky130_fd_sc_hd__nand2_1.ext: +Extracting sky130_fd_sc_hd__fill_4 into sky130_fd_sc_hd__fill_4.ext: +Extracting sky130_fd_sc_hd__inv_1 into sky130_fd_sc_hd__inv_1.ext: +Extracting sky130_fd_sc_hd__fill_1 into sky130_fd_sc_hd__fill_1.ext: +Extracting sky130_fd_sc_hd__fill_2 into sky130_fd_sc_hd__fill_2.ext: +Extracting VIA_L1M1_PR_MR into VIA_L1M1_PR_MR.ext: +Extracting VIA_M1M2_PR into VIA_M1M2_PR.ext: +Extracting sky130_fd_sc_hd__tapvpwrvgnd_1 into sky130_fd_sc_hd__tapvpwrvgnd_1.ext: +Extracting VIA_via4_5_1600_480_1_4_400_400 into VIA_via4_5_1600_480_1_4_400_400.ext: +Extracting VIA_via2_3_1600_480_1_5_320_320 into VIA_via2_3_1600_480_1_5_320_320.ext: +Extracting VIA_via3_4_1600_480_1_4_400_400 into VIA_via3_4_1600_480_1_4_400_400.ext: +Extracting sky130_fd_sc_hd__fill_8 into sky130_fd_sc_hd__fill_8.ext: +Extracting sky130_fd_sc_hd__dfxtp_1 into sky130_fd_sc_hd__dfxtp_1.ext: +Extracting VIA_via5_6_4200_1600_1_2_1600_1600 into VIA_via5_6_4200_1600_1_2_1600_1600.ext: +Extracting VIA_via5_6_1600_1600_1_1_1600_1600 into VIA_via5_6_1600_1600_1_1_1600_1600.ext: +Extracting cryoInst into cryoInst.ext: +exttospice finished. +Extracting VIA_via5_6_4200_4200_2_2_1600_1600 into VIA_via5_6_4200_4200_2_2_1600_1600.ext: +Extracting VIA_via5_6_1600_4200_2_1_1600_1600 into VIA_via5_6_1600_4200_2_1_1600_1600.ext: +Extracting VIA_via2_3_4200_480_1_13_320_320 into VIA_via2_3_4200_480_1_13_320_320.ext: +Extracting VIA_via4_5_4200_480_1_10_400_400 into VIA_via4_5_4200_480_1_10_400_400.ext: +Extracting VIA_via3_4_4200_480_1_10_400_400 into VIA_via3_4_4200_480_1_10_400_400.ext: +Extracting sky130_fd_sc_hd__decap_4 into sky130_fd_sc_hd__decap_4.ext: +sky130_fd_sc_hd__decap_4: 2 warnings +Extracting sky130_fd_sc_hd__nand2_1 into sky130_fd_sc_hd__nand2_1.ext: +Extracting sky130_fd_sc_hd__fill_4 into sky130_fd_sc_hd__fill_4.ext: +Extracting sky130_fd_sc_hd__inv_1 into sky130_fd_sc_hd__inv_1.ext: +Extracting sky130_fd_sc_hd__fill_1 into sky130_fd_sc_hd__fill_1.ext: +Extracting sky130_fd_sc_hd__fill_2 into sky130_fd_sc_hd__fill_2.ext: +Extracting VIA_L1M1_PR_MR into VIA_L1M1_PR_MR.ext: +Extracting VIA_M1M2_PR into VIA_M1M2_PR.ext: +Extracting sky130_fd_sc_hd__tapvpwrvgnd_1 into sky130_fd_sc_hd__tapvpwrvgnd_1.ext: +Extracting VIA_via4_5_1600_480_1_4_400_400 into VIA_via4_5_1600_480_1_4_400_400.ext: +Extracting VIA_via2_3_1600_480_1_5_320_320 into VIA_via2_3_1600_480_1_5_320_320.ext: +Extracting VIA_via3_4_1600_480_1_4_400_400 into VIA_via3_4_1600_480_1_4_400_400.ext: +Extracting sky130_fd_sc_hd__fill_8 into sky130_fd_sc_hd__fill_8.ext: +Extracting sky130_fd_sc_hd__dfxtp_1 into sky130_fd_sc_hd__dfxtp_1.ext: +Extracting VIA_via5_6_4200_1600_1_2_1600_1600 into VIA_via5_6_4200_1600_1_2_1600_1600.ext: +Extracting VIA_via5_6_1600_1600_1_1_1600_1600 into VIA_via5_6_1600_1600_1_1_1600_1600.ext: +Extracting cryoInst into cryoInst.ext: +exttospice finished. +usage: process_extracted_pins.py [-h] --lvsmag LVSMAG [--toplevel TOPLEVEL] + [--generator GENERATOR] + +remove the proxy pins from extracted HEADER cell definition + +options: + -h, --help show this help message and exit + --lvsmag LVSMAG, -l LVSMAG + extracted spice file from GDS (i.e. extract + 6_final.gds) + --toplevel TOPLEVEL, -t TOPLEVEL + name of toplevel module to look for + --generator GENERATOR, -g GENERATOR + name of generator i.e. "temp-sense-gen" for tempsense. + If not specified this script does nothing +Netgen 1.5.272 compiled on Tue Mar 5 23:16:53 UTC 2024 +Warning: netgen command 'format' use fully-qualified name '::netgen::format' +Warning: netgen command 'global' use fully-qualified name '::netgen::global' +Reading netlist file /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/objects/sky130hd/cryo//netgen_lvs/spice/cryoInst_lvsmag.spice +Call to undefined subcircuit sky130_fd_pr__nfet_01v8 +Creating placeholder cell definition. +Call to undefined subcircuit sky130_fd_pr__special_nfet_01v8 +Creating placeholder cell definition. +Call to undefined subcircuit sky130_fd_pr__pfet_01v8_hvt +Creating placeholder cell definition. +Reading netlist file /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/objects/sky130hd/cryo//netgen_lvs/spice/cryoInst.spice +Call to undefined subcircuit sky130_fd_pr__nfet_01v8 +Creating placeholder cell definition. +Call to undefined subcircuit sky130_fd_pr__pfet_01v8_hvt +Creating placeholder cell definition. +Call to undefined subcircuit sky130_fd_pr__diode_pw2nd +Creating placeholder cell definition. +Call to undefined subcircuit sky130_fd_sc_hd__nand2_2 +Creating placeholder cell definition. +Call to undefined subcircuit sky130_fd_sc_hd__nor2_2 +Creating placeholder cell definition. +Call to undefined subcircuit sky130_fd_pr__nfet_03v3_nvt +Creating placeholder cell definition. +Call to undefined subcircuit sky130_fd_pr__nfet_01v8_lvt +Creating placeholder cell definition. + +Reading setup file /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/../../../common/drc-lvs-check/sky130A/sky130A_setup.tcl + +Model sky130_fd_pr__res_generic_po pin end_a == end_b +No property mult found for device sky130_fd_pr__res_generic_po +Model sky130_fd_pr__nfet_01v8 pin 1 == 3 +No property mult found for device sky130_fd_pr__nfet_01v8 +No property sa found for device sky130_fd_pr__nfet_01v8 +No property sb found for device sky130_fd_pr__nfet_01v8 +No property sd found for device sky130_fd_pr__nfet_01v8 +No property nf found for device sky130_fd_pr__nfet_01v8 +No property nrd found for device sky130_fd_pr__nfet_01v8 +No property nrs found for device sky130_fd_pr__nfet_01v8 +No property area found for device sky130_fd_pr__nfet_01v8 +No property perim found for device sky130_fd_pr__nfet_01v8 +No property topography found for device sky130_fd_pr__nfet_01v8 +Model sky130_fd_pr__nfet_01v8 pin 1 == 3 +No property as found for device sky130_fd_pr__nfet_01v8 +No property ad found for device sky130_fd_pr__nfet_01v8 +No property ps found for device sky130_fd_pr__nfet_01v8 +No property pd found for device sky130_fd_pr__nfet_01v8 +No property nf found for device sky130_fd_pr__nfet_01v8 +No property nrd found for device sky130_fd_pr__nfet_01v8 +No property nrs found for device sky130_fd_pr__nfet_01v8 +No property area found for device sky130_fd_pr__nfet_01v8 +No property perim found for device sky130_fd_pr__nfet_01v8 +No property topography found for device sky130_fd_pr__nfet_01v8 +Model sky130_fd_pr__nfet_01v8_lvt pin 1 == 3 +No property as found for device sky130_fd_pr__nfet_01v8_lvt +No property ad found for device sky130_fd_pr__nfet_01v8_lvt +No property ps found for device sky130_fd_pr__nfet_01v8_lvt +No property pd found for device sky130_fd_pr__nfet_01v8_lvt +No property nf found for device sky130_fd_pr__nfet_01v8_lvt +No property nrd found for device sky130_fd_pr__nfet_01v8_lvt +No property nrs found for device sky130_fd_pr__nfet_01v8_lvt +No property area found for device sky130_fd_pr__nfet_01v8_lvt +No property perim found for device sky130_fd_pr__nfet_01v8_lvt +No property topography found for device sky130_fd_pr__nfet_01v8_lvt +Model sky130_fd_pr__nfet_03v3_nvt pin 1 == 3 +No property mult found for device sky130_fd_pr__nfet_03v3_nvt +No property sa found for device sky130_fd_pr__nfet_03v3_nvt +No property sb found for device sky130_fd_pr__nfet_03v3_nvt +No property sd found for device sky130_fd_pr__nfet_03v3_nvt +No property nf found for device sky130_fd_pr__nfet_03v3_nvt +No property nrd found for device sky130_fd_pr__nfet_03v3_nvt +No property nrs found for device sky130_fd_pr__nfet_03v3_nvt +No property area found for device sky130_fd_pr__nfet_03v3_nvt +No property perim found for device sky130_fd_pr__nfet_03v3_nvt +No property topography found for device sky130_fd_pr__nfet_03v3_nvt +Model sky130_fd_pr__pfet_01v8_hvt pin 1 == 3 +No property mult found for device sky130_fd_pr__pfet_01v8_hvt +No property sa found for device sky130_fd_pr__pfet_01v8_hvt +No property sb found for device sky130_fd_pr__pfet_01v8_hvt +No property sd found for device sky130_fd_pr__pfet_01v8_hvt +No property nf found for device sky130_fd_pr__pfet_01v8_hvt +No property nrd found for device sky130_fd_pr__pfet_01v8_hvt +No property nrs found for device sky130_fd_pr__pfet_01v8_hvt +No property area found for device sky130_fd_pr__pfet_01v8_hvt +No property perim found for device sky130_fd_pr__pfet_01v8_hvt +No property topography found for device sky130_fd_pr__pfet_01v8_hvt +Model sky130_fd_pr__pfet_01v8_hvt pin 1 == 3 +No property as found for device sky130_fd_pr__pfet_01v8_hvt +No property ad found for device sky130_fd_pr__pfet_01v8_hvt +No property ps found for device sky130_fd_pr__pfet_01v8_hvt +No property pd found for device sky130_fd_pr__pfet_01v8_hvt +No property nf found for device sky130_fd_pr__pfet_01v8_hvt +No property nrd found for device sky130_fd_pr__pfet_01v8_hvt +No property nrs found for device sky130_fd_pr__pfet_01v8_hvt +No property area found for device sky130_fd_pr__pfet_01v8_hvt +No property perim found for device sky130_fd_pr__pfet_01v8_hvt +No property topography found for device sky130_fd_pr__pfet_01v8_hvt +Model sky130_fd_pr__special_nfet_01v8 pin 1 == 3 +No property mult found for device sky130_fd_pr__special_nfet_01v8 +No property sa found for device sky130_fd_pr__special_nfet_01v8 +No property sb found for device sky130_fd_pr__special_nfet_01v8 +No property sd found for device sky130_fd_pr__special_nfet_01v8 +No property nf found for device sky130_fd_pr__special_nfet_01v8 +No property nrd found for device sky130_fd_pr__special_nfet_01v8 +No property nrs found for device sky130_fd_pr__special_nfet_01v8 +No property area found for device sky130_fd_pr__special_nfet_01v8 +No property perim found for device sky130_fd_pr__special_nfet_01v8 +No property topography found for device sky130_fd_pr__special_nfet_01v8 +Comparison output logged to file /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/reports/sky130hd/cryo//6_final_lvs.rpt +Logging to file "/home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/reports/sky130hd/cryo//6_final_lvs.rpt" enabled +Circuit sky130_fd_pr__nfet_01v8 contains no devices. +Circuit sky130_fd_pr__pfet_01v8_hvt contains no devices. + +Contents of circuit 1: Circuit: 'sky130_fd_sc_hd__dfxtp_1' +Circuit sky130_fd_sc_hd__dfxtp_1 contains 24 device instances. + Class: sky130_fd_pr__nfet_01v8 instances: 8 + Class: sky130_fd_pr__pfet_01v8_hvt instances: 12 + Class: sky130_fd_pr__special_nfet_01v8 instances: 4 +Circuit contains 18 nets. +Contents of circuit 2: Circuit: 'sky130_fd_sc_hd__dfxtp_1' +Circuit sky130_fd_sc_hd__dfxtp_1 contains 24 device instances. + Class: sky130_fd_pr__nfet_01v8 instances: 12 + Class: sky130_fd_pr__pfet_01v8_hvt instances: 12 +Circuit contains 18 nets. + +Circuit 1 contains 24 devices, Circuit 2 contains 24 devices. +Circuit 1 contains 18 nets, Circuit 2 contains 18 nets. + + Flattening non-matched subcircuits sky130_fd_sc_hd__dfxtp_1 sky130_fd_sc_hd__dfxtp_1 + +Flattening instances of sky130_fd_sc_hd__dfxtp_1 in file /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/objects/sky130hd/cryo//netgen_lvs/spice/cryoInst_lvsmag.spice +Flattening instances of sky130_fd_sc_hd__dfxtp_1 in file /home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/objects/sky130hd/cryo//netgen_lvs/spice/cryoInst.spice + +Contents of circuit 1: Circuit: 'sky130_fd_sc_hd__inv_1' +Circuit sky130_fd_sc_hd__inv_1 contains 2 device instances. + Class: sky130_fd_pr__nfet_01v8 instances: 1 + Class: sky130_fd_pr__pfet_01v8_hvt instances: 1 +Circuit contains 6 nets. +Contents of circuit 2: Circuit: 'sky130_fd_sc_hd__inv_1' +Circuit sky130_fd_sc_hd__inv_1 contains 2 device instances. + Class: sky130_fd_pr__nfet_01v8 instances: 1 + Class: sky130_fd_pr__pfet_01v8_hvt instances: 1 +Circuit contains 6 nets. + +Circuit 1 contains 2 devices, Circuit 2 contains 2 devices. +Circuit 1 contains 6 nets, Circuit 2 contains 6 nets. + + +Contents of circuit 1: Circuit: 'sky130_fd_sc_hd__decap_4' +Circuit sky130_fd_sc_hd__decap_4 contains 2 device instances. + Class: sky130_fd_pr__nfet_01v8 instances: 1 + Class: sky130_fd_pr__pfet_01v8_hvt instances: 1 +Circuit contains 4 nets. +Contents of circuit 2: Circuit: 'sky130_fd_sc_hd__decap_4' +Circuit sky130_fd_sc_hd__decap_4 contains 2 device instances. + Class: sky130_fd_pr__nfet_01v8 instances: 1 + Class: sky130_fd_pr__pfet_01v8_hvt instances: 1 +Circuit contains 4 nets. + +Circuit 1 contains 2 devices, Circuit 2 contains 2 devices. +Circuit 1 contains 4 nets, Circuit 2 contains 4 nets. + + +Contents of circuit 1: Circuit: 'sky130_fd_sc_hd__nand2_1' +Circuit sky130_fd_sc_hd__nand2_1 contains 4 device instances. + Class: sky130_fd_pr__nfet_01v8 instances: 2 + Class: sky130_fd_pr__pfet_01v8_hvt instances: 2 +Circuit contains 8 nets. +Contents of circuit 2: Circuit: 'sky130_fd_sc_hd__nand2_1' +Circuit sky130_fd_sc_hd__nand2_1 contains 4 device instances. + Class: sky130_fd_pr__nfet_01v8 instances: 2 + Class: sky130_fd_pr__pfet_01v8_hvt instances: 2 +Circuit contains 8 nets. + +Circuit 1 contains 4 devices, Circuit 2 contains 4 devices. +Circuit 1 contains 8 nets, Circuit 2 contains 8 nets. + + +Contents of circuit 1: Circuit: 'cryoInst' +Circuit cryoInst contains 420 device instances. + Class: sky130_fd_pr__nfet_01v8 instances: 80 + Class: sky130_fd_sc_hd__inv_1 instances: 155 + Class: sky130_fd_sc_hd__decap_4 instances: 24 + Class: sky130_fd_sc_hd__nand2_1 instances: 1 + Class: sky130_fd_pr__pfet_01v8_hvt instances: 120 + Class: sky130_fd_pr__special_nfet_01v8 instances: 40 +Circuit contains 279 nets. +Contents of circuit 2: Circuit: 'cryoInst' +Circuit cryoInst contains 420 device instances. + Class: sky130_fd_pr__nfet_01v8 instances: 120 + Class: sky130_fd_sc_hd__inv_1 instances: 155 + Class: sky130_fd_sc_hd__decap_4 instances: 24 + Class: sky130_fd_sc_hd__nand2_1 instances: 1 + Class: sky130_fd_pr__pfet_01v8_hvt instances: 120 +Circuit contains 279 nets. + +Circuit was modified by parallel/series device merging. +New circuit summary: + +Contents of circuit 1: Circuit: 'cryoInst' +Circuit cryoInst contains 397 device instances. + Class: sky130_fd_pr__nfet_01v8 instances: 80 + Class: sky130_fd_sc_hd__inv_1 instances: 155 + Class: sky130_fd_sc_hd__decap_4 instances: 1 + Class: sky130_fd_sc_hd__nand2_1 instances: 1 + Class: sky130_fd_pr__pfet_01v8_hvt instances: 120 + Class: sky130_fd_pr__special_nfet_01v8 instances: 40 +Circuit contains 279 nets. +Contents of circuit 2: Circuit: 'cryoInst' +Circuit cryoInst contains 397 device instances. + Class: sky130_fd_pr__nfet_01v8 instances: 120 + Class: sky130_fd_sc_hd__inv_1 instances: 155 + Class: sky130_fd_sc_hd__decap_4 instances: 1 + Class: sky130_fd_sc_hd__nand2_1 instances: 1 + Class: sky130_fd_pr__pfet_01v8_hvt instances: 120 +Circuit contains 279 nets. + +Circuit 1 contains 397 devices, Circuit 2 contains 397 devices. +Circuit 1 contains 279 nets, Circuit 2 contains 279 nets. + + +Final result: +Netlists do not match. +Logging to file "/home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow/reports/sky130hd/cryo//6_final_lvs.rpt" disabled +LVS Done. +make[1]: Leaving directory '/home/chetanya/OpenFASOC/openfasoc/generators/cryo-gen/flow' +total 35704 +-rw-r--r-- 1 root root 21208 Apr 15 14:51 1_1_yosys.v +-rw-r--r-- 1 root root 0 Apr 15 14:51 1_synth.sdc +-rw-r--r-- 1 root root 21208 Apr 15 14:51 1_synth.v +-rw-r--r-- 1 root root 23315 Apr 15 14:51 2_1_floorplan.def +-rw-r--r-- 1 root root 1784416 Apr 15 14:51 2_1_floorplan.odb +-rw-r--r-- 1 root root 1785656 Apr 15 14:51 2_2_floorplan_io.odb +-rw-r--r-- 1 root root 1785656 Apr 15 14:51 2_3_floorplan_tdms.odb +-rw-r--r-- 1 root root 1785656 Apr 15 14:51 2_4_floorplan_macro.odb +-rw-r--r-- 1 root root 1805889 Apr 15 14:51 2_5_floorplan_tapcell.odb +-rw-r--r-- 1 root root 1834388 Apr 15 14:51 2_6_floorplan_pdn.odb +-rw-r--r-- 1 root root 56537 Apr 15 14:51 2_floorplan.def +-rw-r--r-- 1 root root 1834388 Apr 15 14:51 2_floorplan.odb +-rw-r--r-- 1 root root 764 Apr 15 14:51 2_floorplan.sdc +-rw-r--r-- 1 root root 60353 Apr 15 14:51 2_floorplan_ro.def +-rw-r--r-- 1 root root 1833196 Apr 15 14:51 2_floorplan_ro.odb +-rw-r--r-- 1 root root 1842460 Apr 15 14:51 3_1_place_gp.odb +-rw-r--r-- 1 root root 1842460 Apr 15 14:51 3_5_place_dp.odb +-rw-r--r-- 1 root root 1842460 Apr 15 14:51 3_place.odb +-rw-r--r-- 1 root root 764 Apr 15 14:51 3_place.sdc +-rw-r--r-- 1 root root 1842460 Apr 15 14:51 4_1_cts.odb +-rw-r--r-- 1 root root 1949040 Apr 15 14:51 4_2_cts_fillcell.odb +-rw-r--r-- 1 root root 1949040 Apr 15 14:51 4_cts.odb +-rw-r--r-- 1 root root 764 Apr 15 14:51 4_cts.sdc +-rw-r--r-- 1 root root 1964240 Apr 15 14:51 5_1_grt.odb +-rw-r--r-- 1 root root 2019021 Apr 15 14:51 5_2_route.odb +-rw-r--r-- 1 root root 2019021 Apr 15 14:51 5_route.odb +-rw-r--r-- 1 root root 764 Apr 15 14:51 5_route.sdc +-rw-r--r-- 1 root root 2019021 Apr 15 14:51 6_1_fill.odb +-rw-r--r-- 1 root root 764 Apr 15 14:51 6_1_fill.sdc +-rw-r--r-- 1 root root 147602 Apr 15 14:51 6_1_merged.gds +-rw-r--r-- 1 root root 18313 Apr 15 14:52 6_final.cdl +-rw-r--r-- 1 root root 129126 Apr 15 14:51 6_final.def +-rw-r--r-- 1 root root 147602 Apr 15 14:51 6_final.gds +-rw-r--r-- 1 root root 2019021 Apr 15 14:51 6_final.odb +-rw-r--r-- 1 root root 764 Apr 15 14:51 6_final.sdc +-rw-r--r-- 1 root root 55245 Apr 15 14:51 6_final.spef +-rw-r--r-- 1 root root 41632 Apr 15 14:51 6_final.v +-rw-r--r-- 1 root root 15976 Apr 15 14:51 route.guide +#---------------------------------------------------------------------- +# Parsing command line arguments... +#---------------------------------------------------------------------- +['tools/cryo-gen.py', '--specfile', 'test.json', '--outputDir', './work', '--platform', 'sky130hd', '--mode', 'macro', '--ninv', '144', '--prepex'] +Loading specfile... +#---------------------------------------------------------------------- +# Cleaning the workspace... +#---------------------------------------------------------------------- +Loading platform_config file... + +PDK_ROOT value: /usr/bin/miniconda3/share/pdk/ +target number of inverters: 144 +#---------------------------------------------------------------------- +# Verilog Generation +#---------------------------------------------------------------------- +#---------------------------------------------------------------------- +# Verilog Generated +#---------------------------------------------------------------------- + +#---------------------------------------------------------------------- +# Run Synthesis and APR +#---------------------------------------------------------------------- +#---------------------------------------------------------------------- +# Place and Route finished +#---------------------------------------------------------------------- +#---------------------------------------------------------------------- +# DRC finished +#---------------------------------------------------------------------- +#---------------------------------------------------------------------- +# LVS finished +#---------------------------------------------------------------------- +genDir + args.outputDir: tools/.././work +flowDir: tools/../flow/ +args.platform: sky130hd +designName: cryoInst +#---------------------------------------------------------------------- +# Macro Generated +#---------------------------------------------------------------------- + +Exiting tool.... diff --git a/openfasoc/generators/gdsfactory-gen/diff_test.gds b/openfasoc/generators/gdsfactory-gen/diff_test.gds new file mode 100644 index 0000000000000000000000000000000000000000..ec52a176bb3e7d894272ddceb07fec9f4dc94eeb GIT binary patch literal 114468 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 literal 0 HcmV?d00001 diff --git a/openfasoc/generators/gdsfactory-gen/test_lvs.py b/openfasoc/generators/gdsfactory-gen/test_lvs.py new file mode 100644 index 000000000..23aa49b49 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/test_lvs.py @@ -0,0 +1,17 @@ +from glayout.primitives.fet import nmos +from glayout.pdk.sky130_mapped import sky130_mapped_pdk as sky130 +from glayout.components.diff_pair import diff_pair +import re + +mydiff = diff_pair(sky130) +mydiff.name = 'diff_test' +mydiff.write_gds('../temp-sense-gen/flow/results/sky130hd/tempsense/6_final.gds') + +mynet = mydiff.info['netlist'].generate_netlist() +print(type(mynet)) +mynet = mynet.replace('DIFF_PAIR', 'diff_test') + +# mynet = re.sub(mynet, 'DIFF_PAIR', 'diff_test') +net_file = '../temp-sense-gen/flow/results/sky130hd/tempsense/6_final.cdl' +with open(net_file, 'w') as wf: + wf.write(mynet) diff --git a/openfasoc/generators/temp-sense-gen/flow/Makefile b/openfasoc/generators/temp-sense-gen/flow/Makefile index 97438a0c4..e27b9eff8 100644 --- a/openfasoc/generators/temp-sense-gen/flow/Makefile +++ b/openfasoc/generators/temp-sense-gen/flow/Makefile @@ -63,7 +63,7 @@ endif $(info [INFO][FLOW] Using platform directory $(PLATFORM_DIR)) include $(PLATFORM_DIR)/config.mk - +export DESIGN_NAME = diff_test export GALLERY_REPORT ?= 0 # Enables hierarchical yosys export SYNTH_HIERARCHICAL ?= 0 @@ -228,7 +228,7 @@ versions.txt: # LVS specific global var for this generator #------------------------------------------------------------------------------- -export __open_generator_name__=temp-sense-gen +export __open_generator_name__=diff_test # Pre-process libraries # ============================================================================== @@ -269,377 +269,6 @@ $(WRAPPED_LEFS): $(WRAPPED_LIBS): mkdir -p $(OBJECTS_DIR)/lib sed 's/library(\(.*\))/library(\1_mod)/g' $(filter %$(notdir $(@:_mod.lib=.lib)),$(WRAP_LIBS)) | sed 's/cell(\(.*\))/cell(\1_mod)/g' > $@ - -# ============================================================================== -# ______ ___ _ _____ _ _ _____ ____ ___ ____ -# / ___\ \ / / \ | |_ _| | | | ____/ ___|_ _/ ___| -# \___ \\ V /| \| | | | | |_| | _| \___ \| |\___ \ -# ___) || | | |\ | | | | _ | |___ ___) | | ___) | -# |____/ |_| |_| \_| |_| |_| |_|_____|____/___|____/ -# -synth: versions.txt \ - $(RESULTS_DIR)/1_synth.v \ - $(RESULTS_DIR)/1_synth.sdc -# ============================================================================== - - -# Run Synthesis using yosys -#------------------------------------------------------------------------------- -SYNTH_SCRIPT ?= $(SCRIPTS_DIR)/synth.tcl - -$(SYNTH_STOP_MODULE_SCRIPT): - mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) - ($(TIME_CMD) $(YOSYS_CMD) $(YOSYS_FLAGS) -c $(HIER_REPORT_SCRIPT)) 2>&1 | tee $(LOG_DIR)/1_1_yosys_hier_report.log - -ifeq ($(SYNTH_HIERARCHICAL), 1) -$(RESULTS_DIR)/1_1_yosys.v: $(SYNTH_STOP_MODULE_SCRIPT) -endif - -$(RESULTS_DIR)/1_1_yosys.v: $(DONT_USE_LIBS) $(WRAPPED_LIBS) $(DONT_USE_SC_LIB) $(DFF_LIB_FILE) $(VERILOG_FILES) $(CACHED_NETLIST) $(LATCH_MAP_FILE) $(ADDER_MAP_FILE) - mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) - ($(TIME_CMD) $(YOSYS_CMD) $(YOSYS_FLAGS) -c $(SYNTH_SCRIPT)) 2>&1 | tee $(LOG_DIR)/1_1_yosys.log - -$(RESULTS_DIR)/1_synth.v: $(RESULTS_DIR)/1_1_yosys.v - mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) - cp $< $@ - -$(RESULTS_DIR)/1_synth.sdc: $(SDC_FILE) - mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) - cp $< $@ - -clean_synth: - rm -f $(RESULTS_DIR)/1_*.v $(RESULTS_DIR)/1_synth.sdc - rm -f $(REPORTS_DIR)/synth_* - rm -f $(LOG_DIR)/1_* - rm -f $(SYNTH_STOP_MODULE_SCRIPT) - rm -rf _tmp_yosys-abc-* - - -# ============================================================================== -# _____ _ ___ ___ ____ ____ _ _ _ _ -# | ___| | / _ \ / _ \| _ \| _ \| | / \ | \ | | -# | |_ | | | | | | | | | |_) | |_) | | / _ \ | \| | -# | _| | |__| |_| | |_| | _ <| __/| |___ / ___ \| |\ | -# |_| |_____\___/ \___/|_| \_\_| |_____/_/ \_\_| \_| -# -floorplan: $(RESULTS_DIR)/2_floorplan.odb \ - $(RESULTS_DIR)/2_floorplan.sdc -# ============================================================================== - -ifneq ($(FOOTPRINT),) -IS_CHIP = 1 -else ifneq ($(FOOTPRINT_TCL),) -IS_CHIP = 1 -endif - -# STEP 1: Translate verilog to odb -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/2_1_floorplan.odb: $(RESULTS_DIR)/1_synth.v $(RESULTS_DIR)/1_synth.sdc $(TECH_LEF) $(SC_LEF) $(ADDITIONAL_LEFS) $(FOOTPRINT) $(SIG_MAP_FILE) $(FOOTPRINT_TCL) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/floorplan.tcl -metrics $(LOG_DIR)/2_1_floorplan.json) 2>&1 | tee $(LOG_DIR)/2_1_floorplan.log - - -# STEP 2: IO Placement (random) -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/2_2_floorplan_io.odb: $(RESULTS_DIR)/2_1_floorplan.odb $(IO_CONSTRAINTS) -ifndef IS_CHIP - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/io_placement_random.tcl -metrics $(LOG_DIR)/2_2_floorplan_io.json) 2>&1 | tee $(LOG_DIR)/2_2_floorplan_io.log -else - cp $< $@ -endif - -# STEP 3: Timing Driven Mixed Sized Placement -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/2_3_floorplan_tdms.odb: $(RESULTS_DIR)/2_2_floorplan_io.odb $(RESULTS_DIR)/1_synth.v $(RESULTS_DIR)/1_synth.sdc $(LIB_FILES) -ifeq ($(MACRO_PLACEMENT),) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/tdms_place.tcl -metrics $(LOG_DIR)/2_3_tdms.json) 2>&1 | tee $(LOG_DIR)/2_3_tdms_place.log -else - $(info [INFO][FLOW] Using manual macro placement file $(MACRO_PLACEMENT)) - cp $< $@ -endif - -# STEP 4: Macro Placement -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/2_4_floorplan_macro.odb: $(RESULTS_DIR)/2_3_floorplan_tdms.odb $(RESULTS_DIR)/1_synth.v $(RESULTS_DIR)/1_synth.sdc $(MACRO_PLACEMENT) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/macro_place.tcl -metrics $(LOG_DIR)/2_4_mplace.json) 2>&1 | tee $(LOG_DIR)/2_4_mplace.log - -# STEP 5: Tapcell and Welltie insertion -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/2_5_floorplan_tapcell.odb: $(RESULTS_DIR)/2_4_floorplan_macro.odb $(TAPCELL_TCL) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/tapcell.tcl -metrics $(LOG_DIR)/2_5_tapcell.json) 2>&1 | tee $(LOG_DIR)/2_5_tapcell.log - - -# STEP 6: PDN generation -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/2_6_floorplan_pdn.odb: $(RESULTS_DIR)/2_5_floorplan_tapcell.odb $(PDN_CFG) $(PDN_TCL) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/pdn.tcl -metrics $(LOG_DIR)/2_6_pdn.json) 2>&1 | tee $(LOG_DIR)/2_6_pdn.log - -$(RESULTS_DIR)/2_floorplan.odb: $(RESULTS_DIR)/2_6_floorplan_pdn.odb - cp $< $@ - -$(RESULTS_DIR)/2_floorplan.sdc: $(RESULTS_DIR)/2_1_floorplan.odb - - -clean_floorplan: - rm -f $(RESULTS_DIR)/2_*floorplan*.odb $(RESULTS_DIR)/2_floorplan.sdc $(RESULTS_DIR)/2_floorplan.v $(RESULTS_DIR)/2_*floorplan.def - rm -f $(REPORTS_DIR)/2_* - rm -f $(LOG_DIR)/2_* - -# ============================================================================== -# ____ _ _ ____ _____ -# | _ \| | / \ / ___| ____| -# | |_) | | / _ \| | | _| -# | __/| |___ / ___ \ |___| |___ -# |_| |_____/_/ \_\____|_____| -# -place: $(RESULTS_DIR)/3_place.odb \ - $(RESULTS_DIR)/3_place.sdc -# ============================================================================== -# STEP 1: Global placement without placed IOs, timing-driven, and routability-driven. -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/3_1_place_gp_skip_io.odb: $(RESULTS_DIR)/2_floorplan.odb $(RESULTS_DIR)/2_floorplan.sdc $(LIB_FILES) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/global_place_skip_io.tcl -metrics $(LOG_DIR)/3_1_place_gp_skip_io.json) 2>&1 | tee $(LOG_DIR)/3_1_place_gp_skip_io.log - -# STEP 2: IO placement (non-random) -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/3_2_place_iop.odb: $(RESULTS_DIR)/3_1_place_gp_skip_io.odb $(IO_CONSTRAINTS) -ifndef IS_CHIP - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/io_placement.tcl -metrics $(LOG_DIR)/3_2_place_iop.json) 2>&1 | tee $(LOG_DIR)/3_2_place_iop.log -else - cp $< $@ -endif - -# STEP 3: Global placement with placed IOs, timing-driven, and routability-driven. -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/3_3_place_gp.odb: $(RESULTS_DIR)/3_2_place_iop.odb $(RESULTS_DIR)/2_floorplan.sdc $(LIB_FILES) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/global_place.tcl -metrics $(LOG_DIR)/3_3_place_gp.json) 2>&1 | tee $(LOG_DIR)/3_3_place_gp.log - -# # STEP 4: Resizing & Buffering (not needed for the tempsense) -# #------------------------------------------------------------------------------- -# $(RESULTS_DIR)/3_4_place_resized.odb: $(RESULTS_DIR)/3_3_place_gp.odb $(RESULTS_DIR)/2_floorplan.sdc -# ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/resize.tcl -metrics $(LOG_DIR)/3_4_resizer.json) 2>&1 | tee $(LOG_DIR)/3_4_resizer.log -# -# clean_resize: -# rm -f $(RESULTS_DIR)/3_4_place_resized.odb -$(RESULTS_DIR)/3_4_place_resized.odb: $(RESULTS_DIR)/3_3_place_gp.odb # just copy file to not break dependencies - cp $< $@ - -# STEP 5: Detail placement -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/3_5_place_dp.odb: $(RESULTS_DIR)/3_4_place_resized.odb - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/detail_place.tcl -metrics $(LOG_DIR)/3_5_opendp.json) 2>&1 | tee $(LOG_DIR)/3_5_opendp.log - -$(RESULTS_DIR)/3_place.odb: $(RESULTS_DIR)/3_5_place_dp.odb - cp $< $@ - -$(RESULTS_DIR)/3_place.sdc: $(RESULTS_DIR)/2_floorplan.sdc - cp $< $@ - -# Clean Targets -#------------------------------------------------------------------------------- -clean_place: - rm -f $(RESULTS_DIR)/3_*place*.odb - rm -f $(RESULTS_DIR)/3_place.sdc - rm -f $(REPORTS_DIR)/3_* - rm -f $(LOG_DIR)/3_* - - -# ============================================================================== -# ____ _____ ____ -# / ___|_ _/ ___| -# | | | | \___ \ -# | |___ | | ___) | -# \____| |_| |____/ -# -cts: $(RESULTS_DIR)/4_cts.odb \ - $(RESULTS_DIR)/4_cts.sdc -# ============================================================================== - -# # Run TritonCTS (not needed for the tempsense) -# # ------------------------------------------------------------------------------ -# $(RESULTS_DIR)/4_1_cts.odb: $(RESULTS_DIR)/3_place.odb $(RESULTS_DIR)/3_place.sdc -# ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/cts.tcl -metrics $(LOG_DIR)/4_1_cts.json) 2>&1 | tee $(LOG_DIR)/4_1_cts.log -$(RESULTS_DIR)/4_1_cts.odb: $(RESULTS_DIR)/3_place.odb $(RESULTS_DIR)/3_place.sdc # just copy file to not break dependencies - cp $< $@ - -# Filler cell insertion -# ------------------------------------------------------------------------------ -$(RESULTS_DIR)/4_2_cts_fillcell.odb: $(RESULTS_DIR)/4_1_cts.odb - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/fillcell.tcl -metrics $(LOG_DIR)/4_2_cts_fillcell.json) 2>&1 | tee $(LOG_DIR)/4_2_cts_fillcell.log - -# $(RESULTS_DIR)/4_cts.sdc: $(RESULTS_DIR)/4_cts.odb -# Changed due to suppresion of TritonCTS step -$(RESULTS_DIR)/4_cts.sdc: $(RESULTS_DIR)/3_place.sdc # just copy file to not break dependencies - cp $< $@ - -$(RESULTS_DIR)/4_cts.odb: $(RESULTS_DIR)/4_2_cts_fillcell.odb - cp $< $@ - -clean_cts: - rm -rf $(RESULTS_DIR)/4_*cts*.odb $(RESULTS_DIR)/4_cts.sdc $(RESULTS_DIR)/4_cts.v $(RESULTS_DIR)/4_*cts.def - rm -f $(REPORTS_DIR)/4_* - rm -f $(LOG_DIR)/4_* - - -# ============================================================================== -# ____ ___ _ _ _____ ___ _ _ ____ -# | _ \ / _ \| | | |_ _|_ _| \ | |/ ___| -# | |_) | | | | | | | | | | || \| | | _ -# | _ <| |_| | |_| | | | | || |\ | |_| | -# |_| \_\\___/ \___/ |_| |___|_| \_|\____| -# -route: $(RESULTS_DIR)/5_route.odb \ - $(RESULTS_DIR)/5_route.sdc -# ============================================================================== - - -# STEP 1: Run global route -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/5_1_grt.odb: $(RESULTS_DIR)/4_cts.odb $(RESULTS_DIR)/4_cts.sdc $(FASTROUTE_TCL) $(PRE_GLOBAL_ROUTE) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/global_route.tcl -metrics $(LOG_DIR)/5_1_fastroute.json) 2>&1 | tee $(LOG_DIR)/5_1_fastroute.log - - -# STEP 2: Run detailed route -#------------------------------------------------------------------------------- -ifeq ($(USE_WXL),) -$(RESULTS_DIR)/5_2_route.odb: $(RESULTS_DIR)/5_1_grt.odb -else -$(RESULTS_DIR)/5_2_route.odb: $(RESULTS_DIR)/4_cts.odb -endif - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/detail_route.tcl -metrics $(LOG_DIR)/5_2_TritonRoute.json) 2>&1 | tee $(LOG_DIR)/5_2_TritonRoute.log - -$(RESULTS_DIR)/5_route.odb: $(RESULTS_DIR)/5_2_route.odb - cp $< $@ - -$(RESULTS_DIR)/5_route.sdc: $(RESULTS_DIR)/4_cts.sdc - cp $< $@ - -clean_route: - rm -rf output*/ results*.out.dmp layer_*.mps - rm -rf *.gdid *.log *.met *.sav *.res.dmp - rm -rf $(RESULTS_DIR)/route.guide $(RESULTS_DIR)/output_guide.mod $(RESULTS_DIR)/updated_clks.sdc - rm -rf $(RESULTS_DIR)/5_*.odb $(RESULTS_DIR)/5_route.sdc - rm -f $(REPORTS_DIR)/5_* - rm -f $(LOG_DIR)/5_* - -klayout_tr_rpt: $(RESULTS_DIR)/5_route.def $(OBJECTS_DIR)/klayout.lyt - $(call KLAYOUT_FOUND) - $(KLAYOUT_CMD) -rd in_drc="$(REPORTS_DIR)/5_route_drc.rpt" \ - -rd in_def="$<" \ - -rd tech_file=$(OBJECTS_DIR)/klayout.lyt \ - -rm $(UTILS_DIR)/viewDrc.py - -klayout_guides: $(RESULTS_DIR)/5_route.def $(OBJECTS_DIR)/klayout.lyt - $(call KLAYOUT_FOUND) - $(KLAYOUT_CMD) -rd in_guide="$(RESULTS_DIR)/route.guide" \ - -rd in_def="$<" \ - -rd net_name=$(GUIDE_NET) \ - -rd tech_file=$(OBJECTS_DIR)/klayout.lyt \ - -rm $(UTILS_DIR)/viewGuide.py - -# ============================================================================== -# _____ ___ _ _ ___ ____ _ _ ___ _ _ ____ -# | ___|_ _| \ | |_ _/ ___|| | | |_ _| \ | |/ ___| -# | |_ | || \| || |\___ \| |_| || || \| | | _ -# | _| | || |\ || | ___) | _ || || |\ | |_| | -# |_| |___|_| \_|___|____/|_| |_|___|_| \_|\____| -# -GDS_FINAL_FILE = $(RESULTS_DIR)/6_final.$(STREAM_SYSTEM_EXT) -finish: $(LOG_DIR)/6_report.log \ - $(RESULTS_DIR)/6_final.v \ - $(RESULTS_DIR)/6_final.sdc \ - $(GDS_FINAL_FILE) -# ============================================================================== - -ifneq ($(USE_FILL),) -$(RESULTS_DIR)/6_1_fill.odb: $(RESULTS_DIR)/5_route.odb $(FILL_CONFIG) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/density_fill.tcl -metrics $(LOG_DIR)/6_density_fill.json) 2>&1 | tee $(LOG_DIR)/6_density_fill.log -else -$(RESULTS_DIR)/6_1_fill.odb: $(RESULTS_DIR)/5_route.odb - cp $< $@ -endif - -$(RESULTS_DIR)/6_1_fill.sdc: $(RESULTS_DIR)/5_route.sdc - cp $< $@ - -$(RESULTS_DIR)/6_final.sdc: $(RESULTS_DIR)/5_route.sdc - cp $< $@ - -$(LOG_DIR)/6_report.log: $(RESULTS_DIR)/6_1_fill.odb $(RESULTS_DIR)/6_1_fill.sdc - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/final_report.tcl -metrics $(LOG_DIR)/6_report.json) 2>&1 | tee $(LOG_DIR)/6_report.log - -$(RESULTS_DIR)/6_final.def: $(LOG_DIR)/6_report.log - -generate_abstract: $(RESULTS_DIR)/6_final.gds $(RESULTS_DIR)/6_final.def $(RESULTS_DIR)/6_final.v - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/generate_abstract.tcl -metrics $(LOG_DIR)/generate_abstract.json) 2>&1 | tee $(LOG_DIR)/generate_abstract.log - -# Merge wrapped macros using Klayout -#------------------------------------------------------------------------------- -$(WRAPPED_GDSOAS): $(OBJECTS_DIR)/klayout_wrap.lyt $(WRAPPED_LEFS) - $(call KLAYOUT_FOUND) - ($(TIME_CMD) $(KLAYOUT_CMD) -zz -rd design_name=$(basename $(notdir $@)) \ - -rd in_def=$(OBJECTS_DIR)/def/$(notdir $(@:$(STREAM_SYSTEM_EXT)=def)) \ - -rd in_files="$(ADDITIONAL_GDSOAS)" \ - -rd config_file=$(FILL_CONFIG) \ - -rd seal_file="" \ - -rd out_file=$@ \ - -rd tech_file=$(OBJECTS_DIR)/klayout_wrap.lyt \ - -rd layer_map=$(GDS_LAYER_MAP) \ - -r $(UTILS_DIR)/def2stream.py) 2>&1 | tee $(LOG_DIR)/6_merge_$(basename $(notdir $@)).log - -# Merge GDS using Klayout -#------------------------------------------------------------------------------- -GDS_MERGED_FILE = $(RESULTS_DIR)/6_1_merged.$(STREAM_SYSTEM_EXT) -$(GDS_MERGED_FILE): $(RESULTS_DIR)/6_final.def $(OBJECTS_DIR)/klayout.lyt $(GDSOAS_FILES) $(WRAPPED_GDSOAS) $(SEAL_GDSOAS) - $(call KLAYOUT_FOUND) - ($(TIME_CMD) stdbuf -o L $(KLAYOUT_CMD) -zz -rd design_name=$(DESIGN_NAME) \ - -rd in_def=$< \ - -rd in_files="$(GDSOAS_FILES) $(WRAPPED_GDSOAS)" \ - -rd config_file=$(FILL_CONFIG) \ - -rd seal_file="$(SEAL_GDSOAS)" \ - -rd out_file=$@ \ - -rd tech_file=$(OBJECTS_DIR)/klayout.lyt \ - -rd layer_map=$(GDS_LAYER_MAP) \ - -r $(UTILS_DIR)/def2stream.py) 2>&1 | tee $(LOG_DIR)/6_1_merge.log - -$(RESULTS_DIR)/6_final.v: $(LOG_DIR)/6_report.log - -$(GDS_FINAL_FILE): $(GDS_MERGED_FILE) - cp $^ $@ - -drc: $(REPORTS_DIR)/6_drc.lyrdb - -$(REPORTS_DIR)/6_drc.lyrdb: $(GDS_FINAL_FILE) $(KLAYOUT_DRC_FILE) -ifneq ($(KLAYOUT_DRC_FILE),) - $(call KLAYOUT_FOUND) - ($(TIME_CMD) $(KLAYOUT_CMD) -zz -rd in_gds="$<" \ - -rd report_file=$(abspath $@) \ - -r $(KLAYOUT_DRC_FILE)) 2>&1 | tee $(LOG_DIR)/6_drc.log - # Hacky way of getting DRV count (don't error on no matches) - grep -c "" $@ > $(REPORTS_DIR)/6_drc_count.rpt || [[ $$? == 1 ]] -else - echo "DRC not supported on this platform" > $@ -endif - -$(RESULTS_DIR)/6_final.cdl: $(RESULTS_DIR)/6_final.v - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/cdl.tcl) 2>&1 | tee $(LOG_DIR)/6_cdl.log - -$(OBJECTS_DIR)/6_final_concat.cdl: $(RESULTS_DIR)/6_final.cdl $(CDL_FILE) - cat $^ > $@ - -lvs: $(RESULTS_DIR)/6_lvs.lvsdb - -$(RESULTS_DIR)/6_lvs.lvsdb: $(GDS_FINAL_FILE) $(KLAYOUT_LVS_FILE) $(OBJECTS_DIR)/6_final_concat.cdl -ifneq ($(KLAYOUT_LVS_FILE),) - $(call KLAYOUT_FOUND) - ($(TIME_CMD) $(KLAYOUT_CMD) -b -rd in_gds="$<" \ - -rd cdl_file=$(abspath $(OBJECTS_DIR)/6_final_concat.cdl) \ - -rd report_file=$(abspath $@) \ - -r $(KLAYOUT_LVS_FILE)) 2>&1 | tee $(LOG_DIR)/6_lvs.log -else - echo "LVS not supported on this platform" > $@ -endif - -# Other tools for DRC and LVS export COMMON_VERIF_DIR = $(COMMON_HOME)/drc-lvs-check magic_drc: $(RESULTS_DIR)/6_final.gds @@ -659,74 +288,3 @@ endif mkdir -p $(OBJECTS_DIR)/netgen_lvs/spice $(OBJECTS_DIR)/netgen_lvs/ext python3 $(UTILS_DIR)/openfasoc/cdl_parser.py -i $(RESULTS_DIR)/6_final.cdl -s $(PLATFORM_DIR)/cdl/sky130_fd_sc_hd.spice -o $(OBJECTS_DIR)/netgen_lvs/spice/$(DESIGN_NAME).spice $(COMMON_VERIF_DIR)/run_lvspex.sh $(RESULTS_DIR)/6_final.gds $(DESIGN_NAME) $(REPORTS_DIR)/6_final_lvs.rpt - -clean_finish: - rm -rf $(RESULTS_DIR)/6_*.gds $(RESULTS_DIR)/6_*.oas $(RESULTS_DIR)/6_*.odb $(RESULTS_DIR)/6_*.v $(RESULTS_DIR)/6_*.sdc $(RESULTS_DIR)/6_*.spef - rm -rf $(REPORTS_DIR)/6_*.rpt - rm -f $(LOG_DIR)/6_* - - -# ============================================================================== -# __ __ ___ ____ ____ -# | \/ |_ _/ ___| / ___| -# | |\/| || |\___ \| | -# | | | || | ___) | |___ -# |_| |_|___|____/ \____| -# -# ============================================================================== - -all: $(SDC_FILE) $(WRAPPED_LIBS) $(DONT_USE_LIBS) $(OBJECTS_DIR)/klayout.lyt $(WRAPPED_GDSOAS) $(DONT_USE_SC_LIB) - mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/run_all.tcl -metrics $(LOG_DIR)/run_all.json) 2>&1 | tee $(LOG_DIR)/run_all.log - -clean: - @echo - @echo "Make clean disabled." - @echo "Use make clean_all or clean individual steps:" - @echo " clean_synth clean_floorplan clean_place clean_cts clean_route clean_finish" - @echo - -clean_all: clean_synth clean_floorplan clean_place clean_cts clean_route clean_finish clean_metadata - rm -rf $(OBJECTS_DIR) - -nuke: clean_test clean_issues - rm -rf ./results ./logs ./reports ./objects - rm -rf layer_*.mps macrocell.list *best.plt *_pdn.def dummy.guide - rm -rf *.rpt *.rpt.old *.def.v pin_dumper.log - rm -rf versions.txt - - -# DEF/GDS/OAS viewer shortcuts -#------------------------------------------------------------------------------- -RESULTS_ODB = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.odb))) -RESULTS_DEF = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.def))) -RESULTS_GDS = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.gds))) -RESULTS_OAS = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.oas))) -$(foreach file,$(RESULTS_DEF) $(RESULTS_GDS) $(RESULTS_OAS),klayout_$(file)): klayout_%: $(OBJECTS_DIR)/klayout.lyt - $(KLAYOUT_CMD) -nn $(OBJECTS_DIR)/klayout.lyt $(RESULTS_DIR)/$* - -gui_floorplan: gui_2_floorplan.odb -gui_place: gui_3_place.odb -gui_cts: gui_4_cts.odb -gui_route: gui_5_route.odb -gui_final: gui_6_final.odb - -$(foreach file,$(RESULTS_DEF),gui_$(file)): gui_%: - DEF_FILE=$(RESULTS_DIR)/$* $(OPENROAD_GUI_CMD) $(SCRIPTS_DIR)/gui.tcl - -$(foreach file,$(RESULTS_ODB),gui_$(file)): gui_%: - ODB_FILE=$(RESULTS_DIR)/$* $(OPENROAD_GUI_CMD) $(SCRIPTS_DIR)/gui.tcl - -# Write a def for the corresponding odb -$(foreach file,$(RESULTS_ODB),$(file).def): %.def: - ODB_FILE=$(RESULTS_DIR)/$* DEF_FILE=$(RESULTS_DIR)/$@ $(OPENROAD_CMD) $(SCRIPTS_DIR)/write_def.tcl - -all_defs : $(foreach file,$(RESULTS_ODB),$(file).def) - -print-% : ; @echo $* = $($*) - -# Utilities -#------------------------------------------------------------------------------- -include $(UTILS_DIR)/utils.mk -export PRIVATE_DIR ?= ../../private_tool_scripts --include $(PRIVATE_DIR)/private.mk diff --git a/openfasoc/generators/temp-sense-gen/flow/util/openfasoc/cdl_parser.py b/openfasoc/generators/temp-sense-gen/flow/util/openfasoc/cdl_parser.py index a72affd89..a59e8a9dc 100755 --- a/openfasoc/generators/temp-sense-gen/flow/util/openfasoc/cdl_parser.py +++ b/openfasoc/generators/temp-sense-gen/flow/util/openfasoc/cdl_parser.py @@ -72,6 +72,8 @@ with open(args.outputCdl, "w") as wf: ckt_re = re.search("(\.SUBCKT.*\n(\+.*\n)*)((.*\n)*)(\.ENDS.*)", filedata) + if not ckt_re: + ckt_re = re.search("(\.subckt.*\n(\+.*\n)*)((.*\n)*)(\.ends.*)", filedata) ckt_head = ckt_re.group(1) ckt_cells = ckt_re.group(3) ckt_end = ckt_re.group(5) diff --git a/openfasoc/generators/temp-sense-gen/mkfile b/openfasoc/generators/temp-sense-gen/mkfile new file mode 100644 index 000000000..97438a0c4 --- /dev/null +++ b/openfasoc/generators/temp-sense-gen/mkfile @@ -0,0 +1,732 @@ +DESIGN_CONFIG ?= ./design/sky130hd/tempsense/config.mk + +# If we are running headless use offscreen rendering for save_image +ifndef DISPLAY +export QT_QPA_PLATFORM ?= offscreen +endif + +# ============================================================================== +# ____ _____ _____ _ _ ____ +# / ___|| ____|_ _| | | | _ \ +# \___ \| _| | | | | | | |_) | +# ___) | |___ | | | |_| | __/ +# |____/|_____| |_| \___/|_| +# +# ============================================================================== + +#------------------------------------------------------------------------------- +# Default target when invoking without specific target. +.DEFAULT_GOAL := finish + +#------------------------------------------------------------------------------- +# Proper way to initiate SHELL for make +SHELL = /bin/bash +.SHELLFLAGS = -o pipefail -c + +#------------------------------------------------------------------------------- +# Setup variables to point to root / head of the OpenROAD directory +# - the following settings allowed user to point OpenROAD binaries to different +# location +# - default follows OpenFASOC's directory structure, with absolute path to flow/ +export FLOW_HOME ?= $(shell pwd) +export COMMON_HOME ?= $(FLOW_HOME)/../../../common + +#------------------------------------------------------------------------------- +# Setup variables to point to other location for the following sub directory +# - designs - default is under current directory +# - platforms - default is under current directory +# - work home - default is current directory +# - utils, scripts, test - default is under current directory +export DESIGN_HOME ?= $(FLOW_HOME)/design +export PLATFORM_HOME ?= $(COMMON_HOME)/platforms +export WORK_HOME ?= $(shell pwd) + +export UTILS_DIR ?= $(FLOW_HOME)/util +export SCRIPTS_DIR ?= $(FLOW_HOME)/scripts +export TEST_DIR ?= $(FLOW_HOME)/test + +#------------------------------------------------------------------------------- +# Include design and platform configuration +include $(DESIGN_CONFIG) + +PUBLIC=nangate45 sky130hd sky130hs asap7 + +ifneq ($(wildcard $(PLATFORM_HOME)/$(PLATFORM)),) + export PLATFORM_DIR = $(PLATFORM_HOME)/$(PLATFORM) +else ifneq ($(findstring $(PLATFORM),$(PUBLIC)),) + export PLATFORM_DIR = ./platforms/$(PLATFORM) +else ifneq ($(wildcard ../../$(PLATFORM)),) + export PLATFORM_DIR = ../../$(PLATFORM) +else + $(error [ERROR][FLOW] Platform '$(PLATFORM)' not found.) +endif + +$(info [INFO][FLOW] Using platform directory $(PLATFORM_DIR)) +include $(PLATFORM_DIR)/config.mk + +export GALLERY_REPORT ?= 0 +# Enables hierarchical yosys +export SYNTH_HIERARCHICAL ?= 0 +export SYNTH_STOP_MODULE_SCRIPT = $(OBJECTS_DIR)/mark_hier_stop_modules.tcl +ifeq ($(SYNTH_HIERARCHICAL), 1) +export HIER_REPORT_SCRIPT = $(SCRIPTS_DIR)/synth_hier_report.tcl +export MAX_UNGROUP_SIZE ?= 0 +endif +# Enables Re-synthesis for area reclaim +export RESYNTH_AREA_RECOVER ?= 0 +export RESYNTH_TIMING_RECOVER ?= 0 +export ABC_AREA ?= 0 + +# Global setting for Synthesis +export SYNTH_ARGS ?= -flatten + +# Global setting for Floorplan +export PLACE_PINS_ARGS + +#export FLOW_VARIANT ?= base + +export GPL_TIMING_DRIVEN ?= 1 +export GPL_ROUTABILITY_DRIVEN ?= 1 + +export ENABLE_DPO ?= 1 +export DPO_MAX_DISPLACEMENT ?= 5 1 + +# Setup working directories +export DESIGN_NICKNAME ?= $(DESIGN_NAME) + +export DESIGN_DIR = $(dir $(DESIGN_CONFIG)) +export LOG_DIR = $(WORK_HOME)/logs/$(PLATFORM)/$(DESIGN_NICKNAME)/$(FLOW_VARIANT) +export OBJECTS_DIR = $(WORK_HOME)/objects/$(PLATFORM)/$(DESIGN_NICKNAME)/$(FLOW_VARIANT) +export REPORTS_DIR = $(WORK_HOME)/reports/$(PLATFORM)/$(DESIGN_NICKNAME)/$(FLOW_VARIANT) +export RESULTS_DIR = $(WORK_HOME)/results/$(PLATFORM)/$(DESIGN_NICKNAME)/$(FLOW_VARIANT) + +ifdef BLOCKS + $(info [INFO][FLOW] Invoked hierarchical flow.) + $(foreach block,$(BLOCKS),$(info Block ${block} needs to be hardened.)) + $(foreach block,$(BLOCKS),$(eval BLOCK_CONFIGS += ./designs/$(PLATFORM)/$(DESIGN_NICKNAME)/$(block)/config.mk)) + $(foreach block,$(BLOCKS),$(eval BLOCK_LEFS += ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/${block}.lef)) + $(foreach block,$(BLOCKS),$(eval BLOCK_GDS += ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/6_final.gds)) + $(foreach block,$(BLOCKS),$(eval BLOCK_CDL += ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/6_final.cdl)) + export ADDITIONAL_LEFS += $(BLOCK_LEFS) + export ADDITIONAL_GDS += $(BLOCK_GDS) + export GDS_FILES += $(BLOCK_GDS) + ifdef CDL_FILES + export CDL_FILES += $(BLOCK_CDL) + endif +endif + +export RTLMP_RPT_DIR ?= $(OBJECTS_DIR)/rtlmp +export RTLMP_RPT_FILE ?= partition.txt +export RTLMP_BLOCKAGE_FILE ?= $(OBJECTS_DIR)/rtlmp/partition.txt.blockage + +#------------------------------------------------------------------------------- +ifeq (, $(strip $(NPROC))) + # Linux (utility program) + NPROC := $(shell nproc 2>/dev/null) + + ifeq (, $(strip $(NPROC))) + # Linux (generic) + NPROC := $(shell grep -c ^processor /proc/cpuinfo 2>/dev/null) + endif + ifeq (, $(strip $(NPROC))) + # BSD (at least FreeBSD and Mac OSX) + NPROC := $(shell sysctl -n hw.ncpu 2>/dev/null) + endif + ifeq (, $(strip $(NPROC))) + # Fallback + NPROC := 1 + endif +endif +export NUM_CORES := $(NPROC) + +export LSORACLE_CMD ?= $(shell command -v lsoracle) +ifeq ($(LSORACLE_CMD),) + LSORACLE_CMD = $(abspath $(FLOW_HOME)/../tools/install/LSOracle/bin/lsoracle) +endif + +LSORACLE_PLUGIN ?= $(abspath $(FLOW_HOME)/../tools/install/yosys/share/yosys/plugin/oracle.so) +export LSORACLE_KAHYPAR_CONFIG ?= $(abspath $(FLOW_HOME)/../tools/install/LSOracle/share/lsoracle/test.ini) +ifneq ($(USE_LSORACLE),) + YOSYS_FLAGS ?= -m $(LSORACLE_PLUGIN) +endif + +YOSYS_FLAGS += -v 3 + +#------------------------------------------------------------------------------- +# setup all commands used within this flow +TIME_CMD = /usr/bin/time -f 'Elapsed time: %E[h:]min:sec. CPU time: user %U sys %S (%P). Peak memory: %MKB.' +TIME_TEST = $(shell $(TIME_CMD) echo foo 2>/dev/null) +ifeq (, $(strip $(TIME_TEST))) + TIME_CMD = /usr/bin/time +endif + +# The following determine the executable location for each tool used by this flow. +# Priority is given to +# 1 user include path to the executable prior to running make +# 2 user explicit set with variable in Makefile or command line +OPENROAD_EXE ?= $(shell command -v openroad) +ifeq ($(OPENROAD_EXE),) +# OPENROAD_EXE = $(abspath $(FLOW_HOME)/../tools/install/OpenROAD/bin/openroad) + $(error OpenROAD not found in PATH) +endif +OPENROAD_ARGS = -no_init $(OR_ARGS) +OPENROAD_CMD = $(OPENROAD_EXE) -exit $(OPENROAD_ARGS) +OPENROAD_NO_EXIT_CMD = $(OPENROAD_EXE) $(OPENROAD_ARGS) +OPENROAD_GUI_CMD = $(OPENROAD_EXE) -gui $(OR_ARGS) + +YOSYS_CMD ?= $(shell command -v yosys) +ifeq ($(YOSYS_CMD),) +# YOSYS_CMD = $(abspath $(FLOW_HOME)/../tools/install/yosys/bin/yosys) + $(error Yosys not found in PATH) +endif + +KLAYOUT_CMD ?= $(shell command -v klayout) + +KLAYOUT_FOUND = $(if $(KLAYOUT_CMD),,$(error KLayout not found in PATH)) + +#------------------------------------------------------------------------------- +WRAPPED_LEFS = $(foreach lef,$(notdir $(WRAP_LEFS)),$(OBJECTS_DIR)/lef/$(lef:.lef=_mod.lef)) +WRAPPED_LIBS = $(foreach lib,$(notdir $(WRAP_LIBS)),$(OBJECTS_DIR)/$(lib:.lib=_mod.lib)) +export ADDITIONAL_LEFS += $(WRAPPED_LEFS) $(WRAP_LEFS) +export LIB_FILES += $(WRAP_LIBS) $(WRAPPED_LIBS) + +export DONT_USE_LIBS = $(patsubst %.lib.gz, %.lib, $(addprefix $(OBJECTS_DIR)/lib/, $(notdir $(LIB_FILES)))) +export DONT_USE_SC_LIB ?= $(firstword $(DONT_USE_LIBS)) + +# Stream system used for final result (GDS is default): GDS, GSDII, GDS2, OASIS, or OAS +STREAM_SYSTEM ?= GDS +ifneq ($(findstring GDS,$(shell echo $(STREAM_SYSTEM) | tr '[:lower:]' '[:upper:]')),) + export STREAM_SYSTEM_EXT := gds + GDSOAS_FILES = $(GDS_FILES) + ADDITIONAL_GDSOAS = $(ADDITIONAL_GDS) + SEAL_GDSOAS = $(SEAL_GDS) +else + export STREAM_SYSTEM_EXT := oas + GDSOAS_FILES = $(OAS_FILES) + ADDITIONAL_GDSOAS = $(ADDITIONAL_OAS) + SEAL_GDSOAS = $(SEAL_OAS) +endif +export WRAPPED_GDSOAS = $(foreach lef,$(notdir $(WRAP_LEFS)),$(OBJECTS_DIR)/$(lef:.lef=_mod.$(STREAM_SYSTEM_EXT))) + + +# Targets to harden Blocks in case of hierarchical flow is triggered +build_macros: $(BLOCK_LEFS) + +$(foreach block,$(BLOCKS),$(eval ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/${block}.lef: ./designs/$(PLATFORM)/$(DESIGN_NICKNAME)/${block}/config.mk)) +$(foreach block,$(BLOCKS),$(eval ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/6_final.gds: ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/${block}.lef)) + +$(BLOCK_LEFS): + $(MAKE) DESIGN_CONFIG=$< generate_abstract + +# Utility to print tool version information +#------------------------------------------------------------------------------- +.PHONY: versions.txt +versions.txt: + @$(YOSYS_CMD) -V > $@ + @echo openroad `$(OPENROAD_EXE) -version` >> $@ + @$(KLAYOUT_CMD) -zz -v >> $@ + +# LVS specific global var for this generator +#------------------------------------------------------------------------------- +export __open_generator_name__=temp-sense-gen + +# Pre-process libraries +# ============================================================================== + +# Create temporary Liberty files which have the proper dont_use properties set +# For use with Yosys and ABC +.SECONDEXPANSION: +$(DONT_USE_LIBS): $$(filter %$$(@F) %$$(@F).gz,$(LIB_FILES)) + @mkdir -p $(OBJECTS_DIR)/lib + $(UTILS_DIR)/markDontUse.py -p "$(DONT_USE_CELLS)" -i $^ -o $@ + +$(OBJECTS_DIR)/lib/merged.lib: + $(UTILS_DIR)/mergeLib.pl $(PLATFORM)_merged $(DONT_USE_LIBS) > $@ + +# Pre-process KLayout tech +# ============================================================================== +$(OBJECTS_DIR)/klayout_tech.lef: $(TECH_LEF) + @mkdir -p $(OBJECTS_DIR) + sed '/OR_DEFAULT/d' $< > $@ + + $(OBJECTS_DIR)/klayout.lyt: $(KLAYOUT_TECH_FILE) $(OBJECTS_DIR)/klayout_tech.lef + sed 's,.*,$(foreach file, $(OBJECTS_DIR)/klayout_tech.lef $(SC_LEF) $(ADDITIONAL_LEFS),$(abspath $(file))),g' $< > $@ + +$(OBJECTS_DIR)/klayout_wrap.lyt: $(KLAYOUT_TECH_FILE) $(OBJECTS_DIR)/klayout_tech.lef + sed 's,.*,$(foreach file, $(OBJECTS_DIR)/klayout_tech.lef $(WRAP_LEFS),$(abspath $(file))),g' $< > $@ +# Create Macro wrappers (if necessary) +# ============================================================================== +WRAP_CFG = $(PLATFORM_DIR)/wrapper.cfg + + +export TCLLIBPATH := util/cell-veneer $(TCLLIBPATH) +$(WRAPPED_LEFS): + mkdir -p $(OBJECTS_DIR)/lef $(OBJECTS_DIR)/def + util/cell-veneer/wrap.tcl -cfg $(WRAP_CFG) -macro $(filter %$(notdir $(@:_mod.lef=.lef)),$(WRAP_LEFS)) + mv $(notdir $@) $@ + mv $(notdir $(@:lef=def)) $(dir $@)../def/$(notdir $(@:lef=def)) + +$(WRAPPED_LIBS): + mkdir -p $(OBJECTS_DIR)/lib + sed 's/library(\(.*\))/library(\1_mod)/g' $(filter %$(notdir $(@:_mod.lib=.lib)),$(WRAP_LIBS)) | sed 's/cell(\(.*\))/cell(\1_mod)/g' > $@ + +# ============================================================================== +# ______ ___ _ _____ _ _ _____ ____ ___ ____ +# / ___\ \ / / \ | |_ _| | | | ____/ ___|_ _/ ___| +# \___ \\ V /| \| | | | | |_| | _| \___ \| |\___ \ +# ___) || | | |\ | | | | _ | |___ ___) | | ___) | +# |____/ |_| |_| \_| |_| |_| |_|_____|____/___|____/ +# +synth: versions.txt \ + $(RESULTS_DIR)/1_synth.v \ + $(RESULTS_DIR)/1_synth.sdc +# ============================================================================== + + +# Run Synthesis using yosys +#------------------------------------------------------------------------------- +SYNTH_SCRIPT ?= $(SCRIPTS_DIR)/synth.tcl + +$(SYNTH_STOP_MODULE_SCRIPT): + mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) + ($(TIME_CMD) $(YOSYS_CMD) $(YOSYS_FLAGS) -c $(HIER_REPORT_SCRIPT)) 2>&1 | tee $(LOG_DIR)/1_1_yosys_hier_report.log + +ifeq ($(SYNTH_HIERARCHICAL), 1) +$(RESULTS_DIR)/1_1_yosys.v: $(SYNTH_STOP_MODULE_SCRIPT) +endif + +$(RESULTS_DIR)/1_1_yosys.v: $(DONT_USE_LIBS) $(WRAPPED_LIBS) $(DONT_USE_SC_LIB) $(DFF_LIB_FILE) $(VERILOG_FILES) $(CACHED_NETLIST) $(LATCH_MAP_FILE) $(ADDER_MAP_FILE) + mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) + ($(TIME_CMD) $(YOSYS_CMD) $(YOSYS_FLAGS) -c $(SYNTH_SCRIPT)) 2>&1 | tee $(LOG_DIR)/1_1_yosys.log + +$(RESULTS_DIR)/1_synth.v: $(RESULTS_DIR)/1_1_yosys.v + mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) + cp $< $@ + +$(RESULTS_DIR)/1_synth.sdc: $(SDC_FILE) + mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) + cp $< $@ + +clean_synth: + rm -f $(RESULTS_DIR)/1_*.v $(RESULTS_DIR)/1_synth.sdc + rm -f $(REPORTS_DIR)/synth_* + rm -f $(LOG_DIR)/1_* + rm -f $(SYNTH_STOP_MODULE_SCRIPT) + rm -rf _tmp_yosys-abc-* + + +# ============================================================================== +# _____ _ ___ ___ ____ ____ _ _ _ _ +# | ___| | / _ \ / _ \| _ \| _ \| | / \ | \ | | +# | |_ | | | | | | | | | |_) | |_) | | / _ \ | \| | +# | _| | |__| |_| | |_| | _ <| __/| |___ / ___ \| |\ | +# |_| |_____\___/ \___/|_| \_\_| |_____/_/ \_\_| \_| +# +floorplan: $(RESULTS_DIR)/2_floorplan.odb \ + $(RESULTS_DIR)/2_floorplan.sdc +# ============================================================================== + +ifneq ($(FOOTPRINT),) +IS_CHIP = 1 +else ifneq ($(FOOTPRINT_TCL),) +IS_CHIP = 1 +endif + +# STEP 1: Translate verilog to odb +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/2_1_floorplan.odb: $(RESULTS_DIR)/1_synth.v $(RESULTS_DIR)/1_synth.sdc $(TECH_LEF) $(SC_LEF) $(ADDITIONAL_LEFS) $(FOOTPRINT) $(SIG_MAP_FILE) $(FOOTPRINT_TCL) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/floorplan.tcl -metrics $(LOG_DIR)/2_1_floorplan.json) 2>&1 | tee $(LOG_DIR)/2_1_floorplan.log + + +# STEP 2: IO Placement (random) +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/2_2_floorplan_io.odb: $(RESULTS_DIR)/2_1_floorplan.odb $(IO_CONSTRAINTS) +ifndef IS_CHIP + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/io_placement_random.tcl -metrics $(LOG_DIR)/2_2_floorplan_io.json) 2>&1 | tee $(LOG_DIR)/2_2_floorplan_io.log +else + cp $< $@ +endif + +# STEP 3: Timing Driven Mixed Sized Placement +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/2_3_floorplan_tdms.odb: $(RESULTS_DIR)/2_2_floorplan_io.odb $(RESULTS_DIR)/1_synth.v $(RESULTS_DIR)/1_synth.sdc $(LIB_FILES) +ifeq ($(MACRO_PLACEMENT),) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/tdms_place.tcl -metrics $(LOG_DIR)/2_3_tdms.json) 2>&1 | tee $(LOG_DIR)/2_3_tdms_place.log +else + $(info [INFO][FLOW] Using manual macro placement file $(MACRO_PLACEMENT)) + cp $< $@ +endif + +# STEP 4: Macro Placement +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/2_4_floorplan_macro.odb: $(RESULTS_DIR)/2_3_floorplan_tdms.odb $(RESULTS_DIR)/1_synth.v $(RESULTS_DIR)/1_synth.sdc $(MACRO_PLACEMENT) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/macro_place.tcl -metrics $(LOG_DIR)/2_4_mplace.json) 2>&1 | tee $(LOG_DIR)/2_4_mplace.log + +# STEP 5: Tapcell and Welltie insertion +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/2_5_floorplan_tapcell.odb: $(RESULTS_DIR)/2_4_floorplan_macro.odb $(TAPCELL_TCL) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/tapcell.tcl -metrics $(LOG_DIR)/2_5_tapcell.json) 2>&1 | tee $(LOG_DIR)/2_5_tapcell.log + + +# STEP 6: PDN generation +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/2_6_floorplan_pdn.odb: $(RESULTS_DIR)/2_5_floorplan_tapcell.odb $(PDN_CFG) $(PDN_TCL) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/pdn.tcl -metrics $(LOG_DIR)/2_6_pdn.json) 2>&1 | tee $(LOG_DIR)/2_6_pdn.log + +$(RESULTS_DIR)/2_floorplan.odb: $(RESULTS_DIR)/2_6_floorplan_pdn.odb + cp $< $@ + +$(RESULTS_DIR)/2_floorplan.sdc: $(RESULTS_DIR)/2_1_floorplan.odb + + +clean_floorplan: + rm -f $(RESULTS_DIR)/2_*floorplan*.odb $(RESULTS_DIR)/2_floorplan.sdc $(RESULTS_DIR)/2_floorplan.v $(RESULTS_DIR)/2_*floorplan.def + rm -f $(REPORTS_DIR)/2_* + rm -f $(LOG_DIR)/2_* + +# ============================================================================== +# ____ _ _ ____ _____ +# | _ \| | / \ / ___| ____| +# | |_) | | / _ \| | | _| +# | __/| |___ / ___ \ |___| |___ +# |_| |_____/_/ \_\____|_____| +# +place: $(RESULTS_DIR)/3_place.odb \ + $(RESULTS_DIR)/3_place.sdc +# ============================================================================== +# STEP 1: Global placement without placed IOs, timing-driven, and routability-driven. +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/3_1_place_gp_skip_io.odb: $(RESULTS_DIR)/2_floorplan.odb $(RESULTS_DIR)/2_floorplan.sdc $(LIB_FILES) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/global_place_skip_io.tcl -metrics $(LOG_DIR)/3_1_place_gp_skip_io.json) 2>&1 | tee $(LOG_DIR)/3_1_place_gp_skip_io.log + +# STEP 2: IO placement (non-random) +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/3_2_place_iop.odb: $(RESULTS_DIR)/3_1_place_gp_skip_io.odb $(IO_CONSTRAINTS) +ifndef IS_CHIP + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/io_placement.tcl -metrics $(LOG_DIR)/3_2_place_iop.json) 2>&1 | tee $(LOG_DIR)/3_2_place_iop.log +else + cp $< $@ +endif + +# STEP 3: Global placement with placed IOs, timing-driven, and routability-driven. +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/3_3_place_gp.odb: $(RESULTS_DIR)/3_2_place_iop.odb $(RESULTS_DIR)/2_floorplan.sdc $(LIB_FILES) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/global_place.tcl -metrics $(LOG_DIR)/3_3_place_gp.json) 2>&1 | tee $(LOG_DIR)/3_3_place_gp.log + +# # STEP 4: Resizing & Buffering (not needed for the tempsense) +# #------------------------------------------------------------------------------- +# $(RESULTS_DIR)/3_4_place_resized.odb: $(RESULTS_DIR)/3_3_place_gp.odb $(RESULTS_DIR)/2_floorplan.sdc +# ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/resize.tcl -metrics $(LOG_DIR)/3_4_resizer.json) 2>&1 | tee $(LOG_DIR)/3_4_resizer.log +# +# clean_resize: +# rm -f $(RESULTS_DIR)/3_4_place_resized.odb +$(RESULTS_DIR)/3_4_place_resized.odb: $(RESULTS_DIR)/3_3_place_gp.odb # just copy file to not break dependencies + cp $< $@ + +# STEP 5: Detail placement +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/3_5_place_dp.odb: $(RESULTS_DIR)/3_4_place_resized.odb + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/detail_place.tcl -metrics $(LOG_DIR)/3_5_opendp.json) 2>&1 | tee $(LOG_DIR)/3_5_opendp.log + +$(RESULTS_DIR)/3_place.odb: $(RESULTS_DIR)/3_5_place_dp.odb + cp $< $@ + +$(RESULTS_DIR)/3_place.sdc: $(RESULTS_DIR)/2_floorplan.sdc + cp $< $@ + +# Clean Targets +#------------------------------------------------------------------------------- +clean_place: + rm -f $(RESULTS_DIR)/3_*place*.odb + rm -f $(RESULTS_DIR)/3_place.sdc + rm -f $(REPORTS_DIR)/3_* + rm -f $(LOG_DIR)/3_* + + +# ============================================================================== +# ____ _____ ____ +# / ___|_ _/ ___| +# | | | | \___ \ +# | |___ | | ___) | +# \____| |_| |____/ +# +cts: $(RESULTS_DIR)/4_cts.odb \ + $(RESULTS_DIR)/4_cts.sdc +# ============================================================================== + +# # Run TritonCTS (not needed for the tempsense) +# # ------------------------------------------------------------------------------ +# $(RESULTS_DIR)/4_1_cts.odb: $(RESULTS_DIR)/3_place.odb $(RESULTS_DIR)/3_place.sdc +# ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/cts.tcl -metrics $(LOG_DIR)/4_1_cts.json) 2>&1 | tee $(LOG_DIR)/4_1_cts.log +$(RESULTS_DIR)/4_1_cts.odb: $(RESULTS_DIR)/3_place.odb $(RESULTS_DIR)/3_place.sdc # just copy file to not break dependencies + cp $< $@ + +# Filler cell insertion +# ------------------------------------------------------------------------------ +$(RESULTS_DIR)/4_2_cts_fillcell.odb: $(RESULTS_DIR)/4_1_cts.odb + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/fillcell.tcl -metrics $(LOG_DIR)/4_2_cts_fillcell.json) 2>&1 | tee $(LOG_DIR)/4_2_cts_fillcell.log + +# $(RESULTS_DIR)/4_cts.sdc: $(RESULTS_DIR)/4_cts.odb +# Changed due to suppresion of TritonCTS step +$(RESULTS_DIR)/4_cts.sdc: $(RESULTS_DIR)/3_place.sdc # just copy file to not break dependencies + cp $< $@ + +$(RESULTS_DIR)/4_cts.odb: $(RESULTS_DIR)/4_2_cts_fillcell.odb + cp $< $@ + +clean_cts: + rm -rf $(RESULTS_DIR)/4_*cts*.odb $(RESULTS_DIR)/4_cts.sdc $(RESULTS_DIR)/4_cts.v $(RESULTS_DIR)/4_*cts.def + rm -f $(REPORTS_DIR)/4_* + rm -f $(LOG_DIR)/4_* + + +# ============================================================================== +# ____ ___ _ _ _____ ___ _ _ ____ +# | _ \ / _ \| | | |_ _|_ _| \ | |/ ___| +# | |_) | | | | | | | | | | || \| | | _ +# | _ <| |_| | |_| | | | | || |\ | |_| | +# |_| \_\\___/ \___/ |_| |___|_| \_|\____| +# +route: $(RESULTS_DIR)/5_route.odb \ + $(RESULTS_DIR)/5_route.sdc +# ============================================================================== + + +# STEP 1: Run global route +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/5_1_grt.odb: $(RESULTS_DIR)/4_cts.odb $(RESULTS_DIR)/4_cts.sdc $(FASTROUTE_TCL) $(PRE_GLOBAL_ROUTE) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/global_route.tcl -metrics $(LOG_DIR)/5_1_fastroute.json) 2>&1 | tee $(LOG_DIR)/5_1_fastroute.log + + +# STEP 2: Run detailed route +#------------------------------------------------------------------------------- +ifeq ($(USE_WXL),) +$(RESULTS_DIR)/5_2_route.odb: $(RESULTS_DIR)/5_1_grt.odb +else +$(RESULTS_DIR)/5_2_route.odb: $(RESULTS_DIR)/4_cts.odb +endif + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/detail_route.tcl -metrics $(LOG_DIR)/5_2_TritonRoute.json) 2>&1 | tee $(LOG_DIR)/5_2_TritonRoute.log + +$(RESULTS_DIR)/5_route.odb: $(RESULTS_DIR)/5_2_route.odb + cp $< $@ + +$(RESULTS_DIR)/5_route.sdc: $(RESULTS_DIR)/4_cts.sdc + cp $< $@ + +clean_route: + rm -rf output*/ results*.out.dmp layer_*.mps + rm -rf *.gdid *.log *.met *.sav *.res.dmp + rm -rf $(RESULTS_DIR)/route.guide $(RESULTS_DIR)/output_guide.mod $(RESULTS_DIR)/updated_clks.sdc + rm -rf $(RESULTS_DIR)/5_*.odb $(RESULTS_DIR)/5_route.sdc + rm -f $(REPORTS_DIR)/5_* + rm -f $(LOG_DIR)/5_* + +klayout_tr_rpt: $(RESULTS_DIR)/5_route.def $(OBJECTS_DIR)/klayout.lyt + $(call KLAYOUT_FOUND) + $(KLAYOUT_CMD) -rd in_drc="$(REPORTS_DIR)/5_route_drc.rpt" \ + -rd in_def="$<" \ + -rd tech_file=$(OBJECTS_DIR)/klayout.lyt \ + -rm $(UTILS_DIR)/viewDrc.py + +klayout_guides: $(RESULTS_DIR)/5_route.def $(OBJECTS_DIR)/klayout.lyt + $(call KLAYOUT_FOUND) + $(KLAYOUT_CMD) -rd in_guide="$(RESULTS_DIR)/route.guide" \ + -rd in_def="$<" \ + -rd net_name=$(GUIDE_NET) \ + -rd tech_file=$(OBJECTS_DIR)/klayout.lyt \ + -rm $(UTILS_DIR)/viewGuide.py + +# ============================================================================== +# _____ ___ _ _ ___ ____ _ _ ___ _ _ ____ +# | ___|_ _| \ | |_ _/ ___|| | | |_ _| \ | |/ ___| +# | |_ | || \| || |\___ \| |_| || || \| | | _ +# | _| | || |\ || | ___) | _ || || |\ | |_| | +# |_| |___|_| \_|___|____/|_| |_|___|_| \_|\____| +# +GDS_FINAL_FILE = $(RESULTS_DIR)/6_final.$(STREAM_SYSTEM_EXT) +finish: $(LOG_DIR)/6_report.log \ + $(RESULTS_DIR)/6_final.v \ + $(RESULTS_DIR)/6_final.sdc \ + $(GDS_FINAL_FILE) +# ============================================================================== + +ifneq ($(USE_FILL),) +$(RESULTS_DIR)/6_1_fill.odb: $(RESULTS_DIR)/5_route.odb $(FILL_CONFIG) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/density_fill.tcl -metrics $(LOG_DIR)/6_density_fill.json) 2>&1 | tee $(LOG_DIR)/6_density_fill.log +else +$(RESULTS_DIR)/6_1_fill.odb: $(RESULTS_DIR)/5_route.odb + cp $< $@ +endif + +$(RESULTS_DIR)/6_1_fill.sdc: $(RESULTS_DIR)/5_route.sdc + cp $< $@ + +$(RESULTS_DIR)/6_final.sdc: $(RESULTS_DIR)/5_route.sdc + cp $< $@ + +$(LOG_DIR)/6_report.log: $(RESULTS_DIR)/6_1_fill.odb $(RESULTS_DIR)/6_1_fill.sdc + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/final_report.tcl -metrics $(LOG_DIR)/6_report.json) 2>&1 | tee $(LOG_DIR)/6_report.log + +$(RESULTS_DIR)/6_final.def: $(LOG_DIR)/6_report.log + +generate_abstract: $(RESULTS_DIR)/6_final.gds $(RESULTS_DIR)/6_final.def $(RESULTS_DIR)/6_final.v + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/generate_abstract.tcl -metrics $(LOG_DIR)/generate_abstract.json) 2>&1 | tee $(LOG_DIR)/generate_abstract.log + +# Merge wrapped macros using Klayout +#------------------------------------------------------------------------------- +$(WRAPPED_GDSOAS): $(OBJECTS_DIR)/klayout_wrap.lyt $(WRAPPED_LEFS) + $(call KLAYOUT_FOUND) + ($(TIME_CMD) $(KLAYOUT_CMD) -zz -rd design_name=$(basename $(notdir $@)) \ + -rd in_def=$(OBJECTS_DIR)/def/$(notdir $(@:$(STREAM_SYSTEM_EXT)=def)) \ + -rd in_files="$(ADDITIONAL_GDSOAS)" \ + -rd config_file=$(FILL_CONFIG) \ + -rd seal_file="" \ + -rd out_file=$@ \ + -rd tech_file=$(OBJECTS_DIR)/klayout_wrap.lyt \ + -rd layer_map=$(GDS_LAYER_MAP) \ + -r $(UTILS_DIR)/def2stream.py) 2>&1 | tee $(LOG_DIR)/6_merge_$(basename $(notdir $@)).log + +# Merge GDS using Klayout +#------------------------------------------------------------------------------- +GDS_MERGED_FILE = $(RESULTS_DIR)/6_1_merged.$(STREAM_SYSTEM_EXT) +$(GDS_MERGED_FILE): $(RESULTS_DIR)/6_final.def $(OBJECTS_DIR)/klayout.lyt $(GDSOAS_FILES) $(WRAPPED_GDSOAS) $(SEAL_GDSOAS) + $(call KLAYOUT_FOUND) + ($(TIME_CMD) stdbuf -o L $(KLAYOUT_CMD) -zz -rd design_name=$(DESIGN_NAME) \ + -rd in_def=$< \ + -rd in_files="$(GDSOAS_FILES) $(WRAPPED_GDSOAS)" \ + -rd config_file=$(FILL_CONFIG) \ + -rd seal_file="$(SEAL_GDSOAS)" \ + -rd out_file=$@ \ + -rd tech_file=$(OBJECTS_DIR)/klayout.lyt \ + -rd layer_map=$(GDS_LAYER_MAP) \ + -r $(UTILS_DIR)/def2stream.py) 2>&1 | tee $(LOG_DIR)/6_1_merge.log + +$(RESULTS_DIR)/6_final.v: $(LOG_DIR)/6_report.log + +$(GDS_FINAL_FILE): $(GDS_MERGED_FILE) + cp $^ $@ + +drc: $(REPORTS_DIR)/6_drc.lyrdb + +$(REPORTS_DIR)/6_drc.lyrdb: $(GDS_FINAL_FILE) $(KLAYOUT_DRC_FILE) +ifneq ($(KLAYOUT_DRC_FILE),) + $(call KLAYOUT_FOUND) + ($(TIME_CMD) $(KLAYOUT_CMD) -zz -rd in_gds="$<" \ + -rd report_file=$(abspath $@) \ + -r $(KLAYOUT_DRC_FILE)) 2>&1 | tee $(LOG_DIR)/6_drc.log + # Hacky way of getting DRV count (don't error on no matches) + grep -c "" $@ > $(REPORTS_DIR)/6_drc_count.rpt || [[ $$? == 1 ]] +else + echo "DRC not supported on this platform" > $@ +endif + +$(RESULTS_DIR)/6_final.cdl: $(RESULTS_DIR)/6_final.v + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/cdl.tcl) 2>&1 | tee $(LOG_DIR)/6_cdl.log + +$(OBJECTS_DIR)/6_final_concat.cdl: $(RESULTS_DIR)/6_final.cdl $(CDL_FILE) + cat $^ > $@ + +lvs: $(RESULTS_DIR)/6_lvs.lvsdb + +$(RESULTS_DIR)/6_lvs.lvsdb: $(GDS_FINAL_FILE) $(KLAYOUT_LVS_FILE) $(OBJECTS_DIR)/6_final_concat.cdl +ifneq ($(KLAYOUT_LVS_FILE),) + $(call KLAYOUT_FOUND) + ($(TIME_CMD) $(KLAYOUT_CMD) -b -rd in_gds="$<" \ + -rd cdl_file=$(abspath $(OBJECTS_DIR)/6_final_concat.cdl) \ + -rd report_file=$(abspath $@) \ + -r $(KLAYOUT_LVS_FILE)) 2>&1 | tee $(LOG_DIR)/6_lvs.log +else + echo "LVS not supported on this platform" > $@ +endif + +# Other tools for DRC and LVS +export COMMON_VERIF_DIR = $(COMMON_HOME)/drc-lvs-check + +magic_drc: $(RESULTS_DIR)/6_final.gds +ifeq ($(shell command -v magic),) + $(error Magic not found in PATH) +endif + $(COMMON_VERIF_DIR)/run_drc.sh + # magic -rcfile $(COMMON_VERIF_DIR)/sky130A/sky130A.magicrc -noconsole -dnull $(COMMON_VERIF_DIR)/magic_commands.tcl < /dev/null + +netgen_lvs: $(RESULTS_DIR)/6_final.gds $(RESULTS_DIR)/6_final.cdl +ifeq ($(shell command -v netgen),) + $(error Netgen not found in PATH) +endif +ifeq ($(shell command -v magic),) + $(error Magic not found in PATH) +endif + mkdir -p $(OBJECTS_DIR)/netgen_lvs/spice $(OBJECTS_DIR)/netgen_lvs/ext + python3 $(UTILS_DIR)/openfasoc/cdl_parser.py -i $(RESULTS_DIR)/6_final.cdl -s $(PLATFORM_DIR)/cdl/sky130_fd_sc_hd.spice -o $(OBJECTS_DIR)/netgen_lvs/spice/$(DESIGN_NAME).spice + $(COMMON_VERIF_DIR)/run_lvspex.sh $(RESULTS_DIR)/6_final.gds $(DESIGN_NAME) $(REPORTS_DIR)/6_final_lvs.rpt + +clean_finish: + rm -rf $(RESULTS_DIR)/6_*.gds $(RESULTS_DIR)/6_*.oas $(RESULTS_DIR)/6_*.odb $(RESULTS_DIR)/6_*.v $(RESULTS_DIR)/6_*.sdc $(RESULTS_DIR)/6_*.spef + rm -rf $(REPORTS_DIR)/6_*.rpt + rm -f $(LOG_DIR)/6_* + + +# ============================================================================== +# __ __ ___ ____ ____ +# | \/ |_ _/ ___| / ___| +# | |\/| || |\___ \| | +# | | | || | ___) | |___ +# |_| |_|___|____/ \____| +# +# ============================================================================== + +all: $(SDC_FILE) $(WRAPPED_LIBS) $(DONT_USE_LIBS) $(OBJECTS_DIR)/klayout.lyt $(WRAPPED_GDSOAS) $(DONT_USE_SC_LIB) + mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/run_all.tcl -metrics $(LOG_DIR)/run_all.json) 2>&1 | tee $(LOG_DIR)/run_all.log + +clean: + @echo + @echo "Make clean disabled." + @echo "Use make clean_all or clean individual steps:" + @echo " clean_synth clean_floorplan clean_place clean_cts clean_route clean_finish" + @echo + +clean_all: clean_synth clean_floorplan clean_place clean_cts clean_route clean_finish clean_metadata + rm -rf $(OBJECTS_DIR) + +nuke: clean_test clean_issues + rm -rf ./results ./logs ./reports ./objects + rm -rf layer_*.mps macrocell.list *best.plt *_pdn.def dummy.guide + rm -rf *.rpt *.rpt.old *.def.v pin_dumper.log + rm -rf versions.txt + + +# DEF/GDS/OAS viewer shortcuts +#------------------------------------------------------------------------------- +RESULTS_ODB = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.odb))) +RESULTS_DEF = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.def))) +RESULTS_GDS = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.gds))) +RESULTS_OAS = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.oas))) +$(foreach file,$(RESULTS_DEF) $(RESULTS_GDS) $(RESULTS_OAS),klayout_$(file)): klayout_%: $(OBJECTS_DIR)/klayout.lyt + $(KLAYOUT_CMD) -nn $(OBJECTS_DIR)/klayout.lyt $(RESULTS_DIR)/$* + +gui_floorplan: gui_2_floorplan.odb +gui_place: gui_3_place.odb +gui_cts: gui_4_cts.odb +gui_route: gui_5_route.odb +gui_final: gui_6_final.odb + +$(foreach file,$(RESULTS_DEF),gui_$(file)): gui_%: + DEF_FILE=$(RESULTS_DIR)/$* $(OPENROAD_GUI_CMD) $(SCRIPTS_DIR)/gui.tcl + +$(foreach file,$(RESULTS_ODB),gui_$(file)): gui_%: + ODB_FILE=$(RESULTS_DIR)/$* $(OPENROAD_GUI_CMD) $(SCRIPTS_DIR)/gui.tcl + +# Write a def for the corresponding odb +$(foreach file,$(RESULTS_ODB),$(file).def): %.def: + ODB_FILE=$(RESULTS_DIR)/$* DEF_FILE=$(RESULTS_DIR)/$@ $(OPENROAD_CMD) $(SCRIPTS_DIR)/write_def.tcl + +all_defs : $(foreach file,$(RESULTS_ODB),$(file).def) + +print-% : ; @echo $* = $($*) + +# Utilities +#------------------------------------------------------------------------------- +include $(UTILS_DIR)/utils.mk +export PRIVATE_DIR ?= ../../private_tool_scripts +-include $(PRIVATE_DIR)/private.mk From e5e364b09e6be5d4fb14322f41961ea2dcec9ad2 Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Wed, 17 Apr 2024 07:05:36 +0000 Subject: [PATCH 02/20] add lvs check v1 --- .../generators/gdsfactory-gen/diff_test.gds | Bin 114468 -> 0 bytes .../gdsfactory-gen/lvs_flow/.gitignore | 7 + .../gdsfactory-gen/lvs_flow/Makefile | 291 ++++++++++++++++++ .../gdsfactory-gen/lvs_flow/test_lvs.py | 105 +++++++ .../lvs_flow/util/openfasoc/README.md | 1 + .../lvs_flow/util/openfasoc/cdl_parser.py | 95 ++++++ .../generators/gdsfactory-gen/test_lvs.py | 17 - .../temp-sense-gen/flow/run_glayout_lvs.py | 58 ++++ 8 files changed, 557 insertions(+), 17 deletions(-) delete mode 100644 openfasoc/generators/gdsfactory-gen/diff_test.gds create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/.gitignore create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/Makefile create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/test_lvs.py create mode 100755 openfasoc/generators/gdsfactory-gen/lvs_flow/util/openfasoc/README.md create mode 100755 openfasoc/generators/gdsfactory-gen/lvs_flow/util/openfasoc/cdl_parser.py delete mode 100644 openfasoc/generators/gdsfactory-gen/test_lvs.py create mode 100755 openfasoc/generators/temp-sense-gen/flow/run_glayout_lvs.py diff --git a/openfasoc/generators/gdsfactory-gen/diff_test.gds b/openfasoc/generators/gdsfactory-gen/diff_test.gds deleted file mode 100644 index ec52a176bb3e7d894272ddceb07fec9f4dc94eeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114468 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 diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/.gitignore b/openfasoc/generators/gdsfactory-gen/lvs_flow/.gitignore new file mode 100644 index 000000000..dc5991704 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/.gitignore @@ -0,0 +1,7 @@ +logs/ +objects/ +reports/ +results/ +/*.log +/*.spice +/*.ext diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/Makefile b/openfasoc/generators/gdsfactory-gen/lvs_flow/Makefile new file mode 100644 index 000000000..e4354e256 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/Makefile @@ -0,0 +1,291 @@ +# If we are running headless use offscreen rendering for save_image +ifndef DISPLAY +export QT_QPA_PLATFORM ?= offscreen +endif + +# ============================================================================== +# ____ _____ _____ _ _ ____ +# / ___|| ____|_ _| | | | _ \ +# \___ \| _| | | | | | | |_) | +# ___) | |___ | | | |_| | __/ +# |____/|_____| |_| \___/|_| +# +# ============================================================================== + + +#------------------------------------------------------------------------------- +# Proper way to initiate SHELL for make +SHELL = /bin/bash +.SHELLFLAGS = -o pipefail -c + +#------------------------------------------------------------------------------- +# Setup variables to point to root / head of the OpenROAD directory +# - the following settings allowed user to point OpenROAD binaries to different +# location +# - default follows OpenFASOC's directory structure, with absolute path to flow/ +export FLOW_HOME ?= $(shell pwd) +export COMMON_HOME ?= $(FLOW_HOME)/../../../common + +#------------------------------------------------------------------------------- +# Setup variables to point to other location for the following sub directory +# - designs - default is under current directory +# - platforms - default is under current directory +# - work home - default is current directory +# - utils, scripts, test - default is under current directory +export PLATFORM ?= sky130hd +export DESIGN_HOME ?= $(FLOW_HOME)/design +export PLATFORM_HOME ?= $(COMMON_HOME)/platforms +export WORK_HOME ?= $(shell pwd) + +export UTILS_DIR ?= $(FLOW_HOME)/util +export SCRIPTS_DIR ?= $(FLOW_HOME)/scripts +export TEST_DIR ?= $(FLOW_HOME)/test + +#------------------------------------------------------------------------------- +# Include design and platform configuration +include $(DESIGN_CONFIG) + +PUBLIC=nangate45 sky130hd sky130hs asap7 + +ifneq ($(wildcard $(PLATFORM_HOME)/$(PLATFORM)),) + export PLATFORM_DIR = $(PLATFORM_HOME)/$(PLATFORM) +else ifneq ($(findstring $(PLATFORM),$(PUBLIC)),) + export PLATFORM_DIR = ./platforms/$(PLATFORM) +else ifneq ($(wildcard ../../$(PLATFORM)),) + export PLATFORM_DIR = ../../$(PLATFORM) +else + $(error [ERROR][FLOW] Platform '$(PLATFORM)' not found.) +endif + +$(info [INFO][FLOW] Using platform directory $(PLATFORM_DIR)) +include $(PLATFORM_DIR)/config.mk +export DESIGN_NAME = diff_test +export GALLERY_REPORT ?= 0 +export VIN_ROUTE_CONNECTION_POINTS = 3 + +# Enables hierarchical yosys +# export SYNTH_HIERARCHICAL ?= 0 +# export SYNTH_STOP_MODULE_SCRIPT = $(OBJECTS_DIR)/mark_hier_stop_modules.tcl +# ifeq ($(SYNTH_HIERARCHICAL), 1) +# export HIER_REPORT_SCRIPT = $(SCRIPTS_DIR)/synth_hier_report.tcl +# export MAX_UNGROUP_SIZE ?= 0 +# endif +# Enables Re-synthesis for area reclaim +export RESYNTH_AREA_RECOVER ?= 0 +export RESYNTH_TIMING_RECOVER ?= 0 +export ABC_AREA ?= 0 + +# Global setting for Synthesis +export SYNTH_ARGS ?= -flatten + +# Global setting for Floorplan +export PLACE_PINS_ARGS + +export FLOW_VARIANT ?= glayout + +export GPL_TIMING_DRIVEN ?= 1 +export GPL_ROUTABILITY_DRIVEN ?= 1 + +export ENABLE_DPO ?= 1 +export DPO_MAX_DISPLACEMENT ?= 5 1 + +# Setup working directories +export DESIGN_NICKNAME ?= $(DESIGN_NAME) + +export DESIGN_DIR = $(dir $(DESIGN_CONFIG)) +export LOG_DIR = $(WORK_HOME)/logs/$(PLATFORM)/$(FLOW_VARIANT) +export OBJECTS_DIR = $(WORK_HOME)/objects/$(PLATFORM)/$(FLOW_VARIANT) +export REPORTS_DIR = $(WORK_HOME)/reports/$(PLATFORM)/$(FLOW_VARIANT) +export RESULTS_DIR = $(WORK_HOME)/results/$(PLATFORM)/$(FLOW_VARIANT) + +# ifdef BLOCKS +# $(info [INFO][FLOW] Invoked hierarchical flow.) +# $(foreach block,$(BLOCKS),$(info Block ${block} needs to be hardened.)) +# $(foreach block,$(BLOCKS),$(eval BLOCK_CONFIGS += ./designs/$(PLATFORM)/$(block)/config.mk)) +# $(foreach block,$(BLOCKS),$(eval BLOCK_LEFS += ./results/$(PLATFORM)_$(block)/$(FLOW_VARIANT)/${block}.lef)) +# $(foreach block,$(BLOCKS),$(eval BLOCK_GDS += ./results/$(PLATFORM)_$(block)/$(FLOW_VARIANT)/6_final.gds)) +# $(foreach block,$(BLOCKS),$(eval BLOCK_CDL += ./results/$(PLATFORM)_$(block)/$(FLOW_VARIANT)/6_final.cdl)) +# export ADDITIONAL_LEFS += $(BLOCK_LEFS) +# export ADDITIONAL_GDS += $(BLOCK_GDS) +# export GDS_FILES += $(BLOCK_GDS) +# ifdef CDL_FILES +# export CDL_FILES += $(BLOCK_CDL) +# endif +# endif + +# export RTLMP_RPT_DIR ?= $(OBJECTS_DIR)/rtlmp +# export RTLMP_RPT_FILE ?= partition.txt +# export RTLMP_BLOCKAGE_FILE ?= $(OBJECTS_DIR)/rtlmp/partition.txt.blockage + +#------------------------------------------------------------------------------- +ifeq (, $(strip $(NPROC))) + # Linux (utility program) + NPROC := $(shell nproc 2>/dev/null) + + ifeq (, $(strip $(NPROC))) + # Linux (generic) + NPROC := $(shell grep -c ^processor /proc/cpuinfo 2>/dev/null) + endif + ifeq (, $(strip $(NPROC))) + # BSD (at least FreeBSD and Mac OSX) + NPROC := $(shell sysctl -n hw.ncpu 2>/dev/null) + endif + ifeq (, $(strip $(NPROC))) + # Fallback + NPROC := 1 + endif +endif +export NUM_CORES := $(NPROC) + +export LSORACLE_CMD ?= $(shell command -v lsoracle) +ifeq ($(LSORACLE_CMD),) + LSORACLE_CMD = $(abspath $(FLOW_HOME)/../tools/install/LSOracle/bin/lsoracle) +endif + +LSORACLE_PLUGIN ?= $(abspath $(FLOW_HOME)/../tools/install/yosys/share/yosys/plugin/oracle.so) +export LSORACLE_KAHYPAR_CONFIG ?= $(abspath $(FLOW_HOME)/../tools/install/LSOracle/share/lsoracle/test.ini) +ifneq ($(USE_LSORACLE),) + YOSYS_FLAGS ?= -m $(LSORACLE_PLUGIN) +endif + +YOSYS_FLAGS += -v 3 + +#------------------------------------------------------------------------------- +# setup all commands used within this flow +TIME_CMD = /usr/bin/time -f 'Elapsed time: %E[h:]min:sec. CPU time: user %U sys %S (%P). Peak memory: %MKB.' +TIME_TEST = $(shell $(TIME_CMD) echo foo 2>/dev/null) +ifeq (, $(strip $(TIME_TEST))) + TIME_CMD = /usr/bin/time +endif + +# The following determine the executable location for each tool used by this flow. +# Priority is given to +# 1 user include path to the executable prior to running make +# 2 user explicit set with variable in Makefile or command line +OPENROAD_EXE ?= $(shell command -v openroad) +ifeq ($(OPENROAD_EXE),) +# OPENROAD_EXE = $(abspath $(FLOW_HOME)/../tools/install/OpenROAD/bin/openroad) + $(error OpenROAD not found in PATH) +endif +OPENROAD_ARGS = -no_init $(OR_ARGS) +OPENROAD_CMD = $(OPENROAD_EXE) -exit $(OPENROAD_ARGS) +OPENROAD_NO_EXIT_CMD = $(OPENROAD_EXE) $(OPENROAD_ARGS) +OPENROAD_GUI_CMD = $(OPENROAD_EXE) -gui $(OR_ARGS) + +YOSYS_CMD ?= $(shell command -v yosys) +ifeq ($(YOSYS_CMD),) +# YOSYS_CMD = $(abspath $(FLOW_HOME)/../tools/install/yosys/bin/yosys) + $(error Yosys not found in PATH) +endif + +KLAYOUT_CMD ?= $(shell command -v klayout) + +KLAYOUT_FOUND = $(if $(KLAYOUT_CMD),,$(error KLayout not found in PATH)) + +#------------------------------------------------------------------------------- +WRAPPED_LEFS = $(foreach lef,$(notdir $(WRAP_LEFS)),$(OBJECTS_DIR)/lef/$(lef:.lef=_mod.lef)) +WRAPPED_LIBS = $(foreach lib,$(notdir $(WRAP_LIBS)),$(OBJECTS_DIR)/$(lib:.lib=_mod.lib)) +export ADDITIONAL_LEFS += $(WRAPPED_LEFS) $(WRAP_LEFS) +export LIB_FILES += $(WRAP_LIBS) $(WRAPPED_LIBS) + +export DONT_USE_LIBS = $(patsubst %.lib.gz, %.lib, $(addprefix $(OBJECTS_DIR)/lib/, $(notdir $(LIB_FILES)))) +export DONT_USE_SC_LIB ?= $(firstword $(DONT_USE_LIBS)) + +# Stream system used for final result (GDS is default): GDS, GSDII, GDS2, OASIS, or OAS +STREAM_SYSTEM ?= GDS +ifneq ($(findstring GDS,$(shell echo $(STREAM_SYSTEM) | tr '[:lower:]' '[:upper:]')),) + export STREAM_SYSTEM_EXT := gds + GDSOAS_FILES = $(GDS_FILES) + ADDITIONAL_GDSOAS = $(ADDITIONAL_GDS) + SEAL_GDSOAS = $(SEAL_GDS) +else + export STREAM_SYSTEM_EXT := oas + GDSOAS_FILES = $(OAS_FILES) + ADDITIONAL_GDSOAS = $(ADDITIONAL_OAS) + SEAL_GDSOAS = $(SEAL_OAS) +endif +export WRAPPED_GDSOAS = $(foreach lef,$(notdir $(WRAP_LEFS)),$(OBJECTS_DIR)/$(lef:.lef=_mod.$(STREAM_SYSTEM_EXT))) + + +# Targets to harden Blocks in case of hierarchical flow is triggered +build_macros: $(BLOCK_LEFS) + +$(foreach block,$(BLOCKS),$(eval ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/${block}.lef: ./designs/$(PLATFORM)/$(DESIGN_NICKNAME)/${block}/config.mk)) +$(foreach block,$(BLOCKS),$(eval ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/6_final.gds: ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/${block}.lef)) + +$(BLOCK_LEFS): + $(MAKE) DESIGN_CONFIG=$< generate_abstract + +# Utility to print tool version information +#------------------------------------------------------------------------------- +.PHONY: versions.txt +versions.txt: + @$(YOSYS_CMD) -V > $@ + @echo openroad `$(OPENROAD_EXE) -version` >> $@ + @$(KLAYOUT_CMD) -zz -v >> $@ + +# LVS specific global var for this generator +#------------------------------------------------------------------------------- +export __open_generator_name__=diff_test + +# Pre-process libraries +# ============================================================================== + +# Create temporary Liberty files which have the proper dont_use properties set +# For use with Yosys and ABC +.SECONDEXPANSION: +$(DONT_USE_LIBS): $$(filter %$$(@F) %$$(@F).gz,$(LIB_FILES)) + @mkdir -p $(OBJECTS_DIR)/lib + $(UTILS_DIR)/markDontUse.py -p "$(DONT_USE_CELLS)" -i $^ -o $@ + +$(OBJECTS_DIR)/lib/merged.lib: + $(UTILS_DIR)/mergeLib.pl $(PLATFORM)_merged $(DONT_USE_LIBS) > $@ + +# Pre-process KLayout tech +# ============================================================================== +$(OBJECTS_DIR)/klayout_tech.lef: $(TECH_LEF) + @mkdir -p $(OBJECTS_DIR) + sed '/OR_DEFAULT/d' $< > $@ + + $(OBJECTS_DIR)/klayout.lyt: $(KLAYOUT_TECH_FILE) $(OBJECTS_DIR)/klayout_tech.lef + sed 's,.*,$(foreach file, $(OBJECTS_DIR)/klayout_tech.lef $(SC_LEF) $(ADDITIONAL_LEFS),$(abspath $(file))),g' $< > $@ + +$(OBJECTS_DIR)/klayout_wrap.lyt: $(KLAYOUT_TECH_FILE) $(OBJECTS_DIR)/klayout_tech.lef + sed 's,.*,$(foreach file, $(OBJECTS_DIR)/klayout_tech.lef $(WRAP_LEFS),$(abspath $(file))),g' $< > $@ +# Create Macro wrappers (if necessary) +# ============================================================================== +WRAP_CFG = $(PLATFORM_DIR)/wrapper.cfg + + +export TCLLIBPATH := util/cell-veneer $(TCLLIBPATH) +$(WRAPPED_LEFS): + mkdir -p $(OBJECTS_DIR)/lef $(OBJECTS_DIR)/def + util/cell-veneer/wrap.tcl -cfg $(WRAP_CFG) -macro $(filter %$(notdir $(@:_mod.lef=.lef)),$(WRAP_LEFS)) + mv $(notdir $@) $@ + mv $(notdir $(@:lef=def)) $(dir $@)../def/$(notdir $(@:lef=def)) + +$(WRAPPED_LIBS): + mkdir -p $(OBJECTS_DIR)/lib + sed 's/library(\(.*\))/library(\1_mod)/g' $(filter %$(notdir $(@:_mod.lib=.lib)),$(WRAP_LIBS)) | sed 's/cell(\(.*\))/cell(\1_mod)/g' > $@ +export COMMON_VERIF_DIR = $(COMMON_HOME)/drc-lvs-check + +magic_drc: $(RESULTS_DIR)/6_final.gds +ifeq ($(shell command -v magic),) + $(error Magic not found in PATH) +endif + $(COMMON_VERIF_DIR)/run_drc.sh + # magic -rcfile $(COMMON_VERIF_DIR)/sky130A/sky130A.magicrc -noconsole -dnull $(COMMON_VERIF_DIR)/magic_commands.tcl < /dev/null + +netgen_lvs: $(RESULTS_DIR)/6_final.gds $(RESULTS_DIR)/6_final.cdl +ifeq ($(shell command -v netgen),) + $(error Netgen not found in PATH) +endif +ifeq ($(shell command -v magic),) + $(error Magic not found in PATH) +endif + mkdir -p $(OBJECTS_DIR)/netgen_lvs/spice $(OBJECTS_DIR)/netgen_lvs/ext + python3 $(UTILS_DIR)/openfasoc/cdl_parser.py -i $(RESULTS_DIR)/6_final.cdl -s $(PLATFORM_DIR)/cdl/sky130_fd_sc_hd.spice -o $(OBJECTS_DIR)/netgen_lvs/spice/$(DESIGN_NAME).spice + $(COMMON_VERIF_DIR)/run_lvspex.sh $(RESULTS_DIR)/6_final.gds $(DESIGN_NAME) $(REPORTS_DIR)/6_final_lvs.rpt + +clean_all: + rm -rf $(OBJECTS_DIR)/* diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/test_lvs.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/test_lvs.py new file mode 100644 index 000000000..2dac20318 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/test_lvs.py @@ -0,0 +1,105 @@ +import os, sys +sys.path.append(os.path.join(os.path.dirname(__file__), '..')) +from glayout.primitives.fet import nmos +from glayout.pdk.sky130_mapped import sky130_mapped_pdk as sky130 +from glayout.components.diff_pair import diff_pair +from glayout.components.opamp import opamp +from glayout.primitives.fet import nmos, pmos +import subprocess as sp +import re + +# mynet = mynet.replace('opamp', 'opamp_test') +# mynet = mynet.replace('PMOS', 'pmos_test') +# mynet = mynet.replace('NMOS', 'nmos_test') +lvs_script = './../../../common/drc-lvs-check/run_lvspex.sh' +gds_path = './results/sky130hd/glayout/6_final.gds' +cdl_path = './results/sky130hd/glayout/6_final.cdl' +makefile_script = './Makefile' + + +mymos = diff_pair(sky130) +mymos.name = 'diff_test' +mymos.write_gds(gds_path) +mynet = mymos.info['netlist'].generate_netlist() +print(mynet) + +pattern_diff = re.compile(r'\bDIFF_PAIR\b') +pattern_nmos = re.compile(r'\bNMOS\b') +pattern_pmos = re.compile(r'\bPMOS\b') +patterns = [pattern_diff, pattern_nmos, pattern_pmos] +replacements = ['diff_test', 'nmos_test', 'pmos_test'] + +for i, pattern in enumerate(patterns): + if pattern.search(mynet): + replacement = replacements[i] + mynet = re.sub(pattern, replacement, mynet) + + +with open(lvs_script, 'r') as rf: + data = rf.read() + +pattern = re.compile(r'\{\!\[string compare \$2 "(.*?)"\]\}') +matches = pattern.findall(data) +save = matches[0] + +to_replace = matches[0] +to_replace_with = mymos.name + +data = re.sub(to_replace, to_replace_with, data) + +with open(lvs_script, 'w') as wf: + wf.write(data) + +net_file = cdl_path + +with open(net_file, 'w') as wf: + wf.write(mynet) + +pattern = re.compile(r'export DESIGN_NAME = (.*)_test') +my_var = mymos.name + +with open(makefile_script, 'r') as rf: + data = rf.read() + +new_content = re.sub(pattern, f'export DESIGN_NAME = {my_var}', data) + +with open(makefile_script, 'w') as wf: + wf.write(new_content) + +subproc_cmd = ['make', 'netgen_lvs'] +sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) +stdout, stderr = sub.communicate() + +print(stdout) + +if sub.returncode != 0: + print('Error:', stderr) + + + +# data = data.replace('nmos_test', mymos.name) +# with open(lvs_script, 'w') as wf: +# wf.write(data) + + + + +# mymos = nmos(sky130) +# mymos.name = 'nmos_test' +# mymos.write_gds('../temp-sense-gen/flow/results/sky130hd/tempsense/6_final.gds') +# mynet = mymos.info['netlist'].generate_netlist() +# print(mynet) +# mynet = mynet.replace('NMOS', 'nmos_test') + +# string_to_replace = 'export DESIGN_NAME = diff_test' +# string_to_replace_with = 'export DESIGN_NAME = ' + mymos.name +# data = data.replace(string_to_replace, string_to_replace_with) + + + +# mydiff = opamp(sky130) +# mydiff.name = 'opamp_test' +# mydiff.write_gds('../temp-sense-gen/flow/results/sky130hd/tempsense/6_final.gds') + +# mynet = mydiff.info['netlist'].generate_netlist() +# mynet = mynet.replace('DIFF_PAIR', 'diff_test') \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/openfasoc/README.md b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/openfasoc/README.md new file mode 100755 index 000000000..751d1669d --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/openfasoc/README.md @@ -0,0 +1 @@ +Scripts not in OpenROAD-flow-scripts, created for use within the OpenROAD flow in OpenFASOC. diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/openfasoc/cdl_parser.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/openfasoc/cdl_parser.py new file mode 100755 index 000000000..a59e8a9dc --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/openfasoc/cdl_parser.py @@ -0,0 +1,95 @@ +# -*- coding: utf-8 -*- +# NOTE: AUG 2, 2022, +# This script takes the generated CDL file from openroad (which converts verilog to netlist) +# and modifies it so that a spice file is produced which is able to pass LVS +# This makes up for openroad issues in properly converting the verilog to netlist +# The execution of this file does as follow: +# 1) read 6_final.cdl and... +# 2) Add VDD VDD to the end of the HEADER pins (because when extracted from GDS you get proxy pins) +# 3) ASSUME OpenROAD v2.0-4508-ge036ecfac: The top level subckt has last pin being r_vin +# 3.1) delete the other “VIN” pin (because both r_VIN and VIN are actually the same thing) +# 4) replace all instance of VIN with r_VIN, so that the pin name is uniform +# 5) write this output into module_name.spice + +import argparse +import os +import re +import sys + +parser = argparse.ArgumentParser(description="formulate input cdl netlist") +parser.add_argument("--inputCdl", "-i", required=True, help="input CDL netlist") +parser.add_argument("--stdCdl", "-s", required=True, help="standard cells CDL netlist") +parser.add_argument("--powerConn", "-p", required=False, help="power connection") +parser.add_argument("--outputCdl", "-o", required=True, help="output CDL netlist") + +args = parser.parse_args() + +with open(args.stdCdl, "r") as rf: + filedata = rf.read() + +std_pin_order_dict = {} # map object, see notes in the for each loop below +std_cells_re = re.findall( + "\.subckt (.*)", filedata +) # "\.subckt (.*)" means all lines where ".subckt " occurs. Breakdown below +# The "\." is used to indicate "." without invoking special meaning, so look for ".subckt " +# The "." matches any char !except newline!, the "*" make the resulting Reg Exp match repetitions of the preceding RE +# () must be used with special chars. So basically (.*) means after the Reg Exp specified by "\.subckt ", match the rest of the line + +for std_cell in std_cells_re: + std_cell_info = std_cell.split(" ") + # std_cell example: "sky130_fd_sc_hd__a2111o_1 A1 A2 B1 C1 D1 VGND VNB VPB VPWR X" + std_pin_order_dict[std_cell_info[0]] = std_cell_info[1:] + # std_cell_info array example ['sky130_fd_sc_hd__a2111o_1', 'A1', 'A2', 'B1', 'C1', 'D1', 'VGND', 'VNB', 'VPB', 'VPWR', 'X'] + # Example key:val std_pin_order_dict {'sky130_fd_sc_hd__a2111o_1': ['A1', 'A2', 'B1', 'C1', 'D1', 'VGND', 'VNB', 'VPB', 'VPWR', 'X']} + + +# The input Cdl netlist (inputz/6_final.cdl). read that entire file into "filedata" i.e. overwrite filedata +with open(args.inputCdl, "r") as rf: + filedata = rf.read() + filedata = filedata.replace( + "VIN ", "", 1 + ) # replace VIN with nothing one time (i.e. delete the pin in toplevel) + + # If only one connection point for the r_VIN route is specified, then the pin is r_VIN + # If multiple connection points are specified for VIN, the pins are r_VIN(0), r_VIN(1) etc., and they also appear in the toplevel subckt of inputCdl + if int(os.environ["VIN_ROUTE_CONNECTION_POINTS"]) == 1: + filedata = filedata.replace( + "r_VIN", "", 1 + ) # if there is only one r_VIN connection pin, replace r_VIN with nothing one time (i.e. delete the pin in toplevel) + elif int(os.environ["VIN_ROUTE_CONNECTION_POINTS"]) > 1: + for i in range(int(os.environ["VIN_ROUTE_CONNECTION_POINTS"])): + filedata = filedata.replace( + "r_VIN({})".format(i), "", 1 + ) # if there are N r_VIN connection pins, replace all pins r_VIN(i) with nothing one time (i.e. delete the pins in toplevel) + + filedata = filedata.replace( + " VIN ", " r_VIN " + ) # replace all instances of “ VIN “ with “ r_VIN “ + filedata = filedata.replace( + " VIN", " r_VIN " + ) # replace all instances of “VIN “ with “ r_VIN “ + + +with open(args.outputCdl, "w") as wf: + ckt_re = re.search("(\.SUBCKT.*\n(\+.*\n)*)((.*\n)*)(\.ENDS.*)", filedata) + if not ckt_re: + ckt_re = re.search("(\.subckt.*\n(\+.*\n)*)((.*\n)*)(\.ends.*)", filedata) + ckt_head = ckt_re.group(1) + ckt_cells = ckt_re.group(3) + ckt_end = ckt_re.group(5) + ckt_cells = ckt_cells.replace("\n+", "").split("\n") + + wf.write( + ".INCLUDE '" + os.path.abspath(args.stdCdl) + "'\n" + ) # .INCLUDE the standard cell spice file + ckt_head = ckt_head.replace("\n+", "") # to one line + wf.write(ckt_head) # proper top level heading + + for ckt_cell in ckt_cells: + if not ckt_cell or re.search("FILLER", ckt_cell): + continue + ckt_cell_list = ckt_cell.split(" ") + ordered_cell = ckt_cell_list # cell list is correct so no process is needed + wf.write(" ".join(ordered_cell)) # convert tuple into string + wf.write("\n") + wf.write(ckt_end) # the proper toplevel subckt ending diff --git a/openfasoc/generators/gdsfactory-gen/test_lvs.py b/openfasoc/generators/gdsfactory-gen/test_lvs.py deleted file mode 100644 index 23aa49b49..000000000 --- a/openfasoc/generators/gdsfactory-gen/test_lvs.py +++ /dev/null @@ -1,17 +0,0 @@ -from glayout.primitives.fet import nmos -from glayout.pdk.sky130_mapped import sky130_mapped_pdk as sky130 -from glayout.components.diff_pair import diff_pair -import re - -mydiff = diff_pair(sky130) -mydiff.name = 'diff_test' -mydiff.write_gds('../temp-sense-gen/flow/results/sky130hd/tempsense/6_final.gds') - -mynet = mydiff.info['netlist'].generate_netlist() -print(type(mynet)) -mynet = mynet.replace('DIFF_PAIR', 'diff_test') - -# mynet = re.sub(mynet, 'DIFF_PAIR', 'diff_test') -net_file = '../temp-sense-gen/flow/results/sky130hd/tempsense/6_final.cdl' -with open(net_file, 'w') as wf: - wf.write(mynet) diff --git a/openfasoc/generators/temp-sense-gen/flow/run_glayout_lvs.py b/openfasoc/generators/temp-sense-gen/flow/run_glayout_lvs.py new file mode 100755 index 000000000..4c3db747b --- /dev/null +++ b/openfasoc/generators/temp-sense-gen/flow/run_glayout_lvs.py @@ -0,0 +1,58 @@ +import os +import sys +import subprocess + +# Directory paths from the Makefile segment + +os.environ["WORK_HOME"] = "./" +os.environ["FLOW_HOME"] = "./" +os.environ["COMMON_HOME"] = os.path.join(os.getenv("WORK_HOME"), "../../../common") +DESIGN_NAME = sys.argv[1] +PLATFORM = sys.argv[2] +os.environ["PLATFORM"] = "sky130hd" +os.environ["DESIGN_NAME"] = DESIGN_NAME +os.environ["FLOW_VARIANT"] = "tempsense" +RESULTS_DIR = os.path.join(os.getenv("WORK_HOME"), "results", PLATFORM, os.getenv("FLOW_VARIANT")) +OBJECTS_DIR = os.path.join(os.getenv("WORK_HOME"), "objects", PLATFORM, os.getenv("FLOW_VARIANT")) +PLATFORM_DIR = os.path.join(os.getenv("COMMON_HOME"), "platforms", PLATFORM) +UTILS_DIR = os.path.join(os.getenv("FLOW_HOME"), "util") +COMMON_VERIF_DIR = os.path.join(os.getenv("COMMON_HOME"), "drc-lvs-check") +# COMMON_HOME = "{WORK_HOME}/../../../common" +# PLATFORM_DIR = "{COMMON_HOME}/{PLATFORM}" +# RESULTS_DIR = "{WORK_HOME}/results/{PLATFORM}/{DESIGN_NICKNAME}/{FLOW_VARIANT}" +# OBJECTS_DIR = "{WORK_HOME}/objects/{PLATFORM}/{DESIGN_NICKNAME}/{FLOW_VARIANT}" +# PLATFORM_DIR = "{PLATFORM_DIR}" +# UTILS_DIR = "{FLOW_HOME}/util" +# COMMON_VERIF_DIR = "{COMMON_HOME}/drc-lvs-check" + +# Take DESIGN_NAME and PLATFORM from command-line arguments +if len(sys.argv) < 3: + print("Usage: python script.py DESIGN_NAME PLATFORM") + sys.exit(1) + + + +# Define the netgen_lvs target +def netgen_lvs(): + # Check if necessary commands are available + # if not os.path.exists("netgen"): + # raise FileNotFoundError("Netgen not found in PATH") + # if not os.path.exists("magic"): + # raise FileNotFoundError("Magic not found in PATH") + + # Create necessary directories + os.makedirs(os.path.join(OBJECTS_DIR, "netgen_lvs", "spice"), exist_ok=True) + os.makedirs(os.path.join(OBJECTS_DIR, "netgen_lvs", "ext"), exist_ok=True) + + # Parse CDL file and generate spice file + cdl_file = os.path.join(RESULTS_DIR, "6_final.cdl") + spice_template = os.path.join(PLATFORM_DIR, "cdl", "sky130_fd_sc_hd.spice") + spice_output = os.path.join(OBJECTS_DIR, "netgen_lvs", "spice", f"{DESIGN_NAME}.spice") + subprocess.run(["python3", os.path.join(UTILS_DIR, "openfasoc", "cdl_parser.py"), "-i", cdl_file, "-s", spice_template, "-o", spice_output], check=True) + + # Run LVS with Netgen + gds_file = os.path.join(RESULTS_DIR, "6_final.gds") + subprocess.run([os.path.join(COMMON_VERIF_DIR, "run_lvspex.sh"), gds_file, DESIGN_NAME, os.path.join(RESULTS_DIR, "6_final_lvs.rpt")], check=True) + +# Execute the netgen_lvs target +netgen_lvs() From 31692d86d1d23bc269bedb1e8d6f0a8d730f9562 Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Wed, 17 Apr 2024 07:07:45 +0000 Subject: [PATCH 03/20] restore temp-sense-gen to original state --- .../generators/temp-sense-gen/flow/Makefile | 446 ++++++++++- .../temp-sense-gen/{ => flow}/README.md | 0 .../temp-sense-gen/flow/run_glayout_lvs.py | 58 -- openfasoc/generators/temp-sense-gen/mkfile | 732 ------------------ 4 files changed, 444 insertions(+), 792 deletions(-) rename openfasoc/generators/temp-sense-gen/{ => flow}/README.md (100%) delete mode 100755 openfasoc/generators/temp-sense-gen/flow/run_glayout_lvs.py delete mode 100644 openfasoc/generators/temp-sense-gen/mkfile diff --git a/openfasoc/generators/temp-sense-gen/flow/Makefile b/openfasoc/generators/temp-sense-gen/flow/Makefile index e27b9eff8..97438a0c4 100644 --- a/openfasoc/generators/temp-sense-gen/flow/Makefile +++ b/openfasoc/generators/temp-sense-gen/flow/Makefile @@ -63,7 +63,7 @@ endif $(info [INFO][FLOW] Using platform directory $(PLATFORM_DIR)) include $(PLATFORM_DIR)/config.mk -export DESIGN_NAME = diff_test + export GALLERY_REPORT ?= 0 # Enables hierarchical yosys export SYNTH_HIERARCHICAL ?= 0 @@ -228,7 +228,7 @@ versions.txt: # LVS specific global var for this generator #------------------------------------------------------------------------------- -export __open_generator_name__=diff_test +export __open_generator_name__=temp-sense-gen # Pre-process libraries # ============================================================================== @@ -269,6 +269,377 @@ $(WRAPPED_LEFS): $(WRAPPED_LIBS): mkdir -p $(OBJECTS_DIR)/lib sed 's/library(\(.*\))/library(\1_mod)/g' $(filter %$(notdir $(@:_mod.lib=.lib)),$(WRAP_LIBS)) | sed 's/cell(\(.*\))/cell(\1_mod)/g' > $@ + +# ============================================================================== +# ______ ___ _ _____ _ _ _____ ____ ___ ____ +# / ___\ \ / / \ | |_ _| | | | ____/ ___|_ _/ ___| +# \___ \\ V /| \| | | | | |_| | _| \___ \| |\___ \ +# ___) || | | |\ | | | | _ | |___ ___) | | ___) | +# |____/ |_| |_| \_| |_| |_| |_|_____|____/___|____/ +# +synth: versions.txt \ + $(RESULTS_DIR)/1_synth.v \ + $(RESULTS_DIR)/1_synth.sdc +# ============================================================================== + + +# Run Synthesis using yosys +#------------------------------------------------------------------------------- +SYNTH_SCRIPT ?= $(SCRIPTS_DIR)/synth.tcl + +$(SYNTH_STOP_MODULE_SCRIPT): + mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) + ($(TIME_CMD) $(YOSYS_CMD) $(YOSYS_FLAGS) -c $(HIER_REPORT_SCRIPT)) 2>&1 | tee $(LOG_DIR)/1_1_yosys_hier_report.log + +ifeq ($(SYNTH_HIERARCHICAL), 1) +$(RESULTS_DIR)/1_1_yosys.v: $(SYNTH_STOP_MODULE_SCRIPT) +endif + +$(RESULTS_DIR)/1_1_yosys.v: $(DONT_USE_LIBS) $(WRAPPED_LIBS) $(DONT_USE_SC_LIB) $(DFF_LIB_FILE) $(VERILOG_FILES) $(CACHED_NETLIST) $(LATCH_MAP_FILE) $(ADDER_MAP_FILE) + mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) + ($(TIME_CMD) $(YOSYS_CMD) $(YOSYS_FLAGS) -c $(SYNTH_SCRIPT)) 2>&1 | tee $(LOG_DIR)/1_1_yosys.log + +$(RESULTS_DIR)/1_synth.v: $(RESULTS_DIR)/1_1_yosys.v + mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) + cp $< $@ + +$(RESULTS_DIR)/1_synth.sdc: $(SDC_FILE) + mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) + cp $< $@ + +clean_synth: + rm -f $(RESULTS_DIR)/1_*.v $(RESULTS_DIR)/1_synth.sdc + rm -f $(REPORTS_DIR)/synth_* + rm -f $(LOG_DIR)/1_* + rm -f $(SYNTH_STOP_MODULE_SCRIPT) + rm -rf _tmp_yosys-abc-* + + +# ============================================================================== +# _____ _ ___ ___ ____ ____ _ _ _ _ +# | ___| | / _ \ / _ \| _ \| _ \| | / \ | \ | | +# | |_ | | | | | | | | | |_) | |_) | | / _ \ | \| | +# | _| | |__| |_| | |_| | _ <| __/| |___ / ___ \| |\ | +# |_| |_____\___/ \___/|_| \_\_| |_____/_/ \_\_| \_| +# +floorplan: $(RESULTS_DIR)/2_floorplan.odb \ + $(RESULTS_DIR)/2_floorplan.sdc +# ============================================================================== + +ifneq ($(FOOTPRINT),) +IS_CHIP = 1 +else ifneq ($(FOOTPRINT_TCL),) +IS_CHIP = 1 +endif + +# STEP 1: Translate verilog to odb +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/2_1_floorplan.odb: $(RESULTS_DIR)/1_synth.v $(RESULTS_DIR)/1_synth.sdc $(TECH_LEF) $(SC_LEF) $(ADDITIONAL_LEFS) $(FOOTPRINT) $(SIG_MAP_FILE) $(FOOTPRINT_TCL) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/floorplan.tcl -metrics $(LOG_DIR)/2_1_floorplan.json) 2>&1 | tee $(LOG_DIR)/2_1_floorplan.log + + +# STEP 2: IO Placement (random) +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/2_2_floorplan_io.odb: $(RESULTS_DIR)/2_1_floorplan.odb $(IO_CONSTRAINTS) +ifndef IS_CHIP + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/io_placement_random.tcl -metrics $(LOG_DIR)/2_2_floorplan_io.json) 2>&1 | tee $(LOG_DIR)/2_2_floorplan_io.log +else + cp $< $@ +endif + +# STEP 3: Timing Driven Mixed Sized Placement +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/2_3_floorplan_tdms.odb: $(RESULTS_DIR)/2_2_floorplan_io.odb $(RESULTS_DIR)/1_synth.v $(RESULTS_DIR)/1_synth.sdc $(LIB_FILES) +ifeq ($(MACRO_PLACEMENT),) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/tdms_place.tcl -metrics $(LOG_DIR)/2_3_tdms.json) 2>&1 | tee $(LOG_DIR)/2_3_tdms_place.log +else + $(info [INFO][FLOW] Using manual macro placement file $(MACRO_PLACEMENT)) + cp $< $@ +endif + +# STEP 4: Macro Placement +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/2_4_floorplan_macro.odb: $(RESULTS_DIR)/2_3_floorplan_tdms.odb $(RESULTS_DIR)/1_synth.v $(RESULTS_DIR)/1_synth.sdc $(MACRO_PLACEMENT) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/macro_place.tcl -metrics $(LOG_DIR)/2_4_mplace.json) 2>&1 | tee $(LOG_DIR)/2_4_mplace.log + +# STEP 5: Tapcell and Welltie insertion +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/2_5_floorplan_tapcell.odb: $(RESULTS_DIR)/2_4_floorplan_macro.odb $(TAPCELL_TCL) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/tapcell.tcl -metrics $(LOG_DIR)/2_5_tapcell.json) 2>&1 | tee $(LOG_DIR)/2_5_tapcell.log + + +# STEP 6: PDN generation +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/2_6_floorplan_pdn.odb: $(RESULTS_DIR)/2_5_floorplan_tapcell.odb $(PDN_CFG) $(PDN_TCL) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/pdn.tcl -metrics $(LOG_DIR)/2_6_pdn.json) 2>&1 | tee $(LOG_DIR)/2_6_pdn.log + +$(RESULTS_DIR)/2_floorplan.odb: $(RESULTS_DIR)/2_6_floorplan_pdn.odb + cp $< $@ + +$(RESULTS_DIR)/2_floorplan.sdc: $(RESULTS_DIR)/2_1_floorplan.odb + + +clean_floorplan: + rm -f $(RESULTS_DIR)/2_*floorplan*.odb $(RESULTS_DIR)/2_floorplan.sdc $(RESULTS_DIR)/2_floorplan.v $(RESULTS_DIR)/2_*floorplan.def + rm -f $(REPORTS_DIR)/2_* + rm -f $(LOG_DIR)/2_* + +# ============================================================================== +# ____ _ _ ____ _____ +# | _ \| | / \ / ___| ____| +# | |_) | | / _ \| | | _| +# | __/| |___ / ___ \ |___| |___ +# |_| |_____/_/ \_\____|_____| +# +place: $(RESULTS_DIR)/3_place.odb \ + $(RESULTS_DIR)/3_place.sdc +# ============================================================================== +# STEP 1: Global placement without placed IOs, timing-driven, and routability-driven. +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/3_1_place_gp_skip_io.odb: $(RESULTS_DIR)/2_floorplan.odb $(RESULTS_DIR)/2_floorplan.sdc $(LIB_FILES) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/global_place_skip_io.tcl -metrics $(LOG_DIR)/3_1_place_gp_skip_io.json) 2>&1 | tee $(LOG_DIR)/3_1_place_gp_skip_io.log + +# STEP 2: IO placement (non-random) +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/3_2_place_iop.odb: $(RESULTS_DIR)/3_1_place_gp_skip_io.odb $(IO_CONSTRAINTS) +ifndef IS_CHIP + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/io_placement.tcl -metrics $(LOG_DIR)/3_2_place_iop.json) 2>&1 | tee $(LOG_DIR)/3_2_place_iop.log +else + cp $< $@ +endif + +# STEP 3: Global placement with placed IOs, timing-driven, and routability-driven. +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/3_3_place_gp.odb: $(RESULTS_DIR)/3_2_place_iop.odb $(RESULTS_DIR)/2_floorplan.sdc $(LIB_FILES) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/global_place.tcl -metrics $(LOG_DIR)/3_3_place_gp.json) 2>&1 | tee $(LOG_DIR)/3_3_place_gp.log + +# # STEP 4: Resizing & Buffering (not needed for the tempsense) +# #------------------------------------------------------------------------------- +# $(RESULTS_DIR)/3_4_place_resized.odb: $(RESULTS_DIR)/3_3_place_gp.odb $(RESULTS_DIR)/2_floorplan.sdc +# ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/resize.tcl -metrics $(LOG_DIR)/3_4_resizer.json) 2>&1 | tee $(LOG_DIR)/3_4_resizer.log +# +# clean_resize: +# rm -f $(RESULTS_DIR)/3_4_place_resized.odb +$(RESULTS_DIR)/3_4_place_resized.odb: $(RESULTS_DIR)/3_3_place_gp.odb # just copy file to not break dependencies + cp $< $@ + +# STEP 5: Detail placement +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/3_5_place_dp.odb: $(RESULTS_DIR)/3_4_place_resized.odb + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/detail_place.tcl -metrics $(LOG_DIR)/3_5_opendp.json) 2>&1 | tee $(LOG_DIR)/3_5_opendp.log + +$(RESULTS_DIR)/3_place.odb: $(RESULTS_DIR)/3_5_place_dp.odb + cp $< $@ + +$(RESULTS_DIR)/3_place.sdc: $(RESULTS_DIR)/2_floorplan.sdc + cp $< $@ + +# Clean Targets +#------------------------------------------------------------------------------- +clean_place: + rm -f $(RESULTS_DIR)/3_*place*.odb + rm -f $(RESULTS_DIR)/3_place.sdc + rm -f $(REPORTS_DIR)/3_* + rm -f $(LOG_DIR)/3_* + + +# ============================================================================== +# ____ _____ ____ +# / ___|_ _/ ___| +# | | | | \___ \ +# | |___ | | ___) | +# \____| |_| |____/ +# +cts: $(RESULTS_DIR)/4_cts.odb \ + $(RESULTS_DIR)/4_cts.sdc +# ============================================================================== + +# # Run TritonCTS (not needed for the tempsense) +# # ------------------------------------------------------------------------------ +# $(RESULTS_DIR)/4_1_cts.odb: $(RESULTS_DIR)/3_place.odb $(RESULTS_DIR)/3_place.sdc +# ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/cts.tcl -metrics $(LOG_DIR)/4_1_cts.json) 2>&1 | tee $(LOG_DIR)/4_1_cts.log +$(RESULTS_DIR)/4_1_cts.odb: $(RESULTS_DIR)/3_place.odb $(RESULTS_DIR)/3_place.sdc # just copy file to not break dependencies + cp $< $@ + +# Filler cell insertion +# ------------------------------------------------------------------------------ +$(RESULTS_DIR)/4_2_cts_fillcell.odb: $(RESULTS_DIR)/4_1_cts.odb + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/fillcell.tcl -metrics $(LOG_DIR)/4_2_cts_fillcell.json) 2>&1 | tee $(LOG_DIR)/4_2_cts_fillcell.log + +# $(RESULTS_DIR)/4_cts.sdc: $(RESULTS_DIR)/4_cts.odb +# Changed due to suppresion of TritonCTS step +$(RESULTS_DIR)/4_cts.sdc: $(RESULTS_DIR)/3_place.sdc # just copy file to not break dependencies + cp $< $@ + +$(RESULTS_DIR)/4_cts.odb: $(RESULTS_DIR)/4_2_cts_fillcell.odb + cp $< $@ + +clean_cts: + rm -rf $(RESULTS_DIR)/4_*cts*.odb $(RESULTS_DIR)/4_cts.sdc $(RESULTS_DIR)/4_cts.v $(RESULTS_DIR)/4_*cts.def + rm -f $(REPORTS_DIR)/4_* + rm -f $(LOG_DIR)/4_* + + +# ============================================================================== +# ____ ___ _ _ _____ ___ _ _ ____ +# | _ \ / _ \| | | |_ _|_ _| \ | |/ ___| +# | |_) | | | | | | | | | | || \| | | _ +# | _ <| |_| | |_| | | | | || |\ | |_| | +# |_| \_\\___/ \___/ |_| |___|_| \_|\____| +# +route: $(RESULTS_DIR)/5_route.odb \ + $(RESULTS_DIR)/5_route.sdc +# ============================================================================== + + +# STEP 1: Run global route +#------------------------------------------------------------------------------- +$(RESULTS_DIR)/5_1_grt.odb: $(RESULTS_DIR)/4_cts.odb $(RESULTS_DIR)/4_cts.sdc $(FASTROUTE_TCL) $(PRE_GLOBAL_ROUTE) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/global_route.tcl -metrics $(LOG_DIR)/5_1_fastroute.json) 2>&1 | tee $(LOG_DIR)/5_1_fastroute.log + + +# STEP 2: Run detailed route +#------------------------------------------------------------------------------- +ifeq ($(USE_WXL),) +$(RESULTS_DIR)/5_2_route.odb: $(RESULTS_DIR)/5_1_grt.odb +else +$(RESULTS_DIR)/5_2_route.odb: $(RESULTS_DIR)/4_cts.odb +endif + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/detail_route.tcl -metrics $(LOG_DIR)/5_2_TritonRoute.json) 2>&1 | tee $(LOG_DIR)/5_2_TritonRoute.log + +$(RESULTS_DIR)/5_route.odb: $(RESULTS_DIR)/5_2_route.odb + cp $< $@ + +$(RESULTS_DIR)/5_route.sdc: $(RESULTS_DIR)/4_cts.sdc + cp $< $@ + +clean_route: + rm -rf output*/ results*.out.dmp layer_*.mps + rm -rf *.gdid *.log *.met *.sav *.res.dmp + rm -rf $(RESULTS_DIR)/route.guide $(RESULTS_DIR)/output_guide.mod $(RESULTS_DIR)/updated_clks.sdc + rm -rf $(RESULTS_DIR)/5_*.odb $(RESULTS_DIR)/5_route.sdc + rm -f $(REPORTS_DIR)/5_* + rm -f $(LOG_DIR)/5_* + +klayout_tr_rpt: $(RESULTS_DIR)/5_route.def $(OBJECTS_DIR)/klayout.lyt + $(call KLAYOUT_FOUND) + $(KLAYOUT_CMD) -rd in_drc="$(REPORTS_DIR)/5_route_drc.rpt" \ + -rd in_def="$<" \ + -rd tech_file=$(OBJECTS_DIR)/klayout.lyt \ + -rm $(UTILS_DIR)/viewDrc.py + +klayout_guides: $(RESULTS_DIR)/5_route.def $(OBJECTS_DIR)/klayout.lyt + $(call KLAYOUT_FOUND) + $(KLAYOUT_CMD) -rd in_guide="$(RESULTS_DIR)/route.guide" \ + -rd in_def="$<" \ + -rd net_name=$(GUIDE_NET) \ + -rd tech_file=$(OBJECTS_DIR)/klayout.lyt \ + -rm $(UTILS_DIR)/viewGuide.py + +# ============================================================================== +# _____ ___ _ _ ___ ____ _ _ ___ _ _ ____ +# | ___|_ _| \ | |_ _/ ___|| | | |_ _| \ | |/ ___| +# | |_ | || \| || |\___ \| |_| || || \| | | _ +# | _| | || |\ || | ___) | _ || || |\ | |_| | +# |_| |___|_| \_|___|____/|_| |_|___|_| \_|\____| +# +GDS_FINAL_FILE = $(RESULTS_DIR)/6_final.$(STREAM_SYSTEM_EXT) +finish: $(LOG_DIR)/6_report.log \ + $(RESULTS_DIR)/6_final.v \ + $(RESULTS_DIR)/6_final.sdc \ + $(GDS_FINAL_FILE) +# ============================================================================== + +ifneq ($(USE_FILL),) +$(RESULTS_DIR)/6_1_fill.odb: $(RESULTS_DIR)/5_route.odb $(FILL_CONFIG) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/density_fill.tcl -metrics $(LOG_DIR)/6_density_fill.json) 2>&1 | tee $(LOG_DIR)/6_density_fill.log +else +$(RESULTS_DIR)/6_1_fill.odb: $(RESULTS_DIR)/5_route.odb + cp $< $@ +endif + +$(RESULTS_DIR)/6_1_fill.sdc: $(RESULTS_DIR)/5_route.sdc + cp $< $@ + +$(RESULTS_DIR)/6_final.sdc: $(RESULTS_DIR)/5_route.sdc + cp $< $@ + +$(LOG_DIR)/6_report.log: $(RESULTS_DIR)/6_1_fill.odb $(RESULTS_DIR)/6_1_fill.sdc + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/final_report.tcl -metrics $(LOG_DIR)/6_report.json) 2>&1 | tee $(LOG_DIR)/6_report.log + +$(RESULTS_DIR)/6_final.def: $(LOG_DIR)/6_report.log + +generate_abstract: $(RESULTS_DIR)/6_final.gds $(RESULTS_DIR)/6_final.def $(RESULTS_DIR)/6_final.v + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/generate_abstract.tcl -metrics $(LOG_DIR)/generate_abstract.json) 2>&1 | tee $(LOG_DIR)/generate_abstract.log + +# Merge wrapped macros using Klayout +#------------------------------------------------------------------------------- +$(WRAPPED_GDSOAS): $(OBJECTS_DIR)/klayout_wrap.lyt $(WRAPPED_LEFS) + $(call KLAYOUT_FOUND) + ($(TIME_CMD) $(KLAYOUT_CMD) -zz -rd design_name=$(basename $(notdir $@)) \ + -rd in_def=$(OBJECTS_DIR)/def/$(notdir $(@:$(STREAM_SYSTEM_EXT)=def)) \ + -rd in_files="$(ADDITIONAL_GDSOAS)" \ + -rd config_file=$(FILL_CONFIG) \ + -rd seal_file="" \ + -rd out_file=$@ \ + -rd tech_file=$(OBJECTS_DIR)/klayout_wrap.lyt \ + -rd layer_map=$(GDS_LAYER_MAP) \ + -r $(UTILS_DIR)/def2stream.py) 2>&1 | tee $(LOG_DIR)/6_merge_$(basename $(notdir $@)).log + +# Merge GDS using Klayout +#------------------------------------------------------------------------------- +GDS_MERGED_FILE = $(RESULTS_DIR)/6_1_merged.$(STREAM_SYSTEM_EXT) +$(GDS_MERGED_FILE): $(RESULTS_DIR)/6_final.def $(OBJECTS_DIR)/klayout.lyt $(GDSOAS_FILES) $(WRAPPED_GDSOAS) $(SEAL_GDSOAS) + $(call KLAYOUT_FOUND) + ($(TIME_CMD) stdbuf -o L $(KLAYOUT_CMD) -zz -rd design_name=$(DESIGN_NAME) \ + -rd in_def=$< \ + -rd in_files="$(GDSOAS_FILES) $(WRAPPED_GDSOAS)" \ + -rd config_file=$(FILL_CONFIG) \ + -rd seal_file="$(SEAL_GDSOAS)" \ + -rd out_file=$@ \ + -rd tech_file=$(OBJECTS_DIR)/klayout.lyt \ + -rd layer_map=$(GDS_LAYER_MAP) \ + -r $(UTILS_DIR)/def2stream.py) 2>&1 | tee $(LOG_DIR)/6_1_merge.log + +$(RESULTS_DIR)/6_final.v: $(LOG_DIR)/6_report.log + +$(GDS_FINAL_FILE): $(GDS_MERGED_FILE) + cp $^ $@ + +drc: $(REPORTS_DIR)/6_drc.lyrdb + +$(REPORTS_DIR)/6_drc.lyrdb: $(GDS_FINAL_FILE) $(KLAYOUT_DRC_FILE) +ifneq ($(KLAYOUT_DRC_FILE),) + $(call KLAYOUT_FOUND) + ($(TIME_CMD) $(KLAYOUT_CMD) -zz -rd in_gds="$<" \ + -rd report_file=$(abspath $@) \ + -r $(KLAYOUT_DRC_FILE)) 2>&1 | tee $(LOG_DIR)/6_drc.log + # Hacky way of getting DRV count (don't error on no matches) + grep -c "" $@ > $(REPORTS_DIR)/6_drc_count.rpt || [[ $$? == 1 ]] +else + echo "DRC not supported on this platform" > $@ +endif + +$(RESULTS_DIR)/6_final.cdl: $(RESULTS_DIR)/6_final.v + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/cdl.tcl) 2>&1 | tee $(LOG_DIR)/6_cdl.log + +$(OBJECTS_DIR)/6_final_concat.cdl: $(RESULTS_DIR)/6_final.cdl $(CDL_FILE) + cat $^ > $@ + +lvs: $(RESULTS_DIR)/6_lvs.lvsdb + +$(RESULTS_DIR)/6_lvs.lvsdb: $(GDS_FINAL_FILE) $(KLAYOUT_LVS_FILE) $(OBJECTS_DIR)/6_final_concat.cdl +ifneq ($(KLAYOUT_LVS_FILE),) + $(call KLAYOUT_FOUND) + ($(TIME_CMD) $(KLAYOUT_CMD) -b -rd in_gds="$<" \ + -rd cdl_file=$(abspath $(OBJECTS_DIR)/6_final_concat.cdl) \ + -rd report_file=$(abspath $@) \ + -r $(KLAYOUT_LVS_FILE)) 2>&1 | tee $(LOG_DIR)/6_lvs.log +else + echo "LVS not supported on this platform" > $@ +endif + +# Other tools for DRC and LVS export COMMON_VERIF_DIR = $(COMMON_HOME)/drc-lvs-check magic_drc: $(RESULTS_DIR)/6_final.gds @@ -288,3 +659,74 @@ endif mkdir -p $(OBJECTS_DIR)/netgen_lvs/spice $(OBJECTS_DIR)/netgen_lvs/ext python3 $(UTILS_DIR)/openfasoc/cdl_parser.py -i $(RESULTS_DIR)/6_final.cdl -s $(PLATFORM_DIR)/cdl/sky130_fd_sc_hd.spice -o $(OBJECTS_DIR)/netgen_lvs/spice/$(DESIGN_NAME).spice $(COMMON_VERIF_DIR)/run_lvspex.sh $(RESULTS_DIR)/6_final.gds $(DESIGN_NAME) $(REPORTS_DIR)/6_final_lvs.rpt + +clean_finish: + rm -rf $(RESULTS_DIR)/6_*.gds $(RESULTS_DIR)/6_*.oas $(RESULTS_DIR)/6_*.odb $(RESULTS_DIR)/6_*.v $(RESULTS_DIR)/6_*.sdc $(RESULTS_DIR)/6_*.spef + rm -rf $(REPORTS_DIR)/6_*.rpt + rm -f $(LOG_DIR)/6_* + + +# ============================================================================== +# __ __ ___ ____ ____ +# | \/ |_ _/ ___| / ___| +# | |\/| || |\___ \| | +# | | | || | ___) | |___ +# |_| |_|___|____/ \____| +# +# ============================================================================== + +all: $(SDC_FILE) $(WRAPPED_LIBS) $(DONT_USE_LIBS) $(OBJECTS_DIR)/klayout.lyt $(WRAPPED_GDSOAS) $(DONT_USE_SC_LIB) + mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) + ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/run_all.tcl -metrics $(LOG_DIR)/run_all.json) 2>&1 | tee $(LOG_DIR)/run_all.log + +clean: + @echo + @echo "Make clean disabled." + @echo "Use make clean_all or clean individual steps:" + @echo " clean_synth clean_floorplan clean_place clean_cts clean_route clean_finish" + @echo + +clean_all: clean_synth clean_floorplan clean_place clean_cts clean_route clean_finish clean_metadata + rm -rf $(OBJECTS_DIR) + +nuke: clean_test clean_issues + rm -rf ./results ./logs ./reports ./objects + rm -rf layer_*.mps macrocell.list *best.plt *_pdn.def dummy.guide + rm -rf *.rpt *.rpt.old *.def.v pin_dumper.log + rm -rf versions.txt + + +# DEF/GDS/OAS viewer shortcuts +#------------------------------------------------------------------------------- +RESULTS_ODB = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.odb))) +RESULTS_DEF = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.def))) +RESULTS_GDS = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.gds))) +RESULTS_OAS = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.oas))) +$(foreach file,$(RESULTS_DEF) $(RESULTS_GDS) $(RESULTS_OAS),klayout_$(file)): klayout_%: $(OBJECTS_DIR)/klayout.lyt + $(KLAYOUT_CMD) -nn $(OBJECTS_DIR)/klayout.lyt $(RESULTS_DIR)/$* + +gui_floorplan: gui_2_floorplan.odb +gui_place: gui_3_place.odb +gui_cts: gui_4_cts.odb +gui_route: gui_5_route.odb +gui_final: gui_6_final.odb + +$(foreach file,$(RESULTS_DEF),gui_$(file)): gui_%: + DEF_FILE=$(RESULTS_DIR)/$* $(OPENROAD_GUI_CMD) $(SCRIPTS_DIR)/gui.tcl + +$(foreach file,$(RESULTS_ODB),gui_$(file)): gui_%: + ODB_FILE=$(RESULTS_DIR)/$* $(OPENROAD_GUI_CMD) $(SCRIPTS_DIR)/gui.tcl + +# Write a def for the corresponding odb +$(foreach file,$(RESULTS_ODB),$(file).def): %.def: + ODB_FILE=$(RESULTS_DIR)/$* DEF_FILE=$(RESULTS_DIR)/$@ $(OPENROAD_CMD) $(SCRIPTS_DIR)/write_def.tcl + +all_defs : $(foreach file,$(RESULTS_ODB),$(file).def) + +print-% : ; @echo $* = $($*) + +# Utilities +#------------------------------------------------------------------------------- +include $(UTILS_DIR)/utils.mk +export PRIVATE_DIR ?= ../../private_tool_scripts +-include $(PRIVATE_DIR)/private.mk diff --git a/openfasoc/generators/temp-sense-gen/README.md b/openfasoc/generators/temp-sense-gen/flow/README.md similarity index 100% rename from openfasoc/generators/temp-sense-gen/README.md rename to openfasoc/generators/temp-sense-gen/flow/README.md diff --git a/openfasoc/generators/temp-sense-gen/flow/run_glayout_lvs.py b/openfasoc/generators/temp-sense-gen/flow/run_glayout_lvs.py deleted file mode 100755 index 4c3db747b..000000000 --- a/openfasoc/generators/temp-sense-gen/flow/run_glayout_lvs.py +++ /dev/null @@ -1,58 +0,0 @@ -import os -import sys -import subprocess - -# Directory paths from the Makefile segment - -os.environ["WORK_HOME"] = "./" -os.environ["FLOW_HOME"] = "./" -os.environ["COMMON_HOME"] = os.path.join(os.getenv("WORK_HOME"), "../../../common") -DESIGN_NAME = sys.argv[1] -PLATFORM = sys.argv[2] -os.environ["PLATFORM"] = "sky130hd" -os.environ["DESIGN_NAME"] = DESIGN_NAME -os.environ["FLOW_VARIANT"] = "tempsense" -RESULTS_DIR = os.path.join(os.getenv("WORK_HOME"), "results", PLATFORM, os.getenv("FLOW_VARIANT")) -OBJECTS_DIR = os.path.join(os.getenv("WORK_HOME"), "objects", PLATFORM, os.getenv("FLOW_VARIANT")) -PLATFORM_DIR = os.path.join(os.getenv("COMMON_HOME"), "platforms", PLATFORM) -UTILS_DIR = os.path.join(os.getenv("FLOW_HOME"), "util") -COMMON_VERIF_DIR = os.path.join(os.getenv("COMMON_HOME"), "drc-lvs-check") -# COMMON_HOME = "{WORK_HOME}/../../../common" -# PLATFORM_DIR = "{COMMON_HOME}/{PLATFORM}" -# RESULTS_DIR = "{WORK_HOME}/results/{PLATFORM}/{DESIGN_NICKNAME}/{FLOW_VARIANT}" -# OBJECTS_DIR = "{WORK_HOME}/objects/{PLATFORM}/{DESIGN_NICKNAME}/{FLOW_VARIANT}" -# PLATFORM_DIR = "{PLATFORM_DIR}" -# UTILS_DIR = "{FLOW_HOME}/util" -# COMMON_VERIF_DIR = "{COMMON_HOME}/drc-lvs-check" - -# Take DESIGN_NAME and PLATFORM from command-line arguments -if len(sys.argv) < 3: - print("Usage: python script.py DESIGN_NAME PLATFORM") - sys.exit(1) - - - -# Define the netgen_lvs target -def netgen_lvs(): - # Check if necessary commands are available - # if not os.path.exists("netgen"): - # raise FileNotFoundError("Netgen not found in PATH") - # if not os.path.exists("magic"): - # raise FileNotFoundError("Magic not found in PATH") - - # Create necessary directories - os.makedirs(os.path.join(OBJECTS_DIR, "netgen_lvs", "spice"), exist_ok=True) - os.makedirs(os.path.join(OBJECTS_DIR, "netgen_lvs", "ext"), exist_ok=True) - - # Parse CDL file and generate spice file - cdl_file = os.path.join(RESULTS_DIR, "6_final.cdl") - spice_template = os.path.join(PLATFORM_DIR, "cdl", "sky130_fd_sc_hd.spice") - spice_output = os.path.join(OBJECTS_DIR, "netgen_lvs", "spice", f"{DESIGN_NAME}.spice") - subprocess.run(["python3", os.path.join(UTILS_DIR, "openfasoc", "cdl_parser.py"), "-i", cdl_file, "-s", spice_template, "-o", spice_output], check=True) - - # Run LVS with Netgen - gds_file = os.path.join(RESULTS_DIR, "6_final.gds") - subprocess.run([os.path.join(COMMON_VERIF_DIR, "run_lvspex.sh"), gds_file, DESIGN_NAME, os.path.join(RESULTS_DIR, "6_final_lvs.rpt")], check=True) - -# Execute the netgen_lvs target -netgen_lvs() diff --git a/openfasoc/generators/temp-sense-gen/mkfile b/openfasoc/generators/temp-sense-gen/mkfile deleted file mode 100644 index 97438a0c4..000000000 --- a/openfasoc/generators/temp-sense-gen/mkfile +++ /dev/null @@ -1,732 +0,0 @@ -DESIGN_CONFIG ?= ./design/sky130hd/tempsense/config.mk - -# If we are running headless use offscreen rendering for save_image -ifndef DISPLAY -export QT_QPA_PLATFORM ?= offscreen -endif - -# ============================================================================== -# ____ _____ _____ _ _ ____ -# / ___|| ____|_ _| | | | _ \ -# \___ \| _| | | | | | | |_) | -# ___) | |___ | | | |_| | __/ -# |____/|_____| |_| \___/|_| -# -# ============================================================================== - -#------------------------------------------------------------------------------- -# Default target when invoking without specific target. -.DEFAULT_GOAL := finish - -#------------------------------------------------------------------------------- -# Proper way to initiate SHELL for make -SHELL = /bin/bash -.SHELLFLAGS = -o pipefail -c - -#------------------------------------------------------------------------------- -# Setup variables to point to root / head of the OpenROAD directory -# - the following settings allowed user to point OpenROAD binaries to different -# location -# - default follows OpenFASOC's directory structure, with absolute path to flow/ -export FLOW_HOME ?= $(shell pwd) -export COMMON_HOME ?= $(FLOW_HOME)/../../../common - -#------------------------------------------------------------------------------- -# Setup variables to point to other location for the following sub directory -# - designs - default is under current directory -# - platforms - default is under current directory -# - work home - default is current directory -# - utils, scripts, test - default is under current directory -export DESIGN_HOME ?= $(FLOW_HOME)/design -export PLATFORM_HOME ?= $(COMMON_HOME)/platforms -export WORK_HOME ?= $(shell pwd) - -export UTILS_DIR ?= $(FLOW_HOME)/util -export SCRIPTS_DIR ?= $(FLOW_HOME)/scripts -export TEST_DIR ?= $(FLOW_HOME)/test - -#------------------------------------------------------------------------------- -# Include design and platform configuration -include $(DESIGN_CONFIG) - -PUBLIC=nangate45 sky130hd sky130hs asap7 - -ifneq ($(wildcard $(PLATFORM_HOME)/$(PLATFORM)),) - export PLATFORM_DIR = $(PLATFORM_HOME)/$(PLATFORM) -else ifneq ($(findstring $(PLATFORM),$(PUBLIC)),) - export PLATFORM_DIR = ./platforms/$(PLATFORM) -else ifneq ($(wildcard ../../$(PLATFORM)),) - export PLATFORM_DIR = ../../$(PLATFORM) -else - $(error [ERROR][FLOW] Platform '$(PLATFORM)' not found.) -endif - -$(info [INFO][FLOW] Using platform directory $(PLATFORM_DIR)) -include $(PLATFORM_DIR)/config.mk - -export GALLERY_REPORT ?= 0 -# Enables hierarchical yosys -export SYNTH_HIERARCHICAL ?= 0 -export SYNTH_STOP_MODULE_SCRIPT = $(OBJECTS_DIR)/mark_hier_stop_modules.tcl -ifeq ($(SYNTH_HIERARCHICAL), 1) -export HIER_REPORT_SCRIPT = $(SCRIPTS_DIR)/synth_hier_report.tcl -export MAX_UNGROUP_SIZE ?= 0 -endif -# Enables Re-synthesis for area reclaim -export RESYNTH_AREA_RECOVER ?= 0 -export RESYNTH_TIMING_RECOVER ?= 0 -export ABC_AREA ?= 0 - -# Global setting for Synthesis -export SYNTH_ARGS ?= -flatten - -# Global setting for Floorplan -export PLACE_PINS_ARGS - -#export FLOW_VARIANT ?= base - -export GPL_TIMING_DRIVEN ?= 1 -export GPL_ROUTABILITY_DRIVEN ?= 1 - -export ENABLE_DPO ?= 1 -export DPO_MAX_DISPLACEMENT ?= 5 1 - -# Setup working directories -export DESIGN_NICKNAME ?= $(DESIGN_NAME) - -export DESIGN_DIR = $(dir $(DESIGN_CONFIG)) -export LOG_DIR = $(WORK_HOME)/logs/$(PLATFORM)/$(DESIGN_NICKNAME)/$(FLOW_VARIANT) -export OBJECTS_DIR = $(WORK_HOME)/objects/$(PLATFORM)/$(DESIGN_NICKNAME)/$(FLOW_VARIANT) -export REPORTS_DIR = $(WORK_HOME)/reports/$(PLATFORM)/$(DESIGN_NICKNAME)/$(FLOW_VARIANT) -export RESULTS_DIR = $(WORK_HOME)/results/$(PLATFORM)/$(DESIGN_NICKNAME)/$(FLOW_VARIANT) - -ifdef BLOCKS - $(info [INFO][FLOW] Invoked hierarchical flow.) - $(foreach block,$(BLOCKS),$(info Block ${block} needs to be hardened.)) - $(foreach block,$(BLOCKS),$(eval BLOCK_CONFIGS += ./designs/$(PLATFORM)/$(DESIGN_NICKNAME)/$(block)/config.mk)) - $(foreach block,$(BLOCKS),$(eval BLOCK_LEFS += ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/${block}.lef)) - $(foreach block,$(BLOCKS),$(eval BLOCK_GDS += ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/6_final.gds)) - $(foreach block,$(BLOCKS),$(eval BLOCK_CDL += ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/6_final.cdl)) - export ADDITIONAL_LEFS += $(BLOCK_LEFS) - export ADDITIONAL_GDS += $(BLOCK_GDS) - export GDS_FILES += $(BLOCK_GDS) - ifdef CDL_FILES - export CDL_FILES += $(BLOCK_CDL) - endif -endif - -export RTLMP_RPT_DIR ?= $(OBJECTS_DIR)/rtlmp -export RTLMP_RPT_FILE ?= partition.txt -export RTLMP_BLOCKAGE_FILE ?= $(OBJECTS_DIR)/rtlmp/partition.txt.blockage - -#------------------------------------------------------------------------------- -ifeq (, $(strip $(NPROC))) - # Linux (utility program) - NPROC := $(shell nproc 2>/dev/null) - - ifeq (, $(strip $(NPROC))) - # Linux (generic) - NPROC := $(shell grep -c ^processor /proc/cpuinfo 2>/dev/null) - endif - ifeq (, $(strip $(NPROC))) - # BSD (at least FreeBSD and Mac OSX) - NPROC := $(shell sysctl -n hw.ncpu 2>/dev/null) - endif - ifeq (, $(strip $(NPROC))) - # Fallback - NPROC := 1 - endif -endif -export NUM_CORES := $(NPROC) - -export LSORACLE_CMD ?= $(shell command -v lsoracle) -ifeq ($(LSORACLE_CMD),) - LSORACLE_CMD = $(abspath $(FLOW_HOME)/../tools/install/LSOracle/bin/lsoracle) -endif - -LSORACLE_PLUGIN ?= $(abspath $(FLOW_HOME)/../tools/install/yosys/share/yosys/plugin/oracle.so) -export LSORACLE_KAHYPAR_CONFIG ?= $(abspath $(FLOW_HOME)/../tools/install/LSOracle/share/lsoracle/test.ini) -ifneq ($(USE_LSORACLE),) - YOSYS_FLAGS ?= -m $(LSORACLE_PLUGIN) -endif - -YOSYS_FLAGS += -v 3 - -#------------------------------------------------------------------------------- -# setup all commands used within this flow -TIME_CMD = /usr/bin/time -f 'Elapsed time: %E[h:]min:sec. CPU time: user %U sys %S (%P). Peak memory: %MKB.' -TIME_TEST = $(shell $(TIME_CMD) echo foo 2>/dev/null) -ifeq (, $(strip $(TIME_TEST))) - TIME_CMD = /usr/bin/time -endif - -# The following determine the executable location for each tool used by this flow. -# Priority is given to -# 1 user include path to the executable prior to running make -# 2 user explicit set with variable in Makefile or command line -OPENROAD_EXE ?= $(shell command -v openroad) -ifeq ($(OPENROAD_EXE),) -# OPENROAD_EXE = $(abspath $(FLOW_HOME)/../tools/install/OpenROAD/bin/openroad) - $(error OpenROAD not found in PATH) -endif -OPENROAD_ARGS = -no_init $(OR_ARGS) -OPENROAD_CMD = $(OPENROAD_EXE) -exit $(OPENROAD_ARGS) -OPENROAD_NO_EXIT_CMD = $(OPENROAD_EXE) $(OPENROAD_ARGS) -OPENROAD_GUI_CMD = $(OPENROAD_EXE) -gui $(OR_ARGS) - -YOSYS_CMD ?= $(shell command -v yosys) -ifeq ($(YOSYS_CMD),) -# YOSYS_CMD = $(abspath $(FLOW_HOME)/../tools/install/yosys/bin/yosys) - $(error Yosys not found in PATH) -endif - -KLAYOUT_CMD ?= $(shell command -v klayout) - -KLAYOUT_FOUND = $(if $(KLAYOUT_CMD),,$(error KLayout not found in PATH)) - -#------------------------------------------------------------------------------- -WRAPPED_LEFS = $(foreach lef,$(notdir $(WRAP_LEFS)),$(OBJECTS_DIR)/lef/$(lef:.lef=_mod.lef)) -WRAPPED_LIBS = $(foreach lib,$(notdir $(WRAP_LIBS)),$(OBJECTS_DIR)/$(lib:.lib=_mod.lib)) -export ADDITIONAL_LEFS += $(WRAPPED_LEFS) $(WRAP_LEFS) -export LIB_FILES += $(WRAP_LIBS) $(WRAPPED_LIBS) - -export DONT_USE_LIBS = $(patsubst %.lib.gz, %.lib, $(addprefix $(OBJECTS_DIR)/lib/, $(notdir $(LIB_FILES)))) -export DONT_USE_SC_LIB ?= $(firstword $(DONT_USE_LIBS)) - -# Stream system used for final result (GDS is default): GDS, GSDII, GDS2, OASIS, or OAS -STREAM_SYSTEM ?= GDS -ifneq ($(findstring GDS,$(shell echo $(STREAM_SYSTEM) | tr '[:lower:]' '[:upper:]')),) - export STREAM_SYSTEM_EXT := gds - GDSOAS_FILES = $(GDS_FILES) - ADDITIONAL_GDSOAS = $(ADDITIONAL_GDS) - SEAL_GDSOAS = $(SEAL_GDS) -else - export STREAM_SYSTEM_EXT := oas - GDSOAS_FILES = $(OAS_FILES) - ADDITIONAL_GDSOAS = $(ADDITIONAL_OAS) - SEAL_GDSOAS = $(SEAL_OAS) -endif -export WRAPPED_GDSOAS = $(foreach lef,$(notdir $(WRAP_LEFS)),$(OBJECTS_DIR)/$(lef:.lef=_mod.$(STREAM_SYSTEM_EXT))) - - -# Targets to harden Blocks in case of hierarchical flow is triggered -build_macros: $(BLOCK_LEFS) - -$(foreach block,$(BLOCKS),$(eval ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/${block}.lef: ./designs/$(PLATFORM)/$(DESIGN_NICKNAME)/${block}/config.mk)) -$(foreach block,$(BLOCKS),$(eval ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/6_final.gds: ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/${block}.lef)) - -$(BLOCK_LEFS): - $(MAKE) DESIGN_CONFIG=$< generate_abstract - -# Utility to print tool version information -#------------------------------------------------------------------------------- -.PHONY: versions.txt -versions.txt: - @$(YOSYS_CMD) -V > $@ - @echo openroad `$(OPENROAD_EXE) -version` >> $@ - @$(KLAYOUT_CMD) -zz -v >> $@ - -# LVS specific global var for this generator -#------------------------------------------------------------------------------- -export __open_generator_name__=temp-sense-gen - -# Pre-process libraries -# ============================================================================== - -# Create temporary Liberty files which have the proper dont_use properties set -# For use with Yosys and ABC -.SECONDEXPANSION: -$(DONT_USE_LIBS): $$(filter %$$(@F) %$$(@F).gz,$(LIB_FILES)) - @mkdir -p $(OBJECTS_DIR)/lib - $(UTILS_DIR)/markDontUse.py -p "$(DONT_USE_CELLS)" -i $^ -o $@ - -$(OBJECTS_DIR)/lib/merged.lib: - $(UTILS_DIR)/mergeLib.pl $(PLATFORM)_merged $(DONT_USE_LIBS) > $@ - -# Pre-process KLayout tech -# ============================================================================== -$(OBJECTS_DIR)/klayout_tech.lef: $(TECH_LEF) - @mkdir -p $(OBJECTS_DIR) - sed '/OR_DEFAULT/d' $< > $@ - - $(OBJECTS_DIR)/klayout.lyt: $(KLAYOUT_TECH_FILE) $(OBJECTS_DIR)/klayout_tech.lef - sed 's,.*,$(foreach file, $(OBJECTS_DIR)/klayout_tech.lef $(SC_LEF) $(ADDITIONAL_LEFS),$(abspath $(file))),g' $< > $@ - -$(OBJECTS_DIR)/klayout_wrap.lyt: $(KLAYOUT_TECH_FILE) $(OBJECTS_DIR)/klayout_tech.lef - sed 's,.*,$(foreach file, $(OBJECTS_DIR)/klayout_tech.lef $(WRAP_LEFS),$(abspath $(file))),g' $< > $@ -# Create Macro wrappers (if necessary) -# ============================================================================== -WRAP_CFG = $(PLATFORM_DIR)/wrapper.cfg - - -export TCLLIBPATH := util/cell-veneer $(TCLLIBPATH) -$(WRAPPED_LEFS): - mkdir -p $(OBJECTS_DIR)/lef $(OBJECTS_DIR)/def - util/cell-veneer/wrap.tcl -cfg $(WRAP_CFG) -macro $(filter %$(notdir $(@:_mod.lef=.lef)),$(WRAP_LEFS)) - mv $(notdir $@) $@ - mv $(notdir $(@:lef=def)) $(dir $@)../def/$(notdir $(@:lef=def)) - -$(WRAPPED_LIBS): - mkdir -p $(OBJECTS_DIR)/lib - sed 's/library(\(.*\))/library(\1_mod)/g' $(filter %$(notdir $(@:_mod.lib=.lib)),$(WRAP_LIBS)) | sed 's/cell(\(.*\))/cell(\1_mod)/g' > $@ - -# ============================================================================== -# ______ ___ _ _____ _ _ _____ ____ ___ ____ -# / ___\ \ / / \ | |_ _| | | | ____/ ___|_ _/ ___| -# \___ \\ V /| \| | | | | |_| | _| \___ \| |\___ \ -# ___) || | | |\ | | | | _ | |___ ___) | | ___) | -# |____/ |_| |_| \_| |_| |_| |_|_____|____/___|____/ -# -synth: versions.txt \ - $(RESULTS_DIR)/1_synth.v \ - $(RESULTS_DIR)/1_synth.sdc -# ============================================================================== - - -# Run Synthesis using yosys -#------------------------------------------------------------------------------- -SYNTH_SCRIPT ?= $(SCRIPTS_DIR)/synth.tcl - -$(SYNTH_STOP_MODULE_SCRIPT): - mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) - ($(TIME_CMD) $(YOSYS_CMD) $(YOSYS_FLAGS) -c $(HIER_REPORT_SCRIPT)) 2>&1 | tee $(LOG_DIR)/1_1_yosys_hier_report.log - -ifeq ($(SYNTH_HIERARCHICAL), 1) -$(RESULTS_DIR)/1_1_yosys.v: $(SYNTH_STOP_MODULE_SCRIPT) -endif - -$(RESULTS_DIR)/1_1_yosys.v: $(DONT_USE_LIBS) $(WRAPPED_LIBS) $(DONT_USE_SC_LIB) $(DFF_LIB_FILE) $(VERILOG_FILES) $(CACHED_NETLIST) $(LATCH_MAP_FILE) $(ADDER_MAP_FILE) - mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) - ($(TIME_CMD) $(YOSYS_CMD) $(YOSYS_FLAGS) -c $(SYNTH_SCRIPT)) 2>&1 | tee $(LOG_DIR)/1_1_yosys.log - -$(RESULTS_DIR)/1_synth.v: $(RESULTS_DIR)/1_1_yosys.v - mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) - cp $< $@ - -$(RESULTS_DIR)/1_synth.sdc: $(SDC_FILE) - mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) - cp $< $@ - -clean_synth: - rm -f $(RESULTS_DIR)/1_*.v $(RESULTS_DIR)/1_synth.sdc - rm -f $(REPORTS_DIR)/synth_* - rm -f $(LOG_DIR)/1_* - rm -f $(SYNTH_STOP_MODULE_SCRIPT) - rm -rf _tmp_yosys-abc-* - - -# ============================================================================== -# _____ _ ___ ___ ____ ____ _ _ _ _ -# | ___| | / _ \ / _ \| _ \| _ \| | / \ | \ | | -# | |_ | | | | | | | | | |_) | |_) | | / _ \ | \| | -# | _| | |__| |_| | |_| | _ <| __/| |___ / ___ \| |\ | -# |_| |_____\___/ \___/|_| \_\_| |_____/_/ \_\_| \_| -# -floorplan: $(RESULTS_DIR)/2_floorplan.odb \ - $(RESULTS_DIR)/2_floorplan.sdc -# ============================================================================== - -ifneq ($(FOOTPRINT),) -IS_CHIP = 1 -else ifneq ($(FOOTPRINT_TCL),) -IS_CHIP = 1 -endif - -# STEP 1: Translate verilog to odb -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/2_1_floorplan.odb: $(RESULTS_DIR)/1_synth.v $(RESULTS_DIR)/1_synth.sdc $(TECH_LEF) $(SC_LEF) $(ADDITIONAL_LEFS) $(FOOTPRINT) $(SIG_MAP_FILE) $(FOOTPRINT_TCL) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/floorplan.tcl -metrics $(LOG_DIR)/2_1_floorplan.json) 2>&1 | tee $(LOG_DIR)/2_1_floorplan.log - - -# STEP 2: IO Placement (random) -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/2_2_floorplan_io.odb: $(RESULTS_DIR)/2_1_floorplan.odb $(IO_CONSTRAINTS) -ifndef IS_CHIP - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/io_placement_random.tcl -metrics $(LOG_DIR)/2_2_floorplan_io.json) 2>&1 | tee $(LOG_DIR)/2_2_floorplan_io.log -else - cp $< $@ -endif - -# STEP 3: Timing Driven Mixed Sized Placement -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/2_3_floorplan_tdms.odb: $(RESULTS_DIR)/2_2_floorplan_io.odb $(RESULTS_DIR)/1_synth.v $(RESULTS_DIR)/1_synth.sdc $(LIB_FILES) -ifeq ($(MACRO_PLACEMENT),) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/tdms_place.tcl -metrics $(LOG_DIR)/2_3_tdms.json) 2>&1 | tee $(LOG_DIR)/2_3_tdms_place.log -else - $(info [INFO][FLOW] Using manual macro placement file $(MACRO_PLACEMENT)) - cp $< $@ -endif - -# STEP 4: Macro Placement -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/2_4_floorplan_macro.odb: $(RESULTS_DIR)/2_3_floorplan_tdms.odb $(RESULTS_DIR)/1_synth.v $(RESULTS_DIR)/1_synth.sdc $(MACRO_PLACEMENT) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/macro_place.tcl -metrics $(LOG_DIR)/2_4_mplace.json) 2>&1 | tee $(LOG_DIR)/2_4_mplace.log - -# STEP 5: Tapcell and Welltie insertion -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/2_5_floorplan_tapcell.odb: $(RESULTS_DIR)/2_4_floorplan_macro.odb $(TAPCELL_TCL) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/tapcell.tcl -metrics $(LOG_DIR)/2_5_tapcell.json) 2>&1 | tee $(LOG_DIR)/2_5_tapcell.log - - -# STEP 6: PDN generation -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/2_6_floorplan_pdn.odb: $(RESULTS_DIR)/2_5_floorplan_tapcell.odb $(PDN_CFG) $(PDN_TCL) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/pdn.tcl -metrics $(LOG_DIR)/2_6_pdn.json) 2>&1 | tee $(LOG_DIR)/2_6_pdn.log - -$(RESULTS_DIR)/2_floorplan.odb: $(RESULTS_DIR)/2_6_floorplan_pdn.odb - cp $< $@ - -$(RESULTS_DIR)/2_floorplan.sdc: $(RESULTS_DIR)/2_1_floorplan.odb - - -clean_floorplan: - rm -f $(RESULTS_DIR)/2_*floorplan*.odb $(RESULTS_DIR)/2_floorplan.sdc $(RESULTS_DIR)/2_floorplan.v $(RESULTS_DIR)/2_*floorplan.def - rm -f $(REPORTS_DIR)/2_* - rm -f $(LOG_DIR)/2_* - -# ============================================================================== -# ____ _ _ ____ _____ -# | _ \| | / \ / ___| ____| -# | |_) | | / _ \| | | _| -# | __/| |___ / ___ \ |___| |___ -# |_| |_____/_/ \_\____|_____| -# -place: $(RESULTS_DIR)/3_place.odb \ - $(RESULTS_DIR)/3_place.sdc -# ============================================================================== -# STEP 1: Global placement without placed IOs, timing-driven, and routability-driven. -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/3_1_place_gp_skip_io.odb: $(RESULTS_DIR)/2_floorplan.odb $(RESULTS_DIR)/2_floorplan.sdc $(LIB_FILES) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/global_place_skip_io.tcl -metrics $(LOG_DIR)/3_1_place_gp_skip_io.json) 2>&1 | tee $(LOG_DIR)/3_1_place_gp_skip_io.log - -# STEP 2: IO placement (non-random) -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/3_2_place_iop.odb: $(RESULTS_DIR)/3_1_place_gp_skip_io.odb $(IO_CONSTRAINTS) -ifndef IS_CHIP - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/io_placement.tcl -metrics $(LOG_DIR)/3_2_place_iop.json) 2>&1 | tee $(LOG_DIR)/3_2_place_iop.log -else - cp $< $@ -endif - -# STEP 3: Global placement with placed IOs, timing-driven, and routability-driven. -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/3_3_place_gp.odb: $(RESULTS_DIR)/3_2_place_iop.odb $(RESULTS_DIR)/2_floorplan.sdc $(LIB_FILES) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/global_place.tcl -metrics $(LOG_DIR)/3_3_place_gp.json) 2>&1 | tee $(LOG_DIR)/3_3_place_gp.log - -# # STEP 4: Resizing & Buffering (not needed for the tempsense) -# #------------------------------------------------------------------------------- -# $(RESULTS_DIR)/3_4_place_resized.odb: $(RESULTS_DIR)/3_3_place_gp.odb $(RESULTS_DIR)/2_floorplan.sdc -# ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/resize.tcl -metrics $(LOG_DIR)/3_4_resizer.json) 2>&1 | tee $(LOG_DIR)/3_4_resizer.log -# -# clean_resize: -# rm -f $(RESULTS_DIR)/3_4_place_resized.odb -$(RESULTS_DIR)/3_4_place_resized.odb: $(RESULTS_DIR)/3_3_place_gp.odb # just copy file to not break dependencies - cp $< $@ - -# STEP 5: Detail placement -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/3_5_place_dp.odb: $(RESULTS_DIR)/3_4_place_resized.odb - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/detail_place.tcl -metrics $(LOG_DIR)/3_5_opendp.json) 2>&1 | tee $(LOG_DIR)/3_5_opendp.log - -$(RESULTS_DIR)/3_place.odb: $(RESULTS_DIR)/3_5_place_dp.odb - cp $< $@ - -$(RESULTS_DIR)/3_place.sdc: $(RESULTS_DIR)/2_floorplan.sdc - cp $< $@ - -# Clean Targets -#------------------------------------------------------------------------------- -clean_place: - rm -f $(RESULTS_DIR)/3_*place*.odb - rm -f $(RESULTS_DIR)/3_place.sdc - rm -f $(REPORTS_DIR)/3_* - rm -f $(LOG_DIR)/3_* - - -# ============================================================================== -# ____ _____ ____ -# / ___|_ _/ ___| -# | | | | \___ \ -# | |___ | | ___) | -# \____| |_| |____/ -# -cts: $(RESULTS_DIR)/4_cts.odb \ - $(RESULTS_DIR)/4_cts.sdc -# ============================================================================== - -# # Run TritonCTS (not needed for the tempsense) -# # ------------------------------------------------------------------------------ -# $(RESULTS_DIR)/4_1_cts.odb: $(RESULTS_DIR)/3_place.odb $(RESULTS_DIR)/3_place.sdc -# ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/cts.tcl -metrics $(LOG_DIR)/4_1_cts.json) 2>&1 | tee $(LOG_DIR)/4_1_cts.log -$(RESULTS_DIR)/4_1_cts.odb: $(RESULTS_DIR)/3_place.odb $(RESULTS_DIR)/3_place.sdc # just copy file to not break dependencies - cp $< $@ - -# Filler cell insertion -# ------------------------------------------------------------------------------ -$(RESULTS_DIR)/4_2_cts_fillcell.odb: $(RESULTS_DIR)/4_1_cts.odb - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/fillcell.tcl -metrics $(LOG_DIR)/4_2_cts_fillcell.json) 2>&1 | tee $(LOG_DIR)/4_2_cts_fillcell.log - -# $(RESULTS_DIR)/4_cts.sdc: $(RESULTS_DIR)/4_cts.odb -# Changed due to suppresion of TritonCTS step -$(RESULTS_DIR)/4_cts.sdc: $(RESULTS_DIR)/3_place.sdc # just copy file to not break dependencies - cp $< $@ - -$(RESULTS_DIR)/4_cts.odb: $(RESULTS_DIR)/4_2_cts_fillcell.odb - cp $< $@ - -clean_cts: - rm -rf $(RESULTS_DIR)/4_*cts*.odb $(RESULTS_DIR)/4_cts.sdc $(RESULTS_DIR)/4_cts.v $(RESULTS_DIR)/4_*cts.def - rm -f $(REPORTS_DIR)/4_* - rm -f $(LOG_DIR)/4_* - - -# ============================================================================== -# ____ ___ _ _ _____ ___ _ _ ____ -# | _ \ / _ \| | | |_ _|_ _| \ | |/ ___| -# | |_) | | | | | | | | | | || \| | | _ -# | _ <| |_| | |_| | | | | || |\ | |_| | -# |_| \_\\___/ \___/ |_| |___|_| \_|\____| -# -route: $(RESULTS_DIR)/5_route.odb \ - $(RESULTS_DIR)/5_route.sdc -# ============================================================================== - - -# STEP 1: Run global route -#------------------------------------------------------------------------------- -$(RESULTS_DIR)/5_1_grt.odb: $(RESULTS_DIR)/4_cts.odb $(RESULTS_DIR)/4_cts.sdc $(FASTROUTE_TCL) $(PRE_GLOBAL_ROUTE) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/global_route.tcl -metrics $(LOG_DIR)/5_1_fastroute.json) 2>&1 | tee $(LOG_DIR)/5_1_fastroute.log - - -# STEP 2: Run detailed route -#------------------------------------------------------------------------------- -ifeq ($(USE_WXL),) -$(RESULTS_DIR)/5_2_route.odb: $(RESULTS_DIR)/5_1_grt.odb -else -$(RESULTS_DIR)/5_2_route.odb: $(RESULTS_DIR)/4_cts.odb -endif - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/detail_route.tcl -metrics $(LOG_DIR)/5_2_TritonRoute.json) 2>&1 | tee $(LOG_DIR)/5_2_TritonRoute.log - -$(RESULTS_DIR)/5_route.odb: $(RESULTS_DIR)/5_2_route.odb - cp $< $@ - -$(RESULTS_DIR)/5_route.sdc: $(RESULTS_DIR)/4_cts.sdc - cp $< $@ - -clean_route: - rm -rf output*/ results*.out.dmp layer_*.mps - rm -rf *.gdid *.log *.met *.sav *.res.dmp - rm -rf $(RESULTS_DIR)/route.guide $(RESULTS_DIR)/output_guide.mod $(RESULTS_DIR)/updated_clks.sdc - rm -rf $(RESULTS_DIR)/5_*.odb $(RESULTS_DIR)/5_route.sdc - rm -f $(REPORTS_DIR)/5_* - rm -f $(LOG_DIR)/5_* - -klayout_tr_rpt: $(RESULTS_DIR)/5_route.def $(OBJECTS_DIR)/klayout.lyt - $(call KLAYOUT_FOUND) - $(KLAYOUT_CMD) -rd in_drc="$(REPORTS_DIR)/5_route_drc.rpt" \ - -rd in_def="$<" \ - -rd tech_file=$(OBJECTS_DIR)/klayout.lyt \ - -rm $(UTILS_DIR)/viewDrc.py - -klayout_guides: $(RESULTS_DIR)/5_route.def $(OBJECTS_DIR)/klayout.lyt - $(call KLAYOUT_FOUND) - $(KLAYOUT_CMD) -rd in_guide="$(RESULTS_DIR)/route.guide" \ - -rd in_def="$<" \ - -rd net_name=$(GUIDE_NET) \ - -rd tech_file=$(OBJECTS_DIR)/klayout.lyt \ - -rm $(UTILS_DIR)/viewGuide.py - -# ============================================================================== -# _____ ___ _ _ ___ ____ _ _ ___ _ _ ____ -# | ___|_ _| \ | |_ _/ ___|| | | |_ _| \ | |/ ___| -# | |_ | || \| || |\___ \| |_| || || \| | | _ -# | _| | || |\ || | ___) | _ || || |\ | |_| | -# |_| |___|_| \_|___|____/|_| |_|___|_| \_|\____| -# -GDS_FINAL_FILE = $(RESULTS_DIR)/6_final.$(STREAM_SYSTEM_EXT) -finish: $(LOG_DIR)/6_report.log \ - $(RESULTS_DIR)/6_final.v \ - $(RESULTS_DIR)/6_final.sdc \ - $(GDS_FINAL_FILE) -# ============================================================================== - -ifneq ($(USE_FILL),) -$(RESULTS_DIR)/6_1_fill.odb: $(RESULTS_DIR)/5_route.odb $(FILL_CONFIG) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/density_fill.tcl -metrics $(LOG_DIR)/6_density_fill.json) 2>&1 | tee $(LOG_DIR)/6_density_fill.log -else -$(RESULTS_DIR)/6_1_fill.odb: $(RESULTS_DIR)/5_route.odb - cp $< $@ -endif - -$(RESULTS_DIR)/6_1_fill.sdc: $(RESULTS_DIR)/5_route.sdc - cp $< $@ - -$(RESULTS_DIR)/6_final.sdc: $(RESULTS_DIR)/5_route.sdc - cp $< $@ - -$(LOG_DIR)/6_report.log: $(RESULTS_DIR)/6_1_fill.odb $(RESULTS_DIR)/6_1_fill.sdc - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/final_report.tcl -metrics $(LOG_DIR)/6_report.json) 2>&1 | tee $(LOG_DIR)/6_report.log - -$(RESULTS_DIR)/6_final.def: $(LOG_DIR)/6_report.log - -generate_abstract: $(RESULTS_DIR)/6_final.gds $(RESULTS_DIR)/6_final.def $(RESULTS_DIR)/6_final.v - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/generate_abstract.tcl -metrics $(LOG_DIR)/generate_abstract.json) 2>&1 | tee $(LOG_DIR)/generate_abstract.log - -# Merge wrapped macros using Klayout -#------------------------------------------------------------------------------- -$(WRAPPED_GDSOAS): $(OBJECTS_DIR)/klayout_wrap.lyt $(WRAPPED_LEFS) - $(call KLAYOUT_FOUND) - ($(TIME_CMD) $(KLAYOUT_CMD) -zz -rd design_name=$(basename $(notdir $@)) \ - -rd in_def=$(OBJECTS_DIR)/def/$(notdir $(@:$(STREAM_SYSTEM_EXT)=def)) \ - -rd in_files="$(ADDITIONAL_GDSOAS)" \ - -rd config_file=$(FILL_CONFIG) \ - -rd seal_file="" \ - -rd out_file=$@ \ - -rd tech_file=$(OBJECTS_DIR)/klayout_wrap.lyt \ - -rd layer_map=$(GDS_LAYER_MAP) \ - -r $(UTILS_DIR)/def2stream.py) 2>&1 | tee $(LOG_DIR)/6_merge_$(basename $(notdir $@)).log - -# Merge GDS using Klayout -#------------------------------------------------------------------------------- -GDS_MERGED_FILE = $(RESULTS_DIR)/6_1_merged.$(STREAM_SYSTEM_EXT) -$(GDS_MERGED_FILE): $(RESULTS_DIR)/6_final.def $(OBJECTS_DIR)/klayout.lyt $(GDSOAS_FILES) $(WRAPPED_GDSOAS) $(SEAL_GDSOAS) - $(call KLAYOUT_FOUND) - ($(TIME_CMD) stdbuf -o L $(KLAYOUT_CMD) -zz -rd design_name=$(DESIGN_NAME) \ - -rd in_def=$< \ - -rd in_files="$(GDSOAS_FILES) $(WRAPPED_GDSOAS)" \ - -rd config_file=$(FILL_CONFIG) \ - -rd seal_file="$(SEAL_GDSOAS)" \ - -rd out_file=$@ \ - -rd tech_file=$(OBJECTS_DIR)/klayout.lyt \ - -rd layer_map=$(GDS_LAYER_MAP) \ - -r $(UTILS_DIR)/def2stream.py) 2>&1 | tee $(LOG_DIR)/6_1_merge.log - -$(RESULTS_DIR)/6_final.v: $(LOG_DIR)/6_report.log - -$(GDS_FINAL_FILE): $(GDS_MERGED_FILE) - cp $^ $@ - -drc: $(REPORTS_DIR)/6_drc.lyrdb - -$(REPORTS_DIR)/6_drc.lyrdb: $(GDS_FINAL_FILE) $(KLAYOUT_DRC_FILE) -ifneq ($(KLAYOUT_DRC_FILE),) - $(call KLAYOUT_FOUND) - ($(TIME_CMD) $(KLAYOUT_CMD) -zz -rd in_gds="$<" \ - -rd report_file=$(abspath $@) \ - -r $(KLAYOUT_DRC_FILE)) 2>&1 | tee $(LOG_DIR)/6_drc.log - # Hacky way of getting DRV count (don't error on no matches) - grep -c "" $@ > $(REPORTS_DIR)/6_drc_count.rpt || [[ $$? == 1 ]] -else - echo "DRC not supported on this platform" > $@ -endif - -$(RESULTS_DIR)/6_final.cdl: $(RESULTS_DIR)/6_final.v - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/cdl.tcl) 2>&1 | tee $(LOG_DIR)/6_cdl.log - -$(OBJECTS_DIR)/6_final_concat.cdl: $(RESULTS_DIR)/6_final.cdl $(CDL_FILE) - cat $^ > $@ - -lvs: $(RESULTS_DIR)/6_lvs.lvsdb - -$(RESULTS_DIR)/6_lvs.lvsdb: $(GDS_FINAL_FILE) $(KLAYOUT_LVS_FILE) $(OBJECTS_DIR)/6_final_concat.cdl -ifneq ($(KLAYOUT_LVS_FILE),) - $(call KLAYOUT_FOUND) - ($(TIME_CMD) $(KLAYOUT_CMD) -b -rd in_gds="$<" \ - -rd cdl_file=$(abspath $(OBJECTS_DIR)/6_final_concat.cdl) \ - -rd report_file=$(abspath $@) \ - -r $(KLAYOUT_LVS_FILE)) 2>&1 | tee $(LOG_DIR)/6_lvs.log -else - echo "LVS not supported on this platform" > $@ -endif - -# Other tools for DRC and LVS -export COMMON_VERIF_DIR = $(COMMON_HOME)/drc-lvs-check - -magic_drc: $(RESULTS_DIR)/6_final.gds -ifeq ($(shell command -v magic),) - $(error Magic not found in PATH) -endif - $(COMMON_VERIF_DIR)/run_drc.sh - # magic -rcfile $(COMMON_VERIF_DIR)/sky130A/sky130A.magicrc -noconsole -dnull $(COMMON_VERIF_DIR)/magic_commands.tcl < /dev/null - -netgen_lvs: $(RESULTS_DIR)/6_final.gds $(RESULTS_DIR)/6_final.cdl -ifeq ($(shell command -v netgen),) - $(error Netgen not found in PATH) -endif -ifeq ($(shell command -v magic),) - $(error Magic not found in PATH) -endif - mkdir -p $(OBJECTS_DIR)/netgen_lvs/spice $(OBJECTS_DIR)/netgen_lvs/ext - python3 $(UTILS_DIR)/openfasoc/cdl_parser.py -i $(RESULTS_DIR)/6_final.cdl -s $(PLATFORM_DIR)/cdl/sky130_fd_sc_hd.spice -o $(OBJECTS_DIR)/netgen_lvs/spice/$(DESIGN_NAME).spice - $(COMMON_VERIF_DIR)/run_lvspex.sh $(RESULTS_DIR)/6_final.gds $(DESIGN_NAME) $(REPORTS_DIR)/6_final_lvs.rpt - -clean_finish: - rm -rf $(RESULTS_DIR)/6_*.gds $(RESULTS_DIR)/6_*.oas $(RESULTS_DIR)/6_*.odb $(RESULTS_DIR)/6_*.v $(RESULTS_DIR)/6_*.sdc $(RESULTS_DIR)/6_*.spef - rm -rf $(REPORTS_DIR)/6_*.rpt - rm -f $(LOG_DIR)/6_* - - -# ============================================================================== -# __ __ ___ ____ ____ -# | \/ |_ _/ ___| / ___| -# | |\/| || |\___ \| | -# | | | || | ___) | |___ -# |_| |_|___|____/ \____| -# -# ============================================================================== - -all: $(SDC_FILE) $(WRAPPED_LIBS) $(DONT_USE_LIBS) $(OBJECTS_DIR)/klayout.lyt $(WRAPPED_GDSOAS) $(DONT_USE_SC_LIB) - mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR) - ($(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/run_all.tcl -metrics $(LOG_DIR)/run_all.json) 2>&1 | tee $(LOG_DIR)/run_all.log - -clean: - @echo - @echo "Make clean disabled." - @echo "Use make clean_all or clean individual steps:" - @echo " clean_synth clean_floorplan clean_place clean_cts clean_route clean_finish" - @echo - -clean_all: clean_synth clean_floorplan clean_place clean_cts clean_route clean_finish clean_metadata - rm -rf $(OBJECTS_DIR) - -nuke: clean_test clean_issues - rm -rf ./results ./logs ./reports ./objects - rm -rf layer_*.mps macrocell.list *best.plt *_pdn.def dummy.guide - rm -rf *.rpt *.rpt.old *.def.v pin_dumper.log - rm -rf versions.txt - - -# DEF/GDS/OAS viewer shortcuts -#------------------------------------------------------------------------------- -RESULTS_ODB = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.odb))) -RESULTS_DEF = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.def))) -RESULTS_GDS = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.gds))) -RESULTS_OAS = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.oas))) -$(foreach file,$(RESULTS_DEF) $(RESULTS_GDS) $(RESULTS_OAS),klayout_$(file)): klayout_%: $(OBJECTS_DIR)/klayout.lyt - $(KLAYOUT_CMD) -nn $(OBJECTS_DIR)/klayout.lyt $(RESULTS_DIR)/$* - -gui_floorplan: gui_2_floorplan.odb -gui_place: gui_3_place.odb -gui_cts: gui_4_cts.odb -gui_route: gui_5_route.odb -gui_final: gui_6_final.odb - -$(foreach file,$(RESULTS_DEF),gui_$(file)): gui_%: - DEF_FILE=$(RESULTS_DIR)/$* $(OPENROAD_GUI_CMD) $(SCRIPTS_DIR)/gui.tcl - -$(foreach file,$(RESULTS_ODB),gui_$(file)): gui_%: - ODB_FILE=$(RESULTS_DIR)/$* $(OPENROAD_GUI_CMD) $(SCRIPTS_DIR)/gui.tcl - -# Write a def for the corresponding odb -$(foreach file,$(RESULTS_ODB),$(file).def): %.def: - ODB_FILE=$(RESULTS_DIR)/$* DEF_FILE=$(RESULTS_DIR)/$@ $(OPENROAD_CMD) $(SCRIPTS_DIR)/write_def.tcl - -all_defs : $(foreach file,$(RESULTS_ODB),$(file).def) - -print-% : ; @echo $* = $($*) - -# Utilities -#------------------------------------------------------------------------------- -include $(UTILS_DIR)/utils.mk -export PRIVATE_DIR ?= ../../private_tool_scripts --include $(PRIVATE_DIR)/private.mk From ed87597cfb60597ad6ea9d855a304bc157050a6f Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Wed, 17 Apr 2024 17:38:16 +0000 Subject: [PATCH 04/20] commit first lvs files --- .github/scripts/run_glayout_drc.py | 31 ++-- .github/scripts/run_glayout_lvs.py | 102 +++++++++++++ .github/scripts/setup_glayout_ci.py | 13 +- .github/workflows/glayout.yml | 19 +++ .gitignore | 5 + .../common/drc-lvs-check/run_lvsglayout.sh | 63 ++++++++ .../gdsfactory-gen/lvs_flow/Makefile | 2 +- .../lvs_flow/run_glayout_lvs.py | 138 ++++++++++++++++++ .../gdsfactory-gen/lvs_flow/test_lvs.py | 105 ------------- 9 files changed, 352 insertions(+), 126 deletions(-) create mode 100644 .github/scripts/run_glayout_lvs.py create mode 100755 openfasoc/common/drc-lvs-check/run_lvsglayout.sh create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/run_glayout_lvs.py delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/test_lvs.py diff --git a/.github/scripts/run_glayout_drc.py b/.github/scripts/run_glayout_drc.py index 0f5c590ee..6eadb8ea8 100644 --- a/.github/scripts/run_glayout_drc.py +++ b/.github/scripts/run_glayout_drc.py @@ -1,14 +1,9 @@ -import os, sys +import os, sys, re, gdstk, shutil, warnings from pathlib import Path -import gdstk -import shutil import subprocess as sp from gdsfactory.component import Component -# import module for warnings -import warnings - -def place_component(comp_name: str, func: "callable[[Component], any]", pdk: str, *args): +def place_component(comp_name: str, func: "callable[[Component], any]", pdk, *args): """This function places the component on the layout and runs DRC on it in the most modular manner possible to accomodate for possible changes later @@ -30,7 +25,7 @@ def place_component(comp_name: str, func: "callable[[Component], any]", pdk: str print(f"Error in placing {comp_name} : {e}\n exiting....") sys.exit(1) -def eval_component(comp_to_run: Component, pdk: str, clean: int): +def eval_component(comp_to_run: Component, pdk, clean: int): """runs DRC on the generated component passed to it and describes the errors if any. Also cleans the generated gds file @@ -96,7 +91,7 @@ def run_glayout_drc(design_name: str, gds_file: str) -> list: return [subproc_code, drc_report_code] -def check_errors(list_of_errors: list, comp: str, pdk: str): +def check_errors(list_of_errors: list, comp: str, pdk): """helper function to print the errors if any Args: @@ -109,4 +104,20 @@ def check_errors(list_of_errors: list, comp: str, pdk: str): elif list_of_errors[1] == 1: warnings.warn(f"DRC returned non-zero errors for {comp} for {pdk.name}") else: - print(f"DRC passed successfully for {comp} for {pdk.name}") \ No newline at end of file + print(f"DRC passed successfully for {comp} for {pdk.name}") + +def run_drc_wrapper(pdk, components: list): + """wrapper function to run DRC on a list of components + + Args: + pdk (MappedPDK): sky130 or gf180, the process-design-kit being used + components (list): a list of components to run DRC on, contains the name of the + component, the function to generate it and the arguments to be passed to the function + """ + error_codes = [] + for component_info in components: + component_name, component_function, *args = component_info + + inst = place_component(component_name, component_function, pdk, *args) + error_codes.append(eval_component(inst, pdk, 1)) + \ No newline at end of file diff --git a/.github/scripts/run_glayout_lvs.py b/.github/scripts/run_glayout_lvs.py new file mode 100644 index 000000000..7a4f815ed --- /dev/null +++ b/.github/scripts/run_glayout_lvs.py @@ -0,0 +1,102 @@ +import os +import sys +import re +import subprocess as sp +from gdsfactory.component import Component + +sys.path.append(os.path.join(os.path.dirname(__file__), '..')) +sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '.github', 'scripts')) + +from glayout.pdk.sky130_mapped import sky130_mapped_pdk as sky130 +from glayout.pdk.gf180_mapped import gf180_mapped_pdk as gf180 +from glayout.components.diff_pair import diff_pair +from glayout.primitives.fet import nmos, pmos + +from run_glayout_drc import place_component + +# ########################################################################################################### +# ########################################################################################################### +def get_gds_netlist(component_name, func, pdk, gds_path): + component = place_component(component_name, func, pdk) + component.write_gds(gds_path) + netlist = component.info['netlist'].generate_netlist() + return netlist, component + + +def compname_in_net(mynet: str) -> str: + pattern_diff = re.compile(r'\bDIFF_PAIR\b') + pattern_nmos = re.compile(r'\bNMOS\b') + pattern_pmos = re.compile(r'\bPMOS\b') + patterns = [pattern_diff, pattern_nmos, pattern_pmos] + replacements = ['diff_test', 'nmos_test', 'pmos_test'] + + for i, pattern in enumerate(patterns): + if pattern.search(mynet): + replacement = replacements[i] + mynet = re.sub(pattern, replacement, mynet) + return mynet + +def edit_lvs_script(lvs_script: str, comp: Component, revert_flag: bool): + with open(lvs_script, 'r', encoding='utf-8') as rf: + data = rf.read() + print(f'Editing lvs script: {lvs_script}') + pattern = re.compile(r'\{\!\[string compare \$2 "(.*?)"\]\}') + matches = pattern.findall(data) + + to_replace = matches[0] + if not revert_flag: + to_replace_with = comp.name + else: + to_replace_with = 'ldoInst' + + data = re.sub(to_replace, to_replace_with, data) + print(f'Edited lvs script: {data}') + with open(lvs_script, 'w', encoding='utf-8') as wf: + wf.write(data) + + +def edit_makefile(comp: Component, makefile_path: str): + pattern = re.compile(r'export DESIGN_NAME = (.*)_test') + my_var = comp.name + + with open(makefile_path, 'r') as rf: + data = rf.read() + + new_content = re.sub(pattern, f'export DESIGN_NAME = {my_var}', data) + + with open(makefile_path, 'w') as wf: + wf.write(new_content) +###################################################################################################################################################################################################################### +###################################################################################################################################################################################################################### + + +gds_path = './results/sky130hd/glayout/6_final.gds' +cdl_path = './results/sky130hd/glayout/6_final.cdl' +makefile_script = './Makefile' + +components = [ + ["diff_pair_test", diff_pair], + ["nmos_test", nmos], + ["pmos_test", pmos] +] + +for comp in components: + mynet, comp = get_gds_netlist(comp[0], comp[1], sky130, gds_path) + + net_file = cdl_path + mynet = compname_in_net(mynet) + with open(net_file, 'w') as wf: + wf.write(mynet) + + edit_makefile(comp, makefile_script) + + subproc_cmd = ['make', 'netgen_lvs'] + sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) + stdout, stderr = sub.communicate() + + print(stdout) + + if sub.returncode != 0: + print(f'LVS failed for {comp[0]} with error:\n {stderr}') + else: + print(f'LVS run successful for {comp[0]}') \ No newline at end of file diff --git a/.github/scripts/setup_glayout_ci.py b/.github/scripts/setup_glayout_ci.py index c278c26e8..927a0f45d 100644 --- a/.github/scripts/setup_glayout_ci.py +++ b/.github/scripts/setup_glayout_ci.py @@ -2,7 +2,7 @@ import pathlib import sys sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', '.github', 'scripts')) -from run_glayout_drc import place_component, eval_component +from run_glayout_drc import run_drc_wrapper from gdsfactory.component import Component import argparse @@ -24,7 +24,7 @@ pdk = sky130 elif (args.pdk == 'gf180'): pdk = gf180 -else : +else: print('Invalid PDK, continuing with sky130') pdk = sky130 @@ -45,8 +45,6 @@ os.environ["RESULTS_DIR"] = results_dir os.environ["REPORTS_DIR"] = reports_dir -# pdks = [sky130, gf180] -error_codes = [] components = [ ("nfet_test", fet.nmos), @@ -60,11 +58,6 @@ ("opamp_test", opamp.opamp) ] - -for component_info in components: - component_name, component_function, *args = component_info - - inst = place_component(component_name, component_function, pdk, *args) - error_codes.append(eval_component(inst, pdk, 1)) +run_drc_wrapper(pdk, components) sys.exit(0) diff --git a/.github/workflows/glayout.yml b/.github/workflows/glayout.yml index 8b8dee0f8..84b1dc49d 100644 --- a/.github/workflows/glayout.yml +++ b/.github/workflows/glayout.yml @@ -65,3 +65,22 @@ jobs: " && exit_code=$? | tee -a file_gf180.log if [ $? -ne 0 ]; then exit 1; fi if grep "\[ERROR\]" file_gf180.log; then exit 1; else exit 0; fi + # - name: Test sky130 glayout LVS + # env: + # IMAGE_NAME: msaligane/openfasoc:stable + # run: | + # cd $GITHUB_WORKSPACE + # touch file_sky130_lvs.log + # docker run --rm \ + # -v $PWD:$PWD\ + # -w $PWD\ + # $IMAGE_NAME\ + # bash -c "\ + # cp ./.github/scripts/run_glayout_lvs.py ./openfasoc/generators/gdsfactory-gen/lvs_flow. &&\ + # pip3 install -r ./openfasoc/generators/gdsfactory-gen/glayout/requirements.txt &&\ + # pip3 install gdsfactory==7.7.0 &&\ + # cd ./openfasoc/generators/gdsfactory-gen/ &&\ + # python3 run_glayout_lvs.py + # " && exit_code=$? | tee -a file_sky130_lvs.log + # if [ $? -ne 0 ]; then exit 1; fi + # if grep "\[ERROR\]" file_sky130_lvs.log; then exit 1; else exit 0; fi \ No newline at end of file diff --git a/.gitignore b/.gitignore index 2065f1197..8fe2294cf 100644 --- a/.gitignore +++ b/.gitignore @@ -147,3 +147,8 @@ cython_debug/ *.DS_Store .DS_Store *Thumbs.db + +# glayout +*.res/ +*.res/reports +*.res/results \ No newline at end of file diff --git a/openfasoc/common/drc-lvs-check/run_lvsglayout.sh b/openfasoc/common/drc-lvs-check/run_lvsglayout.sh new file mode 100755 index 000000000..13b4f621b --- /dev/null +++ b/openfasoc/common/drc-lvs-check/run_lvsglayout.sh @@ -0,0 +1,63 @@ +# change to ext/ directory because the extract command generates .ext files +# in the current directory +cd $OBJECTS_DIR/netgen_lvs/ext/ + +# generate lvs netlist using magic +cat > magic.script < str: + pattern_diff = re.compile(r'\bDIFF_PAIR\b') + pattern_nmos = re.compile(r'\bNMOS\b') + pattern_pmos = re.compile(r'\bPMOS\b') + patterns = [pattern_diff, pattern_nmos, pattern_pmos] + replacements = ['diff_test', 'nmos_test', 'pmos_test'] + + for i, pattern in enumerate(patterns): + if pattern.search(mynet): + replacement = replacements[i] + mynet = re.sub(pattern, replacement, mynet) + return mynet + +def edit_lvs_script(lvs_script: str, comp: Component, revert_flag: bool): + with open(lvs_script, 'r', encoding='utf-8') as rf: + data = rf.read() + print(f'Editing lvs script: {lvs_script}') + pattern = re.compile(r'\{\!\[string compare \$2 "(.*?)"\]\}') + matches = pattern.findall(data) + + to_replace = matches[0] + if not revert_flag: + to_replace_with = comp.name + else: + to_replace_with = 'ldoInst' + + data = re.sub(to_replace, to_replace_with, data) + print(f'Edited lvs script: {data}') + with open(lvs_script, 'w', encoding='utf-8') as wf: + wf.write(data) + + +def edit_makefile(comp: Component, makefile_path: str): + pattern = re.compile(r'export DESIGN_NAME = (.*)_test') + my_var = comp.name + + with open(makefile_path, 'r') as rf: + data = rf.read() + + new_content = re.sub(pattern, f'export DESIGN_NAME = {my_var}', data) + + with open(makefile_path, 'w') as wf: + wf.write(new_content) +###################################################################################################################################################################################################################### +###################################################################################################################################################################################################################### + + +gds_path = './results/sky130hd/glayout/6_final.gds' +cdl_path = './results/sky130hd/glayout/6_final.cdl' +makefile_script = './Makefile' + + +mynet, comp = get_gds_netlist('pmos_test', pmos, sky130, gds_path) + +net_file = cdl_path +mynet = compname_in_net(mynet) +with open(net_file, 'w') as wf: + wf.write(mynet) + +edit_makefile(comp, makefile_script) + +subproc_cmd = ['make', 'netgen_lvs'] +sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) +stdout, stderr = sub.communicate() + +print(stdout) + +if sub.returncode != 0: + print(f'LVS failed for pmos_test with error:\n {stderr}') +else: + print(f'LVS run successful for pmos_test') + + +mynet, comp = get_gds_netlist('nmos_test', nmos, sky130, gds_path) + +net_file = cdl_path +mynet = compname_in_net(mynet) +with open(net_file, 'w') as wf: + wf.write(mynet) + +edit_makefile(comp, makefile_script) + +subproc_cmd = ['make', 'netgen_lvs'] +sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) +stdout, stderr = sub.communicate() + +print(stdout) + +if sub.returncode != 0: + print(f'LVS failed for nmos_test with error:\n {stderr}') +else: + print(f'LVS run successful for nmos_test') + + +mynet, comp = get_gds_netlist('diff_test', diff_pair, sky130, gds_path) + +net_file = cdl_path +mynet = compname_in_net(mynet) +with open(net_file, 'w') as wf: + wf.write(mynet) + +edit_makefile(comp, makefile_script) + +subproc_cmd = ['make', 'netgen_lvs'] +sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) +stdout, stderr = sub.communicate() + +print(stdout) + +if sub.returncode != 0: + print(f'LVS failed for diff_test with error:\n {stderr}') +else: + print(f'LVS run successful for diff_test') \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/test_lvs.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/test_lvs.py deleted file mode 100644 index 2dac20318..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/test_lvs.py +++ /dev/null @@ -1,105 +0,0 @@ -import os, sys -sys.path.append(os.path.join(os.path.dirname(__file__), '..')) -from glayout.primitives.fet import nmos -from glayout.pdk.sky130_mapped import sky130_mapped_pdk as sky130 -from glayout.components.diff_pair import diff_pair -from glayout.components.opamp import opamp -from glayout.primitives.fet import nmos, pmos -import subprocess as sp -import re - -# mynet = mynet.replace('opamp', 'opamp_test') -# mynet = mynet.replace('PMOS', 'pmos_test') -# mynet = mynet.replace('NMOS', 'nmos_test') -lvs_script = './../../../common/drc-lvs-check/run_lvspex.sh' -gds_path = './results/sky130hd/glayout/6_final.gds' -cdl_path = './results/sky130hd/glayout/6_final.cdl' -makefile_script = './Makefile' - - -mymos = diff_pair(sky130) -mymos.name = 'diff_test' -mymos.write_gds(gds_path) -mynet = mymos.info['netlist'].generate_netlist() -print(mynet) - -pattern_diff = re.compile(r'\bDIFF_PAIR\b') -pattern_nmos = re.compile(r'\bNMOS\b') -pattern_pmos = re.compile(r'\bPMOS\b') -patterns = [pattern_diff, pattern_nmos, pattern_pmos] -replacements = ['diff_test', 'nmos_test', 'pmos_test'] - -for i, pattern in enumerate(patterns): - if pattern.search(mynet): - replacement = replacements[i] - mynet = re.sub(pattern, replacement, mynet) - - -with open(lvs_script, 'r') as rf: - data = rf.read() - -pattern = re.compile(r'\{\!\[string compare \$2 "(.*?)"\]\}') -matches = pattern.findall(data) -save = matches[0] - -to_replace = matches[0] -to_replace_with = mymos.name - -data = re.sub(to_replace, to_replace_with, data) - -with open(lvs_script, 'w') as wf: - wf.write(data) - -net_file = cdl_path - -with open(net_file, 'w') as wf: - wf.write(mynet) - -pattern = re.compile(r'export DESIGN_NAME = (.*)_test') -my_var = mymos.name - -with open(makefile_script, 'r') as rf: - data = rf.read() - -new_content = re.sub(pattern, f'export DESIGN_NAME = {my_var}', data) - -with open(makefile_script, 'w') as wf: - wf.write(new_content) - -subproc_cmd = ['make', 'netgen_lvs'] -sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) -stdout, stderr = sub.communicate() - -print(stdout) - -if sub.returncode != 0: - print('Error:', stderr) - - - -# data = data.replace('nmos_test', mymos.name) -# with open(lvs_script, 'w') as wf: -# wf.write(data) - - - - -# mymos = nmos(sky130) -# mymos.name = 'nmos_test' -# mymos.write_gds('../temp-sense-gen/flow/results/sky130hd/tempsense/6_final.gds') -# mynet = mymos.info['netlist'].generate_netlist() -# print(mynet) -# mynet = mynet.replace('NMOS', 'nmos_test') - -# string_to_replace = 'export DESIGN_NAME = diff_test' -# string_to_replace_with = 'export DESIGN_NAME = ' + mymos.name -# data = data.replace(string_to_replace, string_to_replace_with) - - - -# mydiff = opamp(sky130) -# mydiff.name = 'opamp_test' -# mydiff.write_gds('../temp-sense-gen/flow/results/sky130hd/tempsense/6_final.gds') - -# mynet = mydiff.info['netlist'].generate_netlist() -# mynet = mynet.replace('DIFF_PAIR', 'diff_test') \ No newline at end of file From 5336ef93cacb4437a5c9f015b7bc385d242e16a0 Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Thu, 18 Apr 2024 15:48:52 +0000 Subject: [PATCH 05/20] improving lvs testing --- .github/scripts/run_glayout_lvs.py | 115 +++++++++++++----- .../common/drc-lvs-check/run_lvsglayout.sh | 63 ---------- openfasoc/common/drc-lvs-check/run_lvspex.sh | 28 +++++ .../gdsfactory-gen/lvs_flow/Makefile | 34 +----- .../lvs_flow/run_glayout_lvs.py | 35 +++++- 5 files changed, 148 insertions(+), 127 deletions(-) delete mode 100755 openfasoc/common/drc-lvs-check/run_lvsglayout.sh diff --git a/.github/scripts/run_glayout_lvs.py b/.github/scripts/run_glayout_lvs.py index 7a4f815ed..455882b05 100644 --- a/.github/scripts/run_glayout_lvs.py +++ b/.github/scripts/run_glayout_lvs.py @@ -11,6 +11,7 @@ from glayout.pdk.gf180_mapped import gf180_mapped_pdk as gf180 from glayout.components.diff_pair import diff_pair from glayout.primitives.fet import nmos, pmos +from glayout.components.opamp import opamp from run_glayout_drc import place_component @@ -27,8 +28,9 @@ def compname_in_net(mynet: str) -> str: pattern_diff = re.compile(r'\bDIFF_PAIR\b') pattern_nmos = re.compile(r'\bNMOS\b') pattern_pmos = re.compile(r'\bPMOS\b') - patterns = [pattern_diff, pattern_nmos, pattern_pmos] - replacements = ['diff_test', 'nmos_test', 'pmos_test'] + pattern_opamp = re.compile(r'\bopamp\b') + patterns = [pattern_diff, pattern_nmos, pattern_pmos, pattern_opamp] + replacements = ['diff_test', 'nmos_test', 'pmos_test', 'opamp_test'] for i, pattern in enumerate(patterns): if pattern.search(mynet): @@ -74,29 +76,86 @@ def edit_makefile(comp: Component, makefile_path: str): cdl_path = './results/sky130hd/glayout/6_final.cdl' makefile_script = './Makefile' -components = [ - ["diff_pair_test", diff_pair], - ["nmos_test", nmos], - ["pmos_test", pmos] -] - -for comp in components: - mynet, comp = get_gds_netlist(comp[0], comp[1], sky130, gds_path) - - net_file = cdl_path - mynet = compname_in_net(mynet) - with open(net_file, 'w') as wf: - wf.write(mynet) - - edit_makefile(comp, makefile_script) - - subproc_cmd = ['make', 'netgen_lvs'] - sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) - stdout, stderr = sub.communicate() - - print(stdout) - - if sub.returncode != 0: - print(f'LVS failed for {comp[0]} with error:\n {stderr}') - else: - print(f'LVS run successful for {comp[0]}') \ No newline at end of file +## PMOS +mynet, comp = get_gds_netlist('pmos_test', pmos, sky130, gds_path) + +net_file = cdl_path +mynet = compname_in_net(mynet) +with open(net_file, 'w') as wf: + wf.write(mynet) + +edit_makefile(comp, makefile_script) + +subproc_cmd = ['make', 'netgen_lvs'] +sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) +stdout, stderr = sub.communicate() + +print(stdout) + +if sub.returncode != 0: + print(f'LVS failed for pmos_test with error:\n {stderr}') +else: + print(f'LVS run successful for pmos_test') + +## NMOS +mynet, comp = get_gds_netlist('nmos_test', nmos, sky130, gds_path) + +net_file = cdl_path +mynet = compname_in_net(mynet) +with open(net_file, 'w') as wf: + wf.write(mynet) + +edit_makefile(comp, makefile_script) + +subproc_cmd = ['make', 'netgen_lvs'] +sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) +stdout, stderr = sub.communicate() + +print(stdout) + +if sub.returncode != 0: + print(f'LVS failed for nmos_test with error:\n {stderr}') +else: + print(f'LVS run successful for nmos_test') + +## DIFF_PAIR +mynet, comp = get_gds_netlist('diff_test', diff_pair, sky130, gds_path) + +net_file = cdl_path +mynet = compname_in_net(mynet) +with open(net_file, 'w') as wf: + wf.write(mynet) + +edit_makefile(comp, makefile_script) + +subproc_cmd = ['make', 'netgen_lvs'] +sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) +stdout, stderr = sub.communicate() + +print(stdout) + +if sub.returncode != 0: + print(f'LVS failed for diff_test with error:\n {stderr}') +else: + print(f'LVS run successful for diff_test') + +## OPAMP +mynet, comp = get_gds_netlist('opamp_test', opamp, sky130, gds_path) + +net_file = cdl_path +mynet = compname_in_net(mynet) +with open(net_file, 'w') as wf: + wf.write(mynet) + +edit_makefile(comp, makefile_script) + +subproc_cmd = ['make', 'netgen_lvs'] +sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) +stdout, stderr = sub.communicate() + +print(stdout) + +if sub.returncode != 0: + print(f'LVS failed for opamp_test with error:\n {stderr}') +else: + print(f'LVS run successful for opamp_test') \ No newline at end of file diff --git a/openfasoc/common/drc-lvs-check/run_lvsglayout.sh b/openfasoc/common/drc-lvs-check/run_lvsglayout.sh deleted file mode 100755 index 13b4f621b..000000000 --- a/openfasoc/common/drc-lvs-check/run_lvsglayout.sh +++ /dev/null @@ -1,63 +0,0 @@ -# change to ext/ directory because the extract command generates .ext files -# in the current directory -cd $OBJECTS_DIR/netgen_lvs/ext/ - -# generate lvs netlist using magic -cat > magic.script < str: pattern_diff = re.compile(r'\bDIFF_PAIR\b') pattern_nmos = re.compile(r'\bNMOS\b') pattern_pmos = re.compile(r'\bPMOS\b') - patterns = [pattern_diff, pattern_nmos, pattern_pmos] - replacements = ['diff_test', 'nmos_test', 'pmos_test'] + pattern_opamp = re.compile(r'\bopamp\b') + patterns = [pattern_diff, pattern_nmos, pattern_pmos, pattern_opamp] + replacements = ['diff_test', 'nmos_test', 'pmos_test', 'opamp_test'] for i, pattern in enumerate(patterns): if pattern.search(mynet): @@ -74,7 +76,7 @@ def edit_makefile(comp: Component, makefile_path: str): cdl_path = './results/sky130hd/glayout/6_final.cdl' makefile_script = './Makefile' - +## PMOS mynet, comp = get_gds_netlist('pmos_test', pmos, sky130, gds_path) net_file = cdl_path @@ -95,7 +97,7 @@ def edit_makefile(comp: Component, makefile_path: str): else: print(f'LVS run successful for pmos_test') - +## NMOS mynet, comp = get_gds_netlist('nmos_test', nmos, sky130, gds_path) net_file = cdl_path @@ -116,7 +118,7 @@ def edit_makefile(comp: Component, makefile_path: str): else: print(f'LVS run successful for nmos_test') - +## DIFF_PAIR mynet, comp = get_gds_netlist('diff_test', diff_pair, sky130, gds_path) net_file = cdl_path @@ -135,4 +137,25 @@ def edit_makefile(comp: Component, makefile_path: str): if sub.returncode != 0: print(f'LVS failed for diff_test with error:\n {stderr}') else: - print(f'LVS run successful for diff_test') \ No newline at end of file + print(f'LVS run successful for diff_test') + +## OPAMP +mynet, comp = get_gds_netlist('opamp_test', opamp, sky130, gds_path) + +net_file = cdl_path +mynet = compname_in_net(mynet) +with open(net_file, 'w') as wf: + wf.write(mynet) + +edit_makefile(comp, makefile_script) + +subproc_cmd = ['make', 'netgen_lvs'] +sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) +stdout, stderr = sub.communicate() + +print(stdout) + +if sub.returncode != 0: + print(f'LVS failed for opamp_test with error:\n {stderr}') +else: + print(f'LVS run successful for opamp_test') \ No newline at end of file From 877c81f8338d3597502f80541a7a754867890f7e Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Thu, 18 Apr 2024 18:10:28 +0000 Subject: [PATCH 06/20] adding results --- .../gdsfactory-gen/lvs_flow/.gitignore | 14 +- .../glayout/netgen_lvs/ext/diff_test.ext | 43 +++ .../glayout/netgen_lvs/ext/magic.script | 56 +++ .../glayout/netgen_lvs/ext/nmos_test.ext | 23 ++ .../glayout/netgen_lvs/ext/opamp_test.ext | 325 ++++++++++++++++++ .../glayout/netgen_lvs/ext/pmos_test.ext | 21 ++ .../glayout/netgen_lvs/spice/diff_test.spice | 9 + .../netgen_lvs/spice/diff_test_lvsmag.spice | 25 ++ .../netgen_lvs/spice/diff_test_pex.spice | 40 +++ .../netgen_lvs/spice/diff_test_sim.spice | 40 +++ .../glayout/netgen_lvs/spice/nmos_test.spice | 6 + .../netgen_lvs/spice/nmos_test_lvsmag.spice | 8 + .../netgen_lvs/spice/nmos_test_pex.spice | 20 ++ .../netgen_lvs/spice/nmos_test_sim.spice | 20 ++ .../glayout/netgen_lvs/spice/opamp_test.spice | 71 ++++ .../netgen_lvs/spice/opamp_test_lvsmag.spice | 261 ++++++++++++++ .../netgen_lvs/spice/opamp_test_pex.spice | 320 +++++++++++++++++ .../netgen_lvs/spice/opamp_test_sim.spice | 320 +++++++++++++++++ .../glayout/netgen_lvs/spice/pmos_test.spice | 6 + .../netgen_lvs/spice/pmos_test_lvsmag.spice | 8 + .../netgen_lvs/spice/pmos_test_pex.spice | 18 + .../netgen_lvs/spice/pmos_test_sim.spice | 18 + .../reports/sky130hd/glayout/6_final_lvs.rpt | 246 +++++++++++++ .../results/sky130hd/glayout/6_final.cdl | 84 +++++ .../results/sky130hd/glayout/6_final.gds | Bin 0 -> 2983940 bytes .../gdsfactory-gen/setup_glayout_ci.py | 63 ++++ res/reports/6_final_drc.rpt | 3 + 27 files changed, 2061 insertions(+), 7 deletions(-) create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/diff_test.ext create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/magic.script create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/nmos_test.ext create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/opamp_test.ext create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/pmos_test.ext create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_lvsmag.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_pex.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_sim.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_lvsmag.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_pex.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_sim.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_lvsmag.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_pex.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_sim.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_lvsmag.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_pex.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_sim.spice create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/reports/sky130hd/glayout/6_final_lvs.rpt create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.cdl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.gds create mode 100644 openfasoc/generators/gdsfactory-gen/setup_glayout_ci.py create mode 100644 res/reports/6_final_drc.rpt diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/.gitignore b/openfasoc/generators/gdsfactory-gen/lvs_flow/.gitignore index dc5991704..b4699b2d0 100644 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/.gitignore +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/.gitignore @@ -1,7 +1,7 @@ -logs/ -objects/ -reports/ -results/ -/*.log -/*.spice -/*.ext +# logs/ +# objects/ +# reports/ +# results/ +# /*.log +# /*.spice +# /*.ext diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/diff_test.ext b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/diff_test.ext new file mode 100644 index 000000000..05a458121 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/diff_test.ext @@ -0,0 +1,43 @@ +timestamp 0 +version 8.3 +tech sky130A +style ngspice() +scale 1000 1 500000 +resistclasses 4400000 2200000 950000 3050000 120000 197000 114000 191000 120000 197000 114000 191000 48200 319800 2000000 48200 48200 12800 125 125 47 47 29 5 +parameters sky130_fd_pr__nfet_01v8 l=l w=w a1=as p1=ps a2=ad p2=pd +node "a_n549_n997#" 4368 2025.49 -549 -997 ndif 0 0 0 0 0 0 0 0 240000 5600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 200904 6616 361200 13076 187440 5944 0 0 0 0 0 0 0 0 +node "a_n549_397#" 4368 2196.98 -549 397 ndif 0 0 0 0 0 0 0 0 240000 5600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 200904 6616 358792 13020 206184 6512 0 0 0 0 0 0 0 0 +node "a_n674_n997#" 13714 3429.69 -674 -997 ndif 0 0 0 0 0 0 0 0 696000 16720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 534600 17784 698672 25608 283536 8856 0 0 0 0 0 0 0 0 +node "a_n579_n1047#" 10536 4215.68 -579 -1047 p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 242640 14424 0 0 26136 1584 398524 12424 234300 7364 0 0 0 0 0 0 0 0 +node "a_n579_201#" 10535 4095.6 -579 201 p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 242640 14424 0 0 26136 1584 398524 12424 219252 6908 0 0 0 0 0 0 0 0 +substrate "a_n1366_n1488#" 0 0 -1366 -1488 ppd 0 0 0 0 0 0 0 0 456000 11120 909216 22176 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 101424 6656 0 0 1376496 36336 0 0 0 0 0 0 0 0 0 0 0 0 +cap "a_n674_n997#" "a_n549_n997#" 5614.66 +cap "a_n579_201#" "a_n549_n997#" 287.679 +cap "a_n579_n1047#" "a_n674_n997#" 751.816 +cap "a_n579_n1047#" "a_n549_n997#" 803.013 +cap "a_n579_201#" "a_n674_n997#" 765.855 +cap "a_n579_201#" "a_n579_n1047#" 3163.74 +cap "a_n549_397#" "a_n549_n997#" 641.247 +cap "a_n674_n997#" "a_n549_397#" 5575.63 +cap "a_n579_n1047#" "a_n549_397#" 157.927 +cap "a_n579_201#" "a_n549_397#" 932.267 +device msubckt sky130_fd_pr__nfet_01v8 897 -997 898 -996 l=30 w=600 "a_n1366_n1488#" "a_n1366_n1488#" 60 0 "a_n1366_n1488#" 0 0 "a_n1366_n1488#" 1200 57000,1390 +device msubckt sky130_fd_pr__nfet_01v8 549 -997 550 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n549_397#" 600 30000,700 "a_n674_n997#" 600 57000,1390 +device msubckt sky130_fd_pr__nfet_01v8 419 -997 420 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n674_n997#" 600 30000,700 "a_n549_397#" 600 30000,700 +device msubckt sky130_fd_pr__nfet_01v8 289 -997 290 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n549_397#" 600 30000,700 "a_n674_n997#" 600 30000,700 +device msubckt sky130_fd_pr__nfet_01v8 159 -997 160 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n674_n997#" 600 57000,1390 "a_n549_397#" 600 30000,700 +device msubckt sky130_fd_pr__nfet_01v8 -189 -997 -188 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n549_n997#" 600 30000,700 "a_n674_n997#" 600 57000,1390 +device msubckt sky130_fd_pr__nfet_01v8 -319 -997 -318 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n674_n997#" 600 30000,700 "a_n549_n997#" 600 30000,700 +device msubckt sky130_fd_pr__nfet_01v8 -449 -997 -448 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n549_n997#" 600 30000,700 "a_n674_n997#" 600 30000,700 +device msubckt sky130_fd_pr__nfet_01v8 -579 -997 -578 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n674_n997#" 600 57000,1390 "a_n549_n997#" 600 30000,700 +device msubckt sky130_fd_pr__nfet_01v8 -927 -997 -926 -996 l=30 w=600 "a_n1366_n1488#" "a_n1366_n1488#" 60 0 "a_n1366_n1488#" 0 0 "a_n1366_n1488#" 1200 57000,1390 +device msubckt sky130_fd_pr__nfet_01v8 897 397 898 398 l=30 w=600 "a_n1366_n1488#" "a_n1366_n1488#" 60 0 "a_n1366_n1488#" 0 0 "a_n1366_n1488#" 1200 57000,1390 +device msubckt sky130_fd_pr__nfet_01v8 549 397 550 398 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n549_n997#" 600 30000,700 "a_n674_n997#" 600 57000,1390 +device msubckt sky130_fd_pr__nfet_01v8 419 397 420 398 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n674_n997#" 600 30000,700 "a_n549_n997#" 600 30000,700 +device msubckt sky130_fd_pr__nfet_01v8 289 397 290 398 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n549_n997#" 600 30000,700 "a_n674_n997#" 600 30000,700 +device msubckt sky130_fd_pr__nfet_01v8 159 397 160 398 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n674_n997#" 600 57000,1390 "a_n549_n997#" 600 30000,700 +device msubckt sky130_fd_pr__nfet_01v8 -189 397 -188 398 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n549_397#" 600 30000,700 "a_n674_n997#" 600 57000,1390 +device msubckt sky130_fd_pr__nfet_01v8 -319 397 -318 398 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n674_n997#" 600 30000,700 "a_n549_397#" 600 30000,700 +device msubckt sky130_fd_pr__nfet_01v8 -449 397 -448 398 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n549_397#" 600 30000,700 "a_n674_n997#" 600 30000,700 +device msubckt sky130_fd_pr__nfet_01v8 -579 397 -578 398 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n674_n997#" 600 57000,1390 "a_n549_397#" 600 30000,700 +device msubckt sky130_fd_pr__nfet_01v8 -927 397 -926 398 l=30 w=600 "a_n1366_n1488#" "a_n1366_n1488#" 60 0 "a_n1366_n1488#" 0 0 "a_n1366_n1488#" 1200 57000,1390 diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/magic.script b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/magic.script new file mode 100644 index 000000000..bafe6d692 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/magic.script @@ -0,0 +1,56 @@ +gds flatglob *$$* +gds read /home/chetanya/OpenFASOC/openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.gds +load opamp_test + +if {![string compare opamp_test "diff_test"]} { + select top cell + flatten diff_test_flat + load diff_test_flat + cellname delete diff_test + cellname rename diff_test_flat diff_test + select top cell +} elseif {![string compare opamp_test "diff_test"]} { + select top cell + flatten diff_test_flat + load diff_test_flat + cellname delete diff_test + cellname rename diff_test_flat diff_test + select top cell +} elseif {![string compare opamp_test "nmos_test"]} { + select top cell + flatten nmos_test_flat + load nmos_test_flat + cellname delete nmos_test + cellname rename nmos_test_flat nmos_test + select top cell +} elseif {![string compare opamp_test "pmos_test"]} { + select top cell + flatten pmos_test_flat + load pmos_test_flat + cellname delete pmos_test + cellname rename pmos_test_flat pmos_test + select top cell +} elseif {![string compare opamp_test "opamp_test"]} { + select top cell + flatten opamp_test_flat + load opamp_test_flat + cellname delete opamp_test + cellname rename opamp_test_flat opamp_test + select top cell +} else { + select top cell +} +extract all +ext2spice lvs +ext2spice -o ../spice/opamp_test_lvsmag.spice +load opamp_test +extract all +ext2spice lvs +ext2spice rthresh 0 +ext2spice cthresh 0 +ext2spice -o ../spice/opamp_test_pex.spice +load opamp_test +extract all +ext2spice cthresh 0 +ext2spice -o ../spice/opamp_test_sim.spice +exit diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/nmos_test.ext b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/nmos_test.ext new file mode 100644 index 000000000..d5f17dbc7 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/nmos_test.ext @@ -0,0 +1,23 @@ +timestamp 0 +version 8.3 +tech sky130A +style ngspice() +scale 1000 1 500000 +resistclasses 4400000 2200000 950000 3050000 120000 197000 114000 191000 120000 197000 114000 191000 48200 319800 2000000 48200 48200 12800 125 125 47 47 29 5 +parameters sky130_fd_pr__nfet_01v8 l=l w=w a1=as p1=ps a2=ad p2=pd +node "a_15_n286#" 907 47.7644 15 -286 ndif 0 0 0 0 0 0 0 0 57000 1390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50226 1654 45704 1808 0 0 0 0 0 0 0 0 0 0 +node "a_n110_n286#" 891 48.0941 -110 -286 ndif 0 0 0 0 0 0 0 0 57000 1390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44550 1482 45704 1808 0 0 0 0 0 0 0 0 0 0 +node "a_n33_n482#" 1359 35.0755 -33 -482 p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27756 1824 0 0 4356 264 4356 264 0 0 0 0 0 0 0 0 0 0 +node "w_n734_n737#" 24039 2053.05 -734 -737 pw 2163832 5884 0 0 0 0 0 0 228000 5560 414920 10120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50712 3328 0 0 565392 16416 220416 5704 0 0 0 0 0 0 0 0 0 0 +node "dw_n734_n737#" 2209 6491.5 -734 -737 dnw 0 0 2163832 5884 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +substrate "a_n884_n887#" 0 0 -884 -887 ppd 0 0 0 0 0 0 0 0 0 0 553992 13512 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 471248 13152 289952 7400 0 0 0 0 0 0 0 0 0 0 +cap "w_n734_n737#" "a_n110_n286#" 283.328 +cap "a_n33_n482#" "a_15_n286#" 45.5751 +cap "w_n734_n737#" "a_15_n286#" 387.693 +cap "w_n734_n737#" "a_n33_n482#" 279.309 +cap "dw_n734_n737#" "w_n734_n737#" 6491.5 +cap "a_n110_n286#" "a_15_n286#" 598.904 +cap "a_n33_n482#" "a_n110_n286#" 55.6978 +device msubckt sky130_fd_pr__nfet_01v8 333 -286 334 -285 l=30 w=600 "w_n734_n737#" "w_n734_n737#" 60 0 "w_n734_n737#" 0 0 "w_n734_n737#" 1200 57000,1390 +device msubckt sky130_fd_pr__nfet_01v8 -15 -286 -14 -285 l=30 w=600 "w_n734_n737#" "a_n33_n482#" 60 0 "a_n110_n286#" 600 57000,1390 "a_15_n286#" 600 57000,1390 +device msubckt sky130_fd_pr__nfet_01v8 -363 -286 -362 -285 l=30 w=600 "w_n734_n737#" "w_n734_n737#" 60 0 "w_n734_n737#" 0 0 "w_n734_n737#" 1200 57000,1390 diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/opamp_test.ext b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/opamp_test.ext new file mode 100644 index 000000000..63017dfeb --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/opamp_test.ext @@ -0,0 +1,325 @@ +timestamp 0 +version 8.3 +tech sky130A +style ngspice() +scale 1000 1 500000 +resistclasses 4400000 2200000 950000 3050000 120000 197000 114000 191000 120000 197000 114000 191000 48200 319800 2000000 48200 48200 12800 125 125 47 47 29 5 +parameters sky130_fd_pr__nfet_01v8 l=l w=w a1=as p1=ps a2=ad p2=pd +parameters sky130_fd_pr__pfet_01v8 l=l w=w a1=as p1=ps a2=ad p2=pd +parameters sky130_fd_pr__cap_mim_m3_1 w=w l=l +node "a_n2517_n3844#" 12779 30408.9 -2517 -3844 p 0 0 0 0 0 0 0 0 374400 10224 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5072000 31760 0 0 520080 19456 485488 19696 2738168 39208 680400 5136 0 0 0 0 0 0 +node "a_13154_n1884#" 12779 30131.9 13154 -1884 p 0 0 0 0 0 0 0 0 374400 10224 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5072000 31760 0 0 520080 19456 485488 19696 2615768 37984 680400 5136 0 0 0 0 0 0 +node "a_12876_1294#" 29986 13809.6 12876 1294 ndif 0 0 0 0 0 0 0 0 992400 29460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1234596 39128 896548 33580 1950576 23416 731400 5476 0 0 0 0 0 0 +node "a_n1455_n3628#" 34469 16057 -1455 -3628 ndif 0 0 0 0 0 0 0 0 1440000 40800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1586640 50192 2001584 56896 1469880 28292 0 0 0 0 0 0 0 0 +node "a_n8335_n2966#" 19297 109473 -8335 -2966 p 0 0 0 0 0 0 0 0 633600 20256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27946152 177216 0 0 1705440 81248 3043136 84176 1344152 33828 4914000 33360 4571200 23056 0 0 0 0 +node "a_n1140_1442#" 6219 17908.8 -1140 1442 p 0 0 0 0 0 0 0 0 42000 1620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2339736 26336 0 0 132858 6798 685356 21992 5434018 40864 378000 2840 0 0 0 0 0 0 +node "a_n2148_3925#" 6218 15191.3 -2148 3925 ndif 0 0 0 0 0 0 0 0 42000 1620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2339736 26336 0 0 132858 6798 678744 21764 3604262 31104 378000 2840 0 0 0 0 0 0 +node "a_n2686_8022#" 54608 18035.2 -2686 8022 pdif 0 0 0 0 0 0 0 0 0 0 1224000 35640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1204896 38360 2488636 62302 531926 13914 39845052 78518 0 0 0 0 0 0 +node "a_n2511_10156#" 48496 597.469 -2511 10156 pdif 0 0 0 0 0 0 0 0 0 0 1008000 30480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1089792 34608 2616248 57146 283144 8700 0 0 0 0 0 0 0 0 +node "a_n2686_12378#" 38682 10244.6 -2686 12378 pdif 0 0 0 0 0 0 0 0 316800 10128 691200 20352 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11707392 131680 0 0 1488960 59376 3584572 98262 989790 30622 180000 2400 853476 9970 0 0 0 0 +node "a_n7935_n484#" 44976 72983.8 -7935 -484 ndif 0 0 0 0 0 0 0 0 1267200 40512 2772000 87960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4136340 46312 0 0 4944588 160528 7974252 213920 2307826 57982 12177600 82984 47487920 116122 0 0 0 0 +node "a_n7677_7899#" 33094 20206.8 -7677 7899 p 0 0 0 0 0 0 0 0 316800 10128 475200 15192 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19987224 221520 0 0 1609080 69880 4196542 101726 1676732 48396 3151800 22812 805956 9442 0 0 0 0 +node "w_n8526_7510#" 1520 351129 -8526 7510 nw 0 0 0 0 112202160 47264 0 0 7057824 176320 8654400 248160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6295832 73704 0 0 15458436 457364 11489568 280348 17623400 70110 10301100 68474 0 0 0 0 0 0 +substrate "a_n9311_n3159#" 0 0 -9311 -3159 ppd 0 0 0 0 0 0 0 0 8186400 231248 15330064 373904 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10376680 85424 0 0 21791512 648412 35408436 498486 6217640 86516 14332200 59280 0 0 0 0 0 0 +cap "a_n2511_10156#" "w_n8526_7510#" 11846.5 +cap "a_13154_n1884#" "a_n7935_n484#" 31.8574 +cap "a_n8335_n2966#" "w_n8526_7510#" 4.21756 +cap "a_n2517_n3844#" "a_n2148_3925#" 0.0830619 +cap "a_n2517_n3844#" "a_n1140_1442#" 0.0830619 +cap "a_n2148_3925#" "a_n1140_1442#" 7843.38 +cap "a_n1455_n3628#" "a_n2686_12378#" 6632.49 +cap "a_n2511_10156#" "a_n2686_12378#" 17249.1 +cap "a_13154_n1884#" "a_12876_1294#" 2326.24 +cap "a_n1455_n3628#" "a_n8335_n2966#" 2.98744 +cap "a_n2686_12378#" "a_n8335_n2966#" 395.315 +cap "a_n7935_n484#" "a_n2686_8022#" 80907.4 +cap "a_n7677_7899#" "a_n7935_n484#" 30755.8 +cap "a_n7935_n484#" "w_n8526_7510#" 61836.3 +cap "a_n2517_n3844#" "a_n7677_7899#" 1.25765 +cap "a_n2148_3925#" "a_n7677_7899#" 286.692 +cap "a_n7677_7899#" "a_n1140_1442#" 4354.99 +cap "a_n7935_n484#" "a_n2686_12378#" 377.983 +cap "a_12876_1294#" "w_n8526_7510#" 7233.91 +cap "a_n2511_10156#" "a_n7935_n484#" 1.39328 +cap "a_n7935_n484#" "a_n8335_n2966#" 23969.7 +cap "w_n8526_7510#" "a_n1140_1442#" 73.8253 +cap "a_n2517_n3844#" "a_n1455_n3628#" 2203.49 +cap "a_n1455_n3628#" "a_n2148_3925#" 3696.33 +cap "a_n2148_3925#" "a_n2686_12378#" 3616.38 +cap "a_n1455_n3628#" "a_n1140_1442#" 3708.96 +cap "a_12876_1294#" "a_n8335_n2966#" 6.80816 +cap "a_n2517_n3844#" "a_n2686_12378#" 0.307028 +cap "a_n2686_12378#" "a_n1140_1442#" 777.962 +cap "a_n2517_n3844#" "a_n8335_n2966#" 8.43333 +cap "a_n2148_3925#" "a_n8335_n2966#" 306.594 +cap "a_n8335_n2966#" "a_n1140_1442#" 266.289 +cap "a_13154_n1884#" "a_n8335_n2966#" 3.51687 +cap "a_n7677_7899#" "a_n2686_8022#" 8331.3 +cap "w_n8526_7510#" "a_n2686_8022#" 37162.3 +cap "a_n7677_7899#" "w_n8526_7510#" 65790.3 +cap "a_n2686_12378#" "a_n2686_8022#" 11383.1 +cap "a_12876_1294#" "a_n7935_n484#" 6134.28 +cap "a_n2511_10156#" "a_n2686_8022#" 1621.35 +cap "a_n2148_3925#" "a_n7935_n484#" 2746.86 +cap "a_n1455_n3628#" "a_n7677_7899#" 6684.51 +cap "a_n7935_n484#" "a_n1140_1442#" 804.612 +cap "a_n7677_7899#" "a_n2686_12378#" 8795.77 +cap "a_n2511_10156#" "a_n7677_7899#" 1338.23 +cap "a_n7677_7899#" "a_n8335_n2966#" 395.315 +cap "a_n2686_12378#" "w_n8526_7510#" 34364.5 +device csubckt sky130_fd_pr__cap_mim_m3_1 14840 7242 14841 7243 w=2400 l=2400 "None" "a_n7935_n484#" 50176 0 "a_n2686_8022#" 0 39845052,78518 +device csubckt sky130_fd_pr__cap_mim_m3_1 12144 7242 12145 7243 w=2400 l=2400 "None" "a_n7935_n484#" 50176 0 "a_n2686_8022#" 0 39845052,78518 +device csubckt sky130_fd_pr__cap_mim_m3_1 14840 9938 14841 9939 w=2400 l=2400 "None" "a_n7935_n484#" 50176 0 "a_n2686_8022#" 0 39845052,78518 +device csubckt sky130_fd_pr__cap_mim_m3_1 12144 9938 12145 9939 w=2400 l=2400 "None" "a_n7935_n484#" 50176 0 "a_n2686_8022#" 0 39845052,78518 +device csubckt sky130_fd_pr__cap_mim_m3_1 14840 12634 14841 12635 w=2400 l=2400 "None" "a_n7935_n484#" 50176 0 "a_n2686_8022#" 0 39845052,78518 +device csubckt sky130_fd_pr__cap_mim_m3_1 12144 12634 12145 12635 w=2400 l=2400 "None" "a_n7935_n484#" 50176 0 "a_n2686_8022#" 0 39845052,78518 +device msubckt sky130_fd_pr__nfet_01v8 18472 -1668 18473 -1667 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 17788 -1668 17789 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_12876_1294#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 17126 -1668 17127 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_13154_n1884#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 16464 -1668 16465 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_12876_1294#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 15802 -1668 15803 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_13154_n1884#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 15140 -1668 15141 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_12876_1294#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 14478 -1668 14479 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_13154_n1884#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 13816 -1668 13817 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_12876_1294#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 13154 -1668 13155 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_13154_n1884#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 12470 -1668 12471 -1667 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 8619 -2770 8620 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 7935 -2770 7936 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 7469 -2770 7470 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n8335_n2966#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 7003 -2770 7004 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 6537 -2770 6538 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n8335_n2966#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 6071 -2770 6072 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 5605 -2770 5606 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n8335_n2966#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 5139 -2770 5140 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 4673 -2770 4674 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n8335_n2966#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 3989 -2770 3990 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 2801 -3628 2802 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 2117 -3628 2118 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n1455_n3628#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 1455 -3628 1456 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n2517_n3844#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 793 -3628 794 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n1455_n3628#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 131 -3628 132 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n2517_n3844#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -531 -3628 -530 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n1455_n3628#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -1193 -3628 -1192 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n2517_n3844#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -1855 -3628 -1854 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n1455_n3628#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -2517 -3628 -2516 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n2517_n3844#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -3201 -3628 -3200 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -4389 -2770 -4388 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -5073 -2770 -5072 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -5539 -2770 -5538 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n8335_n2966#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -6005 -2770 -6004 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -6471 -2770 -6470 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n8335_n2966#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -6937 -2770 -6936 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -7403 -2770 -7402 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n8335_n2966#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -7869 -2770 -7868 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -8335 -2770 -8334 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n8335_n2966#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -9019 -2770 -9018 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 8619 -484 8620 -483 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 7935 -484 7936 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 7469 -484 7470 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 7003 -484 7004 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 6537 -484 6538 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 6071 -484 6072 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 5605 -484 5606 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 5139 -484 5140 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 4673 -484 4674 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 3989 -484 3990 -483 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 17428 1294 17429 1295 l=200 w=1000 "a_n9311_n3159#" "a_n9311_n3159#" 400 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2000 78000,2156 +device msubckt sky130_fd_pr__nfet_01v8 16944 1294 16945 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 78000,2156 +device msubckt sky130_fd_pr__nfet_01v8 16678 1294 16679 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 33000,1066 "w_n8526_7510#" 1000 33000,1066 +device msubckt sky130_fd_pr__nfet_01v8 16412 1294 16413 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 33000,1066 +device msubckt sky130_fd_pr__nfet_01v8 16146 1294 16147 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 33000,1066 "w_n8526_7510#" 1000 33000,1066 +device msubckt sky130_fd_pr__nfet_01v8 15880 1294 15881 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 33000,1066 +device msubckt sky130_fd_pr__nfet_01v8 15614 1294 15615 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 33000,1066 "w_n8526_7510#" 1000 33000,1066 +device msubckt sky130_fd_pr__nfet_01v8 15348 1294 15349 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 33000,1066 +device msubckt sky130_fd_pr__nfet_01v8 15082 1294 15083 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 33000,1066 "w_n8526_7510#" 1000 33000,1066 +device msubckt sky130_fd_pr__nfet_01v8 14816 1294 14817 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 33000,1066 +device msubckt sky130_fd_pr__nfet_01v8 14550 1294 14551 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 33000,1066 "w_n8526_7510#" 1000 33000,1066 +device msubckt sky130_fd_pr__nfet_01v8 14284 1294 14285 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 33000,1066 +device msubckt sky130_fd_pr__nfet_01v8 14018 1294 14019 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 33000,1066 "w_n8526_7510#" 1000 33000,1066 +device msubckt sky130_fd_pr__nfet_01v8 13752 1294 13753 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 33000,1066 +device msubckt sky130_fd_pr__nfet_01v8 13486 1294 13487 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 33000,1066 "w_n8526_7510#" 1000 33000,1066 +device msubckt sky130_fd_pr__nfet_01v8 13220 1294 13221 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 33000,1066 +device msubckt sky130_fd_pr__nfet_01v8 12954 1294 12955 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 78000,2156 "w_n8526_7510#" 1000 33000,1066 +device msubckt sky130_fd_pr__nfet_01v8 12470 1294 12471 1295 l=200 w=1000 "a_n9311_n3159#" "a_n9311_n3159#" 400 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2000 78000,2156 +device msubckt sky130_fd_pr__nfet_01v8 8619 1284 8620 1285 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 7935 1284 7936 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 7469 1284 7470 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 7003 1284 7004 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 6537 1284 6538 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 6071 1284 6072 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 5605 1284 5606 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 5139 1284 5140 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 4673 1284 4674 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 3989 1284 3990 1285 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 1424 -356 1425 -355 l=200 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 400 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 940 -356 941 -355 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n1455_n3628#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 674 -356 675 -355 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n1455_n3628#" 1200 39600,1266 "a_n7677_7899#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 408 -356 409 -355 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n1455_n3628#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 142 -356 143 -355 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n1455_n3628#" 1200 93600,2556 "a_n7677_7899#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -342 -356 -341 -355 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n1455_n3628#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -608 -356 -607 -355 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n1455_n3628#" 1200 39600,1266 "a_n2686_12378#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -874 -356 -873 -355 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n1455_n3628#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -1140 -356 -1139 -355 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n1455_n3628#" 1200 93600,2556 "a_n2686_12378#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -1624 -356 -1623 -355 l=200 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 400 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 1424 1638 1425 1639 l=200 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 400 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 940 1638 941 1639 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n1455_n3628#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 674 1638 675 1639 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n1455_n3628#" 1200 39600,1266 "a_n2686_12378#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 408 1638 409 1639 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n1455_n3628#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 142 1638 143 1639 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n1455_n3628#" 1200 93600,2556 "a_n2686_12378#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -342 1638 -341 1639 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n1455_n3628#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -608 1638 -607 1639 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n1455_n3628#" 1200 39600,1266 "a_n7677_7899#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -874 1638 -873 1639 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n1455_n3628#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -1140 1638 -1139 1639 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n1455_n3628#" 1200 93600,2556 "a_n7677_7899#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -1624 1638 -1623 1639 l=200 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 400 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -4389 -484 -4388 -483 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -5073 -484 -5072 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -5539 -484 -5538 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -6005 -484 -6004 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -6471 -484 -6470 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -6937 -484 -6936 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -7403 -484 -7402 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -7869 -484 -7868 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -8335 -484 -8334 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -9019 -484 -9018 -483 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -4389 1284 -4388 1285 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -5073 1284 -5072 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 -5539 1284 -5538 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -6005 1284 -6004 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -6471 1284 -6470 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -6937 1284 -6936 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -7403 1284 -7402 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -7869 1284 -7868 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -8335 1284 -8334 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n7935_n484#" 1200 39600,1266 +device msubckt sky130_fd_pr__nfet_01v8 -9019 1284 -9018 1285 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 +device msubckt sky130_fd_pr__nfet_01v8 1856 3925 1857 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n1140_1442#" 200 6600,266 "a_n9311_n3159#" 200 15600,556 +device msubckt sky130_fd_pr__nfet_01v8 1690 3925 1691 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n9311_n3159#" 200 6600,266 "a_n1140_1442#" 200 6600,266 +device msubckt sky130_fd_pr__nfet_01v8 1524 3925 1525 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n1140_1442#" 200 6600,266 "a_n9311_n3159#" 200 6600,266 +device msubckt sky130_fd_pr__nfet_01v8 1358 3925 1359 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n9311_n3159#" 200 6600,266 "a_n1140_1442#" 200 6600,266 +device msubckt sky130_fd_pr__nfet_01v8 1192 3925 1193 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n1140_1442#" 200 15600,556 "a_n9311_n3159#" 200 6600,266 +device msubckt sky130_fd_pr__nfet_01v8 -1406 3925 -1405 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n2148_3925#" 200 6600,266 "a_n9311_n3159#" 200 15600,556 +device msubckt sky130_fd_pr__nfet_01v8 -1572 3925 -1571 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n9311_n3159#" 200 6600,266 "a_n2148_3925#" 200 6600,266 +device msubckt sky130_fd_pr__nfet_01v8 -1738 3925 -1737 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n2148_3925#" 200 6600,266 "a_n9311_n3159#" 200 6600,266 +device msubckt sky130_fd_pr__nfet_01v8 -1904 3925 -1903 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n9311_n3159#" 200 6600,266 "a_n2148_3925#" 200 6600,266 +device msubckt sky130_fd_pr__nfet_01v8 -2070 3925 -2069 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n2148_3925#" 200 15600,556 "a_n9311_n3159#" 200 6600,266 +device msubckt sky130_fd_pr__pfet_01v8 7961 8095 7962 8096 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 7477 8095 7478 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 7211 8095 7212 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 6945 8095 6946 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 6679 8095 6680 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 6413 8095 6414 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 6147 8095 6148 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 5881 8095 5882 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 5615 8095 5616 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 5349 8095 5350 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 5083 8095 5084 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 109200,2956 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 4599 8095 4600 8096 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 2892 8022 2893 8023 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 2408 8022 2409 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "a_n2686_12378#" 1200 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 2142 8022 2143 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n2511_10156#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 1876 8022 1877 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "a_n2686_12378#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 1610 8022 1611 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n2511_10156#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 1344 8022 1345 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "a_n2686_12378#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 1078 8022 1079 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_12378#" 1200 93600,2556 "a_n2511_10156#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 594 8022 595 8023 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 -794 8022 -793 8023 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 -1278 8022 -1277 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n2686_8022#" 1200 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 -1544 8022 -1543 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 39600,1266 "a_n7677_7899#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -1810 8022 -1809 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n2686_8022#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -2076 8022 -2075 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 39600,1266 "a_n7677_7899#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -2342 8022 -2341 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n2686_8022#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -2608 8022 -2607 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 93600,2556 "a_n7677_7899#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -3092 8022 -3091 8023 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 -4799 8095 -4798 8096 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 -5283 8095 -5282 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 -5549 8095 -5548 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -5815 8095 -5814 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -6081 8095 -6080 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -6347 8095 -6346 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -6613 8095 -6612 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -6879 8095 -6878 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -7145 8095 -7144 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -7411 8095 -7410 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -7677 8095 -7676 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 109200,2956 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -8161 8095 -8160 8096 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 7961 10064 7962 10065 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 7477 10064 7478 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 7211 10064 7212 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 6945 10064 6946 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 6679 10064 6680 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 6413 10064 6414 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 6147 10064 6148 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 5881 10064 5882 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 5615 10064 5616 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 5349 10064 5350 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 5083 10064 5084 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 109200,2956 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 4599 10064 4600 10065 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 2717 10156 2718 10157 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 2233 10156 2234 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2686_8022#" 1200 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 1967 10156 1968 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 39600,1266 "w_n8526_7510#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 1701 10156 1702 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2686_8022#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 1435 10156 1436 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 93600,2556 "w_n8526_7510#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 1025 10156 1026 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2686_8022#" 1200 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 759 10156 760 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 39600,1266 "w_n8526_7510#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 493 10156 494 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2686_8022#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 227 10156 228 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 93600,2556 "w_n8526_7510#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -427 10156 -426 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2511_10156#" 1200 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 -693 10156 -692 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "w_n8526_7510#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -959 10156 -958 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2511_10156#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -1225 10156 -1224 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 93600,2556 "w_n8526_7510#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -1635 10156 -1634 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2511_10156#" 1200 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 -1901 10156 -1900 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "w_n8526_7510#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -2167 10156 -2166 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2511_10156#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -2433 10156 -2432 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 93600,2556 "w_n8526_7510#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -2917 10156 -2916 10157 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 -4799 10064 -4798 10065 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 -5283 10064 -5282 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 -5549 10064 -5548 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -5815 10064 -5814 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -6081 10064 -6080 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -6347 10064 -6346 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -6613 10064 -6612 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -6879 10064 -6878 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -7145 10064 -7144 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -7411 10064 -7410 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -7677 10064 -7676 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 109200,2956 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -8161 10064 -8160 10065 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 7961 12033 7962 12034 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 7477 12033 7478 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 7211 12033 7212 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 6945 12033 6946 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 6679 12033 6680 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 6413 12033 6414 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 6147 12033 6148 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 5881 12033 5882 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 5615 12033 5616 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 5349 12033 5350 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 5083 12033 5084 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 109200,2956 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 4599 12033 4600 12034 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 2892 12378 2893 12379 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 2408 12378 2409 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n2686_8022#" 1200 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 2142 12378 2143 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 39600,1266 "a_n7677_7899#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 1876 12378 1877 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n2686_8022#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 1610 12378 1611 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 39600,1266 "a_n7677_7899#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 1344 12378 1345 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n2686_8022#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 1078 12378 1079 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 93600,2556 "a_n7677_7899#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 594 12378 595 12379 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 -794 12378 -793 12379 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 -1278 12378 -1277 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "a_n2686_12378#" 1200 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 -1544 12378 -1543 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n2511_10156#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -1810 12378 -1809 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "a_n2686_12378#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -2076 12378 -2075 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n2511_10156#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -2342 12378 -2341 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "a_n2686_12378#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -2608 12378 -2607 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_12378#" 1200 93600,2556 "a_n2511_10156#" 1200 39600,1266 +device msubckt sky130_fd_pr__pfet_01v8 -3092 12378 -3091 12379 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 +device msubckt sky130_fd_pr__pfet_01v8 -4799 12033 -4798 12034 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 -5283 12033 -5282 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 109200,2956 +device msubckt sky130_fd_pr__pfet_01v8 -5549 12033 -5548 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -5815 12033 -5814 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -6081 12033 -6080 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -6347 12033 -6346 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -6613 12033 -6612 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -6879 12033 -6878 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -7145 12033 -7144 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -7411 12033 -7410 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -7677 12033 -7676 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 109200,2956 "a_n7935_n484#" 1400 46200,1466 +device msubckt sky130_fd_pr__pfet_01v8 -8161 12033 -8160 12034 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/pmos_test.ext b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/pmos_test.ext new file mode 100644 index 000000000..2f97284af --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/pmos_test.ext @@ -0,0 +1,21 @@ +timestamp 0 +version 8.3 +tech sky130A +style ngspice() +scale 1000 1 500000 +resistclasses 4400000 2200000 950000 3050000 120000 197000 114000 191000 120000 197000 114000 191000 48200 319800 2000000 48200 48200 12800 125 125 47 47 29 5 +parameters sky130_fd_pr__pfet_01v8 l=l w=w a1=as p1=ps a2=ad p2=pd +node "a_15_n286#" 1394 49.0976 15 -286 pdif 0 0 0 0 0 0 0 0 0 0 57000 1390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50226 1654 45704 1808 0 0 0 0 0 0 0 0 0 0 +node "a_n110_n286#" 1377 49.4656 -110 -286 pdif 0 0 0 0 0 0 0 0 0 0 57000 1390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44550 1482 45704 1808 0 0 0 0 0 0 0 0 0 0 +node "a_n33_n482#" 1359 36.0697 -33 -482 p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27756 1824 0 0 4356 264 4356 264 0 0 0 0 0 0 0 0 0 0 +node "w_n708_n711#" 18102 7674.99 -708 -711 nw 0 0 0 0 2013552 5676 0 0 397864 9704 228000 5560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50712 3328 0 0 553432 16104 211888 5496 0 0 0 0 0 0 0 0 0 0 +substrate "a_n858_n861#" 0 0 -858 -861 ppd 0 0 0 0 0 0 0 0 0 0 536936 13096 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 462720 12944 281424 7192 0 0 0 0 0 0 0 0 0 0 +cap "a_n110_n286#" "a_15_n286#" 598.904 +cap "w_n708_n711#" "a_15_n286#" 398.469 +cap "a_n33_n482#" "a_15_n286#" 45.5751 +cap "a_n33_n482#" "a_n110_n286#" 55.6978 +cap "w_n708_n711#" "a_n110_n286#" 282.941 +cap "w_n708_n711#" "a_n33_n482#" 283.709 +device msubckt sky130_fd_pr__pfet_01v8 333 -286 334 -285 l=30 w=600 "w_n708_n711#" "w_n708_n711#" 60 0 "w_n708_n711#" 0 0 "w_n708_n711#" 1200 57000,1390 +device msubckt sky130_fd_pr__pfet_01v8 -15 -286 -14 -285 l=30 w=600 "w_n708_n711#" "a_n33_n482#" 60 0 "a_n110_n286#" 600 57000,1390 "a_15_n286#" 600 57000,1390 +device msubckt sky130_fd_pr__pfet_01v8 -363 -286 -362 -285 l=30 w=600 "w_n708_n711#" "w_n708_n711#" 60 0 "w_n708_n711#" 0 0 "w_n708_n711#" 1200 57000,1390 diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test.spice new file mode 100644 index 000000000..14a6439df --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test.spice @@ -0,0 +1,9 @@ +.INCLUDE '/home/chetanya/OpenFASOC/openfasoc/common/platforms/sky130hd/cdl/sky130_fd_sc_hd.spice' +.subckt nmos_test D G S B l=1 w=1 m=1 dm=1 +XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} +XDUMMY1 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} +.ends nmos_test +.subckt diff_test VP VN VDD1 VDD2 VTAIL B +X0 VDD1 VP VTAIL B nmos_test l=None w=3.0 m=4 dm=1 +X1 VDD2 VN VTAIL B nmos_test l=None w=3.0 m=4 dm=1 +.ends diff_test \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_lvsmag.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_lvsmag.spice new file mode 100644 index 000000000..2a67beab3 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_lvsmag.spice @@ -0,0 +1,25 @@ +* NGSPICE file created from diff_test.ext - technology: sky130A + +.subckt diff_test +X0 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X1 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X2 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=11.4 ps=55.6 w=3 l=0.15 +X3 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 +X4 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 +X5 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 +X6 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X7 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 +X8 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 +X9 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 +X10 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X11 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 +X12 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X13 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 +X14 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 +X15 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 +X16 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 +X17 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X18 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X19 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +.ends + diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_pex.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_pex.spice new file mode 100644 index 000000000..4f43fc5af --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_pex.spice @@ -0,0 +1,40 @@ +* NGSPICE file created from diff_test.ext - technology: sky130A + +.subckt diff_test +X0 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X1 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X2 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=11.4 ps=55.6 w=3 l=0.15 +X3 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 +X4 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 +X5 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 +X6 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X7 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 +X8 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 +X9 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 +X10 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X11 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 +X12 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X13 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 +X14 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 +X15 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 +X16 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 +X17 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X18 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X19 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +C0 a_n579_201# a_n579_n1047# 3.16374f +C1 a_n549_n997# a_n674_n997# 5.61466f +C2 a_n549_397# a_n674_n997# 5.57563f +C3 a_n549_n997# a_n549_397# 0.641247f +C4 a_n674_n997# a_n579_n1047# 0.751816f +C5 a_n549_n997# a_n579_n1047# 0.803013f +C6 a_n579_201# a_n674_n997# 0.765855f +C7 a_n549_n997# a_n579_201# 0.287679f +C8 a_n549_397# a_n579_n1047# 0.157927f +C9 a_n579_201# a_n549_397# 0.932267f +C10 a_n549_n997# a_n1366_n1488# 2.02549f +C11 a_n549_397# a_n1366_n1488# 2.19698f +C12 a_n674_n997# a_n1366_n1488# 3.42969f +C13 a_n579_n1047# a_n1366_n1488# 4.21568f +C14 a_n579_201# a_n1366_n1488# 4.0956f +.ends + diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_sim.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_sim.spice new file mode 100644 index 000000000..4bb609d2f --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_sim.spice @@ -0,0 +1,40 @@ +* NGSPICE file created from diff_test.ext - technology: sky130A + +.subckt diff_test +X0 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X1 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X2 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=11.4 ps=55.6 w=3 l=0.15 +X3 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 +X4 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 +X5 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 +X6 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X7 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 +X8 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 +X9 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 +X10 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X11 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 +X12 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X13 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 +X14 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 +X15 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 +X16 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 +X17 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X18 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +X19 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 +C0 a_n579_n1047# a_n549_397# 0.157927f +C1 a_n674_n997# a_n549_n997# 5.61466f +C2 a_n579_201# a_n674_n997# 0.765855f +C3 a_n579_n1047# a_n549_n997# 0.803013f +C4 a_n579_n1047# a_n579_201# 3.16374f +C5 a_n549_397# a_n549_n997# 0.641247f +C6 a_n579_201# a_n549_397# 0.932267f +C7 a_n579_201# a_n549_n997# 0.287679f +C8 a_n579_n1047# a_n674_n997# 0.751816f +C9 a_n674_n997# a_n549_397# 5.57563f +C10 a_n549_n997# a_n1366_n1488# 2.02549f +C11 a_n549_397# a_n1366_n1488# 2.19698f +C12 a_n674_n997# a_n1366_n1488# 3.42969f +C13 a_n579_n1047# a_n1366_n1488# 4.21568f +C14 a_n579_201# a_n1366_n1488# 4.0956f +.ends + diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test.spice new file mode 100644 index 000000000..2d2c90ac9 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test.spice @@ -0,0 +1,6 @@ +.INCLUDE '/home/chetanya/OpenFASOC/openfasoc/common/platforms/sky130hd/cdl/sky130_fd_sc_hd.spice' +.subckt nmos_test D G S B l=1 w=1 m=1 dm=1 +XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} +XDUMMY1 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} +XDUMMY2 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} +.ends nmos_test \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_lvsmag.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_lvsmag.spice new file mode 100644 index 000000000..1507f8eb5 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_lvsmag.spice @@ -0,0 +1,8 @@ +* NGSPICE file created from nmos_test.ext - technology: sky130A + +.subckt nmos_test +X0 w_n734_n737# w_n734_n737# w_n734_n737# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=5.7 ps=27.8 w=3 l=0.15 +X1 a_15_n286# a_n33_n482# a_n110_n286# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=1.425 ps=6.95 w=3 l=0.15 +X2 w_n734_n737# w_n734_n737# w_n734_n737# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 +.ends + diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_pex.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_pex.spice new file mode 100644 index 000000000..6415c17ea --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_pex.spice @@ -0,0 +1,20 @@ +* NGSPICE file created from nmos_test.ext - technology: sky130A + +.subckt nmos_test +X0 w_n734_n737# w_n734_n737# w_n734_n737# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=5.7 ps=27.8 w=3 l=0.15 +X1 a_15_n286# a_n33_n482# a_n110_n286# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=1.425 ps=6.95 w=3 l=0.15 +X2 w_n734_n737# w_n734_n737# w_n734_n737# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 +C0 a_n110_n286# w_n734_n737# 0.283328f +C1 dw_n734_n737# w_n734_n737# 6.4915f +C2 a_15_n286# a_n33_n482# 0.045575f +C3 a_n110_n286# a_n33_n482# 0.055698f +C4 a_15_n286# a_n110_n286# 0.598904f +C5 a_n33_n482# w_n734_n737# 0.279309f +C6 a_15_n286# w_n734_n737# 0.387693f +C7 a_15_n286# a_n884_n887# 0.047764f +C8 a_n110_n286# a_n884_n887# 0.048094f +C9 a_n33_n482# a_n884_n887# 0.035076f +C10 w_n734_n737# a_n884_n887# 2.05305f +C11 dw_n734_n737# a_n884_n887# 6.4915f $ **FLOATING +.ends + diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_sim.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_sim.spice new file mode 100644 index 000000000..821982a79 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_sim.spice @@ -0,0 +1,20 @@ +* NGSPICE file created from nmos_test.ext - technology: sky130A + +.subckt nmos_test +X0 w_n734_n737# w_n734_n737# w_n734_n737# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=5.7 ps=27.8 w=3 l=0.15 +X1 a_15_n286# a_n33_n482# a_n110_n286# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=1.425 ps=6.95 w=3 l=0.15 +X2 w_n734_n737# w_n734_n737# w_n734_n737# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 +C0 a_n33_n482# a_n110_n286# 0.055698f +C1 w_n734_n737# a_n110_n286# 0.283328f +C2 a_n33_n482# a_15_n286# 0.045575f +C3 w_n734_n737# a_15_n286# 0.387693f +C4 w_n734_n737# dw_n734_n737# 6.4915f +C5 a_n110_n286# a_15_n286# 0.598904f +C6 w_n734_n737# a_n33_n482# 0.279309f +C7 a_15_n286# a_n884_n887# 0.047764f +C8 a_n110_n286# a_n884_n887# 0.048094f +C9 a_n33_n482# a_n884_n887# 0.035076f +C10 w_n734_n737# a_n884_n887# 2.05305f +C11 dw_n734_n737# a_n884_n887# 6.4915f $ **FLOATING +.ends + diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test.spice new file mode 100644 index 000000000..b4482f919 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test.spice @@ -0,0 +1,71 @@ +.INCLUDE '/home/chetanya/OpenFASOC/openfasoc/common/platforms/sky130hd/cdl/sky130_fd_sc_hd.spice' +.subckt nmos_test D G S B l=1 w=1 m=1 dm=1 +XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} +XDUMMY1 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} +.ends nmos_test +.subckt diff_test VP VN VDD1 VDD2 VTAIL B +X0 VDD1 VP VTAIL B nmos_test l=1.0 w=6.0 m=4 dm=1 +X1 VDD2 VN VTAIL B nmos_test l=1.0 w=6.0 m=4 dm=1 +.ends diff_test +.subckt CURRENT_MIRROR VREF VCOPY VSS l=1 w=1 m=1 +XREF VREF VREF VSS VSS sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} +XCOPY VCOPY VREF VSS VSS sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} +.ends CURRENT_MIRROR +.subckt NMOS_1 D G S B l=1 w=1 m=1 dm=1 +XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} +.ends NMOS_1 +.subckt INPUT_STAGE VP VN VDD1 VDD2 IBIAS VSS B +X0 VP VN VDD1 VDD2 wire0 B diff_test +X1 IBIAS wire0 VSS CURRENT_MIRROR l=2.0 w=6.0 m=4 +X2 VSS VSS VP VSS NMOS_1 l=0.5 w=1.0 m=5 dm=1 +X3 VSS VSS VN VSS NMOS_1 l=0.5 w=1.0 m=5 dm=1 +.ends INPUT_STAGE +.subckt DIFF_TO_SINGLE VOUT VSS VSS2 l=1 w=1 mt=1 mb=1 +XTOP1 V1 r_VIN VSS VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mt} +XTOP2 VSS2 r_VIN VSS VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mt} +XBOT1 r_VIN r_VIN V1 VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mb} +XBOT2 VOUT r_VIN VSS2 VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mb} +.ends DIFF_TO_SINGLE +.subckt pmos_test D G S B l=1 w=1 m=1 dm=1 +XMAIN D G S B sky130_fd_pr__pfet_01v8 l={l} w={w} m={m} +XDUMMY1 B B B B sky130_fd_pr__pfet_01v8 l={l} w={w} m={dm} +XDUMMY2 B B B B sky130_fd_pr__pfet_01v8 l={l} w={w} m={dm} +.ends pmos_test +.subckt DIFF_TO_SINGLE_CS r_VIN 1 r_VIN 2 VOUT VSS VSS2 +X0 r_VIN 1 r_VIN 2 VSS VSS2 DIFF_TO_SINGLE l=1 w=6 mt=8 mb=12 +X1 VOUT r_VIN 2 VSS VSS pmos_test l=1.0 w=7.0 m=30 dm=3 +X2 VOUT r_VIN 2 VSS VSS pmos_test l=1.0 w=7.0 m=30 dm=3 +.ends DIFF_TO_SINGLE_CS +.subckt MIMCap V1 V2 l=1 w=1 +X1 V1 V2 sky130_fd_pr__cap_mim_m3_1 l={l} w={w} +.ends MIMCap +.subckt MIMCAP_ARR V1 V2 +X0 V1 V2 MIMCap l=12.0 w=12.0 +X1 V1 V2 MIMCap l=12.0 w=12.0 +X2 V1 V2 MIMCap l=12.0 w=12.0 +X3 V1 V2 MIMCap l=12.0 w=12.0 +X4 V1 V2 MIMCap l=12.0 w=12.0 +X5 V1 V2 MIMCap l=12.0 w=12.0 +.ends MIMCAP_ARR +.subckt GAIN_STAGE r_VIN 1 r_VIN 2 VOUT VDD IBIAS GND +X0 r_VIN 1 r_VIN 2 VOUT VDD wire0 DIFF_TO_SINGLE_CS +X1 IBIAS VOUT GND CURRENT_MIRROR l=2 w=6 m=4 +X2 wire0 VOUT MIMCAP_ARR +.ends GAIN_STAGE +.subckt OPAMP_TWO_STAGE VDD GND DIFFPAIR_BIAS VP VN CS_BIAS VOUT +X0 VP VN wire0 wire1 DIFFPAIR_BIAS GND GND INPUT_STAGE +X1 wire0 wire1 VOUT VDD CS_BIAS GND GAIN_STAGE +.ends OPAMP_TWO_STAGE +.subckt NMOS_2 D G S B l=1 w=1 m=1 dm=1 +XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} +XDUMMY1 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} +XDUMMY2 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} +.ends NMOS_2 +.subckt OUTPUT_STAGE VDD GND IBIAS r_VIN VOUT +X0 VDD r_VIN VOUT GND NMOS_2 l=1.0 w=5.0 m=16 dm=1 +X1 IBIAS VOUT GND CURRENT_MIRROR l=2 w=6 m=4 +.ends OUTPUT_STAGE +.subckt opamp_test CSoutput vdd plus minus commonsourceibias outputibias diffpairibias gnd output +X0 vdd gnd diffpairibias plus minus commonsourceibias CSoutput OPAMP_TWO_STAGE +X1 vdd gnd outputibias CSoutput output OUTPUT_STAGE +.ends opamp_test \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_lvsmag.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_lvsmag.spice new file mode 100644 index 000000000..634226e1b --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_lvsmag.spice @@ -0,0 +1,261 @@ +* NGSPICE file created from opamp_test.ext - technology: sky130A + +.subckt opamp_test +X0 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X1 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X2 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X3 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=216.36 ps=1.2408k w=7 l=1 +X4 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X5 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X6 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X7 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X8 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X9 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X10 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X11 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X12 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X13 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X14 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X15 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X16 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X17 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X18 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X19 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X20 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X21 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X22 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X23 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X24 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X25 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X26 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X27 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X28 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X29 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X30 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X31 a_n1140_1442# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X32 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=204.66 ps=1.15624k w=6 l=2 +X33 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X34 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X35 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X36 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.39 pd=2.78 as=0.165 ps=1.33 w=1 l=0.5 +X37 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X38 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X39 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X40 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X41 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X42 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X43 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X44 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X45 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X46 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X47 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X48 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X49 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X50 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X51 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X52 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0.825 ps=5.33 w=5 l=1 +X53 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X54 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X55 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X56 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.39 ps=2.78 w=1 l=0.5 +X57 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X58 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X59 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X60 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X61 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X62 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X63 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X64 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X65 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X66 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=1.95 ps=10.78 w=5 l=1 +X67 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X68 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X69 a_n1140_1442# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X70 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X71 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X72 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X73 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X74 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X75 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X76 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X77 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X78 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X79 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X80 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X81 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X82 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X83 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X84 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X85 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X86 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X87 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X88 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X89 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X90 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X91 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X92 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X93 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X94 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X95 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X96 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X97 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X98 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X99 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X100 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X101 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X102 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X103 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X104 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X105 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X106 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X107 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X108 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X109 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.39 pd=2.78 as=0.165 ps=1.33 w=1 l=0.5 +X110 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X111 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X112 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X113 a_n2148_3925# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X114 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X115 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X116 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X117 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X118 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X119 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X120 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X121 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X122 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X123 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X124 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X125 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X126 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X127 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X128 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X129 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X130 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X131 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X132 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X133 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X134 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X135 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X136 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X137 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X138 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X139 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X140 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X141 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X142 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X143 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X144 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X145 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X146 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X147 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X148 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X149 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X150 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X151 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X152 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X153 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X154 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X155 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X156 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X157 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X158 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X159 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X160 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X161 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X162 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X163 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X164 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X165 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X166 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X167 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X168 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X169 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X170 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X171 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X172 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X173 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X174 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X175 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X176 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X177 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X178 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X179 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X180 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X181 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X182 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X183 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X184 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X185 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X186 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X187 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X188 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X189 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X190 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X191 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X192 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X193 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X194 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X195 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X196 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X197 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X198 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X199 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X200 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X201 a_n2148_3925# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X202 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X203 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X204 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X205 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X206 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X207 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X208 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X209 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X210 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X211 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X212 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X213 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X214 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X215 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X216 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X217 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X218 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X219 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X220 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X221 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X222 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X223 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X224 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0 ps=0 w=5 l=1 +X225 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0 ps=0 w=5 l=1 +X226 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X227 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X228 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X229 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X230 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X231 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X232 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X233 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X234 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X235 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X236 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X237 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X238 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X239 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X240 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X241 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.39 ps=2.78 w=1 l=0.5 +X242 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X243 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X244 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X245 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X246 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X247 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X248 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X249 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X250 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X251 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X252 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X253 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X254 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X255 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +.ends + diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_pex.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_pex.spice new file mode 100644 index 000000000..0d0413686 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_pex.spice @@ -0,0 +1,320 @@ +* NGSPICE file created from opamp_test.ext - technology: sky130A + +.subckt opamp_test +X0 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X1 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X2 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X3 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=216.36 ps=1.2408k w=7 l=1 +X4 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X5 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X6 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X7 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X8 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X9 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X10 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X11 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X12 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X13 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X14 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X15 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X16 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X17 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X18 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X19 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X20 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X21 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X22 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X23 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X24 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X25 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X26 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X27 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X28 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X29 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X30 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X31 a_n1140_1442# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X32 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=204.66 ps=1.15624k w=6 l=2 +X33 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X34 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X35 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X36 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.39 pd=2.78 as=0.165 ps=1.33 w=1 l=0.5 +X37 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X38 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X39 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X40 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X41 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X42 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X43 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X44 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X45 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X46 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X47 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X48 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X49 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X50 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X51 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X52 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0.825 ps=5.33 w=5 l=1 +X53 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X54 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X55 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X56 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.39 ps=2.78 w=1 l=0.5 +X57 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X58 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X59 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X60 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X61 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X62 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X63 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X64 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X65 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X66 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=1.95 ps=10.78 w=5 l=1 +X67 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X68 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X69 a_n1140_1442# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X70 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X71 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X72 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X73 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X74 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X75 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X76 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X77 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X78 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X79 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X80 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X81 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X82 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X83 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X84 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X85 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X86 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X87 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X88 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X89 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X90 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X91 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X92 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X93 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X94 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X95 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X96 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X97 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X98 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X99 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X100 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X101 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X102 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X103 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X104 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X105 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X106 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X107 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X108 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X109 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.39 pd=2.78 as=0.165 ps=1.33 w=1 l=0.5 +X110 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X111 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X112 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X113 a_n2148_3925# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X114 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X115 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X116 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X117 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X118 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X119 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X120 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X121 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X122 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X123 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X124 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X125 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X126 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X127 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X128 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X129 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X130 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X131 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X132 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X133 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X134 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X135 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X136 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X137 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X138 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X139 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X140 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X141 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X142 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X143 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X144 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X145 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X146 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X147 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X148 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X149 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X150 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X151 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X152 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X153 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X154 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X155 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X156 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X157 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X158 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X159 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X160 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X161 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X162 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X163 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X164 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X165 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X166 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X167 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X168 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X169 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X170 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X171 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X172 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X173 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X174 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X175 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X176 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X177 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X178 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X179 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X180 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X181 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X182 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X183 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X184 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X185 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X186 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X187 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X188 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X189 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X190 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X191 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X192 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X193 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X194 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X195 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X196 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X197 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X198 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X199 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X200 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X201 a_n2148_3925# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X202 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X203 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X204 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X205 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X206 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X207 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X208 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X209 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X210 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X211 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X212 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X213 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X214 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X215 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X216 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X217 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X218 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X219 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X220 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X221 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X222 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X223 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X224 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0 ps=0 w=5 l=1 +X225 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0 ps=0 w=5 l=1 +X226 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X227 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X228 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X229 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X230 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X231 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X232 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X233 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X234 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X235 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X236 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X237 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X238 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X239 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X240 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X241 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.39 ps=2.78 w=1 l=0.5 +X242 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X243 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X244 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X245 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X246 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X247 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X248 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X249 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X250 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X251 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X252 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X253 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X254 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X255 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +C0 a_13154_n1884# a_12876_1294# 2.32624f +C1 a_n8335_n2966# a_13154_n1884# 0.003517f +C2 a_n2686_12378# a_n2517_n3844# 3.07e-19 +C3 a_n1140_1442# a_n7677_7899# 4.35499f +C4 a_n8335_n2966# a_n2686_12378# 0.395315f +C5 a_n1455_n3628# a_n2686_12378# 6.63249f +C6 a_n7935_n484# a_n2686_8022# 80.9074f +C7 a_n7935_n484# a_13154_n1884# 0.031857f +C8 w_n8526_7510# a_n2511_10156# 11.8465f +C9 a_n2686_12378# a_n7935_n484# 0.377983f +C10 a_n2148_3925# a_n2686_12378# 3.61638f +C11 a_n7677_7899# a_n2686_8022# 8.3313f +C12 w_n8526_7510# a_12876_1294# 7.233911f +C13 a_n8335_n2966# w_n8526_7510# 0.004218f +C14 a_n2686_12378# a_n7677_7899# 8.79577f +C15 w_n8526_7510# a_n7935_n484# 61.8363f +C16 a_n7935_n484# a_n2511_10156# 0.001393f +C17 a_n8335_n2966# a_12876_1294# 0.006808f +C18 a_n8335_n2966# a_n2517_n3844# 0.008433f +C19 a_n1455_n3628# a_n2517_n3844# 2.20349f +C20 w_n8526_7510# a_n7677_7899# 65.7903f +C21 a_n8335_n2966# a_n1455_n3628# 0.002987f +C22 a_n7935_n484# a_12876_1294# 6.13428f +C23 a_n2148_3925# a_n2517_n3844# 8.31e-20 +C24 a_n8335_n2966# a_n7935_n484# 23.9697f +C25 a_n8335_n2966# a_n2148_3925# 0.306594f +C26 a_n7677_7899# a_n2511_10156# 1.33823f +C27 a_n1455_n3628# a_n2148_3925# 3.69633f +C28 a_n1140_1442# a_n2686_12378# 0.777962f +C29 a_n2148_3925# a_n7935_n484# 2.74686f +C30 a_n7677_7899# a_n2517_n3844# 0.001258f +C31 a_n8335_n2966# a_n7677_7899# 0.395315f +C32 a_n1455_n3628# a_n7677_7899# 6.68451f +C33 a_n2686_12378# a_n2686_8022# 11.3831f +C34 a_n7935_n484# a_n7677_7899# 30.7558f +C35 a_n2148_3925# a_n7677_7899# 0.286692f +C36 w_n8526_7510# a_n1140_1442# 0.073825f +C37 w_n8526_7510# a_n2686_8022# 37.1623f +C38 a_n1140_1442# a_n2517_n3844# 8.31e-20 +C39 a_n8335_n2966# a_n1140_1442# 0.266289f +C40 a_n1140_1442# a_n1455_n3628# 3.70896f +C41 w_n8526_7510# a_n2686_12378# 34.3645f +C42 a_n2511_10156# a_n2686_8022# 1.62135f +C43 a_n1140_1442# a_n7935_n484# 0.804612f +C44 a_n1140_1442# a_n2148_3925# 7.84338f +C45 a_n2686_12378# a_n2511_10156# 17.2491f +C46 a_n2517_n3844# a_n9311_n3159# 30.4089f +C47 a_13154_n1884# a_n9311_n3159# 30.131899f +C48 a_12876_1294# a_n9311_n3159# 13.8096f +C49 a_n1455_n3628# a_n9311_n3159# 16.057001f +C50 a_n8335_n2966# a_n9311_n3159# 0.109473p +C51 a_n1140_1442# a_n9311_n3159# 17.9088f +C52 a_n2148_3925# a_n9311_n3159# 15.1913f +C53 a_n2686_8022# a_n9311_n3159# 18.0352f +C54 a_n2511_10156# a_n9311_n3159# 0.597469f +C55 a_n2686_12378# a_n9311_n3159# 10.244599f +C56 a_n7935_n484# a_n9311_n3159# 72.983795f +C57 a_n7677_7899# a_n9311_n3159# 20.2068f +C58 w_n8526_7510# a_n9311_n3159# 0.351129p +.ends + diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_sim.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_sim.spice new file mode 100644 index 000000000..5fcacf89a --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_sim.spice @@ -0,0 +1,320 @@ +* NGSPICE file created from opamp_test.ext - technology: sky130A + +.subckt opamp_test +X0 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X1 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X2 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X3 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=216.36 ps=1.2408k w=7 l=1 +X4 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X5 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X6 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X7 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X8 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X9 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X10 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X11 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X12 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X13 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X14 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X15 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X16 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X17 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X18 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X19 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X20 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X21 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X22 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X23 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X24 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X25 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X26 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X27 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X28 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X29 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X30 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X31 a_n1140_1442# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X32 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=204.66 ps=1.15624k w=6 l=2 +X33 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X34 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X35 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X36 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.39 pd=2.78 as=0.165 ps=1.33 w=1 l=0.5 +X37 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X38 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X39 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X40 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X41 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X42 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X43 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X44 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X45 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X46 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X47 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X48 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X49 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X50 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X51 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X52 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0.825 ps=5.33 w=5 l=1 +X53 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X54 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X55 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X56 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.39 ps=2.78 w=1 l=0.5 +X57 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X58 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X59 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X60 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X61 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X62 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X63 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X64 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X65 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X66 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=1.95 ps=10.78 w=5 l=1 +X67 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X68 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X69 a_n1140_1442# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X70 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X71 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X72 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X73 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X74 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X75 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X76 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X77 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X78 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X79 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X80 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X81 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X82 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X83 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X84 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X85 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X86 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X87 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X88 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X89 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X90 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X91 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X92 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X93 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X94 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X95 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X96 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X97 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X98 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X99 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X100 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X101 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X102 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X103 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X104 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X105 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X106 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X107 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X108 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X109 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.39 pd=2.78 as=0.165 ps=1.33 w=1 l=0.5 +X110 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X111 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X112 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X113 a_n2148_3925# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X114 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X115 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X116 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X117 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X118 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X119 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X120 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X121 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X122 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X123 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X124 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X125 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X126 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X127 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X128 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X129 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X130 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X131 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X132 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X133 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X134 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X135 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X136 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X137 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X138 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X139 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X140 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X141 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X142 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X143 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X144 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X145 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X146 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X147 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X148 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X149 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X150 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X151 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X152 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X153 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X154 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X155 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X156 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X157 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X158 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X159 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X160 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X161 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X162 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X163 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X164 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X165 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X166 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X167 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X168 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X169 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X170 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X171 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X172 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X173 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X174 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X175 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X176 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X177 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X178 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 +X179 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X180 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X181 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X182 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X183 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X184 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X185 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X186 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X187 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X188 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X189 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X190 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X191 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X192 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X193 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 +X194 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X195 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X196 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X197 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X198 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X199 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X200 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X201 a_n2148_3925# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X202 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X203 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X204 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X205 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X206 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X207 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X208 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X209 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X210 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X211 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X212 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 +X213 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X214 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 +X215 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X216 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X217 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X218 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X219 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X220 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X221 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X222 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X223 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X224 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0 ps=0 w=5 l=1 +X225 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0 ps=0 w=5 l=1 +X226 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X227 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 +X228 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 +X229 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X230 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X231 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X232 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X233 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X234 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X235 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X236 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X237 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X238 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +X239 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X240 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X241 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.39 ps=2.78 w=1 l=0.5 +X242 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X243 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X244 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 +X245 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 +X246 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 +X247 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X248 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 +X249 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 +X250 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 +X251 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X252 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 +X253 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 +X254 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 +X255 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 +C0 a_12876_1294# a_n7935_n484# 6.13428f +C1 a_n1455_n3628# a_n2686_12378# 6.63249f +C2 a_n2517_n3844# a_n1140_1442# 8.31e-20 +C3 w_n8526_7510# a_n1140_1442# 0.073825f +C4 a_n7677_7899# a_n2686_12378# 8.79577f +C5 a_n2148_3925# a_n1140_1442# 7.84338f +C6 a_n1455_n3628# a_n2517_n3844# 2.20349f +C7 a_12876_1294# a_13154_n1884# 2.32624f +C8 a_n1455_n3628# a_n2148_3925# 3.69633f +C9 a_n2686_8022# a_n7935_n484# 80.9074f +C10 a_n7677_7899# a_n2517_n3844# 0.001258f +C11 a_n7677_7899# w_n8526_7510# 65.7903f +C12 a_n2148_3925# a_n7677_7899# 0.286692f +C13 a_12876_1294# w_n8526_7510# 7.233911f +C14 a_n2686_8022# a_n2686_12378# 11.3831f +C15 a_n2511_10156# a_n7935_n484# 0.001393f +C16 w_n8526_7510# a_n2686_8022# 37.1623f +C17 a_n8335_n2966# a_n7935_n484# 23.9697f +C18 a_n1455_n3628# a_n1140_1442# 3.70896f +C19 a_n7677_7899# a_n1140_1442# 4.35499f +C20 a_n2511_10156# a_n2686_12378# 17.2491f +C21 a_n2686_12378# a_n8335_n2966# 0.395315f +C22 a_n1455_n3628# a_n7677_7899# 6.68451f +C23 a_13154_n1884# a_n8335_n2966# 0.003517f +C24 a_n2511_10156# w_n8526_7510# 11.8465f +C25 w_n8526_7510# a_n8335_n2966# 0.004218f +C26 a_n2517_n3844# a_n8335_n2966# 0.008433f +C27 a_n2148_3925# a_n8335_n2966# 0.306594f +C28 a_n2686_12378# a_n7935_n484# 0.377983f +C29 a_13154_n1884# a_n7935_n484# 0.031857f +C30 a_n7677_7899# a_n2686_8022# 8.3313f +C31 w_n8526_7510# a_n7935_n484# 61.8363f +C32 a_n2148_3925# a_n7935_n484# 2.74686f +C33 a_n2517_n3844# a_n2686_12378# 3.07e-19 +C34 w_n8526_7510# a_n2686_12378# 34.3645f +C35 a_n1140_1442# a_n8335_n2966# 0.266289f +C36 a_n2148_3925# a_n2686_12378# 3.61638f +C37 a_n2511_10156# a_n7677_7899# 1.33823f +C38 a_n1455_n3628# a_n8335_n2966# 0.002987f +C39 a_n7677_7899# a_n8335_n2966# 0.395315f +C40 a_n2148_3925# a_n2517_n3844# 8.31e-20 +C41 a_n1140_1442# a_n7935_n484# 0.804612f +C42 a_12876_1294# a_n8335_n2966# 0.006808f +C43 a_n2511_10156# a_n2686_8022# 1.62135f +C44 a_n7677_7899# a_n7935_n484# 30.7558f +C45 a_n1140_1442# a_n2686_12378# 0.777962f +C46 a_n2517_n3844# a_n9311_n3159# 30.4089f +C47 a_13154_n1884# a_n9311_n3159# 30.131899f +C48 a_12876_1294# a_n9311_n3159# 13.8096f +C49 a_n1455_n3628# a_n9311_n3159# 16.057001f +C50 a_n8335_n2966# a_n9311_n3159# 0.109473p +C51 a_n1140_1442# a_n9311_n3159# 17.9088f +C52 a_n2148_3925# a_n9311_n3159# 15.1913f +C53 a_n2686_8022# a_n9311_n3159# 18.0352f +C54 a_n2511_10156# a_n9311_n3159# 0.597469f +C55 a_n2686_12378# a_n9311_n3159# 10.244599f +C56 a_n7935_n484# a_n9311_n3159# 72.983795f +C57 a_n7677_7899# a_n9311_n3159# 20.2068f +C58 w_n8526_7510# a_n9311_n3159# 0.351129p +.ends + diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test.spice new file mode 100644 index 000000000..19557eaf8 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test.spice @@ -0,0 +1,6 @@ +.INCLUDE '/home/chetanya/OpenFASOC/openfasoc/common/platforms/sky130hd/cdl/sky130_fd_sc_hd.spice' +.subckt pmos_test D G S B l=1 w=1 m=1 dm=1 +XMAIN D G S B sky130_fd_pr__pfet_01v8 l={l} w={w} m={m} +XDUMMY1 B B B B sky130_fd_pr__pfet_01v8 l={l} w={w} m={dm} +XDUMMY2 B B B B sky130_fd_pr__pfet_01v8 l={l} w={w} m={dm} +.ends pmos_test \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_lvsmag.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_lvsmag.spice new file mode 100644 index 000000000..bc1786e20 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_lvsmag.spice @@ -0,0 +1,8 @@ +* NGSPICE file created from pmos_test.ext - technology: sky130A + +.subckt pmos_test +X0 w_n708_n711# w_n708_n711# w_n708_n711# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=5.7 ps=27.8 w=3 l=0.15 +X1 a_15_n286# a_n33_n482# a_n110_n286# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=1.425 ps=6.95 w=3 l=0.15 +X2 w_n708_n711# w_n708_n711# w_n708_n711# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 +.ends + diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_pex.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_pex.spice new file mode 100644 index 000000000..d4096090e --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_pex.spice @@ -0,0 +1,18 @@ +* NGSPICE file created from pmos_test.ext - technology: sky130A + +.subckt pmos_test +X0 w_n708_n711# w_n708_n711# w_n708_n711# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=5.7 ps=27.8 w=3 l=0.15 +X1 a_15_n286# a_n33_n482# a_n110_n286# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=1.425 ps=6.95 w=3 l=0.15 +X2 w_n708_n711# w_n708_n711# w_n708_n711# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 +C0 a_15_n286# w_n708_n711# 0.398469f +C1 a_n110_n286# a_15_n286# 0.598904f +C2 a_n33_n482# a_15_n286# 0.045575f +C3 a_n110_n286# w_n708_n711# 0.282941f +C4 a_n33_n482# w_n708_n711# 0.283709f +C5 a_n33_n482# a_n110_n286# 0.055698f +C6 a_15_n286# a_n858_n861# 0.049098f +C7 a_n110_n286# a_n858_n861# 0.049466f +C8 a_n33_n482# a_n858_n861# 0.03607f +C9 w_n708_n711# a_n858_n861# 7.67499f +.ends + diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_sim.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_sim.spice new file mode 100644 index 000000000..4acf37c58 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_sim.spice @@ -0,0 +1,18 @@ +* NGSPICE file created from pmos_test.ext - technology: sky130A + +.subckt pmos_test +X0 w_n708_n711# w_n708_n711# w_n708_n711# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=5.7 ps=27.8 w=3 l=0.15 +X1 a_15_n286# a_n33_n482# a_n110_n286# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=1.425 ps=6.95 w=3 l=0.15 +X2 w_n708_n711# w_n708_n711# w_n708_n711# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 +C0 w_n708_n711# a_15_n286# 0.398469f +C1 a_15_n286# a_n33_n482# 0.045575f +C2 w_n708_n711# a_n33_n482# 0.283709f +C3 a_15_n286# a_n110_n286# 0.598904f +C4 w_n708_n711# a_n110_n286# 0.282941f +C5 a_n110_n286# a_n33_n482# 0.055698f +C6 a_15_n286# a_n858_n861# 0.049098f +C7 a_n110_n286# a_n858_n861# 0.049466f +C8 a_n33_n482# a_n858_n861# 0.03607f +C9 w_n708_n711# a_n858_n861# 7.67499f +.ends + diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/reports/sky130hd/glayout/6_final_lvs.rpt b/openfasoc/generators/gdsfactory-gen/lvs_flow/reports/sky130hd/glayout/6_final_lvs.rpt new file mode 100644 index 000000000..0d85c92c3 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/reports/sky130hd/glayout/6_final_lvs.rpt @@ -0,0 +1,246 @@ + +Circuit 1 cell sky130_fd_pr__nfet_01v8 and Circuit 2 cell sky130_fd_pr__nfet_01v8 are black boxes. +Warning: Equate pins: cell sky130_fd_pr__nfet_01v8 is a placeholder, treated as a black box. +Warning: Equate pins: cell sky130_fd_pr__nfet_01v8 is a placeholder, treated as a black box. + +Subcircuit pins: +Circuit 1: sky130_fd_pr__nfet_01v8 |Circuit 2: sky130_fd_pr__nfet_01v8 +-------------------------------------------|------------------------------------------- +1 |1 +2 |2 +3 |3 +4 |4 +--------------------------------------------------------------------------------------- +Cell pin lists are equivalent. +Device classes sky130_fd_pr__nfet_01v8 and sky130_fd_pr__nfet_01v8 are equivalent. + +Circuit 1 cell sky130_fd_pr__pfet_01v8 and Circuit 2 cell sky130_fd_pr__pfet_01v8 are black boxes. +Warning: Equate pins: cell sky130_fd_pr__pfet_01v8 is a placeholder, treated as a black box. +Warning: Equate pins: cell sky130_fd_pr__pfet_01v8 is a placeholder, treated as a black box. + +Subcircuit pins: +Circuit 1: sky130_fd_pr__pfet_01v8 |Circuit 2: sky130_fd_pr__pfet_01v8 +-------------------------------------------|------------------------------------------- +1 |1 +2 |2 +3 |3 +4 |4 +--------------------------------------------------------------------------------------- +Cell pin lists are equivalent. +Device classes sky130_fd_pr__pfet_01v8 and sky130_fd_pr__pfet_01v8 are equivalent. + +Circuit 1 cell sky130_fd_pr__cap_mim_m3_1 and Circuit 2 cell sky130_fd_pr__cap_mim_m3_1 are black boxes. +Warning: Equate pins: cell sky130_fd_pr__cap_mim_m3_1 is a placeholder, treated as a black box. +Warning: Equate pins: cell sky130_fd_pr__cap_mim_m3_1 is a placeholder, treated as a black box. + +Subcircuit pins: +Circuit 1: sky130_fd_pr__cap_mim_m3_1 |Circuit 2: sky130_fd_pr__cap_mim_m3_1 +-------------------------------------------|------------------------------------------- +1 |1 +2 |2 +--------------------------------------------------------------------------------------- +Cell pin lists are equivalent. +Device classes sky130_fd_pr__cap_mim_m3_1 and sky130_fd_pr__cap_mim_m3_1 are equivalent. +Flattening unmatched subcell OPAMP_TWO_STAGE in circuit opamp_test (1)(1 instance) +Flattening unmatched subcell INPUT_STAGE in circuit opamp_test (1)(1 instance) +Flattening unmatched subcell diff_test in circuit opamp_test (1)(1 instance) +Flattening unmatched subcell nmos_test in circuit opamp_test (1)(8 instances) +Flattening unmatched subcell CURRENT_MIRROR in circuit opamp_test (1)(4 instances) +Flattening unmatched subcell NMOS_1 in circuit opamp_test (1)(10 instances) +Flattening unmatched subcell GAIN_STAGE in circuit opamp_test (1)(1 instance) +Flattening unmatched subcell DIFF_TO_SINGLE_CS in circuit opamp_test (1)(1 instance) +Flattening unmatched subcell DIFF_TO_SINGLE in circuit opamp_test (1)(1 instance) +Flattening unmatched subcell pmos_test in circuit opamp_test (1)(60 instances) +Flattening unmatched subcell CURRENT_MIRROR in circuit opamp_test (1)(4 instances) +Flattening unmatched subcell MIMCAP_ARR in circuit opamp_test (1)(1 instance) +Flattening unmatched subcell MIMCap in circuit opamp_test (1)(6 instances) +Flattening unmatched subcell OUTPUT_STAGE in circuit opamp_test (1)(1 instance) +Flattening unmatched subcell NMOS_2 in circuit opamp_test (1)(16 instances) +Flattening unmatched subcell CURRENT_MIRROR in circuit opamp_test (1)(4 instances) + +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/1 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/2 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/3 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/4 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/2 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/3 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/4 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/1 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/2 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/3 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/4 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/2 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/3 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/4 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/1 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/2 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/3 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/4 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/2 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/3 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/4 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/1 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/2 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/3 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/4 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/2 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/3 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/4 +Class opamp_test (0): Merged 237 parallel devices. +Class opamp_test (1): Merged 269 parallel devices. +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/1 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/2 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/3 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/4 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/2 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/3 +Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/4 +Subcircuit summary: +Circuit 1: opamp_test |Circuit 2: opamp_test +-------------------------------------------|------------------------------------------- +sky130_fd_pr__pfet_01v8 (122->6) |sky130_fd_pr__pfet_01v8 (184->6) +sky130_fd_pr__nfet_01v8 (128->12) |sky130_fd_pr__nfet_01v8 (98->12) +sky130_fd_pr__cap_mim_m3_1 (6->1) |sky130_fd_pr__cap_mim_m3_1 (6->1) +Number of devices: 19 |Number of devices: 19 +Number of nets: 14 |Number of nets: 14 +--------------------------------------------------------------------------------------- +NET mismatches: Class fragments follow (with fanout counts): +Circuit 1: opamp_test |Circuit 2: opamp_test + +--------------------------------------------------------------------------------------- +Net: a_n7935_n484# |Net: outputibias + sky130_fd_pr__pfet_01v8/(1|3) = 1 | sky130_fd_pr__nfet_01v8/(1|3) = 1 + sky130_fd_pr__nfet_01v8/(1|3) = 1 | sky130_fd_pr__nfet_01v8/2 = 2 + sky130_fd_pr__nfet_01v8/2 = 1 | + sky130_fd_pr__cap_mim_m3_1/1 = 1 | + | +Net: a_n7677_7899# |Net: commonsourceibias + sky130_fd_pr__pfet_01v8/2 = 1 | sky130_fd_pr__pfet_01v8/(1|3) = 1 + sky130_fd_pr__pfet_01v8/(1|3) = 1 | sky130_fd_pr__nfet_01v8/(1|3) = 1 + sky130_fd_pr__nfet_01v8/(1|3) = 1 | sky130_fd_pr__cap_mim_m3_1/2 = 1 + | +Net: a_n8335_n2966# |Net: vdd + sky130_fd_pr__nfet_01v8/2 = 2 | sky130_fd_pr__pfet_01v8/(1|3) = 1 + sky130_fd_pr__nfet_01v8/(1|3) = 1 | sky130_fd_pr__nfet_01v8/(1|3) = 1 + | +Net: (no pins) |Net: output + sky130_fd_pr__nfet_01v8/2 = 2 | sky130_fd_pr__nfet_01v8/(1|3) = 2 + sky130_fd_pr__nfet_01v8/(1|3) = 1 | + | +Net: a_n2686_8022# |Net: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/DIFF_T + sky130_fd_pr__pfet_01v8/(1|3) = 2 | sky130_fd_pr__pfet_01v8/(1|3) = 2 + sky130_fd_pr__cap_mim_m3_1/2 = 1 | + | +Net: w_n8526_7510# |Net: gnd + sky130_fd_pr__pfet_01v8/(1|3) = 5 | sky130_fd_pr__nfet_01v8/4 = 10 + sky130_fd_pr__pfet_01v8/4 = 6 | sky130_fd_pr__nfet_01v8/(1|3) = 8 + sky130_fd_pr__pfet_01v8/2 = 1 | sky130_fd_pr__nfet_01v8/2 = 3 + sky130_fd_pr__nfet_01v8/(1|3) = 1 | sky130_fd_pr__pfet_01v8/4 = 2 + | sky130_fd_pr__pfet_01v8/(1|3) = 2 + | sky130_fd_pr__pfet_01v8/2 = 1 + | +Net: a_n9311_n3159# |Net: OPAMP_TWO_STAGE:0/wire1 + sky130_fd_pr__nfet_01v8/(1|3) = 10 | sky130_fd_pr__nfet_01v8/(1|3) = 1 + sky130_fd_pr__nfet_01v8/4 = 12 | sky130_fd_pr__pfet_01v8/(1|3) = 2 + sky130_fd_pr__nfet_01v8/2 = 3 | sky130_fd_pr__pfet_01v8/4 = 4 + | +Net: a_n2511_10156# |Net: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/wire0 + sky130_fd_pr__pfet_01v8/(1|3) = 2 | sky130_fd_pr__cap_mim_m3_1/1 = 1 + | +Net: a_12876_1294# |Net: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/DIFF_T + sky130_fd_pr__nfet_01v8/(1|3) = 2 | sky130_fd_pr__pfet_01v8/2 = 4 + | sky130_fd_pr__pfet_01v8/(1|3) = 1 +--------------------------------------------------------------------------------------- + +--------------------------------------------------------------------------------------- +Net: a_n2686_12378# |Net: CSoutput + sky130_fd_pr__pfet_01v8/2 = 4 | sky130_fd_pr__pfet_01v8/2 = 1 + sky130_fd_pr__pfet_01v8/(1|3) = 1 | sky130_fd_pr__pfet_01v8/(1|3) = 3 + sky130_fd_pr__nfet_01v8/(1|3) = 1 | sky130_fd_pr__nfet_01v8/(1|3) = 1 + | sky130_fd_pr__nfet_01v8/2 = 1 +--------------------------------------------------------------------------------------- +DEVICE mismatches: Class fragments follow (with node fanout counts): +Circuit 1: opamp_test |Circuit 2: opamp_test + +--------------------------------------------------------------------------------------- +Instance: sky130_fd_pr__nfet_01v8:118 |Instance: OUTPUT_STAGE:1/CURRENT_MIRROR:1/ + (1,3) = (25,3) | (1,3) = (26,2) + 2 = 3 | 2 = 3 + 4 = 25 | 4 = 26 + | +Instance: sky130_fd_pr__nfet_01v8:57 |Instance: OUTPUT_STAGE:1/CURRENT_MIRROR:1/ + (1,3) = (25,2) | (1,3) = (26,3) + 2 = 3 | 2 = 3 + 4 = 25 | 4 = 26 + | +Instance: sky130_fd_pr__nfet_01v8:32 |Instance: OPAMP_TWO_STAGE:0/INPUT_STAGE:0/ + (1,3) = (25,25) | (1,3) = (26,26) + 2 = 25 | 2 = 26 + 4 = 25 | 4 = 26 + | +Instance: sky130_fd_pr__nfet_01v8:16 |Instance: OUTPUT_STAGE:1/NMOS_2:0/sky130_f + (1,3) = (25,3) | (1,3) = (2,2) + 2 = 3 | 2 = 6 + 4 = 25 | 4 = 26 + | +Instance: sky130_fd_pr__nfet_01v8:11 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/C + (1,3) = (13,2) | (1,3) = (3,1) + 2 = 4 | 2 = 0 + 4 = 25 | 4 = 0 + | +Instance: sky130_fd_pr__nfet_01v8:2 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/C + (1,3) = (25,4) | (1,3) = (1,1) + 2 = 3 | 2 = 0 + 4 = 25 | 4 = 0 +--------------------------------------------------------------------------------------- + +--------------------------------------------------------------------------------------- +Instance: sky130_fd_pr__pfet_01v8:3 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/D + (1,3) = (13,13) | (1,3) = (26,26) + 2 = 13 | 2 = 26 + 4 = 13 | 4 = 26 + | +Instance: sky130_fd_pr__pfet_01v8:0 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/D + (1,3) = (13,4) | (1,3) = (5,2) + 2 = 3 | 2 = 5 + 4 = 13 | 4 = 7 + | +Instance: sky130_fd_pr__pfet_01v8:103 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/D + (1,3) = (13,2) | (1,3) = (7,2) + 2 = 6 | 2 = 5 + 4 = 13 | 4 = 7 + | +Instance: sky130_fd_pr__pfet_01v8:29 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/D + (1,3) = (13,3) | (1,3) = (3,2) + 2 = 6 | 2 = 6 + 4 = 13 | 4 = 26 + | +Instance: sky130_fd_pr__pfet_01v8:7 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/D + (1,3) = (3,3) | (1,3) = (6,6) + 2 = 6 | 2 = 5 + 4 = 13 | 4 = 7 + | +Instance: sky130_fd_pr__pfet_01v8:5 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/D + (1,3) = (6,2) | (1,3) = (7,6) + 2 = 6 | 2 = 5 + 4 = 13 | 4 = 7 +--------------------------------------------------------------------------------------- +Netlists do not match. + +Subcircuit pins: +Circuit 1: opamp_test |Circuit 2: opamp_test +-------------------------------------------|------------------------------------------- +(no pins) |output **Mismatch** +(no matching pin) |CSoutput +(no matching pin) |vdd +(no matching pin) |plus +(no matching pin) |minus +(no matching pin) |commonsourceibias +(no matching pin) |outputibias +(no matching pin) |diffpairibias +(no matching pin) |gnd +--------------------------------------------------------------------------------------- +Cell pin lists for opamp_test and opamp_test altered to match. +Device classes opamp_test and opamp_test are equivalent. + +Final result: Top level cell failed pin matching. diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.cdl b/openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.cdl new file mode 100644 index 000000000..48e187bf3 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.cdl @@ -0,0 +1,84 @@ +.subckt nmos_test D G S B l=1 w=1 m=1 dm=1 +XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} +XDUMMY1 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} +.ends nmos_test + +.subckt diff_test VP VN VDD1 VDD2 VTAIL B +X0 VDD1 VP VTAIL B nmos_test l=1.0 w=6.0 m=4 dm=1 +X1 VDD2 VN VTAIL B nmos_test l=1.0 w=6.0 m=4 dm=1 +.ends diff_test + +.subckt CURRENT_MIRROR VREF VCOPY VSS l=1 w=1 m=1 +XREF VREF VREF VSS VSS sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} +XCOPY VCOPY VREF VSS VSS sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} +.ends CURRENT_MIRROR + +.subckt NMOS_1 D G S B l=1 w=1 m=1 dm=1 +XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} +.ends NMOS_1 + +.subckt INPUT_STAGE VP VN VDD1 VDD2 IBIAS VSS B +X0 VP VN VDD1 VDD2 wire0 B diff_test +X1 IBIAS wire0 VSS CURRENT_MIRROR l=2.0 w=6.0 m=4 +X2 VSS VSS VP VSS NMOS_1 l=0.5 w=1.0 m=5 dm=1 +X3 VSS VSS VN VSS NMOS_1 l=0.5 w=1.0 m=5 dm=1 +.ends INPUT_STAGE + +.subckt DIFF_TO_SINGLE VIN VOUT VSS VSS2 l=1 w=1 mt=1 mb=1 +XTOP1 V1 VIN VSS VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mt} +XTOP2 VSS2 VIN VSS VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mt} +XBOT1 VIN VIN V1 VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mb} +XBOT2 VOUT VIN VSS2 VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mb} +.ends DIFF_TO_SINGLE + +.subckt pmos_test D G S B l=1 w=1 m=1 dm=1 +XMAIN D G S B sky130_fd_pr__pfet_01v8 l={l} w={w} m={m} +XDUMMY1 B B B B sky130_fd_pr__pfet_01v8 l={l} w={w} m={dm} +XDUMMY2 B B B B sky130_fd_pr__pfet_01v8 l={l} w={w} m={dm} +.ends pmos_test + +.subckt DIFF_TO_SINGLE_CS VIN1 VIN2 VOUT VSS VSS2 +X0 VIN1 VIN2 VSS VSS2 DIFF_TO_SINGLE l=1 w=6 mt=8 mb=12 +X1 VOUT VIN2 VSS VSS pmos_test l=1.0 w=7.0 m=30 dm=3 +X2 VOUT VIN2 VSS VSS pmos_test l=1.0 w=7.0 m=30 dm=3 +.ends DIFF_TO_SINGLE_CS + +.subckt MIMCap V1 V2 l=1 w=1 +X1 V1 V2 sky130_fd_pr__cap_mim_m3_1 l={l} w={w} +.ends MIMCap + +.subckt MIMCAP_ARR V1 V2 +X0 V1 V2 MIMCap l=12.0 w=12.0 +X1 V1 V2 MIMCap l=12.0 w=12.0 +X2 V1 V2 MIMCap l=12.0 w=12.0 +X3 V1 V2 MIMCap l=12.0 w=12.0 +X4 V1 V2 MIMCap l=12.0 w=12.0 +X5 V1 V2 MIMCap l=12.0 w=12.0 +.ends MIMCAP_ARR + +.subckt GAIN_STAGE VIN1 VIN2 VOUT VDD IBIAS GND +X0 VIN1 VIN2 VOUT VDD wire0 DIFF_TO_SINGLE_CS +X1 IBIAS VOUT GND CURRENT_MIRROR l=2 w=6 m=4 +X2 wire0 VOUT MIMCAP_ARR +.ends GAIN_STAGE + +.subckt OPAMP_TWO_STAGE VDD GND DIFFPAIR_BIAS VP VN CS_BIAS VOUT +X0 VP VN wire0 wire1 DIFFPAIR_BIAS GND GND INPUT_STAGE +X1 wire0 wire1 VOUT VDD CS_BIAS GND GAIN_STAGE +.ends OPAMP_TWO_STAGE + +.subckt NMOS_2 D G S B l=1 w=1 m=1 dm=1 +XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} +XDUMMY1 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} +XDUMMY2 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} +.ends NMOS_2 + +.subckt OUTPUT_STAGE VDD GND IBIAS VIN VOUT +X0 VDD VIN VOUT GND NMOS_2 l=1.0 w=5.0 m=16 dm=1 +X1 IBIAS VOUT GND CURRENT_MIRROR l=2 w=6 m=4 +.ends OUTPUT_STAGE + +.subckt opamp_test CSoutput vdd plus minus commonsourceibias outputibias diffpairibias gnd output +X0 vdd gnd diffpairibias plus minus commonsourceibias CSoutput OPAMP_TWO_STAGE +X1 vdd gnd outputibias CSoutput output OUTPUT_STAGE +.ends opamp_test \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.gds b/openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.gds new file mode 100644 index 0000000000000000000000000000000000000000..f44e0ec3d50cb5e81ec8be8c03b01dd986550f95 GIT binary patch literal 2983940 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 z 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%0D(|W#tZ{q1+hW|q)p8jR*hxJbXGJM~n?eYJh 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%0Dn;{%;BXdxBpozsNtG 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%0D0c_p~_X7|t($KIKpA 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 z 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%0Di@^4s3y=chk1wf}9F%Ku8rul%-l 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 M9;foBf4b`b0hgQENB{r; literal 0 HcmV?d00001 diff --git a/openfasoc/generators/gdsfactory-gen/setup_glayout_ci.py b/openfasoc/generators/gdsfactory-gen/setup_glayout_ci.py new file mode 100644 index 000000000..927a0f45d --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/setup_glayout_ci.py @@ -0,0 +1,63 @@ +import os +import pathlib +import sys +sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', '.github', 'scripts')) +from run_glayout_drc import run_drc_wrapper +from gdsfactory.component import Component +import argparse + +from glayout.pdk.mappedpdk import MappedPDK +from glayout.pdk.sky130_mapped import sky130_mapped_pdk as sky130 +from glayout.pdk.gf180_mapped import gf180_mapped_pdk as gf180 +import glayout.primitives.fet as fet +import glayout.primitives.guardring as guardring +import glayout.primitives.mimcap as mimcap +import glayout.primitives.via_gen as via +import glayout.placement.two_transistor_place as two_transistor_place +import glayout.components.diff_pair as diff_pair +import glayout.components.opamp as opamp + +parser = argparse.ArgumentParser(description='Run DRC on components') +parser.add_argument('--pdk', required=True, type=str, help='PDK to be used (sky130, gf180)') +args = parser.parse_args(sys.argv[1:]) +if (args.pdk == 'sky130'): + pdk = sky130 +elif (args.pdk == 'gf180'): + pdk = gf180 +else: + print('Invalid PDK, continuing with sky130') + pdk = sky130 + +##### SETUP ##### + +# get path of conda executable +conda_path = pathlib.Path(sys.executable).parent +CONDA_PATH = str(conda_path) +os.environ["CONDA_PATH"] = CONDA_PATH +COMMON_VERIF_DIR = '../../common/drc-lvs-check' +os.environ["COMMON_VERIF_DIR"] = COMMON_VERIF_DIR + +# create results and reports directories +os.makedirs("../../../res/results", exist_ok=True) +os.makedirs("../../../res/reports", exist_ok=True) +results_dir = os.path.abspath("../../../res/results") +reports_dir = os.path.abspath("../../../res/reports") +os.environ["RESULTS_DIR"] = results_dir +os.environ["REPORTS_DIR"] = reports_dir + + +components = [ + ("nfet_test", fet.nmos), + ("pfet_test", fet.pmos), + ("tapring_test", guardring.tapring), + ("mimcap_test", mimcap.mimcap), + ("via_stack_test", via.via_stack, 'poly', 'met1'), + ("via_array_test", via.via_array, 'poly', 'met1', (2.0, 2.5)), + ("ttp_test", two_transistor_place.two_transistor_place, 'aba bab aba', (fet.nmos, {"pdk": pdk}), (fet.nmos, {"pdk": pdk})), + ("diff_pair_test", diff_pair.diff_pair), + ("opamp_test", opamp.opamp) +] + +run_drc_wrapper(pdk, components) + +sys.exit(0) diff --git a/res/reports/6_final_drc.rpt b/res/reports/6_final_drc.rpt new file mode 100644 index 000000000..fcff66452 --- /dev/null +++ b/res/reports/6_final_drc.rpt @@ -0,0 +1,3 @@ +opamp_test count: +---------------------------------------- + From 0ccb2411e63b9fe6d20a985671900a62e5bb6275 Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Fri, 19 Apr 2024 13:56:35 +0000 Subject: [PATCH 07/20] yes --- .../glayout/netgen_lvs/ext/diff_test.ext | 43 --- .../glayout/netgen_lvs/ext/magic.script | 56 --- .../glayout/netgen_lvs/ext/nmos_test.ext | 23 -- .../glayout/netgen_lvs/ext/opamp_test.ext | 325 ------------------ .../glayout/netgen_lvs/ext/pmos_test.ext | 21 -- .../glayout/netgen_lvs/spice/diff_test.spice | 9 - .../netgen_lvs/spice/diff_test_lvsmag.spice | 25 -- .../netgen_lvs/spice/diff_test_pex.spice | 40 --- .../netgen_lvs/spice/diff_test_sim.spice | 40 --- .../glayout/netgen_lvs/spice/nmos_test.spice | 6 - .../netgen_lvs/spice/nmos_test_lvsmag.spice | 8 - .../netgen_lvs/spice/nmos_test_pex.spice | 20 -- .../netgen_lvs/spice/nmos_test_sim.spice | 20 -- .../glayout/netgen_lvs/spice/opamp_test.spice | 71 ---- .../netgen_lvs/spice/opamp_test_lvsmag.spice | 261 -------------- .../netgen_lvs/spice/opamp_test_pex.spice | 320 ----------------- .../netgen_lvs/spice/opamp_test_sim.spice | 320 ----------------- .../glayout/netgen_lvs/spice/pmos_test.spice | 6 - .../netgen_lvs/spice/pmos_test_lvsmag.spice | 8 - .../netgen_lvs/spice/pmos_test_pex.spice | 18 - .../netgen_lvs/spice/pmos_test_sim.spice | 18 - .../reports/sky130hd/glayout/6_final_lvs.rpt | 246 ------------- .../results/sky130hd/glayout/6_final.cdl | 84 ----- .../results/sky130hd/glayout/6_final.gds | Bin 2983940 -> 0 bytes 24 files changed, 1988 deletions(-) delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/diff_test.ext delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/magic.script delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/nmos_test.ext delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/opamp_test.ext delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/pmos_test.ext delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_lvsmag.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_pex.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_sim.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_lvsmag.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_pex.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_sim.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_lvsmag.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_pex.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_sim.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_lvsmag.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_pex.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_sim.spice delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/reports/sky130hd/glayout/6_final_lvs.rpt delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.cdl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.gds diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/diff_test.ext b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/diff_test.ext deleted file mode 100644 index 05a458121..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/diff_test.ext +++ /dev/null @@ -1,43 +0,0 @@ -timestamp 0 -version 8.3 -tech sky130A -style ngspice() -scale 1000 1 500000 -resistclasses 4400000 2200000 950000 3050000 120000 197000 114000 191000 120000 197000 114000 191000 48200 319800 2000000 48200 48200 12800 125 125 47 47 29 5 -parameters sky130_fd_pr__nfet_01v8 l=l w=w a1=as p1=ps a2=ad p2=pd -node "a_n549_n997#" 4368 2025.49 -549 -997 ndif 0 0 0 0 0 0 0 0 240000 5600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 200904 6616 361200 13076 187440 5944 0 0 0 0 0 0 0 0 -node "a_n549_397#" 4368 2196.98 -549 397 ndif 0 0 0 0 0 0 0 0 240000 5600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 200904 6616 358792 13020 206184 6512 0 0 0 0 0 0 0 0 -node "a_n674_n997#" 13714 3429.69 -674 -997 ndif 0 0 0 0 0 0 0 0 696000 16720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 534600 17784 698672 25608 283536 8856 0 0 0 0 0 0 0 0 -node "a_n579_n1047#" 10536 4215.68 -579 -1047 p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 242640 14424 0 0 26136 1584 398524 12424 234300 7364 0 0 0 0 0 0 0 0 -node "a_n579_201#" 10535 4095.6 -579 201 p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 242640 14424 0 0 26136 1584 398524 12424 219252 6908 0 0 0 0 0 0 0 0 -substrate "a_n1366_n1488#" 0 0 -1366 -1488 ppd 0 0 0 0 0 0 0 0 456000 11120 909216 22176 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 101424 6656 0 0 1376496 36336 0 0 0 0 0 0 0 0 0 0 0 0 -cap "a_n674_n997#" "a_n549_n997#" 5614.66 -cap "a_n579_201#" "a_n549_n997#" 287.679 -cap "a_n579_n1047#" "a_n674_n997#" 751.816 -cap "a_n579_n1047#" "a_n549_n997#" 803.013 -cap "a_n579_201#" "a_n674_n997#" 765.855 -cap "a_n579_201#" "a_n579_n1047#" 3163.74 -cap "a_n549_397#" "a_n549_n997#" 641.247 -cap "a_n674_n997#" "a_n549_397#" 5575.63 -cap "a_n579_n1047#" "a_n549_397#" 157.927 -cap "a_n579_201#" "a_n549_397#" 932.267 -device msubckt sky130_fd_pr__nfet_01v8 897 -997 898 -996 l=30 w=600 "a_n1366_n1488#" "a_n1366_n1488#" 60 0 "a_n1366_n1488#" 0 0 "a_n1366_n1488#" 1200 57000,1390 -device msubckt sky130_fd_pr__nfet_01v8 549 -997 550 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n549_397#" 600 30000,700 "a_n674_n997#" 600 57000,1390 -device msubckt sky130_fd_pr__nfet_01v8 419 -997 420 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n674_n997#" 600 30000,700 "a_n549_397#" 600 30000,700 -device msubckt sky130_fd_pr__nfet_01v8 289 -997 290 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n549_397#" 600 30000,700 "a_n674_n997#" 600 30000,700 -device msubckt sky130_fd_pr__nfet_01v8 159 -997 160 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n674_n997#" 600 57000,1390 "a_n549_397#" 600 30000,700 -device msubckt sky130_fd_pr__nfet_01v8 -189 -997 -188 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n549_n997#" 600 30000,700 "a_n674_n997#" 600 57000,1390 -device msubckt sky130_fd_pr__nfet_01v8 -319 -997 -318 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n674_n997#" 600 30000,700 "a_n549_n997#" 600 30000,700 -device msubckt sky130_fd_pr__nfet_01v8 -449 -997 -448 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n549_n997#" 600 30000,700 "a_n674_n997#" 600 30000,700 -device msubckt sky130_fd_pr__nfet_01v8 -579 -997 -578 -996 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n674_n997#" 600 57000,1390 "a_n549_n997#" 600 30000,700 -device msubckt sky130_fd_pr__nfet_01v8 -927 -997 -926 -996 l=30 w=600 "a_n1366_n1488#" "a_n1366_n1488#" 60 0 "a_n1366_n1488#" 0 0 "a_n1366_n1488#" 1200 57000,1390 -device msubckt sky130_fd_pr__nfet_01v8 897 397 898 398 l=30 w=600 "a_n1366_n1488#" "a_n1366_n1488#" 60 0 "a_n1366_n1488#" 0 0 "a_n1366_n1488#" 1200 57000,1390 -device msubckt sky130_fd_pr__nfet_01v8 549 397 550 398 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n549_n997#" 600 30000,700 "a_n674_n997#" 600 57000,1390 -device msubckt sky130_fd_pr__nfet_01v8 419 397 420 398 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n674_n997#" 600 30000,700 "a_n549_n997#" 600 30000,700 -device msubckt sky130_fd_pr__nfet_01v8 289 397 290 398 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n549_n997#" 600 30000,700 "a_n674_n997#" 600 30000,700 -device msubckt sky130_fd_pr__nfet_01v8 159 397 160 398 l=30 w=600 "a_n1366_n1488#" "a_n579_n1047#" 60 0 "a_n674_n997#" 600 57000,1390 "a_n549_n997#" 600 30000,700 -device msubckt sky130_fd_pr__nfet_01v8 -189 397 -188 398 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n549_397#" 600 30000,700 "a_n674_n997#" 600 57000,1390 -device msubckt sky130_fd_pr__nfet_01v8 -319 397 -318 398 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n674_n997#" 600 30000,700 "a_n549_397#" 600 30000,700 -device msubckt sky130_fd_pr__nfet_01v8 -449 397 -448 398 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n549_397#" 600 30000,700 "a_n674_n997#" 600 30000,700 -device msubckt sky130_fd_pr__nfet_01v8 -579 397 -578 398 l=30 w=600 "a_n1366_n1488#" "a_n579_201#" 60 0 "a_n674_n997#" 600 57000,1390 "a_n549_397#" 600 30000,700 -device msubckt sky130_fd_pr__nfet_01v8 -927 397 -926 398 l=30 w=600 "a_n1366_n1488#" "a_n1366_n1488#" 60 0 "a_n1366_n1488#" 0 0 "a_n1366_n1488#" 1200 57000,1390 diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/magic.script b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/magic.script deleted file mode 100644 index bafe6d692..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/magic.script +++ /dev/null @@ -1,56 +0,0 @@ -gds flatglob *$$* -gds read /home/chetanya/OpenFASOC/openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.gds -load opamp_test - -if {![string compare opamp_test "diff_test"]} { - select top cell - flatten diff_test_flat - load diff_test_flat - cellname delete diff_test - cellname rename diff_test_flat diff_test - select top cell -} elseif {![string compare opamp_test "diff_test"]} { - select top cell - flatten diff_test_flat - load diff_test_flat - cellname delete diff_test - cellname rename diff_test_flat diff_test - select top cell -} elseif {![string compare opamp_test "nmos_test"]} { - select top cell - flatten nmos_test_flat - load nmos_test_flat - cellname delete nmos_test - cellname rename nmos_test_flat nmos_test - select top cell -} elseif {![string compare opamp_test "pmos_test"]} { - select top cell - flatten pmos_test_flat - load pmos_test_flat - cellname delete pmos_test - cellname rename pmos_test_flat pmos_test - select top cell -} elseif {![string compare opamp_test "opamp_test"]} { - select top cell - flatten opamp_test_flat - load opamp_test_flat - cellname delete opamp_test - cellname rename opamp_test_flat opamp_test - select top cell -} else { - select top cell -} -extract all -ext2spice lvs -ext2spice -o ../spice/opamp_test_lvsmag.spice -load opamp_test -extract all -ext2spice lvs -ext2spice rthresh 0 -ext2spice cthresh 0 -ext2spice -o ../spice/opamp_test_pex.spice -load opamp_test -extract all -ext2spice cthresh 0 -ext2spice -o ../spice/opamp_test_sim.spice -exit diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/nmos_test.ext b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/nmos_test.ext deleted file mode 100644 index d5f17dbc7..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/nmos_test.ext +++ /dev/null @@ -1,23 +0,0 @@ -timestamp 0 -version 8.3 -tech sky130A -style ngspice() -scale 1000 1 500000 -resistclasses 4400000 2200000 950000 3050000 120000 197000 114000 191000 120000 197000 114000 191000 48200 319800 2000000 48200 48200 12800 125 125 47 47 29 5 -parameters sky130_fd_pr__nfet_01v8 l=l w=w a1=as p1=ps a2=ad p2=pd -node "a_15_n286#" 907 47.7644 15 -286 ndif 0 0 0 0 0 0 0 0 57000 1390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50226 1654 45704 1808 0 0 0 0 0 0 0 0 0 0 -node "a_n110_n286#" 891 48.0941 -110 -286 ndif 0 0 0 0 0 0 0 0 57000 1390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44550 1482 45704 1808 0 0 0 0 0 0 0 0 0 0 -node "a_n33_n482#" 1359 35.0755 -33 -482 p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27756 1824 0 0 4356 264 4356 264 0 0 0 0 0 0 0 0 0 0 -node "w_n734_n737#" 24039 2053.05 -734 -737 pw 2163832 5884 0 0 0 0 0 0 228000 5560 414920 10120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50712 3328 0 0 565392 16416 220416 5704 0 0 0 0 0 0 0 0 0 0 -node "dw_n734_n737#" 2209 6491.5 -734 -737 dnw 0 0 2163832 5884 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -substrate "a_n884_n887#" 0 0 -884 -887 ppd 0 0 0 0 0 0 0 0 0 0 553992 13512 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 471248 13152 289952 7400 0 0 0 0 0 0 0 0 0 0 -cap "w_n734_n737#" "a_n110_n286#" 283.328 -cap "a_n33_n482#" "a_15_n286#" 45.5751 -cap "w_n734_n737#" "a_15_n286#" 387.693 -cap "w_n734_n737#" "a_n33_n482#" 279.309 -cap "dw_n734_n737#" "w_n734_n737#" 6491.5 -cap "a_n110_n286#" "a_15_n286#" 598.904 -cap "a_n33_n482#" "a_n110_n286#" 55.6978 -device msubckt sky130_fd_pr__nfet_01v8 333 -286 334 -285 l=30 w=600 "w_n734_n737#" "w_n734_n737#" 60 0 "w_n734_n737#" 0 0 "w_n734_n737#" 1200 57000,1390 -device msubckt sky130_fd_pr__nfet_01v8 -15 -286 -14 -285 l=30 w=600 "w_n734_n737#" "a_n33_n482#" 60 0 "a_n110_n286#" 600 57000,1390 "a_15_n286#" 600 57000,1390 -device msubckt sky130_fd_pr__nfet_01v8 -363 -286 -362 -285 l=30 w=600 "w_n734_n737#" "w_n734_n737#" 60 0 "w_n734_n737#" 0 0 "w_n734_n737#" 1200 57000,1390 diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/opamp_test.ext b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/opamp_test.ext deleted file mode 100644 index 63017dfeb..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/opamp_test.ext +++ /dev/null @@ -1,325 +0,0 @@ -timestamp 0 -version 8.3 -tech sky130A -style ngspice() -scale 1000 1 500000 -resistclasses 4400000 2200000 950000 3050000 120000 197000 114000 191000 120000 197000 114000 191000 48200 319800 2000000 48200 48200 12800 125 125 47 47 29 5 -parameters sky130_fd_pr__nfet_01v8 l=l w=w a1=as p1=ps a2=ad p2=pd -parameters sky130_fd_pr__pfet_01v8 l=l w=w a1=as p1=ps a2=ad p2=pd -parameters sky130_fd_pr__cap_mim_m3_1 w=w l=l -node "a_n2517_n3844#" 12779 30408.9 -2517 -3844 p 0 0 0 0 0 0 0 0 374400 10224 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5072000 31760 0 0 520080 19456 485488 19696 2738168 39208 680400 5136 0 0 0 0 0 0 -node "a_13154_n1884#" 12779 30131.9 13154 -1884 p 0 0 0 0 0 0 0 0 374400 10224 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5072000 31760 0 0 520080 19456 485488 19696 2615768 37984 680400 5136 0 0 0 0 0 0 -node "a_12876_1294#" 29986 13809.6 12876 1294 ndif 0 0 0 0 0 0 0 0 992400 29460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1234596 39128 896548 33580 1950576 23416 731400 5476 0 0 0 0 0 0 -node "a_n1455_n3628#" 34469 16057 -1455 -3628 ndif 0 0 0 0 0 0 0 0 1440000 40800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1586640 50192 2001584 56896 1469880 28292 0 0 0 0 0 0 0 0 -node "a_n8335_n2966#" 19297 109473 -8335 -2966 p 0 0 0 0 0 0 0 0 633600 20256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27946152 177216 0 0 1705440 81248 3043136 84176 1344152 33828 4914000 33360 4571200 23056 0 0 0 0 -node "a_n1140_1442#" 6219 17908.8 -1140 1442 p 0 0 0 0 0 0 0 0 42000 1620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2339736 26336 0 0 132858 6798 685356 21992 5434018 40864 378000 2840 0 0 0 0 0 0 -node "a_n2148_3925#" 6218 15191.3 -2148 3925 ndif 0 0 0 0 0 0 0 0 42000 1620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2339736 26336 0 0 132858 6798 678744 21764 3604262 31104 378000 2840 0 0 0 0 0 0 -node "a_n2686_8022#" 54608 18035.2 -2686 8022 pdif 0 0 0 0 0 0 0 0 0 0 1224000 35640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1204896 38360 2488636 62302 531926 13914 39845052 78518 0 0 0 0 0 0 -node "a_n2511_10156#" 48496 597.469 -2511 10156 pdif 0 0 0 0 0 0 0 0 0 0 1008000 30480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1089792 34608 2616248 57146 283144 8700 0 0 0 0 0 0 0 0 -node "a_n2686_12378#" 38682 10244.6 -2686 12378 pdif 0 0 0 0 0 0 0 0 316800 10128 691200 20352 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11707392 131680 0 0 1488960 59376 3584572 98262 989790 30622 180000 2400 853476 9970 0 0 0 0 -node "a_n7935_n484#" 44976 72983.8 -7935 -484 ndif 0 0 0 0 0 0 0 0 1267200 40512 2772000 87960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4136340 46312 0 0 4944588 160528 7974252 213920 2307826 57982 12177600 82984 47487920 116122 0 0 0 0 -node "a_n7677_7899#" 33094 20206.8 -7677 7899 p 0 0 0 0 0 0 0 0 316800 10128 475200 15192 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19987224 221520 0 0 1609080 69880 4196542 101726 1676732 48396 3151800 22812 805956 9442 0 0 0 0 -node "w_n8526_7510#" 1520 351129 -8526 7510 nw 0 0 0 0 112202160 47264 0 0 7057824 176320 8654400 248160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6295832 73704 0 0 15458436 457364 11489568 280348 17623400 70110 10301100 68474 0 0 0 0 0 0 -substrate "a_n9311_n3159#" 0 0 -9311 -3159 ppd 0 0 0 0 0 0 0 0 8186400 231248 15330064 373904 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10376680 85424 0 0 21791512 648412 35408436 498486 6217640 86516 14332200 59280 0 0 0 0 0 0 -cap "a_n2511_10156#" "w_n8526_7510#" 11846.5 -cap "a_13154_n1884#" "a_n7935_n484#" 31.8574 -cap "a_n8335_n2966#" "w_n8526_7510#" 4.21756 -cap "a_n2517_n3844#" "a_n2148_3925#" 0.0830619 -cap "a_n2517_n3844#" "a_n1140_1442#" 0.0830619 -cap "a_n2148_3925#" "a_n1140_1442#" 7843.38 -cap "a_n1455_n3628#" "a_n2686_12378#" 6632.49 -cap "a_n2511_10156#" "a_n2686_12378#" 17249.1 -cap "a_13154_n1884#" "a_12876_1294#" 2326.24 -cap "a_n1455_n3628#" "a_n8335_n2966#" 2.98744 -cap "a_n2686_12378#" "a_n8335_n2966#" 395.315 -cap "a_n7935_n484#" "a_n2686_8022#" 80907.4 -cap "a_n7677_7899#" "a_n7935_n484#" 30755.8 -cap "a_n7935_n484#" "w_n8526_7510#" 61836.3 -cap "a_n2517_n3844#" "a_n7677_7899#" 1.25765 -cap "a_n2148_3925#" "a_n7677_7899#" 286.692 -cap "a_n7677_7899#" "a_n1140_1442#" 4354.99 -cap "a_n7935_n484#" "a_n2686_12378#" 377.983 -cap "a_12876_1294#" "w_n8526_7510#" 7233.91 -cap "a_n2511_10156#" "a_n7935_n484#" 1.39328 -cap "a_n7935_n484#" "a_n8335_n2966#" 23969.7 -cap "w_n8526_7510#" "a_n1140_1442#" 73.8253 -cap "a_n2517_n3844#" "a_n1455_n3628#" 2203.49 -cap "a_n1455_n3628#" "a_n2148_3925#" 3696.33 -cap "a_n2148_3925#" "a_n2686_12378#" 3616.38 -cap "a_n1455_n3628#" "a_n1140_1442#" 3708.96 -cap "a_12876_1294#" "a_n8335_n2966#" 6.80816 -cap "a_n2517_n3844#" "a_n2686_12378#" 0.307028 -cap "a_n2686_12378#" "a_n1140_1442#" 777.962 -cap "a_n2517_n3844#" "a_n8335_n2966#" 8.43333 -cap "a_n2148_3925#" "a_n8335_n2966#" 306.594 -cap "a_n8335_n2966#" "a_n1140_1442#" 266.289 -cap "a_13154_n1884#" "a_n8335_n2966#" 3.51687 -cap "a_n7677_7899#" "a_n2686_8022#" 8331.3 -cap "w_n8526_7510#" "a_n2686_8022#" 37162.3 -cap "a_n7677_7899#" "w_n8526_7510#" 65790.3 -cap "a_n2686_12378#" "a_n2686_8022#" 11383.1 -cap "a_12876_1294#" "a_n7935_n484#" 6134.28 -cap "a_n2511_10156#" "a_n2686_8022#" 1621.35 -cap "a_n2148_3925#" "a_n7935_n484#" 2746.86 -cap "a_n1455_n3628#" "a_n7677_7899#" 6684.51 -cap "a_n7935_n484#" "a_n1140_1442#" 804.612 -cap "a_n7677_7899#" "a_n2686_12378#" 8795.77 -cap "a_n2511_10156#" "a_n7677_7899#" 1338.23 -cap "a_n7677_7899#" "a_n8335_n2966#" 395.315 -cap "a_n2686_12378#" "w_n8526_7510#" 34364.5 -device csubckt sky130_fd_pr__cap_mim_m3_1 14840 7242 14841 7243 w=2400 l=2400 "None" "a_n7935_n484#" 50176 0 "a_n2686_8022#" 0 39845052,78518 -device csubckt sky130_fd_pr__cap_mim_m3_1 12144 7242 12145 7243 w=2400 l=2400 "None" "a_n7935_n484#" 50176 0 "a_n2686_8022#" 0 39845052,78518 -device csubckt sky130_fd_pr__cap_mim_m3_1 14840 9938 14841 9939 w=2400 l=2400 "None" "a_n7935_n484#" 50176 0 "a_n2686_8022#" 0 39845052,78518 -device csubckt sky130_fd_pr__cap_mim_m3_1 12144 9938 12145 9939 w=2400 l=2400 "None" "a_n7935_n484#" 50176 0 "a_n2686_8022#" 0 39845052,78518 -device csubckt sky130_fd_pr__cap_mim_m3_1 14840 12634 14841 12635 w=2400 l=2400 "None" "a_n7935_n484#" 50176 0 "a_n2686_8022#" 0 39845052,78518 -device csubckt sky130_fd_pr__cap_mim_m3_1 12144 12634 12145 12635 w=2400 l=2400 "None" "a_n7935_n484#" 50176 0 "a_n2686_8022#" 0 39845052,78518 -device msubckt sky130_fd_pr__nfet_01v8 18472 -1668 18473 -1667 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 17788 -1668 17789 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_12876_1294#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 17126 -1668 17127 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_13154_n1884#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 16464 -1668 16465 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_12876_1294#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 15802 -1668 15803 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_13154_n1884#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 15140 -1668 15141 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_12876_1294#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 14478 -1668 14479 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_13154_n1884#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 13816 -1668 13817 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_12876_1294#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 13154 -1668 13155 -1667 l=400 w=1200 "a_n9311_n3159#" "a_13154_n1884#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_13154_n1884#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 12470 -1668 12471 -1667 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 8619 -2770 8620 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 7935 -2770 7936 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 7469 -2770 7470 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n8335_n2966#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 7003 -2770 7004 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 6537 -2770 6538 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n8335_n2966#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 6071 -2770 6072 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 5605 -2770 5606 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n8335_n2966#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 5139 -2770 5140 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 4673 -2770 4674 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n8335_n2966#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 3989 -2770 3990 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 2801 -3628 2802 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 2117 -3628 2118 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n1455_n3628#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 1455 -3628 1456 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n2517_n3844#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 793 -3628 794 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n1455_n3628#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 131 -3628 132 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n2517_n3844#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -531 -3628 -530 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n1455_n3628#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -1193 -3628 -1192 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n2517_n3844#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -1855 -3628 -1854 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n1455_n3628#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -2517 -3628 -2516 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n2517_n3844#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n2517_n3844#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -3201 -3628 -3200 -3627 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -4389 -2770 -4388 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -5073 -2770 -5072 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -5539 -2770 -5538 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n8335_n2966#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -6005 -2770 -6004 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -6471 -2770 -6470 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n8335_n2966#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -6937 -2770 -6936 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -7403 -2770 -7402 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n8335_n2966#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -7869 -2770 -7868 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n8335_n2966#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -8335 -2770 -8334 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n8335_n2966#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -9019 -2770 -9018 -2769 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 8619 -484 8620 -483 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 7935 -484 7936 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 7469 -484 7470 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 7003 -484 7004 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 6537 -484 6538 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 6071 -484 6072 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 5605 -484 5606 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 5139 -484 5140 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 4673 -484 4674 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 3989 -484 3990 -483 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 17428 1294 17429 1295 l=200 w=1000 "a_n9311_n3159#" "a_n9311_n3159#" 400 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2000 78000,2156 -device msubckt sky130_fd_pr__nfet_01v8 16944 1294 16945 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 78000,2156 -device msubckt sky130_fd_pr__nfet_01v8 16678 1294 16679 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 33000,1066 "w_n8526_7510#" 1000 33000,1066 -device msubckt sky130_fd_pr__nfet_01v8 16412 1294 16413 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 33000,1066 -device msubckt sky130_fd_pr__nfet_01v8 16146 1294 16147 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 33000,1066 "w_n8526_7510#" 1000 33000,1066 -device msubckt sky130_fd_pr__nfet_01v8 15880 1294 15881 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 33000,1066 -device msubckt sky130_fd_pr__nfet_01v8 15614 1294 15615 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 33000,1066 "w_n8526_7510#" 1000 33000,1066 -device msubckt sky130_fd_pr__nfet_01v8 15348 1294 15349 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 33000,1066 -device msubckt sky130_fd_pr__nfet_01v8 15082 1294 15083 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 33000,1066 "w_n8526_7510#" 1000 33000,1066 -device msubckt sky130_fd_pr__nfet_01v8 14816 1294 14817 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 33000,1066 -device msubckt sky130_fd_pr__nfet_01v8 14550 1294 14551 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 33000,1066 "w_n8526_7510#" 1000 33000,1066 -device msubckt sky130_fd_pr__nfet_01v8 14284 1294 14285 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 33000,1066 -device msubckt sky130_fd_pr__nfet_01v8 14018 1294 14019 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 33000,1066 "w_n8526_7510#" 1000 33000,1066 -device msubckt sky130_fd_pr__nfet_01v8 13752 1294 13753 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 33000,1066 -device msubckt sky130_fd_pr__nfet_01v8 13486 1294 13487 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 33000,1066 "w_n8526_7510#" 1000 33000,1066 -device msubckt sky130_fd_pr__nfet_01v8 13220 1294 13221 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "w_n8526_7510#" 1000 33000,1066 "a_12876_1294#" 1000 33000,1066 -device msubckt sky130_fd_pr__nfet_01v8 12954 1294 12955 1295 l=200 w=1000 "a_n9311_n3159#" "a_n7935_n484#" 400 0 "a_12876_1294#" 1000 78000,2156 "w_n8526_7510#" 1000 33000,1066 -device msubckt sky130_fd_pr__nfet_01v8 12470 1294 12471 1295 l=200 w=1000 "a_n9311_n3159#" "a_n9311_n3159#" 400 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2000 78000,2156 -device msubckt sky130_fd_pr__nfet_01v8 8619 1284 8620 1285 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 7935 1284 7936 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 7469 1284 7470 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 7003 1284 7004 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 6537 1284 6538 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 6071 1284 6072 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 5605 1284 5606 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 5139 1284 5140 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 4673 1284 4674 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 3989 1284 3990 1285 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 1424 -356 1425 -355 l=200 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 400 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 940 -356 941 -355 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n1455_n3628#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 674 -356 675 -355 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n1455_n3628#" 1200 39600,1266 "a_n7677_7899#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 408 -356 409 -355 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n1455_n3628#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 142 -356 143 -355 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n1455_n3628#" 1200 93600,2556 "a_n7677_7899#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -342 -356 -341 -355 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n1455_n3628#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -608 -356 -607 -355 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n1455_n3628#" 1200 39600,1266 "a_n2686_12378#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -874 -356 -873 -355 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n1455_n3628#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -1140 -356 -1139 -355 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n1455_n3628#" 1200 93600,2556 "a_n2686_12378#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -1624 -356 -1623 -355 l=200 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 400 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 1424 1638 1425 1639 l=200 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 400 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 940 1638 941 1639 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n1455_n3628#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 674 1638 675 1639 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n1455_n3628#" 1200 39600,1266 "a_n2686_12378#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 408 1638 409 1639 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n1455_n3628#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 142 1638 143 1639 l=200 w=1200 "a_n9311_n3159#" "a_n2148_3925#" 400 0 "a_n1455_n3628#" 1200 93600,2556 "a_n2686_12378#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -342 1638 -341 1639 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n1455_n3628#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -608 1638 -607 1639 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n1455_n3628#" 1200 39600,1266 "a_n7677_7899#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -874 1638 -873 1639 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n1455_n3628#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -1140 1638 -1139 1639 l=200 w=1200 "a_n9311_n3159#" "a_n1140_1442#" 400 0 "a_n1455_n3628#" 1200 93600,2556 "a_n7677_7899#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -1624 1638 -1623 1639 l=200 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 400 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -4389 -484 -4388 -483 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -5073 -484 -5072 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -5539 -484 -5538 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -6005 -484 -6004 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -6471 -484 -6470 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -6937 -484 -6936 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -7403 -484 -7402 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -7869 -484 -7868 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -8335 -484 -8334 -483 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -9019 -484 -9018 -483 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -4389 1284 -4388 1285 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -5073 1284 -5072 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 -5539 1284 -5538 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -6005 1284 -6004 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -6471 1284 -6470 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -6937 1284 -6936 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -7403 1284 -7402 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 39600,1266 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -7869 1284 -7868 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n7935_n484#" 1200 39600,1266 "a_n9311_n3159#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -8335 1284 -8334 1285 l=400 w=1200 "a_n9311_n3159#" "a_n8335_n2966#" 800 0 "a_n9311_n3159#" 1200 93600,2556 "a_n7935_n484#" 1200 39600,1266 -device msubckt sky130_fd_pr__nfet_01v8 -9019 1284 -9018 1285 l=400 w=1200 "a_n9311_n3159#" "a_n9311_n3159#" 800 0 "a_n9311_n3159#" 0 0 "a_n9311_n3159#" 2400 93600,2556 -device msubckt sky130_fd_pr__nfet_01v8 1856 3925 1857 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n1140_1442#" 200 6600,266 "a_n9311_n3159#" 200 15600,556 -device msubckt sky130_fd_pr__nfet_01v8 1690 3925 1691 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n9311_n3159#" 200 6600,266 "a_n1140_1442#" 200 6600,266 -device msubckt sky130_fd_pr__nfet_01v8 1524 3925 1525 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n1140_1442#" 200 6600,266 "a_n9311_n3159#" 200 6600,266 -device msubckt sky130_fd_pr__nfet_01v8 1358 3925 1359 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n9311_n3159#" 200 6600,266 "a_n1140_1442#" 200 6600,266 -device msubckt sky130_fd_pr__nfet_01v8 1192 3925 1193 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n1140_1442#" 200 15600,556 "a_n9311_n3159#" 200 6600,266 -device msubckt sky130_fd_pr__nfet_01v8 -1406 3925 -1405 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n2148_3925#" 200 6600,266 "a_n9311_n3159#" 200 15600,556 -device msubckt sky130_fd_pr__nfet_01v8 -1572 3925 -1571 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n9311_n3159#" 200 6600,266 "a_n2148_3925#" 200 6600,266 -device msubckt sky130_fd_pr__nfet_01v8 -1738 3925 -1737 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n2148_3925#" 200 6600,266 "a_n9311_n3159#" 200 6600,266 -device msubckt sky130_fd_pr__nfet_01v8 -1904 3925 -1903 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n9311_n3159#" 200 6600,266 "a_n2148_3925#" 200 6600,266 -device msubckt sky130_fd_pr__nfet_01v8 -2070 3925 -2069 3926 l=100 w=200 "a_n9311_n3159#" "a_n9311_n3159#" 200 0 "a_n2148_3925#" 200 15600,556 "a_n9311_n3159#" 200 6600,266 -device msubckt sky130_fd_pr__pfet_01v8 7961 8095 7962 8096 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 7477 8095 7478 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 7211 8095 7212 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 6945 8095 6946 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 6679 8095 6680 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 6413 8095 6414 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 6147 8095 6148 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 5881 8095 5882 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 5615 8095 5616 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 5349 8095 5350 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 5083 8095 5084 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 109200,2956 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 4599 8095 4600 8096 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 2892 8022 2893 8023 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 2408 8022 2409 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "a_n2686_12378#" 1200 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 2142 8022 2143 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n2511_10156#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 1876 8022 1877 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "a_n2686_12378#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 1610 8022 1611 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n2511_10156#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 1344 8022 1345 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "a_n2686_12378#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 1078 8022 1079 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_12378#" 1200 93600,2556 "a_n2511_10156#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 594 8022 595 8023 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 -794 8022 -793 8023 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 -1278 8022 -1277 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n2686_8022#" 1200 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 -1544 8022 -1543 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 39600,1266 "a_n7677_7899#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -1810 8022 -1809 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n2686_8022#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -2076 8022 -2075 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 39600,1266 "a_n7677_7899#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -2342 8022 -2341 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n2686_8022#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -2608 8022 -2607 8023 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 93600,2556 "a_n7677_7899#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -3092 8022 -3091 8023 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 -4799 8095 -4798 8096 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 -5283 8095 -5282 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 -5549 8095 -5548 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -5815 8095 -5814 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -6081 8095 -6080 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -6347 8095 -6346 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -6613 8095 -6612 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -6879 8095 -6878 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -7145 8095 -7144 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -7411 8095 -7410 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -7677 8095 -7676 8096 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 109200,2956 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -8161 8095 -8160 8096 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 7961 10064 7962 10065 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 7477 10064 7478 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 7211 10064 7212 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 6945 10064 6946 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 6679 10064 6680 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 6413 10064 6414 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 6147 10064 6148 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 5881 10064 5882 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 5615 10064 5616 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 5349 10064 5350 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 5083 10064 5084 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 109200,2956 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 4599 10064 4600 10065 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 2717 10156 2718 10157 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 2233 10156 2234 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2686_8022#" 1200 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 1967 10156 1968 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 39600,1266 "w_n8526_7510#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 1701 10156 1702 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2686_8022#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 1435 10156 1436 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 93600,2556 "w_n8526_7510#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 1025 10156 1026 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2686_8022#" 1200 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 759 10156 760 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 39600,1266 "w_n8526_7510#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 493 10156 494 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2686_8022#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 227 10156 228 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 93600,2556 "w_n8526_7510#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -427 10156 -426 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2511_10156#" 1200 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 -693 10156 -692 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "w_n8526_7510#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -959 10156 -958 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2511_10156#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -1225 10156 -1224 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 93600,2556 "w_n8526_7510#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -1635 10156 -1634 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2511_10156#" 1200 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 -1901 10156 -1900 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "w_n8526_7510#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -2167 10156 -2166 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "w_n8526_7510#" 1200 39600,1266 "a_n2511_10156#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -2433 10156 -2432 10157 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 93600,2556 "w_n8526_7510#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -2917 10156 -2916 10157 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 -4799 10064 -4798 10065 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 -5283 10064 -5282 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 -5549 10064 -5548 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -5815 10064 -5814 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -6081 10064 -6080 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -6347 10064 -6346 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -6613 10064 -6612 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -6879 10064 -6878 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -7145 10064 -7144 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -7411 10064 -7410 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -7677 10064 -7676 10065 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 109200,2956 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -8161 10064 -8160 10065 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 7961 12033 7962 12034 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 7477 12033 7478 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 7211 12033 7212 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 6945 12033 6946 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 6679 12033 6680 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 6413 12033 6414 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 6147 12033 6148 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 5881 12033 5882 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 5615 12033 5616 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 5349 12033 5350 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 5083 12033 5084 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 109200,2956 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 4599 12033 4600 12034 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 2892 12378 2893 12379 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 2408 12378 2409 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n2686_8022#" 1200 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 2142 12378 2143 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 39600,1266 "a_n7677_7899#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 1876 12378 1877 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n2686_8022#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 1610 12378 1611 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 39600,1266 "a_n7677_7899#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 1344 12378 1345 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n7677_7899#" 1200 39600,1266 "a_n2686_8022#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 1078 12378 1079 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_8022#" 1200 93600,2556 "a_n7677_7899#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 594 12378 595 12379 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 -794 12378 -793 12379 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 -1278 12378 -1277 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "a_n2686_12378#" 1200 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 -1544 12378 -1543 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n2511_10156#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -1810 12378 -1809 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "a_n2686_12378#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -2076 12378 -2075 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_12378#" 1200 39600,1266 "a_n2511_10156#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -2342 12378 -2341 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2511_10156#" 1200 39600,1266 "a_n2686_12378#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -2608 12378 -2607 12379 l=200 w=1200 "w_n8526_7510#" "a_n2686_12378#" 400 0 "a_n2686_12378#" 1200 93600,2556 "a_n2511_10156#" 1200 39600,1266 -device msubckt sky130_fd_pr__pfet_01v8 -3092 12378 -3091 12379 l=200 w=1200 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2400 93600,2556 -device msubckt sky130_fd_pr__pfet_01v8 -4799 12033 -4798 12034 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 -5283 12033 -5282 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 109200,2956 -device msubckt sky130_fd_pr__pfet_01v8 -5549 12033 -5548 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -5815 12033 -5814 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -6081 12033 -6080 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -6347 12033 -6346 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -6613 12033 -6612 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -6879 12033 -6878 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -7145 12033 -7144 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 46200,1466 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -7411 12033 -7410 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "a_n7935_n484#" 1400 46200,1466 "w_n8526_7510#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -7677 12033 -7676 12034 l=200 w=1400 "w_n8526_7510#" "a_n7677_7899#" 400 0 "w_n8526_7510#" 1400 109200,2956 "a_n7935_n484#" 1400 46200,1466 -device msubckt sky130_fd_pr__pfet_01v8 -8161 12033 -8160 12034 l=200 w=1400 "w_n8526_7510#" "w_n8526_7510#" 400 0 "w_n8526_7510#" 0 0 "w_n8526_7510#" 2800 109200,2956 diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/pmos_test.ext b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/pmos_test.ext deleted file mode 100644 index 2f97284af..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/ext/pmos_test.ext +++ /dev/null @@ -1,21 +0,0 @@ -timestamp 0 -version 8.3 -tech sky130A -style ngspice() -scale 1000 1 500000 -resistclasses 4400000 2200000 950000 3050000 120000 197000 114000 191000 120000 197000 114000 191000 48200 319800 2000000 48200 48200 12800 125 125 47 47 29 5 -parameters sky130_fd_pr__pfet_01v8 l=l w=w a1=as p1=ps a2=ad p2=pd -node "a_15_n286#" 1394 49.0976 15 -286 pdif 0 0 0 0 0 0 0 0 0 0 57000 1390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50226 1654 45704 1808 0 0 0 0 0 0 0 0 0 0 -node "a_n110_n286#" 1377 49.4656 -110 -286 pdif 0 0 0 0 0 0 0 0 0 0 57000 1390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44550 1482 45704 1808 0 0 0 0 0 0 0 0 0 0 -node "a_n33_n482#" 1359 36.0697 -33 -482 p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27756 1824 0 0 4356 264 4356 264 0 0 0 0 0 0 0 0 0 0 -node "w_n708_n711#" 18102 7674.99 -708 -711 nw 0 0 0 0 2013552 5676 0 0 397864 9704 228000 5560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50712 3328 0 0 553432 16104 211888 5496 0 0 0 0 0 0 0 0 0 0 -substrate "a_n858_n861#" 0 0 -858 -861 ppd 0 0 0 0 0 0 0 0 0 0 536936 13096 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 462720 12944 281424 7192 0 0 0 0 0 0 0 0 0 0 -cap "a_n110_n286#" "a_15_n286#" 598.904 -cap "w_n708_n711#" "a_15_n286#" 398.469 -cap "a_n33_n482#" "a_15_n286#" 45.5751 -cap "a_n33_n482#" "a_n110_n286#" 55.6978 -cap "w_n708_n711#" "a_n110_n286#" 282.941 -cap "w_n708_n711#" "a_n33_n482#" 283.709 -device msubckt sky130_fd_pr__pfet_01v8 333 -286 334 -285 l=30 w=600 "w_n708_n711#" "w_n708_n711#" 60 0 "w_n708_n711#" 0 0 "w_n708_n711#" 1200 57000,1390 -device msubckt sky130_fd_pr__pfet_01v8 -15 -286 -14 -285 l=30 w=600 "w_n708_n711#" "a_n33_n482#" 60 0 "a_n110_n286#" 600 57000,1390 "a_15_n286#" 600 57000,1390 -device msubckt sky130_fd_pr__pfet_01v8 -363 -286 -362 -285 l=30 w=600 "w_n708_n711#" "w_n708_n711#" 60 0 "w_n708_n711#" 0 0 "w_n708_n711#" 1200 57000,1390 diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test.spice deleted file mode 100644 index 14a6439df..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test.spice +++ /dev/null @@ -1,9 +0,0 @@ -.INCLUDE '/home/chetanya/OpenFASOC/openfasoc/common/platforms/sky130hd/cdl/sky130_fd_sc_hd.spice' -.subckt nmos_test D G S B l=1 w=1 m=1 dm=1 -XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} -XDUMMY1 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} -.ends nmos_test -.subckt diff_test VP VN VDD1 VDD2 VTAIL B -X0 VDD1 VP VTAIL B nmos_test l=None w=3.0 m=4 dm=1 -X1 VDD2 VN VTAIL B nmos_test l=None w=3.0 m=4 dm=1 -.ends diff_test \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_lvsmag.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_lvsmag.spice deleted file mode 100644 index 2a67beab3..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_lvsmag.spice +++ /dev/null @@ -1,25 +0,0 @@ -* NGSPICE file created from diff_test.ext - technology: sky130A - -.subckt diff_test -X0 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X1 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X2 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=11.4 ps=55.6 w=3 l=0.15 -X3 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 -X4 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 -X5 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 -X6 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X7 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 -X8 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 -X9 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 -X10 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X11 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 -X12 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X13 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 -X14 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 -X15 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 -X16 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 -X17 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X18 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X19 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -.ends - diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_pex.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_pex.spice deleted file mode 100644 index 4f43fc5af..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_pex.spice +++ /dev/null @@ -1,40 +0,0 @@ -* NGSPICE file created from diff_test.ext - technology: sky130A - -.subckt diff_test -X0 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X1 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X2 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=11.4 ps=55.6 w=3 l=0.15 -X3 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 -X4 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 -X5 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 -X6 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X7 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 -X8 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 -X9 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 -X10 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X11 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 -X12 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X13 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 -X14 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 -X15 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 -X16 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 -X17 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X18 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X19 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -C0 a_n579_201# a_n579_n1047# 3.16374f -C1 a_n549_n997# a_n674_n997# 5.61466f -C2 a_n549_397# a_n674_n997# 5.57563f -C3 a_n549_n997# a_n549_397# 0.641247f -C4 a_n674_n997# a_n579_n1047# 0.751816f -C5 a_n549_n997# a_n579_n1047# 0.803013f -C6 a_n579_201# a_n674_n997# 0.765855f -C7 a_n549_n997# a_n579_201# 0.287679f -C8 a_n549_397# a_n579_n1047# 0.157927f -C9 a_n579_201# a_n549_397# 0.932267f -C10 a_n549_n997# a_n1366_n1488# 2.02549f -C11 a_n549_397# a_n1366_n1488# 2.19698f -C12 a_n674_n997# a_n1366_n1488# 3.42969f -C13 a_n579_n1047# a_n1366_n1488# 4.21568f -C14 a_n579_201# a_n1366_n1488# 4.0956f -.ends - diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_sim.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_sim.spice deleted file mode 100644 index 4bb609d2f..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/diff_test_sim.spice +++ /dev/null @@ -1,40 +0,0 @@ -* NGSPICE file created from diff_test.ext - technology: sky130A - -.subckt diff_test -X0 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X1 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X2 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=11.4 ps=55.6 w=3 l=0.15 -X3 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 -X4 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 -X5 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 -X6 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X7 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 -X8 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 -X9 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 -X10 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X11 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0.75 ps=3.5 w=3 l=0.15 -X12 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X13 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 -X14 a_n549_n997# a_n579_n1047# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=1.425 ps=6.95 w=3 l=0.15 -X15 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 -X16 a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 -X17 a_n674_n997# a_n579_201# a_n549_397# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X18 a_n549_397# a_n579_201# a_n674_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -X19 a_n674_n997# a_n579_n1047# a_n549_n997# a_n1366_n1488# sky130_fd_pr__nfet_01v8 ad=0.75 pd=3.5 as=0.75 ps=3.5 w=3 l=0.15 -C0 a_n579_n1047# a_n549_397# 0.157927f -C1 a_n674_n997# a_n549_n997# 5.61466f -C2 a_n579_201# a_n674_n997# 0.765855f -C3 a_n579_n1047# a_n549_n997# 0.803013f -C4 a_n579_n1047# a_n579_201# 3.16374f -C5 a_n549_397# a_n549_n997# 0.641247f -C6 a_n579_201# a_n549_397# 0.932267f -C7 a_n579_201# a_n549_n997# 0.287679f -C8 a_n579_n1047# a_n674_n997# 0.751816f -C9 a_n674_n997# a_n549_397# 5.57563f -C10 a_n549_n997# a_n1366_n1488# 2.02549f -C11 a_n549_397# a_n1366_n1488# 2.19698f -C12 a_n674_n997# a_n1366_n1488# 3.42969f -C13 a_n579_n1047# a_n1366_n1488# 4.21568f -C14 a_n579_201# a_n1366_n1488# 4.0956f -.ends - diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test.spice deleted file mode 100644 index 2d2c90ac9..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test.spice +++ /dev/null @@ -1,6 +0,0 @@ -.INCLUDE '/home/chetanya/OpenFASOC/openfasoc/common/platforms/sky130hd/cdl/sky130_fd_sc_hd.spice' -.subckt nmos_test D G S B l=1 w=1 m=1 dm=1 -XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} -XDUMMY1 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} -XDUMMY2 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} -.ends nmos_test \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_lvsmag.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_lvsmag.spice deleted file mode 100644 index 1507f8eb5..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_lvsmag.spice +++ /dev/null @@ -1,8 +0,0 @@ -* NGSPICE file created from nmos_test.ext - technology: sky130A - -.subckt nmos_test -X0 w_n734_n737# w_n734_n737# w_n734_n737# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=5.7 ps=27.8 w=3 l=0.15 -X1 a_15_n286# a_n33_n482# a_n110_n286# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=1.425 ps=6.95 w=3 l=0.15 -X2 w_n734_n737# w_n734_n737# w_n734_n737# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 -.ends - diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_pex.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_pex.spice deleted file mode 100644 index 6415c17ea..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_pex.spice +++ /dev/null @@ -1,20 +0,0 @@ -* NGSPICE file created from nmos_test.ext - technology: sky130A - -.subckt nmos_test -X0 w_n734_n737# w_n734_n737# w_n734_n737# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=5.7 ps=27.8 w=3 l=0.15 -X1 a_15_n286# a_n33_n482# a_n110_n286# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=1.425 ps=6.95 w=3 l=0.15 -X2 w_n734_n737# w_n734_n737# w_n734_n737# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 -C0 a_n110_n286# w_n734_n737# 0.283328f -C1 dw_n734_n737# w_n734_n737# 6.4915f -C2 a_15_n286# a_n33_n482# 0.045575f -C3 a_n110_n286# a_n33_n482# 0.055698f -C4 a_15_n286# a_n110_n286# 0.598904f -C5 a_n33_n482# w_n734_n737# 0.279309f -C6 a_15_n286# w_n734_n737# 0.387693f -C7 a_15_n286# a_n884_n887# 0.047764f -C8 a_n110_n286# a_n884_n887# 0.048094f -C9 a_n33_n482# a_n884_n887# 0.035076f -C10 w_n734_n737# a_n884_n887# 2.05305f -C11 dw_n734_n737# a_n884_n887# 6.4915f $ **FLOATING -.ends - diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_sim.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_sim.spice deleted file mode 100644 index 821982a79..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/nmos_test_sim.spice +++ /dev/null @@ -1,20 +0,0 @@ -* NGSPICE file created from nmos_test.ext - technology: sky130A - -.subckt nmos_test -X0 w_n734_n737# w_n734_n737# w_n734_n737# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=5.7 ps=27.8 w=3 l=0.15 -X1 a_15_n286# a_n33_n482# a_n110_n286# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=1.425 ps=6.95 w=3 l=0.15 -X2 w_n734_n737# w_n734_n737# w_n734_n737# w_n734_n737# sky130_fd_pr__nfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 -C0 a_n33_n482# a_n110_n286# 0.055698f -C1 w_n734_n737# a_n110_n286# 0.283328f -C2 a_n33_n482# a_15_n286# 0.045575f -C3 w_n734_n737# a_15_n286# 0.387693f -C4 w_n734_n737# dw_n734_n737# 6.4915f -C5 a_n110_n286# a_15_n286# 0.598904f -C6 w_n734_n737# a_n33_n482# 0.279309f -C7 a_15_n286# a_n884_n887# 0.047764f -C8 a_n110_n286# a_n884_n887# 0.048094f -C9 a_n33_n482# a_n884_n887# 0.035076f -C10 w_n734_n737# a_n884_n887# 2.05305f -C11 dw_n734_n737# a_n884_n887# 6.4915f $ **FLOATING -.ends - diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test.spice deleted file mode 100644 index b4482f919..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test.spice +++ /dev/null @@ -1,71 +0,0 @@ -.INCLUDE '/home/chetanya/OpenFASOC/openfasoc/common/platforms/sky130hd/cdl/sky130_fd_sc_hd.spice' -.subckt nmos_test D G S B l=1 w=1 m=1 dm=1 -XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} -XDUMMY1 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} -.ends nmos_test -.subckt diff_test VP VN VDD1 VDD2 VTAIL B -X0 VDD1 VP VTAIL B nmos_test l=1.0 w=6.0 m=4 dm=1 -X1 VDD2 VN VTAIL B nmos_test l=1.0 w=6.0 m=4 dm=1 -.ends diff_test -.subckt CURRENT_MIRROR VREF VCOPY VSS l=1 w=1 m=1 -XREF VREF VREF VSS VSS sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} -XCOPY VCOPY VREF VSS VSS sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} -.ends CURRENT_MIRROR -.subckt NMOS_1 D G S B l=1 w=1 m=1 dm=1 -XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} -.ends NMOS_1 -.subckt INPUT_STAGE VP VN VDD1 VDD2 IBIAS VSS B -X0 VP VN VDD1 VDD2 wire0 B diff_test -X1 IBIAS wire0 VSS CURRENT_MIRROR l=2.0 w=6.0 m=4 -X2 VSS VSS VP VSS NMOS_1 l=0.5 w=1.0 m=5 dm=1 -X3 VSS VSS VN VSS NMOS_1 l=0.5 w=1.0 m=5 dm=1 -.ends INPUT_STAGE -.subckt DIFF_TO_SINGLE VOUT VSS VSS2 l=1 w=1 mt=1 mb=1 -XTOP1 V1 r_VIN VSS VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mt} -XTOP2 VSS2 r_VIN VSS VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mt} -XBOT1 r_VIN r_VIN V1 VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mb} -XBOT2 VOUT r_VIN VSS2 VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mb} -.ends DIFF_TO_SINGLE -.subckt pmos_test D G S B l=1 w=1 m=1 dm=1 -XMAIN D G S B sky130_fd_pr__pfet_01v8 l={l} w={w} m={m} -XDUMMY1 B B B B sky130_fd_pr__pfet_01v8 l={l} w={w} m={dm} -XDUMMY2 B B B B sky130_fd_pr__pfet_01v8 l={l} w={w} m={dm} -.ends pmos_test -.subckt DIFF_TO_SINGLE_CS r_VIN 1 r_VIN 2 VOUT VSS VSS2 -X0 r_VIN 1 r_VIN 2 VSS VSS2 DIFF_TO_SINGLE l=1 w=6 mt=8 mb=12 -X1 VOUT r_VIN 2 VSS VSS pmos_test l=1.0 w=7.0 m=30 dm=3 -X2 VOUT r_VIN 2 VSS VSS pmos_test l=1.0 w=7.0 m=30 dm=3 -.ends DIFF_TO_SINGLE_CS -.subckt MIMCap V1 V2 l=1 w=1 -X1 V1 V2 sky130_fd_pr__cap_mim_m3_1 l={l} w={w} -.ends MIMCap -.subckt MIMCAP_ARR V1 V2 -X0 V1 V2 MIMCap l=12.0 w=12.0 -X1 V1 V2 MIMCap l=12.0 w=12.0 -X2 V1 V2 MIMCap l=12.0 w=12.0 -X3 V1 V2 MIMCap l=12.0 w=12.0 -X4 V1 V2 MIMCap l=12.0 w=12.0 -X5 V1 V2 MIMCap l=12.0 w=12.0 -.ends MIMCAP_ARR -.subckt GAIN_STAGE r_VIN 1 r_VIN 2 VOUT VDD IBIAS GND -X0 r_VIN 1 r_VIN 2 VOUT VDD wire0 DIFF_TO_SINGLE_CS -X1 IBIAS VOUT GND CURRENT_MIRROR l=2 w=6 m=4 -X2 wire0 VOUT MIMCAP_ARR -.ends GAIN_STAGE -.subckt OPAMP_TWO_STAGE VDD GND DIFFPAIR_BIAS VP VN CS_BIAS VOUT -X0 VP VN wire0 wire1 DIFFPAIR_BIAS GND GND INPUT_STAGE -X1 wire0 wire1 VOUT VDD CS_BIAS GND GAIN_STAGE -.ends OPAMP_TWO_STAGE -.subckt NMOS_2 D G S B l=1 w=1 m=1 dm=1 -XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} -XDUMMY1 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} -XDUMMY2 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} -.ends NMOS_2 -.subckt OUTPUT_STAGE VDD GND IBIAS r_VIN VOUT -X0 VDD r_VIN VOUT GND NMOS_2 l=1.0 w=5.0 m=16 dm=1 -X1 IBIAS VOUT GND CURRENT_MIRROR l=2 w=6 m=4 -.ends OUTPUT_STAGE -.subckt opamp_test CSoutput vdd plus minus commonsourceibias outputibias diffpairibias gnd output -X0 vdd gnd diffpairibias plus minus commonsourceibias CSoutput OPAMP_TWO_STAGE -X1 vdd gnd outputibias CSoutput output OUTPUT_STAGE -.ends opamp_test \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_lvsmag.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_lvsmag.spice deleted file mode 100644 index 634226e1b..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_lvsmag.spice +++ /dev/null @@ -1,261 +0,0 @@ -* NGSPICE file created from opamp_test.ext - technology: sky130A - -.subckt opamp_test -X0 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X1 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X2 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X3 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=216.36 ps=1.2408k w=7 l=1 -X4 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X5 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X6 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X7 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X8 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X9 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X10 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X11 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X12 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X13 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X14 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X15 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X16 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X17 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X18 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X19 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X20 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X21 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X22 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X23 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X24 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X25 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X26 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X27 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X28 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X29 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X30 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X31 a_n1140_1442# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X32 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=204.66 ps=1.15624k w=6 l=2 -X33 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X34 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X35 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X36 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.39 pd=2.78 as=0.165 ps=1.33 w=1 l=0.5 -X37 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X38 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X39 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X40 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X41 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X42 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X43 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X44 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X45 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X46 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X47 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X48 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X49 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X50 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X51 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X52 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0.825 ps=5.33 w=5 l=1 -X53 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X54 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X55 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X56 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.39 ps=2.78 w=1 l=0.5 -X57 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X58 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X59 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X60 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X61 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X62 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X63 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X64 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X65 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X66 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=1.95 ps=10.78 w=5 l=1 -X67 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X68 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X69 a_n1140_1442# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X70 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X71 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X72 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X73 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X74 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X75 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X76 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X77 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X78 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X79 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X80 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X81 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X82 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X83 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X84 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X85 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X86 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X87 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X88 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X89 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X90 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X91 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X92 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X93 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X94 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X95 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X96 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X97 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X98 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X99 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X100 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X101 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X102 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X103 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X104 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X105 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X106 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X107 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X108 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X109 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.39 pd=2.78 as=0.165 ps=1.33 w=1 l=0.5 -X110 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X111 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X112 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X113 a_n2148_3925# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X114 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X115 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X116 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X117 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X118 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X119 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X120 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X121 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X122 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X123 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X124 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X125 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X126 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X127 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X128 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X129 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X130 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X131 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X132 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X133 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X134 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X135 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X136 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X137 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X138 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X139 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X140 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X141 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X142 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X143 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X144 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X145 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X146 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X147 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X148 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X149 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X150 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X151 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X152 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X153 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X154 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X155 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X156 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X157 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X158 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X159 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X160 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X161 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X162 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X163 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X164 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X165 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X166 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X167 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X168 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X169 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X170 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X171 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X172 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X173 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X174 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X175 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X176 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X177 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X178 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X179 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X180 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X181 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X182 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X183 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X184 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X185 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X186 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X187 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X188 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X189 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X190 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X191 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X192 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X193 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X194 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X195 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X196 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X197 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X198 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X199 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X200 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X201 a_n2148_3925# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X202 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X203 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X204 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X205 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X206 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X207 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X208 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X209 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X210 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X211 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X212 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X213 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X214 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X215 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X216 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X217 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X218 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X219 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X220 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X221 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X222 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X223 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X224 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0 ps=0 w=5 l=1 -X225 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0 ps=0 w=5 l=1 -X226 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X227 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X228 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X229 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X230 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X231 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X232 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X233 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X234 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X235 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X236 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X237 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X238 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X239 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X240 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X241 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.39 ps=2.78 w=1 l=0.5 -X242 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X243 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X244 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X245 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X246 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X247 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X248 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X249 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X250 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X251 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X252 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X253 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X254 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X255 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -.ends - diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_pex.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_pex.spice deleted file mode 100644 index 0d0413686..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_pex.spice +++ /dev/null @@ -1,320 +0,0 @@ -* NGSPICE file created from opamp_test.ext - technology: sky130A - -.subckt opamp_test -X0 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X1 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X2 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X3 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=216.36 ps=1.2408k w=7 l=1 -X4 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X5 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X6 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X7 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X8 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X9 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X10 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X11 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X12 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X13 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X14 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X15 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X16 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X17 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X18 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X19 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X20 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X21 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X22 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X23 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X24 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X25 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X26 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X27 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X28 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X29 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X30 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X31 a_n1140_1442# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X32 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=204.66 ps=1.15624k w=6 l=2 -X33 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X34 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X35 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X36 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.39 pd=2.78 as=0.165 ps=1.33 w=1 l=0.5 -X37 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X38 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X39 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X40 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X41 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X42 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X43 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X44 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X45 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X46 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X47 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X48 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X49 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X50 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X51 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X52 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0.825 ps=5.33 w=5 l=1 -X53 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X54 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X55 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X56 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.39 ps=2.78 w=1 l=0.5 -X57 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X58 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X59 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X60 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X61 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X62 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X63 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X64 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X65 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X66 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=1.95 ps=10.78 w=5 l=1 -X67 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X68 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X69 a_n1140_1442# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X70 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X71 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X72 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X73 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X74 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X75 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X76 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X77 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X78 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X79 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X80 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X81 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X82 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X83 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X84 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X85 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X86 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X87 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X88 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X89 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X90 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X91 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X92 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X93 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X94 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X95 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X96 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X97 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X98 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X99 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X100 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X101 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X102 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X103 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X104 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X105 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X106 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X107 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X108 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X109 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.39 pd=2.78 as=0.165 ps=1.33 w=1 l=0.5 -X110 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X111 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X112 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X113 a_n2148_3925# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X114 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X115 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X116 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X117 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X118 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X119 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X120 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X121 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X122 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X123 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X124 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X125 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X126 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X127 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X128 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X129 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X130 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X131 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X132 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X133 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X134 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X135 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X136 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X137 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X138 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X139 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X140 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X141 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X142 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X143 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X144 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X145 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X146 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X147 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X148 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X149 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X150 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X151 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X152 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X153 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X154 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X155 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X156 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X157 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X158 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X159 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X160 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X161 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X162 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X163 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X164 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X165 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X166 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X167 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X168 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X169 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X170 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X171 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X172 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X173 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X174 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X175 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X176 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X177 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X178 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X179 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X180 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X181 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X182 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X183 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X184 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X185 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X186 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X187 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X188 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X189 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X190 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X191 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X192 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X193 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X194 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X195 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X196 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X197 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X198 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X199 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X200 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X201 a_n2148_3925# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X202 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X203 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X204 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X205 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X206 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X207 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X208 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X209 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X210 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X211 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X212 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X213 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X214 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X215 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X216 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X217 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X218 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X219 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X220 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X221 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X222 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X223 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X224 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0 ps=0 w=5 l=1 -X225 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0 ps=0 w=5 l=1 -X226 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X227 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X228 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X229 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X230 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X231 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X232 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X233 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X234 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X235 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X236 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X237 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X238 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X239 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X240 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X241 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.39 ps=2.78 w=1 l=0.5 -X242 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X243 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X244 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X245 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X246 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X247 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X248 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X249 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X250 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X251 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X252 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X253 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X254 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X255 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -C0 a_13154_n1884# a_12876_1294# 2.32624f -C1 a_n8335_n2966# a_13154_n1884# 0.003517f -C2 a_n2686_12378# a_n2517_n3844# 3.07e-19 -C3 a_n1140_1442# a_n7677_7899# 4.35499f -C4 a_n8335_n2966# a_n2686_12378# 0.395315f -C5 a_n1455_n3628# a_n2686_12378# 6.63249f -C6 a_n7935_n484# a_n2686_8022# 80.9074f -C7 a_n7935_n484# a_13154_n1884# 0.031857f -C8 w_n8526_7510# a_n2511_10156# 11.8465f -C9 a_n2686_12378# a_n7935_n484# 0.377983f -C10 a_n2148_3925# a_n2686_12378# 3.61638f -C11 a_n7677_7899# a_n2686_8022# 8.3313f -C12 w_n8526_7510# a_12876_1294# 7.233911f -C13 a_n8335_n2966# w_n8526_7510# 0.004218f -C14 a_n2686_12378# a_n7677_7899# 8.79577f -C15 w_n8526_7510# a_n7935_n484# 61.8363f -C16 a_n7935_n484# a_n2511_10156# 0.001393f -C17 a_n8335_n2966# a_12876_1294# 0.006808f -C18 a_n8335_n2966# a_n2517_n3844# 0.008433f -C19 a_n1455_n3628# a_n2517_n3844# 2.20349f -C20 w_n8526_7510# a_n7677_7899# 65.7903f -C21 a_n8335_n2966# a_n1455_n3628# 0.002987f -C22 a_n7935_n484# a_12876_1294# 6.13428f -C23 a_n2148_3925# a_n2517_n3844# 8.31e-20 -C24 a_n8335_n2966# a_n7935_n484# 23.9697f -C25 a_n8335_n2966# a_n2148_3925# 0.306594f -C26 a_n7677_7899# a_n2511_10156# 1.33823f -C27 a_n1455_n3628# a_n2148_3925# 3.69633f -C28 a_n1140_1442# a_n2686_12378# 0.777962f -C29 a_n2148_3925# a_n7935_n484# 2.74686f -C30 a_n7677_7899# a_n2517_n3844# 0.001258f -C31 a_n8335_n2966# a_n7677_7899# 0.395315f -C32 a_n1455_n3628# a_n7677_7899# 6.68451f -C33 a_n2686_12378# a_n2686_8022# 11.3831f -C34 a_n7935_n484# a_n7677_7899# 30.7558f -C35 a_n2148_3925# a_n7677_7899# 0.286692f -C36 w_n8526_7510# a_n1140_1442# 0.073825f -C37 w_n8526_7510# a_n2686_8022# 37.1623f -C38 a_n1140_1442# a_n2517_n3844# 8.31e-20 -C39 a_n8335_n2966# a_n1140_1442# 0.266289f -C40 a_n1140_1442# a_n1455_n3628# 3.70896f -C41 w_n8526_7510# a_n2686_12378# 34.3645f -C42 a_n2511_10156# a_n2686_8022# 1.62135f -C43 a_n1140_1442# a_n7935_n484# 0.804612f -C44 a_n1140_1442# a_n2148_3925# 7.84338f -C45 a_n2686_12378# a_n2511_10156# 17.2491f -C46 a_n2517_n3844# a_n9311_n3159# 30.4089f -C47 a_13154_n1884# a_n9311_n3159# 30.131899f -C48 a_12876_1294# a_n9311_n3159# 13.8096f -C49 a_n1455_n3628# a_n9311_n3159# 16.057001f -C50 a_n8335_n2966# a_n9311_n3159# 0.109473p -C51 a_n1140_1442# a_n9311_n3159# 17.9088f -C52 a_n2148_3925# a_n9311_n3159# 15.1913f -C53 a_n2686_8022# a_n9311_n3159# 18.0352f -C54 a_n2511_10156# a_n9311_n3159# 0.597469f -C55 a_n2686_12378# a_n9311_n3159# 10.244599f -C56 a_n7935_n484# a_n9311_n3159# 72.983795f -C57 a_n7677_7899# a_n9311_n3159# 20.2068f -C58 w_n8526_7510# a_n9311_n3159# 0.351129p -.ends - diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_sim.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_sim.spice deleted file mode 100644 index 5fcacf89a..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/opamp_test_sim.spice +++ /dev/null @@ -1,320 +0,0 @@ -* NGSPICE file created from opamp_test.ext - technology: sky130A - -.subckt opamp_test -X0 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X1 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X2 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X3 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=216.36 ps=1.2408k w=7 l=1 -X4 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X5 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X6 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X7 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X8 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X9 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X10 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X11 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X12 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X13 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X14 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X15 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X16 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X17 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X18 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X19 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X20 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X21 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X22 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X23 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X24 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X25 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X26 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X27 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X28 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X29 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X30 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X31 a_n1140_1442# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X32 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=204.66 ps=1.15624k w=6 l=2 -X33 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X34 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X35 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X36 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.39 pd=2.78 as=0.165 ps=1.33 w=1 l=0.5 -X37 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X38 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X39 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X40 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X41 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X42 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X43 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X44 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X45 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X46 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X47 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X48 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X49 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X50 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X51 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X52 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0.825 ps=5.33 w=5 l=1 -X53 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X54 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X55 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X56 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.39 ps=2.78 w=1 l=0.5 -X57 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X58 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X59 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X60 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X61 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X62 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X63 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X64 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X65 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X66 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=1.95 ps=10.78 w=5 l=1 -X67 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X68 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X69 a_n1140_1442# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X70 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X71 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X72 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X73 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X74 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X75 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X76 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X77 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X78 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X79 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X80 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X81 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X82 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X83 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X84 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X85 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X86 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X87 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X88 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X89 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X90 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X91 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X92 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X93 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X94 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X95 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X96 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X97 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X98 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X99 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X100 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X101 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X102 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X103 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X104 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X105 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X106 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X107 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X108 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X109 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.39 pd=2.78 as=0.165 ps=1.33 w=1 l=0.5 -X110 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X111 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X112 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X113 a_n2148_3925# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X114 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X115 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X116 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X117 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X118 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X119 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X120 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X121 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X122 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X123 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X124 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X125 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X126 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X127 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X128 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X129 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X130 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X131 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X132 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X133 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X134 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X135 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X136 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X137 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X138 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X139 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X140 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X141 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X142 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X143 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X144 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X145 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X146 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X147 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X148 a_13154_n1884# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X149 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X150 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X151 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X152 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X153 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X154 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X155 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X156 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X157 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X158 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X159 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X160 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X161 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X162 a_n7677_7899# a_n1140_1442# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X163 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X164 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X165 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X166 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X167 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X168 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X169 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X170 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X171 a_n2686_8022# a_n2686_12378# a_n7677_7899# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X172 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X173 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X174 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X175 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X176 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X177 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X178 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=2 -X179 a_n1455_n3628# a_n2148_3925# a_n2686_12378# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X180 w_n8526_7510# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X181 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X182 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X183 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X184 a_n1455_n3628# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X185 a_n2686_8022# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X186 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X187 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X188 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X189 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X190 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X191 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X192 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X193 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0.99 ps=6.33 w=6 l=1 -X194 a_n7677_7899# a_n2686_12378# a_n2686_8022# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X195 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X196 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X197 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X198 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X199 a_n9311_n3159# a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X200 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X201 a_n2148_3925# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X202 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X203 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X204 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X205 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X206 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X207 a_n2686_12378# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X208 a_n2517_n3844# a_n2517_n3844# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X209 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X210 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X211 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X212 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=2 -X213 w_n8526_7510# a_n2686_12378# a_n2511_10156# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X214 a_n7935_n484# a_n2686_8022# sky130_fd_pr__cap_mim_m3_1 l=12 w=12 -X215 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X216 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X217 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X218 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X219 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X220 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X221 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X222 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X223 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X224 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0 ps=0 w=5 l=1 -X225 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=1.95 pd=10.78 as=0 ps=0 w=5 l=1 -X226 a_n2511_10156# a_n2686_12378# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X227 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=1.155 ps=7.33 w=7 l=1 -X228 a_12876_1294# a_13154_n1884# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=2.34 ps=12.78 w=6 l=2 -X229 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X230 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X231 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X232 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X233 a_n7935_n484# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X234 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X235 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X236 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X237 w_n8526_7510# a_n7677_7899# a_n7935_n484# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X238 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -X239 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X240 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X241 a_n9311_n3159# a_n9311_n3159# a_n1140_1442# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.39 ps=2.78 w=1 l=0.5 -X242 a_n9311_n3159# a_n8335_n2966# a_n7935_n484# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X243 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X244 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.73 pd=14.78 as=0 ps=0 w=7 l=1 -X245 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=1.155 ps=7.33 w=7 l=1 -X246 a_n2511_10156# a_n2686_12378# a_n2686_12378# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=0.99 pd=6.33 as=2.34 ps=12.78 w=6 l=1 -X247 a_n1455_n3628# a_n1140_1442# a_n7677_7899# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X248 w_n8526_7510# w_n8526_7510# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=1 -X249 a_n2686_12378# a_n2148_3925# a_n1455_n3628# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=1 -X250 a_n8335_n2966# a_n8335_n2966# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.99 pd=6.33 as=0.99 ps=6.33 w=6 l=2 -X251 w_n8526_7510# a_n7935_n484# a_12876_1294# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X252 a_12876_1294# a_n7935_n484# w_n8526_7510# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.825 pd=5.33 as=0.825 ps=5.33 w=5 l=1 -X253 a_n7935_n484# a_n7677_7899# w_n8526_7510# w_n8526_7510# sky130_fd_pr__pfet_01v8 ad=1.155 pd=7.33 as=2.73 ps=14.78 w=7 l=1 -X254 a_n9311_n3159# a_n9311_n3159# a_n2148_3925# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=0.165 pd=1.33 as=0.165 ps=1.33 w=1 l=0.5 -X255 a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# a_n9311_n3159# sky130_fd_pr__nfet_01v8 ad=2.34 pd=12.78 as=0 ps=0 w=6 l=2 -C0 a_12876_1294# a_n7935_n484# 6.13428f -C1 a_n1455_n3628# a_n2686_12378# 6.63249f -C2 a_n2517_n3844# a_n1140_1442# 8.31e-20 -C3 w_n8526_7510# a_n1140_1442# 0.073825f -C4 a_n7677_7899# a_n2686_12378# 8.79577f -C5 a_n2148_3925# a_n1140_1442# 7.84338f -C6 a_n1455_n3628# a_n2517_n3844# 2.20349f -C7 a_12876_1294# a_13154_n1884# 2.32624f -C8 a_n1455_n3628# a_n2148_3925# 3.69633f -C9 a_n2686_8022# a_n7935_n484# 80.9074f -C10 a_n7677_7899# a_n2517_n3844# 0.001258f -C11 a_n7677_7899# w_n8526_7510# 65.7903f -C12 a_n2148_3925# a_n7677_7899# 0.286692f -C13 a_12876_1294# w_n8526_7510# 7.233911f -C14 a_n2686_8022# a_n2686_12378# 11.3831f -C15 a_n2511_10156# a_n7935_n484# 0.001393f -C16 w_n8526_7510# a_n2686_8022# 37.1623f -C17 a_n8335_n2966# a_n7935_n484# 23.9697f -C18 a_n1455_n3628# a_n1140_1442# 3.70896f -C19 a_n7677_7899# a_n1140_1442# 4.35499f -C20 a_n2511_10156# a_n2686_12378# 17.2491f -C21 a_n2686_12378# a_n8335_n2966# 0.395315f -C22 a_n1455_n3628# a_n7677_7899# 6.68451f -C23 a_13154_n1884# a_n8335_n2966# 0.003517f -C24 a_n2511_10156# w_n8526_7510# 11.8465f -C25 w_n8526_7510# a_n8335_n2966# 0.004218f -C26 a_n2517_n3844# a_n8335_n2966# 0.008433f -C27 a_n2148_3925# a_n8335_n2966# 0.306594f -C28 a_n2686_12378# a_n7935_n484# 0.377983f -C29 a_13154_n1884# a_n7935_n484# 0.031857f -C30 a_n7677_7899# a_n2686_8022# 8.3313f -C31 w_n8526_7510# a_n7935_n484# 61.8363f -C32 a_n2148_3925# a_n7935_n484# 2.74686f -C33 a_n2517_n3844# a_n2686_12378# 3.07e-19 -C34 w_n8526_7510# a_n2686_12378# 34.3645f -C35 a_n1140_1442# a_n8335_n2966# 0.266289f -C36 a_n2148_3925# a_n2686_12378# 3.61638f -C37 a_n2511_10156# a_n7677_7899# 1.33823f -C38 a_n1455_n3628# a_n8335_n2966# 0.002987f -C39 a_n7677_7899# a_n8335_n2966# 0.395315f -C40 a_n2148_3925# a_n2517_n3844# 8.31e-20 -C41 a_n1140_1442# a_n7935_n484# 0.804612f -C42 a_12876_1294# a_n8335_n2966# 0.006808f -C43 a_n2511_10156# a_n2686_8022# 1.62135f -C44 a_n7677_7899# a_n7935_n484# 30.7558f -C45 a_n1140_1442# a_n2686_12378# 0.777962f -C46 a_n2517_n3844# a_n9311_n3159# 30.4089f -C47 a_13154_n1884# a_n9311_n3159# 30.131899f -C48 a_12876_1294# a_n9311_n3159# 13.8096f -C49 a_n1455_n3628# a_n9311_n3159# 16.057001f -C50 a_n8335_n2966# a_n9311_n3159# 0.109473p -C51 a_n1140_1442# a_n9311_n3159# 17.9088f -C52 a_n2148_3925# a_n9311_n3159# 15.1913f -C53 a_n2686_8022# a_n9311_n3159# 18.0352f -C54 a_n2511_10156# a_n9311_n3159# 0.597469f -C55 a_n2686_12378# a_n9311_n3159# 10.244599f -C56 a_n7935_n484# a_n9311_n3159# 72.983795f -C57 a_n7677_7899# a_n9311_n3159# 20.2068f -C58 w_n8526_7510# a_n9311_n3159# 0.351129p -.ends - diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test.spice deleted file mode 100644 index 19557eaf8..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test.spice +++ /dev/null @@ -1,6 +0,0 @@ -.INCLUDE '/home/chetanya/OpenFASOC/openfasoc/common/platforms/sky130hd/cdl/sky130_fd_sc_hd.spice' -.subckt pmos_test D G S B l=1 w=1 m=1 dm=1 -XMAIN D G S B sky130_fd_pr__pfet_01v8 l={l} w={w} m={m} -XDUMMY1 B B B B sky130_fd_pr__pfet_01v8 l={l} w={w} m={dm} -XDUMMY2 B B B B sky130_fd_pr__pfet_01v8 l={l} w={w} m={dm} -.ends pmos_test \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_lvsmag.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_lvsmag.spice deleted file mode 100644 index bc1786e20..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_lvsmag.spice +++ /dev/null @@ -1,8 +0,0 @@ -* NGSPICE file created from pmos_test.ext - technology: sky130A - -.subckt pmos_test -X0 w_n708_n711# w_n708_n711# w_n708_n711# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=5.7 ps=27.8 w=3 l=0.15 -X1 a_15_n286# a_n33_n482# a_n110_n286# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=1.425 ps=6.95 w=3 l=0.15 -X2 w_n708_n711# w_n708_n711# w_n708_n711# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 -.ends - diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_pex.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_pex.spice deleted file mode 100644 index d4096090e..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_pex.spice +++ /dev/null @@ -1,18 +0,0 @@ -* NGSPICE file created from pmos_test.ext - technology: sky130A - -.subckt pmos_test -X0 w_n708_n711# w_n708_n711# w_n708_n711# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=5.7 ps=27.8 w=3 l=0.15 -X1 a_15_n286# a_n33_n482# a_n110_n286# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=1.425 ps=6.95 w=3 l=0.15 -X2 w_n708_n711# w_n708_n711# w_n708_n711# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 -C0 a_15_n286# w_n708_n711# 0.398469f -C1 a_n110_n286# a_15_n286# 0.598904f -C2 a_n33_n482# a_15_n286# 0.045575f -C3 a_n110_n286# w_n708_n711# 0.282941f -C4 a_n33_n482# w_n708_n711# 0.283709f -C5 a_n33_n482# a_n110_n286# 0.055698f -C6 a_15_n286# a_n858_n861# 0.049098f -C7 a_n110_n286# a_n858_n861# 0.049466f -C8 a_n33_n482# a_n858_n861# 0.03607f -C9 w_n708_n711# a_n858_n861# 7.67499f -.ends - diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_sim.spice b/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_sim.spice deleted file mode 100644 index 4acf37c58..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/objects/sky130hd/glayout/netgen_lvs/spice/pmos_test_sim.spice +++ /dev/null @@ -1,18 +0,0 @@ -* NGSPICE file created from pmos_test.ext - technology: sky130A - -.subckt pmos_test -X0 w_n708_n711# w_n708_n711# w_n708_n711# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=5.7 ps=27.8 w=3 l=0.15 -X1 a_15_n286# a_n33_n482# a_n110_n286# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=1.425 ps=6.95 w=3 l=0.15 -X2 w_n708_n711# w_n708_n711# w_n708_n711# w_n708_n711# sky130_fd_pr__pfet_01v8 ad=1.425 pd=6.95 as=0 ps=0 w=3 l=0.15 -C0 w_n708_n711# a_15_n286# 0.398469f -C1 a_15_n286# a_n33_n482# 0.045575f -C2 w_n708_n711# a_n33_n482# 0.283709f -C3 a_15_n286# a_n110_n286# 0.598904f -C4 w_n708_n711# a_n110_n286# 0.282941f -C5 a_n110_n286# a_n33_n482# 0.055698f -C6 a_15_n286# a_n858_n861# 0.049098f -C7 a_n110_n286# a_n858_n861# 0.049466f -C8 a_n33_n482# a_n858_n861# 0.03607f -C9 w_n708_n711# a_n858_n861# 7.67499f -.ends - diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/reports/sky130hd/glayout/6_final_lvs.rpt b/openfasoc/generators/gdsfactory-gen/lvs_flow/reports/sky130hd/glayout/6_final_lvs.rpt deleted file mode 100644 index 0d85c92c3..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/reports/sky130hd/glayout/6_final_lvs.rpt +++ /dev/null @@ -1,246 +0,0 @@ - -Circuit 1 cell sky130_fd_pr__nfet_01v8 and Circuit 2 cell sky130_fd_pr__nfet_01v8 are black boxes. -Warning: Equate pins: cell sky130_fd_pr__nfet_01v8 is a placeholder, treated as a black box. -Warning: Equate pins: cell sky130_fd_pr__nfet_01v8 is a placeholder, treated as a black box. - -Subcircuit pins: -Circuit 1: sky130_fd_pr__nfet_01v8 |Circuit 2: sky130_fd_pr__nfet_01v8 --------------------------------------------|------------------------------------------- -1 |1 -2 |2 -3 |3 -4 |4 ---------------------------------------------------------------------------------------- -Cell pin lists are equivalent. -Device classes sky130_fd_pr__nfet_01v8 and sky130_fd_pr__nfet_01v8 are equivalent. - -Circuit 1 cell sky130_fd_pr__pfet_01v8 and Circuit 2 cell sky130_fd_pr__pfet_01v8 are black boxes. -Warning: Equate pins: cell sky130_fd_pr__pfet_01v8 is a placeholder, treated as a black box. -Warning: Equate pins: cell sky130_fd_pr__pfet_01v8 is a placeholder, treated as a black box. - -Subcircuit pins: -Circuit 1: sky130_fd_pr__pfet_01v8 |Circuit 2: sky130_fd_pr__pfet_01v8 --------------------------------------------|------------------------------------------- -1 |1 -2 |2 -3 |3 -4 |4 ---------------------------------------------------------------------------------------- -Cell pin lists are equivalent. -Device classes sky130_fd_pr__pfet_01v8 and sky130_fd_pr__pfet_01v8 are equivalent. - -Circuit 1 cell sky130_fd_pr__cap_mim_m3_1 and Circuit 2 cell sky130_fd_pr__cap_mim_m3_1 are black boxes. -Warning: Equate pins: cell sky130_fd_pr__cap_mim_m3_1 is a placeholder, treated as a black box. -Warning: Equate pins: cell sky130_fd_pr__cap_mim_m3_1 is a placeholder, treated as a black box. - -Subcircuit pins: -Circuit 1: sky130_fd_pr__cap_mim_m3_1 |Circuit 2: sky130_fd_pr__cap_mim_m3_1 --------------------------------------------|------------------------------------------- -1 |1 -2 |2 ---------------------------------------------------------------------------------------- -Cell pin lists are equivalent. -Device classes sky130_fd_pr__cap_mim_m3_1 and sky130_fd_pr__cap_mim_m3_1 are equivalent. -Flattening unmatched subcell OPAMP_TWO_STAGE in circuit opamp_test (1)(1 instance) -Flattening unmatched subcell INPUT_STAGE in circuit opamp_test (1)(1 instance) -Flattening unmatched subcell diff_test in circuit opamp_test (1)(1 instance) -Flattening unmatched subcell nmos_test in circuit opamp_test (1)(8 instances) -Flattening unmatched subcell CURRENT_MIRROR in circuit opamp_test (1)(4 instances) -Flattening unmatched subcell NMOS_1 in circuit opamp_test (1)(10 instances) -Flattening unmatched subcell GAIN_STAGE in circuit opamp_test (1)(1 instance) -Flattening unmatched subcell DIFF_TO_SINGLE_CS in circuit opamp_test (1)(1 instance) -Flattening unmatched subcell DIFF_TO_SINGLE in circuit opamp_test (1)(1 instance) -Flattening unmatched subcell pmos_test in circuit opamp_test (1)(60 instances) -Flattening unmatched subcell CURRENT_MIRROR in circuit opamp_test (1)(4 instances) -Flattening unmatched subcell MIMCAP_ARR in circuit opamp_test (1)(1 instance) -Flattening unmatched subcell MIMCap in circuit opamp_test (1)(6 instances) -Flattening unmatched subcell OUTPUT_STAGE in circuit opamp_test (1)(1 instance) -Flattening unmatched subcell NMOS_2 in circuit opamp_test (1)(16 instances) -Flattening unmatched subcell CURRENT_MIRROR in circuit opamp_test (1)(4 instances) - -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/1 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/2 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/3 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/4 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/2 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/3 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/4 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/1 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/2 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/3 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/4 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/2 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/3 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/4 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/1 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/2 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/3 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/4 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/2 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/3 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/4 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/1 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/2 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/3 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/4 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/2 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/3 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/4 -Class opamp_test (0): Merged 237 parallel devices. -Class opamp_test (1): Merged 269 parallel devices. -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/1 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/2 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/3 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:REF/4 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/2 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/3 -Cell opamp_test (1) disconnected node: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/CURRENT_MIRROR:1/sky130_fd_pr__nfet_01v8:COPY/4 -Subcircuit summary: -Circuit 1: opamp_test |Circuit 2: opamp_test --------------------------------------------|------------------------------------------- -sky130_fd_pr__pfet_01v8 (122->6) |sky130_fd_pr__pfet_01v8 (184->6) -sky130_fd_pr__nfet_01v8 (128->12) |sky130_fd_pr__nfet_01v8 (98->12) -sky130_fd_pr__cap_mim_m3_1 (6->1) |sky130_fd_pr__cap_mim_m3_1 (6->1) -Number of devices: 19 |Number of devices: 19 -Number of nets: 14 |Number of nets: 14 ---------------------------------------------------------------------------------------- -NET mismatches: Class fragments follow (with fanout counts): -Circuit 1: opamp_test |Circuit 2: opamp_test - ---------------------------------------------------------------------------------------- -Net: a_n7935_n484# |Net: outputibias - sky130_fd_pr__pfet_01v8/(1|3) = 1 | sky130_fd_pr__nfet_01v8/(1|3) = 1 - sky130_fd_pr__nfet_01v8/(1|3) = 1 | sky130_fd_pr__nfet_01v8/2 = 2 - sky130_fd_pr__nfet_01v8/2 = 1 | - sky130_fd_pr__cap_mim_m3_1/1 = 1 | - | -Net: a_n7677_7899# |Net: commonsourceibias - sky130_fd_pr__pfet_01v8/2 = 1 | sky130_fd_pr__pfet_01v8/(1|3) = 1 - sky130_fd_pr__pfet_01v8/(1|3) = 1 | sky130_fd_pr__nfet_01v8/(1|3) = 1 - sky130_fd_pr__nfet_01v8/(1|3) = 1 | sky130_fd_pr__cap_mim_m3_1/2 = 1 - | -Net: a_n8335_n2966# |Net: vdd - sky130_fd_pr__nfet_01v8/2 = 2 | sky130_fd_pr__pfet_01v8/(1|3) = 1 - sky130_fd_pr__nfet_01v8/(1|3) = 1 | sky130_fd_pr__nfet_01v8/(1|3) = 1 - | -Net: (no pins) |Net: output - sky130_fd_pr__nfet_01v8/2 = 2 | sky130_fd_pr__nfet_01v8/(1|3) = 2 - sky130_fd_pr__nfet_01v8/(1|3) = 1 | - | -Net: a_n2686_8022# |Net: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/DIFF_T - sky130_fd_pr__pfet_01v8/(1|3) = 2 | sky130_fd_pr__pfet_01v8/(1|3) = 2 - sky130_fd_pr__cap_mim_m3_1/2 = 1 | - | -Net: w_n8526_7510# |Net: gnd - sky130_fd_pr__pfet_01v8/(1|3) = 5 | sky130_fd_pr__nfet_01v8/4 = 10 - sky130_fd_pr__pfet_01v8/4 = 6 | sky130_fd_pr__nfet_01v8/(1|3) = 8 - sky130_fd_pr__pfet_01v8/2 = 1 | sky130_fd_pr__nfet_01v8/2 = 3 - sky130_fd_pr__nfet_01v8/(1|3) = 1 | sky130_fd_pr__pfet_01v8/4 = 2 - | sky130_fd_pr__pfet_01v8/(1|3) = 2 - | sky130_fd_pr__pfet_01v8/2 = 1 - | -Net: a_n9311_n3159# |Net: OPAMP_TWO_STAGE:0/wire1 - sky130_fd_pr__nfet_01v8/(1|3) = 10 | sky130_fd_pr__nfet_01v8/(1|3) = 1 - sky130_fd_pr__nfet_01v8/4 = 12 | sky130_fd_pr__pfet_01v8/(1|3) = 2 - sky130_fd_pr__nfet_01v8/2 = 3 | sky130_fd_pr__pfet_01v8/4 = 4 - | -Net: a_n2511_10156# |Net: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/wire0 - sky130_fd_pr__pfet_01v8/(1|3) = 2 | sky130_fd_pr__cap_mim_m3_1/1 = 1 - | -Net: a_12876_1294# |Net: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/DIFF_T - sky130_fd_pr__nfet_01v8/(1|3) = 2 | sky130_fd_pr__pfet_01v8/2 = 4 - | sky130_fd_pr__pfet_01v8/(1|3) = 1 ---------------------------------------------------------------------------------------- - ---------------------------------------------------------------------------------------- -Net: a_n2686_12378# |Net: CSoutput - sky130_fd_pr__pfet_01v8/2 = 4 | sky130_fd_pr__pfet_01v8/2 = 1 - sky130_fd_pr__pfet_01v8/(1|3) = 1 | sky130_fd_pr__pfet_01v8/(1|3) = 3 - sky130_fd_pr__nfet_01v8/(1|3) = 1 | sky130_fd_pr__nfet_01v8/(1|3) = 1 - | sky130_fd_pr__nfet_01v8/2 = 1 ---------------------------------------------------------------------------------------- -DEVICE mismatches: Class fragments follow (with node fanout counts): -Circuit 1: opamp_test |Circuit 2: opamp_test - ---------------------------------------------------------------------------------------- -Instance: sky130_fd_pr__nfet_01v8:118 |Instance: OUTPUT_STAGE:1/CURRENT_MIRROR:1/ - (1,3) = (25,3) | (1,3) = (26,2) - 2 = 3 | 2 = 3 - 4 = 25 | 4 = 26 - | -Instance: sky130_fd_pr__nfet_01v8:57 |Instance: OUTPUT_STAGE:1/CURRENT_MIRROR:1/ - (1,3) = (25,2) | (1,3) = (26,3) - 2 = 3 | 2 = 3 - 4 = 25 | 4 = 26 - | -Instance: sky130_fd_pr__nfet_01v8:32 |Instance: OPAMP_TWO_STAGE:0/INPUT_STAGE:0/ - (1,3) = (25,25) | (1,3) = (26,26) - 2 = 25 | 2 = 26 - 4 = 25 | 4 = 26 - | -Instance: sky130_fd_pr__nfet_01v8:16 |Instance: OUTPUT_STAGE:1/NMOS_2:0/sky130_f - (1,3) = (25,3) | (1,3) = (2,2) - 2 = 3 | 2 = 6 - 4 = 25 | 4 = 26 - | -Instance: sky130_fd_pr__nfet_01v8:11 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/C - (1,3) = (13,2) | (1,3) = (3,1) - 2 = 4 | 2 = 0 - 4 = 25 | 4 = 0 - | -Instance: sky130_fd_pr__nfet_01v8:2 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/C - (1,3) = (25,4) | (1,3) = (1,1) - 2 = 3 | 2 = 0 - 4 = 25 | 4 = 0 ---------------------------------------------------------------------------------------- - ---------------------------------------------------------------------------------------- -Instance: sky130_fd_pr__pfet_01v8:3 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/D - (1,3) = (13,13) | (1,3) = (26,26) - 2 = 13 | 2 = 26 - 4 = 13 | 4 = 26 - | -Instance: sky130_fd_pr__pfet_01v8:0 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/D - (1,3) = (13,4) | (1,3) = (5,2) - 2 = 3 | 2 = 5 - 4 = 13 | 4 = 7 - | -Instance: sky130_fd_pr__pfet_01v8:103 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/D - (1,3) = (13,2) | (1,3) = (7,2) - 2 = 6 | 2 = 5 - 4 = 13 | 4 = 7 - | -Instance: sky130_fd_pr__pfet_01v8:29 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/D - (1,3) = (13,3) | (1,3) = (3,2) - 2 = 6 | 2 = 6 - 4 = 13 | 4 = 26 - | -Instance: sky130_fd_pr__pfet_01v8:7 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/D - (1,3) = (3,3) | (1,3) = (6,6) - 2 = 6 | 2 = 5 - 4 = 13 | 4 = 7 - | -Instance: sky130_fd_pr__pfet_01v8:5 |Instance: OPAMP_TWO_STAGE:0/GAIN_STAGE:1/D - (1,3) = (6,2) | (1,3) = (7,6) - 2 = 6 | 2 = 5 - 4 = 13 | 4 = 7 ---------------------------------------------------------------------------------------- -Netlists do not match. - -Subcircuit pins: -Circuit 1: opamp_test |Circuit 2: opamp_test --------------------------------------------|------------------------------------------- -(no pins) |output **Mismatch** -(no matching pin) |CSoutput -(no matching pin) |vdd -(no matching pin) |plus -(no matching pin) |minus -(no matching pin) |commonsourceibias -(no matching pin) |outputibias -(no matching pin) |diffpairibias -(no matching pin) |gnd ---------------------------------------------------------------------------------------- -Cell pin lists for opamp_test and opamp_test altered to match. -Device classes opamp_test and opamp_test are equivalent. - -Final result: Top level cell failed pin matching. diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.cdl b/openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.cdl deleted file mode 100644 index 48e187bf3..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.cdl +++ /dev/null @@ -1,84 +0,0 @@ -.subckt nmos_test D G S B l=1 w=1 m=1 dm=1 -XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} -XDUMMY1 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} -.ends nmos_test - -.subckt diff_test VP VN VDD1 VDD2 VTAIL B -X0 VDD1 VP VTAIL B nmos_test l=1.0 w=6.0 m=4 dm=1 -X1 VDD2 VN VTAIL B nmos_test l=1.0 w=6.0 m=4 dm=1 -.ends diff_test - -.subckt CURRENT_MIRROR VREF VCOPY VSS l=1 w=1 m=1 -XREF VREF VREF VSS VSS sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} -XCOPY VCOPY VREF VSS VSS sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} -.ends CURRENT_MIRROR - -.subckt NMOS_1 D G S B l=1 w=1 m=1 dm=1 -XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} -.ends NMOS_1 - -.subckt INPUT_STAGE VP VN VDD1 VDD2 IBIAS VSS B -X0 VP VN VDD1 VDD2 wire0 B diff_test -X1 IBIAS wire0 VSS CURRENT_MIRROR l=2.0 w=6.0 m=4 -X2 VSS VSS VP VSS NMOS_1 l=0.5 w=1.0 m=5 dm=1 -X3 VSS VSS VN VSS NMOS_1 l=0.5 w=1.0 m=5 dm=1 -.ends INPUT_STAGE - -.subckt DIFF_TO_SINGLE VIN VOUT VSS VSS2 l=1 w=1 mt=1 mb=1 -XTOP1 V1 VIN VSS VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mt} -XTOP2 VSS2 VIN VSS VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mt} -XBOT1 VIN VIN V1 VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mb} -XBOT2 VOUT VIN VSS2 VSS sky130_fd_pr__pfet_01v8 l={l} w={w} m={mb} -.ends DIFF_TO_SINGLE - -.subckt pmos_test D G S B l=1 w=1 m=1 dm=1 -XMAIN D G S B sky130_fd_pr__pfet_01v8 l={l} w={w} m={m} -XDUMMY1 B B B B sky130_fd_pr__pfet_01v8 l={l} w={w} m={dm} -XDUMMY2 B B B B sky130_fd_pr__pfet_01v8 l={l} w={w} m={dm} -.ends pmos_test - -.subckt DIFF_TO_SINGLE_CS VIN1 VIN2 VOUT VSS VSS2 -X0 VIN1 VIN2 VSS VSS2 DIFF_TO_SINGLE l=1 w=6 mt=8 mb=12 -X1 VOUT VIN2 VSS VSS pmos_test l=1.0 w=7.0 m=30 dm=3 -X2 VOUT VIN2 VSS VSS pmos_test l=1.0 w=7.0 m=30 dm=3 -.ends DIFF_TO_SINGLE_CS - -.subckt MIMCap V1 V2 l=1 w=1 -X1 V1 V2 sky130_fd_pr__cap_mim_m3_1 l={l} w={w} -.ends MIMCap - -.subckt MIMCAP_ARR V1 V2 -X0 V1 V2 MIMCap l=12.0 w=12.0 -X1 V1 V2 MIMCap l=12.0 w=12.0 -X2 V1 V2 MIMCap l=12.0 w=12.0 -X3 V1 V2 MIMCap l=12.0 w=12.0 -X4 V1 V2 MIMCap l=12.0 w=12.0 -X5 V1 V2 MIMCap l=12.0 w=12.0 -.ends MIMCAP_ARR - -.subckt GAIN_STAGE VIN1 VIN2 VOUT VDD IBIAS GND -X0 VIN1 VIN2 VOUT VDD wire0 DIFF_TO_SINGLE_CS -X1 IBIAS VOUT GND CURRENT_MIRROR l=2 w=6 m=4 -X2 wire0 VOUT MIMCAP_ARR -.ends GAIN_STAGE - -.subckt OPAMP_TWO_STAGE VDD GND DIFFPAIR_BIAS VP VN CS_BIAS VOUT -X0 VP VN wire0 wire1 DIFFPAIR_BIAS GND GND INPUT_STAGE -X1 wire0 wire1 VOUT VDD CS_BIAS GND GAIN_STAGE -.ends OPAMP_TWO_STAGE - -.subckt NMOS_2 D G S B l=1 w=1 m=1 dm=1 -XMAIN D G S B sky130_fd_pr__nfet_01v8 l={l} w={w} m={m} -XDUMMY1 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} -XDUMMY2 B B B B sky130_fd_pr__nfet_01v8 l={l} w={w} m={dm} -.ends NMOS_2 - -.subckt OUTPUT_STAGE VDD GND IBIAS VIN VOUT -X0 VDD VIN VOUT GND NMOS_2 l=1.0 w=5.0 m=16 dm=1 -X1 IBIAS VOUT GND CURRENT_MIRROR l=2 w=6 m=4 -.ends OUTPUT_STAGE - -.subckt opamp_test CSoutput vdd plus minus commonsourceibias outputibias diffpairibias gnd output -X0 vdd gnd diffpairibias plus minus commonsourceibias CSoutput OPAMP_TWO_STAGE -X1 vdd gnd outputibias CSoutput output OUTPUT_STAGE -.ends opamp_test \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.gds b/openfasoc/generators/gdsfactory-gen/lvs_flow/results/sky130hd/glayout/6_final.gds deleted file mode 100644 index f44e0ec3d50cb5e81ec8be8c03b01dd986550f95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2983940 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 z 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%0D(|W#tZ{q1+hW|q)p8jR*hxJbXGJM~n?eYJh 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%0Dn;{%;BXdxBpozsNtG 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%0D0c_p~_X7|t($KIKpA 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 z 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%0Di@^4s3y=chk1wf}9F%Ku8rul%-l zSU;O>?_~e%DnFm!O8+-2N4Zk@IluD1BltfW{8IVvnBl)6_&*)|Qu#Ne`pT~y8ZxQ>1U0H~vk3(D=K`|8S}={okY<8~RA2d(qg<){oL~8$7yK6mzf}J7QhwpT_-})Md+>+K zHyy7ZHl-i=lRq2YJcvu z{afnKpXM+7{JG5Y-|^3H{kibniNAe+6ZQPLA?6e)a|{05l~n#{e!-uAVt(QJ_4enl zm|yVcu)6=Ll%M)X9`g&=Z&{tKdFB_c@(1^?*L}OyGq<2l%KRdJeY*bA_g8Q;zi|D4 zsc|#EaFsv!{NeY%fn~je?j6e?;rCE`oP@6`!AJ$da5t{%rD?)ZUJ{!`QJ0 zE#U7e|AQ&NTtD**@Bb%TJ@X5HALPFw)mQ#&?Dh2jou>3(DnGB^lE2lM$!Bii{8IV( z^Q+`DzwrKlsO2-i@czqx>kPlGQ|Etat7CrQ*CBsq{W7O;e(oFkA1Z$|zwo}>{^$Dr zR?qyx`!7H5f93jlPKBSj1>9Zb51wDiWq#qx{bT&hFI?q+ZQMWR7v6vNUCU>F;VM5r zKU98Or_TSmR>%CpuS5RK`elCM{MS-eFMK#{umixKi6;dJb(J{6aMDEPx*zPIfe6c z-@qR#e>A`FzHf~F(>JSUe&H&AX8&Y<;n%@^!}Uw$=k;6pZJjy?_Ye6}`7`U6`Gx1d zF7l=FXWl>N7hcc43%^wU%=%@1;r!e;@Jr?A{jXd<=S1o`H&QQ^zwG%jzW;}tbE0c- zGr!~i~`33yU zE#U7e|2<>=1@kMvWjgS*P&-dhko-=k=S`kLM~!xl;K#zwmGUY4D#N z{Gswqr~7Z=-}=Mge{t}K$~T?X7k=e1zwq~eoL~9BXmz%Jm|IZaRsI)Ke&zp+)mi_U zTd;n*%KuENul&kcS$^fWeZu)a6#P>8dH<;VZw&sA2ftMQ8)x{Hqg<){oL~9Z1^>%~ zUn+lH%CG#V2mh;rUn>9fRA2kA9OX*o=lsII<-3iaxdrQ|tNib#{KD_&Kh}@^&(}|= zeAD6jUogM&e8A4&O@|NT~H%*-v|?<)WOslN1|`338Di*lv%bAIK2Wz_$g zDgBqqe`U(A{4cXQ_}^&?zf}IqQhnuDj&h~)bAI8s^I5z8^MgNB{&DBG!oT^)!M{29 zL*<(e*N<{^Zj{PDF2C}BrSUVjp#NRvevi95^~^1(momSIU$566&%bapzi|CP<7R#VfAZ&LYr|1R~+FP#77t)BUX^UGiE{H^yN{uc!QYpu@u z$Na)o{tFU+dHAzHdUcV)u`Gxay-@q@GpFh7!KJyFj|A$&W^9%34{I|~V z+d6grm$o|Q7k(Y`XVx!s3g_p(fj?CKXnx^+w|&m_`>me&h4){6-v7$=^PCDla|^h; z${#$xlFR(UmHWr|nP0fd|Jt~J%rCtE?7NoF{K8d!etxL@woaY@bFGf~gv#5{KD&O{W?F_Z}mKX`tK9|=D$z*g`YWv^K;+8A1Z$|zwo|qjQ-O%`Y)9~ zvwt$b@ay2d;rgZW^ZKp)woaXc`-gm~{F(L3{KE5J7x_~8Gw&bs3$OoV)Jx^htY79A z&d+@Vzf^wS|H}1qPNbf5BlS}G%bp)6=O50A@H4ld|6S#0{&fE5->qSO;rdyt-)=uk z<-h&J>(6tQv$Fhl{S$uX2mC&qf8p;cKkq+&muztz^B|2}62f2e%Z>Hb^zxBf8rUmX0Q z@=d4pg8RQ|e@U-?fD{#OORRQ~CyzV=@^ z%9YB``GtSWcN;%*3)W9p`QJ_Xg`e{u_b>AcUq7MpO^54$!Tieqk>LMQ@Jr=?B;{BB z_cwm#7VvkK|Nc~8`p^7={e$_1_fIN6=U4t$M*Xivy;S}yQ-0-tS@6Hp>fx8le_5)p z{K`?TRDRAc{B}NT*MENShsrjUK6{GyFFM|EGgrD*uL5U-^}z zT&et=U-@4W{J#?XQu!}Q`L+M&2LJ1VUn>9HRA2d(qg<){oL~4iJ=OS`Td;n*%6}^5 z7yeD(3I68?f2e%Z;rd@Nzw+N5{9g@zsrPXXf0J^QE0v$~ zEB|YP|2KkPD*rVpzw%!h{O=8Zsr)NbedSk z{KEC?b{*^NXQ}*8ow$GGF~4yAmep^ypQZ8#_pjG|yVWzdpkB)SB7S|kf2Hr=;AT$Y z`hmvJ{DSM~{^0Y6-~W+4!Qa}0kUy(us;~U4Q~LkT;FrqJ>$l`Hzi@u;8~CO2^XFH|XMW-R z|4_?ke&PL>|JE6P)+zii4SuQonf1$@!uh#x;188QnqPR|+2^xqhBg z;b(5ab$69Nczz|9`Gu?f9`G~2aFzeHasQZKc>llE@|j&QV@|j;aKlcs%Qu*7) z`OGQEXKq3Nr1D4e3$J7S(toa>^%J@|eADUm7k=gx&d+@Vf2jP?{KEUbvDGuT@cv8X z&+MPfFZ?>bAJ;FHpVx2YXPxr?+y6XYDt~7EGQaTr*G0Zm{>=Nw{KD(mcX|J$@@LjB z^9$$azOnu@zi^eG_rG%eoD-?%+(?~N{<7!C`2HVm<`=HP&HRGv=ziu;=YRg)c;*+b zpS8M+?Psa{w-46e;`#0RC;ZG0;OG1ccUSp&|0(>;FW_fx0e@Hd?-}zim|yuX3;s6+ zzf}HZDZlcwPT~Lc;FrqJ>o>0-`lcM^O6BML!oT&W!GCt}hsrmd?mvZp>kotf#lasc z-*j4E_?5%_!r%XKe&zpS<7aL`eOLKkO!<}nGmW3Q1?#7){LiHN%CDT2TUMl~UDZlc+Eco9U{8ITZ zOZAmsIm(sF&-sO4=QN$$r1FnDzZL$?KMwxQ!5=E$bhv($qg<){Tk!sM zmH(BLU-`e#_?cUe&v5h@P9P;rSjh~!+%5Ye>(W3@^47>m0vl^ zmCDcgmH#Ed|0}^SmH(2IU;BS<@V_qjrSi{B^_5>a%9YB``GtSeQ;naw1?#7){HIcW z;otO~;D3Jbhsrk{uKxw|EC1cW|JC4^%D+41SN;z-e&!ae|E}^soa#&eHz`NCQu#T* z^1mkde36Ilu5TKcJqu1?#`7{BO+gKiv44TfpB{{==!h^#3{M^ZaT3 z^XE>>m-_Rk`O7|k>ibWw``zvO`*Yjpq7UJZ<`?{TtC&-u%q{ruU`geV<`?|;x0qkJ ze%&};WIs#gf9k~jBaiuo>$j}_#rCsQ{^0)gx^K67<`&dTnP0@OPxr6%{TtlODO^9$ z_?cgD9o-*%{_y)>a!t!&e&KT^@X4L1^mn{xc;v4znAJuK647c z4*T5l{)fsR%`eDhPT~5Bme2eGj_z+v`IX;3C!F6tH=JK8f4R?(N&lH&z|Y(Q{;u*r znDWc@Gr#cuf3npxzwrLce?zLT{MQ8kJA+>;Kd;}C&-}vqxo_Z?%Fmx)C7=0)_y0pJ zpZSINU;bNX_*ti{pO*%|RQ}BRWlrJz+&A!t${)=yyzlID_Wm)q@V-ms=l!o-KhLS~ zGq>QnyUHItzmm)R!j=2S_?ch0%KzH9f6Onu|LnW0d#U{V{80H>r|{e7j`K_9&#YhO z7tYUp1HV-MyAyv|f1E$5XKq2gRKDqO|7U*T{BH?kAFZ|3YoS*v!{!sa&`Gxm=W2c| zU-)%!-*Ej>`FZ_Te%9%qSRMC|@pqL!vwoRhc>e1mUn+m*{bPRN_3XRwOXbh3U*;Fi z&wT^GRDRz7%Jp+jq@Hsl^-}rEo*(1;f4Dh6x&}A%3$CO4nLnNX*Z!Hk?(J5Oe%9)2 z4R)3P_QCpFJilH4grE5V{G5N`?kYd;KZT$91^mn{;O{E`J!Ad_^DF;l!T+YiUiN#v2#2@f}Jy4JcAtu5wRj7VyD9(gSAuH zwSyh(Fr7{Zna&wxI-TwggY14k*K>cLJlDFCd*xlBe+=Jwzw5cYzR%~q-}}Dbbtic) zZ26nomv+bhjQwl==UV>PTYjtk=TiTg|MPi`of>{3+8XmFM^-de(qoM z-_hzHZuM6CcclI`|E(?m(U#w8|JGDr^Sh7xTJ7ilCBOG+-nUupFWSGA{0m~o{D1vI z%iq+#v^##>$9=8#7xl0C-x~OHZo&IEs{OZ8|C*nDn(}jQ!T1@~e%`+o{tNDNZvAWi zBQ5{)Ex*M?cOlLO)c! z=1k5nLhW}xzft$mP|vvqbym(V+Rvx+SNi=MxjCl@eR{~x`33he`knQM|Nf4HLm$pB z;vC3o|6scR(x3B-;P>Uwmw!hpINHzicd6(6BJ%HTxvlokwEu47C-Ps`@*imVt@bZV z`P2BPp7V>)Lqk317x6yWUy*)PC>$g1($n zgzg{ubACaN(VtKKYksX0k^k+M-)jF%>&JvY=NIJX+=Be0+J7eXFZa*+Meu)dsOS75 z_}jlH)z|!tQ}`ck`K|Wz_$~c8zli*NZpd%7pVzO_pYx00e`4s*`9<)z|IiZo8K>mm z+45WMFEM^Or-=M~Zph!%e((GuxSty8Ill<*R{MGWEBDX$RPu9f!F`Wvzw`Z-{+wTg z^7&DI&M!jkztiW(`9<(&-c^6jFGB6-?+-OU@YkEQ%& z{IUO}o^uQC+iG9ho&Pz%i2M(>{8syU{FeTlUqpUBH}JRG-_`HWIR*VWw}89Ve((Gu z>KMQ9=l)f1U1+{^djBOq=M<5j&kgyT+V7oT1o!!&p7V>~Z?(U~{K@%6+y|c3&diIUfTkW55|JZ*2Pj2>)p)EJ(7rYOnpYx~v|9ZVwoL_{#qPkUjZMFYMXZ+3H zf4Kiie$Efb&;FO(quS5&Psz{u1^GF*ApfZLpXleGv472fd&~bo%Wt)Rd+J~FGfv6> zXv=T4pT}<=KX7v&_qE#3{Y(Dse{A{JwERu&OQ-Ws$-n*cmVZ;r-_*WzT3_v6H{O)sZ{cC>a3B8Z}{fo$NwV&sY zn*Y9*|Am&{YX80^^1F}wTJ7ilHUC`8zqjSL+Mi4PYyK52|6MJ=)&7c9U-`R_`&#Yi z{w4qQpA7jqw}Ahs_CHDeOa9pZY3y)*5#y(+eQ9_6&)C1_f3D?!z2&#se=hZ}`Hv6$ zIkzDHsP>Pi`of>{3&t9b< z|M!RdoLew{Mzx>!Z-xJY`UkeKzFh+=B5ls{PMW|B`>( z$1VS*Eq_z{((d@5v472fvgLof<+s{DnfllK&kp%Hw_yB_YX8|(U-)lxANRG|&;4uu zyIcOpT7IkjyHo#~e_zZ0WXo^0zc1C-{O;qvR{Obs&3{qLzoq53+P^6EFZnsAVE@ed zMeuKGzjuDYy2bfLsQX&&=l&%>=LghtZo&8;)&6@+|3Y7DUD?d7|_Iu|SS89&o z{37&SspcTgF+%O1Iy*o5aefi{q3+{yy|&u#e14-&{|%IL3+k<$U$mc3=dbkpH*#}M z5&E=L`8mG`wclBP`0wvHIP~HCBF=%V_7A4}Fa0^c2!84v+^qKV{9Wofzli*MhkBlW z5&7+(Y5(2EPvpN$*K;2ST7Ikj%ToR{{;A{qBJ@z>Z?(T7)tCI7Uyz@33v!QY|I<`o z`g2YZ`L%8Z|EBhP=NI(loFa7p(4X@Qa*Y0b>R6@RuV1A<=NG~M z#L%Dfi{Nknp(XM&PRYM>s2kP(662S1ipa0eP2_KCzjuBS+?nV29B8hlepLH;{ww#- z_f+z8Zoz$zYQOXSmA;%`gzED{f6gyL?Z4CK$N5F@*Ss6tt@iWxhnk;pN`9?7k>6^6 ziSf(%Mda7#CURTtA4~bm_+$S`J?9qGTkT7`^FQYok^jM#-)cXP-_oD+i^#9fP2{)Q z-_`HWIR*VWw}7A3e((Gu>i#m+^Sv|pH(hAHbb9|KKj##Ye`m|z)PC>$BDl{F^_*V> zf2;i^=1>+=)+t@f7~znou0|3j_6)&3IiALkcQuX#7} zTkS6~emTF0{QBHPeyjaF|CRe^pGZCXM(VBh&$xeVzyBvU`^V6hoAV3qWAt(6o7$I7=bw^) z`{ynHrk1~{ed)Bm{8syU{;2uyYx!Sj`K|WvTOz;vxUbcI?qBoIwfuWqeyjbt)W7Cm z(emHb@>}h%NcEM!`?#;we(qoLU;oLFpK}ZNk81yu)W779{hvO+oL|KFX=-2E9se`- zulb*A`Co7Ot@fWw{cHZ?s#AW>EyzEr{o|>=@aO!3@yq!|@Uz;_{cHX^TK&VV-fI7j z)W7DxRdwV)+VWfN-RT8ucl^)Tzve&L^1t2kTkW4r{cHYbhy0vdkbhMB z&!+mqf1CTbuho9;U-RGH@;}z{TkYSS`q%vXTK*?neyja`slMiSANRG|&;4uui(39I zEx*Z&8NYw}_n+MNvEly5?`^L(4$beKU#$JJ>UDmB za(=N+pCPOL-ucD4zgPV!)uHc7|2R?mr_Rogew<%~eyH4f&pE#cwcq*tM%_n4J?9qG zSvkLGKcCKD>GyBs=KLb`X{qvaei3TFv;Oek-*Is0!}&#=16l1KO!r^+{&-q2`{t@bZV`P2BPj`NGqLyf=H{)$vz z@^gMce$Fk(J*xdrQ+?^rIYs2xXD9eKwck6xpfBeXq5FsaoL`V*^ygFmn*Zcb&-q2< zx7t6``Z3|p`33now;=zh_Mb`p%l&hH5&U0l{H^xyN%b{9;}rf!TYjtkJbp`m&MzYW z(=ET%eqO&yf6gz0|B0bL=NG}>{zFUTXPlCM=TJAQ{UydP=M<4&pPS&{)PC>$BDgcp z>HXu}g8EVI=lQSPKi^Zy&$$KnJ*xfA_gDIIei5qA5B)j62(|xCpC9KJ!C&)kaJSme z-ydrJXNG#tFCxFy{u1Mt^NYx@&rRgE+CP@^m+{B`lX}iAsJGgecISW2FM|JrEx*-% z9>1kO=NFM*pPR^UwZE(1pK}WOb8Z1YtNq^jMbt5V89%!J;NNti`O@kAm;9VlM1FmK zB7al+z4MFUK0nlRei8hw_LrDHIlqYe(B~)a-)cXP-Byyf52@;9|Foz|E9?!);-y#M|FHUDd>69>*Ms2|n-YpH+D z|FY`DpK}YwlaPW3gv`7pX*J?la zuleU%{=F@~)&5-SU-PeM`R{7^t@c->`pVyZ+}CP9_b>Uc|76I|xdr2ARQsQ#{w06x z|31+BcVWxl)V{Pk{%7o8^FP<}zuxj&?LU|L*Zjv-r~I5-F#boie>~L}{+wShemTDg zepdUrf6aeKtADuFTkYSG`q%uos*e0erR2BTzctm@{O;qvR{Obs$?tvIIqu&|{)I1E z{)LvmseNg8{LI+D=6_3l_5N{g!TUF={kKy8nxB1|_;YRn|55Gd{afL`;6CTpzve&E z@;~45TkRiNBLCr*|D~4SYX5Mmule1_eXaI$|C)bu%YSFfZ?(TU^{@Qbwfu)#eyja; zslMiSANRG|&;3jOZJ!PKIk#Z^jB5Y0)W784_HoO9Y0KZ#zO+03XY60|pKSTxZuzbD zPp1Ag|Fc7W&Mg@KquPHq)ffKT+{b;b_H+N5|L&Imv6kOz|L)Yk=HJ)yKiTqI?e9zV zHNX3~uho9;U-Mto@^5MRt@bZU{Y!q%DVTq@?QZ#-+V7oTFz;=1ANRG|&;3h&&JXzS zaBji)AJzVQOXPoJ$j`Y2<7ZU+Z>0Ld|GfM2{Zst--bsIJeE*bx#_ym0{U`T*Om))n zd)upe4Tt7Sr=Q>9_fM^Ujn+QSDNxQW*1mIE?f1?v*8W8Gr&Nc&D;2|0?Vn2h6F>TK zei8bi^v`;2wcq*tM%_n4J?9qGTRFdIKd<-SzW$#5u zQt=zr{$(kDdH*=Spq_s>D)?LNuSoSJKj#ve) z_5Ax$@jlqUC)L;dj8pg@mBQa@KabzipYw~z&*z5xR{MGVD*ZXX2>vIA{+wR~fBO$D zk)Lr&{+&bJsP>l_znoJ4{Z&*Qh|XPol>t2X*u?JqHYIlqYhhgyHD{UzQ%&M%^#d6)cF`%8>p&MzWApBwS# z-;WBlpXa}F|LhZ~XWvMj)&3dxkCXim`$Y0{ZbAN0?dSYy|G)MD?0?BWs{K6wl>D4ukblRUL;g|iKhe)WWB;1}_Ll#Fmfvds z_SC=TXPlD%(U#w8Kabx$e&FUl?rXK5`E&ryLzo~uc zw7%qbAI>l0{qOg$`Cn6=IB;%3{iya|OZ{v9msKbJoLeydN45WQs;~Lo=iK_&{LB;N zKhg4A?dSQU=D)Ayf1%~K+P`m!{O;qvR{Obs%|F-j?``?5_UBUnntw&he^<+IwZ9_O zSN`tfzE=CWf60ISCqsVDEf_ze+W#c=FZpBt_nzLr3tRrC_NCqNKV$!z|GAd`^_Jgi z|GCt^=0C1F<>%aj@jt5lu%P zCBN1Ft*O4|cOUn)+Ryziy%~g7;t z^@aa7_i`S-Q_PqzG4`}~Z~vZDU-KW-_3%F` zg}>E)9>1kO=NFNm&kfwI_VfBx`g48}{7(%1Ill=0_8(dzKjW1AJBPYa?JqHYIj4yH zd!^)WYQJ}W5!{*Q_#FIvs2|mSp8v}I^F5XPoLg|;quTF$f2A+y7omK9l%Mm9Q2X!n z`Eh;`{F!&vpYw}Q`}zAr&CfU`|EojYsP>l_znou0em*zkx7t6J@|W?){*!vnEvUEJ zmv-lW&MzYWgHrfg?dS1Z`g48}`T5+C-)etXzdz>`^yl1y{#N_F^NXls{KB96Cx6q0 z=1ZsdU-ENK5&3sY$=}p|@BAXT&kyySUj%=v{Uzp4&M)FV`22AHR{MGU*8Gf9-hVzn z%0H_8CB`r37t#Mv>u9MJpYyZXP-zt`$p=m z_RqL~Y`^~}H~YlUmYeen?ql?G{2&@n`L}=G@^5PSo7$I7>q~z3;rt@r|9=0P|25T# z1Lqdhk81z5)W7C`S#{#ixdr2ARQoTd`kLQ;&aHpV&pbi?6D_~hex5&S{`*?~7g~O+ z{ri^4?>_EpwV(Uf{Bte;-j?5Le=hZ}`B$|3ceVUh`zum?bZkE>4kIk#Z^k81yT zsxSOGzhL}wesK={YyLZ0{ll%^YX6SZzvjPHb>u%PCBN1Ft*O4|cOUn)+Ryziy%~g7!F|rHf6afS<$u2Ax7t6lME=7q|4S{u)&AjBU-P?<`&#Yi{x$#RmjBL{ z-)etz>RM(zx>FZi5c;n4BfYlTKXvx|U-go% z*XJzsL#gH*&L2YUcRqhnr=BS14%AsWe`r6S&Ohn*XXNJmA@pgfYB+xgwclAk`0wvH zIP~HCf&Qb~KbY>n^ymB`_a%lSj-eyRF%{t#+^KJ~BpHP1(W&HItxYX400|Aas159H_kA#z*oKa={G z`{(>2_`f*RbN&$g?cbB?YktNl{EtfEZ?&JtZ|TqZL*(ak19z+ay#AE_oIeEr6GMN_ zAA-OAhnC3CI3@qip>97YJZ9G z%lSj(=W|1DtNmjse;I%5AF1cufqJWbX?OnT{2}r`D22b(ejdN2Kj#mTpU(~Xt@d~I z`*Y4ff6g7~Z?)e$e~7xj4E20(jQmX(nlGK+f631|L*(c4L;j}rd*=_qeSWCt{2};T z?JqHZa{dta@pCEnZ?&JtZ_Up*<^BI{>uA^IO`{jK(wc>g$mh}gM zF@8CJi2Qth#GmtrQ2TlQEBDVnk9zif)LHGHasM~nzqOp4JCJ`=`#FEwzpwhPu75;z z=qu7sCu;wZ&iK=~XP*hbv9EL3&;5t{pXBHF|J1X8CI6`Q^ZZltbN)d79dAmNe^mQV z^z+ZyzvjQa<$s{%x7xow^{@FEr{sUM<+s|;<2R2VxVew}TJ7ilCI9w6w)|^a{-*Y& z)A^_5-~M^azp3SKYF|37FZtbv^M`o<`~7SF*HkACoI6lIs{Pke|C;}0)rmjn4ve2s z?Z2GrYkv1RxBfLh^91=%wER~4dH$&R?`!#AX!))7?^`0j`?#;we(qoM&$aw}TYjtk zxzxYrU(xd4)$&{IuSoTkzx%ka)qd_@@?ZbSke_o0#?PqsKS}*d{@DM0SMT42Eq_z{ z((d@5v473~T+9D@%Wt*+TCNAO8sko_G#kJxdZ%1wV(HIh5v&4oLm2z|47UKe9LdOe`JaL zhg*K_!6Lua{^3+#^Sh7xTJ7ilHUH+8|IU`*YJYR;U-_?V`46@HR{QHxea-Ja?rXK5 z`}hnO#N&AXNUZp zJ1~Amwf}6YFZ{Q;kNaBf=l(VS-7WuPEx*WRQvBO zk^c?VDL>~9jGs~Mzme(-|MTw8_fPeY@15#zjqji2>YP8seIHZ3?tlE=_NrdPq4|r> zAO7hD|L$M^)dl|jsjk`jRb4OL@xNbi!8H$`R{PTF=YM~ye?IbEuu4kqYc%Gpk$?F4 zw7$H5JO6sfzw^c+_o(*&I`uE(Z|7gBPMmiBtyKI*wf|SCzPx`k_8)$K*Z9q^*Zu47 zpP>BxlX{&3bLM-6_nOzZE2Kj%N>=llnLquPHa^)L6&`A@tLFAnvb|HS)X|DIG|^D|E2f3)Sd+Rx*+ z^ymC1@;}}3TkYrdzx3z)C-|Qj`g8sh{Ov!qM1IC8`FFPbR{KkgU(R_VKc5@;H?`k8 z{|WBQb9(em*zkx7t6J@|W?){+)WxeWqaDKhJ;V{@JHe&%Tv{}%gU`+5B<{n@_-zb}XW?B9Z;{m%Ro zx#wE`y+a*;ekbn3erNv{xi4$^52#N3`13oV_B-nz_5AsrP>uWGZ?(T7@hkVw{*C)! z-$w3H?SGo;%lKiR7Wbjr$lcU_Z~sPL_GzK}hyLu}$T9kz`6qIpZ27hBM1HIN&i;+u z?B7B^81l1!<32{ev;GD5dxm=UZNcAazq5af{ESohA8q-q_Vf6y{P(r|e16DnwV&6& z^8T}b3;rjD{_Nj^zx_OamHO?BQ}S!w3I105ON?LkX~Cb*4f&he@9p1$|EZy#{af(2 z+RyV}$O|k)O{G{H*r#{8#RueH!)b+o-qNU$lQqzyG}EP3^n%`%jeL ze{Q_%wA%0e{_~oTR8N0t>>I_*YJXAxH2=*1rx#ps-M>|C=~n%|bN;_Pt@fqU@i)}_ z_aFa6_5Z8tr1AU4zdNn=rPKPvk2+s>j`io;|M2wp$MgS@`u{J=|8Gv~*01Qbe5-zb z*8IHh&Tr*D@U6Z3AL})4qFx&B8})5m_3G!vn>xNXSkJ)mtoixg;W{gQ@vZWw^@;z= ze;Do)<@e54{P47rqy4dkg(XwV(HY>GK=hw9bZp zIrQiIOK`N``Ti2Q=Z1Q|w?uxc{m%E7$bFgW$bX>ax7zRQ|ES~pOX#7--)etF;#cmU z?=Rd3-&@E(s{Kz>ec{jdl*q5OBltJ9-~0YTU%sb=?jQQ|{e>K(-&ubn_sOB2=Ql)t ztNqUR7jpAGCG>+KfBZcJjib@;?EixMJwtu`y#v*aYQOXSCGsC^`H!~zR{MGUR{r~1 z{-;}htNpzHEAKzwUxNRMp+DbWg1`N|ewTW_zr=lL-xd6=_LmsHd`}7f`rI&n`2K?0 z?|pv>{>*cFALH*GsBTpIdHyT;`TjzFzPFHnRQsLpFZAVmN~k_Rk=trN@Bd1FzP|*2 z&AY+fYQMApi`G-&?4+^8Ka#ygUE% z{U!20D22b(ejdMN{PX=K^6PUG`K|Ul``_UHyP-edTj+1)`%C+IH$UG~BERlG@;9~L z`~DK#=)*YD=O*$u<@-zf`Lutzf4;xOb>bHMt@f9gKl%Pbe!joN{afwl@mu>dPL-eU zFVWv>e~IzS_m}8@sP(tnU*i4a`%Bcn*y^qJml(f%e~JA1+(dq>{XGAb`)8j=J>MIs zx7wFZ-@o+vU-^OdTc@a)uJEmZSH>=&)}JNvh&`)H_V-$uQa z{agEaH$VF~^0RLv|ETs4r~5DY*}u_;eOv5e;_Veyjb?{w;D}raJN;kc!`^_B-nzb?o0lHSUAI)&7dauiQWTH|~Rd8~I1I|7of( z{Mn~P{!54c{QXgK*zfJ%=*vDWbiY*n*}sL_@611u`{Yp1{w?xb?RWNX-)g_Je~bK#Q}`d1!ry8?kKf9F-_W1mJ4b%2{k;B__n-Y+@INv1 zXa5%b?dSQc)U$t!{91P+zt#Q{GxM^y?w|@)%r-pj=ZNcAaKhJ+9Kl?ZG zvu`8+sP;SiH~O=G3+3~p{QUko)P7$7N`Llm!Jm0o{rUZKsQu3R7r7ay{w?mG&kgr)wV%gt?f?DOpU)5dt@f7~zwFe;tZZ?(T@|CWCLyz<-Hf9dznD8GMRwe_^x z@BRLH?Xw-i1_s>`Sd&BQ9QGVZe z#eaTU`F&>l`B}&BGU|u??f2iys87FtzC!Hz{qq(7#cAdD&iK~e@1J?!C-)im8^3pz zZ(a2J+cJKrXWUrheWSjOt6n|4spETt^$hRB+4=wQblq6rzK_tK?^``VV?-wcp`)^;^1LoI=Iz>ObkV)qaQHGV&*W z%jlo^9adgAp>TV8qV{|I?$PydLgDuOMD6$Z9n|%3LgDtpMD6$Z&7ME=o4tSHH}@Ci z6{k@6Y408!QTrW!b6@B>aSDasf?iwgclga|j}O04`0dndtNjkYW#mu%meD`+JEgpE zLd9>6`QK{4$B*>~PN=xeeK1k`J$}#XdN`rtHuvE~?f3Z2ofyNdbWYQMwp zD%Kxy3KhSrzSL{0{SLpYeyHokDHML}!>#r^{FaeF@mog!%%}P)ez)nh)qaoP?D-SFW%N({)_+fV#VJ(W)-(TG?f3XGf5QnCxAlKN zQTsi9Cv`oXP;p!Tvx(a8@LNXy%y0JoncqI;g%b)l=6|dG9zW)9IHB-+Y@+si{C4Sj zIHB-6I#K&QezWJ#{ATZ;_+9y#@`_WaxLwKoZ?)gycO~nOIEBLRQoXj?@9?|wBV8{} zq42w0udVhw{FaeF@mog!%1g%b)l=6|dG9zW)9IHBTp<*O65-{bd)u7?vUZdd+b zqV{|IX3wAb&E7xrTcx~kLgB{zZ?)g!$NUW^6n^_BYQM+tB3%zB6n=M3)P9fO?D;dl z+50Dc>)udaaS9c;b9Mr_S8h}_xR18Kl7Wtf8w|H zbLADMP`EMwTkUuFt!4cYr%?E<(QB*y4!^aZ>Uwbsh2MI;w%YITTSorGZyEhFzh{&e zPN=x8W&XF?@9|^)h7&4oYu}ux{T{z#x*krbxUGGAqV{|IX3wAb&E7xrn^#^qp>SjV zx7zRVWB!H{3cmvrwcq2nLf69yh2Nox+VAn3J%8pmd;i35&3no#PNCwqhWX!Wzr$}0 z>yJ2vir<>w>b2E=hu@mlbiFu*ir<>w>$TN>hu<>tCw|N5pZVRVyl_I{#{6%!-{Z&p z4JQ9y5w0kth2Ivvw%YITTSorGZyEhFzi%rqoKSIF&HQh*-{Z&p4JTCGR=+<{ z`#pZgbv>L=aa;YPiQ4b+n>~N#H+%nd{>Z;~PX18k-|*#-Kh%ECpZYJOKK=QN_1ynI z*Z1C^PxOD%YkccJPv_^Ue)TVhx-|uzmzPft{J;ahw4-)VKf znJ9Jm)?WQT4s}=FHBsvDt)2QSA8K{4PgHf`TYL3C8S2)roG5kp)=vHU?XB+diK;Gq zYo~toH;1~_A52tr;afZP>sf#F`MYZGMCprf?bKhz`bqsO6IEUK)?WR4L*3lP6QvH{ z+NqzLZ*`AORCVE7d-crw%0KthiBgAe?bUxi)Lp%MqSWDAJM~wy?@|A&U!17w!ngM7 z-)MDzo+x$r)=vF~RYTo|2PUez@U6Z2Ct4lrp6+7|L0x*jp6>w z`ioEh;pb=Xf4=ps^WwMe>50-8-`W}faou^;kNbzk>;J7o|Mv5<-v4>me`mPwvVXwW z{l`9}bN}t<7c9Hp`#C76-n?_VcsyKks_>Ny@)|(f()V z{nIk%|LAib{m*;;_WHMY|AsIAZGAi||MOkH#{J(b!}}2XIQ2c({onc4d;eJWfAX*ZpT)r}4Ag`f>ldc>l@1R_{am`C0G(yzATkx9nffb^m+5 z_1-@(+W(&G{yDA_|Hb>~bFClu-;4Lp?90W!{rs%_&%6GOVf-!Lf1m6AJ+9OJFSmZ& z|FduBzk}+&&w2mv?+?qYANT*~KL4e^f5Gpm`1?-R>^rSIKLFpVpHJVvp}zh7i)${| zb$_jTRCU+vnyCHG^9QcEP}l#J>d?QH-ab+Lo#ziMqksDS+lD=QzZU)8j=%qdZ`IH1 z{kOkAb@d+yZd?yXbmxDkaWCK6J#xWl*h_^sFXF2-M|>iBc4)P>sbj6Z&F&-e?~xVvhVUR&*V#@{mf zCw}9fm(%^ikNbujzO~2i%8v$aTn|5#@q=&e@#D|mG5$iSW8JaZ?~FhG+#usGRO606 zKgjqCwciA$7;Vb z{?=*V!1xQ*xa0dU<1f^HXZ$Urf8w{6eWSQ>zgD>6TYLQ0zB6#+dibG?AAD<%-&%ct zX8eUx$GT&+-x+^v_5FwO7pif$_D_0kwciA$7;Vb{?@#y>ov|oHSX5@POq)@JL7K|{S&{{n!n-3{aWFM zZ|(70{k?%3*TWBG{NP)A{8qoE>om?nsbk%-+V70N)!*0k8fT#zcdLJ;*H-(T@wbfr ziJ#BCxnKC9aKpFu_?_vw;fx=A>lyh?{{7w?p4Y!0`)@C}VAPL?f6w;@>+@&d|Nc#@ zf44}C{{ zZ0J94-QK@{>gYeJ>gY>-Xs-A3>;B`vxoGJ7)xRCCvtIMh^zSkJ`}!`|bkF~(>;9_? zF0k51`R|W5Dt3*UO}|9|z7TRG!Ct@VD+n*V(3N1oyr zT&3{Gx5__j|MRUUKYh7>tKWZXum3XYhk2*{-eKjxqxWBXMRa~%dfjQYFFou1|IPoa z`afv=Ng4MmZ#u2^rPKQKz4>qcZ`J=^_0suWs{iU~wJ)vp%g^u6-3~r?F@Chxp!2t? zzupJyHO-e!`xkzD_Nz|(_B_4*X|12|n=yakcgqKj-#Yb&UsL z1HW6e2ZZ0K_8(0BE59|WgCC!N_*w0*N%fWArH$Vms)wJ|{-vqD^1Hb4`Mfi zzVpCuRQs={`oiz#R|bAJ|629pH>&+t&QL$$H)HWdc z9sIr_g`d^_fmC1l?Qi_Pse1TX?dSEU^4r_^9ala4toHY&{zLtgpL065)qc)j`R!@^ zo>hPNS?%ZbukgF+x2l65^FI8V+LunpZ{c^7)*0r%o7brxeogI5r}c&3O+Rn^=2Q>A zruL<^e!|Z=o!e@EQU1d3Ce}ZFesA8a{_tyRUpnny`JGUm_}%n<{4`I) z?Mwqy+Ry7><#)g8;P*`_{H*rxPx&jq1C1Z^F8r+a z^ZZ@;-PQO#r+WBV?cbI9SANdv+*bQJf91Eo@jI#h@Uz;_>tEq_;b@VoIN^%uWU?dSEc^4qC8_%ZLp&uV{X%3t|yYW%*gdiYuG=lQ$x z+tBzORz3Wz_BW*dm7jAux7B{mU-_}lY5d*zi2B3NYCo@kh2O3ZRVRMCnE%CZRQn&M z{Dt2xtuu_jUCh7YH>&--{uF+@-W~Yu`itttZ&ds5rv8QBjQI<{U95BPyGZ@v*VMkW z`}y7VuUzsm16 z)xnQ>AAVN*x261*-_FMG5!J)bYCq54mES_+cSQB@v)W%s{VPA`bZ)EtoWJth)c74! zfB0GL=k>4f+xauqiQi7fzVa zzO>d)KEE^OFZ_10>`e!wU6>UsL&*yQ~xslb~>kXTkYrkmEZjXzn!nCzxa)6Kd*n4-{q=kQ*>2lKD^jcPxyKb7B01HT=gsb2g> zwf|D;U--?Kzw&!w;J4$~>Mwqy+Ry7><#(s*;P;3WepdT;ru>!PZH?bC)x*zfKhNKl z-=4zwb6f4_{FUF%#_zcL!_R6zuYZN#_Ft(Ee$4yuYieIQ9lwR& zcC9lp{#K|SeogI5r}c&3_P=lZR;eC-P3=o-{bc=cPUp7TUzES_+s^u@&+m>o^@m?m z`_gIu%I_)FiQo2@rQ$cL{ijlW<)?WXe%qOU#cx#mdH$~a9vk>=e?#@+H>&-|QvWjk zwmav!<*)o69{6p4NBzZbRQq}TtNhlh4t~u0@Uz-qpYm6Jmp6W2Q$75w_VfH*`CZ!h z-K~1~S?yn%`d5C=>D*TPIe+EHI;Zis{T}s)pVfX|{|dkB-&URYUC;b4exurdJLNC@ zuGc!l_`9C@SNuk`pVyzlkLRTE=U=Y>T=n8Ns{L0}|H5y^{Dt53taIXb{TJ#lexusY z>tE$}NOkZ#CWW8X{-Kn=^1HL~W8Q_I)qbA8E5H4X-!rO*pVj{U)W7m`PUp7T&-p9A z+Zw;;)E|CU`+5B<{1$$%I`}c~!>_4*>2&@q{1$%I_|2&veogI5r}c&3!Y>-XdDX+O zseNg!pR6Cw>D*TPi}DwK3#@;Pzpd&Izoz!3)Bcs;w^S#73$IDVZ&dr=O7)eW=5Ic~ z@%%aQ8`XYZe=5Hx2Yw6h4g5y6|77Z4#@~W-o?HIP@94m9;l~5NQSImTukzc{_%ZLp z&uV{5%3t}dZ~X32J^ZZp^ZZ@;t!e!3Q@zIDg4O<-)W7m`PUp7T&-p7q);W#8g~RHv z@i(gdy#5t_+kT`vjlXTo|Kc~Q{U4?Lh2J)tE&ffa>7KybnLC{RdM1%I{F)$Gi(atNlEG zSAGW?zi+D^epdSjQvb@&Ii1^TKj*Lf?ri){sXzRz_VfBz_-*~O>fpz`55K1NrPKMd z@Z0+P#&4_Y;n&o@bXs5dZT)TIw_Ww{YieIw>nH1nb2_)x{-XSa-&WQ?#^25A55K1N zrPKbE-;1gfzpd{`#cx#mFQ)p+PxCjQ->uBQ;y0@Oy#7>vCkB37f1-Nv8`b`a)W3|s ztfvX#pXcw&Z&Ty< zkm})QwZAF#ul$_Txvlnd{>qPaPUCOu5%q_k)qY<83cu@qsygwzj`?5wMz#Obl)v!1 zPU{Tg?>gpR@f+2CUVjR|>)s#uUH6Zw7r#;Mzn}USelzAT{H|l2gWo0U55K1NrQOf( zb&skJe$PqaXSM%ms;~SWX#ALW;b*m<=kLnz{>JY+s)wJ|{{5+c<>#EvZMC2CSAK^E ze%F0Z{l#xo`+5DV)0gP3=pk?_c4!@t*VD# zQ~T0dKUqJnb57^B+Ryn5zb&kP8h_XAQ-An1wJ)9aFZ{N=qB`;0!u&6OquPHZ)mMI+ zzxn)bVg41rQSImTr}BGY;J4)y)r;S#_FqW-%lMlyf93bBf!~(T)L;BYwV&6&%5Sgg z;K#fVKdb${DSzd+yYV}sdiYuG=lQ$x+u8ViL-p{p+TWS_SANdv+*bQJf91EO@q0r3 z;b*m<*T2H=+MlaV{H|sG7r#;M|2*X{{I1nH6XWj^)x)o;ed%=k7k<}%*!W$hdiXW9 zFRk^H&+m-+3%_ew=k)pAvP%8o*VMjr+Q0I9Ty^j}C54~W{^O~>^3yyGziXL)#cx#m zdH$~a9v=8z`+e1m->CKrtaXO*x0(4@{6@8(*Pp^~^LGb+n}4Z#@f+3t zcT@kuZ^rzU--`pk&7Z5k_>F2muYYCyZN5u&@H--fpVj_dDSzd+xAA*I_3*RW&+~WX zcU$B4P1VECYX7#>zw&cV=eF9<`76KOjo&ls4?nB@y#5t_U-^yd;K#fVzoz!3)A3vQ zeMRd`jK5W?hhJ0s(rJC+_m!VDe(O{Zzoz!3wSKaGIHz-4?Jvq-_4h+n_r5G4I3AYJWq@U-_+U{O(pg{H*r#{9XB7 z-uN9JLAw{k;Aaew*G^o%n5H{ujSd?Z2Dy z7k-R zetR3gZ>vB2toHNzSNLuGgX-YNybr&o_NCMLv+&#ao5pWm_3&$IUplQX{5Jlo@!PC= z_%*dJt@V@j!#SPXYJXAw!fzw%ALDPk`opiOed)A+<@dbm#BbvpQt=zr{`0B6^3(jy z=XWFXulS8>Kd(QP-%|s>jXzYq_>F4+snoxWzm3j$Zuu*}#|M5Jf1>{4H>&--{#AYp zs)HZ%KK!iq7gGMpZ$smEpX%XfwV&tj%5Qz+_jT37&uV{t>Rzu~l z#)s4&epdT={VV+DKTw_c%`^Xt->CLKNcjuDd95>yzj@|g@f+2CUVjR|`L_pt^Z%fF z@f+3t+o^xyH)H<7Z=Q8d{O12r{l#xo`+5DV{2o*t{GO4*&uag{l)v)3xA9}%g`d@a zp1&)B-*?m>epdTStbhJ@e#U>d=Gbr__80y8 zKbfE2H~+g={`Zrt_NCMLx8(P~^E3XtHQyZW!@hJ{pWpvi)L;Kz)JpW9N`E|2`<;J( zYvqf&UjI&8=zk*pSg)=2Z%qBu`@ix9UB5$h=zk{tWTN(WoT1+9-|YDlzm?xoziZVO z{b$n8CTc(b`(cUS#x=U0e{TyFzm2y})P9HG#!Gd*IE9Ma#yj-dYQMv8ggO^Zr}yclgb}s_VrmRNUr& zsn=Hf9e(qSA8`s5xA|Y|wbg!y-!k%NelMvXoKSI_|J_9G_xK&q^>9Mr_Kk_!@A2EO z>*0jLO>@Vn_Iv#H>Uub#a63Lx`#pZM=g<81s2`kA`02aHsP;SjuKBI57pGA8U8etU zwcp`)%`bGlIEBJ*o&LYoeuv*RKiBo*6bipN{eP?d4!>pOPyDX=d-W5iQ21@u|F_!j z@jIdG;e?9YHQ%48{T{z3bv>L=al7WNiQ4b+dtBGU2^F_%-kGTV9>3Z1XMT^VADmEe zyGGwZMz!DLw@KH-356f?ztw(^-x^&HClr3nzgGJ_ek*l7oKX1PGg13JezWJ#{8<0s zgu?IZ6Sd#rx8Z$VFHWK2wt@NIYQMv81M81Cg^Jq-=3lG*4!;er>w0kt6~7H%=(W{; zhu<>tCw?1P|HLU&{5I%22pmK0_xRnf>*0jLjrredzsHaH8%`+Pn18MId;IRw^>9Mr z_S{76_xR18Kl5YVgA)q3lM}Vy;dk|)biFu*!j1XgYQMwp>fh>maSDYS^RLx@hu_t| z(e>gK3csy-ZMEOww~YLW-_@*t;uH$MU3zV`-{bd!u7?vUZdWt^TkZGwF@M7e6}PLI zf35a={GQhJa6-lH>K{+kevjYm`7=M(JvgD_cJ)USwcq2nQ`f@@g&Xs~)qaoPCS4CF z6mHDFR{K4E8+1LKQ1~65sQn(l+4E<9tb1@m;rGZy?RWUieW>fjDOB9%nE$QzJN)KY zf5a(N+~$~nt@b9y59Mr z#{6%!-{E)FpLD%Ag~E;b*J{7R@2WrOdT|Pc-_3e$wcq16d;Y}lD%L-73WeY8dTq7e z;dj+{b-g%+irZDp|5p1we$3x+LdESW=3lG*9>3>xJ)BT+yXxbK+VAjNM*hr?bq`Lc zxLx(>MD6$Z-KOi|gu;#a-)g_dZ>O$@6ACxxU#tBdzXe?nClr21CThROZ}$9|AL|~R zQ1~62sQnHP;pz&{BO12;kTakN1Q_8#{6rw-{H6Z16?mpq42vzudVhw{FaeF z@mtUOCr+X8TcOuh`#pX~bv>L=xH11*?f3XGf5QnCxAn}wR{K4E59)e2q2jjwdlR+a z<2QT$%#U>sPN=x8e{G`nd;Bif^>9Mr#{6%!-{W_ou7?u}H|Aff{SH5#(*?g!`0dkc ztNk9o+4CoUSF-+zQz-ntrq@>c9e!8-K-Y^?sJLCp{BO12;ddqLk2r;j+m+0}R{K4E zFX?(Xq2k7K$VRo_;kS(ZnIG#OoKSJQ^4Al!-{W_uu7?u}H|Bq<{T{#DbUmCHo z{A;z};m32^;1>$NReEi;-{H56{E6Q>)<1Cyh2NZBTkZGwJ*Dg6go@ib=6|dG9zW)9 zIHBUUj``PWzsK(}T@NQz+}6D@QTsi9v**wJSoh$Bircz(CThROZ@sRE6ACxxf2;i- zzsq$!oKUzi|61+$_+6^&;e^8P?upv(@tZw==Eu4RClr47Ow@jd-`clzy*P!6+gj#- ztNjkYwX8ql6e@0OnSZVJJN(wZs_VrmRQ%R{uGd!k9e&HmpZKk1{S&89@mu?aUR&+= z_#M*qa6;k6{BO12SjVwc79STk{KDFHWKGo7Zcr{SLonOft zDEzkSwbg!)-?wx3Z1 zXMU`Ea6;jCc%t?@{8s-+*NaoAxUFXXx7zRUTh00-PNCwqn)%mizr%0!o4Q_{Ld9?O zANAU5zr$}C`4hj@tbgJZDt@c~qSsdYJ$?`9dN`qQWB#|=@9|^)h7$@m=3lG*9=`*+ z9!@CSzCBUt|61*L z_^tY_t{10J_-)r~tNjkYW#mu%RPbO-=$8YxhnIG#OoKSIF_3=dQ_xSDB^>9Mr#{6%!-{ZGM z*TV^g8}qN#evjWKT@NP|eh*F5evjYm`7=M(JvgE8J2FxG9e!8*RM(4BsJLCh{BO12 z;dce=k2r;j+ZD{eR{I@(SG=$5#VJ($uJ}j2w%YITTSorG?+VsGaSDasC3;b{_@6uqk6puD9>Ns z_CNY zr~K*tha1md4*iBy{PtMw?@9G({K0LH*09iHQt{*Ov4q;+eTMq>_b(#1bDmrN!jI=K z!->DY0>4r1=f6Kz`0@N=a`4<`_>F4+7b$|1$n&%wPENoaNxRP71%K_NCMQmEV)9gP+!(;Age}WU8CK< zOZ8>^-SVjF;P{$U{6@9^=o#uK+{#fO=Ms@Jx z^UwIR+Fz6MSALhO4t{q?;b*mfX{xXMw1x%0uSwx&wSVy$>Zkmi)48qobN<5bX6AqR z9hAbaseNg8{PFx^_}%=8RQyJ@|7NN${CNH{{BHiGRQyJ@|7xl){CNH{{CMs%{6@9^ z${Fe>{ASEw`MspR;>UBB;Ww)Nms0;S{&@a!@cV`oepdSjQhnvOUv=>NrWAfw`+5DT z{PwC2e#fQov)bRA`VaL}e$MIKR{J@B<+n$D;rFZ*epdT={VV+ReByy0^FI8V+Lunp zZ{c?n>kRzXN#WPjzI0k&`04q|1HU;b{F>UA*7^xQ=X7qX{YCi;znfV9;I~-{zoz!3 z)Bcs;3DxQId(-!&;y0@O6RE!PW1bd2p1TacQSImXyYhQnbsB#>cNu=8+J8LtFXNBr zFVB#_@_S76;&;;zrQ$cL{k;BFew$i<=6(2C?Qcr?E59|WgWo|Z{H*r#{9XC2R2}^8 zk;2bve`V@l`8lU^TkYrkl^^RI{Jt)QpVfX|{|dj|@2gJZZ#VP5_>F4+{gl7(+s!&7 zemr*>exusY>rdgg`*qcc-|jD@;y0@O*Hiz(Z^rzEAJ1QgAJ1Ke->CNU`d9hguR8dB zQwl$;{rgk?%I|>c;PL^N9z3%=_?bYF|2?KMOxSUwPoSSqi_V_NCMM!jI=H2fwXS_%*fPd;T)- zyK_3X)&8RVg&)sZ4t~3&@M~&cI?Z4Cy`VaByd@RCQSHBw>MK9yZ;ihjnSaG^RQq}T zsr;T+oyOmdKbDH$sP>;u{mb~f(K*j8f93b2`fB{~+-3NUYCo@kmETU)!H;<#epdTC zQ~t_tlj`92bt(L;_VfH*`E5`g{0>XuXSKf}^{@P#)48qobNXf{cKt;vexurdH}x<4X3Sss z@to!0caao+P3`xdzZ~2iRvrAFmBP&;bruxc{`CH@f2IgP!8`XYZf6Dl~;d#};@nfm@jcWh-)W3|s8S__uC)8K`cUzcT)AxJ`BNW8R0K)&6ZMf91DRb?|#c3O}p;Jbzby3#x`lESa4{oeDJ;l^{8 zgWn}m_%*fPd;W6dcFuFlU-0qM3csfIrQOdj&o7P~C#CSS+CQ4=D?jFGjX$2d z48KwB=lQ#gznu@N4vycGir=XAA58tr_?t0*<#)gOYW(edO)7q)+Ry7>9e0qZ3csfId(U5v+|KFTR{J@B;m329gWuPr z@M~(n_xxr0@A!f0Q09N}8`b^~`uujV&WIn+U54MN_VfBv`Msn%jX$2d48KwBzm)oy z@i$}s%8zwU0qM3csfId(U5n8_!t|eygPLYihsu{AF@Gr*m8FFUnu|@to!0Hz$Q(Q~T2H`my~f z)sf?6srZd*|EW}8`LWJu{PEmn_>F2muRmq{ZGTL4aC}25exurdEcGwrZ^rzU-^1#w z@yBzQ;Ww)Ny#Cekw_bJdW8R0K)&BaFzw*0Wb@2O|6n<9wdH$~aE>#`;?v}#OYX8#I zzw&cV=eF9<`71xxIr!Zpg`d@aUjGU|o?i?CNU`d9fKQXTw`N#SR;e<frZ`6n<9w`&0kQ&pDmjYCq?%{BBcU_&q0upVfX|{|Y~zQyl!5 z_u<#n{-Wm>7k+xa^1yFS3csfIrPKMh@Z&kl!Eas)zozzk&tE3Db2_)x{-XSaAJ171 zep{vRYieIQ&0qO_OLgRUO)7q)+W%Inul!hNH2!$*GW`^?exusY>tE%!MRoA|niPIk`&&}}%5S~u;CGJ{epdT= z{;vGis1APjN#SR;zb5ss{G8Ldt@d;N%8zvpeut&-v)a$=U*WgyN2(J)p1TacQSJXI zIi*-;DVSziq5@;>UBB;Ww)Ny#7^w z52y})$EEPI+J7MBulx?F4t~tL@Uz;_^LOQUKy~o@wiJF=`v+40%Fj8S+iE}Oul(** zU-+Gp!p~|yuYZLf&nXUm%=_?bYJbu5iwi%VvmE@kO5xYkzH~bO7JfWuIrwdt!mp`) zX|139`4{JOZma!8`3t|Ttbg#kSqi_V_NCMQmEVi1)A-x^j#T_cwf|zOul$(5HU4<+ zGWu24syg^RCxxHY{-Y^><@bQ<;K#fRKdb#be^-9@s}6qO zk;2bv|Nhj!@^en-w%X76E5AePtMPZ;_oU)Cs{OqF)$w<+>fpCk3O}p;i&Or>kLN50 zzni7-YieIQoqr2Ip0gbMZk58Xsr}ybmm{}xI=9t+&R_WH`N{*oeNy-}wJ)9KFZ{N= zqB`;0!u&6OquPHZ)mMJZ-x_~BcNu=8+Ry7x<@bW>H2!$*GW#EvZMC2CSAJX67k*Dj;b*m<*T2G#=NH3|=Ptu&Dxay#d_&-IQ~xslc>eMX`76H%RIl-O?Hf|@ z8`XYZ|LXW#+4?i@!_R7eWy)XqU939z?UTaKYCq54mEVP`gWnxe_*v~=nEF?K>A% z`#FE%x0&@1es@dZ*VMjr`uQpRcz!YOAJ1Ke->CLqPxXZ#&tHZg&s~P!sP^;vQ~2@x zW%zCWrBwVzwg27Jzwnzef91zICw@G48GfVM&+A|1cbDqmcSH(5tNpuD{>pE!>fpz` z3qPyzw&cV=eF9<`76KO>I=VTr0}!a&+A{|$8(B<-z8G` zHMPI!`Nf6bSD3%yw@M1XruL=N@n87yoaNxRP71%K_IuA?Cbx4sx7Gfl{DmLSSq^^l zQusBsFP-ME{GL`FIldF2muYZ-_hSr~XAAVN*8&dwtZ>8$scefONR{MGWuKX@n z9sCYT;b*mfdFo&JIj3`5?dSZJAL|_a?vujLYCo@kh2N%kRj2XCbC=;as{MCU{=#n) z>x}sE+-3NUYCo?(g&)sfhTo>&NyTqe`#(ti3%?oj7k)f{8Gbx>8GfVM&+A|1cdzQ; z_k zmcq|!Kd*m0qj3csfId(U4c zw{tqT)&8RVg&)sZ4u0FE@M~(n_x$DP|GetR@rM2}yAJ1Ke->CNU z`cuZ=#-~&R#~C|Kc2e`zftYy^{quPHv^)LKp z%wPEN{AKv@+-3NUYCo@kmEVJ^gWoe!_*v~gnDSSC_o@zl%)9Wj+RyWM<#$MR@H;7m zpVj`M)W7m`PUp7T&-p9AyVMtc-;u)4YJZ9K&;QQP`0v&n8}7sYqJRG<^HX2{yGcBE znf_M$(&_%ao`d9k*m(XjaKc1-lze@EfKhIs> z^Z%$$`c?kDtdCEted)A+djI+NrS|+^s*`^87U?Ia)xNaWxAWI!3epUZo z7|&m}#&fWTpHKTIemuVzexc&W^OxZmYQMve=Pttug&)sfw%YIU`ODVeH~jqU{0``PIH7R+#zgJ+`0a1}q`^&dhc);O zKcDtbpWpetjh{5Q9Y3wXZ}@qwZ=c`D?VRV9Kl9tu_(_A?v!^xq4L_guPoH0&Uktxc z`d_BkR{I@(*ZgAOhX%KGrxkwf=hOa)AJ1Ke6B_*HPOJUi_*+K)#E<7L!wC(3n@_8K z=`?@lcS6_02^BYfy*P!68_!>cU#R^KKc2e` zClqcxf7xnZTJL}L1v~!cB3=Lbzz>BV&tJB}ul>B%H-5{=pZM|IWjLYmv}k$aAW?r+VAl@(D+G%8}lz5rNM9bdA)!0yQ}e&2Dj%UhBl^%} z!R_Q}wcq2%^NZmZ3OD9|tNji?p1TYuG`KPU!cS_yH~x6;GMv!hxAnBzm!6g1GV&*W zJa-vRXz<&0TJ3lFy`byigo+!_Umn$dkKc*LNeVZfzibVD!_VvexADhwmxGfOemsBK zYQM{G_WYS2>l^%}@ZnzzKyL&tJB}ul>B1cNtD7{CNJd)qZdMEhB&8$8(qAga$vYX;%APeh=$< zIH7Q3{nAlLj~DUpPvG-|+LZ^Sih4lLog_r#1KuKd<#|{6%i(bZ)EtoImqp zeS@DAZajb4YQM|xLS0WEl)lXWR{Obs8h<=@8BS<$WB!Go)V{Rde;a>1cNtD-@Voi6 z+V76P+4CoUSF!$y9~#_lKdttA{I2@0t{10JapU>R@C&uy3O)qaoPl|Rt+;uI=wJbxK}q4qoccl^%}@ZSjVx7zRVyRGq)1~=wk_(_A` z@bh~A9)EipKWT7#;9nP1DrcH1oNh^?u$wcbicNtHx_?vr>&c*NaH$wlx-+cC; z{K4XH;Xyi2{oSK_JVANm^Ot)%&-~ric@pu)=P#SZ-{jZZUw`-h&A+AdC*qIKUp9-s z$*;HPyZ5j3?LH5$|LBkXhCdO1eEzcOJoUFg_1q7+pZRY(&-~5m{E5XI^B0d|@i+PP z_SbKJGdh1_@pj2U7JrjpZ_nG`@cyGe_8b1#fB3unAf0Fa`21r070Mf*zl^^^=ZQZ) zcNtF*Z+!l;>0E4o{hdEPcNtF*e|-M3>0E5jcm77`KltNwm+=Jg$LBAb&QpJzRgWi# zH|D?TJo9&9=T9u&n7?=wi@(XQx4(Y-JHPWM7H{_-Wbrro_4d5|4evktW53}~EZ!bI zNavY9KED`$g?MBBo6Zw|^R`TSg2fy27k?uDy05pt{>~qtyNoAT{EZ)^^X&Z_q5t5I z&t1k7EdEv=r1R9@L#oFUls7(qxu^5Y-#wit5pR6{vRV91e*L@s-PQRM@i*`7gDn0g zzuunj-oMhf`#ikmEK`wf5WKm1*Lkj^uI$G@j~c`B4QK7Sd1h0YUy zeC{%yAl~@=Wz)IX{`xzAeC{%yApZFLWz)IXp6~pP(0}lEJo``nApZFLWz%`;?;6$P z3F3|UZ#vKXZSMSu#T)Y%k7DsR`SteKZ-19|{>0+#(St1hCcoaEx4+^2M}O=${E5Ze zlLzTM^T+2GIP z_?yfAlRsGetv^WTslO*wk0&T^eExDz=b68UI!_|r`21zF_?!Itcl&#w^C#kO?gs~1 z{7rtnJ>R{5rEm9nc>PCz>^J<0_~Y}JP3Nhl0t$Fcw94;FvZ57K$+ z?wBs^6Txd-~O)Z{E5Zi(+64nO@6&SZ-2x4kN((i z_!IHR=P#SiQ-9M`k0*#X=D+DY@yF*b;|UgT%wPP8&c*iE-}&Qnm+=IPzfA|}JbnL$ z_aFT6xyyKh#oKuY>HH9X;orYI^xuC!^xxm^zFzV6F2JFbRPeEyWsyP-&6e@or9N%|DmGu_}{x#^FsA{Pse6;yiEL` z^=vx-&i~$9^~3x3_nrQI*GYe4(>h+Mzu({Ke$)AP{`cOK_ix-b$xYKm`7@nwjQ_n- z<8R~VIwyad=8E!XI^X!6Kd(Xc^0)ERNp6}i%Ae_cMne<=wt?K2^eY$Vc`62x` z{x*Kxy@%ua`^n#?j?OoJ9PV%4zm4~GeLOG9-$v7U{O@I3e|PAd{B3+yl)s+NS(>Xl8F3Mj|=eLFaTYv7;eVfi>|E<59CjD)ETldRfPvZmDryINP+n&z<#`o_=_j!2zxBj~C(~aHtZBOTa@F^ZspkMd$SXZP+gA{p;yG{`acQ`?ujGozwfb;cHRvUr*;R zh2Q_?{TtYS<8Q-rlkeY#J-T1-Ur*=Hh5MWLZ^IQjhrc^T{F%< ze;u8lwL6?|{GGK;=kUke#a~C~XT|-~ynknH(K$RW74g^6`B_`S{f$5O>Ap?phxFh0 zJ4^eIKfi8Rt^4uU(fL_%|F!-e(K-1$i}^2qJ)J)i`fvR)r{(V~=CAzqbROq->+c?& zlfSdx73Hs|^LxVmtv~m9c>TBj?wIs<)(5&@{(3r(`>*x4O6Ty${Kuc^d{yYb^*5$- z_`6cXpXogApVr?3ox|VNBK}P03&Q=aKlkarP3N)y)}Qtq@84P1>wf&1&g1@T{H=dq z=j3la^I!gYI)6X(-}qb4o{_)x%wPHI={)YA#^3rkbWZ-(?-S*(r}H<${f)nY{Wt#B zYtP|t{Q=!Ce?6VY{nz@tPUrAm2?b7x8C0 z-yH65{kc!~Z90$rxBf2f{5`Gv@n<@Z`>*kL=6;>SA9Ejn9i5-KKlI=DJ9D?r;cvBw zzmCq&jQgkYcjiu=!{1sFe;u8lxij3~_;a7`+jM?N|Bb&hwg1Zdw@LToucPxb?-}-Z(?%Q-8`)~be&+-19d8_WnpXogAzsBFXPjpWH*6k7Hucz}*LjR4wb?h1W zTgUvBzn;$H{%QQJdr#-^H&w)6N9XI_3->qv2KL|hTcXs&hOUWH99AM>z)NJ+~4|hpYGdq9{X?now2*~cY*H5Uq|O>#QoR!JL3hNlfN^V|MJ(<`3s@{)*tg* z{?1_j%3n|CasRabp3ph@JL5A^{(3rpBHZ8j8`yvA?~zG=XMCmm<*%pnxc^#z=j$B) zt{3rVIzK=3-}>92bNIVe#GmOr&hOTr24?YhyNEy2`MPj_>(70 zul+dO-}oEYf8%eh_8j};jQP4Be;u8#jr*_lcbCrL?`aW#rt`Z(|E)jfwEV4Q{>ooZ z=W%|w{%+Da`CI$4D1SYj-xTg|{kc!~Z90$rxBjl1^tbkP-7kMVoyYyx`kSY7_+#$l z&vZU7^xyiMp>z1VK*XQvJkIad-!z@W-$f$+Oy|?W{jERu>Ap?pvH!;3>Dqt1e`_z( z{rKzX{Pej08h@w1rgQRlI`d!tdOCkC^xyb9ojoIer!#-$uc!04e;R+MKc{o@cluUQ z{(3rpF5KVv8`yvA@2N?Dr+=;c<*%pnxc^#zm+Bn;ZWZxoI=?jZ-}*aW=kRy8h(FVL zoZqd#b9D}X_lo#4ou3=-Z~eJX_iZ|l{kQ%$bp9UH{rEGT$Nks%TeCyw@W_)_ksW_**FAucPxdpNIP!f9}(Lo6ZmEzwx(5`;YJ6 z)0gUg{B?A`Chou1-vc@)e`{V8<*%pn2SWd?KjyUjtzrJkUr*<8ez*Sa&^h^A^QI_& zJ)PeX?r;6M&%^7#^>@ppzcugbe);R^Jnp~N--OQLkGYRO)A>Z`zx6jy=kRx#h(FVL zoZqd#IXZ{G%SHT|&gX>tTYv7;eVfi>|E)jmIo`iDSL=TKna<<>Yy6$|j?T&7Y0Q85 z>*@TR(0}9aH1>@AoyPo?zn;$H{%QQ3_KMEQ-)Xx<`RnQYm2iLKZ(#q8ztgnm@ORoi z-7kMVoyYyx`nyW!@OQU}KhybDq5sz3r8q<&vbrqxWD!1 zKHazJJoexEJHPYyxbDZF={)Yg#^36_I)^{zKK?p7U%fZ<-}qa-L+9|fRK#CL=d0uX zY5c9;rgQjPDdMlA^VQqJ{f$5O>Ap?phxFh0Tdn<9-oLfFAAcR4ua5h#_4k<0$=~YN zMfvOL{ISq~>yP;@f2*0l^4HUO+&`_q`*cqJR{v0xzn;$T3-`DF+~?u--}<|2(%u-(D;g7kGKhyb|(0}W1Lg(;zwTM5{d7R&^zcHP|-?bwCOy^_a{??!S zbl;})*njI!dye;S^^Lk8f2Q-e{~CX%eyDTucPjH={(3t9F!bN}JC!{nf2T5k<*%pn zxPKadr@p0g@^|XDqWtxA{#LlZ@i(yl#^0&hbH(3O-H*SH&QFc|ul09>&f)Jt5r3xh z8$$oBzpHc(f6QI{na<<ig17H&waXY(|PQ_^>^u{zf+&p{qon- zdE9@kzbQJ0KjuFEOy^TV|Bb&@dvy+fYeoEZbiOL?pT^&+-8zTA^&tt@I)}fTMf{o0SB3jqf9}(Lo6ckZt-p!R-|e~|f2Q-e{~CX% ze5!NucM9`g{(3t9H1yy2JLN;2!{1a9e;u8l68BHz@09m-4u8`{{B?AG%KPE|#^1pH z8-J&0&#^yN&DQ<+>*)NHxc^#zx9J@I9vAUvI=?OS-}+-t%ik%?U-|3lJkIad-*q}C zf2TYz%3n|C*M<9Af9}(Lo6ckZt-q@#{hji%?w7xw&g1@T{ms%j{4w|OXF8u1`fvSB z(K-B`BjV3=9_M%CZ{>cS!{2!#{yI8exj)?B`g5P|+jJiLZ~U#){^R{SI^SFOne^2S0{H^>#l)s+Np9=Rk z{s#8n`g?5B-^#7JU;cVJkNdCnccISV??w@Srt=F!|E<5Xbq;^Gi}*90$NAm*+n{s! zyHmuU>3l=DzxC%n-M8sH_TTzj)A_qs_v6oW9`|44Z^ag!!yj`We;u8#*b@40{HpzmCpVd=l<&{JBr}Z8|@s|Hj`6?LWSMS1#23`0MC= zMcjX_zk75}{#HCI%3n|C_k{jif6Qt5TfzL5zn;$H{BHf-qI2@M;#E=pdOE))+~4|h zpNH3f>+gn1e=FY9{qon-dE9@kzXdvnKjuFEOy>(i|E<4SI)}fDMEse~HPd~f9ubEx^L5Y?7#JQ zcIWS5-H$)hdE9@Ezhygh4u8yj{B?A`Y-i}d@waS?&f#yNh`)}`m&N_l_*?d+&f#xd z#9v3}%f1ZvH~!qG`!<~)(tqP`nf70K|5oaL{B?A`EbhP7-$Oblf6HDL<*%pnheH3Y zKjydmEo1)5Ur*<8|Fr(@(mDBC_O>X0J)Peb?r;6M&%^7#^>^E(zhytv{qon-dE9@k zzvViIKjuFEOy|o(|E<3TI)}f@Mf{o0Ap?pvH#ZJg`K}AbwB=0=W+iv{+4{BbNFNK zKy)7iumj3d`a9tjlU&3bPj*3Mf`PizGO$Zzwzfj-M8udkp3Hg zOSW|W*6V)!b#%TY?!VUG6FMh#}wEiB@Ir&@i zfhd1Hoj(xnZ~eK?!|T8Gch981B|p;r^4HUO+<&dVbvlPX=05&R=j%fMt-s|uhreq@ z{F%<<{BHeC=p6p87x8C0p9uH2{@kbgHl4@*TYuVf%)cc!>wf&1&g1@T{7rnUbMiOA z{FlF;&OZ+QH~uErGx9gV{FT3+&g1@R{7t;0bMhx$#a~b7?}Ymse*^n({7q=j6@Sxp zKmIy8pNRXf^>>rb;qPG)f2Q-BLjSG5Yjh5O%w7DM&g1-U{avMV_u>X5Mo)A_W}f8%fQH#&#E^&eKD z%>0+Xp3a{O{kQ&@-}1MZ`73`toyYyt`g=_0oA4Oy_ID{jERu z>Ap?pvH#ZJ^3LC#x*vb0^SJ*Sf8(F)ocxV5|K+cz^Up*7jlXgB4F0Bz`0MC=Jno;y z-}r|*hrgL3{yI7z|1jL&_#4=N<8S=E&fi?!kH3!2$K(EM{oSE+_Rz)}Q-y-=_1}f9vm>Nq^(7>VEm_={)Yg z*54eR!yj`Wf2Q*}q5sz3G@ZlWc_RKy=W%|w{-)?0{w@&lXF8t}?r;6MPxoy)kNr3P z7JbwCyF~ZnucPxtasM^`7QLc#^0$cjFMmCqzY_Xy{4HY7$loI7ul)6N9`{em2^(iumj3d@Syt#^2bdI)}gcBK|r$ANw@i-}rN%?%Q;JNdJw$ zG3`J8{I_Ua_v5dl^Rc-9T7UQHocxVFFUns}=l6yFTYt=H`5R;Y%3n|CaelY{ZqqsW z8+%=pzn;!-3-`DF+~?u--}<|0(%;zIx?lc!I{zE{&p$uYKljmeJ~k`#AN=wA=ARqe z|NPN^ob1E7ehzH?^GDnMwP*PI_~$;F{m<2m`zQYXzpeZKRrkUFBz{@Z`M-wyL;pW{ zRrUX*bMU{2J1RQ=r*J<0{=cmHf6zJjUq$`gsqJD1n$)@w~^r!l{ zs{egSV}pIZ!_C;k?{t2%iql()rO^lUm$ z{4IW6_3~6GZ~AB5;;+zo;%_nUtvnUV+v44NHk~K_M(98ITl}K#lcz%Y)Bn~`{1rOS z{9UbjJVCtOQ_*?mPd}f#_=EV<&+YDszsaxH^QZd$)z>dkJ)R)m9;xU&^EbTz=pXVZD|{*7-}y*w4-ZmGg-MSA?P~P;vH5{b#%->qo;|b!A`ENSU{4G^Io*@31yQcHZ-?-}W1o3xW zMdz8n;r&N{>_0p~{M}U1dE#%;N2-^nLU~)n{5PE^{uZ%+gA~re;f2{I?wzK??3n(WB%BlI8rvG?!<mEKdk;?#e|J=Lp7=ZYGu6vep}d{U{5PE^{!V89 z$WtNSn7gL)#NWvus9v55@i#;Nx9L3bH$wlx-^uJhc`C%;9R1&>^UUAvs>c(=8}r|E zp7~>b;|a>!$;@BVdFJnW)#C}u+sQ9fbe{Pe-hcGR-oq1=x07F~=sfc`TlIK?cw_#X z&NF{gRgWi#H|DSDJn^^ifa>L`5P#?EFVlJEZ+QQ~-$M4EJQd>aV*O=0Py8)>S@rT% zC~pgy|EBZA-$M3}JQd2@LgugOJoERo>hT2SZQ+*{ohSZA=s)^n@8Jo`+rn)XooD_o zQazp^-kATU^UU8ls>c(=8}rw6p84CPdOSh=-Brs-x8=?Q;?c(=-=!6uXa0uwAN{fS@C5O9MMdX{ zzXflqUY-i&Z2|M&be{NI!2Xe^LU~)j{572?{uaEbdU-08zXdz=Y&uW;jnIGaw}Aa8 zPlfWgV7H!4=b69DRgWi#H|D?TJoCr=#uLOF^Vf8q`MW^%c!GF)prZ54-|+sUKlUD; zAl@FS=sfXv;x5(8Qz71%|EBZA--%mQFHePdWB!`X6MrXurFwZP#NULTP3MWf5&94Q zPGtYdQz8CV>DhFi`FmLPc!KhFBJb;|a>!iOgTqdFJnK)#C}u+llW~be{Pe z-hcGR-oq1=w-ev5=sfecQuTO(cw_#X&NF`tRgWi#H|DSDJo7hS^>~8#yQ-q|%-`_- zqd)c@o*@3NtLQxOH~)vKm#0E`o6r0=ohSb0vw!5NP~PS+xWdFJn0)#C}`jrngn&-^jJ@dWY4{573t{w`BJo*>>H ztLQxQH@yGokG+Q{h_|OII#2wa@U80QsSt0>f75y5?}S~dm#0F!F@H_xiN6!RR=qqG z;%|+fP3MWf5&94QPGJAZQz8B~=-G6h`Fm3Jc!KhF0`uQ=p7~>b;|a>!3Cv&9dFJmy z)#C}u+X)|5be{Pe-hcGR-oq1=w-Y|8=sfecUiEl_cw_#X&NF{2RgWi#H|DSDJoC3y z^>~8#yP=}<%-`_-qd)c@o*@2ispvfMH}6NPm#0E`o5%b&ohSb0v47;LP~PS-e@*9! zzj^PfUY-i^H$~5;^Tgi>{Re;Z*njd=h`$+nHl1hwZdN^>Al{h&rt{1n^BYePZ_HoQ zdFJnG)#C}u+q`EgI?wzK??3uu@8Jo`+q@SlI?wz~S3RB}-kATU^Tglr->P1o3h~DL zHJvB^j^C$xc`C%;*?KmeXa0uwAN(E9{*$Ld{GG37(|O|W_~%tGPlfV!JoDdlp7~>b z;|a>!@yuV-dFJnN)#C}u+wq@Pbe{Mdq5tTQy@w|#Z^wUG(Rt?YJk{d~;*I%lI?w#A zS3RB}-k86p^UU8`)#C}`@3xB0Gk?STkN((uc!K!5tD^J7-`p=$FHeQ?HkbKtI#2w~ zW&g-iA>Nq3rt`$#+>cZ*PlfoKrDxN5;%|ihgTJ}#KY1#|-#k5=&NF{^svb`eZ_Izw zdFGG#jVCB?bD6)U^UU9ks>c(Qx4AD>be{Pe-hcGR-oq1=x4ExXbe{Q}t9m>^yfObx z=b69hs>c(=8}rw6p81=qdOSh=U0Bh1=5Kia!QXN0KY1#|-=%ssohSZ|dsX%FR48x9 zG5<~HiNE96Kk`&4Z^tozP3MWf%bGEBq zo(l2C{5PE^{^qcMSp7|TzfAq)R!xNOZIqy_- zp7|SBJ)R)mnE$5p%->wq;|b!8`D;4Q{LNN9o*@1{Re-u z*?;m>h`%*@Hl1hw9#uV_puEjy{+rG-f6Q+@L3x|a{573t{_a&ho}j$Vey^hQ%-`_- zqd)c@o}j$V{;;C+%-?F&;|b!8`ENSU{Ee#~PY`d+U(^(d|{M}H|dE)Pw4^%Hth4OX`^WSuy_&bLEBTt3$b`0~^be{M-=1tYhQ=$AF^NpTO z=ZU`&`Van&VgJcfA^xW5*>s-yyI%Epf_P*8o6a+T%x^qFyfJ@G=b69DRgWi#wU(aTs@o4Gk?ST5B_Gd|KzCJadFJl|)#C}`jrngn&-`st zJ)R)mn7^j;%-?#|;|b#Lj*8ARf5ZEa{@8nXg7~|qqVvSx_rFrTJQd=N`ENQ;{C%JO zBTt2RWB!`X6Mx_Tk?Q5C5Px&@Y&uW;jnIGa_kH%CJQd<^fu2q0nZLVLk0&T^-)H`t z&NF|^Z#+SH`#$s6be{RUS@n2=^7j2#Dmu^n4evktWAEV!%G>wfsOUWNH(&L5f_P*8 zo6a+TGgXf#h&Sf1={)l{UG;c^_`A5G^UUAy{)4|6>_2%b#NTE;o6Zw|GhSD{JQd2@ z4CcS-Jn=V!{Uc9>@-~C{YdTN-&3In*@>D2)Gq&m3be{Mdq5tTQy@w|#Z!>mQbe{RU zO!atzcw_#X&NF|^Z#+S~F@H_xnZNT?k0*$?`zkum{0;9v`eX0m3F7aeip~>%-}_qi z@>Ga7=D+DY@%KIUk31FPjrnUjPyBuF3)Rb0A^yhnY&uW;jnIGa_dWKXJQd<^xt>ku znZE~Bk0&T^-(&up&NF|^Z#+SH`yTVxbe{RUQ}uX)^7g&ADmu^n4evktWAEV!%G>we ztLQxQw^a3bf_P*8o6a+T^Hq;0h&Sf1={)l{SM_*;_`9N_^UUAy{-Zzk9-binuBqre z@i+Zl)yq?%yiI5Ro6Zw|)7d}rR48xLnZKs<#NYH+RWDD4@;80Ao=xY8zY+Qm{-(44 zGa7=D+DY@ptsss+XriyfJ@G=ZU|gx2s;B3h}o}&!+Rl-w6E& ze@C-20o&-^{EdOSgSJDT}#I?wzuzwrd+?P%t&={)myzv}S>~2o z4evktWAEV!%G=Q&S9G5FTdR6JLA){lP3M`vrK-mh#2fS1be{PeS3RB}{;sR&Jo7ia z|LBjshbM@?n<_d_{7w5v_3~6GZ_}9nrt`$#H1>}?70TN*=CA2I@i*;l)yq?%{7u`h zXVZD&Z-oAXziI40c`C%;G(DTnGk-U#9#0T&%zx8)=8yS}Cx|!ZujxGVcctp_1o8G% zMdz8n;r&N{>^(d|d7JiJMdz8nsj9~l#2fS9be{M-YM<)msSt0>U(nNY>^(d|c{}R!iq12C=cpb}5O2(X(|P7^t?Kav@y7f$ooD`5 zs~%4ff45Y0p7|TzfAq)R!xO~c9TlA?{-%DWdU-08x2ep3(|O`=D*H#C3h~DLHJvB^ zrhcG$c`C%;3_Y996MrN0AN);a|H)G!{^sb}be{RUUG;c^cw_#X&NF|^Z#+SHo67t( zooD{8S3RDfyiI+fqVvq(@cyGe_8y*~yiI+jqVvq(Y}Mll;*I%lI?wz~RXv^{-k86p z^Tgkg2UIUlh4?#P&!+Rt-|+r}za!ay@>Gbwi}h?ePy8MEvg+ljP~MJY{+rGde@C)^ znNY>^(d|c{_4jMdz8ni&T#%h&SfH={)my zj_UCQ@y7f$ooD_wsUA-de|J@Mp7|TzfAq)R!xO~ceHEQ2{-$hIy*w4-jrngnPy9_` z|HxAz-k86p^TgkjAFE!T3h_5j&!+Rl-w6E&e^c0h@>GbwF+H2kGk^E09#2r-rZE3a z=b1m|H=dxpO=13;&NF|vsvb{J-ln`((Rt=?c>mEKdk;@g-ln`&(Rt=?q3ZDj@y7f& zooD`Ls~%4fZ_HoQdFF4X>hT2ecWFiEnZM!vM}O=+JVE?jQPFwg?}#^5FHeQ?b_Da^ zbe{M-g8d^;h4OX;^Vf8q_&ef7)yq?%{2j4F&!+Rl-w6E&e@C$YAbnE$5p@ARj0TUD>m*($^v^Vf9#o&I$0E7j|BwhHk#p=Z%>`ENSU{4u}r1oio42bjO6^UUAfs>c)5=a(IL zr=s)B-|+sUKlUD;pgzCs!21=QXZ}{I9#0T&%zx8)=5L|u@dWY4{573t{^qM5PY{1s zRdk;D8{U8P$KJye#NTxlohSbO@5h52tfPyGFb{Uc9>^7a?zujxGT_m|gI zFHeQ?_m{nTHk~K_M(98I`wRO|o(kpfFZ=auI?w!Ft9m>^yfObx=b1m|H=ZEgn7^j; z%-?0I#}mZcV-=le{)YD-{jvA(1o8G%MdyjX{okryo(l2C{5PE^{`T)uy*w4-jrnUj zPyFrwTJ`c&h`%*@Hk~K_M(98I+t2=!r$YQ~(6i}0^Y^6c@dV{b;|a>! ze&(;~JoERU>hT2SZU2WAooD`r_aFVS_wWSeZT}|~ooD{ms~%4fZ_IzwdFF4W>hT2e z#{4y%Xa1I|9#0T|H&k?<`5WGU^vB-A6U5&w6`d#k{`@1=%TuAe{h9f1I#2xlnf)VA zh4S`i=CA2I@%QIgB0W z-o9o2o6a+T%x^qFdHa_6YdX*TJ+68@L3#W3(~8a$emEKdk;?#e|J@Mp7{II7pj-1 zLV5cW^WSuy`1=$4N1h7t#{4y%C;tBQk?Q5C5P!4uY&uW;jnIGa_b2wBJQd<^o}NwT znZG+#k0*#X=D+DY^T+(g6O^|~7KWB!`XGk;T6k0*$~3oAO${0;9v`1^+aCr^d=yHwAn z^Tgjbuc}_23gzt^=D+DY@%Ih;N1h7h?HlH=={)iG&9kbPr$YJrW{aLp=ZU`&`j7tD zdw7EK_RWrp&NF|Ps2)!cZ_IzwdFGG#jVFjV=CA2I^LLKw@dWX9PetdMzv2Byf9yRx zLHs>X(Rt$UkK0u*Plb46{+rGde}82E$WtNSn7^j;#NQu3Q@uPD;%|YTP3MWf5&94Q z{>c85r$YQq=-G6h`MY2Bc!KiwN9MojJoCr=#uJpcKQez!=b69TRgWhqZ-0EFqVvq( z@cyGe_8y*~y#4W=iq12C^yfJ@G=b69Rs>c(=-{y+WGk?ST zkN((uc!K!5s-pA6-@dn1FHeQ?wvYL5I#2xVWBc(=8}r|Ep7~>b;|b!8`D;4Q{9UAaJVCrY zRMC0nZ+QRFAA1i^5O0rFbe{P8!yeVkQz71%|EBZA-ygQCUY-i^#{4y%C;tAhRrT^z zh`;4}Hk~K_M(98I`vdz=o(l1|M$e}6%-^G`#}kydKQRAI=b1m|H=dxp{ek&wI?w#w zt9m>^dHchA6`g1PhW8)+vG?!<GbwDS9@YXa25NJ)R)mnE$5p%pda`PY`d+ zU(%zdxXQc`C#k^WSuy`1}1H)yq>M z-k86p^Tglpcd1^U3h}p2&!+Rl-w6E&f4^t{$x|Wz&epT(JoERo>hT2S?f1-o(|P8P z`Hd$iZ@*{$n$9zS533$eP~Lw3aYg5uzv2Byf9yRxL3#WArxl%N{x+!|PY`d+f75y9 zZ?)?21o6iFHJxYvR;nIP5PvsSbe{Pe-hcGR-oq2b-)$A0C;s;QSoQK$C~te1|EBZA z-yZglJQd=N`D;2){O$Rn>gA~rf7A4AI#2wK(0}l^hy5o{h4`DLXVZD+?^f003F3|U zZ#vKXF~9Kyj_qzkCm#0F!F@H_xiND`{t9p4V#NWAkHl1hwhW8)*{f_-7PlfoqP|v3G#NY2; zRJ}YE%G>Xl|EBZIAM+beP~LvW{573t{+?7lo}j$_?(>Sy6MrN0AN{fS@C4=UcUvkt z&-`7WdOShAG5<~HnZHe{#}mXG^Vf8q`CG4gJVE^3QPFwkZ+QRFAA1i^5P$bnbe{Oz z{gvwFsSt0>f75y5Z#Vl#o(l2C{572?{&xRJ_3~7Rzd3p~ohSZA=s)<|&Hj_8Li{bz zv*|qZcem>C1m$fv^WSuy`D1?L3Ci1U=CA2I^LMlA@dV{<_bU~hXa0uwAN{fS@C4;; z_ZtS9G5F8{U8L_gnU#JQd<^ zvz|@oiND{zu6lVYl(*k9|4rwKzu&Td z{YQW7Jv>2q`|Zw(&NF|PsUA-dZ_IzwdFGG#jVFjV=CA2I^LL)=@dWX9Uq$Dczv2By zf9yRxLHs>b(Rt!;*Vn3-r$W3j|4rwKzg_Gfc`C#k^Vf8q_}le`>gA~re`9(!ohSZA z=s)<|#r~70Li{b)v*|qZ_n_+W1m$fP^WSuy`D1?L3Ci0p=CA2I^LMA}@dV{<*IN~x zXa0uwAN{fS@C4;;*LxM6Xa1I|9#0T&%zx8)=5N00@dWY4{573t{^qJ4PY{1sRCJ#C z8{U8P$KJye#NRa)ohSZ&^RDXUsZid2!~8d$C;ooJ{*k9bdHW6X*L0rv`^~GWm#0Gc z`^|1Wo6Zw|BlI8q{f7M~PlfXLn{V`NI?w!Ft$I8`yfObx=b1m|H=ZEgn7^j;%-WTPlb46{+rGde>=Zcy*w4-jrnUjPyFrN zu6lVY#NR4Co6Zw|BlI8q?PUMSQz8D=>DhFi`FmXTc!Kh_llgBt&-^jJ@dV{~8vw)6dp&NF|*`;Y$Edw7EKw)5kP&NF{&RgWi#H|D?TJoC3y^>~7KWB!`X zGk@c%#}mZgbrqdw{)YD-{jvA(1o3xMMdyjXUw@=}c`B5*Uo-zr=ZU{xvw!5NP~Lvc z{572?{(k+o>gB0W{(ik*&!+Rl-w6E&f4^q`$x|Wzrs>&qp82~`^>~7KWB!}YGk?r) zJVCrMe@*9^zbjRbCy2MFDmu^n4evktWAEV!%GtLQxQH&yj`f_P*8o6Zw|U++`B zJQd=N`D;2){C&Mg_3~7RzYTgeooD`r_aFRy&Hj_8Lj0YpXVZD&@9Sq(FHeQ?_BHe0 zbe{QRe&Y$s+t#NV$zQ@uPD%G=v|@>Ga7=CA2I@%O6_R4-43_?w|;(|O`=g#LrSU$Ot>sStm2^lUoM{N1j4 zJVCrM|4rwaKjt@{puGKx`D;4Q{9UhlJVAN;)e9A!Xa0uwAN{fS@C4=USFcobp81=t zdOShAG5<~HnZK#3#}mXG^Vf8q_}g(n_3~7Rzw`BMI?wzK??3q4!Tyt{Li}B?szozrd-zL@L3F7ariq12C!~2i^*n4<__`9#7 z^TgjTx2j&A3h~DLH=QT`e#!okr$W3je@*9!zhC}X_3~7Rzj=B#ohSZA=s)=TCHqgF z3h_6lXVZD+?_Sm83Ci0qng6Eq%pda`Pf*@|$^12)XZ~(gJ)WSv{qnVn&NF|*`;Y$E zdw7EK_RF^_I?wzqR6U*`-kATU^UU9D)#C}`jrnUj&-~3)J)R)`F0JT1^EbTz=#RaJ zCy2i*DmqX6ZGThs@>D2q+nN8S^TgkF_K!Rj%G-A4ujxGTxBW%c%TuBJZQr41(|O`= zg#LrS?d(5!DwMzNyY*~3&-`7kdOShAG5<~HnLp+?o*>?szozrd-vz426U5sC6`g1P zhW8)+vG?!<@%BhX=ZU{x>{7iv72=KgZ#qx>{bH-?<*5*F%wN-a;_nwb;|a>!FPOik^UUAfs>c(Q zw_m(d(Rt=?c>mEKdk;@g-hT0ZMdz8nm8!=R#2fS9be{QJsCqm>yfJ@G=b69xs>c(= z-&GZzXa0uwAN{fS@C5O9T}9`KzimHMy*w4l+cxIE={)hbjr}7}h4QwI`D;2){B3(( z_3~6Gf7|xz*>s-x8=?Q;ZyWnho(kn}+kQQp&NF}4svb`eZ_IzwdFGG#jVFjV=CA2I z^LLr*@dWYqSViZVzv2Byf9yRxLA*Ux(Rt$U=ijPco(l2C{5PE^{(ino_3~7RH|DSD zJn{GQuT?Kkh4@>eXVZD&Z-oAXzn`=Jjx0U@P zPlfWfmHBHrPyB6tSM~B#h`%X%Hk~K_M(98I+sgivr$YSA(6i}0^LMlA@dWY4{5PFv z{+Qo*f_P*8n$9zSSF0XRP~NsaQ_*?mZ+QRFAA1i^P~Nt_P|)CXk`1{%Os+Xri zdHWgj-*le&V}9ca%G=MFzozrd-{Y#s6O^}~eOl3Z;%|ihqd)c@o}j$_?8}PIGk@o) z9#0T&%zx8)=5M{~@dWY4{573t{?@7DhFi z`MXo~c!GFi{+rG-f6Q+@L3!K4{573t{%%w~o}j#Kd8wlF%-`_-qd)c@o}j#Kd99-J z%->wq;|b!8`ENSU{7qLqo*>?szozrd-&ED(3F7ac(=8}r|Ep7~>b;|b!8`D;4Q{GFqEJVCtOQ_*?mZ+QRFAA1i^ z5PuI;be{P8YP;&?sSt0>f75y5?<@9?JQd=N`D;2){C)MA>gA~re+%?%I#2wK(0}mv z75h(~3h_6gXVZD+?|#+e3Ci17%zx8)=8yS}Cn#@UF@H_xnZMgrk0&T^U%gS$dFF3; z|Ir_N4^L3uzIvyk^UUA4>hT2e#{4&(Xa44@9#0T&%wN-a=5My@@dWX=xuWyT-|+sU zKlUD;ApWkZ=sfzn;E1D-Ir50(k2vkvsRs`HX&q94})5H~eHl4@*|EF;N?^LgQ zeggHmOB4UCqVsrv=>I3|AL=0Iuc_!fp8pT!{?q7R_5YVXvTCfOX7I$X^=vvHD<4aH z)c5r9=Ch7GqUvAu|EKEbbkr=J_@kap=X1jO%Ae~057q0>tc90}f7Y|<0gF%;m>p~ z*5@048$Z=KdE7K#lt0tC*q*Qaxli|PIzOcU#^1(|b+0^b()S|%Oy^>Kf9vl)otM9j zdWZ4X)A@bjeDnToyhG>YZ{w??{PlExM>ya5yG`fhZ{zEt{PlEx+g~|f`*WX%*MIBp zCfzH48{eMv*VFk;;r`ZN_kFst`@Zez{BL~!ZtT8KH+J8*J)QrJ@86Bx_vyy&`?ja^ zzw!OM(S06X|E<67`*dUXecRLd-}wIB@Rt1R{o9~FOY#2obpBTG-@JbtUeP(de;f2? zIo`jX&R+@VoA+{Go4=?&bR(9)H(b;DB{m_e&Js^U;A^P?%Q-8 z`)~c7t9$YHXy?y#er~wG@psm4o#*{y{^PHsbFrSEjlZ+D=^Xwve~Z74&c*tCs?X)dOE)++&_7~_UAqium9HH9lBTk&iY`|Ur*<8 z|F!;B={)|J|M)YVuL}LQ{>F3;e^-k5Go8o%)B0PWbNIVj#GmPWLAby5=RV!H={)w| z`eV=G@A}T4={)Yg#^3t)bzc6~GymnUr}Oti|Bb)(>>2r6ulb9=p3dX`Y5c8!L+9jg z{XS9tdOCk2+~4>c*ni`1J$p|6)*qPk*VB32f33gkbRK{Ai}*90Ul;ms{avAR_|x1i z{!Hg_ez*QM>m2?b7x8C0-yH65{kc!~Z90$rxBf2Hz4&{&^JhAb`>*kL=6;>WA9Ejn z9i5By{A~Q4xm)M(w_4==>*!pp&o}Ap?phxFh0JCpr~ zzfGOLj?TsU{?^}9Ixl}`zAegMPv=jC^Q}MTxBQ){`HR1v&g1@R{XL{}@^|J(qWtxA z{!qBTdH>FIpNH3f>+e3@D}QJHc+y`_=W+kF{x;}5{+RptGo5b;{kQ&B=^Xy97x8C0 zkMq0rw_NA&ccX|u)A{mnf9ubEx^L5Y?7#KLp2Od*oj=og+<%R~b)V?G{Hi|zSpf2?z#?%Q-8`)~Z6!T!VF1)aZ+&c*uv#@`t)=)C-$!TguMp3Ywg z=UacwZ}~ez^A~?ToyYyt`g=m>u;UT;qP`4f2Q+w;r`a2`*h!?^Vomu zZD>b(4|W&X=wPv>8T{u_U5*)#Z?DdMlAbFqH^8-Hs*);avm z7V+27x!9hszJCYy-}qb0p2Oe#&R<98Vts$>?=GFk-_s)gOy_rn^Q}MTwEV5r{Ka2S z=W%|w{%+Da`CI$4D1SYj-xTg|-oLf((|w!HWB;wc>vXUDt$lscUr*<8|F!<+={)|J z`}i}R&kOyx{$}VL{w@&lXF8AbyY)9s=kRxth(FW$v~Yjx&waXY(|PQ_@pn4=4}X_+ z{yI7r)A#T6*K}U~PG|nhUr*<+h4YQS)7dlfce>^;{(3r(`={}D`g1xbf2VI1<*%pn z=feGszk&U?{+`mk@^|{zlm2=-kNdBA|4zSD=ka%|h(FW$rJ?`U-}yR+zq>{Jna<<< zZvCCBbNIVg#GmQ>+;D&E&waXY(|PQ_^|wLy;_t!EpXogAzsBF19XgLc=05&9Iv4Br zxAC`zJ%hjbBK|r$7whwlzcruh9R3!H`0MCgY|mHw!+pAM)A=F&H~!YJ|M0i8^ViY2 zSl{3JdqC&qZ_SIM{PlGHKsev}V@}K88qHt)^>iNRckAyCos+*cZ;JBQ)A=3Y{^tE# z<310s|JL6vx>x?zygTWyr}Mb~T7MHdk3Z%<{!Hf+q5sz3Je|YeWg`Ae=W%|w{^sZ$ z{w^2sXF8t~?r;6MPxoy)kNvm)*mL;1y7Ol`kNdCjciKBTFMp>o|K+cz^LIl3jla{_ zGxB$u<}dzwI*iNhU+eEG zoyXtZBK}P0SB3stf0ybU{xo-sKht@f->tukbq;?Ii}*90UmWgl{kc!~Z90$rxBkx8 zz4&{)^JhAb`>*l0dausokGYS(j?Tq;em4GA@6b8?EfsnHIyx8Y^NqjN+jI_pD@FWu zbS}2%tNr0V-M8udkp3HgtJ#0}Tif~T=v=JtZ~Z-{^YXX)by5C$I)5yjZ~Za9942rxc^#zYjhre z%zgZs&ew$gTYnQehrg>u{F%<<{BHe?=^Xy974c^}9}D-l{@kbgHl4@*TYv01{N333 zGo8o%*Z4d2L!FnuQz<*%pn zx5E96zk&TX{!V4j;csf^ucLD@{r)}m2A#*>gChP+=Qo7&t-q^u4u6`v#h>Xs&hOUW z6*`B%Cq?|3&aVjfxBlFx`!=1&{#$>S>R$Of_1Q^(J)Ot>*S>#KbRK`qef*iur-c3+ zf2;QD9RAjdynh{?i}mkc<8Re&ox|UH5q}+>i|zSpf1K(*-M8sH_TTth#s0(JIi0_b z&c*uv#^0)EbYA{eG5_VSr}JmR`PLuvTmDvQ{^GBv^SFOne~;*#{H^+tD1SYjKN9Y5 z-oJtUxBec`z4Eu}vq^tFoyYyx`a4_a@yFc9pXvPU(0}W1jn3ikMiGCe^Ekg-f2(v3 ze>aQxGo7yr_qYDsr~5XY$NpP?6S^0Fw|D+b=W+iv{!aN+=jHDd=D+;)bpC1Rzwvhp zdj@|~Mf`PiF4pgV5zb@S0ynm;-Pxoy)kNvm) zuF}2ocgo9?{(3r(`>*vkOXu;&+{d5kd{*ec^*2T5@OO@gKht@f-;KYO`*jX~=ZX01 z=v=IS|670V(|w!HWB-l6mFz$KUDWyO=v=JtZ~U!%N$2HnCG%hYdOCk8oNxTCWY5Uo zO3h#V^>iNhPwVd~os++nUx@P8)A>{3{>IK>0bF;xpmTCPv>#}wf-*DdHmfd z;?Hz`Vd%g0cec*q?{*P?rt>(zTYnpL4u5xw_%oev2=}-C+^73CoyY!Le`|Cv{_gGk zna<<>Yy7R)qVxD;?&GhcbFqGZ8-FXpzmCqu_I$NJ z+^73CogdPF<8KA~4}S|ge;u8R_5H2Cdvsp@Ry-@pUr*=vg!8RG=Cu5+(EP<;Pv>!d zxBhO?Ir&@hswjUwo!=7fZ{EKZ?(^{aZ~fh%d*yG%o0I-}I* zEq_Dj4Nk-z1dzxeCvJno;y-|`o9PX3l}7v-;~^B2PXjlY5Y zH~yBh=j3nsu1SAAoyYyx`rEAY_`6-ipXq#a=)d)Mq0Zq?bGP_2oyYmz`a56e@OQt6 zKhyd7;r`a2`*h!?^Vomu?`++RzlS@2rt`S}8h^`n>OB6K`}phVT&(A3<8Rp(ox|Tk zk@v5obFn_(_*?d+&f#xd#9v3}Vtc;YAMVqAo6ZmEzwx(>{fEDmoxhIG#rpo%-$Obt zf6HDL<*%pnhr;>RAM;!OmTCUtuc!04e_DTc>74v6ds~#hp3d(I_c!m~GWU6S{kQ&Z z)4lSy?1z*7dODB$ul2WF=kdqf$DiqZdFa3Ow?OCcce#i^(|MfVt-pCXhrcUD{F%<@ zh5K87?$dpn&SU?rKlU8{uI>Dp&g1@T{4IS?=jCrH^I!gYI)5+p-}qa~o{_($n!ot# z={)YA#^2J{bWZ-3?h)m$r}Njs{f)nY{Wt!WvghP)>9>>qdODB$ul0A0&g1W15r3xh zYeN66zs)*_Kh53Z&vYK=ckAy`ox|UwBK}P0mxlXWf9}(Lo6ckZt-lL(FaDnF{F%<< z{%ia#`9|mQ$K1zXN9STaKO28bcIq7dR*JlT9i5By`NrRp9Xf}<)gt~nIv3mX)&6jw z?%Q;JNdJw$CG0=^t?&GGbS~ESxBi~cdHGxNrYL_soj(!IxBi&l^0!3u7k@pS$Nkg# zdqC&pZ^;Lu{PlGHK)Ano|CYGV!|T8GcaQFsza>A?U;6n6J)Ot>*ZNzh^Y~-#=X={(Nw*58EA;qQ78f2Q+^aDVI1eY$VcdF;RS$DYIA&H4*}rt`S} z8h;ZX>%9C;F#qMRr}K|P|Bb&1_Kf^ZX#V1_r}Maf8h;b-=#2bL9ME6#*VFks;r_rVNbcz)7fPv>#}weR0Foy8w>AAhFvX`%nd-{Nm{ z27l}I7w=z3=VJZ)*Z5n!S7-3INq^z5qjRx6U+s?x_vyY(=du6B-(vP3{?6)B1Z%=j3nkk45?G>HM*9fAjtg z?7#K*knWYg#a~SN>*+l1zt-QmI*&i*KK@MS=Z5}Uf9rG(e>aQxGo8oz-TGUjbNIVe z#GmPWO}M}H=RV!H={)w|`dhAh@potE&vYL5U*m85bDfvJapu4L^>qGu=)dtd&Yr>F zbP<0Yos0GR-}oE^@ z*+l1zt-OzoyQ+@AAhFvIidg7-!z@W-+3bbOy_ZaxBjN+9R4m4@n<@p67FyP zxli|PI*)S{dODB$ zr}4Mw8J&~AMPG^X*VFkk;r_aQxGo4=? z`fvT6t8@6fQ^cR?JkIad-`P5czq>{JnavS*v?(h7W&g1@T z{EcnXdHgZ=@z>G0SiirGzcKa<{^pAK>*!pp&o}TBjZqmK-H}>|Vzn;$j#{Toq&-BlIG@XmJ|L9Nm`sa>r z`p3!pP3K~LzU`kqqrZ=T?xWfNT+O(Ds^5S8+*19TH~q(s|5^M}&!+SL81Aq7SG|7E zH~mY;|1R#(v+4X_!ujg=U-d7m{+~Pk4{@iSP3QmoSI(F3AJq@i zSLoSv{+<3*KfM3SpU%(JeR^*T|6ROB&!+Rl-{N;wFHeQ?ws?!4P3MWf#hMxTE0j0> znHPVB&J%x&d4J`pP~H~r*0bq6@i#*M!QW#2nHhhD^2Yz>fWJcLnZK)5k0*$?dn!85 z{9UGcJVCrYRMC0n?-JGH3F7UMiq12C!~2i^F3^2=f_QtPqVvSx_&(LkQz8Bq=-G6h z_#6LP_3~7RzvX&1ohSar^=C%>72JrZX8aZ6Z=Ie^=b699RgWhq zZ{u%Nbe{QpQ1y6%^2R^&_H>^4yI=Kqg7P;0ensb*zv2Bye|PIXJVANme{<;RJoC3! z^>~8#+g#Ck=5ML$@dWY5{573t{`6h4RKf^Wv}2dE#%;+p3qRLit;?U(crV z_2%b#NWAkHk~K_#-3HZJQd2@81vtBp7~>b;|aX_Pv@Dxb5xHfh&SfH={)ndR`qy-_+$Q>&NF|j zRgWi#zgsFg&-@MVKl)?u;R)jJj*89`eD2q3z@&B^UUAVs>c(Qw}oF;be{Mdq5tTQy@w|#Zwt3obe{RUNcDJvcw_#X&NF}K zs2)!cZ_HoQdFF4E>hT2ecUMK{nZM!vM}O=+JVE^3SJ8Rm@1(7&m#0F!G5<~HiNBNB zKk`(Fw>f$?ohSZI`myTesStnj^lUm${Eg6m@OKjXPo4_#H>PLPdFJn4)#C}u+eyrS z(|P8P`Hd$iZznN-P3M`vTUC!IC~qgdR?&IpZ+QRFAA1i^P~J{@tD^JF-$K>n3F3|U zZ#vKX%~n00Al{h2rt{3-Ox5EF;_uRm&NF|*`;Y$Edw7EQyP~4=#NUE9RWDD4^0t8a zZ#qx>Enxr1Q=z;qVE&rU6MqX{RJ}YE%HM(=dN!RW{zm9O_*=mKlcz%YTd-Ttrt{3- z<*LUM#2fS9be{QRe&Y$^jrnUj&-`7WdOShAJy6kk=5Kia(I0ycPY`d9RCJ#BJ8_rl z<*5*FbM$OFPyC&@RrT^zh&Sf1={)gw;#aDdr$YQq=-G6h_#2`B;O|8CpF9=fZre=AjwCx|!Zzv(>lw@~$Xf_P*8n$9zS^Hq;0h`*~UI?wzK??3uu@8JpJ@4AZ4 z6Myr6sCs!Sl(+fJf75y5Z$A4+o(kn{{%$>+&J%z0Ust_670TcIy?QpCC;mq0Klq!^ z{*$Ld`J2CA&!+Rt-?gg86T}M-kATU^Tgi?yHqbvg?MBBn$8n{Cw#4Xc`C%;8al$Na_j3>1o3x6Mdz8n z;r&N{>^(d|{M}N~dE#&0k5n&Dh4MCUx1LSsiNAU5A9*U2w|UH8(|O`=-n*)or$YQq z(X;71@i#*M!QVXgpF9=fZ-$;t=b68oRgWi#H|D?TJoCr=#uLOF^Vf8q`MX;6c!Kga z@0p6uGk?STkN((uc!Kga?}duaGk?=nk0*#X=D+DY@pt^Us+XriyfJ@G=ZU}L_o-f< z3h{Tgo=xYOzv2A{f5)@`{5PFv{+Qo*g7S9!Cl#G% z{vKC7o}j!P|7k_%iN6v0kN((uc!KhF{FfD-Xa3GpJ)R)mnE$5p%-?#|;|b!A`D;4Q z{H;|zo*@2itLQxQH@yGokG+Q{h`+lkI#2w~{X+HfR48wAng6Eq#NS-@k31FPjrnUj zPyEgONcHkmh`(8SHk~K_M(98Io6G)_r$YSA)3fP3^LMA}@dWY4{5PFv{+Qo*g7P+( z`D;4Q{N1Q}JVAMz`%*>cnZM!vM}O=+JVAMz`&vcknZLQJ#}mXG^WSuy`J1kKJVCrM ze@*9^zp1Ln6U5(z6`g1PhW8)*9moEYr$YQ)s%O)A;_tXuRWDD4@^;)OdN!RW{*Gh+ z$Wx)b9mo7NohSZ|dsg-GR49MPZPByoJn=U||Ir_N4^L3uj@wbudFJmD)#C}`jrngn z&-^jJ@dWY4{573t{?1W7o*>@tspvfOH@yGokG+Q{h`$FaI#2w~*{*tdD#RP}-*le% zo5TK*r$W3je@*9!zd4_&UY-i^w?NOP^Tgi>{Re+@*njd=h`$Lvo6a+T_p2UHP~PS+ z|4rwaKjt@{puEj_t)lbH-|ec$6O^|(Z&Y-i`5WGU^vB-A6O^|(?^JZ2`5RX~o*>?s z|EBZI-(1z>3F43WYdX*T%~n00ApSO2be{Pe-hcGR-oq2b-&GZzC;pCoTlMl(C~wCy z|4rwKzhl`y@>D2q$1;CS=ZU{#Usk<570TbSJN0ZjPyCJ0fADuK`%j(<?s|EBZIAM+be5O2(1(|P9aBGuyw;_ab|&NF|*`;Y$Edw7C)d#s}K#NX^a zs+XriyfObx=ZU}B+f^@5g?MBBn$8n{v$v{Vo(l1|T+gQS#NP=02Y<8KfAUm_zcqR` zooD_YRXv`dyv=^CqVvoj^BYf4-exm@P3M`vdsUAoC~vdhtLQxQH@yGokG+Q{C~vbr ztmr)Rw_5dhg7{{9RMgdFF3;|Ir_N4^I$(H&k?< z_&eqU)yq?%ydA^*H=QT`j$!}EQ=z;a!~8X!C;pCkQ}yyxD1XO%qi553;%|ihgTG_g zfAUm_zbSe)ooD{8S3RB}-kATU^UNRf8&42#k5zP@`MX^8c!GF)qN4N6-|+sUKlUD; zpu8RPOhxC3zgY)VFHePdWB!}Y6MwVzs9v55@yGl%ohSZg?NYrw72~8vHjDXhI?wzuzwrd+Z5H#_be{QpSoL^<@;2+^iq12C z!~2i^*n4<_@;2+!iq12Cn^cb{h&SfH={)ndTJ?B>cw_#W&NF{2RgWi#zndyL|9@$F z`&hfGGtKiFFa#WmCIq>dl;@T!Lq!o4Q7L!iLMU_Np=c`;QOMJmEKp%G<_@dy6C<~sx&+w=V1 zy`FQ|I@|X>_nc_{h<@46S?_tD{hW2yUT0x&mf!gP+x&R$krO1pTPj*l^85JDG+sFc zmD|Tz|4r*jejn%gqnv`|#`%h{U#@<+&<3wYg*6pTd(ot1eM#zAF60Q%Wr)DZGJrW$O$U9 zk8i7JJo++;<+gLdB){`^X}od@k{j#4X+6pBJf1(wDM)^-zozvhzw=(uc;yr% zzYBG3T2Jzuz<-n9c|8A=Q;_^F(Y0wk%kNtnPfk#|oyYobTF>%h{U#@<+|FbDHLYj) zeO=?p2`abq9<69S%Wr)DZGJrW$O$U9^B%8gJf{WtlY%kxh;1<7xXu1)Jne&_yBq&m+KCJP|DX9F;eM8r#^(4Ou{I~h>+#@Hb+|He?Xg$mCT8$?sNN%@O zw4UY1`b|!d+*p52>sfv?8c$A;-0rAoJsh^1Gp; z^(4P@p4NEf6jW~Ku>PCYll;!%`Jq&lRAJBN^6ePdT z>e{rPPEfg>&H8Iv&+@xd z#u1&$#3zGG+sFcmEYnMx;CvR`Ay)z$!{^wKjjo8zs0&Xt!Mdd)Od1&%h z{U#?!Zmhqi^(?=yYCJhXa(l3%^(?>f{kQq?+#@Hb+!jAn(R!BOnHo<{kla}RP3uX1 zXMLdY$|*>0pVzf%J<0E^cQsx)1sfxR-{b_9+gYr?ru8hp`!t@MpmICw#fsLG{3h_<=Erl7oSy?Vu zv;3~qcyfZ|#`u&cP`RDS`fplK@;j5~k8%o<8|$xWJ<0FPXEk0q1&kRpZGCk{j#4X+6u2^_!faayygt*R-DHccaFW6I58c$A;+&*8?dY0dr8c$A;+*p52>q&lRoYHvZ6ePb@x;Cw6 z`Hkq&lR@cdCuLFIM^>#u1&%kR4y zPfk#|ow2i`^(4Ou{I~h>+#@Hb+|GETqV+7l)f!Jukla}RP3u{HS86;tL2_gLHLYj) zt<-pOg5>wjiq^CI#`oXm$8(RIAo<-<(Rz~KqP-fgoPy-W`fplK@>|67M>z$_?Lu9f z)|31e{Y>MPQ;_^F*0pIp$!`MxO@51b{wb#*`7P76X+6ttlg5)1RBnq{|4r*zeyrc* z1eMz&)?d?lmftrto}8d^Tl82(>sfx|`)~8(xkpY=xh;CKqV+7lPiZ_kL2_gLH?3#+ zU7+#g1j&u{*R-DHw?yN~36kG66|HCajqktBkLMmaLGoKy(Rz~K)Ds%7oPx@2iuK>L zp5!;h^G7)amD?2SuW3EWZ)&T?E2p6Hn>wUx(|VHM1pb@+rg;7-r{Ld-Z|mB$p5?bz z=f(2X+6u2^_!fa{@$`vtiPu9EWdAQ zJUK!Ay=AAKs%SmSZ+!o4emwWc3F_}HJN1)_*0cORqw(Yf$&K~jw4UYnDUBy5NN%jZ zru8hpr5aC8ko>NzXg$kseE)5JJom^6lHZ1k)|32BKBMuiBsbPy(|VTQwHi-Oklemg(R!BO`2O4ccu(U7OaE{3h_<%( zK;y{?Dz_7?|EBdUKh|$@g39d#>#u1&%Wt#BlM_^KC!VWlJdko*?u+O(eJH-Y~q zzhCnFQ%*thJ6G4H^(?=yYdkqYa%25Bt!MeMev=a%VC|$?y1ajaN=Va%259tta^%|3KrFQ;__w z(6wnj%Wr)DO@7CD{wb#*`K{8mX+6pB_`@2noPx^jIP1S@JJI?xRTF>&k zU*pLMD!1b=RkWVuH-Y~)Kc0K!1eM$IofWNT`ORoNIYDw`{Wq;=`K{1+a)RW>`fFOx z^1EE)$qAC*EfuY2`HkAu`CX*(q&ke^88UwLFM)#>#u1&$?wDOYrJv_D!&hR>)N!Qo++;<@O8KU(n)?PEfi1;_-^sv;4;Q z-{!}2kDQ=#`^8fgt!Md7YdkqYa%25Bt!MdNr19hg$&K~bw4UX6fyR>)B)>Hkt!Md- z@4wBD=N>sh^1H60^(4O!ex&irDX82&VEs3(C;5HA^G7)amD>lbzozvhzYl((@yaQv z{63h~wP`)cZvy{Kejo7sQ%*tU_rd$RHmzs*eO2Sh36dM@ziB%VC|$?xX}G+sFc$&K~b zw4UVm^Sv6coPy+csjf}yNq!UfZ}R&&&p+i9B)`w;+O(eKcb~?S6I5Pfn2BSpQAy zS$@+RPfn2BSbt6HS$?0=cyfZ|cSA+%S$^aDZ}a21M^2FZZmMWK$?yGVHC{OdmD~HQ z|EBdMzxR3mD5s!ud!O~!w4UVm{u3InoPx^l{SS3*T2Jzuz<-n9`#k@YQ;_@?>DsiO z<#(gTlM^I2)_>D_mLKakIYDw`{WYy;`K{G>a)RWxrK0sLzw!OI`SIK%C#c-s|6WDw zNq+C0(s<<*BsbQ7(|VHMd+%zzate|g>#u1&$?v^4HC{Od$?x;JHmxW5P2j)D?>(M> z$|*>GSLoWbp5^yljVC9l+}>mTH?3#+v3`>iRBrFF{+iaa{O-|sa)Qe3y`NUJp5-^b z|299Kd*lR_+j}onw4UX+Qsc=9k{j#4X+6vDGL0uENN%jZru8hp&uBb3LGt@rMeA99 zq&m^^88UwL2_gLHLWN4z59&DE2kj& zE!MSZJ;`qZ|4n}H^88ayLGn9a*QWI>zi((fIYDw`{Wq;=`LTYJ6I5>Rvi_RZv;5X; zJUKz-_U=O!t!Md-@4wBD=N>sh<@WBjiq^CImS{XVL2_gLH?1f6y>m+Al~a)1Sbt6H zNq+Af*LdX=B)>1}+O(eKH@^QSzjt{4DW@R$U9D@=dXnEeTQy!e1(n-7tpBF%VC|%WsLslM^I2)?d?lmftxVPfn2hzFg6Imf!gPoBZD5`KO$M&kUE|3K zDz`VEtY|&UZ+!o4emwWc2`aZYe_YXemfxo}o}3`LvHqLZv;3B7JUKyfWBoO)XZc;E z@#F-_Z(T*}S$^aDZ}a21M^2FZZm4KI$?w?H8n2v!%Iz5IziBq&mcwrjj{3M#*2Z|mB$p5!-y|0cg#u1&%kL{1Pfn2B?yYD&%Wr)DZGJrW$O)3$mWtMs{ANGUc;yr%H`agCdXnGl z5sg<)L2_gLHLWN4%^uKrV?{bYN zCrECr|EBdUzfWsCIYDw`{WYy;`Aus)IYIK6C}T{RkWVucl3FU zS586Yc9iwsw4UU5l;@9f3M#jwtiPu9B)_9S(s<<*RDMTK=-RZN1{+O(eKH@^QS zzau>Vlv9xWzNl-{dXnFf?`ynr3M#iFtpBFX3h z(Rz~K1peFncPEffWX8kp- zXZhWz@#F-R+u=tlTF>$u-+!AQ&pmR2%I)x@6|HCaU7+#g1j&u{-?X0Pcc#XZ6C^j* zU(f{Wtj?;`yhXg5>vQU7OaE{0{v<`~B(|VTQ zCXFX2sN4>+{+rgb{8+!q2`aaPtiPu9EWdAPJUKz-cJQ%^*0cP^_uuBnbB~;$ay$5B zMeA99pVD}8g5<{fZ(7gtyFlZ~36dM@uW3EYZ;8f}6C}TDDq7F-8{dDMAJ08(PjK-4_BsbQ7(|VTQr!=0NAi1&rn%1-Y zmTEjXLGrtx;CvR`Ay)z$?pxGf66JS{N6aBYtwp`-+GNFCrECr|EBdU zKh|$@g5<{fYg*6pyH?}L36k4)Dq7F-8{dDMAJ08sKMe9j^`;Ke8ate|g>%VC| z$#37A8n2v!PEfh+WBoO)XZdZ`cyfZuZQpYht!Md-@4wBD=N>sh<+ks|iq^CI zR%kpqL2_gLH?3#+eMaNS36dM@uW3EY@6#GjPLTX=s%SmSZ+!o4emwWc36kH<6|E=v z?R`Pxl~Yi;?PdKptta{I<@uwWg34_#>#u1&$#3t|8n2v!0tiPu9B)>f$XuNU?lHV1&Hmzs* zjqkt7Zx7Eu%3Q{%}AlHb)8t!Md-@4w0Kb)J99DM)_T=-RZNa^+Ah~_JqV+7l@%^{?@!TUPNPc%!w4UU*>wv~9 zry#kp{+rg5{C4sDQBFZ}WBoO)C;9DqS>u&cko+#uwP`)cZvy{Ke!F=7DW@R$E!VYa zJ{_=S$^aDZ}a21M@~?= z?Ru)B^(?<>jVC8aZmj>N^(?=OG@hIwxv~D5*0cOB(0Fo!f{kQq?+#@GQ ze%DpB-sX4J)Y-pw#?&XLe&-*YdFs?_KhSvj4C?P~TE0%#ruEkUA2juUsPXFa8r0vr zwES-?T5tO|{$Jzy!#GI&4Hd1o_5V%j|KI+DGpDA0>p$1{zdv>)*G2b&e}E zU(n6ZA8zWq+<&Lb{hjBhrhe}s)x&4R*^1U5I!%4~+}?RwB(fXFAzVSan zeKT(+@L%Q%!fA68fXT&e)+O$4zej2au%kOO| z)Ea)i){WmYtznhx+&Heh^HUG@t()ShJ{LTH%=ii%u%fF|3 z&A;VOi<*A}TL0c@>Z|#;{5z`C{9FFKsQEXb_3t$GjsK|gxP{eM`4!*xxiJ4#f90=v zrhKL@{4eMDTl)L{(9QYt>ps8b-z!uG%)jNP^?CEtc+J1%-zn5*!2DZoTAw$+iR!ET zRIm9rrvIzw)_pCA$MoMi{{Ga|c}wT`(N{X%)az$msJ{}tte>Z?Kj(M5`g4AFYHGdnySsn>t!>=3W(f1jA+M_=i5bN>GN@8oLjZ|mucZt{BLznwpi=)aYt-)_Hl%N&n? zO}R=p^?L2Us@H!f;Xdj#kFTHO@vn8dIaFWer+-c*|Hpnuf8OCw=lJfnPB)MJ&T0CW z=gu&|@O@Fwuy;-CZGMga{kLnp{05JRPwLvV zzU}{q{=WY|Qf|MlzVJ&T&u-KDuQ&Z0|KvaWm*sQ#cdGxT>I<#U{$*4DkLJEVU7g3d z&a^&M-}K+F&wlnD^%al(nfNc~XnppbrhipGHTCO^|DCC+|Lk|?$bUNv-JE~^Oif*K zoyPsB@D-8I)3iSC{L%O?YP{Bu;QQkJx;CxPJAX8OwZ_YD@QBDfHm%P)e>8s5{xN@4 zuiqBOe!cKZ;=j?gX?@=Lqw!}ke>(Eaj?bac`q1ZJ&7XPe_j8Q-*WwK|D@($kbU_nU7Ob1^{esE@05%F zch!l}Pd-fRV%@*VZ-V-^|6}TRw)#WuTYu})iq_AbufKkGY{Gv>`!=l)`LFtSb>}@Q z{+Rqbe)2#0{rq~6ZA|`0@##5!Vo#@=dcB@MRel<$`TB|9FZ@&e|Ig@u zruE-HO?^B+yFM5GUvvFFp*4%X(7IUnukxFyzP*2~)t~r;-Ut5A`k&4{2DJW(`TA?^ z_$od-+P7(a$bZ#eYt1Th7w??oC-!u@Ie-4@i|^krWDV1N{)B0L-u#FCcRr%8{LJIO z%73Ez=Kg1YD8Jgf26>h+e@yFb{?-0b9&ga!6?Bhk&a9|88M=8-^Z9l4W&OSIo2uKY z@$e_&0~M`rZR#uk8oyEFw-jnEzfgO&k4)>y?`QiD?pFN|Rd4FP%Io#~@AZH0o2Tz@ zU99VS`MtMB`K{7_bJZjV<@%nv<}~$He*8C!$?rYBv&wHk>uvt?`hQRRCGs1v+}B9| z->Cd5zwiyMf8#X%%l>`#gz~;e^X}n_r!*hY&DMW4e^mE1jni+2;7`QOx;CxPJAX9( zs~WF!s^H7wgSs}Y&pUrK{u+(PKin;HAEx!zf0e(+tN(lY>`vF;`uzDTr>9lFrt3SP z?mu*M-ua_C<@X*wp+0-^8_@a!{lBN*Yveazxv$JWxxM!d)j>WtYMLB`~Q!$21EYNLVkak*2UESiT_@8@_*u=i}F99_4eGl=Rb0i{}X?$difua9MS*e zH2ur|0pBP7NaNt&i1I(6^*?IrtN!}E_z%ge``v1u_>)dI=l}dPj=WzeoE5j~+O$6J z=cn;}-cJ?cz^+K|G6mtCrs<}etsIy z=S^PluSNMD(E7ZepT^7g37tIz_0OyDf5Nohety;bJ$33eeMdh$u7BRMVvZk4LpSwz z3eGcsHBNh_kAA!G55&LFwQ2pgoBC${y!MA0|4G%se=Posiq=2b)VKcC>!b5j2j%6p zzp7~cy!q;NX8Tj_Tfe__hHQSM=N`H_|NX1(pK0807yg0xFLiBNpZESX{(sQ;PZs`T z@o#l)TA%m+HU7^u{=7o{Zdm?*>)N#5-hY+9#$T&v&0mVT|Bh2rXS|DUhF*XEU42=9 zfAfIWe4SGSzofbgbZuHs&M$uRrmipK`~n{)e#+~0|7!m{cs<6s&YY*dx&Pn%vHHKG z_Ypb2SpJ1MS|2*UsQPQZ>3hOC8+2dOx_s3BtNvB}W95Bx4sgc1=w{^8uaEpS?rrte zIb-lk`W|1RYt#C?`B(kJzv{oseRQ11e{%l|s&DWAdGePJk@Lr0Gjp^)lz;QjAI|wd z^tUB=8v1i?;^Lm{bnTz!-L^p@(oBMxH>+jKjdg|24 zkI#|((9NU&wCR7^`u88~>fz6~clBmg-}arFTJ#=$JI?uP`Zw$64$ZaW+V{P!dp3W$ z`P3lQt)4(oHjMf3fn z{@j{=e|NMFPg7s|@4iskYwZZi_ijDMPMX$lYU-QMfA=DdUq@f@0r9Ge*4K@w*Jl>> zJ4(H2{lTWbyZ?cI-R}m~T`1luuBd2zLsLKGU*p%%U%a3G6|J|wABOttez(zI)ORrQ zGp)Dh-$V84w~TsG-`((UT3U;SwdXE0`y@dXAw7%%Mrhcfu{Lj)~zAvEv9Ic<6&FbZM3-#g? z)K|3L{{HRzze{!Uzvx*}{s**vSJQu}UVfKTFKR7_{7vi2oBE;qS3l+{{%;lWZ(48X z?@)h@UqyeB?+^Y>>#MT<^8I=Gi)-m$(fa4Jdi7(T;{S5$D_T$I@6^=P3Dx0$M#O)i z^{Eq0|DpSrU)DMD-%5Q&>+Sm2%YTabEB{kRMEM`kdOLrI`fL1?^cVU5$p3)WpKSaO z^_Sn<=r6MVlD}!aeSQzss~__e|J*ihsU0_&2Sm^H+ZPoXDT&7WtdjM}2LC%-1@{s*+a zx~XsWPrDau{FSPM%$J#p)~{^p+xw@l`z)+~S3mHt``v_p@ge+Iw7#k7KjdHInJk(D`~EL0{%DU;j(=ZuB*@B81{`H%gI=FfoE+w=Fn z|L=DG7roT^AJF=DNBDQ2=Ttwsf8YQ5;{T3PZ(3j9^zZv$t2)j9MfZxD{{vcI+tl~- zcOUmPt+)OA{+Aa2R}}xI^`%Y!zW*h~|JB96X?;mk-}mo6?rU0a`}h1$z0moedb{&K zp!N3rw&#E9na+Rgca;Bt)}P7!kJ-QPe{=EA^P1D#(UG^3VH^)xYn5JN0^>7e!?@p!Mxd|Gxi+Rkv7mJH?rb z)*o)_`~KZ$Vg395Hx~bQ7yqX9jZOc)|LcqYEycfS{raZ9@85mg*RO5kN&rN zW{%cRKHt>${Eykc@BhBy|FPoVw0>XHzwiG})yezGr#k-wTEDZY@B4Qj_cg7L>d)^4 z_P_joVE-GGpU~lm{;O5j+kaR4`qfQ+_xrW{`H7>KbH1sw-^dXFr z_67C1Np*0u_;y9>?eG64zuBiXejRcDKTrRP)|21w;amIlpuT(I-?W~b ze}?b#Rfqp;i+|I4a()!~>$w3r|K#&CIsfcl&*qQzyRT@R^5@(W{{vc2&Oh= z?#ro{?;A`0ruF3fGkh~o$^X{k-?ZM&-=XiX>Q)v1`u>nV=bu6A?fFq}{&W5r`LCtF z?!&a6oF9d6<|+O!r@o@~bpCex{m6f&_%7sk0D5-*8M(90JuTl`Oa7+ycKsW=f4x8R zSN=Ko#Q%WSlk?B;_hj*@?+>|i{u#8MoS#MRx6xnzwf;u_ruFvxvG1RGihtdA_&2Sm z^H+8BA!mJW!nbL??LRdCnG=*;a}gI@NZgg=kHK|`DUKtU*DVX zZ(2|1uYB`4k-wf>k-uqu)aS=MCI4yaO}$^}uvx!`{OfhrIs9K<{0FVWyq&_8IX}{8zM|oPS1N_gPr~zWQ`X?^7g|Cbg2 ztatb~ttaQ7;op7S*REaG2Z9G;=j;(cK%83oO4G0%ZmR(>)H7yecgxi&-ncF z{(b*jRmb~0*VPYbeQTcoqVKAX`*=xI{sUT1&Of8C`z)+~-~amJ|Bm9{w7!0X|Fy;c zy~V$2Jvsjj|L)_yruDXe-~ZC$|BB+@w7ztN|0Tu$)y2PQJvsjj|L)_yruDXe&p+pn zybtG|vHqLZlk-pJ4dpt#lT5tRJ{ckS*w-x`U_04(yQ{O87 zA20q*>&f|N_;(-oHLbV(`~GK&{|&{zX?NM9m|78C#p!MYZGy1yE!ut39Z!G@rF8)pH8%OxRzWCo#{F~O3^Uv__KJIH; zZ~OQCPZ$5IihtAk^a%eK75~>1|EBfi{4@N!kNcX|+x|WOoImnDoO{Op)3p9_?my0L zm_Lh)|3d58`DgTXANMt_xBdJ6?<@WvEB;OE$@ydKo9|Se{B!OZ`)AX7a{d|q-N$`R z>!bSfJAwVLem}(iF(^Nw!zTak{;TzaKfl2G(eA%h7dmX}yWg*+{_qXmIp^UURIl^T zBl>rEI$DRPsW1EgBU&#w{|s){IjZIy=b%CB?eG7_|B+dZUq@f@0nTA7T2IbDqwc{{ zzoXQf)|2zkBYMtr{u$KgeRNvaruF3fGxAzPf7RVj|BBYz^P}ecAadJAf8F=<^si_= z`TZWgmlgjr#lLAiIsXjb=NJFi7XPO8oO?2V2DF}>A4TrVsh95?sjp}~IsXjb%u_yxTZ@0wdOLrIzQ3wlRs8e4!M|y} zJwNKrf6hN6|F!g&f75z$eiXjXFaCA!F>g%k>HO{X`|&x<6#s?%4nWV&KO=Y6Ir861 zeMRf-`Zsj{dVl7x^5@(W{{vc2&OgK7lf@_B8|BaWXV7|beipgkMt}Kc{hh98y*+>I z`)8iwpZmwZX+5348c!c`=6i#G(|X%~X#UAB>m>P;ANiZsN35Tme};d)KlnGTxAS+X zzs569@z3`L|EBeH{>m?(6Z!9;e?{w~K0oFu`Kvbk2lYOo!)E;&@~_vGUHIpFga4p) znAfvUp`QH<^&Ryb3mu-OzTQ8q?(Uy+Pwsy}>+Sxf`TcU_ZH>QD^-%NW=w%hHC+DB! z&ORx)u>M_s1OK|;P1K7I;lHBwP0jre`PX>Omm{2;K8pW})|2zk=<7ZU>)-dkviQHQ z_&2Su9N}M?hkvbi;or2LoPUOY_i{qBC(E8Rqf6hPSK3?klbN|BGb8-3DE@CQ{!Q!2`Dgfd zANMt_xBZ9wpNjLxc%Ms(|Dbi4`Pb`5ivLTC|Dbi))OY>M`9th`KF|>6@51``{copU zeO|sttaQ7(bs(z*1zw6WAT4?@o!q+IKuz+#s8M#-?W~b ze};eeabMGV+rRIBy7*sJ{F~ONNBF;}_`jz3H?1e{udYjh1Rq4&*-+X81pYzYyKbzK*^Uv__ zKJIH;AJw1V3G9FQ{lNY=sLvsE*yP{cf3<#e`*+nn#QmG9TU~Nl-PCu#UrYVLd%APZ zgZHRT=bwi^Wm<=)sW1Eg!&)ym{|s&xHFr7x3|eo0|2O^*e@f%m(N}yxyrH7?J{PX?6 zziGXlzeD{so_UIYzBl+ct*7%>e)*ipe+T_5S|9cKF;B^VntD_36FO|xuOa_>eO7h& z=lg^IpmmtnvrnO(eGBy+^*jq5o~FLuKde@r?w@l{?teh*?f#|t{c?C(~}PO2DF}>e@0*TSy=zR|INk! zw&LHkzB$jI^Uv`AxQKt#dUF05{@urYP3vv{zW4KT`Z(TKosC!=}FL?>~Q~X9R!#bBz9d|J$k8 z`@AS#Q_*^I{&{#>;~!QX+$mmH(RyX|d3_4fCFL3L1{_rY&fw4R)QMqX>^ue$r`U(tGde$<>F zL~h&Yuls(U{uQk!zu&{R_UpkJ>eb)0o}7P%@AFlM|7%73o7R)_qsU*+4am7CpP$LU z|K7cx%^&T1U(q<_&$%c52eh7?f8v|p3*mo>i2p+C+4*PWK1+Z3zJUI7EA{{gKh=SPwIa_Z&#M(QhCPtHHXH}jPIZx!)xT5sp? z(Dzs4SJ7YO`-6YedV7ATSm4D7X@jsyT|3bssOMPd@HF-H{$aK1bpM=ta{mKbZ}%_F{{P@L8h@qg zAoFE&MeE7=XY_TSh4t_98~E4#Zol zf8YPg;$NRZ_&2Su9O3`6;-B>n|EBfi{4@N!kNcX|+x|WOoIl3<`aQ+$j<^B8qx2lf!d9JG;(E8Rqf6hPSK3)=)Kj)u8>&f|N^mU(w z_3!&%uYUNyL)82q(E9oj{@1FG&*9$U+q9mXe@0*TSy=zR|E0zM6~(`4ed!4QON#%i zi+|I4a{d|q-N$`R>uvv@f6hO7AI?3=e?aTW`6sz^{u$(Xq4^X09%wx||BSxwv#|bs z|C@{dZNP8X zlk?B;?>_EpT5tOg`9BrskMTa26#qf%F!Qh1j}-rx7XLx(u&M9*`_Erp$NQ^}`Ma?G zegE63*ZaIE>N6kEdUF2BzJc@4;7(DWIp?53>&f|N^mU(w_3!)NsDAjrTg1OOHUtIhbTF=fuqp$n8uW7yQ-}irC@&8!yZ(2{z zA7kHqr|RUNbI;g6o7R)_&+zX)?rT~f)t}!9?0@)^@DRx){l1o zt-8=*Q{Vl5E%o~jbmyG=4yaz|pZjk&t;5sQm;L|#&3gZvR0s9H{o5*9Z-4(c{`cRm z@$2X-J|I3>(Rya-w4R)Q?kDdJs)PEx_iw9cJvsl3yw=cPb@$W1qV@Lt zs5w7~+>}}HdHU=AP3y_;_wc=pdi9;5zM}Qy{4;!?uR8o+E8^d@o}3>={yVAH_h0J` zpP$M3XZLzGf3)v?MdRe3b5HyaXgxXq#5cbe!oT*L;lI#&cK#W;&(dGMFQES%Isfcl zAK_omoACbx_3~p{PtHHX|6Qu%KAsho|A5w$^P|XpIrZ{=BlQ)nC+DBxn|Vt9w~F{T zt+(@c==-bjtLQKC{lUL!y*)qb&4126BmcGZmw(fGa()!PnWy-_ocfB^)A`%&_rw2; z>hWL5?*R1d{4;WAog@FP)K|3Lu75-KulHyE%0K6x_#e=Ea{d|q)HBHUNB%kg3|ddl z&m#BRG@kkYfJpwP_4fR+@1J>!f9@auruB6GYCL_&`3VvKruDY}(EO8Md5-+akNi#R zBi2vOKf^!YAN-rv+xa`xU*nml_~(0rf75z8f903YiTrtPk-uqu)aS=MCI4yaO}$U( zuvx!`{OfhrIsEhe!GF*?%zg$_?sU+*7Qt4{aNxhMBOp!IhD((M2D ze@o-9R2^i#JYLaya{d{8-DhF_yZi?Jb-$bNFFu6-iqk3vf`ih4*#b0i8V)Ext|b$@ypWb)SXx@B3d`{9jT0o7R_( z@V}(^zqEallS4=GuD68dUF0r?woT5d0uG##J&ewPtHH1 zulu;KX}#^=_rJOL*V-TcP3xQU{5k&&|62RQziB-={|x``=_&2T3 zjPSpr_`kXMH?1e5gVteF-}U#O zzf#7We~!_=?|(b>dY>0XeRcy{-`?~edj4ws!>ZF<;oOt`!+_S4^Uvt(J`3yL_rJ0D zzq|N1t#2IR|N7#8OYv`7PtHHXzx%kaX}#^=_di|yuPXjc>(e9rUsU{GQ~aCOlk?B; z?>_EpT5tRJ{B!=v`*8jl`%lyQ%entJuVMZyF8&LxXXl^M*L~dAwBGjb`@gUFf2{a7 zttaP?v2VUpb@I>oXY8L%>&f|N_;(-oHLZ{8&+i2Gzx;k+{}_~?&|#B*cmLJ;!8s@E zN4x)4UFfi>?|#3Q`n?x-=bU>lR=v(Y_dQ}-ho`A8`~Q7fFF5}UY7XtwXT~{b(0cp( zzwy8C5shC*U-1F)Kt=1x`DfHUSn79_deeGx{<)95H>eKk^WOJzMeE7=XXLep{;Ip5 z{uQma=SR)?LFBfL{<`ny>0i-$^7}n}FQZ<4XQ;1eJvsjj-{-3i|JRE6H?1eh=BCdc)^ua{k%9p3NWadtcEw`RCjd{{vc2&Oh&f|N_-3Bs z|5g$IruBCI4t;+$eii*izCZXkt+(e#z4_1iXXL+@{_<~HPtK3RH}e$#ms4NSdOCl* z{eJkLQ9b?(`5l0soqtB|H!)7Ww^Coxdb|D&-M`+S`78gNd*XjU>&f|N_;{PX?6ziGYgKQ#a3mvxf- z$&dU^>m$}r&OgIH-yi&&*4z0z)L-M7r}*c4gMZU{I)CMt&x!nbZjrxfebnd2JSG2W z>P@{*=&)J8hWzVw);aw1{lS0GI?U_Yr%=znh5C+qj)e|SQ(x~NR;y0;&$%b}KcMw? z|I++^*{9E#^UomjWv{MH>&f|N^mU(w_3!c<_}Bez!oT*@!zzBSLE^Ut`Cmqg{y z`Df62a{d{8-DhF_`~KIfAO7zUHU9^+zJ7%NwW{NDxVQK=ttaQ7(bs(z*1zw6Y4LwW z@o!pRI>P^w;{WR6-?W~be};eeabMGV+rQ_Z^H1J~^UqlSP3!IXV{iT8oRj=xzoYpx zp!MYZGy1xZ`uvwO|C!={ zL-B7~pBdqQMe%=g@o!pB&OgJy`?#-Zz3o5b|5Thm#`|1S{0FVW%)eegQv6?9{0FVW zroQX%KYyjqiu2Dg`uF{Br(W;#qWE$}>)V_DL-SwbA6A_{bIv{4KMZI+Isc5l?z6D| zeg7Ma|GSHS)B45{{;x0ow-o=T_2m3B{JW3)n%3L?egD(N|El8Ov_3t;|3$_BHO0Sa zJvsjj|L)_yruDXe&p+p%ybtG}vHvu!znuGzbDM3a;`}q_&*JVrtY_z+(bs+4*R6_d)^4_P_joVE-7DpU`2G ze|P`Y`oTFT>qoo)R$b_@sqcQjmipaSb?2PBuTs6vKll91v<^>GU-tid_Uip_QXSlU z>eOC+_5)gPfB!fB_xw!b*U?veK=l__w4R)QM%{y@en+V{ttaQ7d&qkO{zZM>dly%< zo}7P1UTf&Dy8G#0(RzD+)SMqgZkl_+=jpHeH?1eX-@~`|>%p1g-?W~be}?b#i~nnj zf75z$eiZrdq+Z|uY3k?5`DgcfHh;A5eWmlyxhMG#XgxXq#6Q0m;y$$BjQk6&XXl@h z`z-zC`vUsUk@L^)^%4HJ6#q{Y|EBfi{4@OD)%oY#6aNERPtK1b_vO^f_l?w7w4R)Q zGH(_!PvNb_ziGXlzeC?&)vYT2`TpSFwBDW{_2xh4pOODs`pds*Jvl!L-^^3|Utav1 z*3Skoxd7SA9Ch)EGJ&%TBFj(U!T4o_2G?;loo_s_W} z_dlTZcK_1+e%bS~#$Ty=sQI$@!iv_D^G|YTpA=kJ|1Q6Qf8FmU>cxlfU(x!e=KhEL zYrN*m9?nf4#eYTX$@ypWb)SXx@B3d_{9jl6o7Pv3@PAqHe^c>qT2IbD!@v8uuW7yQ z-}BG;W4w<(`^dl0dUpOv?woT*{>zI0LhIT2Cw<+A^UnqJ@B81{`DedE{eafD=J|8} z8Tav0=b!UW=Fvb;&OgJy`z)+~-~amJ|Bm9{w7!0X|Fy;cy~Vd_Jvsjj|L)_yruDXe z-~ZC$|BB+@w7ztN|0Tu$)y2PQJvsjj|L)_yruDXe&p+p%ybtG}%%1_Rx95+&^@sCM z<`4TF=FNcClk?B$>plzX-}k?{_}^Cio7Oky`E&jm{vR*?P3y_|XZUv?_cg7z{rmoB zivJD8ziEADg#Q)A|INj}X+1gr4FB%qzNYoI|B(MvasC+Zb4l?Zv<@@>di_Z8e`)a_ zv<{p4u75dyh<(ooCBKFB@B80Qz52X}|BBX=^H25-oPP#);$PRM_2m3B`nu1;`uF{B zEdK8<{!Qx}oBW2pzw@xP_`H?1eC@E{uElz&Of8C`?#-Zz3t!k ze_!$cSn+RKPtG4>-+X81pYzYyKbzK*^Uv__KJIH;AJw1V3G9FQ{lNY=sLvyG*yP{c zf3<#e`*+nn#QmGqzJ7I6-~4{vHKTDiojMiVEN;-XX}$gZ-t^yfxyG+k9ehB%rK0uZ z{4(kuEcH7|y=gr;zuYyW`<3UQKCfLHbZuHs&M$ZI_tmbUzj#0WD_U>QfBN}tqrdK3 z--F1{w4VI_4&TeDS6{tH_&2R5=a=F8eAVIqS`q)I_2m2~^504QsW`vn^Wz*dKF6Y; z+?mZE?XzFec=_kt68{5QPtGs#&3-@pFQKpe7h2EGFC+I^`pfqP^q(W=m)+|l{OfrU z{-2;;eoX7h`DOUOOLg4Gv!eVDXgxXqiQJb{FW)y(U(tGUei^=*r{sUDh=0?1JAa41 zzZ$=a{vzKS{F~O>^Pk@Q=lnAAUrT@aH?1e)$b=iCzi16ohcFT>xH^j96A z`DXnkf75zqHqFQ3zl$a9PQP3xmRKjtaOc@{|J6f)ctdQ8MNN+Kbrmft`!=8 zrN%?%%gq(7C+C+F^zZT;_}BezQeWlI{)zktw7#ji{~`Yx&wN=SK8pW})|2zg=<7ZU z>)-dkviQHQ_&2Su9O3`6;-B>n|EBfi{4)HzkNcX|+x|WOoFB&fTv+@UTF=fe$(?h` z$bVV!UuZo$zof7GaDEw|f8M|EpY@XWd9JG;(E8Rqf6gi6K3)=)Kj)W0>&f|L^mU(w z_3!&%uYUNyL)82q(E9oj{@1FG&*9$U+q9mXUq)Z|Sy=zR|E0zM6~(`4ed!4QON#%i zi+|I4a()^9-N$`R>uvv@f6gy?AI>df{Wq;A=a=Np`DKvjh2~G}d!Y5?{4)BwkNcX| z+x~t3n~VQ##lLBNbDlrvm*M~M;@`BMoL`22_i~)?>_EpT5tOg`9Brsm+?NA6#qf%F!Qh1j}-rx7XLx(u&M9*m-B~RGkX04 z)iHk;*1zw6JN0^>7e(FsfY!G+{fC~v8vn5Blr`s;>>mcSo}6DsU-wy9|Gxi?#sA&K zziEBr2>;g?|67WG(|U4#8UEeJeNF3a|Gxj};(t}~Z(5%o;s2uI|C-|8w4R(_hJW{Q zU(O5&*I|0(0X=$8GYSnVg395?<@WvEB;OE$@yXI zo9|Se{BwR8`)AX7a()^9-N$`R>!bSfJAwT#zaQ8?2IVJo*yP{cf3<#ezaLchkm?8f zZ`G~VHJ|J1rv8Shvw!W3DevFU)$3Q@<+e-T%{i9iN}>d>=dC zv<{p4q0et>>da5zQ~Zab{10gT6HWcl`laz_t4{fy`6W^L4QT!BrhX_tjd!1g_3wWF zm-|1qLq9L|_dgxmq5IaKe|_ugrghl#Z_W?i(leU#Gj^zoPZz{3CoXqh5XWT?zlD_2m3Ge4np6{9h~L-?W~bzeWB#sn_~BP5m7C z^RM0O+5FM(hF3IB{y8_s|A5w$^J9GTdn^1e5%FJWJv%>++-K=8-xtt-j+`HNuaEGr z=XLmhf_nKettaQl;r}kxaUai$@;{*U&f|X_-3Ax|E(haP3!Ia z9s2%i{3`m3e1Gt7T5r$adh?(2++*#+ye=GGBt+(sn(EaQEnZNSSxiS6+w4R(FhrcK3uR6Xz@;{*UHL*nJ}2_uLH~-@M}2<$3llqeKUWK=`&*g5Zo+2uWQqK`~7MBAA3;a z*QpL_-m;$=(0a0eh&t5gUM* zp?f`>KU%L}(Kz{M-+=!Ctta~je6vpo|4T&t7h2Eu50SgRKal+c`J3z?y4Oee-@-Wg z(7G4?P3y`2A^dBd4L&Q%Kl_KE^<@2x+?P`?-&*$~f75!he+b{qQ~Yb)3;(9|cK!~1 ze^s}N{vzKW{F~O>^|v?w**`@7Yw551Fs&!+Z}?`O;$Q1t_&2Sm^H=NT3Dx0$M#O)i z^=$tTxwFoZ|5oZNT5s3Cq5D^V=CAy-Z@~Y6)|34MzNem~zsUDT{s*+4Jbxnh+vqRf ztiR-MT5q4PH?6n*hvuLB%6sHbe&lajAF+P2e+d74 zZ}4wgZ|Cn&e~o9J;-Bvg{!Q!Y{FPrmC-Rr~$ltU+>hoj%lK(XIrrs}f*sNbe{`ETR z9RB&<;6G>`=Jo6osAu0meMddVLx)X$bN+KoS#kbz>{iw3{O7Honbu)b-<h^x1Kbu!=}EOzi+Iu-nT@&DAdY5m`xroNoNy!p>G{%=$Vbq@39zprTh zZ<_ih{|V|l|C9G$U!R}7`4{s0ujTvysd!A+=;ptk-#_2G!TtMwIgdg&llyl)-&@`X z&dre^si{W-GB7+)7lyNJx_n#ziB;L|HJn(>eY9K z`ij<*{d4%%J|lRoh=0?1vj2$OcT%r)cAEM*vVZPg&*qQzE3asr{IhSy|A5w${WHGV zCx`zfBK`}lXZz>KeU|?6eF6RF$o{!|eT4rljFXQisIO=}**}N>yHv-0JS)oofYy`! zN94YodimCKKk_%NC;R8{%{;}wo@L?RwBF9&q3^HiR?%PN`-6Yedb|JV&42dKk^fry z>po2D$^IjJGf(la=YIG%t*7%>`-Ky#!~cwk|3d58{yB1Iog@FP)K|3Lu75-Kul~$m z`DfpZ{{gKh`)7Q!e-85fk$?8jLF>u>D{{Y0lobL4MYZ}+c#|IAbTbN~1^t*7%> ztAb#k3Ze)2w`^%3hQ`{(e__Xhu_^>+Ra_1AdjDgOE1;NP^K z&R_ZEb0UA9TbnCdANBb$f60HEdQp2wBCMy8vn0qtvRXBKB&*0{me+R3=cjod`8`j6-M?u)ng8K? z8TINvLw!Z-$^IdHYn=^VEB-|FruAg~jr?~~uX#32{T$gpbgyUgN9*+~8Ylnk8}L7% z^<@8mZ}th{e~F0yLhIT7A#&IE2eN-4f0O+~_xcF`TNo!FTKB@gX+7CLg#Wu#$9+62 z%Kw1Yll3=pUrxPz-$;E$>&gBhd^1n+f2&CTruBCI4t;+$eii*izCZXkt+(rMZ~n7? zi2T>mU;a(&$@&|*@T}dU-;1_@5E+UuZqsKSb^~Q7_+Hsjq0gUH^ve zU;UZC^3T2j{{vc2_7C`G{}AN+Bme9lg4UDgPvm}^#@{dBth?lIT5q4Zzfr`$X}z7lL;W?Ld5V9& zH~2TLr}I~S`JBj~=N9>!)<=DQ%wO`Krry;1gbthaYskM|XPv`8-y8e~t;4*YeFF9D z8>sK7=UC{lsc+8TUcEuD>-_E28&s$Bx7VIBt;43iIe&ZgcHUq0w|9MCd)TxNoBC${ z?);w=kIvbGI(OUo*Sa>XC+BZF|2vJ>xlK^#K0E)7u1)Lh`Aw7m1ofT&a{e|!eRKY{ z^Uvj1=WjdzwxZ76LN}B1H@L0ze*Ke{<|{?`BVci$|3{!ZVc*%SKnbf)!hHuJAnf5xFwukS+C7g|5#P*dN` z-(8Q%|DUTK{x9OsDq8>ZroQd}h{pek>fm3ByDD1$lcv6zzq=mN_N1cH~GyfYw`;!zu8T?HmxW5&92dSf{kQpz-@nc8^YTkhko?wGw4UX6sm7BNB)|0)t!Mcy*LZS*J!@=H#T+*toj>sfw0f5-`v8~Yg3dY0dH8c$A;{JvY!dY0e#{@eV< z@89OPSboU~k{j#4X+6pBFwY<56ePD5x;CvR`5k^= z>%VC|$?p))ALSGzzjJhLT2Jyj^qj^kry%()(Y0wk$!`MxO@0&fZ}YoNe#r@v8|%Mm zJJM?fx>sfv`X*@YW<#uRmMeA99>--Yr^PLSMK|4r*zeyrc* z1j%ovqV+7lMH){|ko>NyXg$kseE)5JK<@=H#T+*toj>sfxR-{b_z?e>b+ zv;3~mcyfZ|_N|K6v;4;Q-{v=d|0cf!Z^*B53X&V^ziB^SeWS$q6dA1FZk1^(;TuZ*qdl?ZEbm*0cO>(Rgx# z%I&}pD_YO;8{dDM-}wF8{FcctIYDw`{Wq;=`LTYJ6C}T{RJ5MucfQ7x6C}TDD_YO; z8{dDM-}wET{PsU7zsf17-1f8no7R*3_VfHvPC@0j|A4Md>q&n5w`sg`3M#+-M|5pk zPx70v9Z&+@xk z`fpm#@?-rbCrEDhRkWVvw?^a136k6W6|HCajqktBZ~XpEetS>IuW|~K8|%MmJ;`q` z&mZL!B)`jaZCX$A+dHfA$|*>Gm+RWJp5!-y|0cf)`nUN#D8J+cmD^s{f75!FAL}%h{U#?!em7RM zp5=F`#*-5yzl{~GXZelqzs+y_{!M;+UX)+u6jW||SpQAyNq&2H{wSxQ^4oJt*QWI( zzdb+Jc;yr%zcY1hT2Jzuz<-n91pV9mZkAtig5<{fZ(7gtWBn#4NN(S)Xg$mC28|~t zsND8^zoPXlzw!OI`HkPd&F@_KB_~L3tpBF@{8sAPw4UU*`$LUaPC@d! zQrD*SEWh#nH~CG_zsYa+Bl4@9g34_->%VC|%a8S&oS<^s{j-YJv;4MbJUKz-w)^FZ z)|31u@ZaV)e*ZSVRq{(tkla}RP3u{Htl#7W$?qE#t!MdtUgOCLlHaWrt!Md-@4wA& z{QgaTukVy!eqYmga)Qe3^&eEUp5-^b|2Dtz`?vXB zEWhLg$&K~jw4UY1`b|!d{I05KJh`}`QFWo4 zSv~8g`tQG|B6a9yQvU|)AN8N9sJhV2te)?W>fd;#B6a9yR?qyQetkvi(9NWN-(y|f zzT*{D7rL3%UsLKHs7M{Unbhw+RO(h#R9)z1Qh$K&t?vK8+KQ?R-AwBDF7N90e!U`n z(aofO&r_xDoQkRo-OTE*>+1GAT#-6-GpXPGeyN+OsJhV2to}P)-R>O~sY5rj`p=cR z+bdFsZYK4wKUeB5s;Iiq&8+^WuI}~i6{$lvllsH=c6Eo@w`v{*RTsLM)bILUSGVgx zMb(9FCiSyl?&@amuc*4v&7}V58>Q~@imD6U%W)5NkveoUt6x^?Hddq#-Aw9_ zJXz|_tf;!s&8&W1S9j$56{$lvllsGNmpXp;>GMAVRTsLM)W5!{t9$(`6;&6ynbaTt zY*%;q){68+H&wUt2^|AiqxT-N&UeSrEYaa)rD?m^$&J+2lrN_ z4&BV^zfkHnRiqBxOzIE3Sn57iQFWo4S^dpj-GL`6QipCP_1^#NThY}ARkzUn&*1s> zLRTOADC(DY{kzwb{nM(huD5?e*ZagiDDm(8*YNXq?ETl9l@Iqdlm3JK*FB{ks&2vi zubow$zW=cg9H;)9rT#M&sYf?6|G#Se#a-Xt{t=!2@%sFqfA_k^4evh}SnvJg@cwhb z`^U$M|DpZsg6ps8>U;ZFblrdKLzDcw*EQ~V^**jMllsB_b!h*)(EaPL{QW;vd{5Z_ zSN;AD_TR(n-??4>-Rtwuzh8Cz8tlKn-sKSccztdQ-hV$;)#>{`cKvmw{+x>RM>muC z6XWPRVf|qLKlJ-y!TbOBJKw{X*Zcj3uKwNrdj5LuPgP#zhBYu5wFjG|K02AJ7N9c_v_H_--Z5u{guCe zZ+G`U{QG;M{Rh9Fw|DOo>xgn&=5pzE&#xHA`Z;0!;P?N~`N4vJ|DWi551&6Qxch3v_(M>+^sAyVo^tZ}mQ|Gn3CR&MEZy9UMCU2wnBv>+|>jmFsUVzK73G(CHtq zC;iXu>U-xW=+wvSN&Wc!oB#gK?9<(U@9Nm1Ir8@hqMK*@ho*m5U;g_$voCai|6h>0 zw@V$=-wW8i-qbh${B8Cbjnm&V7}VcC82|ku(|Ypv4^Gg(`R8{>dF~JYbGyTO9-*6m z)%b7nJ2KnlcC`Hc_3+Gpujih0Gt2J?|GlSwrSVX8N2e=V|5r`_Cch)(tbcAB{Ew=? zOxLFMzijGT|Ks;>@;iJ(m*0`uipni?Gs*Apr@H(O-!Mn!9lDw2cbNOtJPT5HO{s&{ zlfVD+FnMd91vT#uU#Dx+dNThe=-=dbkn=jtzr(B_rg972O!7PU<{i43<+qRf)jSJQ_j0L&)|2_SkDN8nf|_^x z_UhWSp3J`q`ZxLQy}0|{?t7%7atqx|^4s&XF1NiG&yo3qZf5!I;eIvGf~woQxT_0V zPv+kqa@ITxYToU=P}ipQWd2RizsYa+Rb6g-epXSrg>EMK?JoP4-B)$_LFOI0ndP^e z`_()PQn#YiLF>u<+fCk@XF<)o-7~s2ttazug8of@{&P#a7j^jsm0Rd$lHabfZ`pNA zmmg%_p_@bbHT#d*r`1<~PKv+BXh5wap_}cWpX%z%{_)sa)%~gJ;a`ZiRJ8u5&Hm-; z`tScawo2pwP<8NMh<8@B{{PYT{-Ju+XS=5{?(A%f;}j`UoFXDG8R?Nw#3PbZjQExu z5hq7PN)ajIbR6-7;D|WlcqFfM#N#PB87V=ElT(WH6vqh}&r3#1k)DinN_nUBh$F=x zF-DC^OrnG$J$*HEeeU(Wmh0Z%UYna!|7H2y7Kp)U#yh=Gp%KX?Rj@OzAY8LVKul3rrp1;37 zoxlADf3JFdf7x17=QI2~o&P!eU-;tC-yD6-=zpPR9ppFi^`Y;DX8!(xw0_9#!pC$x z{E4XiMp}QY_J5)NzbEpu?~&H;PxW1X_$H?d_lwGJr1i7;Z-2j-@4fi)@7%U^q|YSi zYa5sS{o8c@@9fZV3pyTNDejrj`a<%b-oJOYtN&@$iEFPF_kBt0=bujX>HO_K{ObQh zdgqs_Z{)m&pQrkB_P_8OLw|Fn{g?hQHm8oKl?VVFTHt|{*(6~-{f@R22uH$)|dHTcK_7A^`CV951e=2(ucZ#ulbVJ zFZfTX|4`rdAMW1^x2g_q7j+$uw0>)P`ah-qUH!tVL;bqNq29E<@M@~>&VT){Rj2&d z9~PDWNbA2&^tCy=mUwlne{v)mD_1pDd{OQntk?TkPM_T`B^56Aech}H= z9s95PkFkTN4gO8*GuH1q-Y4~6$9;?ZP3yDXKh`h)*?;lhxUT8zX02cL zIs9||;J))y{F>u0E+K0jl;&jdVXZ? zuyCd7AnWCZ39Vn5>a&0Py3fk`cm9{|9sDmnHTWNC{od5S^S{J;k^iM15B^75zcbZ$ z{^#u9`@g*Tzp?o@tzVw{_x>+w{@L%8|B`9_l2qUOcOUmPt>^xo|MhPS{@4F`@ITV} z8>xTifBo;8|Apqi(faz|rTWhQoc(+M?3Y@H@f@S|KhpZn)W7%t#NdDZuLl1kt>@3r zy?^)Fr~29bd;eRS|NC0KX?@EK|C>~&^}qfhQR`=<^-Zb1_wPRLYg*6!JO7Jkn*S@B z|3>SJXHx$z|HaeI|JBWZqxHr7`M2}$KI>Q3zxTg?@W1%S!T(6>`)BxnVelW%JIa5g z^%qio@85k^*1z|^z4_;U&Hc-?zCHEt^S`J0e@?`|Y5ks5-}`qT_cg8O{=NSV&Hv5K zziE9#>figntogsA`8Ta!mg;-|?&H3u_1wSnzwTi3zoz+bw7%|O>fiZ~=Pg~oix)Nj zjn>z_mg+nI?z6bE{=NU*ga36e5B^75-<|sR{-0Kz{I7d;@ITV})2Y7q?>;N*-}~R% z{6EnAo7T6c{=NU3n*Ya|f7AL+slNB`KJIH;&;5J&5&N-^@RQdcX0{{4;31n14oI*AM-f zd*Xkj^*ldH^M}Z7*U*1K*GuGQS}#7ohi^Tv2R97$OQ!W={)vC)oN*r4HUEv)tNCZ- z|LRcB+>`S+nSTyHKg;@SpMUYq{4;o1RQ}9AgVu}rXZYVY^kMEv|B=@7{HV|W^`Sp= z&&c1joi}?|C%s+#-wERu$#r!jTvrc&* z?ri=|>v{cl*Dv$W@UQD8@;9yL`B9f2^H2IS_ay(3){FTOb<8=#|D{7c^G|+{^=kf! zZ=UzVzpk6`-)Oy>e@5=?bG#2bTmGi?y#ICQ&-^pa*mp}8*I1gPn_-FnZ zv|h~5BKNz7{>(iif75!NKlc7vr@Rk3@5tS>K4bkd{|x`SZo;=|J@@a%s<1wuAA_0TA#6gnSaLnaA4@q{4?GM>$BcJ)-U;M z{|*0*%s=Dz7W2=@jeU;mK-W$9Z)E;C{5+{QG|K~XcpUge+ zKhk=Beo4=7{JU}HpF!4({yj5u(4h5V{uzDUXJ!3|^Pl)<{>bm)`3wIet>2sS>-;nS z#6NRSe2=tV%s->A`>d>g@Bi}V|HkIuw4UdWz5h#^fA%~4o7Ri@XZUv?_cg8O{+)m3 zkNh6yp5#B$`Wtor%sC_fh33D}dNu!yzV5TK{=I+pOZ@L^{!QyUXZU|&@Xy?n{6|_Z z=AY5mecacyp8NOyw>1CvHUFmdEi?RYYW^Q;{!Qz}{4@N!kNcX|bN|l&;+f|Eisrx3 zdNu!K-7KDN{;zKS8?9IKPyD+N^Uqknb^qS~e%0}N{y5Z+w7$R2fAIy?aUR?+w0=ff zFXo@o*L_yjzxThr`QO$2o7T6_@PAM9|6KELS}*3G;op7S*R-Dd_x?9D|2H@Pru7Xo z{9o4m-_iV=){FUP_;(-oHLd6Vo&R+QoBuVi%Gc`Me>Ma_Ss^=kf!fA?Yj z$@({~FYDj?->o`+&&xyoNb9@n{MS9LI?m%&QR{!C^oc(+M4>$kMHvgveV*VKZ?{EH} zZ~jf|#r!k;yN~;t)@SwS^Mi8aa|8LA@%e##&-U*p+Wa#5Z&aOf9G|xWf@!^& ze@5MoR)3(?o7Ri@C%&0~2K9d9oB3zZdNKcuysjVmGxv-+vS~ffkJ9`ga@#fZ=Q@hq zOzXwx_wc>Y{BLN!P3y({6aUOP<2Y0BAZyDKnR}A^NbAM?h&tw+;s4U+ztMU%|HL=X`{AGK2LFxLtNCZ-&i=>yuyd#% zX+7_M-T5>BjPrPH@Xx>hB!^MY>$l6F`DdI5*N^-&{|s6$=4X-nT|-QeG}p4V^J zpZRC_=eohaX?@1}W&RoO1NSY~ziEBe`^WkvfA(MeH!}Z>-&@Q-BRBRrt^=+c{5LZH z9Dbhm@9zA0PT@G7Tc|g!pY{2r%@6U%b4u{G!9Vj)&STU!rv7RE#@~Hl{u$JI;qN~% z{|s6$=AWzRKb-%>Kl4w156@rt9%=pF+CTG8{4@8&_ekr-{4@Hx&&vAu{x5I-Z*2Ze z>v{gz<-c@E^RN9b{F~N``DgfdANMt_=l-34=AZl?=APs~()t^9{>(We|Apqi(Rwxi zjK1!(vi`k)?U(U;_BH>e^_?^PKQZ`c?n(Y5trzpp=<7c2Yg*6!d;eRS|NEMM)B2Vf z{x>!M4>kX$^f3j{CPdEQpH~)>+tNADX-G}*S ztlzqS?|=W`pSdUXBdzbR^Jo4U=b`%r>xbu_p!H(@8UEd8W&L~q+nfJg&A(}V`waj0 zH2=>v-=_6q{u%z=$9+xfxqt6}L-T)g^KV+;FvI_4&Ho+EziGXge};eeabMGV?%(-e zcd+?i)BHDDUp9a2_J5wYV*Omy{5M*!=AZa?ALgF1e(V0d|J{Rs=AP7#w7$E}pZO>L znR~MCM_MoDpW)wqR@T4wzqR>)p!qkgZ=K=)rsn^#=HIkl%s<1w`?#-ZJ@@bZFE;;I zHUFmd#o9k}&dC4T=D*Q;HUA9%?&H3u_1wSnzwpZ7pSdUNXQcIF{)z8}mj?gLJy|~^ ztrzo8{Lk6H_y2J7|7`PbS}*30;s5^T|M}+Mv|h|V!@v8uuW5Z&e?C9({LAMDv|neZjXxc zKhk=hAEo(0jn=FACw0s@ zA#+daP3zTv|Bip=pTWbT@@M`Tv|h|V!~Z@V&v~2{)qkY*JU{C5e_eIt|Jl%Yr1fI{ z8NPMD3GNx{*PGUh`DggvraJuZ74dIcFXl(oG5-wSGSoBwjQ7EMG5-wTtW(~HJ4Nz0 zt>^XIUBApf!#~#z{!Qz7e$?g9{FDC7J?THvdNDtujyY%ezjUbQ-+%IZtXK0-eDk~? z{<&`O-)Oy>e@5=?bG#2bhx(D$^ZwVJKXcAFkJm(eo7VIC?eb^-8Rx-uBmc}lgVu}r zS>%3~jwgTiUGg`r=lNsrpLNRn!1?3fv_50~GXD(!TsQbPt>^yT`7{5F{K-xAJa-4J z&)7eie};dq8~mHr^ZM=jGye?#TsQbPtjwXg%s+>pr{~x1{CQ5{IG$UmH?5!b`K8Sd@yDDqc$+By%s+$H zH>UpS^A~@&mHB6o^`gIL%KS5Ey_kQlqW^II6aUOV`8_;;;d`X@du#v9Kk?7p6W=4P z7xT~P>pm;%-}}G3`M9;XTQY%zUJSwzH^5ECkFq_J;{Hh^ zP3yUT?|)14e_!)&THi9m|EA{uq2}MTUd%tkzx%kaX+8Jv{4btq{;z2M8?9IKPu9)i z>E{3H=D*Q;HUGrF`!N5E^;`Gv{qI*Dzvqub{YdNk>-?F2#(8kR(E5qz9%#Loe@0*T zSy}(y|Mup8SMzUL-#)|tJn5JJxDGCA{u`}V^H2P{5A#pfziEA0 z|K9)Z!9R0P>PK4NUFXmIGtT2xQR|-hXV7{v{|x``v$FoZ|E=mr4iAX$r8UC+r{u`}V^Uv__KJIH;&;2|9 z3$G0RnR}A|NbAM?6W-UpZvXl=A4kZ zC*PZ3TCe7xe18G+&)|0PQN1>;=g&5&N-^@9~|8*k%8?9IKPwJR+Lgt>-o7SuOC;pj#1`mtMpZRCddNKbD|NC@2 z=W$w8|B=@7{HV|Wb=8soXG7nS){FUP_}2XhQl;#J_31m>*Hc z{4;pVP|y4`-UsW&{4;#BPI({h6v^MTp4V@8{WAXy|6DitH?8OSQI|jSPx>?Wr2k0k z#r%jm=A7aG(xIODC%?yfHUGpn&->w@>jwXg)~oqv=DUA89@Bf8F^r|BUl^ zO~kipJ+I#`f99WY9$Yu_&-^oJy_lax?sw^U@@L;Af75!NKlc7vr@RlGKmJYYGuAKj z&+yN6gMZU{?%$n1^Uuhi+*HqVchLHb{ge4;_~*L8ziByIN&+yN6gMZWdjP=X> zGx9$$^k@DV?}PPO?;q=z{Mmo;-^lzkes3}VjNI7gxDL2(@ZZS%bNG3Be(lbm=M;|P zxrKVu`dOb}+WZiIJf{S26Xl=zXVCh_)IZJN_}(SvpF!4(zK@9cXV7{v|6E1?;ru85 znSb(oc>cooNbC33{+WN`pSdT#M_MoDpV8NSR@T4we|htNWAkrX&-2GFf99XzpZyO1 zruAa}8UEeJeNF4Rf9Ie1C%=ceC;5-G{zjcYbI$O;(EK-AujZf8*L_yjzxU66iT{1g zziEBv4F69I{+WA{|48e_{4@HxkNcX|bN}A|mgfJy=HIlwWrqJv&HqEqziGXge};ee zabMGV?%(-eJk$JN(fl`BujZeuo5j=3|JBWZqxEY3iGTND{u%4H?%(_0uR4CuABXyp z*7w)>Gv|!+;C`X?6VE-+dNKcuzV5TK{=NV0&Ht|E-?YAchW~q-|L2;2(|R%g4FB%q zzNYouzxThP`M`t-9bDA>H(IaepZIql=ANv7)B3Xhz5m^Vf99UlkF>tK&Y$@w>z}zN>wl#6V*VNa z-DhR}d;eRT{|B0X)B4sK{%>mjA8Y&5&t{JW3)n$~mw-v46re^v8uT3@XFGv|!_ zuWkMttylBU@b5nEYg*6!JO2x>4E~vWvVKNdFXo^4UU+Hn&)k#sGtzo7|HS{C{d@lp zH~-Hz|EBd~{uuu6Z~mWe{!Qz}{4@N!kNcX|XZ7dvgK~_|4a(1q&ky8V%s-?5M%63F z@wxjcz2<#vdNu##dpntPLgt=)@2P3Mnt$^Bqs%{p+r?k#wP`(n{vY1IHvgm_^UvVp z;>&t%S}*3GQMaSjA87Ta^vcT2Ju1roNb7lil;#JK z+b-3Sqpp|8&$M2Aeh=RZLp}4)@NHTz=AZax&Kdr%6Y<|@y_$bg$D9)~_oUvmUd=!8 z&-^oZSXBPZKZDkb`Dggwr{g(~)1vy1w4Ucjeg3bjj{H9x`i`_-%s<1o?l-|bL;ZTw zdNKbD-`iA&|GgsqP3y({h&tw!5C2>@_;0jc%|9b| z_Bq~%okRUd>v{j{&Y$^boX2Y-zD?_S{dV~?|BUnCx{-h8pF!)z{48?6OUIKx`!4yL z*7N+a_s=@zec=4@Z(5(RewlxUf36$+o7Qvx?);g5M*ifcdY-$3)@SUW%s<0F*A4zn z>v{cl{h5D;f36$+o7QKnU*?~Y|AC=D^Uru6tj~J?Sij`Y{)_)c=AZFGK!go6h_* z$a>NDi8KEUS}*3GtLQ(R|HMD@Pks;2U-%wr{odL?^H2OU_r&)|>&5&t`nu1``uF}X zZ~kv={!Qz7{@CTu{4@Ns-{If1Ud%tkzx%kaX+8Jv{4@XL_b~S)|B=?;sPkve8U7cV z|3>T8{4@Hx&&vAu{@E|_zpwc>t?!)S|B1mrb5HUgX}y?#Mql@FU(T8{F8OFc)Iz&y7_OkUd=!8 z?>@{wWBu0sd;j}Y$M5;$P(RZ8{yKl=oN*r9FSLH*xd&P==AY5meOA`L_rJaQ-_`t^ z*0;~_e^2xOT=Q>QFXo@&-+kQIw4VF-{x>xLH#h&L^$j!pU)KEJ(fpg%i}`2xcOUmP zt>^xo|8)nO|255jqxEI;$8P_R=Pj;-i<(%@d|L()wll5;}U)I0(zkBe{+>`o| z)_2$WGyi1$GxucukF;LQKf}NKtgL_Ue{1vqK=W@}-#WwpP0jyf&A(~An16$!jDf8mwEKXXsk&q(XV{1e{` zFAe^gd$N8;S}*3G_@A?X@BiWE|Jml>v|h{~!~gxw|MShiX}y?#hJW{QU(@=m{(OE= zj`6uc`I+(gfqaYkXY}8wdgVAicR!`qypK(<=AVbZHq1XEbIfmOazYo*(u3 zzpgs+|7_?x(t0uf4Bxun1osT}>rLy${4;!SQyu>IiugCJ7xN?Pn12Ru8S0sT#`|Es zn16^XI<y-C_^T)qwea8A_{u%zcZt!nf&;7ge zXZ{)albh;!?haa?v41lE4F6m=_&2TR_1pDl{u%zcZt!nfpRs-}T>l0W+|{u`Np#_uiWpOG8;9M=KY4gMRMe-1xS_y6wvc~0Rto?EClt)KPzrOglV z$8$>XHc|eWe+I2@O#Rd6ulIS*xl+eN*301utrzppRrDXuf8w9{C%=d1FMN-*esArc z`6vFFd*Xkj^i#oJl*_X-TXINujZflcOT}Tv3~3Rz5o5H)U7ezo+?suK72u7xT~X?>_EpTF?D^{~MbBo11^r z`i2?)FKhnqX#P#>#r!k;yN~;t)^q>P|GI$~gxnSZkWnR~MSM_MoDpW)wqR@T4wzqR>)p!qkg zZ=K=)rsn^#=HIkl%s<1w`?#-ZJ@@bZFE;;IHUFmd#o9k}&dC4T=D*Q;HUA9%?&H3u z_1wSnzwpZ7pSdUNXQcIF{)z8}mj?gLJy|~^trzo8{Lk6H_y2J7|7`PbS}*30;s5^T z|M}+Mv|h|V!@v8uuW5Z&e?C7b$N1c!{LJ|LK)%KNGx~2-y>c9%yPwi)-p8g_^Up&! z4f9XP{PVrnz9jR{;pb`nrq93c@qXW`I=Ef)(uE1F=ge@5=?bG#2bhx(D$^ZwVJKl9Hx zkJkqO%spY{H+e#xKx7ypgSKjZfn^UuhQeU9sZ>jwXg%s+>pr~SJ-f1Xn~ zj^`HYP3vcUerfYV{PCO;ylwE${FCz-^^K{2`uz1C&pB7B9%{WD{_2F*i}~j&`VZ$n z@z4B|-^244zDHWWxAxEc6aUOT@judfG5?Id?z6J~z5mOb{~Mcs(|VpicKI{^4FB5i z!oO*~n16T8{F8OFc)Iz&y7_OkUd=!8?>@{wWBu0sd;j|f|I9t9 zA8CDmoj-HVI1k+~SU)`X1g#hI&+zX)E9>9;-`@Q1YW_{@+h_Q{r}=-b`8KT=^Uv__ zKJIH;&;5J<8=C){n}5^#h8g}ZYyR(O{!Qz}{4@N!kNcX|bN|l&x`WOCn&!XJ`m*_B zxBv6J73=4s=D*Q;HUGrF`!M&6^;`Gv{qG+9Gxwx^r1jl({>(q|&)k!BKhk$!jLf3f+$s`)pqFV_B^xo|Akiu|I9sEKO?Od^G|#)yfpY{?#cQYX}y?#;(yNmz5j=s z|7V+j(|R#~4FC5x|Iau7ruAa}8UEeJeNF4L`t$jL=U+ZQC_ghkKag)R|BU_{hw~qw zyPs+~H2tje&-VO&@CN<$kgpnO}x~t{eQD*7N+Q z%b)or{h3?Rf28$d{zDye%J6^bP|v^L9c|H7d-Qd5`dNsd{{MqMN|2v2J zk=FD6*PTCe$~ceLM0}gp^ZM=bXMP#y!Sy5m%rAr1i}_dNewU6XfA(GSH?8OSVeg-H z%KO0iKf36$+o7VIC?fNsn z4F6m=_&2T3Sij6KBY*B&t}ubm_9#jRGs`Yx5WQQ>l;)5^!e%FH9G!E)j`(Fwh65l^ULV# zJ}c`#od3i>^GkjY&rkRtY5m^XKl4lcGq=S5NbAM?GWxpD%KG>IFK_;DZ2nE_d4AaC z&-^m{v)|$0v|h|F!@v8uuW3E^@BA~r$1t->CCvP8t3en*T=Y)%-I0y3fk` z_x{;0@xQP6H?8lS;s1%jKXXg+A8EaqUq)Z|abMGV?%(_0(){1o{F~Od%<#Xd`G2VS zH?0@*%kb|$?rU1l{X74QXPW;jn*T=Y)%=omvv|7szq(%@c|L(*5lJ##|U)I0(zkBe{+>-i{)_2$WGrx@UcvaN8 zXMP#9Ud%7Uzx%ALfA4>*`jNu}BK}S5TW9#cNp-vrk2T+>^P3yUT?|-rR zzpD8+tuNO8nNx=UYn%T@>(%@+{JW3)n$~mw&i}$IgMa3h;MPJhTS^c{|zW?*!|HA)j@NHUO`p>C<|NMPYb;{|&|5{Xj z=2Fv_PNw={{n-Ef{fE#0t^VYj!@qxp{QK8W?*Eef``6*;sehUue8S%+xK(vv{gx=eJ9B(%@i|ICkrhehSj{5WX6m>-A#eL9}=I4!FGNb7n2*607a>d61Iq3=lR#r!yY z>wX>FGt{p)trzp-@V!lS_}?qy-?U!L->Bo?zXop^>X{?Q`(VA8ABS(&DeuFbBKe!v z^ZM+)xQOn>Ia^dD)xn7>iSoH+bnI@B{i=J!~y=EwNv^HTWd zy1{>=^=f_`xwFslKI|OoM_SMOUw8h@kK;UE6Y*_Y&+E6#pZRf|2iJ}KGd~VmFXoSt z`&~Mo{MmQO-?X0Rx4nPXDenX4kAKtpjP=X>IQ(l6}{Bzyl-?X0BZ`Yssaro!D!M|yJ#`Jp4S}|GV?&If>(VexlyAzU=uat)G+p_dU8!g4@O4>9uJ+ zUq7k;$!B%^w^awVZh2lAX}x%Uh`JrEUb#oTX}x%Uz&FniLG63^=lLOMy?B10KmY%8 z@KI6zd4335&--tmpVoQg_mW6{ruAa|hwp`iK~> zo)aL?4b+>~tLF#&^ZXDzEb9Dueh6AGo*%;hJ{`|_oEFu8r1iZ2_WA2NiTpns`ttk` z?}PQ?`5}BiHq@`zz8Aht>&5d!_|`rf+$-YWv|jAL)bacf)V>$_o7Rixhw#rj<$ch; z7yeD_dHr_RFV7F*pX&zyruDr4cKP%CK!2Va=s(hWvHw!Xb3*vPbg1X~f!|}jdVat+ z&k5n5>jwXg)~n}-$en$T_hIKyKhk>M|GM+%`613j_r36KTF>jZ%b(|mI1jEH`RDl| zXuY`qMDBO#c=BieC4bX;zJK@rS*N@YoIkmn)@Q6=o*%+L*A4zn>$!h-{yaZK{^X{5 zo*#nNXY8LmKZJj-8~mHr^ZM=j^ZXG0xo+@pTA#6gd47oe4-EZzeu($M`mFbl^-KQj zzxZ$D`5}I9@%#|EvCnZGaNXd)k>`iu=jVQY;O9Iiz?i?N-n72#`611JPChuye<1Up zPhR_y%zuWTr~YaFbMi;6zZlOgFMrACA3sm^Y5ku1U)2BKojDWykK%vOYt#C_J4=0= zznuCz9sh4t2Q_aw^?yxh{okhgw0>4mKlopL|L;%dXQ%#^{QevH{=X;ufAt#O{5R+J z&-*@}zt5Ms6S`TPzw23d{2ut_x@o_ssE@o=$8#(7!R~!Hw||~{$GTQee{}PL+&|_2 z)~myLLgsJp-0>wj|KaDUe_DU<{6Kwlp9pRjpVVv9dcJ?8^+P|NpM%=B-`TC#ruE|a zIqG(_dhI(=Z(1*&pYhG}b5Qqv{PX-Av|cd>|^YcfapZ594@1>zH z&(D#g^T8^D}ikCqtf_sW+`x&(HYh`8jx4 zRQ^0a2dx*+&*6Wcj^{j1i|RkpdVc=s^VfYM^8ak;%ky*OZ@qYa4&RRr_3L%t58tNs z;`upz>p3I1SH!<*y?Fkhj_2o~?)#CyX}x%U4*#rE-Ur?H!@p@guix(a<@q`MbKT(I zw4R?oy8L;5ra#Zk^dD)xc>bV{=j8Bz=}^z}Grz}r_56%)o|D5r*A4y~tyj;_kvsbw z@59caex&uh|8?ij^K+bsp8LYLX+5vsE`Oe%<2<--nexC0C-TCvJ!ErplQg2#c_WYdI&s)#v{-Nt6xLy2vy*91q>nHVp>j@qI zZPh`oTb@@&S}&d-qHag4SME`7S}&d-@Xhl>Q2QSKd4335FPpb#%NhCkhda?e)_rg%m^F#PHtryP^_~tnw{9h;HztMX2{6HPg36SRo>P_p_ z^8@~Qeh3~Gb^bg*1g#g(58;2Gj^{j1i|RkpdftEg{B@l~{+|tfd47oZ!Fuuh5WXK9 z>ep-E3*V;o;`t$bYo87774dIcFZN&Rczy_K-;4ZB>&5d!_-CE+K4{+y|EBf4e!J_J z=ZEmmb%TG?dftD#{CR$$KhF*HA8EbVf2rd+A^cxD)bsqn@3CGzKj53^gz(RGga1bB z)$>E-&OXQcuyd#%X+7_M-TCwU5a*%$Uidbx=k?p=&+|i^2iJ}K^ZXFBUfh2o_q%jF z`Lq9$ziB<+zkC0zQ{D&8pWIFBGuAK958o3N0%g?@K^pBq>|7rcc{XeO{=4`?LDE_Z{ZCd|#XQ^-VueblDj@R5KsCmoV z|GQqB*7N)(t)ErY5B^u*Kh59X{_o{i^S8JEj|nw*3*9W{Z@lm0`TKmCJE5D!`MaKV z!|#D#uABCIiu%Y~bv(CHA9Vg^QO|SlSl8<5k8UoTzjgoq?!vpU00+b^PC|4*o0g;Dpxy zHr1!~d+?_^ezWS}--(AOw7&T)_5Syd^ZQThe--^xeka&}lv7aoop@ZYP3uK|CvMa6 z$|PEfghynjOL zRen$DcyfZu?c)OzTCei^p^hgfsN6pO&4kuB7x~TaKj$}p|D4~qWv`Q1LD^(w!= z(edO2$?y9UTCeiELdTO6B)@wmw7$8>Z+`zdzxn&8{Eq*F{3@rQ@;iP?uTASke#d{U zs5Z- zf5-`v8_zMO^(w#b>3DL2FgYr=W5>#{O?wukvI6CMT%e zj{SZ@>s5ZcbUZmh<#vqcPt*G5bLY1T|2e<;`{(?=Ex+Uh$&LNrv|i=M{!LDh{Ph3Z zkF;LpceRcuCrEDFC$zq~$ZvlCIluY)r~HooQGS(EP`Mpt|2M4{`5oo{qnv`|x2V^q z^&-Eczt!=|DM)@_(QDKC=5yz_3jZm;RrJsKJtV*61j&v4-?U!k$No)DP`Mrb*@V`s z{C=S0$q6dAqd%X}`sO0P`Tgho=I@{L`>Ons6C^kGf75!EANw~sLGrs{LhDt2Yjiw0 zLGrt4LhGB0{O0$c^P9ha%I~8Ws5a2-{b_z?coWnSNUD93&SKguacewXOAX}!qr$m=>@IR(k@ zQoS~YIZtNhr%$q6dABYP*bUgh_IjwdIm+>X37 zq4mv0e)Id!`OV)y=l2cyB_~L3?Ej|qDnIsba)RV{%Y@de{4Ub*x9-f7x~Ta zKj$}p|CHZ{FUzlT3M#h`+5b)JMSdT0|4~js<@ezcy*8~E`SCsVjmEU)CJUKyfdvZeSn~VJB_n-5d zzkkZ_gHPpGIR(j${ok}+`WPEfgh!2WMqukvI6CMT%eKKSK?)~oy;)A8g4mD>leOlW;`k>C9ObAI#p z&-q;?zvKkTjs4%WUggLBO-_*fzB{4yD!;GmcyfZ|cjtuGHy8QM??2}^fB%%<`>)Ec zatbOpzW73>1b7^%|(9m`_K8!-#_Pft^AS`Bscbd z(|VO3`!_j3^1Ek3>s5Y#qvOd5lHa`(THjpcH^2X!-~9bke((K3ew9;DxxL5!Z(1+% zdyo5%atbQH_s;0GX}!qryR?U~T}<|4oO{pbAV@1OHql3#LyruEH5e)IcJ`K_XV%J0zg@~fPJ%Iy&QziGY7kNumR zpmIC(+Jx4t{C=$C$q6dALvKuIee=2VTZR9e-~9b^emBZ5IYDw`|2M5y`LTbK6C}Uw z6I!qG`<9L;CrEw|PH25|k>C9ObAI#pPx-z3w)`rmpmKYc{ok}+G7wffYee=2VTZR9W-zxg&{2q~Ca)RW>{%=~Z@?-xdC#c-s{rQB} ztNiZM@#F-R+q*AJXnk{$-~9e_e)IRw`F%}($qAAh`@dzXcsn zPLTYzOlW;`k>C9ObAI#p&;Ne;fx$oDJAwZbuS_Wap=bZ8|M2s6+{)_Hzn?$+L-qS- zdhYxEg#WW%qnrOM<(KL|e153=@YIB=3*D^h*+13)!>1>t4&5y3KVbi(e#3;S3*D^h zxqejt!GQ^>LpQ5>)(`dHpO89qv#5W6-%$7dUnW#t=w?-aYpdHmA$90xQGfVotGi}G z)rD>r^+&jFb^b?gpHOw7n??QMD~7tm_fJS)bhD^`?^msEaYEIFZdUc*8|vQs*@V=g zn??PhKef6WCRAPMW>vpys5|uLgw&y%RsGei?%@fkLpO{1cYoXJE}2kup_^6x4~DvT z_fAM1x>?j8`_WK$jOSLZqoC?SH;ej%&kc14k4&h#(9NR$#LYw9iDxEMUFc>}|M3T{ zZsUZi3*D^hcMNqO|87F+(9Np;8?El%38_Oji~8d)x4N|xsxEZ1s=s5XJHBT^>d?)i z{@ACjj?aC1|Bpk}g>Dx0@2(l@-o0f))rD>r^~bIn>W)1)A$`%!qWd?)i{-e)Z-IfVe7rI&1KReWYba+DQ(9Np;+E(}Ygw&y%Mg5UKw7SbC zR9)z1RljYhJFd?)i-p@bpUo+GPRkzaTpYi_n`=LIbqo}`P=s*0tcz(KZsOz4e z(Di%bIjHdO=db1W-?^W^PECBcuUYgTpTC}N^-y&ye*SuUQm5-bo&)Epf27rKn2>sO zv-1Df)_-m2+dV&`(?5QG?)QKAxsF@@{JFwu(+EyXRMQ zoqs%s7Wof9*KvQD{2tetMg92vy6pLPrO&T__4R+W`CeuJzxMhapTC#ye@jFD!_UvX z{{GtiYkdB`f5;)8bv64 zU;g~I+WH->@AA)o==g}ApZolWpX>AHYU}x&r~JFmkLdJ|pBMfA%KGv1@CSOy|owgK_+=U($ND{*Ebc)){2|9n>Y(*v{e48< zT4zD6yN{mKYtwqM{#MaHnx~s_r9JZSbst5#rj)C|CHb1uMO8N=gajQRBoZ0 zMSkzSHsr?f@9Rs6DrEJo!P^54u_9cZl=VItx;FO{;^}i}iPiytU4PT6c$T&}-9r zvHn)kKjr6tx5W99Ur@P)ZWj3+Y|kwmPkxYfgl?WSzh&Rw^XX3Y|F>t(1l4!^KB4%2 zp>scfy!q3iZu#Fa4PC!y`1!f(PwAXL|M&Er@EHB|+WhzDu76X1BbWNO|K)_L3*F51 z{{E)__P<;^obOlkcY^Ub@XVQi{G(oi9y7~`4|NpO^eDE3PX>#7_e9qnfudN^R)Vhm&q27nk%^S|$|F5l&_gnAlo2Q5V z!L$z0&)t6&^}}`FK6kzOvexT&)gL}0zB!@w?-u=E)baW|)o;Qdibp22eoLxPpBvu% zg^u5%I{1`$d_wD6&Qia6|Gw`23D;d*pX9Ig_BpxhdK+my=f5mJ?QeTjr{}&4e=WW_ zq4hnd5atk^D^S8&iFs-#1l9 ze%nOyGp&E~EcMg;?9;wY>)C&w-<9f1eh-P{XIj59_3!dqdP8-5?)bB)^*7S`8>zm_ zZ|QfcBfkZa{2Hw<{Vvsa`7QlMb>z1sl3%0srQe*Tev;pu{=58^UQu82`>IHOjn8GxhKDyI6JP_brk9OzRh?`aZw4sw2N|i{xioUz_T? z{MMgQ9r@iTl3%0s^=HmfKh4iR?c21T{df7T|4e{NKEI!+PWi2WTU34{t^XwTAL=Lh&FR0-?-}(~ ze(OIFmETC~`Tp1Ew?%d2cb`apruF>%(C4>Fb>#PuNPedEynpxkU8g$o}9Bi?6AU{JtiVU!(QK*HZs({n@8|o7R{4@A6yxo%)jBH$?Jlw7!_{e|>(Bt4`~W z@4q3xk=7qi{`>scr*mFX+7`XeSX_jr~LT-9`YM$eS7NP=VzZQ^WW!pulg## z#g|3pH`02(|MmG@raJOt-zPuQ`en&~pWnr*BfpzP@-waH{kzZaE2<;ETSf9St$!u; z@AI=y`!=m-|9yVk=g994k^D^S`Tp1Cw{E}cl;1k`f8{sQ`u^m<%WvHas#AV^PY?Nx zw4U!jU4H9+t~%wn?x?8zMq2-Q>fhxzr~fX$b=>Ea-?~pl{tF299Ssv|%4ee!FxzHln}@A6wXtUB`hhDd&m))(^qr^|2Qpz6r)3X%L8tuGu* z{k#0^)4omX%lvowEpY!MzpF&@YqY+Q?|*%MPpeM(Exafyzme9TPX7D+*uRzE0{gG> z8)-e?fBO6$Rh{x%_?4*qMp}O~_3!hu&z1S_^LtQzl^@^JNPZ)&=lfru-v-r@ANxM} znbtQX|9yU!sgC^a5XsN9p7-xQze`m|e%}+x&$NDN>fh&QpZ0B9&;I-TxX+Q_-6Hv! z*7N|^nk=73+|6P6;aGz0r7qI^-zmeAS{in+}1*>d0@0NPedE?@h+sw2N$BKeutx2FDme)ehKruFQ<&u@$RlHao;`I*-9{jbY!?O#+!e(d|?*Jyq1 zUy}bWzqO}SM}Aj{`K>*!I`X?(B)>-MYmcY?U4Hgy-=_6t{=59va{nX0 zYen*Fw7xdq|N8uPt4{f?eOXj~BdzaF{`>sczm?xw_Fv^U(t5uC^!YuhI_0S?;6#SANxM}nbxmK{`>qksE+*Z7Rk@F zp7-xQzbjQoem@Y&&$NDJ>fh&QpZ0B9&;I-TxX+Q_Hj(^H>-qlI<#+z?Rj2&UXa84z zBdz~F`S0>OpZkpRJD>em`Hi%m?>}9B=f9#l@>?U4U!(Q&UrGJD{O0uE<##^!Ir3W) z$*v{j~^Se`Z%J2N=MCCWq`kkqN zpPzl&w`o25@AJD|eU;z&&x^`$r1gCN>+@Sw9r>~Elb>mQG5PQETk{vyk>9l<`88T! zlkY!WerrBc9r;}^l3%0sHJ_#aeSY?7-=_8Kzsqk8_doKxQ6#@c>ud7;ugh=E&s3-U z*0BF8zme8|mi+hmv41PSHSE92Z>05n|LOC4Ms><>&FiA_8)^NS)W6GbPXB#=Pphx; zTl2Q4{6<>O_rE^B8&pSrcZ=j_TE8Lr@AJDxb>z2ABtO%7-oN|&HmZ*N9uUdTw7xO* z@AI=y`!=m-|9yTN)R+7o5y{WAp6`EMe&@ZZI^}mB`@ixVY5mRQzsv7D?la`KB$8jF z_4D%mr_1lW->HuLE)vPF(fWD6OZ~h2=Jem?cOLgS^81=devQ`8%lE%NzlT*ve$R^J zXIg(a`S0^%pH_b7vHvQ+k=FD6-RF0&>XhGkzYvw*NbC2e{(XM-Y2T*x?7z?N`|7Lw z&f6y{zmeAS{jbmO64j9(`#$-Z)-Or^`}`JFM}9YoG$uDRfrvA(F)6e&+?q!kvU)StN>w8oEvix*B_n8+( z_TM8DTF>{NW%=p&J*v~%J99`pKB4tJssFP4bi948%zvNXZuR}Ce$P?y^n}*){jbmO z7S)m8Hj(^H>$fETeSSBnj{F`G$Pvn<6v@xDp6`EMeqZREBflk){2Hx)aU}Wg^7}$Hk>A%u@@usIMZW)Z`F-(*>d5cw zBKb91|Kg3*zst`)?c21z%zu~P7u^5I?+TIp8m)hk?|*%MPpIzYGiSbdUQ`w%tv`|c z_xZ6;YyEw}{;T{(TF?7;pWlP3Q+{9ky{P;~T7NM0@AI?ImHF@UyI*~k-xt3UmETC~ z`Tp1Ece(1w??#dQOzW2?|9yU!sE+(@70J)Ep7-xQzl&8zez%F_XIj5F_3!huPy05l zXa9YEi|YGR_5Gemex~(&|LgMm{FkazexI}dE5DJ}f0_Ju`F+m*t^7VeDk{H`*7NG{k#0;^xx(8Irll`_xYbhKjkI3nH^2X!-!^0JQk>9B!I)0D- zI~hoROA}fz@;mjWj#o}W^3$_ds5aEw$GLM&-pE?o}3{0eQ!eRMSdrLIrI;z|4H_LQ@)0ur}dN8-^sl? zUO5Go-%0jg(|VEL$rp6IatbQHlPC1rv|i-53jZm;lRr~GkqNCA>+dA{H#tFaWB)a+SNUzx@#F-_?WqZ^SNYBFKj(LY`jHbPw_OujFY-Ha zTF39v-|K+n$G&e`FY-HaM8_+qAh}(k*QWI%zY~XbymAVX-{0u9X}!pA75-CxC%FG9 zry%)Vt=FdYDnEIQ{Gf6>v2Q~1i=UtS`aQw^O-@j`onZeptylRyuH(rGDz_8zFw%OJ zU-(lUT$%rzANMzMg39g0Zzr@~<@Ze;zejbD{v(d4d-V5Wpz`~e{ok}+s5aD=y-C13cWV1 z7x^7Ot>cwbko>OJYtwp>-|{O+63dX?Y&{&Rkp zs~qUOYUeob=^!KWu@;k=qUOY4(NF06ePa| zy*8~E`K`i#%I_HWKjjo8zl-$Rv|i=6UB{CXB)44?TCehB|0XA>+>WvTn%1lQzOUoS z2`aZ^Kb_Eel^?$Ms1B~of6kBl9yvkfcI+1uTCei^ijJp0r2o|uS}*d`<4)ukB)9AJ z+EjkS&(FR89sP@rS586l`?g-2)~o#H_n-1RdRqOIQ;__=qt~YOBEO?Q*YV0JsQixp zRZe%PLSLln9zEa-!(d(oFMrzxn;={J8It6C}UK zCbV9xzmE>;c;yr%w>5fgS}*eZ=rtX$oPy+ckzSkDi~K(Ny^dE-LGt^mUYpj7{8r&V z<@eEV)K57D$?xlWZCbDLdsN4h6I5;=vHzRatNga>cyfZu?W12zXuZnsejQIvP`Q2d z;)K?#{O0$c^W(lpPEfgh^!F25ukyQ8$CDEzx9cagUgh@{9Zyb>{Mdg@>s5Y>I-Z;$ z`Q1FB^(w#l{ipnnoKZjJ6ePdf^xCvuy*8~^`RSN{ zBqyl+K4kwltylT6f0GkbZXdG$n%1lQ9@g>X1eM!|FHdN_%5Q%EIlt}dM@~?=eW-IE zX}!wtN*zy5klfh+P3u*Dm+E+Og5-AFgx0J4F46Ji1j+A?39VQ8&F??w$9<2SAo<-j zq4gra4_?vn$|C4A zbi8s3lHXN&ZCWq#TZR9W-}?vEPdNq2?^}9pTCeicIsPL#LFM*7`@d_-fl;7c()K57D z$!|fgP3u*D_v(0Zg5<~kZ(6VNWB(>6NN()Eru8bn@9KDRg5>t>gx0J4=J%iT+p2!# z1eM$2pH67K%5SZXCnrd5e>0)=BER=O)A7nFNN(TKYtwp>-+QNZymAVX-?e&eTCeh( z-+#*QJ??+XDM)_b)@##xk>7jD=pXgJpz?c9|0Bns^(sGQ6!}5r_MZMXlKkT5=e~cu zr;H*$sNCMu|3;Eu{QNBS?ca}wZ~L@w(|Y!w^HWBVA5?Dd>3<{1FMgi-r}^`Hn{+&V zAbr{YP3yUT`uBhDZPfAP1j*R)=(zi;Yza)RWyZ9?nC`dfwnoZpq|M^2FZ9-7d4 zvHlLdq2rZPP`MrYvtFCli~J68-%(CMa%2BBtrz(n`i+iPPC@cp(reRtk>4u(r~D4R zqJGLLNPb_{Ytwp_--9}yoFKWe|C`pU{O;B9Fao-~+sN4>{IHC0_zl(J|IYDy!)`Zrp{MPDta)RW?{%cw<@_YA;j#o}W^1D&5 zP3u*D^ZQTvz03ViIR(k@X1zA87x}&Wf{s^CLFMv-i9Bscbd(|VEL zLGC}wDM)T#)oaswk>A1Bbi8s3lHb?#+O%Hew+jC$zk}TWlv9xWzMb_s-9CymAUEzju!6 zwQ0S`Zx#Mie(&fU$uFpLf9F%ZHmz6r-LB)w36dN8ziGY7Z;Os6CrEBPCbVAVcax4M zCrEBToX~oe-~9e_ew);foFKXVXhQ2nes7=B@yaPkZeP`F(|VEL+lO_$ate|k`>$!e z$nWigI$k*i$?poiHmw)=t-^oG?``gX$|*>GSLwBBy~^)t9ZybBxxM}3gx0J49@p{Y z1eM#{FHdN_%I{GfPfk#|z5S~RtylTY??31Fp!$&$RBms-I-&I{zYRKmkLn=#vHzRa ztNbq0@#F-_kNwxQUgdYGjwdHbe&3tWdX?Y&{&Rj8s~qUNV9nkU0DX84u zV*fX-7x}%#{YNa}UT$nUL}bi8s3D!;e>q}QhPBEMDmPx-yY{ZBasmET*R z>$Pb;=a>Hfo8^DMVfo)57=C{4=NJCo2K|HTo4@z4>A8RQzoq$ys$c&12Zq1zkou?j z+oxLZeE(kX5%FQYHm!d*)u-pLPj$WV{d+;(yFPtFuTAUu?=PkNKK+i4m-paPqO#z7 z_=48Ar2a#Fn_sTNf69-%Kfgi!;4V>XZlv`aQvYT7>FlxPCsp zS;y--3F^A}^a;H-tryqNr{B@>@*LE4^XZd%ZCWp`pYUy;EAziBKlRgl#`jS2_gDDd z)RETn`t9@Eq&o7uOC&$jdj9)g%hsQc->5oryiX)Q)B48r{w-U7I{urgBgbtb`I*+g zd6xQd{poo7v~SaT_TT4srTUVeo;@Q!)B2UEf0rNMUq^m??;iP$w4VR|SC=2(vlsa- zh~(F3z54z=a^rjUBEKb({2HxS-@g~W?Q>=RyZn}3QD5@=s>u3lv|fGxUi5!Zb>#PB zk^D^S52pP4{O(nq)*s)yM}8x%-<#^Y^|y47>d5hVQTdIue$QFzC+ly?KJDAIp8fav z-KoCHkMG?hzmeAOO#S=ycd_co?^`1Inbt2(^?iP8RY!i`7Rk@FzBbi&`SCq_k>8CX z`88UvzJD)#+oye-*0cXEKfY%#^1E3izeelT_wUi4@2?B8?<+sPe=le~|NXBnzxC|j z%8&2eBfpW>^ZlpK?Z|p~_wJG3NbC9j*R8+x zTU1Am_le|ZTF=i9eSVu%M}7~9hew7%^7>$?2-p1sKLt0MU|TCcu;kKFj4y~yutBKb91 zufBf|-}Y(WruAk1yZjb^r@rL(4UzmBtykZ_7yTbs9X@_4D!-A|A5ZUppC9|Q*54xg zukssdJ@4P$`di$tI&$16D!-A|x2OI?{p9*xw9l3K@AJD?eU%^IyGMQ_t>^n+zy2;$ z9r>~Elb>n*vgE(d?_$-F-_0WVnb!0E-RJie)sf$=BKeutzmod*`Prv^o7S`cK0oer zyC=b zZ>05~r~X}jbNcV{TgQD)`SHDb{tEd5aKBKb91ufBhe-1wfo$nOe~{2HxS-@k`%`?PP<`ZE7rehb|H$nPqV z{2HxS-@h0ApH>|{UKEwzNb66h_rK4N{ag7hu>UH*k=FD5r(1sukE)Iwe{te*JAw9r>~Elb>mQL-OC}cbV$Q?+%gtOzV07 z?(@4;b>#Owk^D^Sm!|%Ge)ehKruFQ<&yV{Y`Q0s&pJ_ec|GNAxIG{S^$M^1$-$?5R zlK(Eh3%JiHKfZU5{6<>O_n$65zJHJWF8GtE{6<=TDfRF2o6~=n-v!*~lpo)_M}8x% z=lfru-}hBVemg|+Gp&C=`S0_)U3KKgzDs_l^}K)g`E6Al`Rx+P&$PZZ_3!huPy05l zXa9YEThy2Qo)yW@w4U#OU4DE|UF65UPkxQomwkU-mmlA=7x`T!l3%0s>ihS|jqllu z{H_+suhDw-{d@SfPy05lFZ18!$M@_-e%FfR*J!=^{=MkGTXpz&SyX-_t?y3nf1e-w zx7HuuyGMQ_t>^nsxBk{XsXB7}t*HD)T7NS2@7CX1`&^m-KEKD+SL<)>A4KIh(t5uC z_3Q5%)sY|jKKYr}uSx#<{5GhL{O%UX&$OQR?>@gPRY!h55XsN9er4+4=VzbxZCcO% z`~0}ik>56v{7mcl{@3Nl_t%l%`RxD7Z>06#C;wf3=X0M?ethp9`Hi%m?>}9Be9vCw zw?-ttM(fr0?}cysT$%qazw^1zk>8R?evQ_v@8665_p6Tlek78gY5o2g`LR!vANwx( znb!0E-RF0w>a_mOe@;|>Bdy<=`giN^eEYO-(|Y#b=XbmMDnGt=kNiej&-cH6{Vl4F z{Mh%&&$Pan{CDeb&0kbUe%FfR*J!=^{ylQzd-fu~>qYWwv|fGxUih|8`!=m-|6P7- zxc`ygjUxFqTCcu;kN$jrU6B1>`SJaGLF+%8kstfF^5c8=$Zw?eeE;dz-d5hKk^D^SHzfc4`nyJTeSRC%m;4?P$=e?;q<;VB# zk>5z`Zzlg;e&?}&li!j^evQ_v@82UgzGpA;yGSIzM(fr0?}cysT$%qaKfY%#^81=d zevQ_v@8665537#+o)yW@wEpmn{Me_JAK$x2ej}~t{kvO#=iRG1a{Ps;{6<>8H}&t< z-+A_F-=_8Kzt8Xc>Z|p4-ab+JjkKQcfBpKqM0MoHzE6Ip^-Gffe*G<~j{I&E$^pCvix-X9@QzcGl#?{C$zpN^Q>&oX~o{|MmIZqB`>1CX%0N{g&jv&+i7+k>4XC`I*-9{@v%dNpOkMF6A{FX%WYqY-X`|G;=zF_|*zpshp z*J!=^{ylQzd-fu~uZ!f@XubOWJ$&1zeVf*o`S0@k;`i!HepiU(*J!=^{=Mk0a}GW) zD!(sG>rbTjzt2xK5z`dH?R#-xm+6jvW79RDL6^KbZP=>+cKuv~SaT_TT4s zzxpaazITuOMq1DJzkdB)t~%aF_I>g*tzVw}_xW9-I`X?!BtO%7-oN|&E><1+-6oQs zY5n5Vzt7J;?c21T{rCATsxSF{Pb5FndcOa4`F;LN)hR!|caQu=TK{G8-{trDUezf- zzITuOMq1DJpDsVXe~G{k#0;^xx(8`Onl>`SHDbW#E2p4x`{a;bo7Ri`R^dP8_sMScQ%*tU_Q_GbHmz6r-J;{k36k5k39VQ8-Js*i z36k3*6I!qG+oa>k36k4m6I!qGo8N!V?;7D-yUO5HHZ%MCB>qUO2 z^nK^#7bL&0>9uLS$nVq}I$k*i$?xlWZCWq#TZR9W->KiLpK=P4-xYdoTCeic=f%hm zDz{V5Pe^|8^K@`K9l)V>MHFMgit)BbnrK^;#{P`RD@`w6XA`OWV?=XbyQ zkrPyIr+zh|^(w#1bv!vi^1E?D>(%hi*-CXLGrt8LhDt2^ZU>F zEvg?mLGt_Fgw~7vPX1EIE2p6HJIVfUS}*cD$^Az;1(n}P_FvO_k>AM|bi8s3D!-E_ z^xCvuqUMabN^9JLFM)_`>$!e$nWF*I$k*imEXsI)@##xk>4u(r~E$V{->OR6NN()Eru8bn+jTrSL2~=?gx0J4=J%iTPWI`dKa765Mjh(S2NC>u5Benz)5y?o9kf{+7NsH|`HMU*k4TThT;n;;pAvJ~M z^W^*M7)4K#qi=EM`rXgEo;)inx%b)I`QznR&vn*1_qDIR_IlR7-}oHm6eKtHU(uTU7Oak{B~(PIYH%imi^zfp5@2>O-@j` zon`+ut!MeYsPW_kmD|}*2DF~#H@^QmKkj?v1eM#_zYJ(S%Wt*DlM^I2_J7lQmfv!X zCnrd5?7yb$y|$?wdE8n2v!sfveYdkqY<#y)v0j+2GjqktCkNX}uLFIPltpTlP`7P3T za)RW>{%=}O@;g1J@yaPkZtTCN^(4R3-)X#Z3XDxt(PHHLWN4 zoqR*%l~Yjpojk5<(|VHM1pe#%xbKk@RBk7y2eh8$_j8RWCrEDW|EBdUKlX2Og5<{j zYg*6pyIbSQ36k5h16t4W8{dDOANM_Sg5>wYfYy`zPMpg?L>sfx!YdkqY<#vMo-?X0P z$No)DP`RC8|23^=`EAvBa)Qe3#GV1IXZelqzs`^Q9yvkfcH$2MTF>&kQ{%}Ak{kQK zX+6vDR*feoNN()Eru8hpn>C)CAo=}bKJ@eed!IR%y5 zarS@HdXnF9?mx;YsN9aT|C-j5{Eok?@yaQv{EmO6Ytwp?-vs`v{El<~Q%*tUcYIdY zru8hpUurx#L2_gNH?3#+v44{jBscb7(|VTQ{TfeBklbDx(0Z2N`2OqsxbKk@B)1&{ zT2Jyjc2VP%Q;^))|4r*je#g#gymAVX8~d+mJ<0FbNsU)dLGoLsYtwp?-vs`v{El(| zQ%*thTd8Z)dY0cS8c$A8xgBHwH?3#+v44{jRBp%Ee@*LIe$Qz%Zq4DGd$&LNrw4UX6r^b^LBscb7(|VTQ?HW%`ko+DQ(0Z2N z`2OqsxbKk@B)`W7w4UU5^iLYEoPx^jDEq%@J<0DV_aEgHRBlJve@*L2enG@hIwxv~G7*0cQBzsU)b8~d+mJl%9pV0`oPy-HM%SkGB)=oCX}od@Dz_u-|EBdUKlX2O zg39d(`>$y|%kO24Cnu=fj{JE*>q&kS_^XIR(jYp{`BqNq!UfukxGX{->ORdUHVQS$^aDuk+)+M@~?=O}#Uq^(?;| zHJ+Rxxv~G7*0cPs(|B@%DM)_z=-RZNPC?~%nEl_hp5%9!`;T%8D!0Szzozvpzg-$nPEffWJ}{v5B)$u-+!GS z_dRlg0?7ybzSX}od@lHV=5HmxW5 zP2j)E?-2Jtsfv`YCJhXa%2BBt!Mcy(s*)$ zq&kGf2Z-vDX82Ivj3abll%^H|4~js<#v$$*R-DG zcW}4HE2p6HJ9t{xru8Jh3H(?29pwI}oPx^l;8(gft!MeI*LZS*%h|0X9$ zZtTCN^(?=8HJ+RxxosQJdY0e#{_Fg>?~xNEx0eRAp5%Anyv8f1Ai1&so7R*34jk2Z zsfxcX*@YWa%2BBt!Me&s`2Cm$#27e*0cP^_h0A7eUF?V`8_hA^(4RjA8NdE z3M#k#?Ej|qB)|RKf0R>Dx$S5FHLWN4?SD_>l~Yjp?Vr)LX+6nr0{>Nh`?>!qr=arN z|2JKm*6aML|9<((=QmvW{DJQ0)qnq7JwIaK*IoUf>c(?0Ox5pxUd^xlbKk)y)VwR7 zKhQnjp_>0c{@|bfvw!k~zyHC%{=4f`?=8)HTXmi{^}LO*_4^i^(wA!7ou>7U`<@^0 zaekk!gZ#d#?td3`%isOj_vqZ**PAr{lgs>WRz9SgUvH}BchBwk`yc#Ed>`68H}}my zcKr75^u2q*+?;9sn}58@{8E4Frn$M9t(pgSimL{+zO|ZPz3Gyha*y9LUFMtC>-?(cmf(B#NzH>hMEUP&{c6uGD)~`&R#^w%?CQ^&)*r3>H}z-q ze4NNn&&`SaOzZV?bDH_HE4ul!>$>?ptzYfAkwgEtYaXxT5mEW~w0?W#zkUDCck?f- z?B<&@MV~oe&2Ri)I;(l)zgQ&yLhF~#R`Z+sm-cn_XP0#KP3xETRr8zrdR$M`zi>xa z-?Tn6m(RbnyPJRM<8FRW>$|J@t^ZdwPx)W^TvYx&t-qSjzo5*Re_=~Ezo+%&xohNp ziFFEfzajsg*6a1#`d{DGzr^PU|EBfzmH#IH3z|dy3md!oJ+0rH&%eYv#s59s{GQfF ztlvvFY99Ho6Y+0azuI%R2A`h`>~rM5r<>o?dcFTOum2+JSN<>lO;r9pt=H?f$^YV? zy84&++~B{^`o%xx`CWLvtABxgSM_^Ze?Fgok#&lHUO)a#>m%0hMd~QOi+q0Mzo+%O ze)IY-uuqad`DuPn>m&Bhi>y=p^ZCKQX}w;*P5q0i8UFeF;NP@9V*Os={Zsu5(_Q_Z z)h zeS1~E@juIYk^k8bI{!VbZ>#1v{>QA}`d?f8Zz}#x>uam}t^YN}Kl`2XpEa$osphx- zUB`7z>vjFszt%46XZFtG-?YAf2W$?_#d-=>wk0c|B8rz)B5JBe(Qf@@&8)!Z(842 z&2Rm?j_aD%>-w$#WySyf#lLBNSyjLFzohtou=qEvFRA9Y{$0m)P3v|2#{b2s;{Uqh zztH-{sj7bC|KeYYf9@Ch{Kk1mw0`j~)%?c4>s*>&{nr1^&i}=|o&TQJcUJXV|1Wj^ zFMibd?`i#|YJThAb>>&U^}nw8f3o;Dt*@)F|E}Y@ruDjh|3g*3 z_5Z%+$^V7(o&TQJ->>F3{>QA}`hTkU-&OpZ)}N~CxBee5{&yGuruE0G`K^D~ab44T zUBC6eviM(L{F~NSR`px|ON;-9i+|Jl(rSL|-*sHqv|iV5{Lh>&{udShh1O?ISM?kJ zGY5+QTZ{if>oW(c`Hg?qxiG)_t^e0M|1%$U{(D+~y{g~(-_iM>`Ly%j)B28Te(T?L zCaur+2YvqHd&AwA8Q&kIU-kQgzklC!`TX9WyWcB0Y!Kt;mH+PhcbR`qXFd9ykiO^i z2bXC*>wiuwGy0#wo#I!zHm%p+|Ev6{NB=YUmYy58K-Z@Ar2iT7-Y)Z}%Y4&%(*MLa z{m-D@Z~W8$3|de6pVX)S8GN&=PydtG(d%{psOo=2ZhO1>d|o0y(|Yp#J$$d|=F|5K z-=_7X{~5k-*F0XwBgMCAJ?S4Yk3J`)@5$>nt!MpD{L|-**RiK7^gsDM^hLX$SD(LT{a<=j<9HpPcm8`? zPx?p9qyHJ)Qt~&gC;iXx$NK$L^|y)mHm%p|xAnii_}Ax#{ONxNt=IjdX8qIuq&|Jm z$ltV{^pC>#?cIF(p5foLK4Se|x>57Ue_ioyT2J~%%%lGq+*9&5t=Ics^ZMz3@;c~y z;=iZ$r2k1>`kauyXXIXJJ?no)?$3Ai>3c^0ruDl2*!pLk;$N>j{F~NCtY7+{@jCRm z!9V@ap!K?bv;OFRGN1D{^Lknzv47J44FCGvgn!d|y?&ee^gqMDJ~!dpv_4|}(*KP2 zVY;hN|1;hP>q-AJeBap3r|%j5P3xo9@0{kbj`X<+|Aq8F(X;+1Kj)kRIlnO9w0_m| zOX+{&pZ;U;X;JH+{%6qohHC$;&TrEnYWxEl4_Pl-13j%L{m%*NcklneKmA9359cp@ z_q4t}_fP*5|Fg;v|2?fI{m-cDI`gaF`d?f8Zz}#x>uX2&UsL?E-{If1p7cM%zw5ZJ zX}zxB`q!F^-*ad2Z(6VWkInj_&l&lzDEpHG$TCeLj{^>vRd*ZyJ_0!Y( zo;?3c?{xm@dy;=o>q-AJ>blN8%^zLA^}o6Jf2GVft#2OTf1~DoDBrJ%_&2R5{m=04 zI<9M4uj{w|mlgl_7yqX9Wh4AADgGZU{!Qyi|1-vp<`j7E@t}Ffvt!MpD za;MK3`QKRl7h2EypVW07`k%3W^7^g+otnq*+1t(UX?o@-CKk|F%d$Rs|T2K0)_`dLd=byeO>!+vnr2iRpU1xsv zTmMfL|GSER(|X;1Z0=td9xwiP7yqX9r2iTIUB`7z>vjFs|H|TjeerKvUpZp^EG_;Y zF8)pHN&hqayN>Ic*6aF>fBKK{dlnV{h1RqFC+jErHmsvti~mCFS^tx|u0#Jb)^A?F z_5XV3pS~yadseZD_vF5erdZ^rird|mC|Pn7;; z)Zd_a^4_1j-_tcY6n$nxwf?&AuVwz3hr0eJr2lz#`ZDQ%c0a$${Br(3OI}+w5AIYS z_4Wa+*WdrU_pj8a9{tbYTU{TP{wMv|UQha;G4Jg%U%xBnnbwp3C%)-_2K9d9pZ;gi zdeZ--K7G#Mn_YeSpZMtYx_?yl4c(e@{2Rr}cXOYhFM7PyEyO?c{|x_y z*0cU+TCdk{Q=k54_~&zjf7AMi^-KRV-Uq#hk-up@>3@cA)+zb3 z|Ki`YK5G5W75{v0@Lx#(Gjg5F_b<*VjN{zGeAD_>&o9IC!-md3eNX)Nv|gWIs`LNZ zuQdJv&4*eq=avs>J?Vdv8|S3p{OWh_|G+=}Pv&#}!hcWe+pGK<|MWlcKl?%Fzo+%2 z{~2{%XMXit|7(l?O~t=yeeDSUYl?sEcjQn1GiW{Oe};e8ab44TUBC6ep!mPD_&2TB z{l_MM`kax!)^7MNw4U`p!@ujeu4%ol-}tBh$?xI3a!%`~r}aH~{`5cbPu~;&J*_AG zD<^Q+(b-(38^Qv93NH;?eYvG{+j_&2R5{m=04I<9M4uj{w|mlgl_7yqX9Wh4AA zDgGZU{!Qyi|1-vp<`j7E@t}Ffvt!MpD)(w5mSU)!w|Ap4G{wH-^hyLd| z)^A?F^}n<8Pv4XIJ+1G|^QZqAuj8Z6KmAWW2fd#3Kf}N4%&&gye_iqaWbtoWUpK=4 zeZ~JX#kXla>3@cQ*Ku9bdR@Quzp(gMW|6;XePQmO^H$`)y7(`&p7lS&zw5ZJX}zxB z_^1EL@1gIB|DM*9{wKcae+JKY{^@_RetJFWe@0!`nP2_Z|5L^PuHxUc{?v&4A20rQ z7vHA!r2iTIUB`7z>vjFs|H|TjeerKvUpd16(&GQ&;@`BM^gqMD>$t9Iy{_N*r~eqg zXHoHAXg%wHvTo?t#QM3l_%F1c^*^cWI`lu!v3~RVt^e0M|MWeX-_v^1{|x^-I{)-N zS@%7yC;iXx?>dv#=lg?ljPDJqZ^rir@=f}mQGY}C`ulVDdnJdWXZ_DpFLwP;NdNQ9 zZI?;^v-^3qeyi`lXUJ=-=E0rf0|Q#GzyEjdpZl+>N1v0r^gZdf_Ozb#KV#n8W&U)T zZ(2|KpZKQ#8PxlYfBK(6>q-BU`t&)2Z;J9y|1)U4?jN=J?bUel)8{DiGp#4z-^2Hc zZa)A1GklxYlm2J;)@LU8h=_mFdeT2)9(_(o-;?>K^{oGifBKy9Iu?uMUuZq+e^Qt4 z3*moBSD$|eiVy2q|1)x*(|Gxy?@4`grs!G!GyLm*6a2WFPydtOL;th;dG+~e)<1pD zcpaaM_%^L4{iDczRX3mhXXI~MPx_zXk9ErXuua6bX}w;*t^f61eg55N_&2TB{iA06 z)BmJC{m;nXw4U^j!Z+&_|MztBds-i{e(8Tk{(Nr8-?X0ek0O8eIoAK4ZhlYe_5Rnq ze)^yIr|-$@?`b{he^Qq|XZT;-)u#{2>#&~nKO^_&HJ<$0e^tMy^}7Gq`e&WupVyCn z)B1?@OaC)o2cH{!o7U_4&HAJN8Tpf+=5y{2S|720(*F$qd~Wb>TCdk{Q=k54_~&zj zf7AMi^-KRV@}KVN^Y1_7eXySNKf^ccl>FI$@o!omwSL*>SVw$*@Lx#(GjdJ(pZuJ2 z3gq0veAD_>&o8Bah;RCj!KX#}r~etWzM;XT2K0)QP*|$Y5wT?t^du%|0`v_X?^nu{~I+A z|F4PoH?1fA&+zX$u4`Ja>$m=w7611a|EBe2Bm6HZ{vRyzdZ<`i+13 zkMVo1EB*_uXZ=rdr_UMrbH5<}LhD)ole(@$-!s-vUcdFfQ}g&ed%O8Pt?$h9r_UL$ z<0Dc2>3;^TC;iW;>pJtR-}+ytdiZ}*d|*K9>qhv$PxE*mo+-Xf>q-AJ>blPS>bL$E z7XNw;;or2rF!vwlE&Q)8{tK;V{m=04I<9M4uj@Dd>3{Nj=zHS7r}d=&N$&JHgXcT{ z^gmfYy`JUOE)oBx^}7Gq+`stupW%OZ@oid9`kztPbzIl9Ue|B^ zuPpx87yqX9l_S>A(&GQ&;@`BM^gqMD>$t9Iy{_N*r~eqgXHoHAXg%wHl6&-RSVy-O z|Ap4G{wH-^hrVaL|9Sn^|LdK9`ku`1X+7zGhW{O!$Lsi1+%TZ^r2iTIU1!qze1A~= z_}-xUW_*9ZSJMBC`kDj#bN73?CWoSD{m&D7y8b7m|9NWdWzzrbeqOEL>ih30)u8_w z+$lb-YtwrD{l9zvO8=93^gn}di7)Efw4U@oW8T|k{&bmdT2K0)_@@6E)ccKp`kz7T zN&l1j^gn}dit3@cA(|XeX4BuK~!AC^= zo7R*55%cJCLi(P}H?3#=PyEy8jMuSPB>zI|S^tx|d|wFvI&X&mLhD)oGjgBn>eKh6 zzByC$tp6GQb-xLI+|8%|$?u{6+5Now{50#I{%5?7&qd`&|1)Sk=^sVztGfC0KO=wB zdeZ+4f2>p9hixLhP3!ggZT+wB>eK%W-=_7tf7Gmh`k&ON{~7t4)|38G_-38r|DJAs zPwOMrFX#QppU(~Xo7R*5QRL4)$NJyX&F^Ww-v64{PyZAD^gVg~J*_AGPwLX=4F7y? z@Ly;>>wiY>&v*6ddq)1I^}7Gq`e&WupVyCn)B1?@OaC)o$H$`l)Bg-wuj@DKkN#)m zPkx%uxjSfm#QsVDGyLm$}L{m*zGrn~y|KjVF{p7cM% zH|v!A*?;kGS|7E3+2_`39-kll7t;TXT$BDMKj)kRIkzz1w0_m|OX(ltn{!G~-tkZW zGiZH7wSQLU|5FcWy#6o9deQ&U{|s7B`kxcj@817`fBK*N9?oC*?rD8{?w|fA{%1ev zeD}1T^gpAn>&&ly>tF9({GLt4ziEB#2>)w}fA%|NPyaJ$J?Vc&UDt74(|TRM^}j&% z$p21}{7vh1|FKy=^f@E{6~%X<^{oFHbzR4GP3v|2#y|Z}eovfNq-AJ{JW0pn%3+3jeq)&@q4Z-{tK;V{ZDeI&l&l1zaalY z>skMkx~@b2GuBUDzxBUU^Y}e`yZJq>@67Y3{~532BT@e8e+I25{m-cDI`gaF`d_Dd z_N&Y>pC;d-yr_UKY-}$Hi$@=N_r2iRpU1xsvTmMg~9{zWU z_&2TB{m171MgKGW?=HSg>q-AJ>bj2Wn%3+3t^bw9|N7$Jw7zo0`dM21KV1Bq)|38c z_;(%GHLch68~^kluIteMjQ2mU-}-;O^H1NC z`8};C{m<~fL-TkYpNd-dJ*_AG&+zX$lh)_^gX+ik2Guv?`vbm`{%6!zhOj?(zo%<* zD0?uNj>_XLCvM# zO8+xxJ?VeOytm8z=`zo>p7cNQP5(2f_Z$E8KZDkj{wMY6e+J(a<)8j%(0biJYV+Hx z@#J_wBtO%7^8G!0ujuB}{|w)z^`!q9zHiq&UdJOM{!Qyi|A=|?IU#*d=9|{D{wMzF zbH?jfERuhr^{oF%UA`}bf1NkOf1&lP{~5W@b@l0cQs0~@de;98|GT^S^gWs1)B5h} z^V6(<`k(PSJ{OfA{m-EFq<<8-uj=O0|BU=i>q-AJ{IgDZAGV43H?7y}xAniit55$k ze4Ezm{!z33>3>q6{%7QGT2J~%;hS}e|9iUmJ*|&eznu3Ye?B+lZ(2|KN0GnQU{G@- zf75!s|240l{wMzFd-D2wT2K0))TPfE{`uVCztDQt|BT#KJE+=`ziGYhKeql^r}*b} zTCdk{Q=k54 z_~&zjf7AMi^-KRV@}KVN)BlY3!FtmF4BxC%@@N0WziEBc`emPE9r5|We<69yp4OB8XVi6_`PFazuPy#J75}F7wIlqmDgLzv z$e;da(0bDU4F9gXHAQ;#&h+ultY9`k~Jm`L8Ix3$17UD<^Q+(Z zr~k?CiSvs5_q4tz&!7G${^@&?dr#|0|1;{k&OXf_UBC6ex%hvj%r~uX9^rqZ=HdS} z5&x$3r2iTIUB`7z>vjFs|FYu${^H-XzHEg5CB^@P#lLAi>3@cQ*Ku9bdR@QqPyaD~ z&vnIrq4li)N$&JHBY*A}n#>wi+$b?AS_`pN6J{~zh`eZzo+$`dH(c2<8^!_ z%0Kr@Z_Pl|61XnoxX|MzJg@53|2w`o1;e@0!`nP2_Z|H9&b zdGT*rUzq!k^A`SB7ypIUv;JrJcOBO?t=IJ%|MWlkJ@h@vzo+%2|4HujIfLgr|MWju zKfRvxKclYe%&&gy|0&hO|1J^#ruDl2*xbM9e}@0v#kXla>3>FD*Ku9bdR@Quzq0sW zU;LZaSB_XeON;-9i+|I4(*F$quH(9<^}2rJpZ;U~o<+rfq4li)N$%0F5$S)%x+%1t z^*^cWI`lu|{m<*S{$KC>)AwY4PwPqlGyLz+JYL7AqSk#+>q-AJ{JYMi_4)pw`tiL% z_09PHfUl(g8TB`4zH;o(-S6p|9EzUxKabwh^*3>p>{%260>9^AV3|de6pE2+4GJm?vGp#56Pkht=4DJx+pZ;gi zdeZ--KK;+2{x`nqe+I4B{i8O&y&6xB2SoBStta2#!}p4AKK;+|ZCX$IpW*v<&Es`E zBI4h)p7f8HN1qeY_hi0lJ?nqspFU^2j>RJR7h2EypVa01LipEtGyE4?&-$N{`&?I_ zz9;p~nWAU?&+xyyn@``9`8};C{m=0Ks^;-JJ{Of=PwPqlhG;eT6Km;Pt?w?1P1(*KP2VOmsu`kz7T zN&ho^vrbt*?7#Rot&dv2>~pLmK0oANNdGf(P5PhwoO24~+`@d*`c=;_rGJQT&MCpC zMfs=y8MMBkI)7B>|6^LK^gn~Fm!rBittb7@3F>$6|G+=}Pks;QFMRj3zCHI({}cbS zA9VhET2K0)QP*|mSHJbYw)o#v{F~O-j_|*x_}^Omo7R*5XZUv=*EOxz^;`c7ivK%{ zf75!>|0H+%oRR;E;=j;(*8dFuuH(9<^}2rJpZ+JmC(bKcKRvDQ$@8cG8Lva1J=Q<{ z&!F|B{~2{%XP@ScuHX9Ktavo7R_&@V}(^f3WyBttb7@@b5aVYg(`CH~#5A#_zeV_%F1c^*_m-K4;|5{et`p zt!MpD>beg7&saZs{nr0Z&Exm%?dJEizBA9C{%5?7k3{*W{~5HN^gpAn>&&ly>wlf< z;r~fdpP!!A*NyOhpXTvCJX3s|)|38c)ODTt)o=YTEdG}l|EBeYx&JtC;eU1UUuZq+ ze};e8ab44TUBB^9|C8TC-;?}%T2K0)q-AJ>blPS>bL%%Qa$|d z67g?ZultY9`G@{z_}^W8o7R*5XVi5a*EOxz^;`cdi~se-ziEBti1o9y_o@-CKgRD_RQwlO&-$O_9{n2D(XGXQq4li)NnO{W{~7OpUcdGKdgq_M zC-Zw+Px_zXe~0GrIzAP(hI?91`k&$7btbLP_XpLF?+vPN#`gz&CH>E+zd`erV}I^` zPuJv7^sN6mb#K@Ig!Dg;e0G`iKf9k->$m#;dqjTee+GA|UwXZ+P3!gd|L*-O{ZH!A z{|xH2(r=~z8ML1CKV#n8W&U)TXIfACpZKQ#8PxlYfBK(6>q-BU`t(18Z+7+Rf8xK_ z>;6%j-`=i1pO?tbw4Qu_58o?_|8>Q;X+7zGhVR>p|3`{%(|XcBiu`rIfb>0i-6s9d z?&taXq0bqwV{!3cXg%wH^85L|0D10bwi*rX0EGG-;?}J>skMk`TTe8!H>K7 z^gsDMy`JvjER{n7u7{K-%AId=!GkJvxye}?}p znumYWdcA&|`t(1;|F+`Wv_4|}(*KP2VY;hN|1;hP>q-AJe6vo;pZypAru9+lm;H}* z#OH?m3+aDGu1WuspL0%uoLiW0TEFV~rSuQ+%{e9bbmyP`C$FQ|H&pkJ>imD?uNwD& z=0mNQqc;s`J?Vc=P``Ws2ma}Q@_RUc;k&2x?YV#YpZK5sp!46;deZ-lx~?<7`mO)9 z#s8+_-?YAVg#R_g|JLH)w4U@o!@ujeu4%ol-}+xr{NGvpo7U_8W3ztfb4LCvivL3E zS^qQqyN>Ic*6aF>fBK*N9?mPQpPttDq-AJ{JW0pn%3+3t^Z}k|NX_kX?@uU|4WMh2aA8xdeZ+4|E}Y@ zruDjhzdZ<`i+13pZp&Bo~)mq)|37x zzUgxY&v*Xmf3kjhJ?Vc&UDugk{nr0e#s9A2-?U!$ADjCZ{m<~fyZAP(C;iXx?>eq) zTCeN3{#O?N>x+NW`pOaOXKC^OaPewi+$b?AS_`pxUN{$KC>)AwY4PwPqlGyL!9{L}Yj-S@Pf^gqMD>r7go z?+?l`zBj188Q&ksH|c*y{SDpg@6X-ul^lwG)&6HWzaP3=zklo8TyUrOh^|fR_4oHK z|I)uav_j*5rFrlzar1!Ilm2DQd%Mh^F7r+6N&gbx^e=;Yzwl50GH5;NUs9hwW$;Z= z{^?%^t=IjZ>ia)+XZC75)aM}bGp#4zzr(jY1lM)*`FEV*-+I!&4BxkFJg-BqJ$#$i zll~9$=u<-amdrP;Xa9Z^-}EWN|6-B+3$17UOX_mo5C2QL`t&jJVLj_#Qg>!f<3;+G z)HkhX{mbyL`$h2MZa)1>eh>Z2?&sD1-K>B9`}KGopNsf5ttb7T$bD5epT1?}Z(2|K zm*J0f%KNZQ#J6d^UcasX^<91b-DdbVt=IjZX8qH@q(1%2$ltV{^nb$l?cIF(m*L;E zK4SgSzl{9XiR5ouPx?QRKl>c(e@{2Rr}cXOYhFM7OI`k6OQTn#VfgbA$gv`j?Sw(!b>AoHHQj4(6NIuX_F%o*y=7p8V6d>&Ud;bUi>0k1DI6vXPr}gc*fBKjBpZ%co-_v^1 zzl^%BGr#(+|Fy;crsChUzIKHFHN`*so$}|uUk_SO`j_F~bzIl9Ue|B^FHk-5zf&ZC z(|X-MY}OBb%E(`9ID8jc&-#~9*L7Uiv|iV5{L{bW_r!Tc{(D;Aljl$W694oq@!!*W z(!Y$luCq_`N7rxt>oXs}=an+ww7z+S|Baf5|JOwPo7R*5Wz=;Y*EOxz^;`eTivRnI zf7AN15&oAH{|^@bruC$M8U9_zbxrGa{l-82!}vYd75|0Sv;HNy)2EF5Z!G=`t!Mp9 z>beg7%UC~o{nr0Z&Exm%?dJEizBA9CK4rX)k3_8>`jUOE)oBx z^}2u9+`s5whX38gw`o1;Uq)Tmab44TUBC6eviM(L{F~NSj#xiSi~omzYPDb zeZD`aetd6GeKWp4;4A50M*R(%uN?bx_j|e~ zhoWE6zkKKi|MZ{zlOOo}u03Yv?=@bWy)-xX#a)+aedh10^?OgucmMKE{As?3?=Kc# zruD1(cYXQ(_Fr`Vzy0q!-#xAWi>iL}`TzExYo2oY_J0tSUr+1*yqe#wANwD_e)s*q z%>QCv_wQdJ|NiyMO_#~Pf9-x=)vx*oUp}q;wrU>SDgI_a>vjL6@=rbb$HBM6cXVx9 zPx{9(@9i>wy39ANC;el5(?1UC^MZf+$3g2!|CsvpkArWD@=yObXua;gwfXJUc=9_S zlAmck>3@Xp72SOL#^Kwvp7f8y_wAa;>(FN|e4Eyj{u}e?6GQsO%r~uP{bT&oCyv*# zSS0^K>skMpx_sXX|4X|1^pEjjJ?kGw?sFP1AM}l>Z_X4w>mP@I-LHcmck}5V^LywY zcR#N_Kh655e;lvla}nRB^`!q6xohtTZt3RJM~?TwdeT1*f2>p9hixLhP3!ggZT+v; zJl+RBH~2TL*ZsF<{nJ0DKKo?dcFTOub=)g{^=X@`g>YW`p49zPaOUiclGHX^E#|&{o}~}d5u?n`p1#K zX}#{>w*FbC_~-TG-?Tnr{n9^<*TLro-=_7tezX2A?Cs|BeTDfwt&iA0=^uxGJ~#L` zt=H?fsZakn{PVfNziEBM`lWvy`A>KC=_AMcU_I#{hi}#?`LqAx-?Tnz{j$%oj`;lG zzmWbh`h}!_%+EO|LC#OiH?3cBeyY~b7g}qaAA&o@Kk3@EUVnb7{J+px&JRKTF3u~Q zAA;7C^Fz#gyUbVaG0(J~oFDMb`5~x%5C5DWg4UDs1NAvS1m6_ppYub|dcFU)`DvX; zeg{PIGp#4L zu}J=f*0b{ibvY-5|0P|0&JXyoo}C{ecYRJE=LYJVGeytN58;1zH=lC@^Ltv~eeLr@ z_}4xg{9MGhX+7D0na6)W6V$#J`J2|0^F#P&o$@|t-wXey^?Lm_pI`p_nefl&2LGn@ zdjD*g&JXcAJ{IMl^Fz>jUB6j>7xs4ZIX5t`r}Yv0C+COo&*ujJruBOLHuX6_ zgnvFa_&2SOSihVf;(eIz>T`aG_rZE{ehA;JQ}Sp3#lLBN)cR$gV;%9i!G9s=2lVXx zz|T1+!05kdzG?l6^F!7D`Qk~%e0>Lf4+FB)EDF2vgb0Re*C=Jf2;L- z{(n>d-G7g&2O*9lj8xA{7mb~{vW$6}HE3$178XXqwVThmIdV6x*ZW`d`Z+)2pK~+*ds!a2$`yA_t&kgw(a(<3n=c@aE^ZGe&Fpl#p^G)kloS&=pv;P&{Kepj za(Oio}3@TxAxiKBO?Ay z>&gDhJkAM_a|82D>)H7M|C|%zbu1RiztDPiexNSrgz&$ltIzoXAJ((;L*%Z{3FO>B zeRHPh+4&*-@9ySvZeV^->&f{c{OdCp{9MGhX+7D0naBAdxTTxV`61p1>&f{c{6DJk zybs$%{F~P6_1k=YIX{H|9bMf^ruBONZPq{Mhsb|pSD*e{ybsos{WpBGPVujOFZ`R< zN337Y58)H7sa(}+7&$%ITH?7zA@76!-6#u+#{F~NCtY6L#@jCeY$UoNb`J5ku)<^80oFBsf77_oZ^?Lm_^*KL;|7~4e&JW?=`iS+*`61qiX;Jk#KLo8O z=ZEmkIwgPhU;LZaN3CD>Io1)M8}cvY{1CY&=LdeyIRSERV7_Vnit|I&f7}0%=Bxh( z>AxNP{bgFu`fvO78H+k%oLk1_1S{zyB+vHbZuHs`fmsR=dOPf zRKMlG|Jn6pg6ijVKfm_*Yl8Wm|I&Y(V1CtqJMcfruljEX{_o4A?}lz>{Wsos`d3%_ z2%Y{@{QTOl-}6~F{2q9D-He{^oH@5LKiIqv*RIdGx1U$$Qy<;DqW{+Z`@0v*zrWMx zWm$Bfg^Q-lH=(qC!?=>I(@8V|zTL1Ue{JQ>|8vpM! z5B^8-(16zeT{XYj{|>#b@&8uy;C~X24ru+~US+=j{p0xltMxxY{VKm{?K|WbRDRRX z=-RZNo7R*3&gou9enE1(OV_6LB)@Z~HC{Od$!)o=P3uX16Zo(4o1lK3-wydDC#c-c z{cb?(S$;2QJUKz-cJ9Lgt!Mdd(|B@%%I(}o16t4W8{dDO-}v?G{8q{@IYIK%nXRYw zEWf21Pfn2h9v;womfsy3Pfn2h9v#qnmf!gP>-@&AU*&i96Zut6LFIS$ysk~_Nq%Sl zpz+EnsQk|AUPg{V>q&lRb>1Vtpz=GbdnY*ttta_S;J?amg8FrSkI64NL2_gNH?3#+ zasMGFNN${COzT;G8#JDrAi3=t(0Z2N`2Oqs#;;%JcfI_Q6C^kGf75!B-x=;d$|*>0 zt8{HzPx3o6qw&fqNPeqzZCcOr8{dDG-vsrm{LZ{Czsf17+|IE7o7S`Z*uTjMDz`JA z4ro2gZ@b2m6I5sfy6-{b_zZ_|L*v;2Of z@#F-_?TG=cXZelqzs_&``c;0XKbK$S6jW}f+5b)JNq(of|0t&*`Q4yv(|VHM>5nyD zIR(jYk*-baNq!UfukxFqex2VI`6VYvZtVZ2^(;U3Z*qdl?erT1TF>&^sPW_kmD}mv z16t4W8{dDO-}v?G{BDw8a)RW>{%=~(@?-xdCrEyG4`@BhZ-K^>6C}TT2eh8$H@^Qm zzwzr=`JH-4ew9;Dxt(JFH?1f6o#OtZoPx^l)IMFC)|32B{YK-JQ&9PxI;3mUdXnD+ z{;T{Zs9)!|R({C|k{kQKX+6u2{hOR1xosWLdY0c$G@hIwxjj9g^(?>f{nz=8U%$%l zq&km|Dy5ADM)^|>e{rP-?6;FF8SS zWB)g;XZf*zlM^Jr`vq&mcr!-zU1%h|0XA>+>Y-Z z(0Z2NuQi^WpmIC@!GPAY{KofR=Qn=+I=^M|OHPp7*#AxIS$^!_qTpmO8yf0JL(dXnEU?mx;YsQiw7t!vYIk{^Hf zkNkql@7P6Mo7R*3Ch%Y7H$nY6zenVkoFKWe|C`pc{Mf(A36k5(16t4WTc`2l1j+4{ z0j+2GjqktCZ~XdIeneu=0lwWd!%IzroziB(}}HSboU~k{kQKX+6u2{hOR1`8_(I^(?=o8c$A;{C+i{^(?>f{nz=8U%$%l z$e-m`IR%y55%z!6dXnD}?mx;YsQix1>DsiO--kVFF8SS zWB)g;C;3fr|4~js@>{KI(|VHM)U3uUry%+LRM)2UEWh#nSNTm)zshgwP5D($LFG2Z z{%=~(@?-xdC#c+}J{!<_mfsGICnu=frv5sh^(4Ou{MY%7U%$@p9{D9FNN()^ru8g8 z_HS~6sfx|`>*pGzkZe9;REukoPx^jF#Er0J<0Dd_aEgH zB)>(vHmxW59sWe)l~a)XZq&7DJ;`qZ|5bhy)UWe=FUHVcLM*@9}Fn}q1XPa`rXgVxcSYm{{8&XZL0Tg zbng3f!2e6v=;ptv{{3?`|HPZ!yc6dK)V$EmY(D#^>YsRVK<1&F$^7H&f6TvYK+Ox? z%;xj?(fs2d4#+%oGn>!)VgADdG7sHM<{$fQH}BYY18QFAW;XwUGVj#^nTKvB^N*e` z^HvS0d7+!h{F8ic_4-e)A5il`H8hjHw>tGp_|$K4c)vW zZw$yhbTgShHB;u@J)q`=Zf5hhck`z94ahunGn@aTGH>gE%tJSm`G-F)^KKqc^FlYX z`5U`=huyfd6zwT^EME4=?EE9ln1+%?sU3=AT*C%{%ktfYe1dlliCr zSmxb0pyq{cX7eBE=AC|fK<1&F$^27)EAxIfpyq{cX7hJ;^G+Qdka_54Hvh+E-ZKL- z58X`WpZs%~ciVuP7rL3vf4rM_@^=F=58X`W`}}ikRX0DVdGkI0^!Kk%yZLdBV*VXn z{qE<<`RSf+UUPmz*YAmQP~zX`uPg7rW1qjy4}7?;nbhykUoV#VQ1j+}{yH$2r_X|Zec%17KYwrPa)@)h-nV(5zkffNr_cY`^EZ_FHw;L9bTe5$F^;+u z&hO9vSA2h%_xXRO^L^#_k9p7MdxHEQx$^r5x?X>Lk4RpB_w(;D|3_W@=KBje_2cK) zUVq)sHE!SF_jsO}`0u~JY%TMl=FR*2%g2Lx%5iGk`Q`i1)Ro_#=K1|6z9&(4()kNI z|IPO=baIHFUps$)|B7?BeDvqMWo%i=Ie}9{F{dyQ70{-+$-({q=i) z{=Vv7|CQgr=Uc!3{`_wDdtx6^Zu9;A{Cz*a{rB&`cJ=%I&ph{!{`>cnWj>Vud4K=* z_xDNXKT_)6I3V@W&E)wI6?f0+0Don`*d2Gr}GcmLq~ z&i`>&x9MM?<0F24?azPrbB#MX_&uIyChuSLDfIrGx}yIPy5@I3zjpoaJ^%6I`^x?a zI`!k{N&SW0{HA|`&iwd!GJpK~)$@0zKj@x!^~HkA@ndEmypBr*xyvh1OH?#cC@Orh* zg3NoM%!AgG^>>E6wa$WCcW3mymA`)(w4SWL3F=q*oqDm$jn_+lLFE>@ndHZRH%e}d zH(7V+W|rS6Ua!_!kaY{!Wpz)>%;N?$qxf5*sK>nx~scTDF9 z)?d(ivi>HhU*&i7mhN-Q>*ezsRBoZ0Nq$E@>vCf}`9anlx|!v7gx9Ne7Sz0>*LU-R z)|2&jgq*d`f?9V+Z_>4CJz0Mf)UWcJy0^=X*GqmuTX?|)|2%&LH#N}|GOn#FZl(PTj*wz-=T7DVLbUk z)*ZTe)%>pb`#oR1tor{jHy2dh{_hF>2lQ*7KlZ)e&AamXpP}pbbU&}=`|oG}>%Y6M ztM}dBZk+k`ce?(1ZqEGfF^yX@H)mQ8s(w%HCHVik@VolCzty>m-{)~XRX23=t;+ZR zuk*=;y74+qUU&6+u3i88&hPV7UXd%@TXHrZyLSEWJ0Jhl<@NVe-O$aX{si;8&t3W6 zvrp%RZ=O{>_=dP|K9(-5SeY2e{rv z`6}}#_wUc$zvOdAe&3KkByYVBJ+0UIH~D@02hCG{-yRi}Ur+0QsQg!-A9DNlea(aC zMa~_j_4lj!O@810R`ZnOxAIPYJ+1%tD)R^Vjp@J1?_1R-zi+=2<)NqbdjDwi(|4xG z?-`N&OzRI-{@eW4X&(9MyF=t>T3=VqZ}WRV^T{=ik{5A(B6`!=oD{@eWS zQ(f|VRU|*t`h8XXCcoKP&13!DCX!#F_1W2Kev{wqwC0iDT_WqR(E99jHNVMk_O#}a z-*S=lS7?3q^i}2$^0QC-HmzUbzsYZQN_EL^l}LVt)@P@x`fYwYG*9`>{!UbWJ+1Gk z=C}F1pn1w~_Crzm^|by%HNVYoo8~FM*^fl!*VFp8tIQwfXP@))-{$vg)m478pNh(_ zr}bY~_1pYbY99Hm7s=1GzOtI%=C@Sy$nRm1{7mahtNCqycW55@Jt~r)Y5k6?%pc}w zpZ0B9ul=|A{ZMtuZuLS>RsC-MAipvFH~C%SK1Y5xh~!sj{Zf7ZYx8?d^T_W- zk^D^S_5Hie?;*`2KlWYnGp*PAcbne^%_F~EBKeutH;l;7KJDAIUi)wJTc^6p@6sEh z^6P26zW=rPU9WlMcb7LhBc2 zs`~Bvvrqdrt=ImW{4P$bF8SRpl3$_qi}n4l$?u}(lHW!4f92QH`sV||nbx;d{@eT>(>&#Of&Ewc z^|W5^-)(*yHBb3n*exo*p4K;3_1paH)4omXwf{E1hg4VjU3gbiem$+%_rEs3n>3I7 zR*B?iTED6C-{yC{=8@msBKeut>;1dUZ-M5K-@PLFnbsFn_1paH)4omXwf`o+nOW5( zzx&0nFVp%=egA9no6&10zZv#_<=4~tJC*+?zZumgzZuOXzn<3X`%jbK%x^SL`OO>> zm0wTmzp3gs`Hktn&2NY5%Il20lV4Bk_5H8SZ>{E$-zJg#OzUea|80J2G>`nYisWZn zulMgZzn^Fx`8_R?pK1LkRsA+U`?PPZ>8#z-*Y1Qnbzz3Uz6WA$2E`qZV<_@ z(E2yWEB{S?-+Zol^T_X3k^Bm+fAg2Bev_Yl+P7)_3ja-h z-+ZFF38rttben)@?Ynty6)Te{oltrAJ)IF|L#@mpYi%V z-+tH4GyA?~egCQ6|NRfE{vY)B#o$r#*#WKB_s`1z{`DIFzUIO6;!6Wsf4_SD)%(By z=NkW8&4bEq|Mmf`|Mn{L%lFR-{8#zy|C#D(?FE(J{++rut-n>(uk!oyU5!^xLFM=5 zpLK0oPxAZn4UJb$LFM=50bQHcll;DXP2-hQQ2Bj1rEAlAlHUaWtNgxvRrQopP`Q11 zTGyuaEWi6To}3`LJwBlIEWf)oo}3`LJvE^9EWe*>JUKyf`}Kg{5D(|VHM`F$F%oPy+ci>^)UNq*=5s`1JxNPa)mwP`)cZvy{S ze&;_`J>?W6zdLkoTF>%(PUFc5D!21*4ro2gZ>z?W6I5>J^_qKH&+>axxxgT2JzuRxR=ilHXEYo7R*3Ch%Y7H@#2wlv9xWexz&DdY0eI8c$A8 zuVq@Eds@%(drsrY2`aZ~_FvO_mftfPPfk#|O{->4>sfx|`>*rkzDG__xlMmOp!F=j z{%=~(@?-xdCrEDF2eh8$w_fAP36k560j+2GjqktC zkNX}uLFIPtHv?Kv@;f`H@yaPkZg=R~w4UU5Re{rP zM(?g39geUk0?E<+obn$qAAl`@d;D%Wt{HlM^IA_FvO_mfu|( zPfn2h9vjelmf!gP>-@OykrO1p%>!Cb^5gH6l3!4{@po9sFK9i%(SmVhFDmVU)Y)|W1e)zV}`T4K&85G+sFc$&LNjw4UV0-)SYkAo;D)wP`)eZ+!n%ey3H7{DS0npRP^oNq(ny zYrJv_DmVTPEBOVjC+qL@E{!KAsN7EfWkBm$ey?ggIYGS^{*G)<>q&kS_^916t4WyI14M36dN8ziBj1j%p9fY!78#`j<6w_Nqe z36kHh2eh8#cj}PFE2kj2Ezq@TJ<0FXXBw}Zg5<~kYg$k8xk1dY0cNjVC9l-1s}P zJ*{W?jqktC?@`qwC#c*`$#YNZS$?-_JUKyfWB)g;XZbDCcyfZ|$NphO}e*7I-atvBe@|(bao!>6iBPXcbPEHSKJf{nz<%-y&kS>wqGlHV@|w4UWRzW+Ku?tA0}$?u^7tta^%|3KrF zQ&71bpVGByJ<0F*dm68tg39kW`>$y|$&bI&N`67*$KR19$Ds8jzX|+T`5oV_ddexN z{EpA++O(eK_e+f@CrEDW|EBdUzn^P7IYDxJVLGD|KyJ&+>akwufYy`z_&cTK7gT=y9aeG-T2Jyj%Kb+<1(n-T_FvO_k{^Gk zmHdLrkG~^JjzQ~5eiQhw@;myT>M5rn`CYGT(|VTQuQZ;VAi2FTp!F=jUurx#L2}zM zp!F=j2Q{9YAi3=v(0Z2N`2Oqsey)1t1eM#-*9Wwo<#(ONlM^Jrr2|?|@;h=-sSB(k0UEIo}A!$@v#A|XZbDHcyfZ|_xOO;v;4;QU*~tH>X8#9 zzbyk=Px9mMl#*Xix$$>c$uDR<$#07Lk8%o{5D(|VHM1pcf1 zrnvtpry%*=q-)c9mfw>aPfn2Bb_{4e%a8q=oS<@>dVN6aS$>adJUKz-#@~_cX+6tt zeE)TRzf?VPg34{`odK<9`Q51T&^ zrSaqhl^cIYwx{(ZzX|-;`Msigsfv`YCJi?^Wxe8t!Mcy(s*)$q&n5Kh${T6jXlu+5b)JNq+me|0t)R^4tHFu1)Jne*53kc;ysS ze*0&1ZCX$Ao4|jS-+u0Y$|*r1v zy{=#T=e~nasQFhuf1rE5Lsh?ee#2M4&~rMTRbBXoxOG75&sOuR{@Yh;HGYfc!FR>y z2DHAVnqTGj)qNVjS@WRQ!dK4^Xnpfl=9lMROyIxDkGy$KNN}(CvaU_*k5%=X{CIva zK6vgi`SrA(e16D{=N||4xgkHEe;l-)e16D{=N|{PmdKCiumr6qpP%q;pY!wI%a zY0V?QyF}Jsq4n(f$K*D9TJuTPwP9X{M-Cq&^+bGbC1cdr}Y=A`OW&9-KKfu_>rjmdRpIhmHC79 zH*25s^WWz8Yt>bLJolLVdRqT=Rli+-D>aY&){Eq4T3=bsZ}VHKdF1!7NPedErPcg4 zzdJOK{2mp_&$NEWRpt-#vrqdrt=InB{C=pq-$fWAJ0D~Kc0I`em$-KzVhGAALKWt|0X}4a~%2IAd+99 z_3Zh_k=tXMM}9Ag?yEU!nEv`N!egKJDAIUi)wIyU6{I{O%UXuh4q-{A23#{NUh+qVnVU$3g3_kH~L_ z#%ulY++*_VX}!MxH0$r;cFiNl&qU?d)B5(Re)IVq(|?=a3#zO9F76YRUr+1x{jXVn z7d1EXW8Wt~)B2jqf4lxxY99G*63NfBUhm&+em~MY@_RxgKhye;s`_ny_G#ay_1b@% z-%{1pSe|+i2^evfIM^5eP3 z-%53{%+Dd z@?+m8Khye6mH#%s>ot%3?iR_)G><$!+Ex&4Ztc%CD#OcPjr)emwt}{CMs$`SrA3-+!9?c>Xc@@!Vtb z>uLQrRsANvG5xps?ND82VW z{hRv!Q@#KDA6C6*)jx)Bi2C0>tv`Eh|2+5jyDgdr-xXgP(0YCUsXjmS$G=m4!S}@N zx;CxX`Bk5v3H(>@KmBp?4(=6q>e{rP&p#%| zp!FobFJIGm{DR8u%hS3xt!Me&ukqvr$?fq0t!Me& zt?}dp$?d5Dt!MfDRO87BlH0Ebw4UWRzW+MERjNl$kleNnXg$e~=LeHtko*?v+O(eJ z$8(R#FGzm3=-RZND6ePbpbZuJC@_SC>$q6bq zo`2ladY0c-jVC9l+<5+RPwQEJPij0lLFLBtk9%6r@*CfOouAGcksnlUJpZ^S`Nhwx z{lB_@@Z96b50c+K1Cn3-yqaI#|9I|kh%Fll8}QkI65n|IPD{$uVd> zS${nDnEZmukLMqgW6*lC{wDBW<;Qc6$uFoZc>Xat2CXNbU!Hp$`9X4H|2N4meqQBY ztv{Z79Qi?VWB)bDFMeLluh!oeKht<}g5>tXfY!78#`j<6$9<2SAh~TH(0Y;|&krWQ zAi3S5YtwqN{-#fAymAVX+a0<#ttab`=N^+^ko=bF+O(eJH-Y~uzv+Fdr<{W1_aj}K z*0cOx)_8J)%8lnA_q3kn_ngL)6I5Xc@1+6Ff@!Vtb3o19Be@uQs>q&k*_n7>G%8%zBlVi|& zlHUaWtNhN%EBOVsfw}YCJhXa%2BDt!MeMf0Gj=x9tO3&+=QZ@#F-_ZO4Gt zv;4;QU+2gDjhvuzo>q&lRxc?}p zAh|8jwP`)ckLMnfUy%H+*R^Rq$!`MxRen78nEZm|w^-Mv^(?<9G@hIwxoscNdY0d# z8c$A8x$*qtp4PMc9@cnrg368OANRDLX61Ory#j4(6wnj$&cqAlV6bh*ndsyNq#){nEZm|cayG7>q&kS_^qUP2?lJiVl^ef*OnyP@MSlG5G5H1Mh2K3U$Ds8hzjgTU^LtwT$O$Spe*bu; z^(w!EI-Z;$xykcP>s5Z&>v(d49lAC(Yv|i=6cK>~TeD9GHB)>-+ zS}*eB_k+nVNPg`9ru8Dff5Z2Wate|g`>$!e$dBJWCchy0?b2)0dXe8c{CD~ByT{}g zB)`k_+O%HfcU;Gl6I5>e{_#xfRelfXcyfZujo&|>X}!wt2RfddpmO8)k7ru1@>{$A zKEI>tM@~?=@%zU!tylS7s^iHCk{|oOX}!vCyN)L(NPagrv|i=6RmYPPB)?l5TCeh3 zyZ=5vzW2xplHctOtrz+I{uLdsoPx@Y-#;e5p!Fg@e)pLCg36EIKPJbZ^&&rh_n7>G zdM|$Wm>h%Fi~QE%zsrx`Jtn`P^5gf9$uVfX%I}blCnrd5?Ej|qD!+p|o}3`LJ=)NE zmEVmzo}3`LJ=V~AmEYR^_xW9~e&htn?a7ALi~RWgVDbx+8~eX$y~vN>Jtn^(`LX|+ z){Ff3-DC0#lHV12ZCWq#TZjKHzkkj5pK=P4-?#MIv|i=+gpMaCsNDYbPa9gV@;k2M z$q6bqe*bu;^(w!Ibv!vi<;L$H&$M3Uw|4)1eh;W0IYH&d?;p>!Ugft}$CDEzzndFc zukyQ8$CDEzKlWeKdX?X99Zyb>{0=v?UgfuT|9yUZ?~xNEKmFe`trz+I?sXlnoPx@a z-#sSBp!FiZ-|_vUoPx@Y-#;e5p!Fg@e)pLCg36EIJtoJX^&-D@`0w)LcaO<0NPZji z+O%HfcSOgN6C}4s8(OdOJEY^u36k5B4Xs!C-KOKo36k4W4Xs!Ct=)g0-$C^wC#c-` z{o|R|tNhN^@#F-_@3My0i~RWAWAY1<-?#MIv|i-L?;ew1ko>OJYtwp_-`f3m`TZ-t z|CCdZ{JyQ%ru8DffAx%xS586Y$L}7KW6*k)-xE5XoS<^!_m5{C66aTJQUJ|9*|%J&yd~Y1OOe zO!AArfBwH;<9ClEKS+M}G$g_G#ay_1=G<-=*qDPLTZMd8YLuKYl-$ z{DSJs?;ew1(0bp$%a7kZCchy0vHzOZi}lCv9+O{?{La;D(|WP~*5SX)@3(yaDW@R$ zZP9DfdX?Y3I-Z;$xjos?dX*phH#tG&#_u1`v|i zkrPyI{QmJw>s5Z6bv!vi^7~dp>s5Yd>v(d4s5XSbUZmha#PJr>s5Z&>3DL2~HAmEYR^_xbU?M@~?=@%zU!tylT&)bZp5$&dZtv|i=6 zS;vzTJT2bP(0Y~Mc{-k)Ao<h%Fi~RWAWAY0sKYst19D~-2{MO;W%kTf@`%gIql^?%aMo17rIsb;42D!=P>JUKyfd!(WDD!;Y+@AJD({m2QD+hYx_ z7y0q~!Q>Ytzb$%gS}*c@?{_+0IR(j&{nxZ!!UgdYWjwdHbem69PJqH{0=v?UgY;LUe)o+DX9GT{bO5eTT09f3dRhuYGCd!j=E(D`%_U^QwDG{f~dj z|8JY#?|l7!M)G5w+h1O)zbCCj>dX&MOz&rY{8rbuIq#K~zxFDAS62Qb^)dg$@kuwO z|Jjz6l|MUYWo6^}Ut0O|@EvnE9e33ypZtd#RR1G$W#zm#(9O`>`ssgneBsJp|H|1b zD;MnlQXQ1<3zg+e>!0*n>zkh z`idu2zqO(DTf6gb)?L;;m3%krP3uo}_09k88s9qK!^wy7uh*va!(IJCe;t1_{lzEf z-_ZKaUHw9To$vGX7hk7;L+j61_3F1P{qIZvruAK2{pkPv^nWn@o7T^->gD%6>OcA9 zlik#RO6y{=epXh_dS~)~*2k0onb!N?tsDHG^~>~sUiwd37mNP#{{j8wdo%q%rFF5W zm;Wcz|C#h}T7R;uAN@Zv`9JFylmD64AF1l)cMtXAozyq9zNf2SSby@*I{mG9Z~8Z_ z_v?4`zd!wR-Dv%vWm?}~^_Smo(OS6HX`=la3FX}w>+3;lIG>lFX@rhn6VxqjuB&x!o`-Xed~`m)cD^^1S@U;GF4 zKA{Ke^~?T;f36$y52`NoU|IjCi>CT7{qIx#MD44g2gmyM{^7uM{(riAI{%s04|MCd zyMNlMd$vDar+TRMa^dEN*01a8`_E6g|H*w;*MF*?{p(_MsNB`eU|Jv`uziIuOUH$0aecacy z-uEB;pY@0Iza{-At&8pY8~mU3yY#;+{U@!9ZT;ZieZI81{-b~Go2(!1S6DwYt)J@p zkN%&Y{GX*YME*0aKi$=j{@rJF{YU?Ir2mJ~ziIuBuK(!&mh}Hv`ZulL($$at-N$`R z>wW*x|Mv8MZTdH@Z}0k#{?AMQ-%0;gVuv>{eu5^|LOi^b^S;Gr}3}%c@zH)t)K4l8~s0rf7QK*|Ay9|>*`1U z?z6i7qyHo6|IzesT0heDAN?On|4*iW)B2&Ve)R7??rU1_`;Y#2r~m!w-?YBF>p%M6 zn*MJ}|EBe=UH$0aecacy-uEB;|LN_?|DXP9@;}r1+g<;`KXaQ{KO542(z;l#|26g> z{hvtxFQ$Lf`iZXp=>Or#|DRr-{Li%ha92O%|0nlxU(@=s{yZnVrTbW(A2yr1FAqIf z=XZefSKYImzuDZ^AL#r~&#yUuyjYhz^UsSvQJv%q2v_xyXwGwO4f>fmwl z=MAm*&;MP1muObZ{4;n`)N?Fz(4h5V{uy;oW&OKZXId}jpO-wN^F6FOsL%V7pEtB# z%s(Tqo9VB*C+OeMdOtrJ^Lw8DI&WP^k)LV3czzGxx?d0Oqh9?@>&5&te4np6{2vtY zZ(1+rN0Gn2Hz4y*J~xy3Xa2odKe}IkN5?6D=AQVUX}y?#;+yA%@PD3&|D<)X=&#&A zpuc=?rvIn3Ud=zlx4v(JXQ-DS(|R%g4F8X)j`R41DE~997xSaYeGm2WeJAw|trzpp z@Xb0U|9eIJo7VgFyKw#L`2F-3xqk3(TJPsa!}@3b8TsErfB8497xSa=%{s;ZUg{fK zFW2vMzaRehsUH7Ho&(UU`Df(LK1cqisBdV!-~SfQU+>TQm4D`*_@8OLU%x~C%s;~? z*N^-&{|s6$=4X-neLDUb`DWiGf75zDe;oa@PVvwA}|9eIJ2dxLodhS!G=l+HIiP~2~503RYKjgfbKL+m> zb^gphgVy`|m+t=Uk|%WhbvhohUVhckdNKc8NB=3m*}u;BnEEPz?!U-?ruAdp_s@cV z9nX4sLi`E-8(J^spV8NSR@Z;@e@*)TZu&Q^_w&cm|2NY=`yKvG>&5&t{JW3)n%4XN zgMa3a@jhG9f6}_xuD`)QbI!-?zm7Rq6kp^lw@(=AYr;ecacy-uGYdukZJd(*KV1AG989_rHbpufM;a{x3`a zLF>V`e(Im|hq&)qTmRAjY5c3toA_^N{dASTj(-mS;(PdSXuX(!Mql??UH{Slk@Wv) z`Zui~S>pdt`hPP0o7Ri@XZUv?_cg8e{YU@1)BpbTZ(85I#Q)axe^dH5trzpp@b5nE zYg+I75B`}y@;=Nx8+tn)jdx@T1PtoUdw*>&5)@V)8z$I;hY4;y*OBUd%ruubb(wI(>#QM>ehZ^P_Hl5V<{1 zf1UU1^lxarczzGxyQo+HebhI!Ud%tk_xY;B|3UGShSrPuQRM#~_4?qn-|+dF%s=z* z=s80Da|0I9YdNuzH-}=4@ zo}pfTOzXw`GyFfII?m%4qVk_nh)XuX(!hHus>pToT({!Q!s`dzqw zb^Lz%i(EhWH?8;cqhb9s|BU=^p}+i_){FU3_-38re=qe7t(WU}y5A4~`&5trB+mip z)%-JZXP+bgQ`9%K-tT`4=dbr?{mMUcPyElc-ml*wf99Xzlj}zQnSTbY7xS~o{XQMf z`e*+of75zDe;oa@PVvwAkTN4gO8*<@%LhJ}2^jm;Mc{FZ=vhr{uqzdQ?1clZ2tG4s;v zR0mlvA2+mK%s->A`>d}2l;7-M=X(tQ;eS`*8BP6LjLmm&GgTHhkw(0G5-wz?&H3u^}he$pZR0F&zAI`v@W*mZ}88Y zGxFb+{*%_lw!Xi9^trna^UwJF>;9vE_DkO9ms9;r>!-T@qyMK>r}e|!ll*5|FXo@o z*L_ykfAoJx`hO_>o7V4G;{TTP|5*Artrzpp@b5nEYg+I7kN&r(|7+8~X}zC6j`^RL z{=bv{P3y({GyJ=c`&5&t z{JW3)n%4XNqyOFMe}DQnt?ypqe{1@`DgB$)i}`2xcOUmPt@r&0|I8nGALgHN|7lu( zyY?S*8`jT;^q;gYmg|3w{YU>N(*KL;-?U!LALG9HVbyW}tb6#le>SZb^Uui5ecacy zzN|mb2|w3;BhL@ozbDF1=)pR_1FHL#>Yf$Lh)nD1rdNKcux~H=K-K;mQ z7xT}H$onwYku~L+kzgsGA=|ZqL(S=lweU8(J@(-@~^& z2lu6a(|R%g4BzLc|AXn@v|h}QBLDZO*Y&UchR@Gr{+WLt*IzzA;+y$rQ2#giGye=) zFXo^4=XoK{^Uv`A$mE~7C+laX z^Iq4i?^8NOMkd=B@ff75!ueiyD^)$LFJTtE0Xt@rbzVf{1zjQnq* zzxjwWxo&(UU`Df(LK1cqisBdV!-~SfQU+>TQ zm4D`*toxbP`}I5I&-^oda^1*3^Ut95Vty96-$#G>X8$FB(|SLD9R0IS@z43=-?Uz? zUmZ^$a^||hziGYizi|HY%RWi|aU z+E+slj`j2YufHFd&Y!s_=Rec>fo}iqp1&?)UV5GCq1MZ;D;ioa=AY!g#{N@&vwxlM zG5m|q;=iHwW0ij$uk~`#AH<*FzoGSF{uzDUXLbEY|JS7d@1}p#dOv?$$X|ZHnf|rk zg@4m}G5-wz?&H3u^}he$pZR0F&zAI`v@W*mZ}6}A=9IrayYQd1F1Gdk^`p<-eVBj7 z=U?|9{cFF(Kldxt&$NE3>p%K`dh*ZQ6aO=<7xT~P>prXNKl;BT{XdlcP3w0o@qbJD ze=Pl*){FUP_;(-oHLdskNB`T?|F!AgwBFAj$NbMr|KCafruAa}8UEeJeNF3q|H1#t z8yp0)KK{h!9a-sesHH?)4b%3sGnhkx-s{5P~- z%s->A`>d}2=>JIie>DA@){iXle<=Mwnf^`d#r!k;yN~;t*8BdW|J~_-fBHAA?_T16 zYx=(_{hQW{`DgfdANMt__x%U|%pZ9l=AUu@Xwk^?NB<|% z|BLD0v|h{~hs=tV?*o3{4?^pnf|JKg8mJy z_w%D}eh|4mPk)`auA|7$v|c>Fhi`r6!F|-LziGXge}?b#RfqqBBK}S5#r!Dpe~)^7 zZ)m^a^D~)$=HJ`(yKw%xUw=o(DSzgk_@8OLn1AA%=Y{Zpo{0aXb+PEL+&`edd~c@z zr?g(pKf|}aZ-Qs2mmkx5G5-wzkEo9G_=PC{Gp!f%qsV;^_40iu^$o2T^Uv_jIwk*m zMf{uA`}MnU{p$Gr^cT5)@NZi0=SK^lzx;lS{^Bk4Z)m-kABAt$DgO6T-_Uxwey98W z@XvLF|0K@==+*o)a%Z0-|5MaAwBGN33+J!*XZ^}Qb5H!wwBE1ZA%Etd;qznqtKPI; z%+DhC`{*y%M;${Ofqu%P#RJ_-|;v zn14oJ_gP*4(f>8+|GVkmwBFAjNB`eU|Lk}8H?0@*&+zX)?rU1_`w#w^KgRoPN&iXf zV!QqZ|I9ffe|-kwKWSZT>-+0RpS$}o|BTPS?mzlxzvO*>In~d!eyZy~`hQw=^32>5 z|1+%@^Uvt(KCA0L`oAOnKa~DW>vt^ie@ps*Ed86-i}`2xcOUmPt@r&$|J&35wdvoq z-p?P${Lf4O-%0CCnd3Ew1_dB;~|NrB3 z9iD{-gin>HqokZ(2XT#Qy{7|EKBOv|h|V!@v8uuW7ySKlJ6ee=+@=){FUL+&4e0I_{rep8U_W zUd%ruH}`R0)B3XhJSXV>C7v5@Gvz1rV4dFq)nB2yXT=*$)rB5x>!;_}+<&&~zuU#{ ze{MgcI?X?KsAi(|dj7eC=Z(8m2ak*QH?-bA|4*Nv=db$jRWbkE0Z)pLHnd*MKcnuc ztbaG_P3y({a|d}JRvpymz2p9d){FUPd^7(H zek{sA^Ut95V*ZJ5o)^Nu?l;4K(z;mmSKc3}PWdzcB!AO-HUA9X`o0OCp&5&t z{6C^P&f^!N@}FtFm>)&%d#IQ1JE?DIy_kQ7Z`LWF!@VN@P3!&oUATUA{C@h2TtE0X zt@rbzVf{1zjQnq*zxH~3HT9DrWUKO=YcIr2Y6 zeM9U0{*8BP6 z=%00pf6gEOruB0D>UjE)^BEEUruDx6!uiYZ^VEyvNB*YuCHp7y&+yOngMZU{zkV0` z>v+~F{<&`OZ(1+cul({kk^j5&Z)knl=f^rFfA(Me2lYOo2iyH`!N2~_{)d0AAN&Wc z2g`cyQ>f?uh5CuwS3?hu_4EF(zpIw>|I^)~&VQ!$1Ks}JJ%8wJ&lUwjt-4Xq!m{Ofqu%Z=hs@ZZpSG5?Id?z6i7qyKBt|98{B zX}zC6F61x2-%S7PclbB07xT~X?>_EpTJQT0{+U0<`)o=7N$X;}{s#Y=Z%+B|O8-gg zVq4!|Key@oVr~6L|EDJZaldlE-tU*wd7NeaRM&s>|McXaxhMJ0v|h|V$!+fAzUF85 zAN}8v{vS%;ru93P_`fCnKbHPY>&5&t{JW3)n%4XNqyO#c|Jw9#TJPtNWB%u*|L>%K z(|R%g4FB%qzNYoQ|KNY+jmbar&)EM>>u=Qgue>_>kNX|1pPAN+`6vF@*njkYJpDhP z{!Q!0m-v4m{r^%n&aTUh`4`}^ttvh*Lc9&GEU{(k=FzGrRyNB^hsulIQq z{|&95uJYIM&*5Ku5C09V7xT~P>prXNKl(qC{vS>Mru8FB{2xmHPo{s${iu-wW*hKl4Z4hxupRf11|cuKmZ{ zhV`={{U@!9<@#S^|Iz=6^#5Y|H?0@*$GC5PSasY#zdZS$X}y?#MsDuozNYnM{drEf zQTL5JKRjZ}Pw2rqzXPhfO?A(T_nWEmC&e=jtrzppsCz2w-_3f{dNKdpPTq%A2laVx zKh@BBG5?IbZl=HLo}hn2>;3$wn;%4O&(mM${W|>{S}&g8!?*6&gZrpgf75y~{|w*f zs}BDMMf{uAi}_LHukQ`W+>_7GWd50dAJ<<#KjNGDXYgZD{+WLUtrzo8eDk~z{&l|@ z{*%_lqQCO~Ky}KWxhMIX)~oqv_nh$XuX(!hHus>{_hpZ-?ZMZ--YW}$M2`V$n}GN(|SKY8rDDa&&dB4`pds*y_g?` zZ`LXP_fp@`dbxh5`~C3Gb%XyT&jIMw{4;XDi{s>5y(53qdcXfIoWI_m^(+6(J@G%& zdcS^${F#4-Pp%vJXZ{(qUd+!Tcb#MKq)7gz^?v?1`j_|c&w1nDv|g@X9Zw%}miO>& zTJQTWoWK0CPm(|RvHnf#OZHFZpW&bD2mhw^e*G@=*YT`V{BzyN`%LTQ`juZkC-$Fr z>EF=$vd@oo%KBmd#eY!m6MC@S{}%k~@9cm0=la2a(0Z_}=RSpc?q8^%sC_l`;8;KJ z|N8p@)$#pzx2W@A`>d}2=>MAZ|K0R&TJPtN3;E0MH`D)J>EEEE=zZ;Ah_(*Hf_-?U!LKf}NKxUXrw@4w(*-|ru#{~hT+ zXg%2Oe+%nhe}6yyUzYxZ)`M;R)Zfql-1n@l|LFfT{`Ed@;=iHw(^dXD{yF@M@8Q3p z^t(*L9B-?V;YiT^|C|H<@kS}*3G;op7S*R_7TH zk^Wyy|EBd~{uuYo537#*=a(n{Gp!f%&&bVv+}E_etUu2Q_v=2A=ZBX}`3XH(=XXGL zkErfh@sz2$(1UIL^!%Fp&xKp3Ip>91Ys^2l>6)Kty`Fz=<9XvQ)xqQ9TMe!E&;Qfs z=lSb%I{sGriYLY2H?&^NKcnuctbaG_P3y({a~pXdRvpymz3r`r){FUPGibe-f8v|__3*Fz&G4VJE*AZj_Xny|{>(ke z-?U!MKg0Kv)XT>i>Kj@w=AYsJ5!G=XzYvxGOzXw`D01IJy?ozEeM9TT{4;#BPVs-Q zh=0?1zkV04Umd@n{^G;*Z)m-r9}VlD`Df&R3;pHav|h}Q!Z+*mCH37)eM9Tz`kn6g z!#~#z{*ychpjY$H$o(#klW*<4k-urZ-~SfQU+>TQm4D`*_@8OLU%x~C%s;~?*Nyx$ z{|s6$=4X-neL9}?&;CpPruBaQIQoBtdiCYJ@o!o$*RPJJ4>@!F;NP^~_g^@F`DLFZ zfAVAfo7R`?pUgkQ|D7WKP3!&oUFfglS*Q5Fm;Mc{m+M!4`JBlAUHUh)zU=d3osvKM zFaCpipU{Kt{iUoVuSx&kP5-9#e*UfXS{K{;{`%49?mo;vqxa2#_%^K<^Uv__ zKJIH;@B5Gb_o**A98TY+^?ghHUzPsvN&lwxV*VL@-N$`R>wW(P|N4IaDE;q9|3T}) zcK=&g|N8s;>Ho6yAG989>!<#H{^!1DZT(08r}3}%c@zH)t)H&)*YUb{;r@a7C-)CC ztrzpp=<7bK>p%KGlKvk}|EBdLOZ*>7|4*iW(|R%g4FB%qzNYoQ|LA{r`rn`aP3yat z_}`lTZ%Y5B^&_~+=lhDA^j(D_3viAX}y?VUa(o`dl>(sKCcVD)zEq|zufYPj=!1y;uG|5XuY5RjQKrJf1UU1 z^lxarc>WIGy5A1&qh9?@>&5&se4n5G52_yjruAa}6Zvc3hs-Vc{7mMT`S)V|=)U!x z$v<;T{Li#r%rEiJ{dSy(?ia&<(z;mmSKc4cU%s^l$ltVH%`eIQEPY=D&rq+|ruAZe z8U7!c{4=-2|4i$}{3mkXllk9Cz5JWji}_{v);bN|oBmDf{rX+Fe&tu5<2<;2@NZi0 z=Rd>xXMP#^-$H-+H?0@*pYW}98r)00`kU6v^{e~NKc;`K8~i7&i|zVZIDh%oJ{OsQCC59^1yW%xI(_x%^nUw*YuM*ieS{-*UM`zQ0u@XvLFf75!u zei!=dc-4e|t{d_{&!Qa{z1J@=)rpZYX1xWTsQa+ zsxI_kS|f`54FBS@_-|SZYcP#OLOZtB-{hQW{`DOTbANMt__x(rz+tdHG>EE>8&kx7^&rAQ`N&lwxVtyI^ z-N$`R>wW*h|H>Paf9995|C`p|sPkWWb@I>s4(n&8^{U1;N&!>OW`tc?H zA4vZ{P5-9#VtyI^-N$`R>wW*x|GxBpIQ^T}_bu^%Rr-+tq^uHth2dxL&{cmCY>+kQU|I5;U(0Z_~pZe$Xf86)1t^er%H2&4+P5d{se!9wE z$3KUE@jd)Ev|h|Fqp$m{uK(!&Ncw*?{hQX0Eb)IR{Xd!hP3y({GW@%b`3@IvH?8kp;(u%UzbXBj){FUN_;(-oHLdsk2mj0uc^~GNasO#rf4lY{a~syrhV-Ab zE|%+mjr~XeC({3m>EEb6Z&p?=(Oxvs zda$kEAN8JJeyG3mob#dT2;>{V0-@E{NPf4H{mYT z!Q);oQ(6CR)|=Lg`SGPU>Uv!S$)$#l3FLM3h-?ZM(--h+i{5bNzh5qtyS}*2r;ro2*)psxT z4Xu~!cY0n5|6D)#Px2gvUd@jqclJ5*KSg~*>;3+>aQ=FK*020CH^%==>;3v2@@IY= zK0l_v>P_p#{4sLBkN)z_{!9L*^?rUk`e&WupYzARX}w&(I-Wk{%yol*(|X^3;r!*7 zeUkjikNi#ROZHFZ$Kjvr2mhw^e*G@=*YT`V{Bzyl-?Uz?U-{*8BL8>k-_ZK9&yRIV z{_MZ_59)nF54QW?f`9$}1J&W5>j(cq>%p>~`zPwTZ=!yp_SMjXZGE?X_VB+u(sdF% zEHP1xTgTt3I;eHa{me}3#r;FnJ(cy!Kk7~E#r?yc`*psDRR^{2?RmPP z_2T|v&)quyX4Szb#1|S`@Auy^Kdtk~?{)g?{7vh{`VZf`s8?U@d*R=-Ufe%~@AFlM z|AQj_P3y(}8~MLSz1Er5E%}?=Kjhzw^`rgz9UUkC+&AEVruE|f0pHvwg#YtI{3oqf z_YaY~t{=#K1NocWKjhzQ|4(w9d}!Yb|EBfg{vrHppAG&(lz;9Yg4T=uH*()Yy?krm zi~LRN#r;G0W}V_+`(F4rt@rD9;rdnGe)@}CKlnGT_xta#{<(jM{BNPZ&cn1`?7!ig zb&7xOd*R=-Uanv5mw!|p{<&`OpR``xKSb{AbL4-D`i9o~{cqv?)t~h%|J*m=f2Q@~ z{sG_IKLojck z-_ZK9&yV#>{_MZ_59)nF54QW)f`9#;eGdOzH~0@)50>@ZCs5CQ1N9U2Jr;Vft?%YP zd#=~tHUHUjz3Mdox%4^Hda$kU=0AIGkN02MbNkfy(nn3}!M46zzu)*T71KXoSqc7M z;(w>truBdR8PA_NfBD9LuH*li>Y)BRG~f6i8(RNoU457TI_f9?>+gR@J3srzU&!x2 zmGA$l;s2}G=;lBDeE(c`^ZEOHl|$%easIC7y5)Ufvu>vMDe5C{)$!aweQ^97+Rwks zpXZLbF6*27-gqw2-`n~w|IJUTUi~&dsdcCM+m_2r>%p%3p5e?#lV{vW<~QLn!G-Vgt#_2T|HeCs|Vcu>T@X}!4r zi2UE9Ui+-}ZSps{f6l)b>qqx1@8~%B=e`;LGp!f*&-ms(IsBg|;y-D0Z=XuaS67S3P&S-K2=(gA`QzWTUansqPak}8-QeG}-uGWv zfAY&dN&e(V{-*UM`zQC$;h*aU|EBeR{Vw#^@vKw)bKT(Iv|g@X`Q>vWf4;ZK-?U!b zKSv$wm;Bj(@gLOtgdS`^{{{d0JNq2|xo+?uv>q($x!<6k`)2AV>U%8oU|ZjFQ2XBI zNA%jXUfe%y)?UZ_E%*fe_1d)F@4sVyTIZ49>-5+8o7RizsqX5LLtdL(qD$|3>b6sF!bL z82Ovli~EQ0%{nFjdqwg$t@rD9;ri9_`{^$}O#g<~`~7!V|J*-B{(6td-?U!rzu}v8 zihu2U;or1gu3zn!e^ed*xo+^Ev|immMDBM{ul!F@-_Ux$|1F%q`m=uJpZf;<&$M3L zKj54DhalIF{B!>hv|fDwMDF+Lc-BArFYDj5-hY3O{^dFRbN=`@t(WUp$J2-N;JU%T zX}#~iu>RzieUkjikNi#ROZHFhAHu&rgYa)!@7M1_fB9vd;{RUyH?&@^U-{*8B7eTO z$ltWS?DJ#&vVPcq$v>#~2|d{EUkm>AclJ5_bKT%SXgyfgbDuyx_YKrf)c08E!M47e zziqx!f7kqN^OdU8{B6r)ruAT3-_74PABgu~*?eH?yG5Tt+`rswJ=oTF>-Q`FnPSqM zEvUKMSN|pyn`N`3HJ!TJPsKUHbvK{C&zE@=x>=mR>$z@uAK0v$>3xd&$Xj(hH&7pR{$^3nbH`kl z_04^6JeTP2?fM!2{oVcf@9%USUGgjadpgtl{dN79{%zLZp7lxVV%xu4zZX0t|9@Zg z@V^(IYiRxNclEvh`*i%@RUQ0C;^~Ig|87^`t=|j2ujBuY>fk>XUutOm?|eqR|MydC z_usAmb@cD@yF~jB`305VB?tA|v|i+Q$sQfAoPx^ll0$lJS}*duWS5RtPC?~&$sKxa zS}*cjhyO0Wb@cD@+x<)VRZcADtUdJn^Ao=apYtwp>-^G8aqUOMUeoc)DM)^s^xCvu{C?2TdX?YW{rCB;y?>YA&fm(fate|g`@d-{rTC{(XKA$}c%V<+hXk-?U!k z$No)DP`T}Vp`rCEzk75%IYH&N^K?V&Reo#t-{-gX{(XKsWvxv~G7)~o#3zsU)b z-+_kKtNhN@@#F-_@5YAKtNhmPzt3;&{k#0W{!{r?PC@1Nb@qSLdXeAP`TkK(LFM=L z-|4k!y~ywDKi2WeDX9Fu{{QH;X}!pA9saxg*3rMu?`HWWCrEDW|EBdSKlX2Og5-9r zq4g@i{W_kUAh|u<(0Y~M+Wq(Wt-XJj-;NLDS2+dAjs4%WUgWof?;qt9B)^?{ZCWq# z+wq=`S586l+pX88^&-D@`0w&tNB=&*N9C8CpmN*6{%=~Z@?-xdC#c+ZoM~vi%I|(1 zPfk#|?f73CTCeh3yZ=7FwfFDyyG(w`36dN8ziGY7kNumRAo<eU0xQzIYDy!VMFUxemCiOa)RV`qM`LF zzqR}C^ILoWF2C)6CBMokNN()^ru8Df?R@_zry%)VuGgmZBERkbR>v!+Ao+b$uTASk ze(Uhx<+qOheSS~MFF8Tw#(#f(ru8a6_HS~6%5D3r4Xs!CJ)+~u2`abkzi4Q^%5Uxd z`~244zt8Vm@=H#T{Mi3Z>s5a2-{b_z?~aDntNixpcyfZ|cV|QEReo#t-{-gX{#|}w z{gwPGr=W8CD*L}_y~yvYeE%q?pz{0b$9ipAFY^29%Q{{;1(n}dKhbN`dXe8c{CD}S zqko^@-SSILklfh+P3u*D?BC=B$?arA>s5Z=)$!y6$?fTe)~o#1?!V7(?fv`wHpnkI zL2_gNH?0@>ZR7h#IR(k@D!n$X7x``b_c~rV17-e_pO%I|RqUO+@ZaaR_Wpf--6NPgdIXuZnsN*zy5ko=A|v|i=6cK>~TYwzFXci}totDJ($?Lzi{(|VEL zg?#@gry%)l(reRtk>7>C)bYwGNPg$(wQ0S`Zyo--{MOOG&+k6@B_~L3?Ej|qDnIsb za)Qe3!si-VukyP~$CDFOZWo?vXuZmB?f(1x*51F*Z;Skr6C^kGf75!EANw~sLGs(z z(0Y~MSvsDaAo*S2(0Y~M+Wq(Wt-XJj-`1bVuW|}1x2^2|ru8Dft$hC|r=arN`mSD^ z){FeM{z%6wr=arN`WwAAtrz*N!+)3GI{Nqd-5|f@1j&v4-?U!k$No)DklcRI(0Y~M zwK|@hAh|uz(0Y~M+Wq(Wt-XJj-vz&yU*!}eH}-$idXe7+eE%q?Ao*?8Ytwp>-vw{! zc;yr%zwLT$S}*cjhyO0Wb@cE5{qp|w59Rxk6Ake{{eArR)A{e`^Y7DftE=z+{rp#N zRlmQj`{rjF{?B@iZvO4=-#>TtJMNq6cD&M1b)lP8J^QEn?>N+uI&`zB{~G(B>c93; zL)C?DR`pyz)IZUXI&`zB-_H7{es4q7g>F{$4^4I3UvEeqx>?ol%DN*BsY5r5`mg>h z>&|Ydy3oy{eh1gD&j0I|HdI~cW>LTGFQ>Y%Ue{1{p_^6xV^iI>w;NK2ZdUbIWZk_D zsY5r5`U_vny3Gw$7rI&1AD-$ie4!zA=w?yB^^aM1prPtQH>>)mrn;@aYe*fsS=C>i zb;lY~hi(@2yKbNAc5&aTbre)x=w?xW!97#m1!o$nE_Ab~zhuW$cgdX%RTsKh)bIZ3 zRJZ$+hN=tQtm<#hx~Cgbhi(@27k`j-*ECdJ=w?;_=u~&{uNzW_ZdUb|W!=$+)S;V2 z{jQ&99nXFG{4a*83*9X0FL-mR+q$!%>Owb*`iuT*s@rvaL)C?DR`pL#br=1nA$90x zRsXH5d!Qk8=w?yB^H*87y`kztH>>))r@EalHKY#Rtm-#p-NA;`p_@hh*Pos0zW#ng z)rD?W_216A;|-}pH;a1T|7<^dst>Aewf8^s_t!I1{a2ytSNr`H_c>bkJ6@UUgQ{Qc z{g3azhVS3|CLj6t_WrTIf7{aZwU0IQ_x;!6{oAVVzkZVa4>eT(RoCAz)eZN5=)BML z_s>25{QG$SxXSwZ{%_&_an<*Kzfb?`t$!%%7w zo&M9`KR5sU`^tLj=lj=%``^{xzkbo{|BLqj!q@LRQ~qCH*#Fji|Gm!rEAF$kZw&YE zk4>L{{{3@5|1VsB#dQ9|{Xe?aU);wR>p%a#vfldn{{PAh7M@>L{rvIA$^YW>&#LQrPEl?b9%!iZUiI_K7p=c~ z>N`9?q2puv`{(ALe_vT|{e1s>EPX)rUG4p^pTFY1TRG16-?vZilYjqQ|MUIxsj0u8 z-&TA79M5U$JKVqDlji}8>o=aWRKNKA7P@lCzkja(FI<1~bl$r^X-Hpmv-1B1>*wdc zr?Wp)-&H^VebCe?$K7kKe>CeCpFh#@G5!5>^UuGp>|SsEWmEs*`4yf1)89Y8{}-&E zpI?ur52(JYeSZC-*WVZI|3&wYFM9oc(fuQyv$bxA=l3V4&msT*xu5?RuK(8bxnJ~~ zhWh+h`}`iq$^Uxm<2j%D2eLm@|Ip21|M|l8cW2+l`2#xrr@w!0{`vQni`HAeVd_83 zFVN{f{r&U%f5CdsFLoYGA5eW)J->Lisnh2e@3WTrZ%_5Z`~;o%ng0H{=ReQy*ZKUA z@4vE!{@w5ITykRiy{k*!{FMCn1JO z|NrfhCv=?tJA=VL7y11o(|YmWA6!TO?*D&yG4~CN|9`uGr|&Iv^B;f4`RD)t@8XxI z+%Ep)Q=a|5sb0ES<##dX`%iQ{r0x$5t^bp*f0y6I*(L*x9iF&zl&dPsN6y~i~KIqZ|(7WYrC%el&m{+v&!!x&R6R!sJdOdrn;c@;=g}+ z5qWE!1-0&WU7^>e^hzm!Q3tIT>u(1+Yn=tP?sn++7g>Kn>&5z8NB=Ir_}@z? zzxdycnaVA6v&e6|eq)pCce{Rb(`4PDn^k_>IbW@_Aa(lf&!~gei}kmioVCt^T6f!D z(reRtvHsT4zsqmi@27RQ{l13EEp)TUZ`*TIZrgtUDOo@0W|iMI&R6R!NZngm2dx+D zZyPylodvb-w*6MGP3y(_TSxyczYDicxovx{p>hk|Eb`l$_bnH0o$`aMA9Si(+e*$_XF;vI3peYvX}wr~>*(L*7ytf9*X`Cfr~HD-Ep)TUZ%f{{ zT(E!253=si&4v8B`;RTmOF#X0QuDuq3SGYP@8kWS|NAi~RR8yM9Q+63Pa0bPd)@uZ zciR8{&z1*u{9mXJ{tx0S4Xyu0S3mmyo2uhH@cYY#*8gT#|2h3vR{re2rN627Syg`> zuj`H6XZ}O{=(YLhUH{4doS%;STRL9%>worNi$7^-{cm;k3;uQd-%#CyV&}in|3+88 zke`nG>y6)E>NUQh^}qi4^>M$iJ^UL#)Os^NSXulX)X!Z%-?&+IPpTejFZ{;QhSvMv zPw&qE8~b$p!>WU?i4Qfj-v9UOyYv6X)jA&E@C}jkFs=8$-}<@zzpT%W{^snf=uduM zK0NiE`PP)*m(BjaKhUioa{IDA`{2`}^82!B{lV_@8~lIyd#Y1@_C3@3_qzHazwoX6 zzN~u)@|($dp?{YDeE#D6`JG$-yK&~(x99pvF8uy&cm8|SQhZ`g>ddx&6PqYwB;Vra$?e`{vZw z{IYt+x=KoK`w#h@`+@3}-D; zU+};1{i%KG|D5*UbN|hB-(Xr7+x}C1?!SD0Z@6i?f7qaFhx>+^)^FbpVNasM*Y`nQ+VKa};aX1!_sp{{=Lf9?&F|8sS{;(w;~8@l?z|GC#r{m*@1>Oa%^ zwO#$te}k@>$Wi-u)iq5nBAPW{i(KE(Q&Y5m2ne(1m9t*QTpkEZ@J zt-n>*pYve)eW^|8)8{t>4r2AL=)rJJoNzajKtb{oJm8IRA54r@vKh zhtj`kyo>B`y}7co@x)X=(|W)E4f$_koyz~FUr+vLTJP8I=>OTN|0b><`JZY1 z+0Osaf8*^_|BdXw+W%%+zrC*C#5%=4=db#i)|af`P4rQIo49W9Z(8sB59hz}@u_|z z`Kf-U^(Fh~Ce|tbxqk3(TJP8I(0>!_6#rZ|_&2RDS-%_koYa5gt5g4()|Y*LtY7@I z|KdNnF?F$CzwC4P=eogva%1XZS-;`WruuXLm#N;gE{^r>{lnhL|Aw0<|1+)c?drSx zALb4lE>%6$dSU)B)B2@degF9>w+-&Iy8csr$g;a~e5`JZcA-`drW{@urYP3wLC!T&jL zPyWyOtI7XN>u-1c2mj~1p8hwa|D<(sT)+AJ!gaUC{-ggB>Ho#_Z(2Xm^&kB|Jo!K8 z<;nj{>;3cdkpDUEEKs{hQVgEb)I``oAyzo7S)E>PP?XHo^~pR_Kv^@D%+IcIhKNB?Ig|C`>K{Li$0rt3fYe_`^^ z{SMdfOzSUn^`n3HSzZ6p|IzgSc=|W3AMN^&{_jlxKT7|m^*g)z(ZBn+uW7ySKl;Bs z{oj!OP3xC;{YU>h)BmmM-?YB7s~`QlkNcX|`~HLfjlW6%XQlt7b+KK)gMaR~*#9@3 zpZ=59#kPL%?>?JW*MIbXa`M0NXOsV#)=zf*NB=*Z{BL}1@;}r154-x&zx%AN|LFf< z`u~3VH?1G+`j7svPyY|5f7AN)UH$0aecacy-uEB$_wBGk0{BL+=^1tD?lmD64U+Maf{$HB>Z}?#HKhye4UHy>%8vBp_e~|v4 zO8=(yA9Vdk|KCghKTiLq^?rUm`gb4qHLWk}&+~)!k9cm_{3+x4LHcJtKQ#AWzJH(Z zyC2OQ_GT`7yYru(f3u!{x5S(iGWX=)eVNv)`6vJWiuq^osQ7ceHm|6P9cWBwUD zCcdfHruAa}8Fde3{i|7TS}*3G_-6hY)aQ+V=AS|9#r!k!x>m=N+XJHf&$QmpkGlCo z-o7SuO zC;pj#27f2&|7QLfv|h|V!~csqp7Z!nRR5XQ`}xtBzpk;!|D&ld^UwGktoP6VLp}4) z@UL?T-=_6q{u#dSQ62tIi}*LK7xN?Pn12Ruoa&i>#^+$Yn16;3v2 zu3zS#;h*aU|EBeRel+CA{FDC7J?THwdNDtujyY%e-#*nd2jzXNi=X@biEr-r!#~## z{*%_lvYz>8|< zdq)1I^?v?1`e&W;IdIi{UpOHVg>HN9x4q9Kbe=`3J z|6DitH?8;Ucj(XjGyHSikiTht$@*pf8J`2+Tk6mJGiZI;=g0abfA(MeCz*f7`z~9* z>~s3en0to*q~@MeuKoTuoIm#|)N}try=nb3?_Y9$h`$YcRR?bt<$tF2{{E%Af8*bc zGye>-UVf$5ruAa}xsLwR`8WQVKk`1@f8l?o^&{Q>G5BZxiGSvv@&AuEtrzpp=<7bK z>p%M6o&NWyf75zDe;oa9P5prXNKl<0T6Yuk4`ZukgSmOWT$v<;Xa-V6vn14oJ_i_EpTJQUh{x47eH>7{l`sGXf?@a%< zrhn6VG5-wz?&H3u^}he$f8%e`|5@ojXUe)>;Z7u))&f3yDGhxsS# z-?YBafAoKH^3U9p`kB^GcKt{HKUAIkZ+uPE`k86Hn17Q0M)z4=|Iz=!^#A?zZ(2XN z#Q*i_|H1TcS}*3G;op7S*R`Y)(|R%g#Qz%mkN$s<{+~+!ruAa}NbVcHm;Qg8 z{!Qz}{4@N!kNcX|m-XlQK|bQSLHU{S{D8mD`u7vf{^93``M&$n%wexczI(gRZ+d>s zdj5BZ%sC-*PyTnCruAz6$^U+m`DgH`_y@fBsytcuf36uTAU4{4?qv z%KBHc-n3rKKk?1{GpNrS|I9yw){FUP(%@d-^@RQzY~=| z^Ut95V*VNaU)1rO$A_Z&&$QmpkH-ApQXTn!H1(Zny?_26>Y0Cr|7WK9b4=^S{4;#t zqdNSb7V&RdFXl(oG5-wSIMp-%jL*S(G5-wTtW!RRLn8T`*8BB4T))ge!#~#z{!Q!s z{AkFJ`6vCEd(wZV^l4TujZfl=6*l?bKT%SX`?tvbrm3EP z_ZhjH*8BZ$IDh7!aUQ=G@oie~*YA)&^UpXBt{eGh{u#7h%+DhC+jTto9~0GoruBaQ zIQqY5s%P#Q{!Qyk)-UtV@c)d6f75#3e>i{UpYb`6o9emm4q9Kbe=`4!{JCz(-?ZMZ z-=RPA&+yN6gMZWdlJ(2{GxC3R>d*W$J_qZ|K0ns4K0oH3;XldzGv0UE`emPcS@m2u z_)jwbj9mNuZ#aMMQ#g+M7V1swpLze1^F#b`{}Q}eRQ}9AgVy`|m+tw6-+f^I8DzbD ztk(We{|)IsX}y|% zMql??UH{SliS++s`ZukgSmOWT$v<;X*3V4q#r!k;yN~;t*8BdW{{!j&?(}b3Kd{9A zb?N`U^lw@(=AYr;ecacy-uEB;Z~7$t?@9kj>tg%;Kdk>vAEy5+(|^*s*w#<|{rsbK z>psjsWBu0sNB?J3$NRi9)z7qkrt3fYe?fIWS3TbsT0b+b7xT~P>prXNKl(qK{vS{O zruCys{NI`Wf0X`B>&5&t{JW3)n%4XNqyNj({|)Kiw0`*#|2xzFt?A#iUd%tkzx%ka zX}#}1_}}=O^nX_RPg)n-^*gMexZh&^oS*)a*2T7d>ffw?_hIhI`ZujF^dJ47ocuHQ zq<*ILlU@JO{|{9s{~KQuwf<*XFXo@*&-^pEy8fg8gIWK55&x$3gG>BhuR8ocDB|C= zUd%tkxBIxSX}#}1`rnlPuSox<^-Z;Z=A7aG>hzzqUd=zlzx%kaX}#}1_}}o#AJL|>#GwL47`d72g zv|h|V@y+}*sLvbU%s+$Hi}`2db?wxjxo6CgP3!&qXw2{Nss9FDFOi#Ry?A~P-y72Z z<>}kBUd%u7&zv*PY0BA zZ=C9xf5zuvy_kQ7Z`LXKA4>nG^?v;h*Dv$WIFIk8f75zDKN|95{z-r4p5#B%dNDtu zjyY%e-=6-H)~op^zPaBI|6Dh$pQLrMUBAQm^Y1?+{}WR^bI{1&dcXe-=g<5z&g0jU zf99X$FzfyL9r`o>jPv07k$>i&LF>i*EONhn>d)LW@;9yb^T*NuJ?WqG#O{4??=H`R0B9kjk=|789d`E%Xi-?ZMZ-=RPA&+yN6gMZWdlJ(2{ zGd>5tx745cXVChx&yV%Xb-@0M|0MIzc;98~mwk@wfa?bTN#>uCYrp>u=g)l#$8q06 zy=nb3?_Y9$h(GRAf;Uh8nSXK~v%a^x{<`NEez%qRXYh8_=`&;g8MI!^KiAQJI{(H$ z^H1J~`!9UYw0@-a&-@er%sufv(|R%gjK1!(y8fg8-RXaS`Zulj^T#3obGN4do6^5& zy_kQ7fA?`;(|X^3@X!2{_hIfy{xhw=UFXl7GxFb%{*%_L`DgTXpVjpr{cFFB_jxh> zo7PV(@&EATpSdUNXQuUH{uzDU$9+xfegDz_f%JcO`Zui~SmOV>^nYLaH?0@*&+zX) z?rU1_`w#v%eUkq7r2nLKvHkuZ*8ipt)4%q<$UkXaZ0o1~e*V$Absy%Rv3~3RqyICL zf99Ul&$ND~>p%K`Ve-%Y4*q9aFXo@*zsY@8*MIbXH2puG{!Qygm-xRk{r@Qao7Ri@ zXZUv?_cg8e{YU?or~ez$ziIvQCH{A&|69|)X}y?#hJW{QU($Nw)Ip0X8pSlbI(}6b^p=-$;m%+PwHn{KiTyk{r_%X7=P3s4j_`g2=KbZba>&5&te7lePn%4XNqyJ6m|BCc) zTHjRrXU@s`*?4vOPg<|$pW)wq+}E_;_aFRkcxCd>+>`Y))A}n*{J%8$XYR@RpJ~0A zf8u|Q{YU>lNdHfzf75y~ecIjUj6$|{`&>YIfF;V8}-_>-ar3OpI`2O z^kdE$JSHB}Ytwo$|BSkavi{YqH?0@*Pkb}~4C?d7Kl9I^^yh)CGs<^7tinEd&5-Ezxxc|ruAa}iErkd;r|*D|4HlB{F6H7oRGOE z^``ae-+$tt`DgHVqVi|{8MI!^Kg0ivI-c|RP*ne!*8BOjp%#WyJ&KdrjwWx>*D9$zeVosb9x`bdU@ zT3@n%GXD(!@*e(8>;3v2`ZNCw|LPt7P3ue6FZ0jH|JA8K^UwGktS|fgSij`Y{!9Kz z=AZGt%hoUZ9M=KY4f!XTe@3qT{x_UI_bD95eGB!b_0PP2$@wAvm~#ei7UiG$XVCiI z?)vMVUv}=&@t5j&$a=Z0q4i?^xsLwR`8WQVfAT)uf8l$k^&_=^=AZay?uq}I){FUP z^mU)r^&kE3PXGJUziGXnKMwgb{|x`^clbB07xT~X?>_EpTJQT0{+WOBKFmGIf2Q@f z>-?E>hW`!eKWV+1e@0*TSzZ6pKl>&AUrhg|^%G0{KRo$o?n(YLtrzpp=<7c2Yg+I7 zkNyv&|GU$_Y5l+w|JSAe`_jK@y_kQ7fA?`;(|X^3@W1Jk^uH(lC#{R^_y4f|H+`7? zuT1|*>tb6!_4o77720pt)_?SWX7bP6ll4E-`kAi(=>LVuf86hA{misp%stv;Oh)Z(2XP#Q&Y?|3@PJP3y({Gkm*``;9wvlaqhup488@ezNO7`v0No&5(&{F#3SSJ!{^e=zI6FXG>{esGEZ z>s5#U2Sxmw){FUP_;w%nHLdskNB^7Bzp@Dbru9v=f99Ow|LXLgv|i0W!@v8uuW7yS zKltD9%H*H9C;n$ze`SgPmnQ$rJ;{Hj^{r@2SKb8JX>&5($+?js{f1LhJ z>&5&t{JW3)n%0-~=lMZC;<@3rPZ`e-_$%h0(SNV%mE(Nh{it5^Ii_CCKl$%=GUtTM zJ^AmRn%1lNC;$CX=AXf%;{AGUTJN9#r_V3%q&Xdgh?v-+D3s#5Z%!@PCbn|D^S5{z)BkPRQJodeeF}|HL=*&*1Mw<MDsQxpp_w%DM|F={}{vSg$UheIOyo7VgFJ6ylaKf^!Q4gO8*{rqUikNGG4 znS0WIruAZeL>+U^@V|YkXa33iSg+=v_~w2;{9i8OKWSb3-21o4oqdka;lxxw(|W)E z4d>7NGtT4JBEC)Q{rVm9XZ{)I!F415%s+$Hi}_jPe!Gq*fA(GSH?8;c$I(CQl+S_l z$G>TP$@*pf8UDF$@NZi0`w!>O{4??=H`R0B9kjk=|789d{<&`OZ(8ry@6ez5XZYv3 z!M|yJ$@*pf8Tr3D^=JMWpM&*fpC9X&{5MT?CiBmD-(~BUeNO9_xo7xKGXIQR`~7b? zf9_K_j{6ttP3xa||B~}V{BfTWyjfKK%s+$H_jcD`_x!R$pB3}ZAnWB3y*8~E^Urnk zpU%JW&-|13;rKXXs~&$M35Kclbvtgip)e|P%dpZ-nj{rqvrpZRC_ zXTQV0X}y?#hJW{QU(tg%;Kdk>vAEy5+(|^*s*w#<|{rscP-F^7?pRs=H z{-gghs^fj$nd)a+KhyOe{lB0(?LTq9qxCb>dNKcuzV5TS{-gh+>HqQcZ(2XP#Q&Y? z|3@PJP3y({GyJ=c`fA?Yj$@({~FZ3V%pPc+N_oRNN^^;xy z(f?ru9v=f99Ow|LXLgv|i0W!@v8uuW7ySKltD9%H*H9C;88`{>l>n zFHQcLdy@Z5>&5&N|7+|&`u{=te=7Z(){FTgxikL^{y6=c){FUP_;(-oHLWk}&+~(P z#B+o4GvoOIf5rSW`tMc!ZK``zy#G_q&lP*S&u@Bu&HZQF@2B}EWbV2BzE8>gGymT1 zU)}TXcKK!g89XYU(reRt|NK9Fe%YUX%s+$2#4~zrS}*3GQTI^Rznb-?^dNKbD->g$UheIOyo7VgFJ6ylaKf^!Q4gO8*{rqUikNGG4nS0WIruAZeL>+U^ z@V|YkXa33iSg+=v_~w2;{9i8OKWSZT_rKx%`QN`s{wJn-=AZF7Snv10;ry9@#(Df& z#J6d^U%x|t=AUsMTsQL1{4;31n4d-Nx9fQFXWv!-nb!OH{+p&cllf=7@3Qs#mX6~(*e>Ef$^0{N?f1Xo{JBrzIPP1h zH?4o>{Y%ad@yC5i@Mcl@Gye=)@9$r_=a=pG>-bA`JY>DR)X;h{|6E7^>HHi2%s+V_ z?!WLo)B2Ha{}}u;|HMCYPyElcUd%tEulua7|LA{r`rn`aP3!&qarD16{j=ZU-?U!L zKf}NKxUXrw??3ow{>l3=_ay(B*59u4XU-Y(%@-`nu2R`j7tEFY*6k`Zukg zSmOWT$v<;X@}FtFn14oJ_iwW*h|E5pU|DN=pv@W*a|HJy<^kMqHGW{p5i*5bX-_Jk#+}(%yXRP14|L9+PE;%sw zq<*ILGhP4D{|lprXNKl(qK{vS{OruCys{NI`We&5&t{JW3)n%4XNga3`cN&jc1|D<)X zUBAQniTf?q&-v*;Xp%Mcq3Yy+<7=YU z&rIvZ{FD5de+F0AfAoJa>%TAJ-?V;kiT~?WhyMpf{F~N``DgfcANMt__x(rzo6`Rk z>EHbSX?y=rORKa^ugdDOx?1$q?^9K$PW`YHQ#hs&5hH$Li6bJ$IDR4`V#GKiQW!BJ zBGOYh9V3n-eqzKF()fvpBSu6-j7TF!q>-j0rZFPYkw%)Pr!mrWv~(Q1a$nE8?$@=> zs(SX>Tk^-p_3ittb)IKmd+qhUd-bul^EG+@oO4G1=a&8pooDBt(ZB1suIaq3-}S%x z?V*3pJ@G%%`P&ovmvj2(+!OyJohRp?^gm_&zW;km|A$Nert{?dG5S7O`hULkZ#qxT zKcj!wab45-r22e*xKHZhr0ua{gIh-37&Od|Blk?B;b-u>q?S4`Hk96LiANBqo*E~Gx z|H7Z?Jo)?{eXkzobN(59o6eK-Px|JZGx|SIr2j(a+4(2)IOl|%dotg2o}GWvKj)vp z&qev?{4?l0Isc6QU)6Zk=iHO}Bb~SBN4)^co{NK&z{4@H0W|+tM zXY}tpIsc5l@6dSqe?_E!(|K}!#5~SFgI5gm`S(BLb#R`Xe@5S|Q(lJ~MEsl1+x6SM ze>wk*{(0Zfzv;X^KkEE({z-k#J*hv^d2)WlJkB|z|M_7)=b!u@=h^uueRIDb{qw$| z|3c?tz5jL3pYzY~|JX2}^Uv__yxsr0=g;|PJdfXr^ldtC*Kb#!^Uru5pAU68|D^ty zC+BD3{YH()Kl?8JP3P_TW8XjPl-GghP5-9z3G0{h&*-1`4Sk!=+xp$}=lnDL<4yCq z?+!Yjuzzy?8U6FVp?}kPyMDX+oPS3Dyl?2=bUtDIa{d|q-yQ06{u!@>^GUCtYDWL; zzw}?o`DgszN$Xd0qJQ2u^k2yNXLxP*zwY^SpTaoqTbOS;Kj!^QIX|R7?o)zSi>k@_ zXV7_j|I&PZ+5CdW@6~w7dig^|=gIl!4E2ZSU-i%VC%=dLFZv$o{I+KQ==$gUlm0pP zr2mo5lk?B0>pIJ;-}k?(^nY>b-*n!dKlc4^Ed8_J(ZA_DIsc6QUB`7z=WYG2f6hPo zJ)C>uf28w|bN`%khX2*2|3c^4`DfI1o#oZ<`)9wT|5r=@rt`-p^#6;Yf6hJeKhk+} z{uy;$$8}BTZT-Ig%S!*Zm;O!XmrdyZg3|vzrGL|Ta{d|pyN>Ic&fEH3|7(tx{`Zvr z3!RJg^}k#HYyMXHKdba#=v=Jl5B2@|N3XlnyK+-~XMZ|Hn)Jrt>=|^nXj~|CgnI(|L0K8U4GC>zdBn z`hEXrl>RR-{hQ9un9%=1>Hpf&zv(wgGKh&?*zw2=R$@({)FR9=6|J2Yw=bp?T>HMjte&7Einy3Cxd{5N+ zAL%?f|HMD%pTXtT@B6>1%)d*df7AI@6Z*eI^XUKQBK@1rlk?B$+jU&mbl%qQ`(IP~ z-&guKov+FJ=bSV8KezN>=sY|BjQ(B6bxr4O{jUGjZx8)*?uq}A&flKUzt#Z#bMA@% zk$tAzd{TWrKgeHvZje7S zK0n|!`TNhPzhCp^alG$-SdV!fOMcAr&vO61VNT<&T(Kf}r+Bs=o6g(M?}Pucf34TO z1Lv2)Lz;iF9-GdS^UIj`K$-t;nQuBz&M)bk^UI)KFZ$>FGUz-xzoh=!^N0GJThjkX z=k57V^Z7r#JwDW5t=Ay@na-2X-_iH#VLs=V(YNV5IlrWT&MD)0oTvHpU+6qLzYPEH z4f8p-WWLGyW%+r1{py}S=a)PW&MoPGr1RwbGWvgYsKdD>^+!5y&wsl5tF_kSbvQEA z=ln8W2j}hQ_ijGtm(l+-!#vI}<9Rqw&M%|?J4*krXdeBW&Xe;W=5u}-ykeNo`DMHg z&Xe=Y=v(VFc!P+4(|NmoyZ0~Wm+?G!-_XD5ygmQv{BeFseaYww=p!4MXE4<%0)aTqX{F~0(^TWP>t<&hA=S}~n^9k#h^ULV} z8O^7E(|KFJd;XkXhJUr|=Y2!}g`8i8*LMHwo-EBl&Xe;?{BWNWTweX*`B(jO ze#w09pXh(2^V{~y-*sHqbl%qQ`se(T-@~~j{f~71aqgdU%IJS}>A%oAbDq^}pt5>3>h@ztFi@U;n%HzvgeH|FcT}h0eu#{!qVs{-J-@;ruez zZ(hIe{|(LK_k1$UAL;y!rhec5OPZ(shx;AY&q(LV`DN5~o#oZ<`@ggF|9I)&bbjZA z{%5*3;%BA*m8Jhe=VHBnyY&ECp|Chwnf%IN>x(tn}z?EEtNcOBO?owxP7{#U;} z^v}5^{zp20dqV%O4gGU&iT{z#lk-dZpR#`6|GlOE!=-=Id2)V;cmDhJ;Pa(_(|K}! z8U4GC>zd9d)z{|->c{5>`7`wM&-~F&2^E#G%$@%4tD^5J+gcarf zef=l;`_2ET&oAQI|6|39-A8_)bFtpPE{^#=ztpuqKIe$^z5Dk+(D|g#KWqQf(ErbN z41Jr<#kzjCf35w0G*AA1_FstdXF3<_`NR6D_Fva=UDNrJ`orh{GJnrY!{5I`{{D5Z z?%7QK{m6zgy;; z&XewJyJ+x?>YAL+b3f9w4{u6g*=eiQyo=gIj;^u2nR z&-romZ8}fRkLjCp;^_Z8k^T#vXXnSvz+U7$MHOVC(^g+yj{Otea?^LdGNkb|C}EOohRpy;r&L9$3Oe7>W_5Z zp5ONUYfkjf^QM2(`Gob$`Em5m`-c8a=WYG&`E!08{_&>yd~OLkpRj*&ejNSFLG*7r zZ`W^EpY!ABpZ5*@o6aY!U(S!i|GPtd&X41Da6akvWBu|zVE@H`A?L^Odnc`5_Bq}M zyl?2gkn`j4+U|ed^XEQ^aoj&K-*mp@{;63%d+yV|d!_C(;GN>r6`i;5pQiqv+co|| z&4XIM+^>vup4>mgya&pBd5`&~^W^@4zPW!09u(C-_YXnm$^8TM`QM*|_lxSE`-h*1o6eK_2m0ndA^Ja0r2j(a+5H3axKDuGH!$CH zp4~stKlcy8&qY0d?jM5AllzD0|5c6WdHhXO{gKYw{kQk8_euCaGSuZhB3=jQ?fa*j z&;3L6uYE82Hk~K;57D>Y^TAg{`Zt{?`!Dmje+XVN%sk~->g$!hZ{uvo6g(y z+r59ee~A7M4)wWzi09$F-G4iO+&@sC`v&Tdbe`G`kx=>bN|5aah}~j&^Px9 z(Le8-m-PG#ooDwC;hlX>zlZw<=8tsV?tk6$=l&s{hpv0kx9PlHzny>XAL4oNzEOSd zAA-)4>rZ&UQRDH?{)>Opd3*it`)8f4&+Gcl`OhA$k*Fiaeapi?(D{=3&H6p{zf=8xUa=zhzl;B)9-Gepx%vDs z%rECJr~aeH|C8oHowuC&KUZ}APtE*h{md}`$JW28K0iD4zfr&cUVZ;B75^_iCO7~6 z@%!g>AD_RUFXv9=X7crelI&c(WZv;Nkft2(+)1n(5D(__y+2w1`+?J^LG7q@4xu_ zP5kq|p?`Cq9+S8CADw^hpQ+D%GxbM0PwqdM$9;12KR?Xp{+Zw7JiC9UKkk#G&oe~& zFLa*WKZkerIsG2)o0&h-dAt90&!79}cpkd%i@r_g?fUKfbN?LAgZGW+(@w+2AW8{hQ8{{g-*%KLoY!g@4m|a{mzhvrc&( zwC_d#rt^0FcJE*AAEJNWH}r2hZ};EMKlcyR=e~jZBb_JvFY~xhi2mn?`P@J7dz@$Y z5A@A_LiEr3hW-nkXZH``oqdki;jv-W6YE5Pk6skK7{`4B^G)YV?jM@- zx4E-)exY+V$obp)M}MI6?C-DUF4MkEeKGD^?*4(!m(*|8@4Ek5^>xk`)VbTb|6Y$x z=l^_+`=4_Dw(cJ^UgtJJox`mAH+pP3PtK2Km_PJCd;RA8ZQXyRes%t~?%!6_xm)CB za{k8aK0bdxU(Tb*&E)xeKI?|x1LJkmd~?b9SF`@Yx8`x*%KV`Hn@N4{Z^wCMK6T4| zZ*WQd?(gq@c60grJH20a|5ks0XF9*RSwG$UwI7!GmzMd3&c*uu*R0@295k zzghn?)NlOlX8)0=p#1H=N{>zFiND=@G+v&9^0!-iKmLNw6MwrGHC~>A^0)gYJvN;m zIKICb`fvQrP`~lF>wWbrPeFOx^%p%hohSZw{YvBIDJXBdj_9%JJn^^dO^uhQpuFw+ zPLECJ2afM=hW;CWGt_VW-Ku`^1o8GzMdz8n>op!v5N}UZbe{RUR^#ym@%B_j=LZsh z)A!%{o4$VQZ>9Rh6U5)%ip~>%JHOI+c?#lhzaE>;6MsAZs`2s^#NRo3Y&t)X_?y1} z#@`I}8-F{0sea`tD1STO)??Fo=I?Qh#}kydoxiE*JoBgfz3>O+ZRZCS@i+XuzWxo@ zpK|?}q5sz3^z~bR=c`{lLAo@)uKT^N)6qL6`_J7lP;&1VNjhCk&-d5?c={)hb_@2hgQxJb^^w@NM;P~&~ z8TxPh%}~Gf$9)%`Al}&jP3M_E_HR5vd0W(H?~%?ke>ZD9o}j!fa{p;MKalvFzW>(W z^z~bRC#zpPLA$mo@)u{-A#4DTp`r zf75y5Z-MKNJO%MLr^lxA#NWb)8ZS>l{B6`@)A@np`x zI?w#Ef8z6^~=LZsh)A!%{o4$VIZ`&8@SDu1+WB)guC;ql^{gJ02{ucDube{Oz z_Ir(&ry%}z>9Ohj!14Xf(0}7^hWf3)ht)5hpuBBk|2Lgy{@B0q1m$hp8x@^r{_fLw zJVANe_Etsb2NHkN_uu-PzJBZPboGlTh&T3s(|P8P{TojZf7euWp84CX@pyvxyRM@1 z1Bt)s`)~bCU%&CU^&RyqPeFOx%KmRUPyB7=`Xf(4`P=%X9-Gb+e_LPGczFuS-`2nB zvFZH4@%_!vf8%e4`mMhk)i0hP-q`<5=b1nDZ#+S~JyOwm=I=_4#}mZcV-=krNc>IT zf9r4h`i;N&Z`H3n1@XrIZ#qx>&2#;cry%~$&|}ki;&1-X8ZS>l{GF-Crt<^G_cufT zjlUV{xBi|~zj%W3#`k}Zbe{QR|Hc!PxA}J~I?wz)sPTA$@;3kLip~!t{-*E0^*4R} z*5BFc7f%p>?Ej|o%pdzVo*@2is^~oPw@2gg1o3xEMdt?+f7AEh`kTIf<8RAv)vr7S zjw}tDEJO$-%%XfNgI#2v<`IW}YQ&9f49Mxmf`GMp6o1y>4-wgFzf48e& zJVCs%|C`P;f9&6Qf_QtXqVvq(^%{>Sh_|OJIzN#3o4)_n-}Locf2-9mo*>@X|4rwK zzs+2KFYQCHhrRgn*tCn#^5Ua08&K;m!u{#$?3*Khr;SHF0Icw_%JooD{ozwrd|cTq*>nZK19k0*$~ zODZ})kocRv|JL91^&5X1Usk{J6qL7(?Ej|o#NS4)Kk^imzm1>jvFSYVxAB)6FHb@F z+xVFto6Zj$-`@=VH~wa*-}<{;{o)DYjs4$rp7~?{#uLQby%n8j{?6BUJVCtOU(xx2 z#NYJ&xBjND-}u|`NA)XDLA-O>fAe~5IzMoH ze>3#o_?w}A`}fNim;Ryp-u+lb`X7E?|NT>2fBN~&-_LKkR`vAX0Bm`t;{T+_nvGLPI$=5Kkk%v)7a^CCBs`P+E^>iKWq zTT$~OHlSKRV3Y{BcF*k(=54eP!O=6`4nFCi6GFSLV%C)V#>e zZ2rx|yiG4vWFEPh%-{HZnRi)5&5PX3<{uvBZT!3<^T^F?{<&q|p^D5SHeZ2r|{ z-qRJCM{XwbcYaakomWxwA~&=74-fNp{;neP$jxm2>1E!X6`4nFCi55HDf9T;r`LZc z)V#>eWd4Q^hj|+pDr#QjW-@=rx5K=}ODbw!W!`*6&5PX3=HEWdTX?M^^T^F?{^~OCs*21bHpB?6H|4T*9i`>lSUs&cn zRFQe)W-{ORKl7`G`9aNF?)}er{d#7YANNt3zufCr+~;WBclS^0hyKgY>-)cB-hXx1 z-+Rh@m^}X3`Pw50v>!??1`){Np|{dH&_+{r&55=PwTRyZcvi>JL9Z?)oi1Uoq?a@&0wm z{qJ(`Uw`cT|Hsz%=ck$9zn={Lw=dcMroR84asP_@Z0%p&{rjWC>tB9;+}Hm{&)+vZ z|L*>uoPBus`SI)j$ob>_|J|hzsJhF(|9`KVCy$$_oquzgzx4A5IeiR2KkoA{KVPwV z#`)vtk0qa9mi_tT`=S4(pMRD;pU)}sw&}8pdfvU;g~H^z+-YKYzVG^gZ+ZtB3jB=Rb124)HlI>;Fg2A3y&s`TV%-&wpQ({%4*4 zaGAgK^C!8Ue|(Nio`3oIie0nLKYgg*eSRgU{_ykTuHW+W6|>GCKfm5t`hcpt+|RE+ z_Wk!`>;KsO#f9(DdpR=`pbf4d!9A1a=^W(n$KYISz!|UFC{wLQuh|lrK`Y%6U zG3)&C^Z%0bgJpmI|841i*7>)W`Ag3q$o2f=93grB<>xDQ%sPMdP`^9BAgBKD^W(n$ z<>xDAo$vFDg{w**P<5Ame(`KIPwO~-&ouKd9OifDC*=H|;pfMF{^R-mjGrIM?_V)R z{pR1_;eYSq-@V%X;Sc2d`^ZiGyzamG_Y-#Oa|_?|2V?v@KhXJ-@BeH5_qW~p+|Bn4 zLcVt}{{5pu=h^oU&QQPk-|u!F)$6qMfA{-8b=@L2|LrlJfBE;bcK&Mc#&|r!pZ%|* zax?R{Q}6$u{X30^%=@yU^MBXWZ~X1VxBmCq;QuCmr^lxAf78rwUjG^DH~tpS8vOBm z@fei1$j!vx4xKyVjqxVyh}_Kl?a=dOok7MgF8)C0+4|cd->fsp`di%h1D$8u&+yT4zD6yM^oY z*mRz(zZvQ`{^GwIlQ*6({(|xrxtaLmzn8)r<4x8PxtaOnzjtDt!5Dwv4|JZbzisl& zI)kjgZ4drH=h^z3p?>2p{(A{|i~nxSl()#u#NYfqgEz+G53=sa&CDPF-303_$UJ?H zjd{>{vi|1rt#uaEx|@GZk4@*v`kSGC<8SjHhjqvEW&H)^EpjvQxB0oj8{_c@Sx4k% z=5Mo}FY64(_>X>|^KAWXmS@%(Wc_Xa!w+F=u54oB7+sO0PItyyvCjIYF%nLeC*55{aYn=tP?l#TovFSWne>2o?{KelV$s5lX ze?fVR+)VtfFZV5s#~)-Jk({NDO`H}`#~oxF7X@OvUx{qpnw z-{#|oKI3_sJn#1T9Jl_Doj>}-KYq*W5V>BD^7G@?|FQE~m()Gw-HOdRi2S(qXP7^{ z@5{eicgn+Bue#?5>Kb^;OL}ZNzph#L&H6dz=Nhkjj-al=r@W!Zrt>SB`OW8sQ|{CF z%QO$_-szOLDmuUH81rZE-|xGB!TT=WpZM2$`yTIlzm0T$QB!}3KkaYNXr6li**oG( z6`eoR%wOV9G7`Aht1{9~G@*X(B>if>hP{@5|*kNz~?eJ-#6 zCH^#@_pR3P&v@Tz9glSWP*cD6cY)^N??w@Srt=G$`MtmWnuovJMf{o0_c!xjg%HK%mA2;(m ze`|lEdH7o`;;+!TSnofbzqP;CJp8Q{@mJ_v?B`ehrtH7-xAtw-#ov07^;hUztn2sw z?$$i~Jt^YPbbfa;zxQ{W=E>jMXGQrN>HM~4e(&!V&6B^i&x`Um()lgNm|y#IpYGdq z-uB=7yFqp3Z|%#X{Ec*eLsP%^H>Y{{J6pt`>3pu4-}_sodHB0f#GmPWRWrZy_tT@A zhdf&!v#9yIvv990yJEVCJ>-$Qc73FWF^Fz)2 z-XHt4{H5zyzcp`)@;B0X zd;RPEEodJ8E)?-+I$vn|@BPhb9{w&D@n<@3_wU}{Nt%bhD@FX7&QEIU_x{|c`!=1o z{rCP>sV@Gm74c^}Z?AuyzZ3PG@ps}UqWq0?{zlV(=kG+#!5`n#gTIl^+v`u~@5C20 zPySB)vnYQfoxjl3@BB^Kf9LN+u5Ab!E_5NO0ND-=c`WLg!+=e|G*>eW`i)+b80$ z(79O8@BFR$i{|0)ED?W&&c%Lyb^UOk?%Q;}r2o#}s?Svyf9Hz$D|9Z_^?QF$X`cM8 zdQ+6Ykr1OWG`rZ0ldN1$4@LPK>Ab!E_5RM$Jp8fmAdZ~_qU+B_`5^IpXt24{&oIN_(1dI?}WdK@;B1?2TlK-zY|mweD&o&{ zez2L}`(vNR-(eAdrt^0H?)}}MdGdF{FGcwq>HLPKe(%qHx^L5Y+kfxx8r9YMJK=dz z{zf`)uYbM2HJXRNeIou$=WCk&JAW&`(>(m0E8?%vxmdq`oxhbwG!K90i})*aF81@Q z>&FT1(|w!H+x|O$E4lvR?_v>uh0evge&=uHbDHdN2B-;44$(s_IR>-}A%dHB0o z#GmQ>qNe}e-#MCxzdJtE+@#iyDle=EKh-}^hLdGfb{{a5}*I&b&y z-rsGSCx0tm6yenk9{A1 zrt^(W|GmF8nuouOMf{o0+x@%uw@UNycd3X!)A_2Ve(%qHx^L5Y+y4@OM~@!;PId8j zrHH?v^I)?6^z&CVPk%>r^g~g9KQz+$D^34P{Av7iny0@bI{JH2e?K(Rd3*g?;!oqB z(LDYA(9u7L`um}g&Yx-OFY%}G?sIwl_x_$zUH$#g(Lam&`=OD}+w0$w^{4SyXdeFV z5bWc?L77wh?*zrTO1dHCBVvi=I4 zi~aoZ`f>EA`*h!?^CkUv{{GJO4}W_^{1rME>-xRFUud5E{r!1S{zf|gMKizmcdzEj z-{0APb1Lvw`|Om+3Lj>$0Z* z)}QJQe>YzJ{qaRZALHMXf6~nF`)B-Js{0A^Ox2A%c-;MGZole3vtmW?9r0>CHl4TE z@23B`y&C_7=E2{JH&%51MALus`p@ms_{TI4%HQ106`enJjQM5%o}vH7-`u?FJ*2u& z{^oA4==`Cke)Im>dr0HuDJXAypVed2dE#&H-5M`XLHXPJvL2hx6MuW})OdLc%HQ5s z_1JWt_?w~s#^2uCR8O9Q^0)U*JvNooD{0@4xl8O7-vr@pf%R=ZU{lwcp||D1WDZqQ|E5#NVmf@9`Iuzf=FH$ENed z->ENXygUWv@6HAqW7B!&?;4HA6U5s+6`g1PF4K5C zLA*Us(Rt?Y5{<_b#M^@vooD{0@4xkTf$HH2;_cCj&J%xozSMYm3gU0Q9-Gb+e|tXH zczFuqZ&8m;=ZU{PpJ}{21@X5>k4@)^zZv>({O$Qz_2emtzkPaaI?wz)qVafw^0tTl z-*le&JEZY=g7UV9{nvD!`MY1^@dV{<&#x*v&-_i_f9sFyAD*DR?Rl@F^UU8F8jmN4 zH}-$idFF3Hnl3X{7v6~>yPUmo*@2iuIN1RxBFd#NW;jG+v&9^0t%x-*le%+sXAuo`UkWll|9pp7`7Ow#Lg-5PvK6*mR!w zo1y>4-%hT7@)X41T0J(MXZ{XqJf0xl*#AxEnZKJf9#0T&?7yb-%-;uJjw}b1CJO%N_{%bl< z{O$OS#>-O>e<$m)={)f_L;sDx9bEt9DTu$#dTct+{N1bZc!GFi|2Lgy{@B0q1m$f9 z`>*Ld^LLxZ;|a>!ju$IB&-_i_f9vli)x#5%w;iumbe{R!sPTA$cw_%JooD{mXgr=E z-q?Rl=b67%8jmN4ze_7R&-_i_f8%d~>z_OY@pq*jo6Zw|3$JLrJO$-#f&Jffp7>kf z`Xf(4d0SxrHJvB^7M{^~c?!zk!XNb5be{N|q5sw&*F8Kzd0Y5%Mdz8nD>NQY5O3`N zrt{3-MH-JMh&T3M(|P9a0*%KL#M{p+I?wz~-+$|m>mHsU{vNF8Jn^^vPZ}>zLA&Z+os2+^Tgi_{Wt!$bN!R2ApZ8~vFSYX_X~~3 z6O^~@?Ej|o%pdzVo}j#KXa6;wXa4TicsxOQ+x~h*=b69h`)~bm-NO@wz2=3&J%yzUeb7Z3d-NMFZ9@Sp7@)g|Hj`ou7C0r zl)r6X>9OfN^LL%b;|b!8{oiz+`D6da6T}<)ujxGVcbUfH3F7VHiq12C)A!%{yGZr$ z1o8HGMdyjXt$)*ac?#l<{oiz+_}ls?jhCk&-q?Rl=ZU|qpKH841@U*f9-Gb+e>3#o z_}j|$Po9GKJ4=sE=b699G#*b--nO#;o6a+T?B95T^0t-z*L0rwJEZY=g7UWYor=yg zf7AEh`s2EXCn#@Q->>LA^LM7k;|b!8{oiz+`P-%Oc!GFi|23Uw{uVSIPY{1MR&<{E zo4)_nAJ;uRLHylX(Rt!;{?{5WPeFN`Xa6^yC;sNS{>W2M-sahVP3MWf`8PCPo`Ui> z|E(UI&J%w#^xycK=lUm4LHw=MW7B!&?-q^66T}<)zv(>l$Nr5ch&T3M(|P9a8jZ&j z#M_eHN!P~NuuwxaXQ-}L>r{ixr(`{!Y?(JVCs%|C`Pe zf18eKygUW*#{O$MPyB8APUGb%h`$T<*mR!xo4)_X-zKhq@)X41rFv{SPyB6qLF45q zC~uqC|4rwaKlX1tL3!K6{%bnV{5_@dc!Kh_>641i6Mr-G-}>XahbJg+oBmMIdFJmD zjmHzj8~eZMJo9&+#^VX%js4ejp7}dR-!?rq zooD{;*LXZZdE3bTZ#vKXv47(U%G*ZvU(yPUmo}j#K ze7&Oc%-_7m;|b!8{oiz+`8!GD@dWY4{%bnV{H@V=JVE?jUeS5xZ~Fcle;bafo;(Hd zceNgy&J%wdUekDa3d-9C_J7lP;%@`jA9)JO+XnVu(|O`=!*d!hPeJ+H@JBs1ohSZg z=)d*Hbq`Na-Zp$u(Rt?YDviez#2fp+={)nt{*5PyH}+rCdFJmTjmHzj+XEGyXa1(| zzxBs;4^I$(4_9=a_*?%MjhCk&-q`<5=ZU}dpJ}{21@XrIYdTN-t^ZWxz_OY@prl&o6a+T4{1D}puDYT|2Lgy{@B0q1m$f#`>*Ld^LMYt;|a>! z`Zp^&&-_i_f9sFy9-g4Qt$(MY^UU8~jmHzj8~eZMJo7iN@pyuGWB)asXZ|*7Jf0x_ zuC3@i^EZ9}tv{}Nc!K!5v7+&TwvPSZbe{NI$Mr{^g7UVG{nvD!_*?gi z#>-Ps{?`3fk4@)^zZv>({H^2qCr?57TlcLVo6a+TH)uSbAl}&jP3M_E_HR5vys`h9 z&NF{kXgr=E-X5*!Jo7hw|E)i+dw7C)d$OYQ#NXTzjhCk&-q`<5=ZU|$zi7NX1@XrI zYdTN-&HYK^!hd>IYSS$@d-(d0W5jpX&~NLd{?L?+=uJ-=VJG{QC{3X}$CPd%^p}%kwOZ``{uN3^w@Ns zynjy9zZJ#z?*;Y#IZdw_|NctQdGh{=zTM~Y`d{Kt^|b!@9!mcG6~4c6r1N(D_Wmx= zJpA1#;?H#6{`+4`)}O}j*E~GlF5=I0zQ1|>maIRGKU4GYc!!8T)A^alm|y<=mFU}j zx^L5Y+kfwGuj=CO9ua@0^Sw>|&L7`jM<0Ce9{xr;Z~y(T&L7{i7yed@_$zdteg7Wb z_@2G+w^qboq4Vtf_o8q2xxD^6e|*ng_**aHuh4n+{d-aWZq38rlOq01=XW>$dw;iS zp4Q*mXGQrN>HM~4ez*SC-lBPUd|s5lk9#{6pit#zO7+jQRc-}}2kb+!KZ-aY({ zbbdoqzh8fInuou$Mf{o0=bHJwzg3!tzY9hDna)==^E-ch&tCYuSj1nU^X&WgqHp)< zzD?(C|D8X+XD|F+F5<7ydG`H#)aU!_g1;5zkMG|LI&c5|ug)LezlT4*cMpFfowwJY z-rv)jr}fA8?%{8w^QVvDzgmA&_TT$^LUpzN_})GIjdb2#|GM?}Q#lKNw~P2QowxT7 zy}t`I4}bTF_%ofi`*-i}Jk7)3eIou$=jToE=RV!H>AdZ~_qShl@%Mm;Kht@8{pe}&Go@86?u_vyY(=S%wU z{P8_|;crpIU!ij`xqnvuLz+h)&x-Ol()poge(&#Y&C~i@^Rg&^Bb~SVceno5+^KnZ zd{xx?8|nPcrv5O$djC$@fA8-$)z$jrd-w1+(s_IR>(}3c=HZWhAAhFvg{J@B-<;;* z?{X1;rt^0H?){yldHB0h#GmQ>q^5rF&waXY(|Ox}?~m&o{;n1AXF6}Mf1SS*-_Shy zJMj}y{zf`~qv^l%$M^5ykMG^X-$>`}^{4a4_wV74@7=@SNars!^*eu4_TTyA`}gq2 z_wM0ur1SRr*Zb3R4uAKE_%oef)AZl_)12_fzKcK8dAoo2{w~ox{5>e*&vbrCQ@{7; zKHazJyzRgDcY*5S?@cSuUKK=@wFZuqu&L7{i7ycGS{1rME>;1R$ z$M@`ozda)U3Y}-)zenHh(|w!Hm-OHH)A#EQ{`QIZD|9Z_{rCPJ(LDNiS(Lw#&L3&! z_x=uPp5DK!-xTF-aY({bbfzRzgvH+-RJW9@BQ7ax+kmdd!qb} zblzV7dVgnV9{$+(@n=X>Ac;)dw=tqhrjDZ{F%<@oBF*!_vyY( z=WYMJKdy85yII7a>Ab!Eb^iGNI{fjyd-xma{N1Mi&L7{uhd;h|4}T+_x7VM}AK$-+ zKfZSleHGBtfBQuI6*?E|{kQYS_w0qgvqbzAI?uj;kG|cf`!<~~>A&-*@7Ejr zoh#z6(79Om-}`$?^XTJEQT|3cf2x_^`(yvs`*+oQqWq0?-d=xte-CM%*59i4Mfn@) z{Gq0PxBmG4y(#+d{TS#w~F{Po$qbx_x{|c`!=1o{rCR3&f)J45r3xh_WIZPJK+P()A~Ds{a^k@ zI{%>Qzw>tj*BSZad-w1+(s_IR>HP6Md*N@Th`&PT+4t{7-|lmH{dfNOp1tt5R>WVS z^X&WgqW(e6!{4JK{!HfwC-_s%@ON0mpXt2azk7c-Xr9&|-@Avuku>UZn!1o!E_ zP3LX@y+8GgKfZSle-wF)mCp_J`QAPJjdcE8Gr#xu zl;&;IJoaDt8|l2g{`CHy&^-C$d-w1+()klj{cinD*?;fv5!KcD<9qk;H_~}~{pA&}Pj^^R-4iSH*^LGF4{q5I0{M{wu&vd@Oso(o^pYGdq-uB=7 zJ41Excb|AuMd$7Huk*+E*Wr)v-NWBV=btwHcmDMKdV@dqUHla~7wh%k`Qv-`!k?Z) z_$zdteg9tc?LL>+f9H?y*$aPq4Z~ld^X&WgqW-;_hrh!j{!HihHqXEJ$3Cs~x8iwG z{zf`)_wU}{ZJMW^SG*`{{f%^fTT{PVe=FRl`!=1o{rCQ~=J2=TRZ;){NayYKuU~%~ zH4lI1iuf~~Z*2PS{jJeF{9P>K&vf2ie|mqbG!K85iuf~~uWIV|{@kbgHl4TqFY$LY zzJD+LU8(x`3px+h@1G_9^z&CVPk%?m_wMocLnEEP()7Q?pT={Y(ccmAy?gxq&`9U) z^=FAcjekb-^!G!2?;d|YG}8GqP5mYQG~RtKum9fPQ>v@KBjS7a`1_%e&fDu>@9zrD z!`~eu{!HgrH2wGfF48>w-6!JDbl&dYy}t`I4}U)w@n<@}psC;cbD!?pbl&#g`#VQ< z@%Ny3Q$^?P^{?~C_tb?y_I>;nI$!erb)7%HXD|HeJsAE9os0GQ@BHySd*M%eK=>tR5N5o&DbFuEf_xB6UqmSoB`5Wo{7tQ?M-@Tfr^~d+_ z;cuk#cK`1E-K}|Ae|+yA{zf{#yQ$x;KfZr&ivD|l2Q^>*_})GIjdb2#|9XGBN`3Zy z{F%;oHU0PgHfkRJt`zZSI&b&y-rt<&;qPh@f2Q-frhf0weY$VcdE0;QkLw)%t{3rV zI&ZIkoj<<6j@OUx-NWBV=WjLrcmBR-|CT?#cMpFfowwJY&L7{uhrjQ?5an;A^Ou_X zoxdsj@BH!od-&sf_wYB;`Go7=@b|O&yEm?1*O~e~m+3Lj>$0Z*)}QL~cf(x&Pr8Wu zrt@IEfAsw`PxHsW`{eiWJR%R)^PAUyZolfO=iq&!*6vBB^Xrb^|J+`Uze4k%t{-zZ zR&?H8f11~SZkNW(Q}AK&W<55YxBi;fe}?`We{=JyCr`o0#oP7RblzUS8-IHbX}mlI zGkCygUWv@6=E9*mR!wJM|@vm#3ioo%%;THk~K_PJKb+-O>f9v(wbe{Oz^SQ>$QxJcPdTcsR z*597bG+v&9_}in$rt`$#4E;C$_I#{*@)X41K0P*_XZ{}1csxOQ+r$2EI?wza(s(>U zdE4`5Mdz8n`!yar{D z3F43a*L0rwo7Z?eLHu1`(Rt=?`u={)hb`(2Hfr=a}p{-Yk7&J%yT z-_Uq@3d-B=zv{8+Jn^^tHI0|2p#1IDJvbhN&J%w#^xyc~{gUd*Q&8S^f3L@;^UU8( z8jmN4H}-$idFGG(8&42#?7yb-%->ZSk0*#X^*+*h=5PA`TYst%{vh5CSH$1&^ZNSN z+&}O7PUGb%h&T3s(|O`=*OwYEPeHux(__~2oJ)-e=g7UWOy^78=e-CLqo}j$#dcUIc%-{6= zxBd>P9-g4Q?fS5y^UU8l8jmN4KlXpqdFJm7jmHzjAN#NAJoC3#>k$J$VY^Z>=7i&NF`pH6Bk8Z|wi3^UU8(8jmN4x5E{kXZ~)`csxOQ z+xg3i&NF}0_uu;Cx`!tyZ#$o_=sfecM&t1W@wTs`^TglccN#BGLHx1*n$8n{i$^qG zo`U#0Uyn`anZN1#Z~QHC{gbC4{w~&I(|O`=@i~o`r=a{TzNg2g^UU8<8jmL^Z;KyR zbe{QpLgVoS%GxXp3dqnl{1m$h<_Z6LI{xl~1LA;Ao@$wYJ-^qGxI#2w~(0}7^2iHG&3gU0G9-GcHfA?xU zo*>>1S9G5FJE-w^g7UWG`HIdnf46Boo}j$#c(J1M%-{6=xBhNYJv>2q+wp2e=b68a z8jmN4KlXpqdFF48#^VX%kNwwlp7~p)@pyvxyR@S7%-{6=H~tp5{>f7ie^=_U={)hb z@QTLEQ&8R(KGb8=dE#$@>yJDIoxuWyTpPpm*gLq^AH}N<8{J7VT1=R?D5O1105`V+b>-o+3^TGuhk0*$?pI3CA z`J2A~)*shBJVE^FIgE6k_}l&`jhCk&-qz}|={#9~+qwSeIRx>?{%bl<*5CGzHC~>A z_}iw(rt`$#4E;C$wsZZHry&0J=&|WM^Y;sl#}kyd?axHBZ}9aKF$L3!K$tBTGuf4ejuPY{3X|EBZI-$sqc6T~0;ujxGV zH>dGN~)~FtyApWke=sfYa?JbR$r=YxTWB)guC;ql^{gJ1jylwll z9-Gb+f7@QtczFuS-?lIG*mR!wo1y>4-!`s)@)VT6ZC~lJ={)l%N8u0RP5(C%f5Xq~ z{lEGAu}zM`AH&G@Z3V#r9`oEF*8-Cu;FaP~T>2K(BdHuKk zyy^c&;&1qQUB5Yh-ugFHBZ}aoxic#NVwIohSb0f35NI6qL95KkKpSJn=Wr^+%q9@;A@^YdTN- z&A*}X@)VT6`ET{ube{N|q5sC;Jl8*Y3gU029-GcHf468no*>@z+($ak{Ao=1gLqTz zk@y>aUhlun^<(}TjmHzj+mjWYXa1(|zxAgc!yi=d^S`W!zv1U~|IPJd%TbNja}45- z{oiz+_}lU~jaQ8z{@8y_=gIop@}#^xP@i#;NjlV5_QayPJ;_rMtHk~Ky zZ_Cpfk0&T^TiE|i=b1nDZ#+SH+wy)z=b67pG#*b--nRUN~xbEQz%G;KY zDmu^nou~15f_S^WqVvq(nHrBLh`(DaI?w!_q49Wv_`AKL^UUA${kQ&hsUDsn{_d*i zJn^^rcN#BGLHXOv{%<-@{B8cV#>-O>f9$`e^TglgcQsy~g7{ml$ENed-wgdX{x);{ zlcym5PS#`7dFJmapoO^EZ9}jlWG?|Kur%zf1Mlbe^ogO)qG?JO$-#)BAdCI?w#Ef8zKAJ;uRL3!Kshl?Ct>`@Scb>-M3F7Upiq12C z=V&~hApY*D=sfc`egCb$GgS{y5Pv_f=sfYa@iUE=ry%~=|4rwKzl~gfl{H@nx(|O`=hW;CW8-J~O@)X41Ha#|-Xa4TjcsxOQ+sOWJI?w#Ef8zHBZ}aoxicl(&tqS9G5Fo7Z?eLA;$`(Rt?YB#p-t z#NVYAooD{mXgr=E{w}ZRJo7hw|Bb&5M^#Urg7~{yk4@)^zYVWxygUWvZv*?k={)hb z;RTJCr=a|8VE;9pC;m1(r}6R>l)nvs)ML|m;%|ojTYp^l@C4;;!xt5uXa26zcsxP8 z-BrIbRM{%<-@{H^~?u-ks8-MG$ z{>f7if2ZrQ={)oIkjCQ)%G>%ED>~2ov47(U%G-MOU(??uIN1Tw^8Hq1o3xmMdz8n>HBZ} zouqnrg7~|!qVvSxy0kG^+%q9^0$ut*L0rvTlb2_%TrMP*8NqF zP3MWf8TxPht$RWB%P@v(|P9a293uP#2fp+={)ntbq7xnZ+h+{ooD_uCj3FX zJz5ce!_SX<{fNHZr~5XYxBa*NxbEQz;_bJk_g4Ern$ENePe)GTo&izH> z^&ErvJ6(@W=ZU|$KWV%?1@X5}k4@*v`kSHu#^2m$swYoD{GF}Grt{3-6B>^vC~tG@ z|EBZI-$NRYCn#@o?7yb-%-=6G9#2r-=H9F5Jo7hw|E)i+dw7EKHuu|#&Rc)Y|9-Rd z-)~s@?+=up*YBTZ{hjjeP(P^p@$X=ms$YIy&u{ymFa1N!Tl()0lz-o$p8wyjIPsJd zR%}}Fuh*?oJ-yZ^y`(yNtq1Dg+xVLv|K3!7x_+;+fzAu{@0G-Ocn81FjNez+JrH%v zedj6X96kECgBt(KANbw3s;k`8&+GZa|L(MD#lN8M4Hq9h`v3mtf&XcpKKFch^r-1v z?B|#I8~b9ZoS1)S*Mm;v2-!@^syvOg+H819y z&R=TgH~+gEeSdrR(EqpEGwFY%^JD$HMa3U=zrAIs|LyZb{gKXZ$?Jdh)=>Ye-w*Xi zI&c5ooWB44rT?o-|EBZ(P5sXQx4TOJH<$iR=ezRxUwt{u|N87{*UvY9DgB>Z z`Y&`Y*7LjmzxlNEug@I3{@)fl7wh?*zpsuC^}pUT)Hj`r>HKeA80LTT{xE-}^B0== zeg97l{eSbx(Emv1Pv!H!K4+N!^*zJAYRPegD^#{(1k% z|2L-dYnuK$|6gA+)c^X{q5eqcm*n%mVV%ln=-+hSuHUZy5!NaF^ZucK)A@w;`!%nh>VN&kP=BQJ39sJ~)+zn7|I)wdeA4=5 z|D%82H}qflb;-qg{dCX&tN(JC|Ly-h%r~8j{rvj=;rgNfukIiEAL;!1W`1+uxA7z0 zFI=hlQ0ryWTt(+sHuKy5$tAzysh8$|Bd!d-oMnnI=`!_-}irO>HnG1zv=weW`5tl>$tAz zysh8&zpwOvMd{ykzOSj@_rF;BzpnIeI$vz&_x-z$>zdBn`d$A={!sc~Rr)V;K3{rGH&7c>i)g1f7fZ{H}l3`DS_b`~D9P{U6cwI<8-)^TSR3zW+yu{*U~+^ldtS zw3*-c?>eq)I&bUu{a;=Bzq|BrI={N9-}irM>Hkpa-*kRyGr#ZObzIkU-q!E?Ut9V= zv-EE|U)$90`saR&>(`Oo14?M>>DKncw-JvVPzHeWm}WOaG?x`X&hKdE_x-z$>zdBn`hEXr zm;SFQ{hQ9uZtC~_pI-XEsq}9;KfRgX_wPEcYdUZ1cm03$=hFX4rT;?bV!eL5{yDE< z{eL}Q`Y&`Y*7LjmUFYlN)$jX%cIf}BcZdE*I)ApQ-}nFI(EnE-4E>LE{$w-1@85N1 zt9a{4?mhJwNLGy`}N^)B7m=na-2X@6q@E zVg9#Q5A#PlPtHH1?_HY5^SD{0f75w#e#AV^IU(ns%r~89=b!Y?IcGeNlSTX&I?v8O zsmteu=znpj&-o{PI2ZHvdsO4q2j`yDH#z?#&(1%ie_d~a?+^1i|K#^@E?RzG*YDQ< zH&1CC&*Kx3zD?)J`B8X3XPD2qXZSarC+DBhAM2FY;X#qUP3P_U?fbuGsL#1)^lv(E z&yTwG&-o|yIrj|zrt{?dDEeld(*MQ7{E^NltY7Z;!$0pI{F}~`^P}+3KF9ihbC^HU zdAt90&!6*8`sdt}=ReYUyM8T~WH{!QoY`D5Qd>y-X^ z{`7A;pRj&8|D=D;J?Vd>^R|BX{5k&&|M=5+r=;pYzXn9h@iUpV2q#6#wkM^lv(!w0_y=@Xz~){tG$(46n)g zCqL&t1#;iQeAD?c?_bLKA$@cI61-nj|D1mYowxTd&HdZ%Cp7*_jfbq4-&S;3?tO-*n!dKX(2(=M4Y*OaFz=v-8jB-*sHq zbl%qQ`se(S-xK#MT0bM5znT00=H;P(&OPxz(s^?J8FgLfQ_Y`TzwiI9(*F}>zUlm~ z3H{%yd0PM9JR{P-={!0AjQ(B6bxr4O{l5QwrT;5R|EBYO6Z&5){a;u5H=QTvpV7bT zxUT8Et>5*}`D6T^Ri*zz=VE>T*{y%hIm18K3;Y*4&(1%o>pGl&#`?+Y_x&H%Jbn+? zYpuVL&JR!M|544;`r-VO{zp1b&Of8B>nyK+-~ZL6|GP{7rt_;O^nYpT|4`}Qbe^1l zM*ptkx~B8Ce&7Gv(*K#If7AKey#Ki0!vA@t|3c^4`DgU+I<9LvZ|iscfBnwTKj)sT zpOMbrnb801ny3Cb_hkKybe^1l(*Kn8`~L4M{Xbp$H=W-%q5nHd|1XsOP3Ot^XY}tn zu4_7P>-YViUHZSK^lv&pdqV%Gm;P@m{hQ8{^UvttbzIkU-q!E>=ln5#&q<~KLg(4} zC+jB8ZCF3^rT;?b+4(1RU5E3}SigDwzW-;3{yFz#{z&J~=KjBWQuBBoABbB2Bb_Jb zpV7bT%vzt%52_!Z8&uzn&kyutJ;p=H#rpa;e10wS7tb2b zKOyIzJAd^9IsYs_@8_5M|DE`{SM%Uu@ym+N+t2^Q>*w=V)#Ln=x}1A*-a68Ga{d|f zUMlmyDDzF{$@wRJbN(6B>rMZhe+Hc==bzN){4@BxsQx+s3_5SmkDBv?@b;F*HN*yKj)wH&$%c5M>-YWN zRr-IT%r~9iHKG4oHIM$E5$WG_o}7P1|E}Y@rt`Lb-~YbS{}rWw)A_y${V$gOuPgnV z&Xe=c=-+i**L2?2@A~KbF@Ddg(tn|IvA+N9)<5T*;h*aT{tKOF=bzMd9nL>v{p9ug z{ts&&zlZC!*563yhbQ#^sOD+?aPCR}Bb_JbpHbI!mRG;;|LW5J-KBri`PCEpzqIs! zsPu0-PtHH1f7fwc(|KFJ?|*IS|IE_A>3nV8f81~3|Gd(Fq4VtgGx~QO*EOBD^}GJR zerM>Pb5GXKNaycN=>K)iQ~#WMvVKN7PtHH-f6DrO|M!*tpDz8I&hMMh{~e|O7fS!8 z^W^+9`ga}IHJ!Kh`~J@^{a;i1H=Un7q5soM|2LKXP3Ot^XY}tnu4_7P>v#Qg{usaK zq|$$(^X&YSbra_`te^SPf1z`+-hYSsKL67CaUIS-WBum!`~IID`sdt}`6Hb_+tly& zf6hPSd3+#h{d4{qbe^1l;_WNfnYBKjALK7SH>kcDpC9m>oPS3B>os3}jQ8EI=`kKk zo}GU#+%TMfLe4*T{N)F7{#kxrzkbc<-yQh6SM%UuotG|Fbl!gcZ(e`uasC;6aX4?~ z{F8InF;C7vW8O<;{ugDQ={!0Aq;JkYgL=K`pYzY4^W^-K`ka3TpC9UT{z?C1-ku-z z{@xnu^L`0`rt{?Ud-T1(^nZ2f+jO3se@5TCO8+;PzD?)J`BC`)a+uG#C(qmD{ImQ# zT|b<2#`8G2^k3*aJOAYO^LZhjhweASd!chNtt`%mU^&KZ1vn9unq zzh}&o^Uvu2siA+)J?Vd>^W^-9`TY0q!Fz`JoP);e;5<41jJ{dFJdX!U-=_0+{dVu) zZ>}l*^S+^f(|LP-)UAKcKdI08XZSarC+A1eH|v!CFE0I?&L^y2?)T$$;C(~?rt{?d zD7>@J@jARY%pd8z-T%7h&-o|)bMDFWAL+bZzny>1Iir8xH}qfVJUjmk?+*?2IsXj* zrt|jvvG1RCO8-26`Zt|VSihWq(m&^(^gq&hTfck$oPUOY{AoV--9hIQ_D{|~qkrBv z^lv(E*Kb#!^Uvs?_YM7<&L^y2&OhUI_+qHf`DeTi&Xe=c=$mzlfA(McH=R#fzwCeb z=Y2!}g`9te*W~<@pL3rAxo=^<>HL`YFXjA@zPV2c-aquu`6tg~%&%|u@80LbenvWfGxyK=C;fBoiT{z#lk?B0>pIJ;-}ir4 z>Hmq+zv=w03H{$%`hTYMZ#qxTKcj!wab44STfgsrU+Mpf(!c3^--P}bOaIrE{!Qn} z`DgU+I<9LvZ|iscbN(2=XI1IH(79OO|90!2bIw>lx?aTkDRiEle^S?VIRA|Go7eCA zKRoo$xhL~SIzK$2|3`=ZIrpUhk3nV8KlfX#AI?9+f1&g2{4@G@9oIFTxAnXJzkX-v zpL0*v&q(L*Oz8jhp?}Uj>3^j2x)ie_!eU>C(UHygh&H-oIbpQTl(O^lv&( z&Of7n*Ku9bd0W5l|LoHLHKl*k`PmcvpI-XEsq}9;PtHH1f7fwc(|KFJ>!0(-_&q0; z{tKOF=bx;5&TSy)pRs-looDBt)O8)sKV$vo_51#x9s1|olldc^Kb!mK{4<`%2Sfjy zfAT!WJURc2{#|F*`h0$nzxdpsx@LTSz;AN?8TGFpp8t5?{aW!*^6dO`+rz{8C*=Hd zVcQSn{ImSLzJ4~Je;4p{ujawS;uRI0x1axq*RPy^Q;&1b;EUo7dTcsR&Oc+`OJ)8S zWxnY=Isc?@&Od`%2lUVRXV7_a{z-k#IfKuO>Yww^p!4?psQ34l#^X=#qwr@sPd>j# z-}{I8{QYP2Z8}fRKcnwmn#c3FS)_l{d2)WlJkB{G=bp?roo9dlN&lR4#`8E?#DAgl z?EI6ud|rtD7l-=%_wV%KT+G++QH@t0oO@E=|C*sb=bq8O z>AXEZ>efH!pVa64GyI#*lk=nKn{`V67Z3ACI-jt9IsXj*yl?PtI#14z!aw^Q>;KJR z{z&KT{?|Q!&Ohm&b5EZCNayYP?fi4j8U6FVq5neX+4*O9e`u)B`Dgeyoww(YegCXe z`sex6zv+C!`sMtS{yF!g|B=qy`rY&A{4@OHPxHC&4mzK(e{%jA{qw$|f75xpe!Kdd ze@6ejZ|L82K4JZG{u!^s7ejr{KjU?9o}7P1->g&ov;We+>3q`qWuL=8?;rXvF}JURc2x~{Xl`hEYGm;Miy{!QnX zPw4-`(m(qh{hQ8{^UvttbzIkU-q!E?Us?L!TlzPhx95-D`r({2{O>RQ7dp?*Kcj!w zab44STfgg{^G|+H+^=Z;jCB5H?w|8d`sdse|0A6z=bus6bw1Vn$@TmG?<)O2QRbV@ z@0!s6t(r&w&xrJII#13&qkq?NUDJ76zwduv>Hmt-zv+D6g#H&x|JRlNP3Ot^XY}tn zu4_7P>v#Qg{usY!Rq4Obxme$ScI%&W&hXFm0{?~1#d`iw-=E*O?o3y|@Bi@7Kj)sT zzmd)lH}(7eA07Jt|7tt`P(Q0X&&P2b5wZDk6R+3g=4XS5Dfam5X8ks#uTQ@X`*ixnxMl))K_l%YFFk`qZc;5G%dp_US_k7QDzQ_1n&ONDrr1Rwb6K@}ToRy8=*T1jS z|3InVbiQv!{kN3*A1(Ep&Xe=csNdswT+?|weqaA3rT%M5{igFv^7>=HrOz+tpW(mI zd3OF8^?MwTYdUYo@9O{P#85xyp3I+-&QHv!{|)t1{hWJJ|48S_`6u;H9KWysp;G?~ zrGC?Sd;ZwXf6hOn{#Q!MwMjoqsZ}$Km`l=5IcJU;pu; ze$GAVKhpW}+&|}>@jBiWHUByP3_4HFKcjw+Gw=9(e~`cU-k|Z#`2K+3?4i zIPSY&*EJqWo}GU#et$Usgq(ja-TDPN|13YR?|;qr-z9uKsDAL6_)taX?f3uT{VVrR z#^d}m_^SA%u1)93`DgTdt@J-x`kT&^^H1vL{4=QcoBBEb3_4HFKN+9%&*00V>gW73 z=)65Y>ixZ?_V{~W#GmOr`Tibt?;84Z{uyNcIX^S7`6j$wSxKcjBbd3%1;`Q!YP@j3qt|EBZg{3z;Xo>Ko!L;sP^XUt#r z`{AF@4gO8%$@x+EXPsmIzd7_D>AYS4y4TP7C-rmg$?G5Kyq&+Df6h6hem*zUU+6qL z{|xU>4C8bD8U9V@?fGM0Kl7COdHvLHI-fCrIsc@7&ONDrr1N(C?)7v28UFF7{_MMh z&S$KjoPS3Bd~T@Ubl%S2ZhX!^qkcX&)NeYUF@HJ#jQ8Q>Fh1v>@jf_D&Of7W<|+PJ zf2rSeK5PE6&f%ZW5A_#v{uy4|^{;#V>{DpRzJ>m#^Rw<>%K0I6vrh>=EUJFaKZDNq zH|uA!|6gLCbGzC@=F8(1ohRp?bBsT{{;Gb?KlwfEzo>hp^JntPtHH1evjjEP3P_Sef<}d`gfH2P3P_T zV>f>|=M4Y5O8te-v-8iW-{W{((|J37S3l>U{GQmaX#R|J{$}o<^H1vM+!OyJohRp? zF|Nn?x%$r@zpwvDssGv1-*kRtM*a7yAN9W|QorduIsc6MJ&wmUowwun^i0Mv*L2>F-__6gWBi^AOZ|n;#d`nS&4120!$0>6{1-aU z&OaH~+so!*dNnU^KxA1>`slU*9 zcK#XldmN8zI&a7C>i_7(P(SCM%%73YPt2(Q4fRv~oO?2VMmkT_7_xYFRkH_KsGv;qT zeqaCbp?=Oi=|9r>@n-yP{&4;ouj5@&^Plt2p!4MX6K|(H&b;IE{XzcXdxOR|@<)PssV_;?Xb2`Dgig{r)xIe;4ufp!&gM;wu%M zx8MJp_n+}N{|vq=eqYz7^W^+9`n^{ApDg`N=gIjeb#wk1)cZ~SoPP$LC+DAx&-rKY zWl{BW{uy-Mo*(u8-coz~y)WX=be?>FkGgja{W<@Px=rWF`DfIAao4-RGD8|2^vGb3^^6^Y;9x^T+uo<8%HQ{!Qn}`BBu(Jf;4d zhW;a+&zQgL_oIG3H`H%BPtK3RJL??p!<$3@kgRJq{e{l6^Uv`9#4tYRpW)wh-kv}9^)pYYpVv?Qrt=x|m-A2R=iHO}M>=oE?_NLW zpWz>W>d(GA=zPZd$@yp0&*z5vP3P_W?Z)T)GwSDaL;a@n8S|I(&v+kB4&!tF8SjJh zm2_1{7`=(=bz!VUH`h*&pw5A>|5w>IzQ|FrJNs9H~W;} z!=mcv{4?l$f3to!`?p2*Ik&4lWWKy!(Rp(IImh_J>#yqP{FC3q{)@UtI)5gwpYu=Z z=iHO}M>i0Mv*L2>F-`9UZ zseebQ-*n!dKX&tnbI$O;tJGiUJUjo4`aO=vHJ!KPclC4r$?u8%issKq=WpizIsc@7 z&OPxz(s^?J8RL4KpR51u@%#FZl=`17{Y~dbX4HSL`ceOjBK4cjlk?B0-{W{((|J37 zU;ovm{@Y6Zrt_<3)W2Nnzq8bDI#13&qkfO$aZTs#_+9;+KgRF5u+(4ZT&(xM-TddA zGyHSEz<;6h?EI5)Jr3ueF@N&$`}&WmAHRqDwdUVQ=f`H$|FrsP{&4O|{Ue~&OMnwBb_JbpVU8b z{J#E&O8qaC`c3EU`D6F_<@_`1f2GuKI#13&qkfO$aZTs#_OWZOH=QTvpHaWZ@wle*cKoh>&L89VTw3Zcbe^4m;yuo5m_Li9{zB(sz5Wj4m-A1? z^*Ee=#{A94@9RH4)X%vm{YN@K-i+VPAI?AHb-XKT{&W5rbe^1lM*SXV-tqbVAb;__ zLF1e8{Q$ptBf1&g2{F8C{z7X|mzZvxxIv4Z#`}r_F z=bnsja{d|bOZ)x5d;d7+jMwqb(4X^9e$SXE=busk^J>rQcu$nSkav89X}l z=lnC?2j|K8XVlF+<$ZWuq;AuBJAb>+FXx|8Kc5@wH=VcVN1Z>;KN+9%&+u3qigWxpTw^SPmZ(|K}!6y90qcpu&z`j2$pu7BO@=lqlUIrrrCk96M7 z-_AehoKZiY8|p7~o}GV&_a}z&IsXj*rt|jvv9F(bO8vZk>NlOwn7^EVQa|UO)IZXB zJAU{2IsXj*_)~xO-9hIw)=$nqqkcX&)NeX(=WjPY=buqOpBw5oozIxRoPWmqaB>)* z^Uru6oG0g>Q8)7x|E#~%Z#thfe_7}7&*z8w3pxJ`ukHHRy?*v7v}4~wf7AI{_b=uA zkh{hWXDd)R+b_ekf@ zv2{#eqaCIQvcynzv+DMjQaPK`dRO&-*ldwe@6Wt$K#sL z+wuGQFDUizDD|7p+w;e6{&3D2{&$u73!P`@pHaWZ@wle*cKoh>&OiA*v0u^r8R`7Z z+&|}^)X%vm{zp1b&Oc*ZkMnc&pFMtG|B+Jvv!%c3{K$;@?^QqQe^I1<(|L0K8TES{ zk83(_$M5UEy3~JLso!*d^^E$LOZ|72`c3D_`DfJcaXhZ+ydA%*pYzA~Jr|bx3!RJg z{SG4NlMy=bur($MLwP^LG5c{!2>z*OdBA z=a=O5$9@a{*O&SWooDBtQNPFWxTf=V{I33wP7L*P?#cWa>HNfu`rlAL)z7&n^Jk>< zj#9tr zeD@6hJ4^isOZ}$vw)e$Fkaf28x|{D=OWUj~m3{W-sk z_rZB`ei?OZ{stcxsoQkk&fo6y%lT!z4n8;3Z#r+!e>#7hUot-Dm*L-Zo}B+g-I}Mt zn}+_JU&iZjK4bo}Uyu6v+)%&iJURaf?^@@AZw~!AzYPD*+x4$|{hVJ?Kj)UzJ<@qQ ze>?x2Q%3!KZm7S|d3Jso-k%u8=lnAKo6g(w!@hpa)2N@Ymr*~T8|pWm&zQfQU&i}zau}cU z%XlB0C+C+@x8`Y(^_Tih=d=lh%SoBh|i3)TL1^@GgUJr$iN=a+b6pA%f!_`~b3>gW8D{_LNqf28wg z^7=Wyq<+pVseh#NgU`N|0A6z=a(_A$649vD{m+*AP3K2u)PHZO|HV?j={z~VjQTx}$2Fa| z;3VrO8t+P`c3D_`DN7aaXhZ+ydA%<|B_PwHKl&j`6YS% zvG2nF^`-to=h^vX)bDXTuIaoTzpMYF6GQ!+TQdJfIzKU^{x{T5^>c2?{2A#yIlrX- ziR1V6KUC^}q110WZ_f|A&oAefQU5EYe$#n!ei`+99FJ={Z^!TJ-(BjzqttIY-#x?s z&QkxuQorduIlqkhJ&wmUowwt6^>cn0zvt3Yf1&g2{1WeRUc>xZEcF*U7wh$R7{8of zGOowr{4(ZmK7L>S@u7asE$Khf`SE7_ZvJq78L#7AQS+bk%b@e*{4(nIIP;FL?+=V0 z-y1Z($@hn-D>=W6@%O8pJdXSB*L97DlAm#Yd0^F_ed$kDmHqqL_tb8^zQ2g4KUuYE z>&IWvxmdq{H%0&Q{;mB${rUbQQuo&Pzo7G3-+w;+@=*V$|8}T*r1LK~<9F}hr&p+- z{C)c8qWq0?enr#2n|~9>AHM&W*T3zx;orYP{{8EYuYN)P{cHJo?XNjM*unD&9#lVg zO#DVg=k57PQ$OQzejI#Nd_>o#^W^+E`n^{ApDg`N=gIjob#s0k)aQlzIX@0MPtK1S zpL62i%cAP%{5a^mJ%8){y`}c}dtbz#={!0Ah`M(T{W(95x=rWF`Ek^}Mg4dkcZ<|- zI#15u=*KxRv&I;zmd+9^Edi&ejGeH^ymCI z-UsK&`Ek_EJmr0OT%>N(c{_i*&oAf4Q9qv>>NlOY=Wm@q&W{gU{;*FVyEJAXU> zoD)a=d~T?}(0O)#9NwQ8#^?Mv{F~0(^V`0D<|*~_`l;V^K4boJeoXzG8&m&C=k562 z>*xG9{Nqpk`Q8$AK4bml{5b08b3^^6^LGAr<8yu-_4B!*e$)Ak`OEonybmXb@i{+^ z_rZB`ejIf(Pw~(COZ}$vS@V~54*z_9sK1c&x=Fc|% z{~mo#g2%)cbZt6sKR?a*+YYJyed-4_Z`rSmbe`-VqTg$!zr06((|NLgpl}0vVSN)Kj;2~pR-R0YW<@>`-h>r|jJ~z~FI&atCZvL}>V0`uu;oo$gtiMq=^OX9v z?nV8k^BMD({X^8x=Z5-C=gImT-dX2(AKo1Lk96Lyf8Fb6|3Llh8>oMz^JM?Pxa>NlOY^S2wH{X^8x=Z5-C=QHLn`-gZRP7dR`Pue=uX_Kd>i%zE@YE_@D>wD? z+Fw&Y@B8@r{dzffA~%!Q@BYjieh;kX&G37Y{^48w*tgO@*uM|wte<`F*st_wd~#Di zulqOtS3ftrPRRM&+MQpJ*I$0#_xJhdS2T|96Kmly@y?3Q+xti3pYh_~Z$hoxYwxRg z-%yW!UXS1Rf339Bx)c3P=gIz=y4gPmpA%I-`{$tZWdBV4@$WR@%ft91@6q+}^Sb`# z{uAD`&IjKg#%2E;9-Sxaf7HEe=+FK+>NcGx`{$@n`;6e-qWrUe4mwZvAM|6N4B0o+ z&vc&cpQ)dHa=ebqMEn;z&-TxZ%RV{kUmnJ1|4bduv;A{;*L?!AZ)SXx{d4(w`u?$h zrXBlc`j2#;?4P54?K6V!iPUX6Pxc@5i+{ffj}HAuUN`(+{XDOqc}o4d???Tn^JM=V zb!(pyg01n{e{l6{d0KN zJ~hbt%ltQ;xBJ(=e l^ZKdZbUtJL#=qa>b@2I7{UaHlydA$=|Ks0p;vawbH(5W) zXRM#>pQC<0Kh$qJZ|83}e*F7Q>g01n{U-C5e8&7`{~Z2L4&$?bj`zWNvVV@cnWy+? z{iS}>`KBQ2YDT4{F}BUm58<**`?T*GhkRkN&3fWdA_j>>q+!_o$!!L(qA$e_(v}55bp3 z)zAJR=)7Hjo6lc((>xEpFXGR1p3MKKd)LsP{X^7kI#2cwQMcCF;N2qio6eK92;O8r{*qJGo)jQPv{A?oLIL;a@n zWc>~AtaH2%Zw~!OI&as%?)9^OpnmoZ)IZXBvVUM)_6boxpBw5gbe`=W!uu1$`0N|P zzv;ZafA{q>PpO~RPyMFz8S|I@L%a??KdPVoL(q9UemDQvKZJk$sXzONpz|5)C;Nw} zpU(~To6g($+l|luA?oLIL;a@n8S|I@L%a_shw<4z#QWep**`?x%v1cc{!+i`eAfJB zons#HxuO0-_7CAT*+1}e_6d-E1N}|sXY3!E^S9O4s=v^l#4J*8FSLtMj)t|M?4^()k;?nVrA!zH@$cW*w1p{xtmjoUh;g znK%3%Sk0T6{q323EB%B0`*6~o-M|0$cTbgnf2YsO)}QG7&2;`$ z-v9JxrT_h}ce-~e>==^V*{%!q7)&8&55B{zA-HOity6NA{ z-*rdS{;$*z{+;-GMdyEYmj3?#r>586%>OyYZ~Sf5x`V%<{B8Z3u1)8OzpdNUUY>&T zxAiVvo6Zw|TbI>do`UkX^`Ndz=ZU{L>TmqbF@EE3%R8!9o`UkW<#)O^ohSabysh@~ z6qL6uAM4t5p7`7HrrOI>P~NtDrfbuA;%|=n8-H_*-}<{(_2LQQ?TL!cGk^Ql9#0T& z&sKDv`TM%s;|b#J`HIdnf79!4{Y@Xg^>=~l#S_Hej*89`f16LKy*vf+w@cTi^Tglg zKd8Mt1@U*Cu1)8ezv=Zi{^l6J@wfTgs#l(Z^0)bix;C9>{+>~LJVANe{7)5~Xa2O` z3x81FHosdDf5Xq~``>W?Dff>#>Tmr`AHVf?gX+Z-#2f3s={)myt=i)W;*Wid={)my zwc6te;_q-p=gItwx?QL1Hl4TixBjM&-}qbpnd;RzL5;i2`foaK$8Yv8%iMqDDTucV zb!|FN{4M`j?d2(mzl(KkI#2w~QGeraj`3T6?7Q#;@y7aZI?w#Ee&Y$s+wzMQooD{; zR(m`_d0S@xX*$pRO|QT8H+}rp-({*7PY`dc|EBZIAL}=sApZ2^TgjK?mzMrl)p{?qHEK6=I@x=;|a>! zrk_`Ip7@)i{?_00@mqhls9rolys`e9&NF}9ckl%9_CQ7FnZK{7J)R)`9<1m*^EbWz z*5CB;8-E*rse0uph&R@M(|O`=BljP93gU0Iu1)8Ozl}dtdwB}tZ$a0l^TgjA^*8?J z7{B%Ri0Z`?l(&tn|EBZIAL}=spuBB-t)lbH-#64APf*@Aez&6Y%-{6-TYuBXZ~ZN) zUOYj(vHqLRGk>h#c!K!5wW9OP-z92~Cy2k>Dmu^nO|QT8H+}rZ-<5BuUU>@2+m)>U zrt`$#mE3>iDJXwe{z})T^TgkkFRQ&g1?BI`-{{(Op7@)i{>I-NCFk0*$?Z&q}k`I}yU>u>t_jlZRns#l(Zcw_xHohSa5xc|sg z5PutWZ8}f+t#o*>>>|4rwaKh|$NLHylO(Rt=?gWBT> z;_uFi&NF}0>u>!{AHVT;#R=6bPeFORg7x2Yp7^_h`;R;Y)Ldl_`BkJYA;Vg z`Mcr+U7OAme{D^=8yFoPY`cURdk;DyIt+^1o8H*iq12C z)9Y{jO&`DUw|H9h%2N<;tpBF-#NQ(KA9)Jm?$`1{`@ooD`7zwrd+ZShAHooD_YS9?4`d0YI4iq12C)9Y{jO&`DY zw_Ek%3F43S-*le&WBtYx#NWY+&NF}8)E-X|fA>^$p81I5If1-NjDJXB3 zv;LdT6MvU;|Bk;j@rvp z5Pz5I+H{`yo1^~5-yGw&{*J0%JVCs%{+rG-f2`klg7UWhrHalofA^|Ao}j#~f2E@H z%-{6-TYuBXZ~d)Ry?BCnWBoUsXZ~2f@dWXAV@2ngzYEkJPY{1MS9G5Fn_hqGZ~FL+ zzlHCpUU>@2+XCyq={)hb!2L&_g7UZUb6uOx6MqZeR(p90%HP5-bZt6M{LN8+<8O}f zTYr01FPdRNY&@ zRgwCKpV$9>tQ~)P|K{J%U;cHC_m|o?zgY2q=$hR8%jVxdH~p864*iyXSW*2VH?#h% zpBjJZu8Q;{HPt46(3hrzsSw3Kc64^KUKD10^k3rhtJiX3~G* zkEP$O71b|tGwXkB=(q5ziu5Blv;JQx{T{7IKXNnazkFcmx6Hm(^C+l(k(){Xb>A5J zt^0mO^^4q0`fptt`fa_ZqWVQ{CjGa(G4$K=c}4Y$+|2s#EB#)mNI!Bj>A(48>34la z^^4rh`ae1J+x*WJ=|^s6{dbmr_gADJxta7|K2iGdy-)A|W~hFVn@Rt5KOOolY^lypsmF{29 z_w#?gG&A-^k zC-cAjeAT@D$Nm2Ur4FcZSG@oKan(;AH%#q+cjra|M=rj|C!%^R@|TODe|`d){1)FEB^j+zWu*4jN5&GBBzew=jZfae!gnn{^S1l z(NYK0xGUZN`ukVxyXA4*e;*irPx<*d>mT>euMFe+``b$Q&+$D?<97S^Z}VKgp?M`1v{gm!GfNGH?H#!}#6zS8~Q5etz!p&$Ivd{q_D*2h_ML{r-BspTF}R z|9sbv^Zopu@A?tnvo&wK@9)nI??d_dIp6>D?!S9@-#7iDqTc_Net(a4s(;@8@jajZ z50~+w#*f@g)}Qn4f2fRm=J^9T;}1VSr~mTvRh#DRf6*|0cYZ<6_`}c7J^p$2_xZ)f zua!EW#$ECG#qp}2-pBYoQ~K{2`gi9iDZtCZC{mt_ew!Wx#`a6R``kg5Kp!4MK4{p`>ZvOsYP=9|go_}OIPyYVk z9OF0t{cbb+hBN=W-~ZKpi`@LXv%LQD{H)Dy58h~xNBHUg5|x{ozs)~UyT4a^NWb4# zbpH3v_|1R6+>B@a_uAn97C+Oq>HKe-{>}S8$M}uEYcgt7n+H{`Gzd6Ql{B68z@W$)KUr^p6 zHxqvwmj-XN#~)-Kk(-&njl5pXvmpI$EB&DJWd3c$x8_+;^KRpvx;C9B^KXvv8-MZt zjmaCY7k@!{i`-27@&8NVjrJz;sPu!*llixVXU(&q=H1fcx;C9B z^KXvv8-MZtOUPUNe`BV+MQ$ek7LN|zXpcY0ydyU=fBb(F%(Ec<^gTBELFdW*Tg0>G zSy1zC@pWCB&Xf5!$M}uE4Zj}d9j}-97nHZi&BWh^mj-XN#~)vmpI` zR{BBb$^6@ZXU(&q=G}&0>e_Uk%)dFtZ~U!a7`*X%@fVc0$j!vxLfN;_9)FPeLvCjN z7I?jyXF>H_f8o$C=scN!3wYK%3u@l2U#)A?c{2az7{Bos|2|3Hc)j=w%3I`S;%{x) zx6mGckazZ-1xgd<`2%j|M=38q2HO$|BPJy%g^imr~iKT zU#z)s81FMZr*x0b zHE!f)GX5O>htFMkZrqo&U-rwuj$|WyIuY8_bm~Brt{m+ z(!ciSI$gKvysf|YcZEHX?sebr7DB{m_zO(7y``e~|_`65M zpXq$tS^C%hT&L?cowxP({+2W@{tk=yGo3Fr<9Gf(`HA|;-zTj5@;B1?Pn!OnzfZW& z$loWdzw$TId3*oq{C)Da`pMrXpNsN0()ruX_(T87-^BVmf1hxl!{5as{tBIo>F4*8 zL+XdWr$qdj&fEKU@9%*6;g59}f2Q+x{qFtkS3mr{AmYz-zQ3uz_vboYx9PmCzxTIK z*wD^>W4qpef*iuFKX)V{C#{{{qT34h`&PTV*UPg{ysjXe)zjy z#9yIvvF~5cKiBEHP3LX>oxhK{|KaaO5r2iw#d`eC-^a(*PyRk;{g=Oy&W|_!dw;Co z^7k?8ul$X4-rj$Df6u6&{C)h-qWq0?{!BA|H~%Kq-}`$~*iU z{vH(ZXF6~1f1SUN-cvvM`-t^l{zf`~uc^QD_YwCQ{9P>Kuh6+z&;QQfNAIW~{w@{q zSLj^q`&XaeiS>8>KH@%yzXcJ0h0eu#{NCSD^~2xuBK}P0N1Oh=Kh|ma`-t^d{zf`) z*YDonz3L}_AH5>V-$>{8Hsg2mkH3>Tq5j_A0ri)^kG?C)-$>`}{jc}8wv5lZk3ZA- z+NS>A-$m+&zZ*sTnal^Y;GN`TOwK>W4qpef$+V7wh@k z`TLOj4E`2G{1rME>;9d;4}Ye9_*)e5SLj^q`&ai5*Xg=V=V#R4`TLOjAO5z8_$zcS z_T!iTZb02WzZ}oqJ{VqybFuE<`qQ{Rw;#`c4-IuV7wi6g{j}Hb8PDC=2k3Q-=bG*P zr+NQZ@6z}u^!LW#uf%;7owxVTrvBAC)cy_igTEIKRCNAEQ-AaRuim2e-%~#*Z>#UF z==^(U>0jReIqGlxtzOi4uWDQtYgbpC2He&cV)qiQctLHXNpT-T=a#NUnw)Lx!~ z^0(tVx;C9B{&w82_VN^zza8Jxwdp+ZH%I-Aza95!Jb4Pr-;OtRZ932VZB%p$ z=sfeM|4teHAl~*?#NY7q`t#Gwza5vVJ)R)mZm;M(^EbWz*58F14^I$pU$5vq@wZ*; zE&hV?xBWd`o6Zw|+qK@~FDQT8_22FB7<8V@zwNK6y*vfwZ~Jd`Z8}f<%~5~jZ~KcH zPo9GExBU;gHl1hw?ofL?LA)KU=sfdxtJ>oU;_b1D&NF{Et393|-X5>$Jo7ib{?^}D zH6ETI-kz@LJn^^f_i8UsLHw=Nwdp+Zx9wMIFHb@IE$iBJp7`7L3$>T0ApW-L+H{`y zo1^~5-?o3zc=8m)-_^P{ooD`@QhPi>dE3VNZ#vKXasR;+l(%iHzozrd-@|H;Cn#^* z-md68^EbWz)*tsjJVANe_T!4qGk;g9J)R)mSpQAunZJ!{k0*#X)?d?k=8t^?o*@4A zS9G5Fn_hqGkNX>*ApY*I=sfYa^+#$iPeFOx%KC3QPyB7={v%I8dE3hRYdTN-ZGBzs z%{GC$#1@XrEZ#qx>ZTY?0%To|(m}k5Pz)yrt{3-RcenX zh&R?>(|P7^huY%_;_u#y&NF}0>u>#W-@_Bc-#02cPyF$BO7Rzzx6Q2ort`$#X6`@o z6qL8ktiPu7#2Ox&O&i5Pvu6+H{`yTYgFH(|O{Lztf7pApS1Xwdp+ZH%I-AzfIi#h#c!Kh_iS^fXp82~^?ePTVjlUy1(s|}@di||G?t6HG^0w)F z6`g1P7StY35O1virt{3-#cGcyh&R?>(|P9aLbb;e#NRCyooD{0*WdWt$o)^Ag7~{# z*QWEtAAhG5e?fWM$og+OPyB7<{v%I8dE3bPYdTN-@poGB7nDE#jw~L7&J%xg)ZhB! zzK16$ZySGG(Rt?YHnqnS#2f3s={)nt`i&=uH`ZU%dFJn{YL6#~w?`^E&-_iVzxBs` z4^I$(k5_b__~Y-C;xC9d)_>D^;_piCKk^jB8|$y>Jn_fhX~ka!m8`#}^UU7^YL6!zx@@RC;pb+QhRv{%G=WWx;C9B{+77^$Wu_>mRNsH=ZQc5PAmR`^2gti z#beNU;%|=n8-GjO|Kuqse@mxyZ932V-Kq9?f_P*7H=SqxSikWE@y7aVI?w#ws`hw- zczd#<^UUA$`dfe8_wWSq_Dn_Ri9h~MDgJ_ZWBoUsC;qPZjoQmo5O1u%rt`!ff2S3H zLHzC1wdp+ZH%I-Azbm-^$x{%2*Xr7Ip85Nh+T#hz+ZC+;rt{1n>o=aDyj{WiYdX*T zJ*xJ2g7U`Sksawg^EbWz)*tshJVAN8;+=}lGk@2pJ)R)mSpQAunZGS+k0*#X)?d?k z=5M3g;|b#LKt<=7zv=b2{%{GC$#1?7#u!-~J4^TgjG_aAu*%G)CA zujxGT$8$pP7nDE#jw~L7&J%xg)Zh49l$NG&Y zh&R?>(|P9a4z$@WBoOqC;s?5t@sP#Z;!4`=b69h^*8?3bN`d4ApUOAwdp+Z zxBeBim#3h-@poA97j&NaWBtYxl(+S)zozrd-}7pZCn#_H9odo26Mu8m-}>XehbJg+ z>wj6%dFJnCwZ{|08|%O6Jo9(G+T#i0jrG@bp82~@?ePThceJAO%-{6-TYud5@C5Pq zNJZy~KmJZB{(^X8{WqN_{ua3Z$Wst+tiPu7#2o}j$(cVtI8&-_iVzxBs` z4^L3u7T&1nJoC4x_IQGLWBoUsXZ|i#dptqBvHqIQGk+JWJ)R)`_EvPB`I}yU<8K}J zKY0q`Z=bGB=ZU{{udBU01?6oW>%Zwd@wblqk30qCZ5`{c={)hb?j^OCr=a}tcVzJx zbe{N|qyE+(_dPs8d0Tg~qVvq(*VGo=Yt-dKN4=b677)gDg}Z;w@U zp81-(;I?wz)q4s!!^0t=s-*le&WBtYxl()64zozrd--Bw8 zCn#@g->m37^EbWz)*tshJVAL|d!nNA%-;^R#}mXG>%Zwd^S7w>c!GFi{WYCu{ub08 zPY{1!ujoAUH@*JWANM^xLHr%4=sfYa=7(x8PeFNG!}@PJPyDUn{v%I8d0WH!YdTN- zt@*Cn%TrMP*8D-&rt`$#9Q8N;)^Pumr=a|;Ijw8cdFJmfwZ{|08|%O6JoCr;jVFjV z)?d?k=I=JO#}mZc(-oa({-)R8`s2QbCy2M_DmqX6t^Qc;D^;&1iu)Lx!~ zcw_xFohSZQ|3>ZQDTu$Tb!|FN{LN8+<8L+hKY0q`Z?~>Z=b67})gDh!-d3~zo6a+T ztlxNo^0u1w*L0rw`=;9C3Ci2*A6Imq`I}yU>yP^$o}j#~{z*mWt-t2~pFi{Y4QD=o zp!~f4|L>dUNAR2q#t&-zGoCv=@ z@z#pYA8Vff(A58BecpKfaqzq19lAE1A8q0h3IF-QH4 zKYa6?kljX={&;>cb@1F{{Ec*;e17o8^N)l2+~AMr9|xT$pC7#O{NtcL zKltN0EJ5eV=O^lRohz%q^T+d#@yGL5@Hf(VJAZqB2hgM04`_vDQ zPl@<5o$qVjzi$40db|4J@mnJPOy{?srGGX5K6Rb0+jQR6-}}2o^8R{B0ERSLpnV=LdKGc+PS7yGq1gp>wfbKRSOr=Q#XbBjT^ndG`Ec>UN#3+jM?L z{hdFaa~%Gz6Y*E*JbV6ejQ^baQOEa1`5Wo{x#sov{+?7n%|D)djK7i2pKSW~{vKC9 z%|D)djK7i2A3sa~YW|&eohz%q_xFg#)%@eR$M_rR{E=q-e*W!NKm6Sx;?H!xyXoKi z+o^u|J1FAMbiT9c-}~F9e)zjb#GmPW+gbY8{#>W)Hl4Ti_x_eNF8&US_%od^HRE^w zcz!VccAb!FbpCk$G5&b&G5$t6f4ixF=wJDpSbyh_ z=NyMWJ$Ehq6*|wJe;nQpsUQBH67gp`Z|~o|zXR%rKh|CRnab`IvF_u~bbe7&f9H?q9EZQ_MEn&x z7t{L(&p8f%*NgZobe=u`IO=wtuG@6p*5CR2nEN08ZWQrX=v=Jp@BH!nVCvwx$M_rR z{CLy9_s9CJ`NwmQ@i)?Wd;jU?-^b6WpXMLWJ;vWi=g&0bcc0&h_4ods)VT7;bC2;i z(s_IT>;3IfKm4)oVd9w_E-2cUZ)q>AYRPdw@t z>AbDK_qS8y;_pEbf2Q;H{@3~A`N8<(xySe$>AZdZWasZA?lbtiSj1nUbFrTPoj;y) z9R4m9@mJ_Pd;W3M?K)Rhf9H?q9EZOJ5r2iw#k&69-%<6$-}55=Oy}+Q*WMrNwEXeh zWBiSD-mc%hzkAhB^N;5q<8P$%dz<>Z`N#8*C)D5jJD~oWe?0dXeW9CZMf{o0FKEW^{kcxpZ8~r3@BHcc#)H4x zMEn&x7t{H7>O1PE`NwmQ@i)@>cbfj4zf;_2|y}v!`hd^8R{ITxiuh97!&kyeW z>G{TkzXcJ0h0eu#{&)U(&T;r#6!BN+JbV5zb-Pa2Z8|@r{>~rIISzkYMEn&x&z^rw z-9En@&)q&4UWfDS`NxdQxh*{N@8~%fYkz(Hhlc*+xf{PvuVXydZ0|qK`_J=(KYL8) z$M7Xl|NU~L^T(R;oA;mR9)G6$Pf+&{o`3wA>AbyvHt#>@>@ z&m8qP{x~1Ud+;sskgiSViN76>s=Yh~<&Wnd<1gqu@yBzI@fVago_~zLp!38Z&ppOp zQ2zMu4|ohZPyEeMf8%e*eHu@mg7U_Hf52bRdFF4U+T#i0ZBIq#nZMO)k0*$?y%n8j z{`B9y!ym-k?G^Di{Jj4BHS;g(cAYD$zx8*a#={fD+t({PPyF%xVEhF&{`U8DZ8}f< z@!Vtl1?6x1uXSxYPyF%RWBdi>kLMrbG3Y#*e{)-ZU)gDg}Z;w@Up8303?ePTh_IO3-nZN1vxBkAW@$dxk_H;$( zi9ennjK3iM*6P}Hp3FajdFJmbwZ{|08|%O6JoC3v?ePTh#`Tmq<+++L&<&Wnd<1y$w^LJ3~@dWY4`fobV{IP!H3F3|Q*L0rw`Oys`e9&J%w;_ZWXcys_?@&J%w;_ZWXc{9UVS(|O`= zj`|yaTe$zpQxJb&(Y5J3^Y^^k;|ac>Xc|g3c3vJogxX zLHu2yYtwn+Z;tvKe?0dXe?k0RqHEK6=I^lD;|b!8_1|=!`D6XY6T}Ge1Mcv zvHqIQGk?3(9#0T|M=Cnc{7tXF^~Ze=PY{0(Rdk;C@~^-KX|=g7U`mk4HMs{7tXF^~Ze=Pf*@?{_#lXnZE_K#}mXG>%Zwd^LMe@ z;|b!A_1AQs`MXf<@dWXAOGW3Izv=Zi{x)*|lcym5Zr8QxJn_f#gYg%XH=citzo7HP zAJ09;Ur^q7{xSZ7&J%w;_ZWXc`Qy3AcnmsE{LN8+>yP^$o}j$({Ns_%Gk>?KJ)R)m zSpQAunLpNVJVCs%{+iA+e_vI5JVCrYQqg(lZ+iW$Kkj>Yg7|y9qVvQb&kx355O1vi zrt`$#mE3>iDTp`LU(%Zwd^S7Y(c!Kz2{WYCu{#L6!o*@4ARdk;Dn_hqGkNX~;ApZ7Obe{NIdQ0u) zDJX9|{}_Kk=ZU{1?mzMrlsBG#jK84s#2?Q+#$QnWcUu#}mZclNFt3{-)R8`s2QbCy2La zDmqX6@%&)?1@XrEZ#qx>@!Vtl1@XrEYdTN-@!Vtl1@X62*QWEt-yHQf{&?;&{(|_s zR@bKU%-^@v9#2r-c>eK7=b1m&Z#+SH2qDqLj_?x5t#vji;#$OPBm+9Jcp8309?ePTh#`eK7=b68o)gDg}Z>;~O^UUA%YL6#~Kh|H< zdFJmrwZ{|0-_eTBGk??TZ~bxK!xO~cBNd$|{uX|r_VN_O8|%O6Jn^@{{YRdHcw_xF zohSZy?lJy?_*<)M(|O`=j`|yaJogxXLHsT0+H{`zdsyx91m%tAACGjN`D6XY6O=ce ze>~E8=I^lD;|a2qXc|g3c3vJogxXLHXmk$9N1nPyEeMf9sF?9-g4Q@%-bF&NF{sQ+qr?ys`e9 z&NF|k-*|#}WBoOqXZ~(fdptqBJyy|q=5Koatv~L2c!KzQvZC|EAI}fQUl4Ds|EBZA zAJ09;Ul4DszozrVAJ09;Ul4!Gx;C9B{^qE^@yBzI@fXD3PF@~^O|QT8$9)e^P~Ld{@kr;Hza46iCx}1R zf75y9Z&B^>1o6lEYdX*TEvP-7ApX8y(Rt=?di||G?t6HG_&ZS1dE#%)57l0tg7U`m zkMS3Dp7>kC{YRdH^2YOz@fUQS_~W_9_zTJ(&p*av(0Sr-j`|yaJogxXLHXnP$9N1n z&-~q`_IQGLWBoUsXZ~2f@dWY4`fEDR{N1MZc!GF)x}x*U-}L%hf86)*1o8G zo*#_AAl_L2P3MU}o_mbHAl_JiP3MU}o_mbHApWk_wdp+ZH%I-AKc0Jxzaaj0>)Ldl z`FmFF@dV|K=O2%Bp7~?_#uJn`o_{>jdFJn%YL6!AW4kt)Kf2bwc$!^Z5hi`408?|6$di zed$kDtzY#QYcAAy52@eJH2$4m@WTzdeqYbeDE#be`n@0M=Y`IL>SuoNt>O2X`n@r( M9;foBf4b`b0hgQENB{r; From e81fde03c4a2fdce114ed502727919bb6e9e8dcd Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Fri, 19 Apr 2024 20:12:16 +0000 Subject: [PATCH 08/20] feat: enable lvs --- .github/scripts/glayout_lvs_sample.py | 15 - .github/scripts/run_glayout_lvs.py | 126 ++- .github/workflows/glayout.yml | 38 +- .../gdsfactory-gen/lvs_flow/Makefile | 2 +- .../lvs_flow/run_glayout_lvs.py | 161 --- .../lvs_flow/scripts/add_routing_blk.tcl | 49 + .../gdsfactory-gen/lvs_flow/scripts/cdl.tcl | 4 + .../scripts/create_custom_connections.tcl | 27 + .../lvs_flow/scripts/def_to_odb.tcl | 24 + .../lvs_flow/scripts/deleteNonClkNets.tcl | 38 + .../lvs_flow/scripts/deletePowerNets.tcl | 29 + .../scripts/deleteRoutingObstructions.tcl | 11 + .../lvs_flow/scripts/density_fill.tcl | 27 + .../lvs_flow/scripts/detail_place.tcl | 87 ++ .../lvs_flow/scripts/detail_route.tcl | 53 + .../lvs_flow/scripts/fillcell.tcl | 11 + .../lvs_flow/scripts/final_report.tcl | 61 ++ .../lvs_flow/scripts/floorplan.tcl | 153 +++ .../lvs_flow/scripts/global_place.tcl | 81 ++ .../lvs_flow/scripts/global_place_skip_io.tcl | 34 + .../lvs_flow/scripts/global_route.tcl | 37 + .../gdsfactory-gen/lvs_flow/scripts/gui.tcl | 12 + .../lvs_flow/scripts/io_placement.tcl | 13 + .../lvs_flow/scripts/io_placement_random.tcl | 14 + .../lvs_flow/scripts/klayout.tcl | 20 + .../gdsfactory-gen/lvs_flow/scripts/load.tcl | 35 + .../lvs_flow/scripts/macro_place.tcl | 134 +++ .../lvs_flow/scripts/odb_to_def.tcl | 5 + .../lvs_flow/scripts/openfasoc/README.md | 13 + .../scripts/openfasoc/add_ndr_rules.tcl | 11 + .../openfasoc/create_custom_connections.tcl | 27 + .../openfasoc/create_routable_power_net.tcl | 94 ++ .../scripts/openfasoc/custom_place.tcl | 37 + .../scripts/openfasoc/pre_global_route.tcl | 12 + .../openfasoc/read_domain_instances.tcl | 21 + .../gdsfactory-gen/lvs_flow/scripts/pdn.tcl | 35 + .../lvs_flow/scripts/placement_blockages.tcl | 45 + .../scripts/read_domain_instances.tcl | 18 + .../lvs_flow/scripts/read_liberty.tcl | 17 + .../lvs_flow/scripts/read_macro_placement.tcl | 26 + .../lvs_flow/scripts/report_metrics.tcl | 166 ++++ .../lvs_flow/scripts/run_all.tcl | 66 ++ .../gdsfactory-gen/lvs_flow/scripts/synth.tcl | 114 +++ .../lvs_flow/scripts/tapcell.tcl | 10 + .../lvs_flow/scripts/tdms_place.tcl | 36 + .../lvs_flow/scripts/write_ref_sdc.tcl | 36 + .../gdsfactory-gen/lvs_flow/scripts/yosys.tcl | 1 + .../lvs_flow/util/addDummyToLef.py | 34 + .../lvs_flow/util/add_ndr_rule.py | 25 + .../lvs_flow/util/appendStatsToDb.py | 90 ++ .../gdsfactory-gen/lvs_flow/util/calBuffer.py | 22 + .../gdsfactory-gen/lvs_flow/util/calPath.py | 37 + .../lvs_flow/util/cdl_parser.py | 82 ++ .../lvs_flow/util/cell-veneer/README.md | 2 + .../lvs_flow/util/cell-veneer/lefdef.tcl | 935 ++++++++++++++++++ .../lvs_flow/util/cell-veneer/pkgIndex.tcl | 2 + .../lvs_flow/util/cell-veneer/wrap.tcl | 31 + .../util/cell-veneer/wrap_stdcells.tcl | 701 +++++++++++++ .../lvs_flow/util/checkMetadata.py | 148 +++ .../lvs_flow/util/createGallery.py | 41 + .../lvs_flow/util/def2stream.py | 211 ++++ .../gdsfactory-gen/lvs_flow/util/gallery.json | 47 + .../lvs_flow/util/genMetrics.py | 571 +++++++++++ .../lvs_flow/util/markDontUse.py | 45 + .../gdsfactory-gen/lvs_flow/util/mergeLef.py | 81 ++ .../gdsfactory-gen/lvs_flow/util/mergeLib.pl | 61 ++ .../lvs_flow/util/openfasoc/cdl_parser.py | 72 +- .../gdsfactory-gen/lvs_flow/util/place_ro.py | 197 ++++ .../lvs_flow/util/rules-global.json | 15 + .../gdsfactory-gen/lvs_flow/util/utils.mk | 207 ++++ .../gdsfactory-gen/lvs_flow/util/viewDrc.py | 68 ++ .../gdsfactory-gen/lvs_flow/util/viewGuide.py | 80 ++ 72 files changed, 5614 insertions(+), 277 deletions(-) delete mode 100644 .github/scripts/glayout_lvs_sample.py delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/run_glayout_lvs.py create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/add_routing_blk.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/cdl.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/create_custom_connections.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/def_to_odb.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteNonClkNets.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deletePowerNets.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteRoutingObstructions.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/density_fill.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_place.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_route.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/fillcell.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/final_report.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/floorplan.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place_skip_io.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_route.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/gui.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement_random.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/klayout.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/load.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/macro_place.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/odb_to_def.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/README.md create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/add_ndr_rules.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_custom_connections.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_routable_power_net.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/custom_place.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/pre_global_route.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/read_domain_instances.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/pdn.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/placement_blockages.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_domain_instances.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_liberty.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_macro_placement.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/report_metrics.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/run_all.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/synth.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tapcell.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tdms_place.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/write_ref_sdc.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/yosys.tcl create mode 100755 openfasoc/generators/gdsfactory-gen/lvs_flow/util/addDummyToLef.py create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/add_ndr_rule.py create mode 100755 openfasoc/generators/gdsfactory-gen/lvs_flow/util/appendStatsToDb.py create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/calBuffer.py create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/calPath.py create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/cdl_parser.py create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/README.md create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/lefdef.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/pkgIndex.tcl create mode 100755 openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/wrap.tcl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/wrap_stdcells.tcl create mode 100755 openfasoc/generators/gdsfactory-gen/lvs_flow/util/checkMetadata.py create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/createGallery.py create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/def2stream.py create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/gallery.json create mode 100755 openfasoc/generators/gdsfactory-gen/lvs_flow/util/genMetrics.py create mode 100755 openfasoc/generators/gdsfactory-gen/lvs_flow/util/markDontUse.py create mode 100755 openfasoc/generators/gdsfactory-gen/lvs_flow/util/mergeLef.py create mode 100755 openfasoc/generators/gdsfactory-gen/lvs_flow/util/mergeLib.pl create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/place_ro.py create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/rules-global.json create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/utils.mk create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/viewDrc.py create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/util/viewGuide.py diff --git a/.github/scripts/glayout_lvs_sample.py b/.github/scripts/glayout_lvs_sample.py deleted file mode 100644 index c5e5b3396..000000000 --- a/.github/scripts/glayout_lvs_sample.py +++ /dev/null @@ -1,15 +0,0 @@ -# import sys, os -# sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'openfasoc', 'generators', 'gdsfactory-gen')) -# from glayout.primitives.fet import nmos -# from glayout.components.diff_pair import diff_pair -# from glayout.components.opamp import opamp -# from glayout.pdk.sky130_mapped import sky130_mapped_pdk as sky130 - - -# diff_pair = diff_pair(pdk=sky130) -# diff_pair.name = "diff_test" -# print((diff_pair.info['netlist'].generate_netlist())) - -# opamp = opamp(pdk=sky130) -# opamp.name = "opamp_test" -# print((opamp.info['netlist'].generate_netlist())) \ No newline at end of file diff --git a/.github/scripts/run_glayout_lvs.py b/.github/scripts/run_glayout_lvs.py index 455882b05..c6a881478 100644 --- a/.github/scripts/run_glayout_lvs.py +++ b/.github/scripts/run_glayout_lvs.py @@ -18,6 +18,19 @@ # ########################################################################################################### # ########################################################################################################### def get_gds_netlist(component_name, func, pdk, gds_path): + """used to return the netlist and component object for the + desired component's placement + + Args: + component_name (str): the global descriptor for the instantiated component + func (callable[[Component], any]): the function to be called to generate the component + pdk (MappedPDK): the pdk object for which the component is to be generated + gds_path (str): the path to the generated gds file + + Returns: + Component: the instance of the component + str: the netlist string + """ component = place_component(component_name, func, pdk) component.write_gds(gds_path) netlist = component.info['netlist'].generate_netlist() @@ -25,6 +38,15 @@ def get_gds_netlist(component_name, func, pdk, gds_path): def compname_in_net(mynet: str) -> str: + """used to edit netlist to change the component name to + the test component name for global definition + + Args: + mynet (str): the netlist string input + + Returns: + str: the modified netlist string + """ pattern_diff = re.compile(r'\bDIFF_PAIR\b') pattern_nmos = re.compile(r'\bNMOS\b') pattern_pmos = re.compile(r'\bPMOS\b') @@ -36,28 +58,16 @@ def compname_in_net(mynet: str) -> str: if pattern.search(mynet): replacement = replacements[i] mynet = re.sub(pattern, replacement, mynet) - return mynet - -def edit_lvs_script(lvs_script: str, comp: Component, revert_flag: bool): - with open(lvs_script, 'r', encoding='utf-8') as rf: - data = rf.read() - print(f'Editing lvs script: {lvs_script}') - pattern = re.compile(r'\{\!\[string compare \$2 "(.*?)"\]\}') - matches = pattern.findall(data) - - to_replace = matches[0] - if not revert_flag: - to_replace_with = comp.name - else: - to_replace_with = 'ldoInst' - - data = re.sub(to_replace, to_replace_with, data) - print(f'Edited lvs script: {data}') - with open(lvs_script, 'w', encoding='utf-8') as wf: - wf.write(data) - + return mynet def edit_makefile(comp: Component, makefile_path: str): + """used to edit the makefile to change the DESIGN_NAME variable + according to the component name + + Args: + comp (Component): the component object for which the makefile is to be edited + makefile_path (str): the string path to the makefile + """ pattern = re.compile(r'export DESIGN_NAME = (.*)_test') my_var = comp.name @@ -68,12 +78,32 @@ def edit_makefile(comp: Component, makefile_path: str): with open(makefile_path, 'w') as wf: wf.write(new_content) + +def evaluate_report(report_fle: str) -> bool: + """used to evaluate the lvs report file + + Args: + report_fle (str): the path to the lvs report file (6_final_lvs.rpt) + + Returns: + bool: The flag indicating if the lvs run was successful + """ + with open(report_fle, 'r') as file: + report_content = file.read() + + string1 = 'Cell pin lists are equivalent.' + string2 = 'Netlists match with' + + if string1 in report_content and string2 in report_content: + return True + return False ###################################################################################################################################################################################################################### ###################################################################################################################################################################################################################### gds_path = './results/sky130hd/glayout/6_final.gds' cdl_path = './results/sky130hd/glayout/6_final.cdl' +report_path = './reports/sky130hd/glayout/6_final_lvs.rpt' makefile_script = './Makefile' ## PMOS @@ -92,10 +122,13 @@ def edit_makefile(comp: Component, makefile_path: str): print(stdout) -if sub.returncode != 0: - print(f'LVS failed for pmos_test with error:\n {stderr}') -else: +report_return_code = evaluate_report(report_path) + +if report_return_code: print(f'LVS run successful for pmos_test') +else: + print(f'LVS failed for pmos_test!') + sys.exit(1) ## NMOS mynet, comp = get_gds_netlist('nmos_test', nmos, sky130, gds_path) @@ -113,10 +146,13 @@ def edit_makefile(comp: Component, makefile_path: str): print(stdout) -if sub.returncode != 0: - print(f'LVS failed for nmos_test with error:\n {stderr}') -else: +report_return_code = evaluate_report(report_path) + +if report_return_code: print(f'LVS run successful for nmos_test') +else: + print(f'LVS failed for nmos_test!') + sys.exit(1) ## DIFF_PAIR mynet, comp = get_gds_netlist('diff_test', diff_pair, sky130, gds_path) @@ -134,28 +170,32 @@ def edit_makefile(comp: Component, makefile_path: str): print(stdout) -if sub.returncode != 0: - print(f'LVS failed for diff_test with error:\n {stderr}') -else: +report_return_code = evaluate_report(report_path) + +if report_return_code: print(f'LVS run successful for diff_test') +else: + print(f'LVS failed for diff_test!') + sys.exit(1) ## OPAMP -mynet, comp = get_gds_netlist('opamp_test', opamp, sky130, gds_path) +##### not using currently because not LVS clean +# mynet, comp = get_gds_netlist('opamp_test', opamp, sky130, gds_path) -net_file = cdl_path -mynet = compname_in_net(mynet) -with open(net_file, 'w') as wf: - wf.write(mynet) +# net_file = cdl_path +# mynet = compname_in_net(mynet) +# with open(net_file, 'w') as wf: +# wf.write(mynet) -edit_makefile(comp, makefile_script) +# edit_makefile(comp, makefile_script) -subproc_cmd = ['make', 'netgen_lvs'] -sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) -stdout, stderr = sub.communicate() +# subproc_cmd = ['make', 'netgen_lvs'] +# sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) +# stdout, stderr = sub.communicate() -print(stdout) +# print(stdout) -if sub.returncode != 0: - print(f'LVS failed for opamp_test with error:\n {stderr}') -else: - print(f'LVS run successful for opamp_test') \ No newline at end of file +# if sub.returncode != 0: +# print(f'LVS failed for opamp_test with error:\n {stderr}') +# else: +# print(f'LVS run successful for opamp_test') \ No newline at end of file diff --git a/.github/workflows/glayout.yml b/.github/workflows/glayout.yml index 84b1dc49d..8ff0011fb 100644 --- a/.github/workflows/glayout.yml +++ b/.github/workflows/glayout.yml @@ -65,22 +65,22 @@ jobs: " && exit_code=$? | tee -a file_gf180.log if [ $? -ne 0 ]; then exit 1; fi if grep "\[ERROR\]" file_gf180.log; then exit 1; else exit 0; fi - # - name: Test sky130 glayout LVS - # env: - # IMAGE_NAME: msaligane/openfasoc:stable - # run: | - # cd $GITHUB_WORKSPACE - # touch file_sky130_lvs.log - # docker run --rm \ - # -v $PWD:$PWD\ - # -w $PWD\ - # $IMAGE_NAME\ - # bash -c "\ - # cp ./.github/scripts/run_glayout_lvs.py ./openfasoc/generators/gdsfactory-gen/lvs_flow. &&\ - # pip3 install -r ./openfasoc/generators/gdsfactory-gen/glayout/requirements.txt &&\ - # pip3 install gdsfactory==7.7.0 &&\ - # cd ./openfasoc/generators/gdsfactory-gen/ &&\ - # python3 run_glayout_lvs.py - # " && exit_code=$? | tee -a file_sky130_lvs.log - # if [ $? -ne 0 ]; then exit 1; fi - # if grep "\[ERROR\]" file_sky130_lvs.log; then exit 1; else exit 0; fi \ No newline at end of file + - name: Test sky130 glayout LVS + env: + IMAGE_NAME: msaligane/openfasoc:stable + run: | + cd $GITHUB_WORKSPACE + touch file_sky130_lvs.log + docker run --rm \ + -v $PWD:$PWD\ + -w $PWD\ + $IMAGE_NAME\ + bash -c "\ + cp ./.github/scripts/run_glayout_lvs.py ./openfasoc/generators/gdsfactory-gen/lvs_flow. &&\ + pip3 install -r ./openfasoc/generators/gdsfactory-gen/glayout/requirements.txt &&\ + pip3 install gdsfactory==7.7.0 &&\ + cd ./openfasoc/generators/gdsfactory-gen/ &&\ + python3 run_glayout_lvs.py + " && exit_code=$? | tee -a file_sky130_lvs.log + if [ $? -ne 0 ]; then exit 1; fi + if grep "\[ERROR\]" file_sky130_lvs.log; then exit 1; else exit 0; fi \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/Makefile b/openfasoc/generators/gdsfactory-gen/lvs_flow/Makefile index ed25d31aa..0df324ecf 100644 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/Makefile +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/Makefile @@ -59,7 +59,7 @@ endif $(info [INFO][FLOW] Using platform directory $(PLATFORM_DIR)) include $(PLATFORM_DIR)/config.mk -export DESIGN_NAME = opamp_test +export DESIGN_NAME = diff_test export GALLERY_REPORT ?= 0 export VIN_ROUTE_CONNECTION_POINTS = 3 diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/run_glayout_lvs.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/run_glayout_lvs.py deleted file mode 100644 index 455882b05..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/run_glayout_lvs.py +++ /dev/null @@ -1,161 +0,0 @@ -import os -import sys -import re -import subprocess as sp -from gdsfactory.component import Component - -sys.path.append(os.path.join(os.path.dirname(__file__), '..')) -sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '.github', 'scripts')) - -from glayout.pdk.sky130_mapped import sky130_mapped_pdk as sky130 -from glayout.pdk.gf180_mapped import gf180_mapped_pdk as gf180 -from glayout.components.diff_pair import diff_pair -from glayout.primitives.fet import nmos, pmos -from glayout.components.opamp import opamp - -from run_glayout_drc import place_component - -# ########################################################################################################### -# ########################################################################################################### -def get_gds_netlist(component_name, func, pdk, gds_path): - component = place_component(component_name, func, pdk) - component.write_gds(gds_path) - netlist = component.info['netlist'].generate_netlist() - return netlist, component - - -def compname_in_net(mynet: str) -> str: - pattern_diff = re.compile(r'\bDIFF_PAIR\b') - pattern_nmos = re.compile(r'\bNMOS\b') - pattern_pmos = re.compile(r'\bPMOS\b') - pattern_opamp = re.compile(r'\bopamp\b') - patterns = [pattern_diff, pattern_nmos, pattern_pmos, pattern_opamp] - replacements = ['diff_test', 'nmos_test', 'pmos_test', 'opamp_test'] - - for i, pattern in enumerate(patterns): - if pattern.search(mynet): - replacement = replacements[i] - mynet = re.sub(pattern, replacement, mynet) - return mynet - -def edit_lvs_script(lvs_script: str, comp: Component, revert_flag: bool): - with open(lvs_script, 'r', encoding='utf-8') as rf: - data = rf.read() - print(f'Editing lvs script: {lvs_script}') - pattern = re.compile(r'\{\!\[string compare \$2 "(.*?)"\]\}') - matches = pattern.findall(data) - - to_replace = matches[0] - if not revert_flag: - to_replace_with = comp.name - else: - to_replace_with = 'ldoInst' - - data = re.sub(to_replace, to_replace_with, data) - print(f'Edited lvs script: {data}') - with open(lvs_script, 'w', encoding='utf-8') as wf: - wf.write(data) - - -def edit_makefile(comp: Component, makefile_path: str): - pattern = re.compile(r'export DESIGN_NAME = (.*)_test') - my_var = comp.name - - with open(makefile_path, 'r') as rf: - data = rf.read() - - new_content = re.sub(pattern, f'export DESIGN_NAME = {my_var}', data) - - with open(makefile_path, 'w') as wf: - wf.write(new_content) -###################################################################################################################################################################################################################### -###################################################################################################################################################################################################################### - - -gds_path = './results/sky130hd/glayout/6_final.gds' -cdl_path = './results/sky130hd/glayout/6_final.cdl' -makefile_script = './Makefile' - -## PMOS -mynet, comp = get_gds_netlist('pmos_test', pmos, sky130, gds_path) - -net_file = cdl_path -mynet = compname_in_net(mynet) -with open(net_file, 'w') as wf: - wf.write(mynet) - -edit_makefile(comp, makefile_script) - -subproc_cmd = ['make', 'netgen_lvs'] -sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) -stdout, stderr = sub.communicate() - -print(stdout) - -if sub.returncode != 0: - print(f'LVS failed for pmos_test with error:\n {stderr}') -else: - print(f'LVS run successful for pmos_test') - -## NMOS -mynet, comp = get_gds_netlist('nmos_test', nmos, sky130, gds_path) - -net_file = cdl_path -mynet = compname_in_net(mynet) -with open(net_file, 'w') as wf: - wf.write(mynet) - -edit_makefile(comp, makefile_script) - -subproc_cmd = ['make', 'netgen_lvs'] -sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) -stdout, stderr = sub.communicate() - -print(stdout) - -if sub.returncode != 0: - print(f'LVS failed for nmos_test with error:\n {stderr}') -else: - print(f'LVS run successful for nmos_test') - -## DIFF_PAIR -mynet, comp = get_gds_netlist('diff_test', diff_pair, sky130, gds_path) - -net_file = cdl_path -mynet = compname_in_net(mynet) -with open(net_file, 'w') as wf: - wf.write(mynet) - -edit_makefile(comp, makefile_script) - -subproc_cmd = ['make', 'netgen_lvs'] -sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) -stdout, stderr = sub.communicate() - -print(stdout) - -if sub.returncode != 0: - print(f'LVS failed for diff_test with error:\n {stderr}') -else: - print(f'LVS run successful for diff_test') - -## OPAMP -mynet, comp = get_gds_netlist('opamp_test', opamp, sky130, gds_path) - -net_file = cdl_path -mynet = compname_in_net(mynet) -with open(net_file, 'w') as wf: - wf.write(mynet) - -edit_makefile(comp, makefile_script) - -subproc_cmd = ['make', 'netgen_lvs'] -sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) -stdout, stderr = sub.communicate() - -print(stdout) - -if sub.returncode != 0: - print(f'LVS failed for opamp_test with error:\n {stderr}') -else: - print(f'LVS run successful for opamp_test') \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/add_routing_blk.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/add_routing_blk.tcl new file mode 100644 index 000000000..9769ad0af --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/add_routing_blk.tcl @@ -0,0 +1,49 @@ +################################################### +# Create Routing Blockages around Macros for GF12 # +# Created by Minsoo Kim (mik226@eng.ucsd.edu) # +################################################### +set db [::ord::get_db] +set block [[$db getChip] getBlock] +set tech [$db getTech] + +set layer_M2 [$tech findLayer M2] +set layer_M3 [$tech findLayer M3] +set layer_C4 [$tech findLayer C4] + +set numTrack 5 + +set allInsts [$block getInsts] + +set cnt 0 + +foreach inst $allInsts { + set master [$inst getMaster] + set name [$master getName] + set loc_llx [lindex [$inst getLocation] 0] + set loc_lly [lindex [$inst getLocation] 1] + + if {[string match "*gf12*" $name]||[string match "IN12LP*" $name]} { + set w [$master getWidth] + set h [$master getHeight] + + set llx_Mx [expr $loc_llx - (128*$numTrack)] + set lly_Mx [expr $loc_lly - (128*$numTrack)] + set urx_Mx [expr $loc_llx + $w + (128*$numTrack)] + set ury_Mx [expr $loc_lly + $h + (128*$numTrack)] + + set llx_Cx $loc_llx + set lly_Cx [expr $loc_lly - (160*$numTrack)] + set urx_Cx [expr $loc_llx + $w] + set ury_Cx [expr $loc_lly + $h + (160*$numTrack)] + + set obs_M2 [odb::dbObstruction_create $block $layer_M2 $llx_Mx $lly_Mx $urx_Mx $ury_Mx] + set obs_M3 [odb::dbObstruction_create $block $layer_M3 $llx_Mx $lly_Mx $urx_Mx $ury_Mx] + set obs_C4 [odb::dbObstruction_create $block $layer_C4 $llx_Cx $lly_Cx $urx_Cx $ury_Cx] + + incr cnt + } +} + +if {$cnt != 0} { + puts "\[INFO\] created $cnt routing blockages over macros" +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/cdl.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/cdl.tcl new file mode 100644 index 000000000..7d6563f83 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/cdl.tcl @@ -0,0 +1,4 @@ +source $::env(SCRIPTS_DIR)/load.tcl +load_design 6_1_fill.odb 6_final.sdc "Starting CDL" + +write_cdl -masters $::env(CDL_FILE) $::env(RESULTS_DIR)/6_final.cdl diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/create_custom_connections.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/create_custom_connections.tcl new file mode 100644 index 000000000..a60abd99c --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/create_custom_connections.tcl @@ -0,0 +1,27 @@ +proc create_custom_connections {file_name} { + set block [ord::get_db_block] + set units [$block getDefUnits] + + set ch [open $file_name] + + set line [gets $ch] + set net [$block findNet [lindex $line 0]] + + while {![eof $ch]} { + set line [gets $ch] + if {[llength $line] == 0} {break} + + set inst [$block findInst [lindex $line 0]] + set iterm [$inst findITerm [lindex $line 1]] + + if {[ catch {odb::dbITerm_connect $iterm $net} ]} { + puts "Cannot create custom connection on: " + puts "instance name: [$inst getName]" + puts "MTerm name: [[$iterm getMTerm] getName]" + } + + } + + close $ch + +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/def_to_odb.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/def_to_odb.tcl new file mode 100644 index 000000000..614c606d1 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/def_to_odb.tcl @@ -0,0 +1,24 @@ +source $::env(SCRIPTS_DIR)/load.tcl +if {![info exists standalone] || $standalone} { + # Read lef + read_lef $::env(TECH_LEF) + read_lef $::env(SC_LEF) + if {[info exist ::env(ADDITIONAL_LEFS)]} { + foreach lef $::env(ADDITIONAL_LEFS) { + read_lef $lef + } + } + + # Read liberty files + foreach libFile $::env(LIB_FILES) { + read_liberty $libFile + } + + # Read def + read_def $::env(RESULTS_DIR)/2_floorplan_ro.def +} else { + puts "No DEF File?" +} + +write_db $::env(RESULTS_DIR)/2_floorplan_ro.odb +puts "ODB file written to $::env(RESULTS_DIR)" diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteNonClkNets.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteNonClkNets.tcl new file mode 100644 index 000000000..e4b07774e --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteNonClkNets.tcl @@ -0,0 +1,38 @@ +read_lef $::env(TECH_LEF) +read_lef $::env(SC_LEF) +if {[info exist ::env(ADDITIONAL_LEFS)]} { + foreach lef $::env(ADDITIONAL_LEFS) { + read_lef $lef + } +} + +# Read liberty files +foreach libFile $::env(LIB_FILES) { + read_liberty $libFile +} +# Read def and sdc +read_def $::env(RESULTS_DIR)/6_final.def + +set block [[[ord::get_db] getChip] getBlock] +set nets [$block getNets] +set insts [$block getInsts] + +# Delete all non-clock nets +foreach net $nets { + set sigType [$net getSigType] + set wire [$net getWire] + if {"$sigType" eq "SIGNAL" && "$wire" ne "NULL"} { + odb::dbWire_destroy $wire + } elseif {"$sigType" eq "POWER" || + "$sigType" eq "GROUND"} { + $net destroySWires + } +} + +# Delete fill cells to clean up screenshot +foreach inst $insts { + if {"[[$inst getMaster] getType]" eq "CORE_SPACER"} { + odb::dbInst_destroy $inst + } +} +write_def $::env(RESULTS_DIR)/6_final_only_clk.def diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deletePowerNets.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deletePowerNets.tcl new file mode 100644 index 000000000..972a0a06e --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deletePowerNets.tcl @@ -0,0 +1,29 @@ +read_lef $::env(TECH_LEF) +read_lef $::env(SC_LEF) +if {[info exist ::env(ADDITIONAL_LEFS)]} { + foreach lef $::env(ADDITIONAL_LEFS) { + read_lef $lef + } +} + +# Read liberty files +foreach libFile $::env(LIB_FILES) { + read_liberty $libFile +} +# Read def and sdc +read_def $::env(RESULTS_DIR)/6_final.def + +proc deleteNetByName {name} { + set db [ord::get_db] + set chip [$db getChip] + set block [$chip getBlock] + set net [$block findNet $name] + $net destroySWires + puts "\[INFO\] Deleted net '[$net getName]'" +} + +deleteNetByName VDD +deleteNetByName VSS + +write_def $::env(RESULTS_DIR)/6_final_no_power.def +exit diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteRoutingObstructions.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteRoutingObstructions.tcl new file mode 100644 index 000000000..6ed38f6ef --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteRoutingObstructions.tcl @@ -0,0 +1,11 @@ +proc deleteRoutingObstructions {} { + set db [ord::get_db] + set chip [$db getChip] + set block [$chip getBlock] + set obstructions [$block getObstructions] + + foreach obstruction $obstructions { + odb::dbObstruction_destroy $obstruction + } + puts "\[INFO\] Deleted [llength $obstructions] routing obstructions" +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/density_fill.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/density_fill.tcl new file mode 100644 index 000000000..30468b9de --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/density_fill.tcl @@ -0,0 +1,27 @@ +if {![info exists standalone] || $standalone} { + # Read lef + read_lef $::env(TECH_LEF) + read_lef $::env(SC_LEF) + if {[info exist ::env(ADDITIONAL_LEFS)]} { + foreach lef $::env(ADDITIONAL_LEFS) { + read_lef $lef + } + } + + # Read def + read_def $::env(RESULTS_DIR)/5_route.def +} else { + puts "Starting density fill" +} + +# Delete routing obstructions for final DEF +source scripts/deleteRoutingObstructions.tcl +deleteRoutingObstructions + +density_fill -rules $::env(FILL_CONFIG) + +if {![info exists standalone] || $standalone} { + write_def $::env(RESULTS_DIR)/6_1_fill.def + write_verilog $::env(RESULTS_DIR)/6_1_fill.v + exit +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_place.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_place.tcl new file mode 100644 index 000000000..6b09d6931 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_place.tcl @@ -0,0 +1,87 @@ +utl::set_metrics_stage "detailedplace__{}" +source $::env(SCRIPTS_DIR)/load.tcl +load_design 3_1_place_gp.odb 2_floorplan.sdc "Starting detailed placement" + +source $::env(PLATFORM_DIR)/setRC.tcl + +set_placement_padding -global \ + -left $::env(CELL_PAD_IN_SITES_DETAIL_PLACEMENT) \ + -right $::env(CELL_PAD_IN_SITES_DETAIL_PLACEMENT) + +# place header cells in the right, starting from row 1 upward (not randomly) +source $::env(SCRIPTS_DIR)/openfasoc/custom_place.tcl +customPlace_east [ord::get_db_block] "HEADER" 1 no + +if {$::env(PLATFORM) eq "sky130hd"} { + set_placement_padding -left 1 -right 1 -masters sky130_fd_sc_hd__decap_4 + set_placement_padding -left 1 -right 1 -masters sky130_fd_sc_hd__inv_1 + set_placement_padding -left 1 -right 1 -masters sky130_fd_sc_hd__nand2_1 + set_placement_padding -left 0 -right 0 -masters sky130_fd_sc_hd__tapvpwrvgnd_1 +} elseif {$::env(PLATFORM) eq "sky130hs"} { + set_placement_padding -left 1 -right 1 -masters sky130_fd_sc_hs__decap_4 + set_placement_padding -left 0 -right 0 -masters sky130_fd_sc_hs__inv_1 + set_placement_padding -left 0 -right 0 -masters sky130_fd_sc_hs__nand2_1 + set_placement_padding -left 0 -right 0 -masters sky130_fd_sc_hs__tapvpwrvgnd_1 +} elseif {$::env(PLATFORM) eq "sky130hvl"} { + set_placement_padding -left 0 -right 0 -masters sky130_fd_sc_hvl__inv_1 + set_placement_padding -left 1 -right 1 -masters sky130_fd_sc_hvl__decap_4 + set_placement_padding -left 0 -right 0 -masters sky130_fd_sc_hvl__nand2_1 +} elseif {$::env(PLATFORM) eq "sky130osu12Ths"} { + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_12T_hs__inv_1 + set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_12T_hs__decap_1 + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_12T_hs__nand2_1 +} elseif {$::env(PLATFORM) eq "sky130osu12Tms"} { + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_12T_ms__inv_1 + set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_12T_ms__decap_1 + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_12T_ms__nand2_1 +} elseif {$::env(PLATFORM) eq "sky130osu12Tls"} { + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_12T_ls__inv_1 + set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_12T_ls__decap_1 + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_12T_ls__nand2_1 +} elseif {$::env(PLATFORM) eq "sky130osu15Ths"} { + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_15T_hs__inv_1 + set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_15T_hs__decap_1 + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_15T_hs__nand2_1 +} elseif {$::env(PLATFORM) eq "sky130osu15Tms"} { + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_15T_ms__inv_1 + set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_15T_ms__decap_1 + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_15T_ms__nand2_1 +} elseif {$::env(PLATFORM) eq "sky130osu15Tls"} { + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_15T_ls__inv_1 + set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_15T_ls__decap_1 + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_15T_ls__nand2_1 +} elseif {$::env(PLATFORM) eq "sky130osu18Ths"} { + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_18T_hs__inv_1 + set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_18T_hs__decap_1 + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_18T_hs__nand2_1 +} elseif {$::env(PLATFORM) eq "sky130osu18Tms"} { + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_18T_ms__inv_1 + set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_18T_ms__decap_1 + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_18T_ms__nand2_1 +} elseif {$::env(PLATFORM) eq "sky130osu18Tls"} { + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_18T_ls__inv_1 + set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_18T_ls__decap_1 + set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_18T_ls__nand2_1 +} + +detailed_placement + +if {[info exists ::env(ENABLE_DPO)] && $::env(ENABLE_DPO)} { + if {[info exist ::env(DPO_MAX_DISPLACEMENT)]} { + improve_placement -max_displacement $::env(DPO_MAX_DISPLACEMENT) + } else { + improve_placement + } +} +optimize_mirroring + +utl::info FLW 12 "Placement violations [check_placement -verbose]." + +estimate_parasitics -placement + +source $::env(SCRIPTS_DIR)/report_metrics.tcl +report_metrics "detailed place" + +if {![info exists save_checkpoint] || $save_checkpoint} { + write_db $::env(RESULTS_DIR)/3_5_place_dp.odb +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_route.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_route.tcl new file mode 100644 index 000000000..7614eba30 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_route.tcl @@ -0,0 +1,53 @@ +utl::set_metrics_stage "detailedroute__{}" +source $::env(SCRIPTS_DIR)/load.tcl +if { [info exists ::env(USE_WXL)]} { + set db_file 4_cts.odb +} else { + set db_file 5_1_grt.odb +} +load_design $db_file 4_cts.sdc "Starting detailed routing" +set_propagated_clock [all_clocks] + +set_thread_count $::env(NUM_CORES) + +set additional_args "" +if { [info exists ::env(dbProcessNode)]} { + append additional_args " -db_process_node $::env(dbProcessNode)" +} +if { [info exists ::env(OR_SEED)]} { + append additional_args " -or_seed $::env(OR_SEED)" +} +if { [info exists ::env(OR_K)]} { + append additional_args " -or_k $::env(OR_K)" +} + +if { [info exists ::env(MIN_ROUTING_LAYER)]} { + append additional_args " -bottom_routing_layer $::env(MIN_ROUTING_LAYER)" +} +if { [info exists ::env(MAX_ROUTING_LAYER)]} { + append additional_args " -top_routing_layer $::env(MAX_ROUTING_LAYER)" +} +if { [info exists ::env(VIA_IN_PIN_MIN_LAYER)]} { + append additional_args " -via_in_pin_bottom_layer $::env(VIA_IN_PIN_MIN_LAYER)" +} +if { [info exists ::env(VIA_IN_PIN_MAX_LAYER)]} { + append additional_args " -via_in_pin_top_layer $::env(VIA_IN_PIN_MAX_LAYER)" +} +if { [info exists ::env(DISABLE_VIA_GEN)]} { + append additional_args " -disable_via_gen" +} + + +detailed_route -output_drc $::env(REPORTS_DIR)/5_route_drc.rpt \ + -output_maze $::env(RESULTS_DIR)/maze.log \ + -save_guide_updates \ + -verbose 1 \ + {*}$additional_args + +if { [info exists ::env(POST_DETAIL_ROUTE_TCL)] } { + source $::env(POST_DETAIL_ROUTE_TCL) +} + +if {![info exists save_checkpoint] || $save_checkpoint} { + write_db $::env(RESULTS_DIR)/5_2_route.odb +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/fillcell.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/fillcell.tcl new file mode 100644 index 000000000..f9a2dc919 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/fillcell.tcl @@ -0,0 +1,11 @@ +source $::env(SCRIPTS_DIR)/load.tcl +load_design 4_1_cts.odb 3_place.sdc "Starting fill cell" + +set_propagated_clock [all_clocks] + +filler_placement $::env(FILL_CELLS) +#check_placement + +if {![info exists save_checkpoint] || $save_checkpoint} { + write_db $::env(RESULTS_DIR)/4_2_cts_fillcell.odb +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/final_report.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/final_report.tcl new file mode 100644 index 000000000..a4867f546 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/final_report.tcl @@ -0,0 +1,61 @@ +utl::set_metrics_stage "finish__{}" +source $::env(SCRIPTS_DIR)/load.tcl +load_design 6_1_fill.odb 6_1_fill.sdc "Starting final report" + +set_propagated_clock [all_clocks] + +# Delete routing obstructions for final DEF +source $::env(SCRIPTS_DIR)/deleteRoutingObstructions.tcl +deleteRoutingObstructions + +write_db $::env(RESULTS_DIR)/6_final.odb +write_def $::env(RESULTS_DIR)/6_final.def +write_verilog $::env(RESULTS_DIR)/6_final.v + +# Run extraction and STA +if {[info exist ::env(RCX_RULES)]} { + + # Set RC corner for RCX + # Set in config.mk + if {[info exist ::env(RCX_RC_CORNER)]} { + set rc_corner $::env(RCX_RC_CORNER) + } + # RCX section + define_process_corner -ext_model_index 0 X + extract_parasitics -ext_model_file $::env(RCX_RULES) + # Write Spef + write_spef $::env(RESULTS_DIR)/6_final.spef + file delete $::env(DESIGN_NAME).totCap + # Read Spef for OpenSTA + read_spef $::env(RESULTS_DIR)/6_final.spef + # Static IR drop analysis + if {[info exist ::env(PWR_NETS_VOLTAGES)]} { + dict for {pwrNetName pwrNetVoltage} {*}$::env(PWR_NETS_VOLTAGES) { + set_pdnsim_net_voltage -net ${pwrNetName} -voltage ${pwrNetVoltage} + analyze_power_grid -net ${pwrNetName} + } + } else { + puts "IR drop analysis for power nets is skipped because PWR_NETS_VOLTAGES is undefined" + } + if {[info exist ::env(GND_NETS_VOLTAGES)]} { + dict for {gndNetName gndNetVoltage} {*}$::env(GND_NETS_VOLTAGES) { + set_pdnsim_net_voltage -net ${gndNetName} -voltage ${gndNetVoltage} + analyze_power_grid -net ${gndNetName} + } + } else { + puts "IR drop analysis for ground nets is skipped because GND_NETS_VOLTAGES is undefined" + } + +} else { + puts "OpenRCX is not enabled for this platform." +} + +source $::env(SCRIPTS_DIR)/report_metrics.tcl +report_metrics "finish" + +# Save a final image if openroad is compiled with the gui +# if {[expr [llength [info procs save_image]] > 0]} { +# gui::show "source $::env(SCRIPTS_DIR)/save_images.tcl" false +# } + +# ^ commented 22 Dec 23 \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/floorplan.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/floorplan.tcl new file mode 100644 index 000000000..bee5cb9cc --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/floorplan.tcl @@ -0,0 +1,153 @@ +utl::set_metrics_stage "floorplan__{}" +source $::env(SCRIPTS_DIR)/load.tcl +load_design 1_synth.v 1_synth.sdc "Starting floorplan" + +set num_instances [llength [get_cells -hier *]] +puts "number instances in verilog is $num_instances" + +# Initialize floorplan using ICeWall FOOTPRINT +# ---------------------------------------------------------------------------- + +if {[info exists ::env(FOOTPRINT)]} { + + ICeWall load_footprint $env(FOOTPRINT) + + initialize_floorplan \ + -die_area [ICeWall get_die_area] \ + -core_area [ICeWall get_core_area] \ + -site $::env(PLACE_SITE) + + ICeWall init_footprint $env(SIG_MAP_FILE) + + +# Initialize floorplan using CORE_UTILIZATION +# ---------------------------------------------------------------------------- +} elseif {[info exists ::env(CORE_UTILIZATION)] && $::env(CORE_UTILIZATION) != "" } { + initialize_floorplan -utilization $::env(CORE_UTILIZATION) \ + -aspect_ratio $::env(CORE_ASPECT_RATIO) \ + -core_space $::env(CORE_MARGIN) \ + -site $::env(PLACE_SITE) + +# Initialize floorplan using DIE_AREA/CORE_AREA +# ---------------------------------------------------------------------------- +} else { + initialize_floorplan -die_area $::env(DIE_AREA) \ + -core_area $::env(CORE_AREA) \ + -site $::env(PLACE_SITE) +} + +if { [info exists ::env(MAKE_TRACKS)] } { + source $::env(MAKE_TRACKS) +} elseif {[file exists $::env(PLATFORM_DIR)/make_tracks.tcl]} { + source $::env(PLATFORM_DIR)/make_tracks.tcl +} else { + make_tracks +} + +if {[info exists ::env(FOOTPRINT_TCL)]} { + source $::env(FOOTPRINT_TCL) + initialize_padring +} + +# remove buffers inserted by yosys/abc +remove_buffers + +##### Restructure for timing ######### +if { [info exist ::env(RESYNTH_TIMING_RECOVER)] && $::env(RESYNTH_TIMING_RECOVER) == 1 } { + repair_design + repair_timing + # pre restructure area/timing report (ideal clocks) + puts "Post synth-opt area" + report_design_area + report_worst_slack -min -digits 3 + puts "Post synth-opt wns" + report_worst_slack -max -digits 3 + puts "Post synth-opt tns" + report_tns -digits 3 + + if {![info exists save_checkpoint] || $save_checkpoint} { + write_verilog $::env(RESULTS_DIR)/2_pre_abc_timing.v + } + + restructure -target timing -liberty_file $::env(DONT_USE_SC_LIB) \ + -work_dir $::env(RESULTS_DIR) + + if {![info exists save_checkpoint] || $save_checkpoint} { + write_verilog $::env(RESULTS_DIR)/2_post_abc_timing.v + } + + # post restructure area/timing report (ideal clocks) + remove_buffers + repair_design + repair_timing + + puts "Post restructure-opt wns" + report_worst_slack -max -digits 3 + puts "Post restructure-opt tns" + report_tns -digits 3 + + # remove buffers inserted by optimization + remove_buffers +} + + +puts "Default units for flow" +report_units +report_units_metric +source $::env(SCRIPTS_DIR)/report_metrics.tcl +report_metrics "floorplan final" false + +if { [info exist ::env(RESYNTH_AREA_RECOVER)] && $::env(RESYNTH_AREA_RECOVER) == 1 } { + + utl::push_metrics_stage "floorplan__{}__pre_restruct" + set num_instances [llength [get_cells -hier *]] + puts "number instances before restructure is $num_instances" + puts "Design Area before restructure" + report_design_area + report_design_area_metrics + utl::pop_metrics_stage + + if {![info exists save_checkpoint] || $save_checkpoint} { + write_verilog $::env(RESULTS_DIR)/2_pre_abc.v + } + + set tielo_cell_name [lindex $env(TIELO_CELL_AND_PORT) 0] + set tielo_lib_name [get_name [get_property [lindex [get_lib_cell $tielo_cell_name] 0] library]] + set tielo_port $tielo_lib_name/$tielo_cell_name/[lindex $env(TIELO_CELL_AND_PORT) 1] + + set tiehi_cell_name [lindex $env(TIEHI_CELL_AND_PORT) 0] + set tiehi_lib_name [get_name [get_property [lindex [get_lib_cell $tiehi_cell_name] 0] library]] + set tiehi_port $tiehi_lib_name/$tiehi_cell_name/[lindex $env(TIEHI_CELL_AND_PORT) 1] + + restructure -liberty_file $::env(DONT_USE_SC_LIB) -target "area" \ + -tiehi_port $tiehi_port \ + -tielo_port $tielo_port \ + -work_dir $::env(RESULTS_DIR) + + # remove buffers inserted by abc + remove_buffers + + if {![info exists save_checkpoint] || $save_checkpoint} { + write_verilog $::env(RESULTS_DIR)/2_post_abc.v + } + utl::push_metrics_stage "floorplan__{}__post_restruct" + set num_instances [llength [get_cells -hier *]] + puts "number instances after restructure is $num_instances" + puts "Design Area after restructure" + report_design_area + report_design_area_metrics + utl::pop_metrics_stage +} + +if { [info exists ::env(POST_FLOORPLAN_TCL)] } { + source $::env(POST_FLOORPLAN_TCL) +} + +if {![info exists save_checkpoint] || $save_checkpoint} { + if {[info exists ::env(GALLERY_REPORT)] && $::env(GALLERY_REPORT) != 0} { + write_def $::env(RESULTS_DIR)/2_1_floorplan.def + } + write_def $::env(RESULTS_DIR)/2_1_floorplan.def + write_db $::env(RESULTS_DIR)/2_1_floorplan.odb + write_sdc $::env(RESULTS_DIR)/2_floorplan.sdc +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place.tcl new file mode 100644 index 000000000..f008eda50 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place.tcl @@ -0,0 +1,81 @@ +utl::set_metrics_stage "globalplace__{}" +source $::env(SCRIPTS_DIR)/load.tcl +load_design 2_floorplan_ro.odb 2_floorplan.sdc "Starting global placement" + +set_dont_use $::env(DONT_USE_CELLS) + +# set fastroute layer reduction +if {[info exist env(FASTROUTE_TCL)]} { + source $env(FASTROUTE_TCL) +} else { + set_global_routing_layer_adjustment $env(MIN_ROUTING_LAYER)-$env(MAX_ROUTING_LAYER) 0.5 + set_routing_layers -signal $env(MIN_ROUTING_LAYER)-$env(MAX_ROUTING_LAYER) + set_macro_extension 2 +} +# check the lower boundary of the PLACE_DENSITY and add PLACE_DENSITY_LB_ADDON if it exists +if {[info exist ::env(PLACE_DENSITY_LB_ADDON)]} { + set place_density_lb [gpl::get_global_placement_uniform_density \ + -pad_left $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ + -pad_right $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT)] + set place_density [expr $place_density_lb + ((1.0 - $place_density_lb) * $::env(PLACE_DENSITY_LB_ADDON)) + 0.01] + if {$place_density > 1.0} { + utl::error FLW 24 "Place density exceeds 1.0 (current PLACE_DENSITY_LB_ADDON = $::env(PLACE_DENSITY_LB_ADDON)). Please check if the value of PLACE_DENSITY_LB_ADDON is between 0 and 0.99." + } +} else { + set place_density $::env(PLACE_DENSITY) +} + +# TEMPORARY FIX!!!! (sorry) ASSUME ROUTABILITY DRIVEN +set global_placement_args "" +append global_placement_args " -routability_driven" + +if { 0 != [llength [array get ::env GLOBAL_PLACEMENT_ARGS]] } { +global_placement -density $place_density \ + -pad_left $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ + -pad_right $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ + {*}$global_placement_args \ + $::env(GLOBAL_PLACEMENT_ARGS) +} else { +global_placement -density $place_density \ + -pad_left $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ + -pad_right $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ + {*}$global_placement_args +} + +# force divider to be placed on the right side +set db [::ord::get_db] +set block [[$db getChip] getBlock] +set tech [$db getTech] + +set core [$block getCoreArea] +set core_xl [$core xMin] +set core_yl [$core yMin] +set core_xh [$core xMax] +set core_yh [$core yMax] + +set div_cen_x [expr double(($core_xl + $core_xh) * 3 / 4 / 1000)] +set div_cen_y [expr double(($core_yl + $core_yh) / 2 / 1000)] + +set div_cen [concat $div_cen_x $div_cen_y] + +set allInsts [$block getInsts] + +foreach inst $allInsts { + set master [$inst getMaster] + set name [$inst getName] + if {[string match "_*_" $name]} { + place_cell -inst $name \ + -origin $div_cen \ + -orient R0 + } +} + + +estimate_parasitics -placement + +source $::env(SCRIPTS_DIR)/report_metrics.tcl +report_metrics "global place" false + +if {![info exists save_checkpoint] || $save_checkpoint} { + write_db $::env(RESULTS_DIR)/3_1_place_gp.odb +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place_skip_io.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place_skip_io.tcl new file mode 100644 index 000000000..25182a451 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place_skip_io.tcl @@ -0,0 +1,34 @@ +source $::env(SCRIPTS_DIR)/load.tcl +load_design 2_floorplan.odb 2_floorplan.sdc "Starting global placement" + +if {[info exists ::env(HAS_IO_CONSTRAINTS)] && $::env(HAS_IO_CONSTRAINTS) != 0} { + puts "Has top down IO Constraints. Skip global placement without IOs" +} else { +# check the lower boundary of the PLACE_DENSITY and add PLACE_DENSITY_LB_ADDON if it exists + if {[info exist ::env(PLACE_DENSITY_LB_ADDON)]} { + set place_density_lb [gpl::get_global_placement_uniform_density \ + -pad_left $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ + -pad_right $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT)] + set place_density [expr $place_density_lb + $::env(PLACE_DENSITY_LB_ADDON) + 0.01] + if {$place_density > 1.0} { + set place_density 1.0 + } + } else { + set place_density $::env(PLACE_DENSITY) + } + + if { 0 != [llength [array get ::env GLOBAL_PLACEMENT_ARGS]] } { + global_placement -skip_io -density $place_density \ + -pad_left $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ + -pad_right $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ + $::env(GLOBAL_PLACEMENT_ARGS) + } else { + global_placement -skip_io -density $place_density \ + -pad_left $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ + -pad_right $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) + } +} + +if {![info exists save_checkpoint] || $save_checkpoint} { + write_db $::env(RESULTS_DIR)/3_1_place_gp_skip_io.odb +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_route.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_route.tcl new file mode 100644 index 000000000..528f12f66 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_route.tcl @@ -0,0 +1,37 @@ +utl::set_metrics_stage "globalroute__{}" +source $::env(SCRIPTS_DIR)/load.tcl +load_design 4_cts.odb 4_cts.sdc "Starting global routing" + +if {[info exist env(PRE_GLOBAL_ROUTE)]} { + source $env(PRE_GLOBAL_ROUTE) +} + +if {[info exist env(FASTROUTE_TCL)]} { + source $env(FASTROUTE_TCL) +} else { + set_global_routing_layer_adjustment $env(MIN_ROUTING_LAYER)-$env(MAX_ROUTING_LAYER) 0.5 + set_routing_layers -signal $env(MIN_ROUTING_LAYER)-$env(MAX_ROUTING_LAYER) + set_macro_extension 2 +} + +global_route -guide_file $env(RESULTS_DIR)/route.guide \ + -congestion_iterations 100 \ + -verbose + +set_propagated_clock [all_clocks] +estimate_parasitics -global_routing + +source $env(SCRIPTS_DIR)/report_metrics.tcl +report_metrics "global route" + +puts "\n==========================================================================" +puts "check_antennas" +puts "--------------------------------------------------------------------------" +check_antennas -report_file $env(REPORTS_DIR)/antenna.log -report_violating_nets + +# Write SDC to results with updated clock periods that are just failing. +# Use make target update_sdc_clock to install the updated sdc. +source [file join $env(SCRIPTS_DIR) "write_ref_sdc.tcl"] +if {![info exists save_checkpoint] || $save_checkpoint} { + write_db $env(RESULTS_DIR)/5_1_grt.odb +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/gui.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/gui.tcl new file mode 100644 index 000000000..e236763b2 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/gui.tcl @@ -0,0 +1,12 @@ +if {![info exists standalone] || $standalone} { + # Read lef + read_lef $::env(TECH_LEF) + read_lef $::env(SC_LEF) + if {[info exist ::env(ADDITIONAL_LEFS)]} { + foreach lef $::env(ADDITIONAL_LEFS) { + read_lef $lef + } + } + + read_def $::env(RESULTS_DIR)/6_final.def +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement.tcl new file mode 100644 index 000000000..579fa4825 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement.tcl @@ -0,0 +1,13 @@ +source $::env(SCRIPTS_DIR)/load.tcl +load_design 3_1_place_gp_skip_io.odb 2_floorplan.sdc "Starting io placement" + +if {[info exists ::env(IO_CONSTRAINTS)]} { + source $::env(IO_CONSTRAINTS) +} +place_pins -hor_layer $::env(IO_PLACER_H) \ + -ver_layer $::env(IO_PLACER_V) \ + {*}$::env(PLACE_PINS_ARGS) + +if {![info exists save_checkpoint] || $save_checkpoint} { + write_db $::env(RESULTS_DIR)/3_2_place_iop.odb +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement_random.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement_random.tcl new file mode 100644 index 000000000..48db240be --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement_random.tcl @@ -0,0 +1,14 @@ +source $::env(SCRIPTS_DIR)/load.tcl +load_design 2_1_floorplan.odb 1_synth.sdc "Starting random IO placement" + +if {[info exists ::env(IO_CONSTRAINTS)]} { + source $::env(IO_CONSTRAINTS) +} +place_pins -hor_layer $::env(IO_PLACER_H) \ + -ver_layer $::env(IO_PLACER_V) \ + -random \ + {*}$::env(PLACE_PINS_ARGS) + +if {![info exists save_checkpoint] || $save_checkpoint} { + write_db $::env(RESULTS_DIR)/2_2_floorplan_io.odb +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/klayout.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/klayout.tcl new file mode 100644 index 000000000..4741ae8e2 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/klayout.tcl @@ -0,0 +1,20 @@ +if {[info exists ::env(FILL_CONFIG)]} { + set fill_config $::env(FILL_CONFIG) +} else { + set fill_config "" +} + +if {[info exists ::env(SEAL_GDS)]} { + set seal_gds $::env(SEAL_GDS) +} else { + set seal_gds "" +} + +exec klayout -zz -rd design_name=$::env(DESIGN_NAME) \ + -rd in_def=$::env(RESULTS_DIR)/6_final.def \ + -rd in_gds="$::env(GDS_FILES)" \ + -rd config_file=$fill_config \ + -rd seal_gds=$seal_gds \ + -rd out_gds=$::env(RESULTS_DIR)/6_1_merged.gds \ + -rd tech_file=$::env(OBJECTS_DIR)/klayout.lyt \ + -rm $::env(UTILS_DIR)/def2gds.py diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/load.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/load.tcl new file mode 100644 index 000000000..1fe5d3836 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/load.tcl @@ -0,0 +1,35 @@ +proc load_design {design_file sdc_file msg} { + if {![info exists standalone] || $standalone} { + # Read liberty files + source $::env(SCRIPTS_DIR)/read_liberty.tcl + + # Read design files + set ext [file extension $design_file] + if {$ext == ".v"} { + read_lef $::env(TECH_LEF) + read_lef $::env(SC_LEF) + if {[info exist ::env(ADDITIONAL_LEFS)]} { + foreach lef $::env(ADDITIONAL_LEFS) { + read_lef $lef + } + } + read_verilog $::env(RESULTS_DIR)/$design_file + link_design $::env(DESIGN_NAME) + } elseif {$ext == ".odb"} { + read_db $::env(RESULTS_DIR)/$design_file + } else { + error "Unrecognized input file $design_file" + } + + # Read SDC file + read_sdc $::env(RESULTS_DIR)/$sdc_file + + if [file exists $::env(PLATFORM_DIR)/derate.tcl] { + source $::env(PLATFORM_DIR)/derate.tcl + } + + source $::env(PLATFORM_DIR)/setRC.tcl + } else { + puts $msg + } +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/macro_place.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/macro_place.tcl new file mode 100644 index 000000000..29f532c99 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/macro_place.tcl @@ -0,0 +1,134 @@ +source $::env(SCRIPTS_DIR)/load.tcl +load_design 2_3_floorplan_tdms.odb 1_synth.sdc "Starting macro placement" + +proc find_macros {} { + set macros "" + + set db [ord::get_db] + set block [[$db getChip] getBlock] + foreach inst [$block getInsts] { + set inst_master [$inst getMaster] + + # BLOCK means MACRO cells + if { [string match [$inst_master getType] "BLOCK"] } { + append macros " " $inst + } + } + return $macros +} + +if {[find_macros] != ""} { +# If wrappers defined replace macros with their wrapped version +# # ---------------------------------------------------------------------------- + if {[info exists ::env(MACRO_WRAPPERS)]} { + source $::env(MACRO_WRAPPERS) + + set wrapped_macros [dict keys [dict get $wrapper around]] + set db [ord::get_db] + set block [ord::get_db_block] + + foreach inst [$block getInsts] { + if {[lsearch -exact $wrapped_macros [[$inst getMaster] getName]] > -1} { + set new_master [dict get $wrapper around [[$inst getMaster] getName]] + puts "Replacing [[$inst getMaster] getName] with $new_master for [$inst getName]" + $inst swapMaster [$db findMaster $new_master] + } + } + } + + lassign $::env(MACRO_PLACE_HALO) halo_x halo_y + lassign $::env(MACRO_PLACE_CHANNEL) channel_x channel_y + set halo_max [expr max($halo_x, $halo_y)] + set channel_max [expr max($channel_x, $channel_y)] + set blockage_width [expr max($halo_max, $channel_max/2)] + + + if {[info exists ::env(MACRO_BLOCKAGE_HALO)]} { + set blockage_width $::env(MACRO_BLOCKAGE_HALO) + } + + if {[info exists ::env(RTLMP_FLOW)]} { + puts "RTLMP Flow enabled..." + set additional_partition_args "" + if { [info exists ::env(RTLMP_MAX_INST)]} { + append additional_partition_args " -max_num_inst $env(RTLMP_MAX_INST)" + } + if { [info exists ::env(RTLMP_MIN_INST)]} { + append additional_partition_args " -min_num_inst $env(RTLMP_MIN_INST)" + } + if { [info exists ::env(RTLMP_MAX_MACRO)]} { + append additional_partition_args " -max_num_macro $env(RTLMP_MAX_MACRO)" + } + if { [info exists ::env(RTLMP_MIN_MACRO)]} { + append additional_partition_args " -min_num_macro $env(RTLMP_MIN_MACRO)" + } + + set additional_rtlmp_args "" + + append additional_rtlmp_args " -macro_halo $halo_max" + + if { [info exists ::env(RTLMP_AREA_WT)]} { + append additional_rtlmp_args " -area_weight $env(RTLMP_AREA_WT)" + } + if { [info exists ::env(RTLMP_WIRELENGTH_WT)]} { + append additional_rtlmp_args " -wirelength_weight $env(RTLMP_WIRELENGTH_WT)" + } + if { [info exists ::env(RTLMP_OUTLINE_WT)]} { + append additional_rtlmp_args " -outline_weight $env(RTLMP_OUTLINE_WT)" + } + if { [info exists ::env(RTLMP_BOUNDARY_WT)]} { + append additional_rtlmp_args " -boundary_weight $env(RTLMP_BOUNDARY_WT)" + } + if { [info exists ::env(RTLMP_MACRO_BLOCKAGE_WT)]} { + append additional_rtlmp_args " -macro_blockage_weight $env(RTLMP_MACRO_BLOCKAGE_WT)" + } + if { [info exists ::env(RTLMP_LOCATION_WEIGHT)]} { + append additional_rtlmp_args " -location_weight $env(RTLMP_LOCATION_WEIGHT)" + } + if { [info exists ::env(RTLMP_NOTCH_WT)]} { + append additional_rtlmp_args " -notch_weight $env(RTLMP_NOTCH_WT)" + } + if { [info exists ::env(RTLMP_CONFIG_FILE)]} { + append additional_rtlmp_args " -config_file $env(RTLMP_CONFIG_FILE)" + } + if { [info exists ::env(RTLMP_RPT_FILE)]} { + append additional_rtlmp_args " -report_file $env(RTLMP_RPT_FILE)" + } + if { [info exists ::env(RTLMP_BLOCKAGE_FILE)]} { + append additional_rtlmp_args " -macro_blockage_file $env(RTLMP_BLOCKAGE_FILE)" + } + + partition_design -net_threshold 5 \ + -virtual_weight 1 \ + -num_hop 3 \ + -timing_weight 1 \ + -report_directory $env(RTLMP_RPT_DIR) \ + -report_file $env(RTLMP_RPT_FILE) \ + {*}$additional_partition_args + + rtl_macro_placer -report_directory $env(RTLMP_RPT_DIR) \ + {*}$additional_rtlmp_args + + puts "Delete buffers for RTLMP flow..." + remove_buffers + } else { + if {[info exists ::env(MACRO_PLACEMENT)]} { + source $::env(SCRIPTS_DIR)/read_macro_placement.tcl + puts "\[INFO\]\[FLOW-xxxx\] Using manual macro placement file $::env(MACRO_PLACEMENT)" + read_macro_placement $::env(MACRO_PLACEMENT) + } else { + macro_placement \ + -halo $::env(MACRO_PLACE_HALO) \ + -channel $::env(MACRO_PLACE_CHANNEL) + } + } + + source $::env(SCRIPTS_DIR)/placement_blockages.tcl + block_channels $blockage_width +} else { + puts "No macros found: Skipping macro_placement" +} + +if {![info exists save_checkpoint] || $save_checkpoint} { + write_db $::env(RESULTS_DIR)/2_4_floorplan_macro.odb +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/odb_to_def.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/odb_to_def.tcl new file mode 100644 index 000000000..8fb761993 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/odb_to_def.tcl @@ -0,0 +1,5 @@ +source $::env(SCRIPTS_DIR)/load.tcl +load_design 2_6_floorplan_pdn.odb 2_floorplan.sdc "Starting file transposition" + +write_def $::env(RESULTS_DIR)/2_floorplan.def +puts "DEF file written to $::env(RESULTS_DIR)" diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/README.md b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/README.md new file mode 100644 index 000000000..1d6cde22a --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/README.md @@ -0,0 +1,13 @@ +Scripts not in OpenROAD-flow-scripts, created for use within the OpenROAD flow in OpenFASOC. + +### Scripts part of the flow: + +- `add_ndr_rules.tcl`: adds NDR rules before global route +- `create_custom_connections.tcl`: connects instances to specified net before global route +- `pre_global_route.tcl`: script called before global route in OpenROAD (PRE_GLOBAL_ROUTE env var) +- `read_domain_instances.tcl`: adds instances to voltage domain after floorplan +- `create_routable_power_net.tcl`: creates the r_VIN net in the design, allowing for multi-voltage domain routes + +### Custom scripts: + +-`custom_place.tcl`: procedures for placing cells arbitrarily diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/add_ndr_rules.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/add_ndr_rules.tcl new file mode 100644 index 000000000..ddd8c0669 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/add_ndr_rules.tcl @@ -0,0 +1,11 @@ +set block [ord::get_db_block] + +# Add 2W, 2S rule to ring oscillator input +create_ndr -name NDR_5W_5S \ + -spacing { *5 } \ + -width { *5 } + +set ndr [$block findNonDefaultRule NDR_5W_5S] +$ndr setHardSpacing 1 + +assign_ndr -ndr NDR_5W_5S -net r_VIN diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_custom_connections.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_custom_connections.tcl new file mode 100644 index 000000000..a60abd99c --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_custom_connections.tcl @@ -0,0 +1,27 @@ +proc create_custom_connections {file_name} { + set block [ord::get_db_block] + set units [$block getDefUnits] + + set ch [open $file_name] + + set line [gets $ch] + set net [$block findNet [lindex $line 0]] + + while {![eof $ch]} { + set line [gets $ch] + if {[llength $line] == 0} {break} + + set inst [$block findInst [lindex $line 0]] + set iterm [$inst findITerm [lindex $line 1]] + + if {[ catch {odb::dbITerm_connect $iterm $net} ]} { + puts "Cannot create custom connection on: " + puts "instance name: [$inst getName]" + puts "MTerm name: [[$iterm getMTerm] getName]" + } + + } + + close $ch + +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_routable_power_net.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_routable_power_net.tcl new file mode 100644 index 000000000..3ae91030a --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_routable_power_net.tcl @@ -0,0 +1,94 @@ +# Create routable net from power net +# +# This procedure creates a net that will allow routing from instances that +# should connect to a power net other than the grid they're placed in. +# +# For example, in the temp-sense-gen this net allows routing from the HEADER +# cells to the VIN power ring, because connections to the regular VIN net +# aren't routed since it's a power net with a stdcell grid attached. +# +# Arguments: +# - source_net_name: name of the original power net +# - num_connection_points: number of connection points routed in the ring (optional) + +proc create_routable_power_net {source_net_name {num_connection_points 1}} { + set block [ord::get_db_block] + set tech [ord::get_db_tech] + + # Get objects from source net + set net [$block findNet $source_net_name] + set bterm [$net getBTerms] + set bpin [$bterm getBPins] + + # Create routable net in the database + set r_pin "r_$source_net_name" + set r_net [odb::dbNet_create $block $r_pin] + + if {$num_connection_points == 1} { + # Create block terminal for routable net + set r_bterm [odb::dbBTerm_create $r_net $r_pin] + set r_bpin [odb::dbBPin_create $r_bterm] + $r_bpin setPlacementStatus "FIRM" + + # Set to r_VIN the same physical box as that of VIN (its ring) + foreach box [$bpin getBoxes] { + set layer [$box getTechLayer] ;# get metal layer + odb::dbBox_create $r_bpin $layer [$box xMin] [$box yMin] \ + [$box xMax] [$box yMax] ;# create physical box for net + } + } elseif {$num_connection_points > 1} { + # Create num_connection_points block terminals + for {set n 0} {$n < $num_connection_points} {incr n} { + set r_bterm($n) [odb::dbBTerm_create $r_net "$r_pin\($n\)"] + set r_bpin($n) [odb::dbBPin_create $r_bterm($n)] + $r_bpin($n) setPlacementStatus "FIRM" + + # Split the source net's physical box into num_connection_points parts + # and assign each part to a block terminal + foreach box [$bpin getBoxes] { + set layer [$box getTechLayer] ;# get metal layer + + # Get direction to divide physical box (horizontally or vertically) + set first_box [lindex [$bpin getBoxes] 0] + set direction [$first_box getDir] + + if {$direction == 1} { + # Divide net box horizontally + # Careful: the resulting coordinates must stick to the manufacturing grid + # hence the r2grid procedure (defined below) + set dx [r2grid [expr {([$box xMax] - [$box xMin])/$num_connection_points}] $tech] + set xMin($n) [expr {[$box xMin] + $n*$dx}] + set xMax($n) [expr {$xMin($n) + $dx}] + + odb::dbBox_create $r_bpin($n) $layer $xMin($n) [$box yMin] \ + $xMax($n) [$box yMax] ;# create physical box for net + + } elseif {$direction == 0} { + # Divide net box vertically + # Careful: the resulting coordinates must stick to the manufacturing grid + # hence the r2grid procedure (defined below) + set dy [r2grid [expr {([$box yMax] - [$box yMin])/$num_connection_points}] $tech] + set yMin($n) [expr {[$box yMin] + $n*$dy}] + set yMax($n) [expr {$yMin($n) + $dy}] + + odb::dbBox_create $r_bpin($n) $layer [$box xMin] $yMin($n) \ + [$box xMax] $yMax($n) ;# create physical box for net + + } else { + puts "WARNING: Could not determine power net pins orientation. \ + Failed to create routable power net." + } + } + } + } + + +} + +proc r2grid {number db_tech} { + # This will round "number" to a value that respects the manufacturing grid + # For example, if the manufacturing grid is 5 microns and number = 20333, + # the procedure will output 20335. + set grid [$db_tech getManufacturingGrid] + return [expr {round($number / double($grid)) * $grid}] +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/custom_place.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/custom_place.tcl new file mode 100644 index 000000000..f508ae98c --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/custom_place.tcl @@ -0,0 +1,37 @@ +# Template procedure which will place cells in the large voltage domain off east +# with name "cell_name" semi-stacked starting from row "row_num" (0 indexed) +# No error checking is used, so you must ensure the target row and block object are correct +# +# The "isfixed" argument indicates whether the instances should be placed as FIRM +# (won't move in detailed_placement) or as PLACED (moves slightly in detailed_placement +# to avoid DRC errors). +# +# Example of usage (after global_placement but before detailed_placement): +# +# source $::env(SCRIPTS_DIR)/openfasoc/custom_place.tcl +# set block [ord::get_db_block] +# customPlace_east $block "HEADER" 10 no + +proc customPlace_east {block_object cell_name row_num isfixed} { + set target_row [lindex [$block_object getRows] $row_num] + set y_initial_row [expr {[lindex [$target_row getOrigin] 1] / 1000.0}] + set row_ydim [expr {[[$target_row getSite] getHeight] / 1000.0}] + set status [expr {$isfixed ? "FIRM" : "PLACED"}] + + foreach inst [$block_object getInsts] { + if {[[$inst getMaster] getName] == $cell_name} { + set row_orient [$target_row getOrient] + if {$row_orient eq "R0"} { + # if row orientation is R0 (VDD above row, GND below) + place_cell -cell $cell_name -inst_name [$inst getName] -origin [list 82.8 $y_initial_row] -orient R0 -status $status + } elseif {$row_orient eq "MX"} { + # if row orientation is MX (VDD below row, GND above) + place_cell -cell $cell_name -inst_name [$inst getName] -origin [list 82.8 [expr $y_initial_row + $row_ydim]] -orient MX -status $status + } + + incr row_num + set target_row [lindex [$block_object getRows] $row_num] + set y_initial_row [expr {[lindex [$target_row getOrigin] 1] / 1000.0}] + } + } +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/pre_global_route.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/pre_global_route.tcl new file mode 100644 index 000000000..729a105bb --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/pre_global_route.tcl @@ -0,0 +1,12 @@ +# Create r_VIN net +source $::env(SCRIPTS_DIR)/openfasoc/create_routable_power_net.tcl +create_routable_power_net "VIN" $::env(VIN_ROUTE_CONNECTION_POINTS) + +# NDR rules +source $::env(SCRIPTS_DIR)/openfasoc/add_ndr_rules.tcl + +# Custom connections +source $::env(SCRIPTS_DIR)/openfasoc/create_custom_connections.tcl +if {[info exist ::env(CUSTOM_CONNECTION)]} { + create_custom_connections $::env(CUSTOM_CONNECTION) +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/read_domain_instances.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/read_domain_instances.tcl new file mode 100644 index 000000000..46ce2179f --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/read_domain_instances.tcl @@ -0,0 +1,21 @@ +proc read_domain_instances {voltage_domain_name instances_list} { + set block [ord::get_db_block] + set units [$block getDefUnits] + + set ch [open $instances_list] + + set domain_region [$block findRegion $voltage_domain_name] + foreach group [$domain_region getGroups] { + if {[string equal [$group getName] $voltage_domain_name]} { set domain_group $group } + } + + while {![eof $ch]} { + set line [gets $ch] + if {[llength $line] == 0} {continue} + + set inst_name [lindex $line 0] + $domain_group addInst [$block findInst $inst_name] + } + + close $ch +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/pdn.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/pdn.tcl new file mode 100644 index 000000000..c320e1e22 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/pdn.tcl @@ -0,0 +1,35 @@ +source $::env(SCRIPTS_DIR)/load.tcl +load_design 2_5_floorplan_tapcell.odb 1_synth.sdc "Starting PDN generation" + +if {[info exist ::env(PDN_TCL)]} { + source $::env(PDN_TCL) + pdngen +} elseif {[info exist ::env(PDN_CFG)]} { + convert_pdn_config $::env(PDN_CFG) + pdngen +} + +if { [info exists ::env(POST_PDN_TCL)] && [file exists $::env(POST_PDN_TCL)] } { + source $::env(POST_PDN_TCL) +} + +# Check all supply nets +set block [ord::get_db_block] +foreach net [$block getNets] { + set type [$net getSigType] + if {$type == "POWER" || $type == "GROUND"} { + #puts [[$net getBTerms] getName] + #puts [[[$net getBTerms] getBPins] getName] +# Temporarily disable due to CI issues +# puts "Check supply: [$net getName]" +# check_power_grid -net [$net getName] + } +} + +if {![info exists save_checkpoint] || $save_checkpoint} { + if {[info exists ::env(GALLERY_REPORT)] && $::env(GALLERY_REPORT) != 0} { + write_def $::env(RESULTS_DIR)/2_floorplan.def + } + + write_db $::env(RESULTS_DIR)/2_6_floorplan_pdn.odb +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/placement_blockages.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/placement_blockages.tcl new file mode 100644 index 000000000..22d5caef9 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/placement_blockages.tcl @@ -0,0 +1,45 @@ +proc block_channels {channel_width_in_microns} { + set tech [ord::get_db_tech] + set units [$tech getDbUnitsPerMicron] + set block [ord::get_db_block] + + # + # Collect up all the macros + # + set shapes {} + foreach inst [$block getInsts] { + if {[[$inst getMaster] getType] == "BLOCK"} { + set box [$inst getBBox] + lappend shapes [odb::newSetFromRect [$box xMin] [$box yMin] [$box xMax] [$box yMax]] + } + } + + # + # Resize to fill the channels and edge gap + # + set resize_by [expr round($channel_width_in_microns * $units)] + set shapeSet [odb::orSets $shapes] + set shapeSet [odb::bloatSet $shapeSet $resize_by] + + # + # Clip result to the core area + # + set core [$block getCoreArea] + set xl [$core xMin] + set yl [$core yMin] + set xh [$core xMax] + set yh [$core yMax] + set core_rect [odb::newSetFromRect $xl $yl $xh $yh] + set shapeSet [odb::andSet $shapeSet $core_rect] + + + # + # Output the blockages + # + set rects [odb::getRectangles $shapeSet] + foreach rect $rects { + set b [odb::dbBlockage_create $block \ + [$rect xMin] [$rect yMin] [$rect xMax] [$rect yMax]] + $b setSoft + } +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_domain_instances.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_domain_instances.tcl new file mode 100644 index 000000000..6760f7ffd --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_domain_instances.tcl @@ -0,0 +1,18 @@ +proc read_domain_instances {voltage_domain_name instances_list} { + set block [ord::get_db_block] + set units [$block getDefUnits] + + set ch [open $instances_list] + + set domain_region [$block findRegion $voltage_domain_name] + + while {![eof $ch]} { + set line [gets $ch] + if {[llength $line] == 0} {continue} + + set inst_name [lindex $line 0] + $domain_region addInst [$block findInst $inst_name] + } + + close $ch +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_liberty.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_liberty.tcl new file mode 100644 index 000000000..ed8022ac5 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_liberty.tcl @@ -0,0 +1,17 @@ +if {[info exists ::env(CORNERS)]} { + # corners + define_corners {*}$::env(CORNERS) + foreach corner $::env(CORNERS) { + set LIBKEY "LIB_FILES_[string toupper $corner]" + foreach libFile $::env($LIBKEY) { + read_liberty -corner $corner $libFile + } + unset LIBKEY + } + unset corner +} else { + ## no corner + foreach libFile $::env(LIB_FILES) { + read_liberty $libFile + } +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_macro_placement.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_macro_placement.tcl new file mode 100644 index 000000000..68c08231a --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_macro_placement.tcl @@ -0,0 +1,26 @@ +proc read_macro_placement {macro_placement_file} { + set block [ord::get_db_block] + set units [$block getDefUnits] + + set ch [open $macro_placement_file] + + while {![eof $ch]} { + set line [gets $ch] + if {[llength $line] == 0} {continue} + + set inst_name [lindex $line 0] + set orientation [lindex $line 1] + set x [expr round([lindex $line 2] * $units)] + set y [expr round([lindex $line 3] * $units)] + + if {[set inst [$block findInst $inst_name]] == "NULL"} { + error "Cannot find instance $inst_name" + } + + $inst setOrient $orientation + $inst setOrigin $x $y + $inst setPlacementStatus FIRM + } + + close $ch +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/report_metrics.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/report_metrics.tcl new file mode 100644 index 000000000..104f77f18 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/report_metrics.tcl @@ -0,0 +1,166 @@ +proc report_metrics { when {include_erc true} } { + puts "\n==========================================================================" + puts "$when report_tns" + puts "--------------------------------------------------------------------------" + report_tns + report_tns_metric + + puts "\n==========================================================================" + puts "$when report_wns" + puts "--------------------------------------------------------------------------" + report_wns + + puts "\n==========================================================================" + puts "$when report_worst_slack" + puts "--------------------------------------------------------------------------" + report_worst_slack + report_worst_slack_metric + + puts "\n==========================================================================" + puts "$when report_clock_skew" + puts "--------------------------------------------------------------------------" + report_clock_skew + + puts "\n==========================================================================" + puts "$when report_checks -path_delay min" + puts "--------------------------------------------------------------------------" + report_checks -path_delay min -fields {slew cap input nets fanout} -format full_clock_expanded + + puts "\n==========================================================================" + puts "$when report_checks -path_delay max" + puts "--------------------------------------------------------------------------" + report_checks -path_delay max -fields {slew cap input nets fanout} -format full_clock_expanded + + puts "\n==========================================================================" + puts "$when report_checks -unconstrained" + puts "--------------------------------------------------------------------------" + report_checks -unconstrained -fields {slew cap input nets fanout} -format full_clock_expanded + + if {$include_erc} { + puts "\n==========================================================================" + puts "$when report_check_types -max_slew -max_cap -max_fanout -violators" + puts "--------------------------------------------------------------------------" + report_check_types -max_slew -max_capacitance -max_fanout -violators + report_erc_metrics + + puts "\n==========================================================================" + puts "$when max_slew_check_slack" + puts "--------------------------------------------------------------------------" + puts "[sta::max_slew_check_slack]" + + puts "\n==========================================================================" + puts "$when max_slew_check_limit" + puts "--------------------------------------------------------------------------" + puts "[sta::max_slew_check_limit]" + + if {[sta::max_slew_check_limit] < 1e30} { + puts "\n==========================================================================" + puts "$when max_slew_check_slack_limit" + puts "--------------------------------------------------------------------------" + puts [format "%.4f" [sta::max_slew_check_slack_limit]] + } + + puts "\n==========================================================================" + puts "$when max_fanout_check_slack" + puts "--------------------------------------------------------------------------" + puts "[sta::max_fanout_check_slack]" + + puts "\n==========================================================================" + puts "$when max_fanout_check_limit" + puts "--------------------------------------------------------------------------" + puts "[sta::max_fanout_check_limit]" + + if {[sta::max_fanout_check_limit] < 1e30} { + puts "\n==========================================================================" + puts "$when max_fanout_check_slack_limit" + puts "--------------------------------------------------------------------------" + puts [format "%.4f" [sta::max_fanout_check_slack_limit]] + } + + puts "\n==========================================================================" + puts "$when max_capacitance_check_slack" + puts "--------------------------------------------------------------------------" + puts "[sta::max_capacitance_check_slack]" + + puts "\n==========================================================================" + puts "$when max_capacitance_check_limit" + puts "--------------------------------------------------------------------------" + puts "[sta::max_capacitance_check_limit]" + + if {[sta::max_capacitance_check_limit] < 1e30} { + puts "\n==========================================================================" + puts "$when max_capacitance_check_slack_limit" + puts "--------------------------------------------------------------------------" + puts [format "%.4f" [sta::max_capacitance_check_slack_limit]] + } + + puts "\n==========================================================================" + puts "$when max_slew_violation_count" + puts "--------------------------------------------------------------------------" + puts "max slew violation count [sta::max_slew_violation_count]" + + puts "\n==========================================================================" + puts "$when max_fanout_violation_count" + puts "--------------------------------------------------------------------------" + puts "max fanout violation count [sta::max_fanout_violation_count]" + + puts "\n==========================================================================" + puts "$when max_cap_violation_count" + puts "--------------------------------------------------------------------------" + puts "max cap violation count [sta::max_capacitance_violation_count]" + + puts "\n==========================================================================" + puts "$when setup_violation_count" + puts "--------------------------------------------------------------------------" + puts "setup violation count [llength [find_timing_paths -path_delay min -slack_max 0]]" + + puts "\n==========================================================================" + puts "$when hold_violation_count" + puts "--------------------------------------------------------------------------" + puts "hold violation count [llength [find_timing_paths -path_delay max -slack_max 0]]" + + set critical_path [lindex [find_timing_paths -sort_by_slack] 0] + if {$critical_path != ""} { + set path_delay [sta::format_time [[$critical_path path] arrival] 4] + set path_slack [sta::format_time [[$critical_path path] slack] 4] + } else { + set path_delay -1 + set path_slack 0 + } + puts "\n==========================================================================" + puts "$when critical path delay" + puts "--------------------------------------------------------------------------" + puts "$path_delay" + + puts "\n==========================================================================" + puts "$when critical path slack" + puts "--------------------------------------------------------------------------" + puts "$path_slack" + + puts "\n==========================================================================" + puts "$when slack div critical path delay" + puts "--------------------------------------------------------------------------" + puts "[format "%4f" [expr $path_slack / $path_delay * 100]]" + } + + puts "\n==========================================================================" + puts "$when report_power" + puts "--------------------------------------------------------------------------" + if {[info exists ::env(CORNERS)]} { + foreach corner $::env(CORNERS) { + puts "Corner: $corner" + report_power -corner $corner + } + unset corner + } else { + report_power + } + + puts "\n==========================================================================" + puts "$when report_design_area" + puts "--------------------------------------------------------------------------" + report_design_area + report_design_area_metrics + + puts "" +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/run_all.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/run_all.tcl new file mode 100644 index 000000000..3f24c69f3 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/run_all.tcl @@ -0,0 +1,66 @@ +# Performs RTL-to-GDS in a single script +# No checkpointing is performed + +set standalone 0 + +# Synthesis +source -verbose $::env(SCRIPTS_DIR)/yosys.tcl + +# Read process / design +# Read lef +read_lef $::env(TECH_LEF) +read_lef $::env(SC_LEF) +if {[info exist ::env(ADDITIONAL_LEFS)]} { + foreach lef $::env(ADDITIONAL_LEFS) { + read_lef $lef + } +} + +# Read liberty files +foreach libFile $::env(LIB_FILES) { + read_liberty $libFile +} + +read_verilog $::env(RESULTS_DIR)/1_1_yosys.v +link_design $::env(DESIGN_NAME) +read_sdc $::env(SDC_FILE) +if [file exists $::env(PLATFORM_DIR)/derate.tcl] { + source $::env(PLATFORM_DIR)/derate.tcl +} + +if [file exists $::env(PLATFORM_DIR)/setRC.tcl] { + source $::env(PLATFORM_DIR)/setRC.tcl +} + +# Floorplan +source -verbose $::env(SCRIPTS_DIR)/floorplan.tcl +source -verbose $::env(SCRIPTS_DIR)/io_placement_random.tcl +source -verbose $::env(SCRIPTS_DIR)/tdms_place.tcl +source -verbose $::env(SCRIPTS_DIR)/macro_place.tcl +source -verbose $::env(SCRIPTS_DIR)/tapcell.tcl +source -verbose $::env(SCRIPTS_DIR)/pdn.tcl + +# Place +source -verbose $::env(SCRIPTS_DIR)/global_place.tcl +source -verbose $::env(SCRIPTS_DIR)/io_placement.tcl +source -verbose $::env(SCRIPTS_DIR)/resize.tcl +source -verbose $::env(SCRIPTS_DIR)/detail_place.tcl + +# CTS +source -verbose $::env(SCRIPTS_DIR)/cts.tcl +source -verbose $::env(SCRIPTS_DIR)/fillcell.tcl + +# Route +source -verbose $::env(SCRIPTS_DIR)/global_route.tcl +source -verbose $::env(SCRIPTS_DIR)/detail_route.tcl + +# Finishing +if {[info exists ::env(USE_FILL)]} { + source -verbose $::env(SCRIPTS_DIR)/density_fill.tcl +} + +# Finishing +source -verbose $::env(SCRIPTS_DIR)/final_report.tcl +source -verbose $::env(SCRIPTS_DIR)/klayout.tcl + +exit diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/synth.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/synth.tcl new file mode 100644 index 000000000..6c1aaa5e5 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/synth.tcl @@ -0,0 +1,114 @@ +yosys -import + +if {[info exist ::env(CACHED_NETLIST)]} { + exec cp $::env(CACHED_NETLIST) $::env(RESULTS_DIR)/1_1_yosys.v + exit +} + +# Setup verilog include directories +set vIdirsArgs "" +if {[info exist ::env(VERILOG_INCLUDE_DIRS)]} { + foreach dir $::env(VERILOG_INCLUDE_DIRS) { + lappend vIdirsArgs "-I$dir" + } + set vIdirsArgs [join $vIdirsArgs] +} + + +# Read verilog files +foreach file $::env(VERILOG_FILES) { + read_verilog -defer -sv {*}$vIdirsArgs $file +} + +# Read standard cells and macros as blackbox inputs +# These libs have their dont_use properties set accordingly +read_liberty -lib {*}$::env(DONT_USE_LIBS) + +# Apply toplevel parameters (if exist) +if {[info exist ::env(VERILOG_TOP_PARAMS)]} { + dict for {key value} $::env(VERILOG_TOP_PARAMS) { + chparam -set $key $value $::env(DESIGN_NAME) + } +} + +# Read platform specific mapfile for OPENROAD_CLKGATE cells +if {[info exist ::env(CLKGATE_MAP_FILE)]} { + read_verilog -defer $::env(CLKGATE_MAP_FILE) +} + +# Generic synthesis +synth -top $::env(DESIGN_NAME) -flatten + +# Optimize the design +opt -purge + +# Technology mapping of latches +if {[info exist ::env(LATCH_MAP_FILE)]} { + techmap -map $::env(LATCH_MAP_FILE) +} + +# Technology mapping of flip-flops +# dfflibmap only supports one liberty file +dfflibmap -liberty $::env(DONT_USE_SC_LIB) +opt + +set constr [open $::env(OBJECTS_DIR)/abc.constr w] +puts $constr "set_driving_cell $::env(ABC_DRIVER_CELL)" +puts $constr "set_load $::env(ABC_LOAD_IN_FF)" +close $constr + + +set script [open $::env(OBJECTS_DIR)/abc.script w] +puts $script "strash" +puts $script "dch" +puts $script "map -B 0.9" +puts $script "topo" +puts $script "stime -c" +puts $script "buffer -c" +puts $script "upsize -c" +puts $script "dnsize -c" +close $script + + +# Technology mapping for cells +# ABC supports multiple liberty files, but the hook from Yosys to ABC doesn't +if {[info exist ::env(ABC_CLOCK_PERIOD_IN_PS)]} { + abc -D [expr $::env(ABC_CLOCK_PERIOD_IN_PS)] \ + -script $::env(OBJECTS_DIR)/abc.script \ + -liberty $::env(DONT_USE_SC_LIB) \ + -constr $::env(OBJECTS_DIR)/abc.constr +} else { + puts "\[WARN\]\[FLOW\] No clock period constraints detected in design" + abc -liberty $::env(DONT_USE_SC_LIB) \ + -constr $::env(OBJECTS_DIR)/abc.constr +} + +# Replace undef values with defined constants +setundef -zero + +# Splitting nets resolves unwanted compound assign statements in netlist (assign {..} = {..}) +splitnets + +# Remove unused cells and wires +opt_clean -purge + +# Technology mapping of constant hi- and/or lo-drivers +hilomap -singleton \ + -hicell {*}$::env(TIEHI_CELL_AND_PORT) \ + -locell {*}$::env(TIELO_CELL_AND_PORT) + +# Insert buffer cells for pass through wires +insbuf -buf {*}$::env(MIN_BUF_CELL_AND_PORTS) + +# Reports +tee -o $::env(REPORTS_DIR)/synth_check.txt check + +# Create argument list for stat +set stat_libs "" +foreach lib $::env(DONT_USE_LIBS) { + append stat_libs "-liberty $lib " +} +tee -o $::env(REPORTS_DIR)/synth_stat.txt stat {*}$stat_libs + +# Write synthesized design +write_verilog -noattr -noexpr -nohex -nodec $::env(RESULTS_DIR)/1_1_yosys.v diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tapcell.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tapcell.tcl new file mode 100644 index 000000000..9cab794c1 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tapcell.tcl @@ -0,0 +1,10 @@ +source $::env(SCRIPTS_DIR)/load.tcl +load_design 2_4_floorplan_macro.odb 1_synth.sdc "Starting tapcell" + +if {[info exist ::env(TAPCELL_TCL)]} { + source $::env(TAPCELL_TCL) +} + +if {![info exists save_checkpoint] || $save_checkpoint} { + write_db $::env(RESULTS_DIR)/2_5_floorplan_tapcell.odb +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tdms_place.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tdms_place.tcl new file mode 100644 index 000000000..22b428044 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tdms_place.tcl @@ -0,0 +1,36 @@ +source $::env(SCRIPTS_DIR)/load.tcl +load_design 2_2_floorplan_io.odb 1_synth.sdc "Starting TDMS placement" + +proc find_macros {} { + set macros "" + + set db [::ord::get_db] + set block [[$db getChip] getBlock] + foreach inst [$block getInsts] { + set inst_master [$inst getMaster] + + # BLOCK means MACRO cells + if { [string match [$inst_master getType] "BLOCK"] } { + append macros " " $inst + } + } + return $macros +} + +set_dont_use $::env(DONT_USE_CELLS) + +if {[find_macros] != ""} { + if {[info exists ::env(RTLMP_FLOW)]} { + puts "RTLMP flow enabled. Skipping tdms place." + } else { + global_placement -density $::env(PLACE_DENSITY) \ + -pad_left $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ + -pad_right $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) + } +} else { + puts "No macros found: Skipping global_placement" +} + +if {![info exists save_checkpoint] || $save_checkpoint} { + write_db $::env(RESULTS_DIR)/2_3_floorplan_tdms.odb +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/write_ref_sdc.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/write_ref_sdc.tcl new file mode 100644 index 000000000..0dc36c4c0 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/write_ref_sdc.tcl @@ -0,0 +1,36 @@ +# Write an SDC file with clock periods that result in slightly negative slack. + +# slack margin for updated clock as a percent of clock period +set margin 5 + +set clks [all_clocks] +if { [llength $clks] == 0 } { + utl::warn "FLW" 6 "No clocks found." +} else { + set clk [lindex $clks 0] + set clk_name [get_name $clk] + set period [get_property $clk "period"] + # Period is in sdc/liberty units. + utl::info "FLW" 7 "clock $clk_name period $period" + + if { [llength $clks] == 1 } { + set slack [sta::time_sta_ui [sta::worst_slack_cmd "max"]] + set ref_period [expr ($period - $slack) * (1.0 - $margin/100.0)] + utl::info "FLW" 8 "Clock $clk_name period [format %.3f $ref_period]" + utl::info "FLW" 9 "Clock $clk_name slack [format %.3f $slack]" + + set sources [$clk sources] + # Redefine clock with updated period. + create_clock -name $clk_name -period $ref_period $sources + # Undo the set_propagated_clock so SDC at beginning of flow uses ideal clocks. + unset_propagated_clock [all_clocks] + write_sdc [file join $env(RESULTS_DIR) "updated_clks.sdc"] + # Reset + create_clock -name $clk_name -period $period $sources + set_propagated_clock [all_clocks] + } else { + utl::warn "FLW" 10 "more than one clock found. Skipping sdc update." + } +} + +utl::info "FLW" 11 "Path endpoint count [sta::endpoint_count]" diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/yosys.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/yosys.tcl new file mode 100644 index 000000000..7eec228ef --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/yosys.tcl @@ -0,0 +1 @@ +exec yosys $::env(SCRIPTS_DIR)/synth.tcl diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/addDummyToLef.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/addDummyToLef.py new file mode 100755 index 000000000..b07139bc9 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/addDummyToLef.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +import argparse # argument parsing +import re +import sys + +# Parse and validate arguments +# ============================================================================== +parser = argparse.ArgumentParser( + description="Inserts DUMMY based on a macro into a lef" +) +parser.add_argument("--refMacro", "-r", required=True, help="Reference Macro") +parser.add_argument("--inputLef", "-i", required=True, help="Input Lef") +parser.add_argument("--outputLef", "-o", required=True, help="Output Lef") +args = parser.parse_args() + + +f = open(args.inputLef) +content = f.read() +f.close() + +# refMacro = "BUFH_X1M_A12TR" + +pattern = r"MACRO (" + args.refMacro + ")(.*?)END (" + args.refMacro + ")" +replace = r"MACRO \1\2END \3\nMACRO DUMMY\2END DUMMY" + +result, count = re.subn(pattern, replace, content, 1, re.S) + +if count > 0: + f = open(args.outputLef, "w") + f.write(result) + f.close() +else: + print("ERROR: Pattern not found") + sys.exit(1) diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/add_ndr_rule.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/add_ndr_rule.py new file mode 100644 index 000000000..ef8827f3f --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/add_ndr_rule.py @@ -0,0 +1,25 @@ +import argparse +import re + +parser = argparse.ArgumentParser(description="Add ndr rules to specified nets") +parser.add_argument("--inputDef", "-i", required=True, help="Input DEF") +parser.add_argument("--nets", "-n", required=True, help="target Nets") +parser.add_argument("--rule", "-r", required=True, help="ndr rule") +parser.add_argument("--outputDef", "-o", required=True, help="Output DEF") + +args = parser.parse_args() +nets = args.nets.split() +rule = args.rule + +with open(args.inputDef, "r") as rf: + filedata = rf.read() + +for net in nets: + filedata = re.sub( + "(-\s" + net + " .*\+ USE SIGNAL );", + "\g<1>" + "+ NONDEFAULTRULE " + rule + " ;", + filedata, + ) + +with open(args.outputDef, "w") as wf: + wf.write(filedata) diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/appendStatsToDb.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/appendStatsToDb.py new file mode 100755 index 000000000..7f71f8969 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/appendStatsToDb.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python2 + +# This scripts appends the test metadata to the master json +# ------------------------------------------------------------------------- + +import argparse # argument parsing +import csv +import json # json parsing +import os # filesystem manipulation +import sys +from collections import OrderedDict + +# Parse and validate arguments +# ============================================================================== +parser = argparse.ArgumentParser(description="Appends test metadata to master database") +parser.add_argument( + "--masterTestListPath", + "-m", + default="masterTestList.json", + required=False, + help="Path to Master Metadata", +) +parser.add_argument( + "--testMetadataPaths", "-t", required=True, help="Path to Json Metadata", nargs="+" +) +args = parser.parse_args() + +# Open master file +if os.path.isfile(args.masterTestListPath): + with open(args.masterTestListPath) as f: + masterJson = json.load(f, object_pairs_hook=OrderedDict) +else: + masterJson = {"fields": [], "testcases": []} + + +for testMetadata in args.testMetadataPaths: + + if not os.path.isfile(testMetadata): + print("Error: testMetadataPath does not exist") + print("Path: " + testMetadata) + sys.exit(1) + + # Open test metadata + try: + with open(testMetadata) as f: + designJson = json.load(f, object_pairs_hook=OrderedDict) + except ValueError as e: + print("Error occured opening or loading json file.") + sys.exit(1) + + if not designJson["uuid"] in [d["uuid"] for d in masterJson["testcases"]]: + masterJson["testcases"].append(designJson) + + # Update Headers if necessary + for key in list(designJson): + if not key in masterJson["fields"]: + masterJson["fields"].append(key) + print("Updating fields with", key) + else: + print( + "Skipping " + + designJson["platform"] + + "/" + + designJson["design"] + + " (" + + designJson["uuid"] + + ") already in masterDB" + ) + + +# Dump JSON +with open(args.masterTestListPath, "w") as f: + json.dump(masterJson, f, indent=2) + + +# Dump CSV +csvFilePath = os.path.splitext(args.masterTestListPath)[0] + ".csv" +with open(csvFilePath, "w") as csvfile: + fieldnames = list(masterJson["fields"]) + writer = csv.DictWriter( + csvfile, + fieldnames=fieldnames, + restval="-", + extrasaction="ignore", + dialect="excel", + ) + + writer.writeheader() + for testcase in masterJson["testcases"]: + writer.writerow(testcase) diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/calBuffer.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/calBuffer.py new file mode 100644 index 000000000..2680ab3aa --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/calBuffer.py @@ -0,0 +1,22 @@ +import re + +pattern = "(hold\d+)" +cset = set() +count = 0 + +with open("reports/gf12/bp_single/min_delay_report_osta.rpt", "r") as f: + while True: + line = f.readline() + if not line: + break + + m = re.search(pattern, line) + if m: + name = m.group(0) + if name not in cset: + cset.add(name) + count += 1 + else: + continue + +print(count) diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/calPath.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/calPath.py new file mode 100644 index 000000000..9081bff91 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/calPath.py @@ -0,0 +1,37 @@ +import re + +startpoint = "Startpoint" +pattern = "(hold\d+)" +res = {} +count = 0 +maxcount = 0 +linindex = 0 +lincount = 0 +with open("reports/gf12/bp_single/min_delay_report_osta.rpt", "r") as f: + while True: + line = f.readline() + lincount += 1 + if not line: + break + + m1 = re.search(startpoint, line) + m2 = re.search(pattern, line) + if m1: + if count == 0: + continue + elif count in res.keys(): + res[count] += 1 + else: + res[count] = 1 + if count > maxcount: + maxcount = count + linindex = lincount + count = 0 + elif m2: + count += 1 + +for key, val in res.items(): + print("%d: %d" % (key, val)) + +print(maxcount) +print(linindex) diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cdl_parser.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cdl_parser.py new file mode 100644 index 000000000..0ef2a2504 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cdl_parser.py @@ -0,0 +1,82 @@ +import argparse +import os +import re +import sys + +parser = argparse.ArgumentParser(description="formulate input cdl netlist") +parser.add_argument("--inputCdl", "-i", required=True, help="input CDL netlist") +parser.add_argument( + "--stdLef", + "-l", + required=True, + help="input standard LEF, showing pin order used in OpenROAD", +) +parser.add_argument("--stdCdl", "-s", required=True, help="standard cells CDL netlist") +parser.add_argument("--powerConn", "-p", required=False, help="power connection") +parser.add_argument("--outputCdl", "-o", required=True, help="output CDL netlist") + +args = parser.parse_args() + +# pin order from input stdCdl netlist +with open(args.stdCdl, "r") as rf: + filedata = rf.read() + +std_pin_order_dict = {} +std_cells_re = re.findall("\.subckt (.*)", filedata) +for std_cell in std_cells_re: + std_cell_info = std_cell.split(" ") + std_pin_order_dict[std_cell_info[0]] = std_cell_info[1:] + +# pin order from inputCdl netlist +with open(args.stdLef, "r") as rf: + filedata = rf.read() + +pin_order_dict = {} +all_std_cells = re.findall("MACRO (.*)", filedata) +for std_cell in all_std_cells: + std_cell_re = re.search("MACRO " + std_cell + "(.*\n)*END " + std_cell, filedata) + std_cell_info = std_cell_re.group(0) + pin_order_list = re.findall("PIN (.*)", std_cell_info) + pin_order_dict[std_cell] = pin_order_list[::-1] + +with open(args.inputCdl, "r") as rf: + filedata = rf.read() + filedata = re.sub("r_VIN", "VIN", filedata) + +with open(args.outputCdl, "w") as wf: + ckt_re = re.search("(\.SUBCKT.*\n(\+.*\n)*)((.*\n)*)(\.ENDS.*)", filedata) + ckt_head = ckt_re.group(1) + ckt_cells = ckt_re.group(3) + ckt_end = ckt_re.group(5) + ckt_cells = ckt_cells.replace("\n+", "").split("\n") + + wf.write(".INCLUDE '" + os.path.abspath(args.stdCdl) + "'\n") + # wf.write(ckt_head) + + for ckt_cell in ckt_cells: + if not ckt_cell or re.search("FILLER", ckt_cell): + continue + ckt_cell_list = ckt_cell.split(" ") + ordered_cell = [ckt_cell_list[0]] + + pwr_net = ckt_cell_list[1 + pin_order_dict[ckt_cell_list[-1]].index("VPWR")] + gnd_net = ckt_cell_list[1 + pin_order_dict[ckt_cell_list[-1]].index("VGND")] + for pin in std_pin_order_dict[ckt_cell_list[-1]]: + try: + net_name = ckt_cell_list[ + 1 + pin_order_dict[ckt_cell_list[-1]].index(pin) + ] + ordered_cell.append(net_name) + except: + if pin == "VNB": + ordered_cell.append(gnd_net) + elif pin == "VPB": + ordered_cell.append(pwr_net) + else: + print("cell: " + ckt_cell + " pin: " + pin + " is missing") + sys.exit(0) + ordered_cell.append(ckt_cell_list[-1]) + + wf.write(" ".join(ordered_cell)) + wf.write("\n") + wf.write(".end") diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/README.md b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/README.md new file mode 100644 index 000000000..edde80e25 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/README.md @@ -0,0 +1,2 @@ +# cell-veneer +Scripting used to generate a wrapping around cells to make a boundary more suitable for place and route diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/lefdef.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/lefdef.tcl new file mode 100644 index 000000000..f9be0ca25 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/lefdef.tcl @@ -0,0 +1,935 @@ +proc absolute_rectangle {rect offset} { + return [list \ + [expr [lindex $rect 0] + [lindex $offset 0]] \ + [expr [lindex $rect 1] + [lindex $offset 1]] \ + [expr [lindex $rect 2] + [lindex $offset 0]] \ + [expr [lindex $rect 3] + [lindex $offset 1]] \ + ] +} +proc relative_rectangle {rect offset} { + return [list \ + [expr [lindex $rect 0] - [lindex $offset 0]] \ + [expr [lindex $rect 1] - [lindex $offset 1]] \ + [expr [lindex $rect 2] - [lindex $offset 0]] \ + [expr [lindex $rect 3] - [lindex $offset 1]] \ + ] +} + +if [package vcompare 8.6 $tcl_version] { + proc lmap {_var list body} { + upvar 1 $_var var + set res {} + foreach var $list {lappend res [uplevel 1 $body]} + set res + } +} + +namespace eval lef { + variable lefOut stdout + variable def_units 2000 + + proc open {file_name} { + variable lefOut + set lefOut [::open $file_name w] + } + + proc close {} { + variable lefOut + if {$lefOut != "stdout"} { + ::close $lefOut + } + set lefOut stdout + } + + proc out {args} { + variable lefOut + + if {[llength $args] == 2} { + puts [lindex $args 0] $lefOut [lindex $args 1] + } else { + puts $lefOut [lindex $args 0] + } + } + + variable cells + + proc get_cells {} { + variable cells + return $cells + } + + proc get_cell {cell_name} { + variable cells + return [dict get $cells $cell_name] + } + + proc get_width {cell} { + return [expr [lindex [dict get $cell die_area] 2] - [lindex [dict get $cell die_area] 0]] + } + + proc get_height {cell} { + return [expr [lindex [dict get $cell die_area] 3] - [lindex [dict get $cell die_area] 1]] + } + + proc read_macros {file_name} { + variable cells + variable def_units + + set ch [::open $file_name] + + set cells {} + + while {![eof $ch]} { + set line [gets $ch] + + if {[regexp {MACRO\s*([^\s]*)} $line - cell_name]} { + dict set cells $cell_name units $def_units + dict set cells $cell_name name $cell_name + while {![eof $ch]} { + set line [gets $ch] + if {[regexp {^\s*$} $line]} { + continue + } elseif {[regexp {CLASS\s+([^\s]*)} $line - cell_class]} { + dict set cells $cell_name cell_class $cell_class + } elseif {[regexp {ORIGIN\s+([^\s]*)\s+([^\s]*)} $line - origin_x origin_y]} { + dict set cells $cell_name origin [lmap x [list $origin_x $origin_y] {expr round($x * $def_units)}] + } elseif {[regexp {FOREIGN\s+([^\s]*)\s+([^\s]*)\s+([^\s]*)} $line - foreign x y]} { + dict set cells $cell_name foreign [list ref $foreign origin [lmap x [list $x $y] {expr round($x * $def_units)}]] + } elseif {[regexp {SIZE\s+([^\s]*)\s+BY\s+([^\s]*)} $line - width height]} { + dict set cells $cell_name die_area [list 0 0 [expr round($width * $def_units)] [expr round($height * $def_units)]] + } elseif {[regexp {SYMMETRY\s+(.*)\s;} $line - symmetry]} { + dict set cells $cell_name symmetry $symmetry + } elseif {[regexp {SITE\s+([^\s]*)} $line - site]} { + dict set cells $cell_name site $site + } elseif {[regexp {PIN\s*([^\s]*)} $line - pin_name]} { + set pin_pattern [regsub -all {([\[\]])} $pin_name {\\\1}] + if {[info vars antennamodel] != ""} { + unset antennamodel + } + while {![eof $ch]} { + set line [gets $ch] + if {[regexp {^\s*$} $line]} { + continue + } elseif {[regexp {DIRECTION\s+([^\s]*)} $line - direction]} { + dict set cells $cell_name pins $pin_name direction $direction + } elseif {[regexp {USE\s+([^\s]*)} $line - use]} { + dict set cells $cell_name pins $pin_name use $use + } elseif {[regexp {ANTENNAMODEL\s+([^\s]*)} $line - antennamodel]} { + continue + } elseif {[regexp {ANTENNAGATEAREA\s+([^\s]*)\s+LAYER\s+([^\s]*)} $line - gate_area layer]} { + if {[info vars antennamodel] == ""} { + set antennamodel "default" + } + if {[dict exists $cells $cell_name pins $pin_name antenna_model $antennamodel]} { + set model [dict get $cells $cell_name pins $pin_name antenna_model $antennamodel] + } else { + set model {} + } + lappend model [list gate_area $gate_area layer $layer] + dict set cells $cell_name pins $pin_name antenna_model $antennamodel $model + } elseif {[regexp {ANTENNAGATEAREA\s+([^\s]*)} $line - gate_area]} { + if {[info vars antennamodel] == ""} { + set antennamodel "default" + } + if {[dict exists $cells $cell_name pins $pin_name antenna_model $antennamodel]} { + set model [dict get $cells $cell_name pins $pin_name antenna_model $antennamodel] + } else { + set model {} + } + lappend model [list gate_area $gate_area] + dict set cells $cell_name pins $pin_name antenna_model $antennamodel $model + } elseif {[regexp {ANTENNADIFFAREA\s+([^\s]*)\s+LAYER\s+([^\s]*)} $line - antennadiffarea layer]} { + dict set cells $cell_name pins $pin_name antennadiffarea area $antennadiffarea + dict set cells $cell_name pins $pin_name antennadiffarea layer $antennadiffarea + } elseif {[regexp {ANTENNADIFFAREA\s+([^\s]*)\s} $line - antennadiffarea]} { + dict set cells $cell_name pins $pin_name antennadiffarea area $antennadiffarea + } elseif {[regexp {SHAPE\s+([^\s]*)\s+([^\s]*)} $line - shape]} { + dict set cells $cell_name pins $pin_name shape $shape + } elseif {[regexp {PORT} $line]} { + set port {} + dict set port orientation N + while {![eof $ch]} { + set line [gets $ch] + if {[regexp {^\s*$} $line]} { + continue + } elseif {[regexp {LAYER\s+([^\s]*)} $line - layer]} { + continue + } elseif {[regexp {RECT\s+MASK\s+([^\s]*)\s+([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)} $line - mask x1 y1 x2 y2]} { + if {[dict exists $port layers $layer shapes]} { + set layer_shapes [dict get $port layers $layer shapes] + } else { + set layer_shapes {} + } + if {[dict exists $port fixed]} { + set offset [dict get $port fixed] + } else { + set offset [lmap x [list $x1 $y1] {expr round($x * $def_units)}] + dict set port fixed $offset + } + set new_shape [list \ + rect [relative_rectangle [lmap x [list $x1 $y1 $x2 $y2] {expr round($x * $def_units)}] $offset] \ + mask $mask \ + ] + lappend layer_shapes $new_shape + dict set port layers $layer shapes $layer_shapes + } elseif {[regexp {RECT\s([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)} $line - x1 y1 x2 y2]} { + if {[dict exists $port layers $layer shapes]} { + set layer_shapes [dict get $port layers $layer shapes] + } else { + set layer_shapes {} + } + if {[dict exists $port fixed]} { + set offset [dict get $port fixed] + } else { + set offset [lmap x [list $x1 $y1] {expr round($x * $def_units)}] + dict set port fixed $offset + } + set new_shape [list \ + rect [relative_rectangle [lmap x [list $x1 $y1 $x2 $y2] {expr round($x * $def_units)}] $offset] \ + ] + lappend layer_shapes $new_shape + dict set port layers $layer shapes $layer_shapes + } elseif {[regexp {END} $line]} { + if {[dict exists $cells $cell_name pins $pin_name ports]} { + set ports [dict get $cells $cell_name pins $pin_name ports] + } else { + set ports {} + } + lappend ports $port + dict set cells $cell_name pins $pin_name ports $ports + break + } else { + error "Parsing failure PORT:\n$line" + } + } + } elseif {[regexp "END\\s$pin_pattern" $line]} { + break + } else { + error "Parsing failure PIN:\n$line" + } + } + } elseif {[regexp {OBS} $line]} { + while {![eof $ch]} { + set line [gets $ch] + if {[regexp {^\s*$} $line]} { + continue + } elseif {[regexp {LAYER\s+([^\s]*)} $line - layer]} { + continue + } elseif {[regexp {RECT\s+MASK\s+([^\s]*)\s+([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)} $line - mask x1 y1 x2 y2]} { + if {[dict exists $cells $cell_name obstructions $layer]} { + set obstructions [dict get $cells $cell_name obstructions $layer] + } else { + set obstructions {} + } + lappend obstructions [list rect [lmap x [list $x1 $y1 $x2 $y2] {expr round($x * $def_units)}] mask $mask] + dict set cells $cell_name obstructions $layer $obstructions + } elseif {[regexp {RECT\s([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)\s\s*([0-9\-\.]*)} $line - x1 y1 x2 y2]} { + if {[dict exists $cells $cell_name obstructions $layer]} { + set obstructions [dict get $cells $cell_name obstructions $layer] + } else { + set obstructions {} + } + lappend obstructions [list rect [lmap x [list $x1 $y1 $x2 $y2] {expr round($x * $def_units)}]] + dict set cells $cell_name obstructions $layer $obstructions + } elseif {[regexp {END} $line]} { + break + } else { + error "Parsing failure OBS:\n$line" + } + } + } elseif {[regexp "END\\s*$cell_name" $line]} { + break + } else { + error "Parsing failure MACRO\n$line" + } + } + } + } + + ::close $ch + } + + proc get_blockage_layers {design} { + if {[dict exists $design blockage_layers]} { + return [dict get $design blockage_layers] + } + + set blocked_layers {} + + dict for {layer_name obstructions} [dict get $design obstructions] { + lappend blocked_layers $layer_name + } + return $blocked_layers + } + + proc write_header {} { + } + proc write_footer {} { + } + # Read a LEF from a file into a dictionary with the name of the cell as the key and the following entries + # - cell_class + # - origin + # - foreign + # - ref + # - origin + # - die_area + # - symmetry + # - site + # - pins: dict with the name of the pin as the key + # - antenna_model + # - gate_area + # - layer + # - antennadiffarea + # - layer + # - area + # - direction + # - use + # - shape + # - ports: a list of lists of shapes that make up a physical connection + # - layer + # - rect + # - mask? + # - obstructions + # - layer: a dictionaries with layer_name as the key + # - rect + # - mask? + # + proc write {design} { + set def_units [dict get $design units] + + out "MACRO [dict get $design name]" + out " CLASS [dict get $design cell_class] ;" + if {[dict exists $design origin]} { + out " ORIGIN [dict get $design origin] ;" + } else { + out " ORIGIN 0.0 0.0 ;" + } + out " FOREIGN [dict get $design foreign ref] [dict get $design foreign origin] ;" + out " SIZE [expr 1.0 * [lindex [dict get $design die_area] 2] / $def_units] BY [expr 1.0 * [lindex [dict get $design die_area] 3] / $def_units] ;" + out " SYMMETRY [dict get $design symmetry] ;" + if {[dict exists $design site]} { + out " SITE [dict get $design site] ;" + } + + if {[dict exists $design pins]} { + dict for {pin_name pin} [dict get $design pins] { + out " PIN $pin_name" + out " DIRECTION [dict get $pin direction] ;" + if {[dict exists $pin use]} { + out " USE [dict get $pin use] ;" + } + foreach port [dict get $pin ports] { + out " PORT " + foreach layer_name [dict keys [dict get $port layers]] { + set shapes [dict get $port layers $layer_name shapes] + + out " LAYER $layer_name ;" + foreach shape $shapes { + if {[dict exists $port fixed]} { + set offset [dict get $port fixed] + } elseif {[dict exists $port placed]} { + set offset [dict get $port placed] + } else { + set offset [list 0 0] + } + set rect [absolute_rectangle [dict get $shape rect] $offset] + + if {[dict exists $shape mask]} { + out " RECT MASK [dict get $shape mask] [lmap x $rect {expr 1.0 * $x / $def_units}] ;" + } else { + out " RECT [lmap x $rect {expr 1.0 * $x / $def_units}] ;" + } + } + } + out " END " + } + out " END $pin_name" + } + } + + if {[dict exists $design obstructions]} { + out " OBS" + if {[dict get $design use_sheet_obstructions]} { + dict for {layer_name obstructions} [dict get $design obstructions] { + lappend blocked_layers $layer_name + } + set sheet "0 0 [expr 1.0 * [lindex [dict get $design die_area] 2] / $def_units] [expr 1.0 * [lindex [dict get $design die_area] 3] / $def_units]" + foreach layer_name [get_blockage_layers $design] { + out " LAYER $layer_name ;" + out " RECT $sheet ;" + } + } else { + dict for {layer_name obstructions} [dict get $design obstructions] { + out " LAYER $layer_name ;" + foreach obs $obstructions { + if {[dict exists $obs mask]} { + out " RECT MASK [dict get $obs mask] [lmap x [dict get $obs rect] {expr 1.0 * $x / $def_units}] ;" + } else { + out " RECT [lmap x [dict get $obs rect] {expr 1.0 * $x / $def_units}] ;" + } + } + } + } + out " END" + } + out "END [dict get $design name]" + out "" + } + + proc write_cells {file_name cells} { + lef open $file_name + + out "###############################################################" + out "# Created by cell-veneer" + out "# Created on: [clock format [clock seconds] -format {%A, %d %B %Y}]" + out "###############################################################" + out "" + out "VERSION 5.8 ;" + out "BUSBITCHARS \"\[\]\" ;" + out "DIVIDERCHAR \"/\" ;" + out "" + out "SITE sc10p5mcpp84_14lpp" + out " CLASS CORE ;" + out " SIZE 0.084 BY 0.672 ;" + out " SYMMETRY Y ;" + out "END sc10p5mcpp84_14lpp" + out "" + out "SITE sc10p5mcpp84_14lpp_pg" + out " CLASS CORE ;" + out " SIZE 0.084 BY 1.344 ;" + out " SYMMETRY Y ;" + out "END sc10p5mcpp84_14lpp_pg" + out "" + + dict for {cell_name cell} $cells { + lef write $cell + } + + out "END LIBRARY" + out "" + lef close + } + + proc write_macros {file_name cells} { + lef open $file_name + + out "###############################################################" + out "# Created by cell-veneer" + out "# Created on: [clock format [clock seconds] -format {%A, %d %B %Y}]" + out "###############################################################" + out "" + out "VERSION 5.8 ;" + out "BUSBITCHARS \"\[\]\" ;" + out "DIVIDERCHAR \"/\" ;" + out "" + + dict for {cell_name cell} $cells { + lef write $cell + } + + out "END LIBRARY" + out "" + lef close + } + + namespace export read_macros get_width get_height + namespace export get_cell get_cells write write_cells write_macros + namespace export open close out + namespace ensemble create +} + +namespace eval def { + variable def_units + variable defOut stdout + variable designs {} + + proc open {file_name} { + variable defOut + set defOut [::open $file_name w] + } + + proc close {} { + variable defOut + if {$defOut != "stdout"} { + ::close $defOut + } + set defOut stdout + } + + proc out {args} { + variable defOut + + if {[llength $args] == 2} { + puts [lindex $args 0] $defOut [lindex $args 1] + } else { + puts $defOut [lindex $args 0] + } + } + + # Write out DEF from a design structure which is a dictionary with the following keys + # - name + # - tool + # - units + # - die_area + # - core_area + # - rows: dict with the index of the row as the key + # - site + # - start + # - height + # - orientation + # - num_sites + # - site_width + # - pins: dict with the name of the pin as the key + # - net_name + # - direction + # - use + # - special + # - ports : a list of dictionaries, one per port + # - orientation + # - (placed|fixed) + # - layers + # - spacing + # - designrulewidth + # - shapes : list of rectangles (or polygons) + # - (rect|polygon) + # - physical_viarules: dict with the name of the viarule as the key + # - rule + # - cutsize + # - layers + # - cutspacing + # - enclosure + # - rowcol + # - components: dict with the instance name of the component as the key + # - inst_name + # - cell_name + # - (fixed|placed)? + # - orientation + # - nets: dict with the name of the net as the key + # - use: SIGNAL | POWER | GROUND + # - connections: list of instance pin pairs + # - routes: list of dictionaries + # - layer + # - points: list of points, where a point can be an XY location or the name of a VIA + # - special_nets: dict with the name of the net as the key + # - use: SIGNAL | POWER | GROUND + # - connections: list of instance pin pairs + # - routes: list of dictioaries + # - layer + # - width + # - shape + # - points: list of points, where a point can be an XY location or the name of a VIA + # + + proc shift_point {point x y} { + return [list [expr [lindex $point 0] + $x] [expr [lindex $point 1] + $y]] + } + + proc shift_rect {rect x y} { + return [list [expr [lindex $rect 0] + $x] [expr [lindex $rect 1] + $y] [expr [lindex $rect 2] + $x] [expr [lindex $rect 3] + $y]] + } + + proc shift_origin {design x y} { + if {[dict exists $design die_area]} { + dict set design die_area [shift_rect [dict get $design die_area] $x $y] + } + if {[dict exists $design core_area]} { + dict set design core_area [shift_rect [dict get $design core_area] $x $y] + } + if {[dict exists $design rows]} { + } + if {[dict exists $design pins]} { + dict for {pin_name pin} [dict get $design pins] { + set ports {} + foreach port [dict get $pin ports] { + if {[dict exists $port fixed]} { + dict set port fixed [shift_point [dict get $port fixed] $x $y] + } elseif {[dict exists $port placed]} { + dict set port placed [shift_point [dict get $port placed] $x $y] + } + lappend ports $port + } + dict set design pins $pin_name ports $ports + } + } + if {[dict exists $design components]} { + dict for {inst_name inst} [dict get $design components] { + if {[dict exists $inst fixed]} { + dict set design components $inst_name fixed [shift_point [dict get $inst fixed] $x $y] + } elseif {[dict exists $inst placed]} { + dict set design components $inst_name placed [shift_point [dict get $inst placed] $x $y] + } + } + } + if {[dict exists $design nets]} { + dict for {net_name net} [dict get $design nets] { + if {[dict exists $net routes]} { + set routes {} + foreach route [dict get $net routes] { + set points {} + foreach point $points { + if {[llength $point] == 2} { + lappend points [shift_point $point $x $y] + } else { + lappend points $point + } + } + lappend routes $route + } + dict set design nets $net_name routes $routes + } + } + } + if {[dict exists $design special_nets]} { + dict for {net_name net} [dict get $design special_nets] { + set routes {} + if {[dict exists $net routes]} { + foreach route [dict get $net routes] { + set points {} + foreach point $points { + if {[llength $point] == 2} { + lappend points [shift_point $point $x $y] + } else { + lappend points $point + } + } + lappend routes $route + } + dict set design special_nets $net_name routes $routes + } + } + } + if {[dict exists $design obstructions]} { + dict for {layer_name obstructions} [dict get $design obstructions] { + set new_obs {} + foreach obs $obstructions { + dict set obs rect [def::shift_rect [dict get $obs rect] $x $y] + lappend new_obs $obs + } + dict set design obstructions $layer_name $new_obs + } + } + + return $design + } + + variable layer_info {} + proc set_layer_info {layer_name key value} { + variable layer_info + + dict set layer_info layers $layer_name $key $value + } + + proc get_layer_width {layer_name} { + variable layer_info + return [dict get $layer_info layers $layer_name width] + } + + proc get_layer_non_preferred_width {layer_name} { + variable layer_info + if {[dict exists $layer_info layers $layer_name non_preferred_width]} { + return [dict get $layer_info layers $layer_name non_preferred_width] + } + return [dict get $layer_info layers $layer_name width] + } + + proc get_layer_direction {layer_name} { + variable layer_info + return [dict get $layer_info layers $layer_name direction] + } + + proc get_line_direction {points} { + if {[lindex $points 0 0] == [lindex $points 1 0]} { + set direction "VERTICAL" + } elseif {[lindex $points 0 1] == [lindex $points 1 1]} { + set direction "HORIZONTAL" + } else { + error "Non orthogonal line $points" + } + return $direction + } + proc get_line_width {layer_name points} { + set direction [get_line_direction $points] + + if {[get_layer_direction $layer_name] == $direction} { + return [get_layer_width $layer_name] + } else { + return [get_layer_non_preferred_width $layer_name] + } + } + + proc get_extended_line {layer_name points} { + if {[llength [lindex $points 1]] == 1} { + return "( [lindex $points 0] ) [lindex $points 1]" + } + + set direction [get_line_direction $points] + + if {$direction == [get_layer_direction $layer_name]} { + set extension [expr [get_layer_non_preferred_width $layer_name] / 2] + } else { + set extension [expr [get_layer_width $layer_name] / 2] + } + + if {$direction == "VERTICAL"} { + set x_min [lindex $points 0 0] + set x_max [lindex $points 0 0] + set y_min [expr min([lindex $points 0 1], [lindex $points 1 1]) - $extension] + set y_max [expr max([lindex $points 0 1], [lindex $points 1 1]) + $extension] + } else { + set x_min [expr min([lindex $points 0 0], [lindex $points 1 0])] + set x_max [expr max([lindex $points 0 0], [lindex $points 1 0])] + set y_min [lindex $points 0 1] + set y_max [lindex $points 0 1] + } + + return "( $x_min $y_min ) ( $x_max $y_max )" + } + + proc write {design} { + out "###############################################################" + if {[dict exists $design tool]} { + out "# Created by [dict get $design tool]" + } + out "# Created on: [clock format [clock seconds] -format {%A, %d %B %Y}]" + out "###############################################################" + + out "VERSION 5.8 ;" + out "DIVIDERCHAR \"/\" ;" + out "BUSBITCHARS \"\[\]\" ;" + out "DESIGN [dict get $design name] ;" + out "UNITS DISTANCE MICRONS [dict get $design units] ;" + out "" + + if {[dict exists $design properties]} { + out "PROPERTYDEFINITIONS " + if {[dict exists $design properties core_area]} { + out "DESIGN FE_CORE_BOX_LL_X REAL [lindex [dict get $design properties core_area] 0] ;" + out "DESIGN FE_CORE_BOX_UR_X REAL [lindex [dict get $design properties core_area] 1] ;" + out "DESIGN FE_CORE_BOX_LL_Y REAL [lindex [dict get $design properties core_area] 2] ;" + out "DESIGN FE_CORE_BOX_UR_Y REAL [lindex [dict get $design properties core_area] 3] ;" + } + out "END PROPERTYDEFINITIONS" + } + + out "" + out "DIEAREA ( [lrange [dict get $design die_area] 0 1] ) ( [lrange [dict get $design die_area] 2 3] ) ;" + + if {[dict exists $design tracks]} { + } + + if {[dict exists $design rows]} { + foreach idx [lsort -integer [dict keys $design rows]] { + out -nonewline "ROW ROW_$idx [dict keys $design rows $idx site] [dict keys $design rows $idx start] [dict keys $design rows $idx height] [dict keys $design rows $idx orientation]" + out " DO [dict keys $design rows $idx num_sites] BY 1 STEP [dict keys $design rows $idx site_width] 0 ;" + } + } + + if {[dict exists $design pins]} { + out "" + out "PINS [dict size [dict get $design pins]] ;" + dict for {pin_name pin} [dict get $design pins] { + out -nonewline "- $pin_name + NET [dict get $pin net_name] + DIRECTION [dict get $pin direction] " + if {[dict exists $pin use]} { + out -nonewline "+ USE [dict get $pin use] " + } + if {[dict exists $pin special]} { + out -nonewline "+ SPECIAL " + } + out "" + if {[dict exists $pin ports]} { + foreach port [dict get $pin ports] { + if {[llength [dict get $design pins $pin_name ports]] > 1} { + out " + PORT " + } + dict for {layer_name layer_info} [dict get $port layers] { + foreach shape [dict get $port layers $layer_name shapes] { + out -nonewline " + LAYER $layer_name " + if {[dict exists $port layers $layer_name spacing]} { + out "SPACING [dict get $port layers $layer_name spacing] " + } elseif {[dict exists $port layers $layer_name designrulewidth]} { + out "DESIGNRULEWIDTH [dict get $port layers $layer_name designrulewidth] " + } + out "( [lrange [dict get $shape rect] 0 1] ) ( [lrange [dict get $shape rect] 2 3] ) " + } + } + if {[dict exists $port fixed]} { + out " + FIXED ( [dict get $port fixed] ) [dict get $port orientation] " + } elseif {[dict exists $shape placed]} { + out " + PLACED ( [dict get $port placed] ) [dict get $port orientation] " + } + } + out " ;" + } + } + out "END PINS" + } + + ##### Generating via rules + + if {[dict exists $design physical_viarules]} { + out "" + out "VIAS [dict size [dict get $design physical_viarules]] ;" + dict for {name rule} [dict get $design physical_viarules] { + out "- $name" + out " + VIARULE [dict get $rule rule]" + out " + CUTSIZE [dict get $rule cutsize]" + out " + LAYERS [dict get $rule layers]" + out " + CUTSPACING [dict get $rule cutspacing]" + out " + ENCLOSURE [dict get $rule enclosure]" + out " + ROWCOL [dict get $rule rowcol]" + out " ;" + } + out "END VIAS" + } + + if {[dict exists $design components]} { + out "" + out "COMPONENTS [dict size [dict get $design components]] ;" + dict for {inst_name inst} [dict get $design components] { + out -nonewline "- $inst_name [dict get $inst cell_name] " + if {[dict exists $inst fixed]} { + out -nonewline "+ FIXED ( [dict get $inst fixed] ) " + } elseif {[dict exists $inst placed]} { + out -nonewline "+ PLACED ( [dict get $inst placed] ) " + } + if {[dict exists $inst orientation]} { + out -nonewline "[dict get $inst orientation] " + } + out ";" + } + out "END COMPONENTS" + } + + if {[dict exists $design nets]} { + out "" + out "SPECIALNETS [dict size [dict get $design nets]] ;" + dict for {net_name net} [dict get $design nets] { + out -nonewline "- $net_name " + foreach connection [dict get $net connections] { + out " ( $connection )" + } + if {[dict exists $net routes]} { + set type "ROUTED" + foreach route [dict get $net routes] { + set first_point [lindex [dict get $route points] 0] + + foreach point [lrange [dict get $route points] 1 end] { + set points [get_extended_line [dict get $route layer] [list $first_point $point]] + if {[dict exists $route shape]} { + set shape " + SHAPE [dict get $route shape] " + } else { + set shape "" + } + if {[dict exists $route mask]} { + set mask "MASK [dict get $route mask] " + } else { + set mask "" + } + if {[llength $point] == 2} { + out -nonewline " + $type [dict get $route layer] [get_line_width [dict get $route layer] [list $first_point $point]] " + out -nonewline $shape + out -nonewline $points + out -nonewline $mask + } else { + out -nonewline " + $type [dict get $route layer] 0 " + out -nonewline $shape + out -nonewline $points + out -nonewline $mask + } + out "" + set first_point $point + set type "ROUTED" + } + } + } + out " + USE [dict get $net use]\n ;" + } + out "END SPECIALNETS" + } + + if {[dict exists $design special_nets]} { + out "" + out "SPECIALNETS [dict size [dict get $design special_nets]] ;" + dict for {net_name net} [dict get $design special_nets] { + out -nonewline "- $net_name " + foreach connection [dict get $net connections] { + out " ( $connection )" + } + if {[dict exists $net routes]} { + set route [lindex [dict get $net routes] 0] + out -nonewline " + ROUTED [dict get $route layer] [expr round([dict get $route width])] + SHAPE [dict get $route shape] " + foreach point [dict get $route points] { + out -nonewline " $point" + } + out "" + + foreach route [lrange [dict get $net routes] 1 end] { + out " NEW [dict get $route layer] [expr round([dict get $route width])] + SHAPE [dict get $route shape] " + foreach point [dict get $route points] { + out -nonewline " $point" + } + out "" + } + } + out " + USE [dict get $net use]\n ;" + } + out "\nEND SPECIALNETS" + } + + out "" + out "END DESIGN" + } + + proc new_design {design_name units {die_area {0 0 0 0}}} { + variable designs + variable current_design + set current_design $design_name + + dict set designs $current_design [list name $design_name units $units die_area $die_area] + } + + proc add_component {inst_name cell_name x y orientation status} { + variable designs + variable current_design + + dict set designs $current_design components $inst_name inst_name $inst_name + dict set designs $current_design components $inst_name cell_name $cell_name + dict set designs $current_design components $inst_name $status [list $x $y] + dict set designs $current_design components $inst_name orientation $orientation + } + + proc get_current_design {} { + variable designs + variable current_design + + return [dict get $designs $current_design] + } + + proc write_cells {cells} { + dict for {cell_name cell} $cells { + def open ${cell_name}.def + def write $cell + def close + } + } + + proc set_def_units {units} { + variable def_units + + set def_units $units + } + + proc get_def_units {} { + variable def_units + + return $def_units + } + + namespace export new_design add_component get_current_design + namespace export set_def_units get_def_units shift_origin shift_rect + namespace export open close out write write_cells + namespace export set_layer_info + namespace ensemble create +} + +package provide lefdef 1.0.0 diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/pkgIndex.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/pkgIndex.tcl new file mode 100644 index 000000000..4d2f1c4c2 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/pkgIndex.tcl @@ -0,0 +1,2 @@ +package ifneeded lefdef 1.0.0 [list source [file join $dir lefdef.tcl]] +package ifneeded wrapper 1.0.0 [list source [file join $dir wrap_stdcells.tcl]] diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/wrap.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/wrap.tcl new file mode 100755 index 000000000..3ca893b8f --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/wrap.tcl @@ -0,0 +1,31 @@ +#!/bin/sh +# the next line restarts using tclsh \ +exec tclsh "$0" ${1+"$@"} + +package require wrapper +package require lefdef + +if {[set idx [lsearch -exact $argv {-cfg}]] > -1} { + set cfg_file [lindex $argv [expr $idx + 1]] + set argv [lreplace $argv $idx [expr $idx + 1]] + + wrapper information 0 "Loading config file $cfg_file" + source $cfg_file +} else { + wrapper critical 2 "no configuration data loaded" +} + +if {[lindex $argv 0] == "-macro"} { + set lef_files [lrange $argv 1 end] + set cells {} + foreach file_name $lef_files { + puts " Reading $file_name" + set cells [concat $cells [wrapper macro $file_name]] + } + wrapper information 2 "Generated wrappers for" + foreach cell $cells { + puts " $cell" + } +} else { + wrapper critical 1 "Unexpected argument [lindex $argv 0] - should be -macro" +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/wrap_stdcells.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/wrap_stdcells.tcl new file mode 100644 index 000000000..81973237c --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/cell-veneer/wrap_stdcells.tcl @@ -0,0 +1,701 @@ +namespace eval wrapper { + variable wrapper_cfg + + proc set_message {level message} { + return "\[$level\] $message" + } + + proc debug {message} { + set state [info frame -1] + set str "" + if {[dict exists $state file]} { + set str "$str[dict get $state file]:" + } + if {[dict exists $state proc]} { + set str "$str[dict get $state proc]:" + } + if {[dict exists $state line]} { + set str "$str[dict get $state line]" + } + puts [set_message DEBUG "$str: $message"] + } + + proc information {id message} { + puts [set_message INFO [format "\[WRAP-%04d\] %s" $id $message]] + } + + proc warning {id message} { + puts [set_message WARN [format "\[WRAP-%04d\] %s" $id $message]] + } + + proc err {id message} { + puts [set_message ERROR [format "\[WRAP-%04d\] %s" $id $message]] + } + + proc critical {id message} { + error [set_message CRIT [format "\[WRAP-%04d\] %s" $id $message]] + } + + proc find_cells_with_m2_pins {} { + set cells [lef get_cells] + set data {} + + dict for {cell_name cell} $cells { + dict for {pin_name pin} [dict get $cell pins] { + foreach port [dict get $pin ports] { + set offset [wrapper::get_port_offset $port] + set layer_name "M2" + if {[dict exists $port layers $layer_name]} { + foreach shape [dict get $port layers $layer_name shapes] { + + set rect [absolute_rectangle [dict get $shape rect] $offset] + set x1 [lindex $rect 0] + set y1 [lindex $rect 1] + set x2 [lindex $rect 2] + set y2 [lindex $rect 3] + + if {[dict exists $data $cell_name pins $pin_name]} { + set pins [dict get $data $cell_name pins $pin_name] + } else { + set pins {} + } + if {round($y2 - $y1) > 64} { + error "cell $cell_name, pin: $pin_name, [expr $y2 - $y1] -> vertical M2 pin: $y2, $y1" + } + lappend pins [list track [expr round(($y2 + $y1) / 2 / 128)] from $x1 to $x2] + dict set data $cell_name pins $pin_name $pins + } + } + } + } + + if {[dict exists $data $cell_name]} { + dict for {layer_name obstructions} [dict get $cell obstructions] { + if {$layer_name == "M2"} { + foreach obs $obstructions { + set rect [dict get $obs rect] + set x1 [lindex $rect 0] + set y1 [lindex $rect 1] + set x2 [lindex $rect 2] + set y2 [lindex $rect 3] + + if {round(($y2 - $y1)) > 64} { + error "cell $cell_name, blockage, [expr $y2 - $y1] -> vertical blockage: $y2, $y1" + } + if {[dict exists $data $cell_name blockages]} { + set blockages [dict get $data $cell_name blockages] + } else { + set blockages {} + } + + lappend blockages [list track [expr round(($y2 + $y1) / 2 / 128)] from $x1 to $x2] + dict set data $cell_name blockages $blockages + } + } + } + } + } + + return $data + } + + proc clear_left {physical_pin blockages} { + set track [dict get $physical_pin track] + + foreach blockage $blockages { + if {[dict get $blockage track] == $track && [dict get $blockage to] < [dict get $physical_pin from]} { + return 0 + } + } + return 1 + } + + proc clear_right {physical_pin blockages} { + set track [dict get $physical_pin track] + + foreach blockage $blockages { + if {[dict get $blockage track] == $track && [dict get $blockage from] > [dict get $physical_pin to]} { + return 0 + } + } + return 1 + } + + proc create_def_wrapper {cell_name new_cell_name} { + variable tech + set orig_cell [lef get_cell $cell_name] + + set design $orig_cell + + dict set design name $new_cell_name + dict set design tool "cell-veneer" + dict set design units 2000 + dict set design use_sheet_obstructions 0 + if {[dict exists $tech use_sheet_obstructions]} { + dict set design use_sheet_obstructions [dict get $tech use_sheet_obstructions] + } + if {[dict exists $tech blockage_layers]} { + dict set design blockage_layers [dict get $tech blockage_layers] + } + dict set design die_area [dict get $orig_cell die_area] + + dict set design components u0 cell_name $cell_name + dict set design components u0 placed "0 0" + dict set design components u0 orientation "N" + + dict for {pin_name pin} [dict get $orig_cell pins] { + + dict set design pins $pin_name net_name $pin_name + if {[dict exists $pin use]} { + if {[dict get $pin use] == "POWER" || [dict get $pin use] == "GROUND"} { + dict set design special_nets $pin_name connections [list "PIN $pin_name" "* $pin_name"] + dict set design special_nets $pin_name use [dict get $pin use] + } else { + dict set design nets $pin_name connections [list "PIN $pin_name" "u0 $pin_name"] + dict set design nets $pin_name use [dict get $pin use] + } + } else { + dict set design nets $pin_name connections [list "PIN $pin_name" "u0 $pin_name"] + } + } + + return $design + } + + proc get_port_offset {port} { + if {[dict exists $port fixed]} { + return [dict get $port fixed] + } elseif {[dict exists $port placed]} { + return [dict get $port fixed] + } + + return [list 0 0] + } + + proc move_m2_pins_to_edge {cell_name cell_data} { + variable wrapper_cfg + + set wrapper_cell [lef get_cell [dict get $wrapper_cfg padding_cell]] + set padding_cell_width [lindex [dict get $wrapper_cell die_area] 2] + set def_units [dict get $wrapper_cfg def_units] + set layer_name [dict get $wrapper_cfg remove_pins layer] + set layer_width [expr round([dict get $wrapper_cfg layer $layer_name width] * $def_units)] + set new_pin_layer_name [dict get $wrapper_cfg new_pins layer] + set new_pin_layer_width [expr round([dict get $wrapper_cfg layer $new_pin_layer_name width] * $def_units)] + set cell_width [lindex [dict get [lef get_cell $cell_name] die_area] 2] + set design [wrapper::create_def_wrapper $cell_name ${cell_name}_mod] + set lower_y [expr 2 * 128] + set upper_y [expr 8 * 128] + set via_overlap [expr round([dict get $wrapper_cfg via_overlap] * $def_units)] + + set right_padding 0 + set left_padding 0 + + # Determine which sides to route the M2 pins to and create a wire + dict for {pin_name pin} [dict get $cell_data pins] { + set wires {} + foreach physical_pin $pin { + if {[dict get $physical_pin to] >= [expr $cell_width / 2.0]} { + if {[dict exists $cell_data blockages]} { + if {[wrapper::clear_right $physical_pin [dict get $cell_data blockages]]} { + set direction right + } elseif {[wrapper::clear_left $physical_pin [dict get $cell_data blockages]]} { + set direction left + } else { + set direction blocked + } + } else { + set direction right + } + } else { + if {[dict exists $cell_data blockages]} { + if {[wrapper::clear_left $physical_pin [dict get $cell_data blockages]]} { + set direction left + } elseif {[wrapper::clear_right $physical_pin [dict get $cell_data blockages]]} { + set direction right + } else { + set direction blocked + } + } else { + set direction left + } + } + + if {$direction == "blocked"} { + break + } + + set y [expr [dict get $physical_pin track] * 128] + if {$direction == "right"} { + set x1 [dict get $physical_pin to] + set x2 [expr $cell_width + ($padding_cell_width * ($right_padding + 1))] + set x3 [expr $cell_width + ($padding_cell_width * ($right_padding + 1)) + $via_overlap] + incr right_padding + } elseif {$direction == "left"} { + set x1 [dict get $physical_pin from] + set x2 [expr 0 - ($padding_cell_width * ($left_padding + 1))] + set x3 [expr 0 - ($padding_cell_width * ($left_padding + 1)) - $via_overlap] + incr left_padding + } + + # Route M2 out to the side of the block + lappend wires [list \ + layer $layer_name \ + points [list [list $x1 $y] [list $x3 $y] [dict get $wrapper_cfg via]] + ] + set new_wire [list \ + layer "M1" \ + points [list [list $x2 $lower_y] [list $x2 $upper_y]] \ + ] + if {[dict exists $wrapper_cfg new_pins mask]} { + dict set new_wire mask [dict get $wrapper_cfg new_pins mask] + } + lappend wires $new_wire + # Add the new M2 wire as an obstruction when writing the LEF of the cell + if {[dict exists $design obstructions $layer_name]} { + set obstructions [dict get $design obstructions $layer_name] + } else { + set obstructions {} + } + lappend obstructions [list \ + rect [list \ + [expr min($x1, $x3)] [expr $y - round($layer_width / 2)] \ + [expr max($x1, $x3)] [expr $y + round($layer_width / 2)] \ + ] + ] + dict set design obstructions $layer_name $obstructions + + break + } + + if {$direction == "blocked"} { + break + } + + set ports {} + foreach port [dict get $design pins $pin_name ports] { + if {[dict exists $port layers "M2"]} { + set offset [get_port_offset $port] + # Copy all M2 pins on instance to M2 obstructions + foreach shape [dict get $port layers "M2" shapes] { + set pin_rect [absolute_rectangle [dict get $shape rect] $offset] + + set m2_obstructions [dict get $design obstructions M2] + lappend m2_obstructions [list \ + rect $pin_rect \ + ] + dict set design obstructions M2 $m2_obstructions + } + # Replace the M2 port with an M1 port which is now at the side of the cells + set new_pin_rect [list [expr round($x2 - ($new_pin_layer_width / 2))] $lower_y [expr round($x2 + ($new_pin_layer_width / 2))] $upper_y] + if {[dict exists $port layers "M1" shapes]} { + set shapes [dict get $port layers "M1" shapes] + } else { + set shapes {} + } + set new_shape [list \ + rect [relative_rectangle $new_pin_rect $offset] \ + ] + if {[dict exists $wrapper_cfg new_pins mask]} { + dict set new_shape mask [dict get $wrapper_cfg new_pins mask] + } + lappend shapes $new_shape + dict set port layers M1 shapes $shapes + } + dict set port layers [dict remove [dict get $port layers] "M2"] + lappend ports $port + } + dict set design pins $pin_name ports $ports + dict set design nets $pin_name routes $wires + } + + # Adjust the placement of the component if we have padding on the left + if {$left_padding > 0} { + dict set design components u0 placed [list [expr $padding_cell_width * ($left_padding + 1)] 0] + } + + # Add in the cell padding + set pad_idx 0 + if {$left_padding > 0} { + for {set i 0} {$i <= $left_padding} {incr i} { + set x [expr $padding_cell_width * ($i + 1) * -1] + set y 0 + dict set design components p$pad_idx inst_name p$pad_idx + dict set design components p$pad_idx cell_name [dict get $wrapper_cfg padding_cell] + dict set design components p$pad_idx placed [list $x $y] + dict set design components p$pad_idx orientation N + + # Add all obstructions of padding cell to obstructions of wrapper + dict for {layer_name obstructions} [dict get $wrapper_cell obstructions] { + if {[dict exists $design obstructions $layer_name]} { + set current_obstructions [dict get $design obstructions $layer_name] + } else { + set current_obstructions {} + } + foreach obs $obstructions { + dict set obs rect [def shift_rect [dict get $obs rect] $x $y] + lappend current_obstructions $obs + } + dict set design obstructions $layer_name $current_obstructions + } + incr pad_idx + } + } else { + set left_padding -1 + } + if {$right_padding > 0} { + for {set i 0} {$i <= $right_padding} {incr i} { + set x [expr $padding_cell_width * $i + $cell_width] + set y 0 + dict set design components p$pad_idx inst_name p$pad_idx + dict set design components p$pad_idx cell_name [dict get $wrapper_cfg padding_cell] + dict set design components p$pad_idx placed [list $x $y] + dict set design components p$pad_idx orientation N + + # Add all obstructions of padding cell to obstructions of wrapper + dict for {layer_name obstructions} [dict get $wrapper_cell obstructions] { + if {[dict exists $design obstructions $layer_name]} { + set current_obstructions [dict get $design obstructions $layer_name] + } else { + set current_obstructions {} + } + foreach obs $obstructions { + dict set obs rect [def shift_rect [dict get $obs rect] $x $y] + lappend current_obstructions $obs + } + dict set design obstructions $layer_name $current_obstructions + } + incr pad_idx + } + } + + # Adjust origin so that 0,0 is the lowr left corner of the cell + set adjustment [expr $padding_cell_width * ($left_padding + 1)] + set design [def shift_origin $design $adjustment 0] + + dict set design die_area [list \ + 0 \ + 0 \ + [expr [lindex [dict get $design die_area] 2] + (($pad_idx - ($left_padding + 1)) * $padding_cell_width)] \ + [lindex [dict get $design die_area] 3] \ + ] + + # Extend VDD, VSS, VPW, VNW pins to be the width of the wrapper + # VDD overlaps by 0.009 on each side + # VSS overlaps by 0.009 on each side + # VNW overlaps the edges of the cell by 0.1 on both sides + set extend_ports { + VDD {layer M1 overlap 0.009} + VSS {layer M1 overlap 0.009} + VNW {layer NW overlap 0.1} + VPW {layer SXCUT overlap 0} + } + dict for {pin_name info} $extend_ports { + set layer [dict get $info layer] + set overlap [dict get $info overlap] + + set ports {} + foreach port [dict get $design pins $pin_name ports] { + if {[dict exists $port layers $layer]} { + set shapes {} + set offset [get_port_offset $port] + + foreach shape [dict get $port layers $layer shapes] { + set rect [absolute_rectangle [dict get $shape rect] $offset] + dict set shape rect [relative_rectangle \ + [list \ + [expr [lindex [dict get $design die_area] 0] - [expr round($overlap * $def_units)]] \ + [lindex $rect 1] \ + [expr [lindex [dict get $design die_area] 2] + [expr round($overlap * $def_units)]] \ + [lindex $rect 3] \ + ] \ + $offset \ + ] + lappend shapes $shape + } + dict set port layers $layer shapes $shapes + } + lappend ports $port + } + dict set design pins $pin_name ports $ports + } + + return $design + } + + proc build_wrappers {data} { + variable wrapper_cfg + + set designs {} + + dict for {cell_name cell_data} $data { + set data [move_m2_pins_to_edge $cell_name $cell_data $wrapper_cfg] + dict set designs [dict get $data name] $data + } + + return $designs + } + + proc get_pin_rect {port layer} { + if {[dict exists $port fixed]} { + set offset [dict get $port fixed] + } elseif {[dict exists $port placed]} { + set offset [dict get $port placed] + } else { + set offset [list 0 0] + } + + return [absolute_rectangle [dict get [lindex [dict get $port layers $layer shapes] 0] rect] $offset] + } + + proc wrap_macro {cell_name} { + variable tech + set wrapper [wrapper::create_def_wrapper $cell_name ${cell_name}_mod] + debug "$tech" + debug "[dict get $wrapper use_sheet_obstructions]" + + set cell [lef get_cell $cell_name] + # debug "$cell_name" + + # Order the signal pins based on the y location of the pin + set pin_info {} + set net_info {} + set grid_pins {} + + dict for {pin_name pin} [dict get $cell pins] { + if {[dict get $pin use] != "SIGNAL"} {continue} + + # CHEAT: Assume that there is only one port for each pin and one rectangle per layer + set port [lindex [dict get $pin ports] 0] + if {[dict exists $port layers C4]} { + set pin_rect [get_pin_rect $port C4] + dict set net_info $pin_name pin_layer "C4" + } elseif {[dict exists $port layers M3]} { + set pin_rect [get_pin_rect $port M3] + dict set net_info $pin_name pin_layer "M3" + } + + set macro_pin_y [expr ([lindex $pin_rect 1] + [lindex $pin_rect 3]) / 2] + set grid_y [expr round((floor(([lindex $pin_rect 1] + [lindex $pin_rect 3]) / 2 / [dict get $tech pitch horizontal_track]) - 1))] + + # Need to check that the grid point we're trying to use is going to be accessible. + # If it is not, then try the point 2 grid points higher + if {[dict exists $grid_pins $grid_y]} { + if {[dict exists [expr $grid_y + 2]]} { + puts "Cell $cell_name" + puts "Problem assigning pin grid - requested and upper grid points for $pin_name at $grid_y already allocated to [dict get $grid_pins $grid_y] and [dict get $grid_pins [expr $grid_y + 2]]" + exit -1 + } + set grid_y [expr $grid_y + 2] + } + dict set grid_pins $grid_y $pin_name + + dict set net_info $pin_name grid_y $grid_y + dict set net_info $pin_name macro_pin_y $macro_pin_y + } + + set order [lsort -integer [dict keys $grid_pins]] + set prev_pos [lindex $order 0] + + # We will have a jog in the track, which needs to be on a vertical grid 3 units from the edge of the macro + # If there is another pin close by, the we will need to have the jog 3 grids further in + dict set net_info [dict get $grid_pins $prev_pos] h_offset 3 + foreach pin_pos [lrange $order 1 end] { + if {$pin_pos - $prev_pos > 3} { + dict set net_info [dict get $grid_pins $pin_pos] h_offset 3 + } else { + dict set net_info [dict get $grid_pins $pin_pos] h_offset [expr [dict get $net_info [dict get $grid_pins $prev_pos] h_offset] + 3] + } + set prev_pos $pin_pos + } + + # Work out where to place the instance based on the size of amount of jogging space needed + set wrapper_depth 0 + dict for {net_name net} [dict get $net_info] { + if {$wrapper_depth < [dict get $net h_offset]} { + set wrapper_depth [dict get $net h_offset] + } + } + set wrapper_depth [expr $wrapper_depth + 3] + set macro_x [expr $wrapper_depth * [dict get $tech pitch vertical_track]] + set width [expr round((floor([lef get_width $cell] / [dict get $tech pitch vertical_track]) + 1) * [dict get $tech pitch vertical_track] )] + set height [expr round((floor([lef get_height $cell] / [dict get $tech pitch horizontal_track]) + 1) * [dict get $tech pitch horizontal_track])] + + # Now we know where the macro is placed, we know the size of the wrapper + dict set wrapper die_area [list [expr round(-1 * $macro_x)] 0 [expr $width] $height] + # debug "Set die area [dict get $wrapper die_area]" + # Now we know the maximum extent of the space needed for the job we can add in the pins the appropriate number of grids to the left of the RAM + + # Shift the wrapper so the lower left corner is at (0, 0) + set wrapper [def shift_origin $wrapper $macro_x 0] + # debug "Shifted die area [dict get $wrapper die_area]" + + # Add obstructions + foreach obs_layer {M3 J3 C4} { + set obstructions {} + if {[dict exists $wrapper obstructions $obs_layer]} { + set obstructions [dict get $wrapper obstructions $obs_layer] + } + # debug "[lindex [dict get $wrapper obstructions $obs_layer] 0]" + lappend obstructions [list rect [list 0 0 $macro_x $height]] + # debug "[lindex $obstructions 0]" + dict set wrapper obstructions $obs_layer $obstructions + # debug "Added wrapper obstruction [list 0 0 [expr $width + $macro_x] $height]" + } + + + # Add wrapper pins and nets + dict for {net_name net} [dict get $net_info] { + set grid_y [dict get $net grid_y] + set y_position [expr $grid_y * [dict get $tech pitch horizontal_track]] + + set new_port [lindex [dict get $wrapper pins $net_name ports] 0] + dict set new_port layers {} + dict set new_port fixed [list 0 $y_position] + dict set new_port layers "C4" shapes [list \ + [list rect [list 0 [expr 0 - [dict get $tech layer C4 width] / 2] [dict get $tech layer C4 depth] [expr 0 + [dict get $tech layer C4 width] / 2]]] \ + ] + # debug "Replacing pin $net_name with $new_port" + dict set wrapper pins $net_name ports [list $new_port] + + set segments {} + + # First segment from RAM to jog location, to the y grid of the pin + set target_grid_point [expr ($wrapper_depth - [dict get $net h_offset]) * [dict get $tech pitch vertical_track]] + set width [dict get $tech layer [dict get $net pin_layer] width] + lappend segments [list \ + layer [dict get $net pin_layer] \ + points [list \ + "$macro_x [dict get $net macro_pin_y]" \ + "$target_grid_point [dict get $net macro_pin_y]" \ + "$target_grid_point $y_position" \ + ] + ] + if {[dict get $net pin_layer] != "C4"} { + lappend segments [list \ + layer [dict get $net pin_layer] \ + points [list \ + "$target_grid_point $y_position" \ + [dict get $tech via] \ + ] \ + ] + } + lappend segments [list \ + layer C4 \ + points [list \ + "$target_grid_point $y_position" \ + "0 $y_position" \ + ] \ + ] + + dict set wrapper nets $net_name routes $segments + } + + return $wrapper + } + + proc test_harness {wrappers} { + variable wrapper_cfg + + set site_height [expr [dict get $wrapper_cfg site height] * [dict get $wrapper_cfg def_units]] + set site_width [expr [dict get $wrapper_cfg site width] * [dict get $wrapper_cfg def_units]] + set idx 0 + set num_cells [dict size $wrappers] + set num_grids [expr round(sqrt($num_cells)) + 1] + set max_cell_width 0 + dict for {cell_name cell} $wrappers { + set max_cell_width [expr max($max_cell_width,[lindex [dict get $cell die_area] 2])] + } + set grid_x_size [expr $max_cell_width + (2 * $site_width)] + set grid_y_size [expr 4 * $site_height] + + def new_design "test_harness" [dict get $wrapper_cfg def_units] [list 0 0 [expr round($grid_x_size * $num_grids)] [expr round($grid_y_size * $num_grids)]] + + foreach cell [dict keys $wrappers] { + set x [expr round(($idx % $num_grids) * $grid_x_size)] + set y [expr round(round($idx / $num_grids) * $grid_y_size)] + + set orig_cell [regsub {_mod} $cell {}] + def add_component "w_$idx" $cell $x $y N placed + def add_component "o_$idx" $orig_cell $x [expr round($y + (2 * $site_height))] N placed + + incr idx + } + + def open test_harness.def + def write [set design [def get_current_design]] + def close + + return $design + } + + proc set_stdcell_config {config} { + variable wrapper_cfg + set wrapper_cfg $config + } + + proc run {} { + set file_name /projects/ssg/pj10000064_diphda/users/colhol01/openroad/library/arm/cp/14lpp/sc10p5mcpp84_base_lvt_c14/r2p1/lef/sc10p5mcpp84_14lpp_base_lvt_c14.lef + + lef read_macros $file_name + set data [wrapper find_cells_with_m2_pins] + + set wrappers [wrapper build_wrappers $data] + + lef write_cells sc10p5mcpp84_14lpp_base_lvt_c14.mod.lef $wrappers + def write_cells $wrappers + } + + proc convert_tech_to_def_units {tech} { + set def_units [dict get $tech units] + dict for {layer_name layer} [dict get $tech layer] { + foreach property {depth width non_preferred_width} { + if {[dict exists $layer $property]} { + dict set tech layer $layer_name $property [expr round([dict get $layer $property] * $def_units)] + } + } + } + + foreach layer_name [dict keys [dict get $tech layer]] { + foreach property {direction width non_preferred_width} { + if {[dict exists $tech layer $layer_name $property]} { + def set_layer_info $layer_name $property [dict get $tech layer $layer_name $property] + } + } + } + + dict set tech pitch vertical_track [expr round([dict get $tech pitch vertical_track] * $def_units)] + dict set tech pitch horizontal_track [expr round([dict get $tech pitch horizontal_track] * $def_units)] + + return $tech + } + + proc set_macro_config {lef_tech} { + variable tech + + set tech [convert_tech_to_def_units $lef_tech] + } + + proc macro {lef_file} { + lef read_macros $lef_file + set cells {} + + foreach cell_name [dict keys [lef get_cells]] { + # debug "$cell_name" + set designs [list ${cell_name}_mod [wrap_macro $cell_name]] + lef write_macros ${cell_name}_mod.lef $designs + def write_cells $designs + lappend cells $cell_name + } + + return $cells + } + + namespace export find_cells_with_m2_pins macro set_stdcell_config set_macro_config + namespace export information warning err critical + namespace export build_wrappers + namespace export test_harness + namespace ensemble create +} + +package provide wrapper 1.0.0 diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/checkMetadata.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/checkMetadata.py new file mode 100755 index 000000000..4adc90841 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/checkMetadata.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python2 + +# This scripts checks the metadata.json against a set of rules for allowed +# values. This allows degradation in results to be flagged as an error +# in the build. +# +# The rules file has the form +# { +# "rules": [ +# { +# "field" : "", +# "value" : +# "compare": "" +# }, ... +# ] +# } +# +# field is the name of a field in the metadata file +# value is the reference value to compare to +# operator can be one of "<", ">", "<=", ">=", "==", "!=", "%" +# The value is converted to a float for comparison if possible +# +# Note: the operator "%" computes the difference (in percentage) between +# the reference value against the gold metadata. The rule also can have +# an attribute called "sign". The values allowed are "abs" for absolute value +# (default if not explicitly defined), or one of "<", ">", "<=", ">=", "==", "!=". +# In the example below, the value of "tns" can differ by +/- 15% between current run +# and the gold metadata file: +# ... +# { +# "field" : "tns", +# "value" : 15, +# "compare": "%", +# "sign": "abs" +# }, ... +# +# ------------------------------------------------------------------------------- + +import argparse # argument parsing +import json # json parsing +import operator +import sys +from os.path import isfile + +# Parse and validate arguments +# ============================================================================== +parser = argparse.ArgumentParser( + description="Checks metadata from OpenROAD flow against a set of rules" +) +parser.add_argument("--metadata", "-m", required=True, help="The metadata file") +parser.add_argument("--rules", "-r", required=True, nargs="+", help="The rules file") +parser.add_argument( + "--goldMetadata", "-g", required=True, help="The gold/reference metadata file" +) +args = parser.parse_args() + +with open(args.metadata) as metadataFile: + metadata = json.load(metadataFile) + +with open(args.goldMetadata) as goldMetadataFile: + referenceMetadata = json.load(goldMetadataFile) + +rules = list() +for filePath in args.rules: + if isfile(filePath): + with open(filePath) as rulesFile: + rules += json.load(rulesFile)["rules"] + else: + print("[WARN] File {} not found".format(filePath)) +if len(rules) == 0: + print("No rules") + sys.exit(1) + +# Convert to a float if possible +def try_number(s): + try: + return float(s) + except ValueError: + return s + + +ops = { + "<": operator.lt, + ">": operator.gt, + "<=": operator.le, + ">=": operator.ge, + "==": operator.eq, + "!=": operator.ne, + "%": "delta", +} + +errors = 0 + +for rule in rules: + field = rule["field"] + rule_value = try_number(rule["value"]) + compare = rule["compare"] + op = ops[compare] + check_value = try_number(metadata[field]) + + deltaMessage = "" + if op == "delta": + reference_value = try_number(referenceMetadata[field]) + if not isinstance(check_value, float) or not isinstance(reference_value, float): + errors += 1 + print( + "Error: field {} fails rule {} {} {}. Invalid number.".format( + field, check_value, compare, rule_value + ) + ) + continue + percentage = (check_value - reference_value) / reference_value * 100 + deltaMessage = ( + " check_value = {}, reference_value = {}, diff_percentage = {}%".format( + check_value, reference_value, percentage + ) + ) + check_value = percentage + if not rule.has_key("sign") or rule["sign"] == "abs": + check_value = abs(check_value) + op = operator.le + compare = "(absolute value) <=" + else: + compare = rule["sign"] + op = ops[compare] + + if isinstance(rule_value, float) != isinstance(check_value, float) or not op( + check_value, rule_value + ): + errors += 1 + print( + "Error: field {} fails rule {} {} {}.{}".format( + field, check_value, compare, rule_value, deltaMessage + ) + ) + else: + print( + "Passed: field {} passed rule {} {} {}.{}".format( + field, check_value, compare, rule_value, deltaMessage + ) + ) + +if errors == 0: + print("All metadata rules passed ({} rules)".format(len(rules))) +else: + print("Failed metadata checks: {} out of {}".format(errors, len(rules))) + +sys.exit(1 if errors else 0) diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/createGallery.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/createGallery.py new file mode 100644 index 000000000..cd8209dd9 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/createGallery.py @@ -0,0 +1,41 @@ +# This is a KLoayout script to create a screenshot gallery +import json + +import pya + +# Load technology file +tech = pya.Technology() +tech.load(tech_file) +layoutOptions = tech.load_layout_options + +# Load gallery config JSON +main_window = pya.Application.instance().main_window() +with open(gallery_json) as gj: + gallery = json.load(gj) + +for image in gallery: + layout_path = "{0}/{1}".format(results_path, image["layout_file"]) + print("[INFO][FLOW] Loading file '{0}'".format(layout_path)) + main_window.load_layout(layout_path, layoutOptions, 0) + view = main_window.current_view() + + # Force uniform view config + view.set_config("background-color", "#000000") + view.set_config("grid-visible", "false") + view.set_config("text-visible", "false") + view.set_config("inst-color", "#808080") + + view.min_hier_levels = image["min_hierarchy"] + view.max_hier_levels = image["max_hierarchy"] + + if image["hide_layers"]: + i = view.begin_layers() + while not i.at_end(): + i.current().visible = False + i.next() + + save_path = "{0}/gallery_{1}.png".format(results_path, image["name"]) + view.save_image(save_path, image["x_resolution"], image["y_resolution"]) + print("[INFO][FLOW] Saved screenshot to '{0}'".format(save_path)) + +pya.Application.instance().exit(0) diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/def2stream.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/def2stream.py new file mode 100644 index 000000000..e6ab4fed6 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/def2stream.py @@ -0,0 +1,211 @@ +import pya +import re +import json +import copy +import sys +import os + +errors = 0 + +# Expand layers in json +def expand_cfg_layers(cfg): + layers = cfg["layers"] + expand = [layer for layer in layers if "layers" in layers[layer]] + for layer in expand: + for i, (name, num) in enumerate( + zip(layers[layer]["names"], layers[layer]["layers"]) + ): + new_layer = copy.deepcopy(layers[layer]) + del new_layer["names"] + new_layer["name"] = name + del new_layer["layers"] + new_layer["layer"] = num + layers[name] = new_layer + del layers[layer] + + +def read_cfg(): + print("INFO: Reading config file: " + config_file) + with open(config_file, "r") as f: + cfg = json.load(f) + + expand_cfg_layers(cfg) + cfg = cfg["layers"] # ignore the rest + + # Map gds layers & datatype to KLayout indices + # These are arrays for the different mask numbers + for layer, vals in cfg.items(): + layer = vals["layer"] + for key in ("opc", "non-opc"): + if key not in vals: + continue + data = vals[key] + if isinstance(data["datatype"], int): + data["datatype"] = [data["datatype"]] # convert to array + data["klayout"] = [ + main_layout.find_layer(layer, datatype) for datatype in data["datatype"] + ] + + return cfg + + +# match a line like: +# - LAYER M2 + MASK 2 + OPC RECT ( 3000 3000 ) ( 5000 5000 ) ; +rect_pat = re.compile( + r""" + \s*\-\ LAYER\ (?P\S+) # The layer name + (?: # Non-capturing group + \s+\+\ MASK\ (?P\d+) # Mask, None if absent + )? + (?P # OPC, None if absent + \s+\+\ OPC + )? + \s+RECT\ + \(\ (?P\d+)\ (?P\d+)\ \)\ # rect lower-left pt + \(\ (?P\d+)\ (?P\d+)\ \)\ ; # rect upper-right pt + """, + re.VERBOSE, +) + + +def read_fills(top): + if config_file == "": + print("WARNING: no fill config file specified") + return + # KLayout doesn't support FILL in DEF so we have to side load them :( + cfg = read_cfg() + in_fills = False + units = None + with open(in_def) as fp: + for line in fp: + if in_fills: + if re.match("END FILLS", line): + break # done with fills; don't care what follows + m = re.match(rect_pat, line) + if not m: + raise Exception("Unrecognized fill: " + line) + opc_type = "opc" if m.group("opc") else "non-opc" + mask = m.group("mask") + if not mask: # uncolored just uses first entry + mask = 0 + else: + mask = int(mask) - 1 # DEF is 1-based indexing + layer = cfg[m.group("layer")][opc_type]["klayout"][mask] + xlo = int(m.group("xlo")) / units + ylo = int(m.group("ylo")) / units + xhi = int(m.group("xhi")) / units + yhi = int(m.group("yhi")) / units + top.shapes(layer).insert(pya.DBox(xlo, ylo, xhi, yhi)) + elif re.match("FILLS \d+ ;", line): + in_fills = True + elif not units: + m = re.match("UNITS DISTANCE MICRONS (\d+)", line) + if m: + units = float(m.group(1)) + + +# Load technology file +tech = pya.Technology() +tech.load(tech_file) +layoutOptions = tech.load_layout_options +if len(layer_map) > 0: + layoutOptions.lefdef_config.map_file = layer_map + +# Load def file +main_layout = pya.Layout() +print("[INFO] Reporting cells prior to loading DEF ...") +for i in main_layout.each_cell(): + print("[INFO] '{0}'".format(i.name)) + +print("[INFO] Reading DEF ...") +main_layout.read(in_def, layoutOptions) + +# print("[INFO] Reporting cells after loading DEF ...") +# for i in main_layout.each_cell(): +# print("[INFO] '{0}'".format(i.name)) + +# Clear cells +top_cell_index = main_layout.cell(design_name).cell_index() + +# remove orphan cell BUT preserve cell with VIA_ +# - KLayout is prepending VIA_ when reading DEF that instantiates LEF's via +print("[INFO] Clearing cells...") +for i in main_layout.each_cell(): + if i.cell_index() != top_cell_index: + if not i.name.startswith("VIA_"): + i.clear() + +# Load in the gds to merge +print("[INFO] Merging GDS/OAS files...") +for fil in in_files.split(): + print("\t{0}".format(fil)) + main_layout.read(fil) + +# Copy the top level only to a new layout +print("[INFO] Copying toplevel cell '{0}'".format(design_name)) +top_only_layout = pya.Layout() +top_only_layout.dbu = main_layout.dbu +top = top_only_layout.create_cell(design_name) +top.copy_tree(main_layout.cell(design_name)) + +read_fills(top) + +print("[INFO] Checking for missing cell from GDS/OAS...") +missing_cell = False +regex = None +if "GDS_ALLOW_EMPTY" in os.environ: + print("[INFO] Found GDS_ALLOW_EMPTY variable.") + regex = os.getenv("GDS_ALLOW_EMPTY") +for i in top_only_layout.each_cell(): + if i.is_empty(): + missing_cell = True + if regex is not None and re.match(regex, i.name): + print( + "[WARNING] LEF Cell '{0}' ignored. Matches GDS_ALLOW_EMPTY.".format( + i.name + ) + ) + else: + print( + "[ERROR] LEF Cell '{0}' has no matching GDS/OAS cell." + " Cell will be empty.".format(i.name) + ) + errors += 1 + +if not missing_cell: + print("[INFO] All LEF cells have matching GDS/OAS cells") + +print("[INFO] Checking for orphan cell in the final layout...") +orphan_cell = False +for i in top_only_layout.each_cell(): + if i.name != design_name and i.parent_cells() == 0: + orphan_cell = True + print("[ERROR] Found orphan cell '{0}'".format(i.name)) + errors += 1 + +if not orphan_cell: + print("[INFO] No orphan cells") + + +if seal_file: + + top_cell = top_only_layout.top_cell() + + print("[INFO] Reading seal GDS/OAS file...") + print("\t{0}".format(seal_file)) + top_only_layout.read(seal_file) + + for cell in top_only_layout.top_cells(): + if cell != top_cell: + print( + "[INFO] Merging '{0}' as child of '{1}'".format( + cell.name, top_cell.name + ) + ) + top.insert(pya.CellInstArray(cell.cell_index(), pya.Trans())) + +# Write out the GDS +print("[INFO] Writing out GDS/OAS '{0}'".format(out_file)) +top_only_layout.write(out_file) + +sys.exit(errors) diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/gallery.json b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/gallery.json new file mode 100644 index 000000000..78fa89719 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/gallery.json @@ -0,0 +1,47 @@ +[ + { + "name" : "floorplan", + "layout_file": "2_floorplan.def", + "min_hierarchy": 0, + "max_hierarchy": 1, + "x_resolution": 2000, + "y_resolution": 2000, + "hide_layers": false + }, + { + "name" : "placement", + "layout_file": "4_1_cts.def", + "min_hierarchy": 0, + "max_hierarchy": 1, + "x_resolution": 2000, + "y_resolution": 2000, + "hide_layers": true + }, + { + "name" : "cts", + "layout_file": "6_final_only_clk.def", + "min_hierarchy": 0, + "max_hierarchy": 1, + "x_resolution": 2000, + "y_resolution": 2000, + "hide_layers": false + }, + { + "name" : "final", + "layout_file": "6_final.def", + "min_hierarchy": 0, + "max_hierarchy": 1, + "x_resolution": 2000, + "y_resolution": 2000, + "hide_layers": false + }, + { + "name" : "final_no_power", + "layout_file": "6_final_no_power.def", + "min_hierarchy": 0, + "max_hierarchy": 1, + "x_resolution": 2000, + "y_resolution": 2000, + "hide_layers": false + } +] diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/genMetrics.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/genMetrics.py new file mode 100755 index 000000000..649d2f281 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/genMetrics.py @@ -0,0 +1,571 @@ +#!/usr/bin/env python3 + +# This scripts attempts to extract relevant data from a completed flow design +# and save it into a "metadata.json". It achieves this by looking for specific +# information in specific files using regular expressions +# ------------------------------------------------------------------------------- + +import argparse # argument parsing +import datetime +import json # json parsing +import os # filesystem manipulation +import platform +import re +import subprocess +import sys +import uuid + +import pandas as pd + + +# Parse and validate arguments +# ============================================================================== +def parse_args(): + parser = argparse.ArgumentParser( + description="Generates metadata from OpenROAD flow" + ) + parser.add_argument( + "--flowPath", + "-f", + required=False, + default="./", + help="Path to the flow directory", + ) + parser.add_argument( + "--design", + "-d", + required=False, + default="all_designs", + help="Path to the flow directory", + ) + parser.add_argument( + "--platform", + "-p", + required=False, + default="nangage45", + help="Path to the flow directory", + ) + parser.add_argument( + "--comment", + "-c", + required=False, + default="", + help="Additional comments to embed", + ) + parser.add_argument( + "--output", "-o", required=False, default="metadata.json", help="Output file" + ) + args = parser.parse_args() + + if not os.path.isdir(args.flowPath): + print("Error: flowPath does not exist") + print("Path: " + args.flowPath) + sys.exit(1) + + return args + + +# Functions +# ============================================================================== +# Main function to do specific extraction of patterns from a file + +# This function will look for a regular expression "pattern" in a "file", and +# set the key, "jsonTag", to the value found. The specific "occurrence" selects +# which occurrence it uses (default -1, i.e., last). If pattern not found, it +# will print an error and set the value to N/A. If a "defaultNotFound" is set, +# it will use that instead. If count is set to True, it will return the count +# of the pattern. + + +def extractTagFromFile( + jsonTag, + jsonFile, + pattern, + file, + count=False, + occurrence=-1, + defaultNotFound="N/A", + t=str, +) -> None: + if jsonTag in jsonFile: + print("[WARN] Overwriting Tag", jsonTag) + + # Open file + try: + searchFilePath = os.path.join(args.flowPath, file) + with open(searchFilePath) as f: + content = f.read() + + m = re.findall(pattern, content, re.M) + + if m: + if count: + # Return the count + jsonFile[jsonTag] = len(m) + else: + # Note: This gets the specified occurrence + value = m[occurrence] + if isinstance(value, tuple): + value = value[arrayPos] + value = value.strip() + try: + jsonFile[jsonTag] = float(value) + except: + jsonFile[jsonTag] = str(value) + else: + # Only print a warning if the defaultNotFound is not set + if defaultNotFound == "N/A": + print("[WARN] Tag", jsonTag, "not found in", searchFilePath) + jsonFile[jsonTag] = defaultNotFound + except IOError: + print("[WARN] Failed to open file:", searchFilePath) + jsonFile[jsonTag] = "ERR" + + +def extractGnuTime(prefix, file, jsonFile) -> None: + extractTagFromFile( + prefix + "__runtime__total", jsonFile, "^(\S+)elapsed \S+CPU \S+memKB", file + ) + extractTagFromFile( + prefix + "__cpu__total", jsonFile, "^\S+elapsed (\S+)CPU \S+memKB", file + ) + extractTagFromFile( + prefix + "__mem__peak", jsonFile, "^\S+elapsed \S+CPU (\S+)memKB", file + ) + + +# +# Extract clock info from sdc file +# +def read_sdc(file_name): + sdcFile = open(file_name, "r") + lines = sdcFile.readlines() + sdcFile.close() + + clkList = [] + for line in lines: + if len(line.split()) < 2: + continue + if line.split()[0] == "create_clock": + clk_idx = line.split().index("-name") + clkName = line.split()[clk_idx + 1] + period_idx = line.split().index("-period") + period = line.split()[period_idx + 1] + + clk = "%s: %s" % (clkName, period) + clkList.append(clk) + + clkList.sort() + return clkList + + +# Main +# ============================================================================== + + +def extract_metrics(cwd, platform, design, output): + logPath = os.path.join(cwd, "logs", platform, design) + rptPath = os.path.join(cwd, "reports", platform, design) + resultPath = os.path.join(cwd, "results", platform, design) + + metrics_dict = {} + metrics_dict["run__flow__generate__date"] = now.strftime("%Y-%m-%d %H:%M") + cmdOutput = subprocess.check_output(["openroad", "-version"]) + cmdFields = cmdOutput.split() + cmdFields = [x.decode("utf-8") for x in cmdOutput.split()] + metrics_dict["run__flow__openroad__version"] = str(cmdFields[0]) + if len(cmdFields) > 1: + metrics_dict["run__flow__openroad__commit"] = str(cmdFields[1]) + else: + metrics_dict["run__flow__openroad__commit"] = "N/A" + metrics_dict["run__flow__uuid"] = str(uuid.uuid4()) + metrics_dict["run__flow__design"] = design + metrics_dict["run__flow__platform"] = platform + + # Synthesis + # ============================================================================== + + extractTagFromFile( + "synth__area__stdcell__count", + metrics_dict, + "Number of cells: +(\S+)", + rptPath + "/synth_stat.txt", + ) + + extractTagFromFile( + "synth__area__stdcell__area", + metrics_dict, + "Chip area for module.*: +(\S+)", + rptPath + "/synth_stat.txt", + ) + + # Clocks + # =============================================================================== + + clk_list = read_sdc(resultPath + "/2_floorplan.sdc") + metrics_dict["constraints__clocks__count"] = len(clk_list) + metrics_dict["constraints__clocks__details"] = clk_list + + # Floorplan + # ============================================================================== + + extractTagFromFile( + "floorplan__timing__tns_total", + metrics_dict, + "^tns (\S+)", + logPath + "/2_1_floorplan.log", + ) + + extractTagFromFile( + "floorplan__timing__wns__worst", + metrics_dict, + "^wns (\S+)", + logPath + "/2_1_floorplan.log", + ) + + extractTagFromFile( + "floorplan__area__stdcell__count", + metrics_dict, + "^Design area (\S+) u\^2", + logPath + "/2_1_floorplan.log", + ) + + extractTagFromFile( + "floorplan__area__instance__util", + metrics_dict, + "^Design area.* (\S+)% utilization", + logPath + "/2_1_floorplan.log", + ) + + extractTagFromFile( + "floorplan__area__IO__count", + metrics_dict, + "Num of I/O +(\d+)", + logPath + "/3_2_place_iop.log", + ) + + extractTagFromFile( + "floorplan__area__macros__count", + metrics_dict, + "Extracted # Macros: (\S+)", + logPath + "/2_4_mplace.log", + defaultNotFound=0, + ) + + # Place + # ============================================================================== + + extractTagFromFile( + "globalplace__area__density__target", + metrics_dict, + "TargetDensity: (\S+)", + logPath + "/3_1_place_gp.log", + ) + + extractTagFromFile( + "globalplace__area__wirelength__estimate", + metrics_dict, + "Total wirelength: (\S+)", + logPath + "/3_1_place_gp.log", + ) + + extractTagFromFile( + "globalplace__timing__tns__total", + metrics_dict, + "^tns (\S+)", + logPath + "/3_1_place_gp.log", + ) + + extractTagFromFile( + "globalplace__timing__wns__worst", + metrics_dict, + "^wns (\S+)", + logPath + "/3_1_place_gp.log", + ) + + extractTagFromFile( + "placeopt__area__inbuffer__count", + metrics_dict, + "Inserted (\d+) input buffers", + logPath + "/3_3_resizer.log", + ) + + extractTagFromFile( + "placeopt__area__outbuffer__count", + metrics_dict, + "Inserted (\d+) output buffers", + logPath + "/3_3_resizer.log", + ) + + extractTagFromFile( + "placeopt__area__resize__count", + metrics_dict, + "Resized (\d+) instances", + logPath + "/3_3_resizer.log", + ) + + extractTagFromFile( + "placeopt__timing__tns__total", + metrics_dict, + "^tns (\S+)", + logPath + "/3_3_resizer.log", + ) + + extractTagFromFile( + "placeopt__timing__wns__worst", + metrics_dict, + "^wns (\S+)", + logPath + "/3_3_resizer.log", + ) + + extractTagFromFile( + "placeopt__area__instance__area", + metrics_dict, + "^Design area (\S+) u\^2", + logPath + "/3_3_resizer.log", + ) + + extractTagFromFile( + "placeopt__area__instance__util", + metrics_dict, + "^Design area.* (\S+)% utilization", + logPath + "/3_3_resizer.log", + ) + + extractTagFromFile( + "detailedplace__timing__tns__total", + metrics_dict, + "^tns (\S+)", + logPath + "/3_4_opendp.log", + ) + + extractTagFromFile( + "detailedplace__timing__wns__worst", + metrics_dict, + "^wns (\S+)", + logPath + "/3_4_opendp.log", + ) + + extractTagFromFile( + "detailedplace__inst__displacement__total", + metrics_dict, + "total displacement +(\d*\.?\d*)", + logPath + "/3_4_opendp.log", + ) + + extractTagFromFile( + "detailedplace__inst__displacement__average", + metrics_dict, + "average displacement +(\d*\.?\d*)", + logPath + "/3_4_opendp.log", + ) + + extractTagFromFile( + "detailedplace__inst__displacement__max", + metrics_dict, + "max displacement +(\d*\.?\d*)", + logPath + "/3_4_opendp.log", + ) + + extractTagFromFile( + "detailedplace__wirelength__initial__estimate", + metrics_dict, + "original HPWL +(\d*\.?\d*)", + logPath + "/3_4_opendp.log", + ) + + extractTagFromFile( + "detailedplace__wirelength__final__estimate", + metrics_dict, + "legalized HPWL +(\d*\.?\d*)", + logPath + "/3_4_opendp.log", + ) + + # CTS + # ============================================================================== + + extractTagFromFile( + "cts__timing__slack__tns", metrics_dict, "^tns (\S+)", logPath + "/4_1_cts.log" + ) + + extractTagFromFile( + "cts__timing__slack__wns", metrics_dict, "^wns (\S+)", logPath + "/4_1_cts.log" + ) + + # Route + # ============================================================================== + + extractTagFromFile( + "globalroute__timing__tns__total", + metrics_dict, + "^tns (\S+)", + logPath + "/5_1_fastroute.log", + ) + + extractTagFromFile( + "globalroute__timing__wns__worst", + metrics_dict, + "^wns (\S+)", + logPath + "/5_1_fastroute.log", + ) + + extractTagFromFile( + "detailedroute__wirelength", + metrics_dict, + "total wire length = +(\S+) um", + logPath + "/5_2_TritonRoute.log", + ) + + extractTagFromFile( + "detailedroute__via__count", + metrics_dict, + "total number of vias = +(\S+)", + logPath + "/5_2_TritonRoute.log", + ) + + extractTagFromFile( + "detailedroute__errors__count", + metrics_dict, + "(?i)error:", + logPath + "/5_2_TritonRoute.log", + count=True, + defaultNotFound=0, + ) + + extractTagFromFile( + "detailedroute__drc__error__count", + metrics_dict, + "(?i)violation", + rptPath + "/5_route_drc.rpt", + count=True, + defaultNotFound=0, + ) + + # Finish + # ============================================================================== + + extractTagFromFile( + "finish__power__internal__total", + metrics_dict, + "Total +(\S+) +\S+ +\S+ +\S+ +\S+", + logPath + "/6_report.log", + ) + + extractTagFromFile( + "finish__power__switch__total", + metrics_dict, + "Total +\S+ +(\S+) +\S+ +\S+ +\S+", + logPath + "/6_report.log", + ) + + extractTagFromFile( + "finish__power__leak__total", + metrics_dict, + "Total +\S+ +\S+ +(\S+) +\S+ +\S+", + logPath + "/6_report.log", + ) + + extractTagFromFile( + "finish__power__total", + metrics_dict, + "Total +\S+ +\S+ +\S+ +(\S+) +\S+", + logPath + "/6_report.log", + ) + + extractTagFromFile( + "finish__area", + metrics_dict, + "^Design area (\S+) u\^2", + logPath + "/6_report.log", + ) + + extractTagFromFile( + "finish__util", + metrics_dict, + "^Design area.* (\S+)% utilization", + logPath + "/6_report.log", + ) + + # Accumulate time + # ============================================================================== + + failed = False + total = datetime.timedelta() + for key in metrics_dict: + if key.endswith("_time"): + # Big try block because Hour and microsecond is optional + try: + t = datetime.datetime.strptime(metrics_dict[key], "%H:%M:%S.%f") + except ValueError: + try: + t = datetime.datetime.strptime(metrics_dict[key], "%M:%S.%f") + except ValueError: + try: + t = datetime.datetime.strptime(metrics_dict[key], "%H:%M:%S") + except ValueError: + try: + t = datetime.datetime.strptime(metrics_dict[key], "%M:%S") + except ValueError: + failed = True + break + + delta = datetime.timedelta(hours=t.hour, minutes=t.minute, seconds=t.second) + total += delta + + if failed: + metrics_dict["total_time"] = "ERR" + else: + metrics_dict["total_time"] = str(total) + + with open(output, "w") as resultSpecfile: + json.dump(metrics_dict, resultSpecfile, indent=2) + + metrics_df = pd.DataFrame(list(metrics_dict.items())) + col_index = metrics_df.iloc[0][1] + "__" + metrics_df.iloc[1][1] + metrics_df.columns = ["Metrics", col_index] + + return metrics_dict, metrics_df + + +args = parse_args() +now = datetime.datetime.now() + +if args.design == "all_designs": + print("List of designs") + rootdir = "./logs" + + all_metrics_df = pd.DataFrame() + all_metrics = [] + + cwd = os.getcwd() + for platform_it in os.scandir(rootdir): + if platform_it.is_dir(): + plt = platform_it.name + for design_it in os.scandir(platform_it.path): + if design_it.is_dir(): + des = design_it.name + print(plt, des) + design_metrics, design_metrics_df = extract_metrics( + cwd, + plt, + des, + os.path.join(".", "reports", plt, des, "metrics.json"), + ) + all_metrics.append(design_metrics) + if all_metrics_df.shape[0] == 0: + all_metrics_df = design_metrics_df + else: + all_metrics_df = all_metrics_df.merge( + design_metrics_df, on="Metrics", how="inner" + ) + # + # render to html + # + metrics_html = all_metrics_df.to_html() + metrics_html_file = open("metrics.html", "w") + metrics_html_file.write(metrics_html) + metrics_html_file.close() +else: + metrics_dict, metrics_df = extract_metrics( + args.flowPath, args.platform, args.design, args.output + ) diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/markDontUse.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/markDontUse.py new file mode 100755 index 000000000..06a4de175 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/markDontUse.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import argparse # argument parsing +import re + +# Parse and validate arguments +# ============================================================================== +parser = argparse.ArgumentParser( + description="Replaces occurrences of cells in def or verilog files" +) +parser.add_argument("--patterns", "-p", required=True, help="List of search patterns") +parser.add_argument("--inputFile", "-i", required=True, help="Input File") +parser.add_argument("--outputFile", "-o", required=True, help="Output File") +args = parser.parse_args() + + +# Convert * wildcards to regex wildcards +patternList = args.patterns.replace("*", ".*").split() + +# Read input file +print("Opening file for replace:", args.inputFile) +f = open(args.inputFile) +content = f.read() +f.close() + +# Pattern to match a cell header +pattern = r"(^\s*cell\s*\(\s*([\"]*" + '["]*|["]*'.join(patternList) + '["]*)\)\s*\{)' + +# print(pattern) +replace = r"\1\n dont_use : true;" +content, count = re.subn(pattern, replace, content, 0, re.M) +print("Marked", count, "cells as dont_use") + + +# Yosys-abc throws an error if original_pin is found within the liberty file. +# removing +pattern = r"(.*original_pin.*)" +replace = r"/* \1 */;" +content, count = re.subn(pattern, replace, content) +print("Commented", count, 'lines containing "original_pin"') + +# Write output file +print("Writing replaced file:", args.outputFile) +f = open(args.outputFile, "w") +f.write(content) +f.close() diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/mergeLef.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/mergeLef.py new file mode 100755 index 000000000..477658bff --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/mergeLef.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +import argparse # argument parsing +import os +import re + +# WARNING: this script expects the tech lef first + +# Parse and validate arguments +# ============================================================================== +parser = argparse.ArgumentParser(description="Merges lefs together") +parser.add_argument("--inputLef", "-i", required=True, help="Input Lef", nargs="+") +parser.add_argument("--outputLef", "-o", required=True, help="Output Lef") +args = parser.parse_args() + + +print(os.path.basename(__file__), ": Merging LEFs") + +f = open(args.inputLef[0]) +content = f.read() +f.close() + + +# Using a set so we get unique entries +propDefinitions = set() + +# Remove Last line ending the library +content = re.sub("END LIBRARY", "", content) + +# Iterate through additional lefs +for lefFile in args.inputLef[1:]: + f = open(lefFile) + snippet = f.read() + f.close() + + # Match the sites + pattern = r"(^SITE (\S+).*?END\s+\2)" + m = re.findall(pattern, snippet, re.M | re.DOTALL) + + print(os.path.basename(lefFile) + ": SITEs matched found: " + str(len(m))) + for groups in m: + content += "\n" + groups[0] + + # Match the macros + pattern = r"(^MACRO (\S+\s).*?END\s+\2)" + m = re.findall(pattern, snippet, re.M | re.DOTALL) + + print(os.path.basename(lefFile) + ": MACROs matched found: " + str(len(m))) + for groups in m: + content += "\n" + groups[0] + + # Match the property definitions + pattern = r"^(PROPERTYDEFINITIONS)(.*?)(END PROPERTYDEFINITIONS)" + m = re.search(pattern, snippet, re.M | re.DOTALL) + + if m: + print(os.path.basename(lefFile) + ": PROPERTYDEFINITIONS found") + propDefinitions.update(map(str.strip, m.group(2).split("\n"))) + + +# Add Last line ending the library +content += "\nEND LIBRARY" + +# Update property definitions + +# Find property definitions in base lef +pattern = r"^(PROPERTYDEFINITIONS)(.*?)(END PROPERTYDEFINITIONS)" +m = re.search(pattern, content, re.M | re.DOTALL) +if m: + print(os.path.basename(lefFile) + ": PROPERTYDEFINITIONS found in base lef") + propDefinitions.update(map(str.strip, m.group(2).split("\n"))) + + +replace = r"\1" + "\n".join(propDefinitions) + r"\n\3" +content = re.sub(pattern, replace, content, 0, re.M | re.DOTALL) + +# Save the merged lef +f = open(args.outputLef, "w") +f.write(content) +f.close() + +print(os.path.basename(__file__), ": Merging LEFs complete") diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/mergeLib.pl b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/mergeLib.pl new file mode 100755 index 000000000..dfcb17f9f --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/mergeLib.pl @@ -0,0 +1,61 @@ +#!/usr/bin/perl + +# This script is sourced from Brown (with slight modifications). It merges +# several timing libraries into one. +# ------------------------------------------------------------------------------ + +use strict; +use warnings; + +my $sclname = $ARGV[0]; +shift @ARGV; +my $cnt = @ARGV; + +if($cnt>0){ + process_header($ARGV[0]); + my $file; + foreach my $file (@ARGV) { + process_cells($file) + } + print "\n}\n"; +} else { + print "use: mergeLib.pl new_library_name lib1 lib2 lib3 ...."; +} + + +sub process_header { + my $filename = shift; + open(my $fh, '<', $filename) or die "Could not open file $filename $!"; + while (<$fh>) { + if(/library\s*\(/) { + print "library ($sclname) {\n"; + next; + } + last if(/^[\t\s]*cell\s*\(/); + print $_; + } + close($fh) +} + +sub process_cells { + my $filename = shift; + + open(my $fh, '<', $filename) or die "Could not open file $filename $!"; + + my $flag = 0; + # cut the cells + while (<$fh>) { + #chomp $_; + if(/^[\t\s]*cell\s*\(/) {#&& $flag==0){ + die "Error! new cell before finishing the previous one!\n" if($flag!=0); + print "\n$_"; + $flag=1; + } elsif($flag > 0){ + $flag++ if(/\{/); + $flag-- if(/\}/); + #print "...}\n" if($flag==0); + print "$_"; + } + } + close($fh) +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/openfasoc/cdl_parser.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/openfasoc/cdl_parser.py index a59e8a9dc..1a414409c 100755 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/openfasoc/cdl_parser.py +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/openfasoc/cdl_parser.py @@ -23,56 +23,52 @@ parser.add_argument("--outputCdl", "-o", required=True, help="output CDL netlist") args = parser.parse_args() - -with open(args.stdCdl, "r") as rf: +with open(args.inputCdl, "r") as rf: filedata = rf.read() - -std_pin_order_dict = {} # map object, see notes in the for each loop below -std_cells_re = re.findall( - "\.subckt (.*)", filedata -) # "\.subckt (.*)" means all lines where ".subckt " occurs. Breakdown below +# std_pin_order_dict = {} # map object, see notes in the for each loop below +# std_cells_re = re.findall( +# "\.subckt (.*)", filedata +# ) # "\.subckt (.*)" means all lines where ".subckt " occurs. Breakdown below # The "\." is used to indicate "." without invoking special meaning, so look for ".subckt " # The "." matches any char !except newline!, the "*" make the resulting Reg Exp match repetitions of the preceding RE # () must be used with special chars. So basically (.*) means after the Reg Exp specified by "\.subckt ", match the rest of the line -for std_cell in std_cells_re: - std_cell_info = std_cell.split(" ") - # std_cell example: "sky130_fd_sc_hd__a2111o_1 A1 A2 B1 C1 D1 VGND VNB VPB VPWR X" - std_pin_order_dict[std_cell_info[0]] = std_cell_info[1:] - # std_cell_info array example ['sky130_fd_sc_hd__a2111o_1', 'A1', 'A2', 'B1', 'C1', 'D1', 'VGND', 'VNB', 'VPB', 'VPWR', 'X'] - # Example key:val std_pin_order_dict {'sky130_fd_sc_hd__a2111o_1': ['A1', 'A2', 'B1', 'C1', 'D1', 'VGND', 'VNB', 'VPB', 'VPWR', 'X']} +# for std_cell in std_cells_re: +# std_cell_info = std_cell.split(" ") +# std_cell example: "sky130_fd_sc_hd__a2111o_1 A1 A2 B1 C1 D1 VGND VNB VPB VPWR X" +# std_pin_order_dict[std_cell_info[0]] = std_cell_info[1:] +# std_cell_info array example ['sky130_fd_sc_hd__a2111o_1', 'A1', 'A2', 'B1', 'C1', 'D1', 'VGND', 'VNB', 'VPB', 'VPWR', 'X'] +# Example key:val std_pin_order_dict {'sky130_fd_sc_hd__a2111o_1': ['A1', 'A2', 'B1', 'C1', 'D1', 'VGND', 'VNB', 'VPB', 'VPWR', 'X']} # The input Cdl netlist (inputz/6_final.cdl). read that entire file into "filedata" i.e. overwrite filedata -with open(args.inputCdl, "r") as rf: - filedata = rf.read() - filedata = filedata.replace( - "VIN ", "", 1 - ) # replace VIN with nothing one time (i.e. delete the pin in toplevel) - - # If only one connection point for the r_VIN route is specified, then the pin is r_VIN - # If multiple connection points are specified for VIN, the pins are r_VIN(0), r_VIN(1) etc., and they also appear in the toplevel subckt of inputCdl - if int(os.environ["VIN_ROUTE_CONNECTION_POINTS"]) == 1: - filedata = filedata.replace( - "r_VIN", "", 1 - ) # if there is only one r_VIN connection pin, replace r_VIN with nothing one time (i.e. delete the pin in toplevel) - elif int(os.environ["VIN_ROUTE_CONNECTION_POINTS"]) > 1: - for i in range(int(os.environ["VIN_ROUTE_CONNECTION_POINTS"])): - filedata = filedata.replace( - "r_VIN({})".format(i), "", 1 - ) # if there are N r_VIN connection pins, replace all pins r_VIN(i) with nothing one time (i.e. delete the pins in toplevel) - - filedata = filedata.replace( - " VIN ", " r_VIN " - ) # replace all instances of “ VIN “ with “ r_VIN “ - filedata = filedata.replace( - " VIN", " r_VIN " - ) # replace all instances of “VIN “ with “ r_VIN “ +# with open(args.inputCdl, "r") as rf: +# filedata = rf.read() +# filedata = filedata.replace( +# "VIN ", "", 1 +# ) # replace VIN with nothing one time (i.e. delete the pin in toplevel) +# If only one connection point for the r_VIN route is specified, then the pin is r_VIN +# If multiple connection points are specified for VIN, the pins are r_VIN(0), r_VIN(1) etc., and they also appear in the toplevel subckt of inputCdl +# if int(os.environ["VIN_ROUTE_CONNECTION_POINTS"]) == 1: +# filedata = filedata.replace( +# "r_VIN", "", 1 +# ) # if there is only one r_VIN connection pin, replace r_VIN with nothing one time (i.e. delete the pin in toplevel) +# elif int(os.environ["VIN_ROUTE_CONNECTION_POINTS"]) > 1: +# for i in range(int(os.environ["VIN_ROUTE_CONNECTION_POINTS"])): +# filedata = filedata.replace( +# "r_VIN({})".format(i), "", 1 +# ) # if there are N r_VIN connection pins, replace all pins r_VIN(i) with nothing one time (i.e. delete the pins in toplevel) +# filedata = filedata.replace( +# " VIN ", " r_VIN " +# ) # replace all instances of “ VIN “ with “ r_VIN “ +# filedata = filedata.replace( +# " VIN", " r_VIN " +# ) # replace all instances of “VIN “ with “ r_VIN “ with open(args.outputCdl, "w") as wf: ckt_re = re.search("(\.SUBCKT.*\n(\+.*\n)*)((.*\n)*)(\.ENDS.*)", filedata) - if not ckt_re: + if ckt_re is None: ckt_re = re.search("(\.subckt.*\n(\+.*\n)*)((.*\n)*)(\.ends.*)", filedata) ckt_head = ckt_re.group(1) ckt_cells = ckt_re.group(3) diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/place_ro.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/place_ro.py new file mode 100644 index 000000000..77b8bc6ad --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/place_ro.py @@ -0,0 +1,197 @@ +import argparse # argument parsing +import math +import re + + +def place_inv(fp_dim, array_dim, cell_dim) -> None: + r_def = open(args.inputDef, "r") + lines = list(r_def.readlines()) + w_def = open(args.outputDef, "w") + + # create a dictionary to store the data + inv_array_dict = dict() + other_comp_dict = dict() + + # retrieve parameters + x, y = array_dim + p, q = fp_dim + a, b = cell_dim + + # keep track of max and min instance numbers + max_inst_num = 0 + min_inst_num = 0 + + # only take the lines inside of COMPONENTS + is_component = False + for line in lines: + # set is_component based on the line + if line.find("END COMPONENTS") == 0: + is_component = False + elif line.find("COMPONENTS") == 0: + is_component = True + + # only process the inv lines that are within COMPONENTS + if line.find(target_instance) != -1 and is_component: + + def_component = line.strip().split(" ")[1:3] + + # inst_name is the part after the '.' + inst_name = def_component[0].split(".")[1] + + # inst_num is the last set of digits + find_last_num = re.findall(r"\d+", inst_name) + + # for inv in array + if len(find_last_num) != 0 and line.find("inv") != -1: + inst_num = int(find_last_num[-1]) + # cell = def_component[1] + + # store the data inside of dict + inv_array_dict[inst_num] = [line] + + # update max/min instance num + if inst_num > max_inst_num: + max_inst_num = inst_num + if inst_num < min_inst_num: + min_inst_num = inst_num + # for all other components in ro + else: + other_comp_dict[inst_name] = [line] + + # assign positions to each inv in array inside inv_array_dict, remove the old component placements in "lines" on the go + # TODO: Take care of odd ninvs? + for i in range(0, int(math.ceil(len(inv_array_dict) / 1))): + + inv_sm = i + inv_lg = max_inst_num - i + + y_index_sm = (i // x) * 2 + y_index_lg = (i // x) * 2 + 1 + + # for cells on columns that have (x_index_sm / 2) % 2 == 1, their y_indices should be flipped + # arrange_direction: 1 => reversed, 0 => same as index + arrange_direction = (y_index_sm / 2) % 2 + + if arrange_direction: + x_index = x - (i % x) + ori_sm = "FN" + ori_lg = "FS" + else: + x_index = i % x + 1 + ori_sm = "N" + ori_lg = "S" + + coord_sm = ( + math.floor(math.floor(p / a) / (x + 1)) * (x_index + 1) * a, + math.floor(math.floor(q / b) / (y)) * (y_index_sm) * b, + ) + coord_lg = ( + math.floor(math.floor(p / a) / (x + 1)) * (x_index + 1) * a, + math.floor(math.floor(q / b) / (y)) * (y_index_lg) * b, + ) + + # move the smaller one left by 3 units to avoid overlap + # new_sm_coord_x = coord_sm[0] - 3 * a + # coord_sm = (new_sm_coord_x, coord_sm[1]) + + print("Inv", inv_sm, "(", x_index, ",", y_index_sm, ")", coord_sm) + print("Inv", inv_lg, "(", x_index, ",", y_index_lg, ")", coord_lg) + + # store inside dictionary + inv_array_dict[inv_sm].extend([ori_sm, coord_sm]) + inv_array_dict[inv_lg].extend([ori_lg, coord_lg]) + + # assign positions to each of the other components inside other_comp_dict, remove the old component placements in "lines" on the go + coord_nand = ( + math.floor(math.floor(p / a) / (x + 1)) * (1) * a, + math.floor(math.floor(q / b) / (y)) * (1) * b, + ) + coord_invout = ( + math.floor(math.floor(p / a) / (x + 1)) * (1) * a, + math.floor(math.floor(q / b) / (y)) * (0) * b, + ) + + # HARD CODED inv_out and nand placement + other_comp_dict["a_inv_out"].extend(["N", coord_invout]) + other_comp_dict["a_nand_0"].extend(["S", coord_nand]) + + # remove the placed components from lines + for key, value in inv_array_dict.items(): + lines.remove(value[0]) + + for key, value in other_comp_dict.items(): + lines.remove(value[0]) + + # write into def file + # only take the lines inside of COMPONENTS + is_component = False + for line in lines: + # output the line into file + w_def.write(line) + + # set is_component based on the line + if line.find("END COMPONENTS") == 0: + is_component = False + elif line.find("COMPONENTS") == 0: + is_component = True + + # if inside component, immediatly write the results previously stored in the dictionaries + if is_component: + for key, value in inv_array_dict.items(): + # apply offset + value[2] = tuple(map(sum, zip(value[2], core_die_offset))) + + insertion = [ + "+", + "FIXED", + "(", + str(round(value[2][0] * 1000)), + str(round(value[2][1] * 1000)), + ")", + value[1], + ";", + ] + new_line = value[0].replace(";", " ".join(insertion)) + # print(new_line) + w_def.writelines(new_line) + + for key, value in other_comp_dict.items(): + value[2] = tuple(map(sum, zip(value[2], core_die_offset))) + insertion = [ + "+", + "FIXED", + "(", + str(round(value[2][0] * 1000)), + str(round(value[2][1] * 1000)), + ")", + value[1], + ";", + ] + new_line = value[0].replace(";", " ".join(insertion)) + # print(new_line) + w_def.writelines(new_line) + + # make is_component False so that the components are only written once + is_component = False + + +parser = argparse.ArgumentParser(description="Place Ring Oscillator") +parser.add_argument("--inputDef", "-i", required=True, help="Input Def") +parser.add_argument("--outputDef", "-o", required=True, help="Output Def") +parser.add_argument("--coreDim", "-c", required=True, help="Core Dim") +parser.add_argument("--arrayDim", "-a", required=True, help="Array Dim") +parser.add_argument("--coreDieOffset", "-s", required=True, help="CoreDie Offset") +parser.add_argument("--cellDim", "-d", required=True, help="Cell Dim") +parser.add_argument("--targetInst", "-t", required=True, help="Target Inst") +args = parser.parse_args() + + +# Notice here the cell is horizontal, swap the ab in cell_dim (The unit dim) +core_dim = tuple(list(map(float, args.coreDim.split(",")))) +array_dim = tuple(list(map(int, args.arrayDim.split(",")))) +cell_dim = tuple(list(map(float, args.cellDim.split(",")))) +core_die_offset = tuple(list(map(float, args.coreDieOffset.split(",")))) +target_instance = args.targetInst + + +place_inv(core_dim, array_dim, cell_dim) diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/rules-global.json b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/rules-global.json new file mode 100644 index 000000000..5814b105c --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/rules-global.json @@ -0,0 +1,15 @@ +{ + "rules": [ + { + "field" : "detailedroute__errors__count", + "value" : 0, + "compare": "<=" + }, + { + "field" : "finish__area", + "value" : 1, + "compare": "%", + "sign": "<=" + } + ] +} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/utils.mk b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/utils.mk new file mode 100644 index 000000000..a329a776f --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/utils.mk @@ -0,0 +1,207 @@ +# Utilities +#=============================================================================== + +metadata: $(REPORTS_DIR)/metadata-$(FLOW_VARIANT)-check.log + +clean_metadata: + rm -f $(REPORTS_DIR)/metadata-$(FLOW_VARIANT)-check.log + rm -f $(REPORTS_DIR)/metadata-$(FLOW_VARIANT).json + +.PHONY: update_metadata update_rules update_ok +update_ok: update_metadata update_rules + +update_metadata: $(REPORTS_DIR)/metadata-$(FLOW_VARIANT).json + cp -f $(REPORTS_DIR)/metadata-$(FLOW_VARIANT).json \ + $(DESIGN_DIR)/metadata-$(FLOW_VARIANT)-ok.json + +update_rules: + $(UTILS_DIR)/genRuleFile.py $(DESIGN_DIR) $(FLOW_VARIANT) + +$(REPORTS_DIR)/metadata-$(FLOW_VARIANT).json: + echo $(DESIGN_DIR) > $(REPORTS_DIR)/design-dir.txt + $(UTILS_DIR)/genMetrics.py -d $(DESIGN_NICKNAME) \ + -p $(PLATFORM) \ + -v $(FLOW_VARIANT) \ + -o $@ 2>&1 | tee $(REPORTS_DIR)/gen-metrics-$(FLOW_VARIANT)-check.log + +RULES_DESIGN = $(dir $(DESIGN_CONFIG))rules-$(FLOW_VARIANT).json + +$(REPORTS_DIR)/metadata-$(FLOW_VARIANT)-check.log: $(REPORTS_DIR)/metadata-$(FLOW_VARIANT).json + $(UTILS_DIR)/checkMetadata.py -m $< -r $(RULES_DESIGN) 2>&1 | tee $@ + + +# Run test using gnu parallel +#------------------------------------------------------------------------------- +TEST_SCRIPT ?= $(TEST_DIR)/core_tests.sh +run_test: + parallel --sshloginfile $(TEST_DIR)/nodes.txt \ + --timeout 21600 \ + --workdir `pwd` < $(TEST_SCRIPT) \ + --joblog $(TEST_DIR)/parallel.log + +clean_test: + rm -rf $(TEST_DIR)/logs + rm -rf $(TEST_DIR)/parallel.log + +# Utility to create issues +#------------------------------------------------------------------------------- +# Run "make {script}_issue" where script is wildcarded from the scripts folder +# e.g "make cts_issue" +# Set the ISSUE_TAG variable to rename the generated tar file +#------------------------------------------------------------------------------- +ISSUE_TAG ?= $(DESIGN_NICKNAME)_$(PLATFORM)_$(FLOW_VARIANT)_$(shell date +"%Y-%m-%d_%H-%M") +ISSUE_SCRIPTS = $(patsubst %.tcl,%,$(notdir $(sort $(wildcard $(SCRIPTS_DIR)/*.tcl)))) +ISSUE_CP_DESIGN_FILE_VARS = SDC_FILE \ + VERILOG_FILES \ + CACHED_NETLIST \ + FOOTPRINT_TCL \ + FOOTPRINT \ + SIG_MAP_FILE \ + IO_CONSTRAINTS \ + MACRO_PLACEMENT \ + RTLMP_CONFIG_FILE \ + DFF_LIB_FILE + +ISSUE_CP_PLATFORM_FILE_VARS = LIB_FILES \ + SC_LEF \ + TECH_LEF \ + ADDITIONAL_LEFS \ + CLKGATE_MAP_FILE \ + ADDER_MAP_FILE \ + LATCH_MAP_FILE \ + CDL_FILE \ + MAKE_TRACKS \ + POST_FLOORPLAN_TCL \ + TAPCELL_TCL \ + PDN_CFG \ + PDN_TCL \ + POST_PDN_TCL \ + POST_CTS_TCL \ + PRE_GLOBAL_ROUTE \ + FASTROUTE_TCL \ + POST_DETAIL_ROUTE_TCL \ + RCX_RULES \ + FILL_CONFIG + +ISSUE_CP_FILE_VARS = $(ISSUE_CP_DESIGN_FILE_VARS) +ifndef EXCLUDE_PLATFORM +ISSUE_CP_FILE_VARS += $(ISSUE_CP_PLATFORM_FILE_VARS) +ISSUE_CP_FILES_PLATFORM = $(PLATFORM_DIR)/*.tcl $(PLATFORM_DIR)/*.cfg +endif + +VARS_BASENAME = vars-$(DESIGN_NICKNAME)-$(PLATFORM)-$(FLOW_VARIANT) +RUN_ME_SCRIPT = run-me-$(DESIGN_NICKNAME)-$(PLATFORM)-$(FLOW_VARIANT).sh + +$(foreach script,$(ISSUE_SCRIPTS),$(script)_issue): %_issue : versions.txt + # Creating $(RUN_ME_SCRIPT) script + @echo "#!/usr/bin/env bash" > $(RUN_ME_SCRIPT) + @echo "source $(VARS_BASENAME).sh" >> $(RUN_ME_SCRIPT) + @echo "openroad -no_init $(SCRIPTS_DIR)/$*.tcl" >> $(RUN_ME_SCRIPT) + @chmod +x $(RUN_ME_SCRIPT) + + # Creating $(VARS_BASENAME).sh/tcl script + -@rm -f $(VARS_BASENAME).sh $(VARS_BASENAME).tcl $(VARS_BASENAME).gdb + @$(foreach V, $(.VARIABLES), \ + $(if $(filter-out environment% default automatic, $(origin $V)), \ + echo export $V="'$($V)'" >> $(VARS_BASENAME).sh ; \ + ) \ + ) + @$(foreach V, $(.VARIABLES), \ + $(if $(filter-out environment% default automatic, $(origin $V)), \ + echo set env\($V\) \""$($V)\"" >> $(VARS_BASENAME).tcl ; \ + ) \ + ) + @$(foreach V, $(.VARIABLES), \ + $(if $(filter-out environment% default automatic, $(origin $V)), \ + echo set env $V "$($V)" >> $(VARS_BASENAME).gdb ; \ + ) \ + ) + # remove variables starting with a dot + @sed -i -e '/export \./d' $(VARS_BASENAME).sh + @sed -i -e '/set env(\./d' $(VARS_BASENAME).tcl + @sed -i -e '/set env \./d' $(VARS_BASENAME).gdb + # remove non portable commands + @sed -i '/TIME_CMD/d' $(VARS_BASENAME).sh + @sed -i '/TIME_CMD/d' $(VARS_BASENAME).tcl + @sed -i '/TIME_CMD/d' $(VARS_BASENAME).gdb + +# This requires gnu-tar to support --xform + # Archiving issue to $*_$(ISSUE_TAG).tar.gz + @tar --ignore-failed-read -czhf $*_$(ISSUE_TAG).tar.gz \ + --xform='s|^|$*_$(ISSUE_TAG)/|S' \ + $(LOG_DIR) \ + $(OBJECTS_DIR) \ + $(REPORTS_DIR) \ + $(RESULTS_DIR) \ + $(SCRIPTS_DIR) \ + $(UTILS_DIR)/def2stream.py \ + $(foreach var,$(ISSUE_CP_FILE_VARS),$($(var))) \ + $(ISSUE_CP_FILES_PLATFORM) \ + $(RUN_ME_SCRIPT) \ + $(VARS_BASENAME).sh \ + $(VARS_BASENAME).tcl \ + $(VARS_BASENAME).gdb \ + $^ + +ifdef EXCLUDE_PLATFORM + # Remove liberty and lef files from tar file + @gunzip -f $*_$(ISSUE_TAG).tar.gz + @tar --list --file $*_$(ISSUE_TAG).tar | grep -iE "*.(lib|lef|tlef)$$" | xargs -r tar --delete --file $*_$(ISSUE_TAG).tar + @gzip $*_$(ISSUE_TAG).tar +endif + + @if [ ! -z $${COPY_ISSUE+x} ]; then \ + mkdir -p $${COPY_ISSUE} ; \ + cp $*_$(ISSUE_TAG).tar.gz $${COPY_ISSUE} ; \ + fi + +clean_issues: + rm -rf $(foreach issue, $(ISSUE_SCRIPTS), $(issue)_*.tar.gz) + rm -rf $(VARS_BASENAME).sh $(RUN_ME_SCRIPT) + +$(RESULTS_DIR)/6_final_only_clk.def: $(RESULTS_DIR)/6_final.def + $(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/deleteNonClkNets.tcl + +$(RESULTS_DIR)/6_final_no_power.def: $(RESULTS_DIR)/6_final.def + $(TIME_CMD) $(OPENROAD_CMD) $(SCRIPTS_DIR)/deletePowerNets.tcl + + +gallery: $(RESULTS_DIR)/6_final_no_power.def $(RESULTS_DIR)/6_final_only_clk.def + ($(TIME_CMD) klayout -z -nc -rx -rd gallery_json=util/gallery.json \ + -rd results_path=$(RESULTS_DIR) \ + -rd tech_file=$(OBJECTS_DIR)/klayout.lyt \ + -rm $(UTILS_DIR)/createGallery.py) 2>&1 | tee $(LOG_DIR)/6_1_merge.log + +view_cells: + $(OPENROAD_GUI_CMD) $(SCRIPTS_DIR)/view_cells.tcl + +## Quick access to command line +command: + $(OPENROAD_NO_EXIT_CMD) + +## Provide easy access to debugging +ifdef GDB +OPENROAD_EXE := gdb --args $(OPENROAD_EXE) +endif + +## Provide easy way to run valgrind +ifdef VALGRIND +OPENROAD_EXE := valgrind $(VALGRIND_ARGS) $(OPENROAD_EXE) +endif + +## Convert RVE DRC database to JSON +convert_rve: $(OBJECTS_DIR)/drc.json + +$(OBJECTS_DIR)/drc.json: $(DRC_FILE) +ifneq ($(DRC_FILE),) + $(KLAYOUT_CMD) -z -rd in_drc="$<" \ + -rd out_file="$@" \ + -rm $(UTILS_DIR)/convertDrc.py +else + @echo "No DRC_FILE defined." +endif + +# Update the clock period sdc based on the worst slack reported by the final +# (post global route) timing. +update_sdc_clocks: $(RESULTS_DIR)/route.guide + cp $(RESULTS_DIR)/updated_clks.sdc $(SDC_FILE) diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/viewDrc.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/viewDrc.py new file mode 100644 index 000000000..3c943b215 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/viewDrc.py @@ -0,0 +1,68 @@ +# This is a KLayout script to load a TritonRoute DRC rpt file +# and make a marker database. Markers are categorized by their +# 'violation type'. + +import re + +import pya + +app = pya.Application.instance() +win = app.main_window() + +# Load technology file +tech = pya.Technology() +tech.load(tech_file) +layoutOptions = tech.load_layout_options + +# Load def file in the main window +cell_view = win.load_layout(in_def, layoutOptions, 0) +layout_view = cell_view.view() + +rdb_id = layout_view.create_rdb("TritonRoute") +rdb = layout_view.rdb(rdb_id) +cell = rdb.create_cell(cell_view.cell_name) + +bbox_re = " *bbox = \( ([^,]+), ([^)]+) \) - \( ([^,]+), ([^)]+) \) on (Layer .*)" + +categories = {} + +# The format is a simple three line repetition. 'Field' keeps +# track of where we are in the pattern. +field = 0 +with open(in_drc) as fp: + for line in fp: + if field == 0: + m = re.match(" *violation type: (.*)", line) + assert m + viol = m.group(1) + elif field == 1: + assert "srcs:" in line + srcs = line.lstrip() + elif field == 2: + m = re.match(bbox_re, line) + assert m + lx = float(m.group(1)) + ly = float(m.group(2)) + ux = float(m.group(3)) + uy = float(m.group(4)) + layer = m.group(5) + + if field == 2: + if viol not in categories: + category = rdb.create_category(viol) + categories[viol] = category + + category = categories[viol] + item = rdb.create_item(cell, category) + bbox = pya.DBox(lx, ly, ux, uy) + item.add_value(bbox) + item.add_value(layer) + item.add_value(srcs) + + field = 0 + else: + field += 1 + +assert field == 0 + +win.menu().action("tools_menu.browse_markers").trigger() diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/util/viewGuide.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/viewGuide.py new file mode 100644 index 000000000..49c8fca44 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/util/viewGuide.py @@ -0,0 +1,80 @@ +# This is a KLayout script to load a FastRoute guide file +# and make a marker database for one net + +import re + +import pya + +# lx ly ux uy layer_name +bbox_re = re.compile("(\d+) (\d+) (\d+) (\d+) (\w+)") +categories = {} + + +def add_box(line) -> bool: + m = re.match(bbox_re, line) + if not m: + assert line.strip() == ")" + return False + + # covert DBU to microns + # TODO: get conversion factor from KLayout + lx = float(m.group(1)) / 2000.0 + ly = float(m.group(2)) / 2000.0 + ux = float(m.group(3)) / 2000.0 + uy = float(m.group(4)) / 2000.0 + layer = m.group(5) + + if layer not in categories: + category = rdb.create_category(layer) + categories[layer] = category + + category = categories[layer] + item = rdb.create_item(cell, category) + bbox = pya.DBox(lx, ly, ux, uy) + item.add_value(bbox) + + return True + + +app = pya.Application.instance() +win = app.main_window() + +# Load technology file +tech = pya.Technology() +tech.load(tech_file) +layoutOptions = tech.load_layout_options + +# Load def file in the main window +cell_view = win.load_layout(in_def, layoutOptions, 0) +layout_view = cell_view.view() + +rdb_id = layout_view.create_rdb("FastRoute") +rdb = layout_view.rdb(rdb_id) +cell = rdb.create_cell(cell_view.cell_name) + +# The format is net_name ( ... ) ... +field = 0 +on_net = False +with open(in_guide) as fp: + for line in fp: + if field == 0: + m = re.match("(.*)", line) + assert m + net = m.group(1) + on_net = net == net_name + field = 1 + elif field == 1: + assert line.strip() == "(" + field = 2 + elif field == 2: + if on_net: + if not add_box(line): + field = 0 + else: + if line.strip() == ")": + field = 0 + + +assert field == 0 + +win.menu().action("tools_menu.browse_markers").trigger() From 4a80f9964ccfc8630e6090c6d210e2146167bdd6 Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Fri, 19 Apr 2024 20:38:38 +0000 Subject: [PATCH 09/20] fix:add slash --- .github/workflows/glayout.yml | 2 +- .../lvs_flow/run_glayout_lvs.py | 201 ++++++++++++++++++ 2 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/run_glayout_lvs.py diff --git a/.github/workflows/glayout.yml b/.github/workflows/glayout.yml index 8ff0011fb..5dd267be2 100644 --- a/.github/workflows/glayout.yml +++ b/.github/workflows/glayout.yml @@ -76,7 +76,7 @@ jobs: -w $PWD\ $IMAGE_NAME\ bash -c "\ - cp ./.github/scripts/run_glayout_lvs.py ./openfasoc/generators/gdsfactory-gen/lvs_flow. &&\ + cp ./.github/scripts/run_glayout_lvs.py ./openfasoc/generators/gdsfactory-gen/lvs_flow/. &&\ pip3 install -r ./openfasoc/generators/gdsfactory-gen/glayout/requirements.txt &&\ pip3 install gdsfactory==7.7.0 &&\ cd ./openfasoc/generators/gdsfactory-gen/ &&\ diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/run_glayout_lvs.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/run_glayout_lvs.py new file mode 100644 index 000000000..c6a881478 --- /dev/null +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/run_glayout_lvs.py @@ -0,0 +1,201 @@ +import os +import sys +import re +import subprocess as sp +from gdsfactory.component import Component + +sys.path.append(os.path.join(os.path.dirname(__file__), '..')) +sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '.github', 'scripts')) + +from glayout.pdk.sky130_mapped import sky130_mapped_pdk as sky130 +from glayout.pdk.gf180_mapped import gf180_mapped_pdk as gf180 +from glayout.components.diff_pair import diff_pair +from glayout.primitives.fet import nmos, pmos +from glayout.components.opamp import opamp + +from run_glayout_drc import place_component + +# ########################################################################################################### +# ########################################################################################################### +def get_gds_netlist(component_name, func, pdk, gds_path): + """used to return the netlist and component object for the + desired component's placement + + Args: + component_name (str): the global descriptor for the instantiated component + func (callable[[Component], any]): the function to be called to generate the component + pdk (MappedPDK): the pdk object for which the component is to be generated + gds_path (str): the path to the generated gds file + + Returns: + Component: the instance of the component + str: the netlist string + """ + component = place_component(component_name, func, pdk) + component.write_gds(gds_path) + netlist = component.info['netlist'].generate_netlist() + return netlist, component + + +def compname_in_net(mynet: str) -> str: + """used to edit netlist to change the component name to + the test component name for global definition + + Args: + mynet (str): the netlist string input + + Returns: + str: the modified netlist string + """ + pattern_diff = re.compile(r'\bDIFF_PAIR\b') + pattern_nmos = re.compile(r'\bNMOS\b') + pattern_pmos = re.compile(r'\bPMOS\b') + pattern_opamp = re.compile(r'\bopamp\b') + patterns = [pattern_diff, pattern_nmos, pattern_pmos, pattern_opamp] + replacements = ['diff_test', 'nmos_test', 'pmos_test', 'opamp_test'] + + for i, pattern in enumerate(patterns): + if pattern.search(mynet): + replacement = replacements[i] + mynet = re.sub(pattern, replacement, mynet) + return mynet + +def edit_makefile(comp: Component, makefile_path: str): + """used to edit the makefile to change the DESIGN_NAME variable + according to the component name + + Args: + comp (Component): the component object for which the makefile is to be edited + makefile_path (str): the string path to the makefile + """ + pattern = re.compile(r'export DESIGN_NAME = (.*)_test') + my_var = comp.name + + with open(makefile_path, 'r') as rf: + data = rf.read() + + new_content = re.sub(pattern, f'export DESIGN_NAME = {my_var}', data) + + with open(makefile_path, 'w') as wf: + wf.write(new_content) + +def evaluate_report(report_fle: str) -> bool: + """used to evaluate the lvs report file + + Args: + report_fle (str): the path to the lvs report file (6_final_lvs.rpt) + + Returns: + bool: The flag indicating if the lvs run was successful + """ + with open(report_fle, 'r') as file: + report_content = file.read() + + string1 = 'Cell pin lists are equivalent.' + string2 = 'Netlists match with' + + if string1 in report_content and string2 in report_content: + return True + return False +###################################################################################################################################################################################################################### +###################################################################################################################################################################################################################### + + +gds_path = './results/sky130hd/glayout/6_final.gds' +cdl_path = './results/sky130hd/glayout/6_final.cdl' +report_path = './reports/sky130hd/glayout/6_final_lvs.rpt' +makefile_script = './Makefile' + +## PMOS +mynet, comp = get_gds_netlist('pmos_test', pmos, sky130, gds_path) + +net_file = cdl_path +mynet = compname_in_net(mynet) +with open(net_file, 'w') as wf: + wf.write(mynet) + +edit_makefile(comp, makefile_script) + +subproc_cmd = ['make', 'netgen_lvs'] +sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) +stdout, stderr = sub.communicate() + +print(stdout) + +report_return_code = evaluate_report(report_path) + +if report_return_code: + print(f'LVS run successful for pmos_test') +else: + print(f'LVS failed for pmos_test!') + sys.exit(1) + +## NMOS +mynet, comp = get_gds_netlist('nmos_test', nmos, sky130, gds_path) + +net_file = cdl_path +mynet = compname_in_net(mynet) +with open(net_file, 'w') as wf: + wf.write(mynet) + +edit_makefile(comp, makefile_script) + +subproc_cmd = ['make', 'netgen_lvs'] +sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) +stdout, stderr = sub.communicate() + +print(stdout) + +report_return_code = evaluate_report(report_path) + +if report_return_code: + print(f'LVS run successful for nmos_test') +else: + print(f'LVS failed for nmos_test!') + sys.exit(1) + +## DIFF_PAIR +mynet, comp = get_gds_netlist('diff_test', diff_pair, sky130, gds_path) + +net_file = cdl_path +mynet = compname_in_net(mynet) +with open(net_file, 'w') as wf: + wf.write(mynet) + +edit_makefile(comp, makefile_script) + +subproc_cmd = ['make', 'netgen_lvs'] +sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) +stdout, stderr = sub.communicate() + +print(stdout) + +report_return_code = evaluate_report(report_path) + +if report_return_code: + print(f'LVS run successful for diff_test') +else: + print(f'LVS failed for diff_test!') + sys.exit(1) + +## OPAMP +##### not using currently because not LVS clean +# mynet, comp = get_gds_netlist('opamp_test', opamp, sky130, gds_path) + +# net_file = cdl_path +# mynet = compname_in_net(mynet) +# with open(net_file, 'w') as wf: +# wf.write(mynet) + +# edit_makefile(comp, makefile_script) + +# subproc_cmd = ['make', 'netgen_lvs'] +# sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) +# stdout, stderr = sub.communicate() + +# print(stdout) + +# if sub.returncode != 0: +# print(f'LVS failed for opamp_test with error:\n {stderr}') +# else: +# print(f'LVS run successful for opamp_test') \ No newline at end of file From f67d5ad34b51c2b58d3869744511eaa8cad01df4 Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Fri, 19 Apr 2024 20:47:13 +0000 Subject: [PATCH 10/20] fix: force directory creation --- .github/workflows/glayout.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/glayout.yml b/.github/workflows/glayout.yml index 5dd267be2..a0d455095 100644 --- a/.github/workflows/glayout.yml +++ b/.github/workflows/glayout.yml @@ -34,9 +34,9 @@ jobs: -w $PWD\ $IMAGE_NAME\ bash -c "\ - mkdir ./res &&\ - mkdir ./res/reports &&\ - mkdir ./res/results &&\ + mkdir -p ./res &&\ + mkdir -p ./res/reports &&\ + mkdir -p ./res/results &&\ cp ./.github/scripts/setup_glayout_ci.py ./openfasoc/generators/gdsfactory-gen/. &&\ pip3 install -r ./openfasoc/generators/gdsfactory-gen/glayout/requirements.txt &&\ pip3 install gdsfactory==7.7.0 &&\ From 277f210c2d5d32afb1ea988dc59ed9715ab2b278 Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Fri, 19 Apr 2024 20:58:23 +0000 Subject: [PATCH 11/20] fix: fix workflow file --- .github/workflows/glayout.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/glayout.yml b/.github/workflows/glayout.yml index a0d455095..4ce501de5 100644 --- a/.github/workflows/glayout.yml +++ b/.github/workflows/glayout.yml @@ -79,7 +79,7 @@ jobs: cp ./.github/scripts/run_glayout_lvs.py ./openfasoc/generators/gdsfactory-gen/lvs_flow/. &&\ pip3 install -r ./openfasoc/generators/gdsfactory-gen/glayout/requirements.txt &&\ pip3 install gdsfactory==7.7.0 &&\ - cd ./openfasoc/generators/gdsfactory-gen/ &&\ + cd ./openfasoc/generators/gdsfactory-gen/lvs-flow &&\ python3 run_glayout_lvs.py " && exit_code=$? | tee -a file_sky130_lvs.log if [ $? -ne 0 ]; then exit 1; fi From a0c94f4586070a30e525981e95af59c2d0a648df Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Fri, 19 Apr 2024 21:12:02 +0000 Subject: [PATCH 12/20] fix workflow file --- .github/workflows/glayout.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/glayout.yml b/.github/workflows/glayout.yml index 4ce501de5..3c699a49e 100644 --- a/.github/workflows/glayout.yml +++ b/.github/workflows/glayout.yml @@ -79,7 +79,7 @@ jobs: cp ./.github/scripts/run_glayout_lvs.py ./openfasoc/generators/gdsfactory-gen/lvs_flow/. &&\ pip3 install -r ./openfasoc/generators/gdsfactory-gen/glayout/requirements.txt &&\ pip3 install gdsfactory==7.7.0 &&\ - cd ./openfasoc/generators/gdsfactory-gen/lvs-flow &&\ + cd ./openfasoc/generators/gdsfactory-gen/lvs_flow &&\ python3 run_glayout_lvs.py " && exit_code=$? | tee -a file_sky130_lvs.log if [ $? -ne 0 ]; then exit 1; fi From b34ba919714fd0ef5941d6dade771f79a164c2f2 Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Sat, 20 Apr 2024 20:46:18 +0000 Subject: [PATCH 13/20] fix: cleanup folders and remove unwanted gitignores --- .github/scripts/run_glayout_lvs.py | 2 +- openfasoc/common/drc-lvs-check/.gitignore | 1 - .../sky130A/cryo_models/nshort.spice | 420 ++++++++++++++++++ .../sky130A/cryo_models/nshortlvth.spice | 420 ++++++++++++++++++ .../sky130A/cryo_models/pmos.spice | 419 +++++++++++++++++ .../drc-lvs-check/sky130A/sky130A.magicrc | 86 ++++ .../drc-lvs-check/sky130A/sky130A_setup.tcl | 419 +++++++++++++++++ .../gdsfactory-gen/lvs_flow/.gitignore | 11 +- .../gdsfactory-gen/lvs_flow/Makefile | 146 +----- .../lvs_flow/run_glayout_lvs.py | 201 --------- .../lvs_flow/scripts/add_routing_blk.tcl | 49 -- .../gdsfactory-gen/lvs_flow/scripts/cdl.tcl | 4 - .../scripts/create_custom_connections.tcl | 27 -- .../lvs_flow/scripts/def_to_odb.tcl | 24 - .../lvs_flow/scripts/deleteNonClkNets.tcl | 38 -- .../lvs_flow/scripts/deletePowerNets.tcl | 29 -- .../scripts/deleteRoutingObstructions.tcl | 11 - .../lvs_flow/scripts/density_fill.tcl | 27 -- .../lvs_flow/scripts/detail_place.tcl | 87 ---- .../lvs_flow/scripts/detail_route.tcl | 53 --- .../lvs_flow/scripts/fillcell.tcl | 11 - .../lvs_flow/scripts/final_report.tcl | 61 --- .../lvs_flow/scripts/floorplan.tcl | 153 ------- .../lvs_flow/scripts/global_place.tcl | 81 ---- .../lvs_flow/scripts/global_place_skip_io.tcl | 34 -- .../lvs_flow/scripts/global_route.tcl | 37 -- .../gdsfactory-gen/lvs_flow/scripts/gui.tcl | 12 - .../lvs_flow/scripts/io_placement.tcl | 13 - .../lvs_flow/scripts/io_placement_random.tcl | 14 - .../lvs_flow/scripts/klayout.tcl | 20 - .../gdsfactory-gen/lvs_flow/scripts/load.tcl | 35 -- .../lvs_flow/scripts/macro_place.tcl | 134 ------ .../lvs_flow/scripts/odb_to_def.tcl | 5 - .../lvs_flow/scripts/openfasoc/README.md | 13 - .../scripts/openfasoc/add_ndr_rules.tcl | 11 - .../openfasoc/create_custom_connections.tcl | 27 -- .../openfasoc/create_routable_power_net.tcl | 94 ---- .../scripts/openfasoc/custom_place.tcl | 37 -- .../scripts/openfasoc/pre_global_route.tcl | 12 - .../openfasoc/read_domain_instances.tcl | 21 - .../gdsfactory-gen/lvs_flow/scripts/pdn.tcl | 35 -- .../lvs_flow/scripts/placement_blockages.tcl | 45 -- .../scripts/read_domain_instances.tcl | 18 - .../lvs_flow/scripts/read_liberty.tcl | 17 - .../lvs_flow/scripts/read_macro_placement.tcl | 26 -- .../lvs_flow/scripts/report_metrics.tcl | 166 ------- .../lvs_flow/scripts/run_all.tcl | 66 --- .../gdsfactory-gen/lvs_flow/scripts/synth.tcl | 114 ----- .../lvs_flow/scripts/tapcell.tcl | 10 - .../lvs_flow/scripts/tdms_place.tcl | 36 -- .../lvs_flow/scripts/write_ref_sdc.tcl | 36 -- .../gdsfactory-gen/lvs_flow/scripts/yosys.tcl | 1 - 52 files changed, 1770 insertions(+), 2099 deletions(-) create mode 100644 openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshort.spice create mode 100644 openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshortlvth.spice create mode 100644 openfasoc/common/drc-lvs-check/sky130A/cryo_models/pmos.spice create mode 100644 openfasoc/common/drc-lvs-check/sky130A/sky130A.magicrc create mode 100644 openfasoc/common/drc-lvs-check/sky130A/sky130A_setup.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/run_glayout_lvs.py delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/add_routing_blk.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/cdl.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/create_custom_connections.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/def_to_odb.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteNonClkNets.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deletePowerNets.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteRoutingObstructions.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/density_fill.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_place.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_route.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/fillcell.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/final_report.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/floorplan.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place_skip_io.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_route.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/gui.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement_random.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/klayout.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/load.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/macro_place.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/odb_to_def.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/README.md delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/add_ndr_rules.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_custom_connections.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_routable_power_net.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/custom_place.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/pre_global_route.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/read_domain_instances.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/pdn.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/placement_blockages.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_domain_instances.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_liberty.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_macro_placement.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/report_metrics.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/run_all.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/synth.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tapcell.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tdms_place.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/write_ref_sdc.tcl delete mode 100644 openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/yosys.tcl diff --git a/.github/scripts/run_glayout_lvs.py b/.github/scripts/run_glayout_lvs.py index c6a881478..dc407e775 100644 --- a/.github/scripts/run_glayout_lvs.py +++ b/.github/scripts/run_glayout_lvs.py @@ -99,7 +99,7 @@ def evaluate_report(report_fle: str) -> bool: return False ###################################################################################################################################################################################################################### ###################################################################################################################################################################################################################### - +os.system('mkdir -p ./reports/sky130hd/glayout') gds_path = './results/sky130hd/glayout/6_final.gds' cdl_path = './results/sky130hd/glayout/6_final.cdl' diff --git a/openfasoc/common/drc-lvs-check/.gitignore b/openfasoc/common/drc-lvs-check/.gitignore index 00dcfb4c3..e69de29bb 100644 --- a/openfasoc/common/drc-lvs-check/.gitignore +++ b/openfasoc/common/drc-lvs-check/.gitignore @@ -1 +0,0 @@ -sky130A diff --git a/openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshort.spice b/openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshort.spice new file mode 100644 index 000000000..c9febdad0 --- /dev/null +++ b/openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshort.spice @@ -0,0 +1,420 @@ +* +* 4k spice models for n-channel thin oxide mosfets (std VTH). +* +* +* this scaled model was extracted by coolcad electroncis llc, +* akin akturk, akin.akturk@coolcadelectronics.com +* +* measurements used in model extraction correspond to the +* following W (um)/L (um) devices: +*'nshort; w=1.68; l=0.15; m=1'; +*'nshort; w=7.0; l=8.0; m=1'; +*'nshort; w=7.0; l=0.15; m=1'; +*'nshort; w=0.42; l=8.0; m=1'; +*'nshort; w=0.42; l=0.15; m=1'; +* +* to use the models, please set the circuit temperature +* to -269 in celcius. for standard spice, this can be done +* by adding the following line to netlist: .options temp=-269 +* +* +* +* +.MODEL nshort NMOS ++ LEVEL = 54 ++ VERSION = 4.6.5 ++ BINUNIT = 2 ++ PARAMCHK = 1 ++ MOBMOD = 1 ++ MTRLMOD = 0 ++ RDSMOD = 0 ++ IGCMOD = 0 ++ IGBMOD = 0 ++ CVCHARGEMOD = 0 ++ CAPMOD = 2 ++ RGATEMOD = 0 ++ RBODYMOD = 0 ++ TRNQSMOD = 0 ++ ACNQSMOD = 0 ++ FNOIMOD = 1 ++ TNOIMOD = 0 ++ DIOMOD = 1 ++ TEMPMOD = 0 ++ PERMOD = 1 ++ GEOMOD = 0 ++ WPEMOD = 0 ++ EPSROX = 3.9 ++ TOXE = 4.0840E-009 ++ EOT = 4.0840E-009 ++ TOXP = 4.0840E-009 ++ TOXM = 4.0840E-009 ++ DTOX = 0 ++ XJ = 1.5E-007 ++ NDEP = 1.7E+017 ++ NGATE = 1E+022 ++ NSD = 1E+020 ++ XT = 1.55E-007 ++ RSH = 0 ++ RSHG = 0.1 ++ VTH0 = 0.665 ++ WVTH0 = -0.02E-7 ++ LVTH0 = 0.22E-7 ++ PVTH0 = 0.08E-14 ++ VDDEOT = 1.5 ++ LEFFEOT = 1 ++ WEFFEOT = 10 ++ TEMPEOT = 300.1 ++ PHIN = 0 ++ EASUB = 4.05 ++ EPSRSUB = 11.7 ++ NI0SUB = 1.45E+010 ++ BG0SUB = 1.16 ++ TBGASUB = 0.000702 ++ TBGBSUB = 1108 ++ ADOS = 1 ++ BDOS = 1 ++ VFB = -1 ++ K1 = 0.4 ++ K2 = 0.01 ++ LK2 = 0.01E-6 ++ PK2 = 0.008E-13 ++ K3 = 15 ++ K3B = 0 ++ WK1 = -0.0225E-6 ++ LK1 = -0.045E-6 ++ PK1 = -0.5E-15 ++ W0 = 9.222E-007 ++ LPE0 = 1.899E-008 ++ LPEB = 6.702E-008 ++ VBM = -3 ++ DVT0 = 0.001 ++ DVT1 = 0.1135 ++ DVT2 = -2.864 ++ DVTP0 = 5.919E-009 ++ DVTP1 = 2.966 ++ DVT0W = -10.37 ++ DVT1W = 5.3E+006 ++ DVT2W = -0.032 ++ U0 = 0.25 ++ LU0 = -0.036E-6 ++ WU0 = -0.02E-6 ++ PU0 = 0.01E-12 ++ UA = -1.986E-009 ++ LUA = -5E-0117 ++ UB = 0.47E-017 ++ WUB = -2E-025 ++ LUB = -5E-025 ++ PUB = 12E-032 ++ UC = -0.07076 ++ UD = 3.228 ++ UCS = 1.67 ++ UP = 0.3928 ++ LP = 1.39E-005 ++ EU = 1.6 ++ VSAT = 1.8e+004 ++ WVSAT = -1.8E-3 ++ LVSAT = 20E-3 ++ PVSAT = 1.5e-9 ++ A0 = 2.2 ++ AGS = 1.4 ++ B0 = 0 ++ B1 = 0 ++ KETA = -0.02134 ++ A1 = 0 ++ A2 = 0.8779 ++ WINT = -3.6E-008 ++ LINT = -2.4E-008 ++ DWG = 6.974E-009 ++ LDWG = -5E-015 ++ DWB = 0 ++ VOFF = -0.1 ++ VOFFL = 15E-009 ++ MINV = -7 ++ LMINV = -15e-7 ++ NFACTOR = 2 ++ ETA0 = 2.686 ++ ETAB = -1.412 ++ DSUB = 0.6654 ++ CIT = 0 ++ CDSC = 4.441E-016 ++ CDSCB = -6.337E-006 ++ CDSCD = 0 ++ PCLM = 0.5 ++ LPCLM = 0.7E-6 ++ WPCLM = -0.1E-6 ++ PDIBLC1 = 0.001E-10 ++ PDIBLC2 = 1E-006 ++ PDIBLCB = 0 ++ DROUT = 0.56 ++ PSCBE1 = 1.5E+008 ++ PSCBE2 = 0.15E-006 ++ PVAG = 5 ++ DELTA = 0.01 ++ FPROUT = 0 ++ PDITS = 0.01 ++ PDITSL = 1.392E+006 ++ PDITSD = 1 ++ LAMBDA = 0 ++ VTL = 2E+005 ++ LC = 0 ++ XN = 4 ++ PHIG = 4.05 ++ EPSRGATE = 11.7 ++ RDSW = 0.0 ++ RDSWMIN = 5.0 ++ RDW = 100 ++ RDWMIN = 0 ++ RSW = 100 ++ RSWMIN = 0 ++ PRWG = 0.4 ++ PRWB = -0.1169 ++ WR = 8.882E-016 ++ ALPHA0 = 1E-005 ++ ALPHA1 = 0 ++ BETA0 = 15 ++ AGIDL = 1E-015 ++ BGIDL = 2.3E+009 ++ CGIDL = 0.5 ++ EGIDL = 0.8 ++ AGISL = 0 ++ BGISL = 2.3E+009 ++ CGISL = 0.5 ++ EGISL = 0.8 ++ AIGBACC = 0.43 ++ BIGBACC = 0.054 ++ CIGBACC = 0.075 ++ NIGBACC = 1 ++ AIGBINV = 0.35 ++ BIGBINV = 0.03 ++ CIGBINV = 0.006 ++ EIGBINV = 1.1 ++ NIGBINV = 3 ++ AIGC = 0.54 ++ BIGC = 0.054 ++ CIGC = 0.075 ++ AIGSD = 0.43 ++ BIGSD = 0.054 ++ CIGSD = 0.075 ++ DLCIG = 1.051E-008 ++ AIGS = 0.0136 ++ BIGS = 0.00171 ++ CIGS = 0.075 ++ AIGD = 0.0136 ++ BIGD = 0.00171 ++ CIGD = 0.075 ++ DLCIGD = 0 ++ NIGC = 1 ++ POXEDGE = 1 ++ PIGCD = 1 ++ NTOX = 1 ++ TOXREF = 4.0840E-009 ++ VFBSDOFF = 0 ++ XPART = 0 ++ CGSO = 3E-011 ++ CGDO = 3E-011 ++ CGBO = 0 ++ CGSL = 1.343E-010 ++ CGDL = 1.343E-010 ++ CKAPPAS = 0.6 ++ CKAPPAD = 0.6 ++ CF = 2.977E-010 ++ CLC = 1E-007 ++ CLE = 0.6 ++ DLC = 1.051E-008 ++ DWC = 0 ++ VFBCV = -1 ++ NOFF = 2 ++ VOFFCV = 0.051 ++ VOFFCVL = 0 ++ MINVCV = 0 ++ ACDE = 1 ++ MOIN = 15 ++ XRCRG1 = 12 ++ XRCRG2 = 1 ++ RBPB = 50 ++ RBPD = 50 ++ RBPS = 15 ++ RBDB = 50 ++ RBSB = 50 ++ GBMIN = 1E-012 ++ RBPS0 = 50 ++ RBPSL = 0 ++ RBPSW = 0 ++ RBPSNF = 0 ++ RBPD0 = 50 ++ RBPDL = 0 ++ RBPDW = 0 ++ RBPDNF = 0 ++ RBPBX0 = 100 ++ RBPBXL = 0 ++ RBPBXW = 0 ++ RBPBXNF = 0 ++ RBPBY0 = 100 ++ RBPBYL = 0 ++ RBPBYW = 0 ++ RBPBYNF = 0 ++ RBSBX0 = 100 ++ RBSBY0 = 100 ++ RBDBX0 = 100 ++ RBDBY0 = 100 ++ RBSDBXL = 0 ++ RBSDBXW = 0 ++ RBSDBXNF = 0 ++ RBSDBYL = 0 ++ RBSDBYW = 0 ++ RBSDBYNF = 0 ++ NOIA = 6.25E+041 ++ NOIB = 3.125E+026 ++ NOIC = 8.75 ++ EM = 4.1E+007 ++ AF = 1 ++ EF = 1 ++ KF = 0 ++ LINTNOI = 0 ++ NTNOI = 1 ++ TNOIA = 1.5 ++ TNOIB = 3.5 ++ RNOIA = 0.577 ++ RNOIB = 0.5164 ++ DMCG = 0 ++ DMCI = 0 ++ DMDG = 0 ++ DMCGT = 0 ++ DWJ = 0 ++ XGW = 0 ++ XGL = 0 ++ XL = 0 ++ XW = 5E-8 ++ NGCON = 1 ++ IJTHSREV = 0.0044 ++ IJTHSFWD = 0.0044 ++ XJBVS = 1 ++ BVS = 10 ++ JSS = 1.487E-8 ++ JSWS = 1E-18 ++ JSWGS = 0 ++ JTSS = 0 ++ JTSSWS = 0 ++ JTSSWGS = 0 ++ JTWEFF = 0 ++ NJS = 15 ++ NJTS = 20 ++ NJTSSW = 20 ++ NJTSSWG = 20 ++ XTSS = 0.02 ++ XTSSWS = 0.02 ++ XTSSWGS = 0.02 ++ VTSS = 10 ++ VTSSWS = 10 ++ VTSSWGS = 10 ++ TNJTS = 0 ++ TNJTSSW = 0 ++ TNJTSSWG = 0 ++ CJS = 0.001283 ++ MJS = 0.3296 ++ MJSWS = 0.33 ++ CJSWS = 3.5E-011 ++ CJSWGS = 3.5E-011 ++ MJSWGS = 0.33 ++ PBS = 0.9641 ++ PBSWS = 1 ++ PBSWGS = 1 ++ IJTHDREV = 0.0044 ++ IJTHDFWD = 0.0044 ++ XJBVD = 1 ++ BVD = 10 ++ JSD = 1.487E-8 ++ JSWD = 1E-18 ++ JSWGD = 0 ++ JTSD = 0 ++ JTSSWD = 0 ++ JTSSWGD = 0 ++ NJD = 15 ++ NJTSD = 20 ++ NJTSSWD = 20 ++ NJTSSWGD = 20 ++ XTSD = 0.02 ++ XTSSWD = 0.02 ++ XTSSWGD = 0.02 ++ VTSD = 10 ++ VTSSWD = 10 ++ VTSSWGD = 10 ++ TNJTSD = 0 ++ TNJTSSWD = 0 ++ TNJTSSWGD = 0 ++ CJD = 0.001283 ++ MJD = 0.3296 ++ MJSWD = 0.33 ++ CJSWD = 3.5E-011 ++ CJSWGD = 3.5E-011 ++ MJSWGD = 0.33 ++ PBD = 0.9641 ++ PBSWD = 1 ++ PBSWGD = 1 ++ TNOM = -253 ++ UTE = 0 ++ UCSTE = -0.004775 ++ KT1 = 0 ++ KT1L = 0 ++ KT2 = 0 ++ UA1 = 0 ++ UB1 = 0 ++ UC1 = 0 ++ UD1 = 0 ++ AT = 0 ++ PRT = 0 ++ XTIS = 3 ++ XTID = 3 ++ TPB = 0 ++ TPBSW = 0 ++ TPBSWG = 0 ++ TCJ = 0 ++ TCJSW = 0 ++ TCJSWG = 0 ++ TVOFF = 0 ++ TVFBSDOFF = 0 ++ SAREF = 0 ++ SBREF = 0 ++ WLOD = 2E-006 ++ KU0 = 4E-006 ++ KVSAT = 0.0 ++ TKU0 = 0 ++ LKU0 = 1E-006 ++ WKU0 = 1E-006 ++ PKU0 = 0 ++ LLODKU0 = 1.1 ++ WLODKU0 = 1.1 ++ KVTH0 = -2E-008 ++ LKVTH0 = 1.1E-006 ++ WKVTH0 = 1.1E-006 ++ PKVTH0 = 0 ++ LLODVTH = 1 ++ WLODVTH = 1 ++ STK2 = 0 ++ LODK2 = 1 ++ STETA0 = 0 ++ LODETA0 = 1 ++ WEB = 0 ++ WEC = 0 ++ KVTH0WE = 0 ++ K2WE = 0 ++ KU0WE = 0 ++ SCREF = 1E-006 ++ WL = 1E-014 ++ WLN = 1.056 ++ WW = 10.807E-015 ++ WWN = 1.03 ++ WWL = -1.419E-021 ++ LL = -1.609E-015 ++ LLN = 0.9 ++ LW = -7.92E-015 ++ LWN = 1.012 ++ LWL = 6.569E-021 ++ LLC = 0 ++ LWC = 0 ++ LWLC = 0 ++ WLC = 0 ++ WWC = 0 ++ WWLC = 0 +* +* diff --git a/openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshortlvth.spice b/openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshortlvth.spice new file mode 100644 index 000000000..d201c7890 --- /dev/null +++ b/openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshortlvth.spice @@ -0,0 +1,420 @@ +* +* 4k spice models for n-channel thin oxide mosfets (low VTH). +* +* +* this scaled model was extracted by coolcad electroncis llc, +* akin akturk, akin.akturk@coolcadelectronics.com +* +* measurements used in model extraction correspond to the +* following W (um)/L (um) devices: +*'nlowvt; w=7.0; l=8.0; m=1'; +*'nlowvt; w=7.0; l=0.15; m=1'; +*'nlowvt; w=0.42; l=1.0; m=1'; +*'nlowvt; w=0.42; l=0.15; m=1'; +*'nlowvt; w=0.84; l=0.15; m=1';* +* to use the models, please set the circuit temperature +* to -269 in celcius. for standard spice, this can be done +* by adding the following line to netlist: .options temp=-269 +* +* +* +* +.MODEL nshortlvth NMOS ++ LEVEL = 54 ++ VERSION = 4.6.5 ++ BINUNIT = 2 ++ PARAMCHK = 1 ++ MOBMOD = 1 ++ MTRLMOD = 0 ++ RDSMOD = 0 ++ IGCMOD = 0 ++ IGBMOD = 0 ++ CVCHARGEMOD = 0 ++ CAPMOD = 2 ++ RGATEMOD = 0 ++ RBODYMOD = 0 ++ TRNQSMOD = 0 ++ ACNQSMOD = 0 ++ FNOIMOD = 1 ++ TNOIMOD = 0 ++ DIOMOD = 1 ++ TEMPMOD = 0 ++ PERMOD = 1 ++ GEOMOD = 0 ++ WPEMOD = 0 ++ EPSROX = 3.9 ++ TOXE = 4.0840E-009 ++ EOT = 4.0840E-009 ++ TOXP = 4.0840E-009 ++ TOXM = 4.0840E-009 ++ DTOX = 0 ++ XJ = 1.5E-007 ++ NDEP = 1.7E+017 ++ NGATE = 1E+022 ++ NSD = 1E+020 ++ XT = 1.55E-007 ++ RSH = 0 ++ RSHG = 0.1 ++ VTH0 = 0.585 ++ WVTH0 = -0.02E-7 ++ LVTH0 = 0.27E-7 ++ PVTH0 = 0.08E-14 ++ VDDEOT = 1.5 ++ LEFFEOT = 1 ++ WEFFEOT = 10 ++ TEMPEOT = 300.1 ++ PHIN = 0 ++ EASUB = 4.05 ++ EPSRSUB = 11.7 ++ NI0SUB = 1.45E+010 ++ BG0SUB = 1.16 ++ TBGASUB = 0.000702 ++ TBGBSUB = 1108 ++ ADOS = 1 ++ BDOS = 1 ++ VFB = -1 ++ K1 = 0.35 ++ K2 = 0.01 ++ LK2 = 0.01E-6 ++ K3 = 15 ++ K3B = 0 ++ WK1 = -0.0225E-6 ++ LK1 = -0.045E-6 ++ PK1 = -0.5E-15 ++ W0 = 9.222E-007 ++ LPE0 = 1.899E-008 ++ LPEB = 6.702E-008 ++ VBM = -3 ++ DVT0 = 0.001 ++ DVT1 = 0.1135 ++ DVT2 = -2.864 ++ DVTP0 = 5.919E-009 ++ DVTP1 = 2.966 ++ DVT0W = -10.37 ++ DVT1W = 5.3E+006 ++ DVT2W = -0.032 ++ U0 = 0.65 ++ LU0 = -0.05E-6 ++ WU0 = -0.02E-6 ++ PU0 = 0.01E-12 ++ UA = -3.5E-009 ++ LUA = -5E-0117 ++ UB = 1.4E-017 ++ WUB = -2E-025 ++ LUB = -5E-025 ++ PUB = 12E-032 ++ UC = -0.07076 ++ UD = 3.228 ++ UCS = 1.67 ++ UP = 0.3928 ++ LP = 2E-005 ++ EU = 1.6 ++ VSAT = 3.2e+004 ++ WVSAT = 8E-3 ++ LVSAT = 20E-3 ++ PVSAT = -1.5e-9 ++ A0 = 2.2 ++ AGS = 1.4 ++ B0 = 0 ++ B1 = 0 ++ KETA = -0.02134 ++ A1 = 0 ++ A2 = 0.8779 ++ WINT = -5E-008 ++ LINT = -2.0E-008 ++ DWG = 6.974E-009 ++ LDWG = -5E-015 ++ DWB = 0 ++ VOFF = -0.05 ++ VOFFL = -11E-009 ++ MINV = -8 ++ LMINV = -15e-7 ++ WMINV = -10e-7 ++ NFACTOR = 5 ++ ETA0 = 2.686 ++ ETAB = -1.412 ++ DSUB = 0.6654 ++ CIT = 0 ++ CDSC = 4.441E-016 ++ CDSCB = -6.337E-006 ++ CDSCD = 0 ++ PCLM = 0.5 ++ LPCLM = 0.3E-6 ++ WPCLM = -0.1E-6 ++ PDIBLC1 = 0.001E-10 ++ PDIBLC2 = 1E-006 ++ PDIBLCB = 0 ++ DROUT = 0.56 ++ PSCBE1 = 1.5E+008 ++ PSCBE2 = 0.05E-006 ++ PVAG = 5 ++ DELTA = 0.002 ++ WDELTA = 2E-8 ++ FPROUT = 0 ++ PDITS = 0.01 ++ PDITSL = 1.392E+006 ++ PDITSD = 1 ++ LAMBDA = 0 ++ VTL = 2E+005 ++ LC = 0 ++ XN = 4 ++ PHIG = 4.05 ++ EPSRGATE = 11.7 ++ RDSW = 0.0 ++ RDSWMIN = 11.0 ++ RDW = 100 ++ RDWMIN = 0 ++ RSW = 100 ++ RSWMIN = 0 ++ PRWG = 0.4 ++ PRWB = -0.1169 ++ WR = 8.882E-016 ++ ALPHA0 = 1E-005 ++ ALPHA1 = 0 ++ BETA0 = 15 ++ AGIDL = 1E-015 ++ BGIDL = 2.3E+009 ++ CGIDL = 0.5 ++ EGIDL = 0.8 ++ AGISL = 0 ++ BGISL = 2.3E+009 ++ CGISL = 0.5 ++ EGISL = 0.8 ++ AIGBACC = 0.43 ++ BIGBACC = 0.054 ++ CIGBACC = 0.075 ++ NIGBACC = 1 ++ AIGBINV = 0.35 ++ BIGBINV = 0.03 ++ CIGBINV = 0.006 ++ EIGBINV = 1.1 ++ NIGBINV = 3 ++ AIGC = 0.54 ++ BIGC = 0.054 ++ CIGC = 0.075 ++ AIGSD = 0.43 ++ BIGSD = 0.054 ++ CIGSD = 0.075 ++ DLCIG = 1.051E-008 ++ AIGS = 0.0136 ++ BIGS = 0.00171 ++ CIGS = 0.075 ++ AIGD = 0.0136 ++ BIGD = 0.00171 ++ CIGD = 0.075 ++ DLCIGD = 0 ++ NIGC = 1 ++ POXEDGE = 1 ++ PIGCD = 1 ++ NTOX = 1 ++ TOXREF = 4.0840E-009 ++ VFBSDOFF = 0 ++ XPART = 0 ++ CGSO = 3E-011 ++ CGDO = 3E-011 ++ CGBO = 0 ++ CGSL = 1.343E-010 ++ CGDL = 1.343E-010 ++ CKAPPAS = 0.6 ++ CKAPPAD = 0.6 ++ CF = 2.977E-010 ++ CLC = 1E-007 ++ CLE = 0.6 ++ DLC = 1.051E-008 ++ DWC = 0 ++ VFBCV = -1 ++ NOFF = 2 ++ VOFFCV = 0.051 ++ VOFFCVL = 0 ++ MINVCV = 0 ++ ACDE = 1 ++ MOIN = 15 ++ XRCRG1 = 12 ++ XRCRG2 = 1 ++ RBPB = 50 ++ RBPD = 50 ++ RBPS = 15 ++ RBDB = 50 ++ RBSB = 50 ++ GBMIN = 1E-012 ++ RBPS0 = 50 ++ RBPSL = 0 ++ RBPSW = 0 ++ RBPSNF = 0 ++ RBPD0 = 50 ++ RBPDL = 0 ++ RBPDW = 0 ++ RBPDNF = 0 ++ RBPBX0 = 100 ++ RBPBXL = 0 ++ RBPBXW = 0 ++ RBPBXNF = 0 ++ RBPBY0 = 100 ++ RBPBYL = 0 ++ RBPBYW = 0 ++ RBPBYNF = 0 ++ RBSBX0 = 100 ++ RBSBY0 = 100 ++ RBDBX0 = 100 ++ RBDBY0 = 100 ++ RBSDBXL = 0 ++ RBSDBXW = 0 ++ RBSDBXNF = 0 ++ RBSDBYL = 0 ++ RBSDBYW = 0 ++ RBSDBYNF = 0 ++ NOIA = 6.25E+041 ++ NOIB = 3.125E+026 ++ NOIC = 8.75 ++ EM = 4.1E+007 ++ AF = 1 ++ EF = 1 ++ KF = 0 ++ LINTNOI = 0 ++ NTNOI = 1 ++ TNOIA = 1.5 ++ TNOIB = 3.5 ++ RNOIA = 0.577 ++ RNOIB = 0.5164 ++ DMCG = 0 ++ DMCI = 0 ++ DMDG = 0 ++ DMCGT = 0 ++ DWJ = 0 ++ XGW = 0 ++ XGL = 0 ++ XL = 0 ++ XW = 5E-8 ++ NGCON = 1 ++ IJTHSREV = 0.0044 ++ IJTHSFWD = 0.0044 ++ XJBVS = 1 ++ BVS = 10 ++ JSS = 1.487E-8 ++ JSWS = 1E-18 ++ JSWGS = 0 ++ JTSS = 0 ++ JTSSWS = 0 ++ JTSSWGS = 0 ++ JTWEFF = 0 ++ NJS = 15 ++ NJTS = 20 ++ NJTSSW = 20 ++ NJTSSWG = 20 ++ XTSS = 0.02 ++ XTSSWS = 0.02 ++ XTSSWGS = 0.02 ++ VTSS = 10 ++ VTSSWS = 10 ++ VTSSWGS = 10 ++ TNJTS = 0 ++ TNJTSSW = 0 ++ TNJTSSWG = 0 ++ CJS = 0.001283 ++ MJS = 0.3296 ++ MJSWS = 0.33 ++ CJSWS = 3.5E-011 ++ CJSWGS = 3.5E-011 ++ MJSWGS = 0.33 ++ PBS = 0.9641 ++ PBSWS = 1 ++ PBSWGS = 1 ++ IJTHDREV = 0.0044 ++ IJTHDFWD = 0.0044 ++ XJBVD = 1 ++ BVD = 10 ++ JSD = 1.487E-8 ++ JSWD = 1E-18 ++ JSWGD = 0 ++ JTSD = 0 ++ JTSSWD = 0 ++ JTSSWGD = 0 ++ NJD = 15 ++ NJTSD = 20 ++ NJTSSWD = 20 ++ NJTSSWGD = 20 ++ XTSD = 0.02 ++ XTSSWD = 0.02 ++ XTSSWGD = 0.02 ++ VTSD = 10 ++ VTSSWD = 10 ++ VTSSWGD = 10 ++ TNJTSD = 0 ++ TNJTSSWD = 0 ++ TNJTSSWGD = 0 ++ CJD = 0.001283 ++ MJD = 0.3296 ++ MJSWD = 0.33 ++ CJSWD = 3.5E-011 ++ CJSWGD = 3.5E-011 ++ MJSWGD = 0.33 ++ PBD = 0.9641 ++ PBSWD = 1 ++ PBSWGD = 1 ++ TNOM = -253 ++ UTE = 0 ++ UCSTE = -0.004775 ++ KT1 = 0 ++ KT1L = 0 ++ KT2 = 0 ++ UA1 = 0 ++ UB1 = 0 ++ UC1 = 0 ++ UD1 = 0 ++ AT = 0 ++ PRT = 0 ++ XTIS = 3 ++ XTID = 3 ++ TPB = 0 ++ TPBSW = 0 ++ TPBSWG = 0 ++ TCJ = 0 ++ TCJSW = 0 ++ TCJSWG = 0 ++ TVOFF = 0 ++ TVFBSDOFF = 0 ++ SAREF = 0 ++ SBREF = 0 ++ WLOD = 2E-006 ++ KU0 = 4E-006 ++ KVSAT = 0.0 ++ TKU0 = 0 ++ LKU0 = 1E-006 ++ WKU0 = 1E-006 ++ PKU0 = 0 ++ LLODKU0 = 1.1 ++ WLODKU0 = 1.1 ++ KVTH0 = -2E-008 ++ LKVTH0 = 1.1E-006 ++ WKVTH0 = 1.1E-006 ++ PKVTH0 = 0 ++ LLODVTH = 1 ++ WLODVTH = 1 ++ STK2 = 0 ++ LODK2 = 1 ++ STETA0 = 0 ++ LODETA0 = 1 ++ WEB = 0 ++ WEC = 0 ++ KVTH0WE = 0 ++ K2WE = 0 ++ KU0WE = 0 ++ SCREF = 1E-006 ++ WL = 1E-014 ++ WLN = 1.056 ++ WW = 10.807E-015 ++ WWN = 1.03 ++ WWL = -1.419E-021 ++ LL = -1.609E-015 ++ LLN = 0.9 ++ LW = -7.92E-015 ++ LWN = 1.012 ++ LWL = 6.569E-021 ++ LLC = 0 ++ LWC = 0 ++ LWLC = 0 ++ WLC = 0 ++ WWC = 0 ++ WWLC = 0 +* +* diff --git a/openfasoc/common/drc-lvs-check/sky130A/cryo_models/pmos.spice b/openfasoc/common/drc-lvs-check/sky130A/cryo_models/pmos.spice new file mode 100644 index 000000000..fe1cb7786 --- /dev/null +++ b/openfasoc/common/drc-lvs-check/sky130A/cryo_models/pmos.spice @@ -0,0 +1,419 @@ +* +* 4k spice models for p-channel thin oxide mosfets (low VTH). +* +* +* this scaled model was extracted by coolcad electroncis llc, +* akin akturk, akin.akturk@coolcadelectronics.com +* +* measurements used in model extraction correspond to the +* following W (um)/L (um) devices: +*'plowvt; w=3.0; l=1.0; m=1'; +*'plowvt; w=7.0; l=8.0; m=1'; +*'plowvt; w=7.0; l=0.35; m=1'; +*'plowvt; w=0.42; l=8.0; m=1'; +*'plowvt; w=0.42; l=0.35; m=1'; +* +* to use the models, please set the circuit temperature +* to -269 in celcius. for standard spice, this can be done +* by adding the following line to netlist: .options temp=-269 +* +* +* +* +.MODEL pshort PMOS ++ LEVEL = 54 ++ VERSION = 4.6.5 ++ BINUNIT = 2 ++ PARAMCHK = 1 ++ MOBMOD = 1 ++ MTRLMOD = 0 ++ RDSMOD = 0 ++ IGCMOD = 0 ++ IGBMOD = 0 ++ CVCHARGEMOD = 0 ++ CAPMOD = 2 ++ RGATEMOD = 0 ++ RBODYMOD = 0 ++ TRNQSMOD = 0 ++ ACNQSMOD = 0 ++ FNOIMOD = 1 ++ TNOIMOD = 0 ++ DIOMOD = 1 ++ TEMPMOD = 0 ++ PERMOD = 1 ++ GEOMOD = 0 ++ WPEMOD = 0 ++ EPSROX = 3.9 ++ TOXE = 4.0349E-009 ++ EOT = 4.0349E-009 ++ TOXP = 4.0349E-009 ++ TOXM = 4.0349E-009 ++ DTOX = 0 ++ XJ = 1.5E-007 ++ NDEP = 4.0E+017 ++ NGATE = 1E+022 ++ NSD = 1E+020 ++ XT = 1.55E-007 ++ RSH = 0 ++ RSHG = 0.1 ++ VTH0 = -1.17 ++ LVTH0 = 0.13e-7 ++ WVTH0 = -0.23e-7 ++ PVTH0 = 20e-16 ++ VDDEOT = -1.5 ++ LEFFEOT = 1 ++ WEFFEOT = 10 ++ TEMPEOT = 300.1 ++ PHIN = 0 ++ EASUB = 4.05 ++ EPSRSUB = 11.7 ++ NI0SUB = 1.45E+010 ++ BG0SUB = 1.16 ++ TBGASUB = 0.000702 ++ TBGBSUB = 1108 ++ ADOS = 1 ++ BDOS = 1 ++ VFB = -1 ++ K1 = 0.618 ++ K2 = 0.039145 ++ K3 = -14.37 ++ K3B = -4.92 ++ WK1 = -4E-8 ++ LK1 = -4E-8 ++ PK1 = 8E-15 ++ W0 = 4.104E-007 ++ LPE0 = 7.535E-016 ++ LPEB = 2.387E-011 ++ VBM = -0.5 ++ DVT0 = 0.007 ++ DVT1 = 0.01 ++ DVT2 = -0.05872 ++ DVTP0 = 0 ++ DVTP1 = 0.001 ++ DVT0W = -100 ++ DVT1W = 5.3E+006 ++ DVT2W = -0.032 ++ U0 = 0.17 ++ LU0 = -6E-9 ++ PU0 = 0E-17 ++ WU0 = 0E-9 ++ UA = -3.272E-010 ++ UB = 2.2E-018 ++ WUB = -3E-026 ++ UC = 0.1 ++ UD = 1.762E+017 ++ UCS = 1 ++ UP = -0.004472 ++ LP = 1E-008 ++ EU = 1.67 ++ VSAT = 25E+004 ++ WVSAT = 3.0 ++ LVSAT = -10E-12 ++ PVSAT = 1E-2 ++ A0 = 0.5 ++ AGS = 0.5529 ++ B0 = 0 ++ B1 = 0 ++ KETA = -0.06744 ++ A1 = 0.07557 ++ A2 = 0.376 ++ WINT = 7E-008 ++ LINT = 1.5E-008 ++ DWG = -1E-008 ++ DWB = -1E-008 ++ VOFF = -0.09 ++ VOFFL = -0.4E-7 ++ MINV = -9 ++ WMINV = 0.39e-6 ++ LMINV = 0.0e-6 ++ PMINV = -0.7e-13 ++ NFACTOR = 4 ++ ETA0 = 12E-005 ++ ETAB = 0.687 ++ DSUB = 0.9 ++ CIT = 0 ++ CDSC = 4.441E-016 ++ CDSCB = -0.001393 ++ CDSCD = 0 ++ PCLM = 0.839 ++ LPCLM = 6E-7 ++ PDIBLC1 = 2 ++ PDIBLC2 = 0.001192 ++ PDIBLCB = 0 ++ DROUT = 0.4 ++ PSCBE1 = 9.24E+008 ++ PSCBE2 = 0.001 ++ PVAG = 1 ++ DELTA = 0.07 ++ PDELTA = -5E-15 ++ FPROUT = 0 ++ PDITS = 0.1 ++ PDITSL = 6.754E+006 ++ PDITSD = 1 ++ LAMBDA = 0 ++ VTL = 3.7E+004 ++ WVTL = 1E-2 ++ LC = 0.2 ++ XN = 10 ++ PHIG = 4.05 ++ EPSRGATE = 11.7 ++ RDSW = 3000 ++ LRDSW = 4e-5 ++ WRDSW = 0e-5 ++ RDSWMIN = 00 ++ RDW = 100 ++ RDWMIN = 0 ++ RSW = 100 ++ RSWMIN = 0 ++ PRWG = 8.421E-005 ++ PRWB = -0.814 ++ WR = 1.21 ++ ALPHA0 = 1E-005 ++ ALPHA1 = 0 ++ BETA0 = 15 ++ AGIDL = 1E-015 ++ BGIDL = 2.3E+009 ++ CGIDL = 0.5 ++ EGIDL = 0.8 ++ AGISL = 0 ++ BGISL = 2.3E+009 ++ CGISL = 0.5 ++ EGISL = 0.8 ++ AIGBACC = 0.43 ++ BIGBACC = 0.054 ++ CIGBACC = 0.075 ++ NIGBACC = 1 ++ AIGBINV = 0.35 ++ BIGBINV = 0.03 ++ CIGBINV = 0.006 ++ EIGBINV = 1.1 ++ NIGBINV = 3 ++ AIGC = 0.54 ++ BIGC = 0.054 ++ CIGC = 0.075 ++ AIGSD = 0.43 ++ BIGSD = 0.054 ++ CIGSD = 0.075 ++ DLCIG = 1.124E-008 ++ AIGS = 0.0136 ++ BIGS = 0.00171 ++ CIGS = 0.075 ++ AIGD = 0.0136 ++ BIGD = 0.00171 ++ CIGD = 0.075 ++ DLCIGD = 0 ++ NIGC = 1 ++ POXEDGE = 1 ++ PIGCD = 1 ++ NTOX = 1 ++ TOXREF = 4.0349E-009 ++ VFBSDOFF = 0 ++ XPART = 0 ++ CGSO = 3.161E-011 ++ CGDO = 3.161E-011 ++ CGBO = 0 ++ CGSL = 1.121E-010 ++ CGDL = 1.121E-010 ++ CKAPPAS = 0.6 ++ CKAPPAD = 0.6 ++ CF = 2.854E-010 ++ CLC = 1E-007 ++ CLE = 0.6 ++ DLC = 1.124E-008 ++ DWC = 0 ++ VFBCV = -1 ++ NOFF = 2 ++ VOFFCV = -0.2538 ++ VOFFCVL = 0 ++ MINVCV = 0 ++ ACDE = 1 ++ MOIN = 15 ++ XRCRG1 = 12 ++ XRCRG2 = 1 ++ RBPB = 50 ++ RBPD = 50 ++ RBPS = 15 ++ RBDB = 50 ++ RBSB = 50 ++ GBMIN = 1E-012 ++ RBPS0 = 50 ++ RBPSL = 0 ++ RBPSW = 0 ++ RBPSNF = 0 ++ RBPD0 = 50 ++ RBPDL = 0 ++ RBPDW = 0 ++ RBPDNF = 0 ++ RBPBX0 = 100 ++ RBPBXL = 0 ++ RBPBXW = 0 ++ RBPBXNF = 0 ++ RBPBY0 = 100 ++ RBPBYL = 0 ++ RBPBYW = 0 ++ RBPBYNF = 0 ++ RBSBX0 = 100 ++ RBSBY0 = 100 ++ RBDBX0 = 100 ++ RBDBY0 = 100 ++ RBSDBXL = 0 ++ RBSDBXW = 0 ++ RBSDBXNF = 0 ++ RBSDBYL = 0 ++ RBSDBYW = 0 ++ RBSDBYNF = 0 ++ NOIA = 6.25E+041 ++ NOIB = 3.125E+026 ++ NOIC = 8.75 ++ EM = 4.1E+007 ++ AF = 1 ++ EF = 1 ++ KF = 0 ++ LINTNOI = 0 ++ NTNOI = 1 ++ TNOIA = 1.5 ++ TNOIB = 3.5 ++ RNOIA = 0.577 ++ RNOIB = 0.5164 ++ DMCG = 0 ++ DMCI = 0 ++ DMDG = 0 ++ DMCGT = 0 ++ DWJ = 0 ++ XGW = 0 ++ XGL = 0 ++ XL = 0 ++ XW = 0 ++ NGCON = 1 ++ IJTHSREV = 0.1 ++ IJTHSFWD = 0.1 ++ XJBVS = 1 ++ BVS = 10 ++ JSS = 0.0001 ++ JSWS = 0 ++ JSWGS = 0 ++ JTSS = 0 ++ JTSSWS = 0 ++ JTSSWGS = 0 ++ JTWEFF = 0 ++ NJS = 15 ++ NJTS = 20 ++ NJTSSW = 20 ++ NJTSSWG = 20 ++ XTSS = 0.02 ++ XTSSWS = 0.02 ++ XTSSWGS = 0.02 ++ VTSS = 10 ++ VTSSWS = 10 ++ VTSSWGS = 10 ++ TNJTS = 0 ++ TNJTSSW = 0 ++ TNJTSSWG = 0 ++ CJS = 0.0005 ++ MJS = 0.5 ++ MJSWS = 0.33 ++ CJSWS = 5E-010 ++ CJSWGS = 5E-010 ++ MJSWGS = 0.33 ++ PBS = 1 ++ PBSWS = 1 ++ PBSWGS = 1 ++ IJTHDREV = 4.878E-003 ++ IJTHDFWD = 4.878E-003 ++ XJBVD = 1 ++ BVD = 10 ++ JSD = 1.004E-014 ++ JSWD = 2.467E-018 ++ JSWGD = 0 ++ JTSD = 0 ++ JTSSWD = 0 ++ JTSSWGD = 0 ++ NJD = 15 ++ NJTSD = 20 ++ NJTSSWD = 20 ++ NJTSSWGD = 20 ++ XTSD = 0.02 ++ XTSSWD = 0.02 ++ XTSSWGD = 0.02 ++ VTSD = 10 ++ VTSSWD = 10 ++ VTSSWGD = 10 ++ TNJTSD = 0 ++ TNJTSSWD = 0 ++ TNJTSSWGD = 0 ++ CJD = 0.0009368 ++ MJD = 0.3545 ++ MJSWD = 0.3141 ++ CJSWD = 7.65E-011 ++ CJSWGD = 5E-010 ++ MJSWGD = 0.33 ++ PBD = 0.9594 ++ PBSWD = 0.9109 ++ PBSWGD = 1 ++ TNOM = -253 ++ UTE = 0 ++ UCSTE = -0.004775 ++ KT1 = -0.11 ++ KT1L = 0 ++ KT2 = 0.022 ++ UA1 = 1E-009 ++ UB1 = -1E-018 ++ UC1 = -0.056 ++ UD1 = 0 ++ AT = 3.3E+004 ++ PRT = 0 ++ XTIS = 3 ++ XTID = 3 ++ TPB = 0 ++ TPBSW = 0 ++ TPBSWG = 0 ++ TCJ = 0 ++ TCJSW = 0 ++ TCJSWG = 0 ++ TVOFF = 0 ++ TVFBSDOFF = 0 ++ SAREF = 0 ++ SBREF = 0 ++ WLOD = 2E-006 ++ KU0 = 4E-006 ++ KVSAT = 0.2 ++ TKU0 = 0 ++ LKU0 = 1E-006 ++ WKU0 = 1E-006 ++ PKU0 = 0 ++ LLODKU0 = 1.1 ++ WLODKU0 = 1.1 ++ KVTH0 = -2E-008 ++ LKVTH0 = 1.1E-006 ++ WKVTH0 = 1.1E-006 ++ PKVTH0 = 0 ++ LLODVTH = 1 ++ WLODVTH = 1 ++ STK2 = 0 ++ LODK2 = 1 ++ STETA0 = 0 ++ LODETA0 = 1 ++ WEB = 0 ++ WEC = 0 ++ KVTH0WE = 0 ++ K2WE = 0 ++ KU0WE = 0 ++ SCREF = 1E-006 ++ WL = 7.641E-015 ++ WLN = 0.9975 ++ WW = -1E-014 ++ WWN = 1.012 ++ WWL = -1.218E-021 ++ LL = -3.165E-015 ++ LLN = 1 ++ LW = -4.827E-015 ++ LWN = 1 ++ LWL = 1.182E-021 ++ LLC = 0 ++ LWC = 0 ++ LWLC = 0 ++ WLC = 0 ++ WWC = 0 ++ WWLC = 0 +* +* diff --git a/openfasoc/common/drc-lvs-check/sky130A/sky130A.magicrc b/openfasoc/common/drc-lvs-check/sky130A/sky130A.magicrc new file mode 100644 index 000000000..9bb1dbd6c --- /dev/null +++ b/openfasoc/common/drc-lvs-check/sky130A/sky130A.magicrc @@ -0,0 +1,86 @@ +puts stdout "Sourcing design .magicrc for technology sky130A ..." + +# Put grid on 0.005 pitch. This is important, as some commands don't +# rescale the grid automatically (such as lef read?). + +set scalefac [tech lambda] +if {[lindex $scalefac 1] < 2} { + scalegrid 1 2 +} + +# drc off +drc euclidean on +# Change this to a fixed number for repeatable behavior with GDS writes +# e.g., "random seed 12345" +catch {random seed} + +# Turn off the scale option on ext2spice or else it conflicts with the +# scale in the model files. +ext2spice scale off + +# Allow override of PDK path from environment variable PDKPATH +if {[catch {set PDKPATH $env(PDKPATH)}]} { + set PDKPATH $env(PDK_ROOT)/sky130A +} + +# loading technology +tech load $PDKPATH/libs.tech/magic/sky130A.tech + +# load device generator +source $PDKPATH/libs.tech/magic/sky130A.tcl + +# load bind keys (optional) +# source $PDKPATH/libs.tech/magic/sky130A-BindKeys + +# set units to lambda grid +snap lambda + +# set sky130 standard power, ground, and substrate names +set VDD VPWR +set GND VGND +set SUB VSUBS + +# Allow override of type of magic library views used, "mag" or "maglef", +# from environment variable MAGTYPE + +if {[catch {set MAGTYPE $env(MAGTYPE)}]} { + set MAGTYPE mag +} + +# add path to reference cells +if {[file isdir ${PDKPATH}/libs.ref/${MAGTYPE}]} { + addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_pr + addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_io + addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hd + addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hdll + addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hs + addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hvl + addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_lp + addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_ls + addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_ms + addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_osu_sc + addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_osu_sc_t18 + addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_ml_xx_hd + addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_sram_macros +} else { + addpath ${PDKPATH}/libs.ref/sky130_fd_pr/${MAGTYPE} + addpath ${PDKPATH}/libs.ref/sky130_fd_io/${MAGTYPE} + addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hd/${MAGTYPE} + addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hdll/${MAGTYPE} + addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hs/${MAGTYPE} + addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hvl/${MAGTYPE} + addpath ${PDKPATH}/libs.ref/sky130_fd_sc_lp/${MAGTYPE} + addpath ${PDKPATH}/libs.ref/sky130_fd_sc_ls/${MAGTYPE} + addpath ${PDKPATH}/libs.ref/sky130_fd_sc_ms/${MAGTYPE} + addpath ${PDKPATH}/libs.ref/sky130_osu_sc/${MAGTYPE} + addpath ${PDKPATH}/libs.ref/sky130_osu_sc_t18/${MAGTYPE} + addpath ${PDKPATH}/libs.ref/sky130_ml_xx_hd/${MAGTYPE} + addpath ${PDKPATH}/libs.ref/sky130_sram_macros/${MAGTYPE} +} + +# add path to GDS cells + +# add path to IP from catalog. This procedure defined in the PDK script. +catch {magic::query_mylib_ip} +# add path to local IP from user design space. Defined in the PDK script. +catch {magic::query_my_projects} diff --git a/openfasoc/common/drc-lvs-check/sky130A/sky130A_setup.tcl b/openfasoc/common/drc-lvs-check/sky130A/sky130A_setup.tcl new file mode 100644 index 000000000..ede844e37 --- /dev/null +++ b/openfasoc/common/drc-lvs-check/sky130A/sky130A_setup.tcl @@ -0,0 +1,419 @@ +#--------------------------------------------------------------- +# Setup file for netgen LVS +# SkyWater sky130A +#--------------------------------------------------------------- +permute default +property default +property parallel none + +# Allow override of default #columns in the output format. +catch {format $env(NETGEN_COLUMNS)} + +#--------------------------------------------------------------- +# For the following, get the cell lists from +# circuit1 and circuit2. +#--------------------------------------------------------------- + +set cells1 [cells list -all -circuit1] +set cells2 [cells list -all -circuit2] + +# NOTE: In accordance with the LVS manager GUI, the schematic is +# always circuit2, so some items like property "par1" only need to +# be specified for circuit2. + +#------------------------------------------- +# Resistors (except metal) +#------------------------------------------- + +set devices {} +lappend devices sky130_fd_pr__res_iso_pw +lappend devices sky130_fd_pr__res_high_po_0p35 +lappend devices sky130_fd_pr__res_high_po_0p69 +lappend devices sky130_fd_pr__res_high_po_1p41 +lappend devices sky130_fd_pr__res_high_po_2p85 +lappend devices sky130_fd_pr__res_high_po_5p73 +lappend devices sky130_fd_pr__res_high_po +lappend devices sky130_fd_pr__res_xhigh_po_0p35 +lappend devices sky130_fd_pr__res_xhigh_po_0p69 +lappend devices sky130_fd_pr__res_xhigh_po_1p41 +lappend devices sky130_fd_pr__res_xhigh_po_2p85 +lappend devices sky130_fd_pr__res_xhigh_po_5p73 +lappend devices sky130_fd_pr__res_xhigh_po +lappend devices sky130_fd_pr__res_generic_nd +lappend devices sky130_fd_pr__res_generic_pd +lappend devices sky130_fd_pr__res_generic_nd__hv +lappend devices sky130_fd_pr__res_generic_pd__hv +lappend devices mrdn_hv mrdp_hv + +foreach dev $devices { + if {[lsearch $cells1 $dev] >= 0} { + permute "-circuit1 $dev" 1 2 + property "-circuit1 $dev" series enable + property "-circuit1 $dev" series {w critical} + property "-circuit1 $dev" series {l add} + property "-circuit1 $dev" parallel enable + property "-circuit1 $dev" parallel {l critical} + property "-circuit1 $dev" parallel {w add} + property "-circuit1 $dev" parallel {value par} + property "-circuit1 $dev" tolerance {l 0.01} {w 0.01} + # Ignore these properties + property "-circuit1 $dev" delete mult + } + if {[lsearch $cells2 $dev] >= 0} { + permute "-circuit2 $dev" 1 2 + property "-circuit2 $dev" series enable + property "-circuit2 $dev" series {w critical} + property "-circuit2 $dev" series {l add} + property "-circuit2 $dev" parallel enable + property "-circuit2 $dev" parallel {l critical} + property "-circuit2 $dev" parallel {w add} + property "-circuit2 $dev" parallel {value par} + property "-circuit2 $dev" tolerance {l 0.01} {w 0.01} + # Ignore these properties + property "-circuit2 $dev" delete mult + } +} + +#------------------------------------------- +# MRM (metal) resistors and poly resistor +#------------------------------------------- + +set devices {} +lappend devices sky130_fd_pr__res_generic_po +lappend devices sky130_fd_pr__res_generic_l1 +lappend devices sky130_fd_pr__res_generic_m1 +lappend devices sky130_fd_pr__res_generic_m2 +lappend devices sky130_fd_pr__res_generic_m3 +lappend devices sky130_fd_pr__res_generic_m4 +lappend devices sky130_fd_pr__res_generic_m5 + +foreach dev $devices { + if {[lsearch $cells1 $dev] >= 0} { + permute "-circuit1 $dev" end_a end_b + property "-circuit1 $dev" series enable + property "-circuit1 $dev" series {w critical} + property "-circuit1 $dev" series {l add} + property "-circuit1 $dev" parallel enable + property "-circuit1 $dev" parallel {l critical} + property "-circuit1 $dev" parallel {w add} + property "-circuit1 $dev" parallel {value par} + property "-circuit1 $dev" tolerance {l 0.01} {w 0.01} + # Ignore these properties + property "-circuit1 $dev" delete mult + } + if {[lsearch $cells2 $dev] >= 0} { + permute "-circuit2 $dev" end_a end_b + property "-circuit2 $dev" series enable + property "-circuit2 $dev" series {w critical} + property "-circuit2 $dev" series {l add} + property "-circuit2 $dev" parallel enable + property "-circuit2 $dev" parallel {l critical} + property "-circuit2 $dev" parallel {w add} + property "-circuit2 $dev" parallel {value par} + property "-circuit2 $dev" tolerance {l 0.01} {w 0.01} + # Ignore these properties + property "-circuit2 $dev" delete mult + } +} + +#------------------------------------------- +# (MOS) transistors +#------------------------------------------- + +set devices {} +lappend devices sky130_fd_pr__nfet_01v8 +lappend devices sky130_fd_pr__nfet_01v8_lvt +lappend devices sky130_fd_bs_flash__special_sonosfet_star +lappend devices sky130_fd_pr__nfet_g5v0d10v5 +lappend devices sky130_fd_pr__nfet_05v0_nvt +lappend devices sky130_fd_pr__pfet_01v8 +lappend devices sky130_fd_pr__pfet_01v8_lvt +lappend devices sky130_fd_pr__pfet_01v8_mvt +lappend devices sky130_fd_pr__pfet_01v8_hvt +lappend devices sky130_fd_pr__pfet_g5v0d10v5 +lappend devices sky130_fd_pr__special_pfet_pass +lappend devices sky130_fd_pr__special_nfet_pass +lappend devices sky130_fd_pr__special_nfet_latch +lappend devices sky130_fd_pr__cap_var_lvt +lappend devices sky130_fd_pr__cap_var_hvt +lappend devices sky130_fd_pr__cap_var +lappend devices sky130_fd_pr__nfet_20v0_nvt +lappend devices sky130_fd_pr__nfet_20v0 +lappend devices sky130_fd_pr__pfet_20v0 + +foreach dev $devices { + if {[lsearch $cells1 $dev] >= 0} { + permute "-circuit1 $dev" 1 3 + property "-circuit1 $dev" parallel enable + property "-circuit1 $dev" parallel {l critical} + property "-circuit1 $dev" parallel {w add} + property "-circuit1 $dev" tolerance {w 0.01} {l 0.01} + # Ignore these properties + property "-circuit1 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs + } + if {[lsearch $cells2 $dev] >= 0} { + permute "-circuit2 $dev" 1 3 + property "-circuit2 $dev" parallel enable + property "-circuit2 $dev" parallel {l critical} + property "-circuit2 $dev" parallel {w add} + property "-circuit2 $dev" tolerance {w 0.01} {l 0.01} + # Ignore these properties + property "-circuit2 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs + } +} + +#------------------------------------------- +# diodes +#------------------------------------------- + +set devices {} +lappend devices sky130_fd_pr__diode_pw2nd_05v5 +lappend devices sky130_fd_pr__diode_pw2nd_05v5_lvt +lappend devices sky130_fd_pr__diode_pw2nd_05v5_nvt +lappend devices sky130_fd_pr__diode_pd2nw_05v5 +lappend devices sky130_fd_pr__diode_pd2nw_05v5_lvt +lappend devices sky130_fd_pr__diode_pd2nw_05v5_hvt +lappend devices sky130_fd_pr__diode_pw2nd_11v0 +lappend devices sky130_fd_pr__diode_pd2nw_11v0 + +foreach dev $devices { + if {[lsearch $cells1 $dev] >= 0} { + property "-circuit1 $dev" parallel enable + property "-circuit1 $dev" parallel {area add} + property "-circuit1 $dev" parallel {value add} + property "-circuit1 $dev" tolerance {area 0.02} + # Ignore these properties + property "-circuit1 $dev" delete mult perim + } + if {[lsearch $cells2 $dev] >= 0} { + property "-circuit2 $dev" parallel enable + property "-circuit2 $dev" parallel {area add} + property "-circuit2 $dev" parallel {value add} + property "-circuit2 $dev" tolerance {area 0.02} + # Ignore these properties + property "-circuit2 $dev" delete mult perim + } +} + +#------------------------------------------- +# capacitors +# MiM capacitors +#------------------------------------------- + +set devices {} +lappend devices sky130_fd_pr__cap_mim_m3_1 +lappend devices sky130_fd_pr__cap_mim_m3_2 + +foreach dev $devices { + if {[lsearch $cells1 $dev] >= 0} { + property "-circuit1 $dev" parallel enable + property "-circuit1 $dev" parallel {area add} + property "-circuit1 $dev" parallel {value add} + property "-circuit1 $dev" tolerance {l 0.01} {w 0.01} + # Ignore these properties + property "-circuit1 $dev" delete mult perim mf + } + if {[lsearch $cells2 $dev] >= 0} { + property "-circuit2 $dev" parallel enable + property "-circuit2 $dev" parallel {area add} + property "-circuit2 $dev" parallel {value add} + property "-circuit2 $dev" tolerance {l 0.01} {w 0.01} + # Ignore these properties + property "-circuit2 $dev" delete mult perim mf + } +} + +#------------------------------------------- +# Fixed-layout devices +# bipolar transistors, +# VPP capacitors +#------------------------------------------- + +set devices {} +lappend devices sky130_fd_pr__npn_05v5_W1p00L1p00 +lappend devices sky130_fd_pr__npn_05v5_W1p00L2p00 +lappend devices sky130_fd_pr__pnp_05v5_W0p68L0p68 +lappend devices sky130_fd_pr__pnp_05v5_W3p40L3p40 +lappend devices sky130_fd_pr__npn_05v5 +lappend devices sky130_fd_pr__pnp_05v5 +lappend devices sky130_fd_pr__npn_11v0 + +lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_lim5_shield +lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_m3_lim5_shield +lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_m4_shield +lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_pom4_shield +lappend devices sky130_fd_pr__cap_vpp_4p4x4p6_m3_lim5_shield +lappend devices sky130_fd_pr__cap_vpp_6p8x6p1_lim4_shield +lappend devices sky130_fd_pr__cap_vpp_6p8x6p1_polym4_shield +lappend devices sky130_fd_pr__cap_vpp_8p6x7p9_m3_lim5_shield +lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_m3_li_shield +lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_m3_shield +lappend devices sky130_fd_pr__cap_vpp_1p8x1p8_li_shield +lappend devices sky130_fd_pr__cap_vpp_1p8x1p8_m3_shield +lappend devices sky130_fd_pr__cap_vpp_4p4x4p6_m3_li_shield +lappend devices sky130_fd_pr__cap_vpp_4p4x4p6_m3_shield +lappend devices sky130_fd_pr__cap_vpp_8p6x7p9_m3_li_shield +lappend devices sky130_fd_pr__cap_vpp_8p6x7p9_m3_shield +lappend devices sky130_fd_pr__ind_04_01 +lappend devices sky130_fd_pr__ind_04_02 + +foreach dev $devices { + if {[lsearch $cells1 $dev] >= 0} { + property "-circuit1 $dev" parallel enable + # Ignore these properties + property "-circuit1 $dev" delete mult + } + if {[lsearch $cells2 $dev] >= 0} { + property "-circuit2 $dev" parallel enable + # Ignore these properties + property "-circuit2 $dev" delete mult + } +} + +#--------------------------------------------------------------- +# Schematic cells which are not extractable +#--------------------------------------------------------------- + +set devices {sky130_fd_io__condiode sky130_fd_io__tap_1} + +foreach dev $devices { + if {[lsearch $cells1 $dev] >= 0} { + ignore class "-circuit1 $dev" + } + if {[lsearch $cells2 $dev] >= 0} { + ignore class "-circuit2 $dev" + } +} + +#--------------------------------------------------------------- +# Digital cells (ignore decap, fill, and tap cells) +# Make a separate list for each supported library +#--------------------------------------------------------------- +# e.g., ignore class "-circuit2 sky130_fc_sc_hd__decap_3" +#--------------------------------------------------------------- + +if { [info exist ::env(MAGIC_EXT_USE_GDS)] && $::env(MAGIC_EXT_USE_GDS) } { + foreach cell $cells1 { +# if {[regexp {sky130_fd_sc_[^_]+__decap_[[:digit:]]+} $cell match]} { +# ignore class "-circuit1 $cell" +# } + if {[regexp {sky130_fd_sc_[^_]+__fill_[[:digit:]]+} $cell match]} { + ignore class "-circuit1 $cell" + } + if {[regexp {sky130_fd_sc_[^_]+__tapvpwrvgnd_[[:digit:]]+} $cell match]} { + ignore class "-circuit1 $cell" + } + if {[regexp {sky130_ef_sc_[^_]+__fakediode_[[:digit:]]+} $cell match]} { + ignore class "-circuit1 $cell" + } + } + foreach cell $cells2 { +# if {[regexp {sky130_fd_sc_[^_]+__decap_[[:digit:]]+} $cell match]} { +# ignore class "-circuit2 $cell" +# } + if {[regexp {sky130_fd_sc_[^_]+__fill_[[:digit:]]+} $cell match]} { + ignore class "-circuit2 $cell" + } + if {[regexp {sky130_fd_sc_[^_]+__tapvpwrvgnd_[[:digit:]]+} $cell match]} { + ignore class "-circuit2 $cell" + } + if {[regexp {sky130_ef_sc_[^_]+__fakediode_[[:digit:]]+} $cell match]} { + ignore class "-circuit2 $cell" + } + } +} + +#--------------------------------------------------------------- +# Allow the fill, decap, etc., cells to be parallelized +#--------------------------------------------------------------- + +foreach cell $cells1 { + if {[regexp {sky130_fd_sc_[^_]+__decap_[[:digit:]]+} $cell match]} { + property "-circuit1 $cell" parallel enable + } + if {[regexp {sky130_fd_sc_[^_]+__fill_[[:digit:]]+} $cell match]} { + property "-circuit1 $cell" parallel enable + } + if {[regexp {sky130_fd_sc_[^_]+__tapvpwrvgnd_[[:digit:]]+} $cell match]} { + property "-circuit1 $cell" parallel enable + } + if {[regexp {sky130_fd_sc_[^_]+__diode_[[:digit:]]+} $cell match]} { + property "-circuit1 $cell" parallel enable + } + if {[regexp {sky130_fd_sc_[^_]+__fill_diode_[[:digit:]]+} $cell match]} { + property "-circuit1 $cell" parallel enable + } + if {[regexp {sky130_ef_sc_[^_]+__fakediode_[[:digit:]]+} $cell match]} { + property "-circuit1 $cell" parallel enable + } +} +foreach cell $cells2 { + if {[regexp {sky130_fd_sc_[^_]+__decap_[[:digit:]]+} $cell match]} { + property "-circuit2 $cell" parallel enable + } + if {[regexp {sky130_fd_sc_[^_]+__fill_[[:digit:]]+} $cell match]} { + property "-circuit2 $cell" parallel enable + } + if {[regexp {sky130_fd_sc_[^_]+__tapvpwrvgnd_[[:digit:]]+} $cell match]} { + property "-circuit2 $cell" parallel enable + } + if {[regexp {sky130_fd_sc_[^_]+__diode_[[:digit:]]+} $cell match]} { + property "-circuit2 $cell" parallel enable + } + if {[regexp {sky130_fd_sc_[^_]+__fill_diode_[[:digit:]]+} $cell match]} { + property "-circuit2 $cell" parallel enable + } + if {[regexp {sky130_ef_sc_[^_]+__fakediode_[[:digit:]]+} $cell match]} { + property "-circuit2 $cell" parallel enable + } +} + +#--------------------------------------------------------------- +# Handle cells captured from Electric +# +# Find cells of the form "__" in the netlist +# from Electric where the extracted layout netlist has only +# "". Cross-check by ensuring that the full name +# "__" does not exist in both cells, and that +# the truncated name "" does not exist in both cells. +#--------------------------------------------------------------- +# e.g., hydra_spi_controller__hydra_spi_controller +#--------------------------------------------------------------- + +foreach cell $cells1 { + if {[regexp "(.+)__(.+)" $cell match library cellname]} { + if {([lsearch $cells2 $cell] < 0) && \ + ([lsearch $cells2 $cellname] >= 0) && \ + ([lsearch $cells1 $cellname] < 0)} { + equate classes "-circuit1 $cell" "-circuit2 $cellname" + puts stdout "Matching pins of $cell in circuit 1 and $cellname in circuit 2" + equate pins "-circuit1 $cell" "-circuit2 $cellname" + } + } +} + +foreach cell $cells2 { + if {[regexp "(.+)__(.+)" $cell match library cellname]} { + if {([lsearch $cells1 $cell] < 0) && \ + ([lsearch $cells1 $cellname] >= 0) && \ + ([lsearch $cells2 $cellname] < 0)} { + equate classes "-circuit1 $cellname" "-circuit2 $cell" + puts stdout "Matching pins of $cellname in circuit 1 and $cell in circuit 2" + equate pins "-circuit1 $cellname" "-circuit2 $cell" + } + } +} + +# Match pins on black-box cells if LVS is called with "-blackbox" +if {[model blackbox]} { + foreach cell $cells1 { + if {[model "-circuit1 $cell"] == "blackbox"} { + if {[lsearch $cells2 $cell] >= 0} { + puts stdout "Matching pins of $cell in circuits 1 and 2" + equate pins "-circuit1 $cell" "-circuit2 $cell" + } + } + } +} + +#--------------------------------------------------------------- diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/.gitignore b/openfasoc/generators/gdsfactory-gen/lvs_flow/.gitignore index b4699b2d0..74db1ff8b 100644 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/.gitignore +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/.gitignore @@ -1,7 +1,4 @@ -# logs/ -# objects/ -# reports/ -# results/ -# /*.log -# /*.spice -# /*.ext +objects/sky130hd/glayout/netgen_lvs/ext/* +objects/sky130hd/glayout/netgen_lvs/spice/* +results/sky130hd/glayout/** +/reports/sky130hd/glayout/** \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/Makefile b/openfasoc/generators/gdsfactory-gen/lvs_flow/Makefile index 0df324ecf..a79438cb1 100644 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/Makefile +++ b/openfasoc/generators/gdsfactory-gen/lvs_flow/Makefile @@ -3,46 +3,19 @@ ifndef DISPLAY export QT_QPA_PLATFORM ?= offscreen endif -# ============================================================================== -# ____ _____ _____ _ _ ____ -# / ___|| ____|_ _| | | | _ \ -# \___ \| _| | | | | | | |_) | -# ___) | |___ | | | |_| | __/ -# |____/|_____| |_| \___/|_| -# -# ============================================================================== - - -#------------------------------------------------------------------------------- -# Proper way to initiate SHELL for make SHELL = /bin/bash .SHELLFLAGS = -o pipefail -c -#------------------------------------------------------------------------------- -# Setup variables to point to root / head of the OpenROAD directory -# - the following settings allowed user to point OpenROAD binaries to different -# location -# - default follows OpenFASOC's directory structure, with absolute path to flow/ export FLOW_HOME ?= $(shell pwd) export COMMON_HOME ?= $(FLOW_HOME)/../../../common - -#------------------------------------------------------------------------------- -# Setup variables to point to other location for the following sub directory -# - designs - default is under current directory -# - platforms - default is under current directory -# - work home - default is current directory -# - utils, scripts, test - default is under current directory export PLATFORM ?= sky130hd export DESIGN_HOME ?= $(FLOW_HOME)/design export PLATFORM_HOME ?= $(COMMON_HOME)/platforms export WORK_HOME ?= $(shell pwd) - export UTILS_DIR ?= $(FLOW_HOME)/util export SCRIPTS_DIR ?= $(FLOW_HOME)/scripts export TEST_DIR ?= $(FLOW_HOME)/test -#------------------------------------------------------------------------------- -# Include design and platform configuration include $(DESIGN_CONFIG) PUBLIC=nangate45 sky130hd sky130hs asap7 @@ -62,108 +35,44 @@ include $(PLATFORM_DIR)/config.mk export DESIGN_NAME = diff_test export GALLERY_REPORT ?= 0 export VIN_ROUTE_CONNECTION_POINTS = 3 - export RESYNTH_AREA_RECOVER ?= 0 export RESYNTH_TIMING_RECOVER ?= 0 export ABC_AREA ?= 0 - -# Global setting for Synthesis export SYNTH_ARGS ?= -flatten - -# Global setting for Floorplan export PLACE_PINS_ARGS - export FLOW_VARIANT ?= glayout - export GPL_TIMING_DRIVEN ?= 1 export GPL_ROUTABILITY_DRIVEN ?= 1 - export ENABLE_DPO ?= 1 export DPO_MAX_DISPLACEMENT ?= 5 1 - -# Setup working directories export DESIGN_NICKNAME ?= $(DESIGN_NAME) - export DESIGN_DIR = $(dir $(DESIGN_CONFIG)) export LOG_DIR = $(WORK_HOME)/logs/$(PLATFORM)/$(FLOW_VARIANT) export OBJECTS_DIR = $(WORK_HOME)/objects/$(PLATFORM)/$(FLOW_VARIANT) export REPORTS_DIR = $(WORK_HOME)/reports/$(PLATFORM)/$(FLOW_VARIANT) export RESULTS_DIR = $(WORK_HOME)/results/$(PLATFORM)/$(FLOW_VARIANT) -#------------------------------------------------------------------------------- + ifeq (, $(strip $(NPROC))) - # Linux (utility program) NPROC := $(shell nproc 2>/dev/null) ifeq (, $(strip $(NPROC))) - # Linux (generic) NPROC := $(shell grep -c ^processor /proc/cpuinfo 2>/dev/null) endif ifeq (, $(strip $(NPROC))) - # BSD (at least FreeBSD and Mac OSX) NPROC := $(shell sysctl -n hw.ncpu 2>/dev/null) endif ifeq (, $(strip $(NPROC))) - # Fallback NPROC := 1 endif endif export NUM_CORES := $(NPROC) -export LSORACLE_CMD ?= $(shell command -v lsoracle) -ifeq ($(LSORACLE_CMD),) - LSORACLE_CMD = $(abspath $(FLOW_HOME)/../tools/install/LSOracle/bin/lsoracle) -endif - -LSORACLE_PLUGIN ?= $(abspath $(FLOW_HOME)/../tools/install/yosys/share/yosys/plugin/oracle.so) -export LSORACLE_KAHYPAR_CONFIG ?= $(abspath $(FLOW_HOME)/../tools/install/LSOracle/share/lsoracle/test.ini) -ifneq ($(USE_LSORACLE),) - YOSYS_FLAGS ?= -m $(LSORACLE_PLUGIN) -endif - -YOSYS_FLAGS += -v 3 - -#------------------------------------------------------------------------------- -# setup all commands used within this flow -TIME_CMD = /usr/bin/time -f 'Elapsed time: %E[h:]min:sec. CPU time: user %U sys %S (%P). Peak memory: %MKB.' -TIME_TEST = $(shell $(TIME_CMD) echo foo 2>/dev/null) -ifeq (, $(strip $(TIME_TEST))) - TIME_CMD = /usr/bin/time -endif - -# The following determine the executable location for each tool used by this flow. -# Priority is given to -# 1 user include path to the executable prior to running make -# 2 user explicit set with variable in Makefile or command line -OPENROAD_EXE ?= $(shell command -v openroad) -ifeq ($(OPENROAD_EXE),) -# OPENROAD_EXE = $(abspath $(FLOW_HOME)/../tools/install/OpenROAD/bin/openroad) - $(error OpenROAD not found in PATH) -endif -OPENROAD_ARGS = -no_init $(OR_ARGS) -OPENROAD_CMD = $(OPENROAD_EXE) -exit $(OPENROAD_ARGS) -OPENROAD_NO_EXIT_CMD = $(OPENROAD_EXE) $(OPENROAD_ARGS) -OPENROAD_GUI_CMD = $(OPENROAD_EXE) -gui $(OR_ARGS) - -YOSYS_CMD ?= $(shell command -v yosys) -ifeq ($(YOSYS_CMD),) -# YOSYS_CMD = $(abspath $(FLOW_HOME)/../tools/install/yosys/bin/yosys) - $(error Yosys not found in PATH) -endif - -KLAYOUT_CMD ?= $(shell command -v klayout) - -KLAYOUT_FOUND = $(if $(KLAYOUT_CMD),,$(error KLayout not found in PATH)) - -#------------------------------------------------------------------------------- WRAPPED_LEFS = $(foreach lef,$(notdir $(WRAP_LEFS)),$(OBJECTS_DIR)/lef/$(lef:.lef=_mod.lef)) WRAPPED_LIBS = $(foreach lib,$(notdir $(WRAP_LIBS)),$(OBJECTS_DIR)/$(lib:.lib=_mod.lib)) export ADDITIONAL_LEFS += $(WRAPPED_LEFS) $(WRAP_LEFS) export LIB_FILES += $(WRAP_LIBS) $(WRAPPED_LIBS) - export DONT_USE_LIBS = $(patsubst %.lib.gz, %.lib, $(addprefix $(OBJECTS_DIR)/lib/, $(notdir $(LIB_FILES)))) export DONT_USE_SC_LIB ?= $(firstword $(DONT_USE_LIBS)) - -# Stream system used for final result (GDS is default): GDS, GSDII, GDS2, OASIS, or OAS STREAM_SYSTEM ?= GDS ifneq ($(findstring GDS,$(shell echo $(STREAM_SYSTEM) | tr '[:lower:]' '[:upper:]')),) export STREAM_SYSTEM_EXT := gds @@ -178,67 +87,14 @@ else endif export WRAPPED_GDSOAS = $(foreach lef,$(notdir $(WRAP_LEFS)),$(OBJECTS_DIR)/$(lef:.lef=_mod.$(STREAM_SYSTEM_EXT))) - -# Targets to harden Blocks in case of hierarchical flow is triggered build_macros: $(BLOCK_LEFS) - $(foreach block,$(BLOCKS),$(eval ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/${block}.lef: ./designs/$(PLATFORM)/$(DESIGN_NICKNAME)/${block}/config.mk)) $(foreach block,$(BLOCKS),$(eval ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/6_final.gds: ./results/$(PLATFORM)/$(DESIGN_NICKNAME)_$(block)/$(FLOW_VARIANT)/${block}.lef)) - $(BLOCK_LEFS): $(MAKE) DESIGN_CONFIG=$< generate_abstract - -# Utility to print tool version information -#------------------------------------------------------------------------------- -.PHONY: versions.txt -versions.txt: - @$(YOSYS_CMD) -V > $@ - @echo openroad `$(OPENROAD_EXE) -version` >> $@ - @$(KLAYOUT_CMD) -zz -v >> $@ - -# LVS specific global var for this generator -#------------------------------------------------------------------------------- export __open_generator_name__=diff_test -# Pre-process libraries -# ============================================================================== - -# Create temporary Liberty files which have the proper dont_use properties set -# For use with Yosys and ABC -.SECONDEXPANSION: -$(DONT_USE_LIBS): $$(filter %$$(@F) %$$(@F).gz,$(LIB_FILES)) - @mkdir -p $(OBJECTS_DIR)/lib - $(UTILS_DIR)/markDontUse.py -p "$(DONT_USE_CELLS)" -i $^ -o $@ - -$(OBJECTS_DIR)/lib/merged.lib: - $(UTILS_DIR)/mergeLib.pl $(PLATFORM)_merged $(DONT_USE_LIBS) > $@ - -# Pre-process KLayout tech -# ============================================================================== -$(OBJECTS_DIR)/klayout_tech.lef: $(TECH_LEF) - @mkdir -p $(OBJECTS_DIR) - sed '/OR_DEFAULT/d' $< > $@ - - $(OBJECTS_DIR)/klayout.lyt: $(KLAYOUT_TECH_FILE) $(OBJECTS_DIR)/klayout_tech.lef - sed 's,.*,$(foreach file, $(OBJECTS_DIR)/klayout_tech.lef $(SC_LEF) $(ADDITIONAL_LEFS),$(abspath $(file))),g' $< > $@ - -$(OBJECTS_DIR)/klayout_wrap.lyt: $(KLAYOUT_TECH_FILE) $(OBJECTS_DIR)/klayout_tech.lef - sed 's,.*,$(foreach file, $(OBJECTS_DIR)/klayout_tech.lef $(WRAP_LEFS),$(abspath $(file))),g' $< > $@ -# Create Macro wrappers (if necessary) -# ============================================================================== WRAP_CFG = $(PLATFORM_DIR)/wrapper.cfg - - -export TCLLIBPATH := util/cell-veneer $(TCLLIBPATH) -$(WRAPPED_LEFS): - mkdir -p $(OBJECTS_DIR)/lef $(OBJECTS_DIR)/def - util/cell-veneer/wrap.tcl -cfg $(WRAP_CFG) -macro $(filter %$(notdir $(@:_mod.lef=.lef)),$(WRAP_LEFS)) - mv $(notdir $@) $@ - mv $(notdir $(@:lef=def)) $(dir $@)../def/$(notdir $(@:lef=def)) - -$(WRAPPED_LIBS): - mkdir -p $(OBJECTS_DIR)/lib - sed 's/library(\(.*\))/library(\1_mod)/g' $(filter %$(notdir $(@:_mod.lib=.lib)),$(WRAP_LIBS)) | sed 's/cell(\(.*\))/cell(\1_mod)/g' > $@ export COMMON_VERIF_DIR = $(COMMON_HOME)/drc-lvs-check magic_drc: $(RESULTS_DIR)/6_final.gds diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/run_glayout_lvs.py b/openfasoc/generators/gdsfactory-gen/lvs_flow/run_glayout_lvs.py deleted file mode 100644 index c6a881478..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/run_glayout_lvs.py +++ /dev/null @@ -1,201 +0,0 @@ -import os -import sys -import re -import subprocess as sp -from gdsfactory.component import Component - -sys.path.append(os.path.join(os.path.dirname(__file__), '..')) -sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '.github', 'scripts')) - -from glayout.pdk.sky130_mapped import sky130_mapped_pdk as sky130 -from glayout.pdk.gf180_mapped import gf180_mapped_pdk as gf180 -from glayout.components.diff_pair import diff_pair -from glayout.primitives.fet import nmos, pmos -from glayout.components.opamp import opamp - -from run_glayout_drc import place_component - -# ########################################################################################################### -# ########################################################################################################### -def get_gds_netlist(component_name, func, pdk, gds_path): - """used to return the netlist and component object for the - desired component's placement - - Args: - component_name (str): the global descriptor for the instantiated component - func (callable[[Component], any]): the function to be called to generate the component - pdk (MappedPDK): the pdk object for which the component is to be generated - gds_path (str): the path to the generated gds file - - Returns: - Component: the instance of the component - str: the netlist string - """ - component = place_component(component_name, func, pdk) - component.write_gds(gds_path) - netlist = component.info['netlist'].generate_netlist() - return netlist, component - - -def compname_in_net(mynet: str) -> str: - """used to edit netlist to change the component name to - the test component name for global definition - - Args: - mynet (str): the netlist string input - - Returns: - str: the modified netlist string - """ - pattern_diff = re.compile(r'\bDIFF_PAIR\b') - pattern_nmos = re.compile(r'\bNMOS\b') - pattern_pmos = re.compile(r'\bPMOS\b') - pattern_opamp = re.compile(r'\bopamp\b') - patterns = [pattern_diff, pattern_nmos, pattern_pmos, pattern_opamp] - replacements = ['diff_test', 'nmos_test', 'pmos_test', 'opamp_test'] - - for i, pattern in enumerate(patterns): - if pattern.search(mynet): - replacement = replacements[i] - mynet = re.sub(pattern, replacement, mynet) - return mynet - -def edit_makefile(comp: Component, makefile_path: str): - """used to edit the makefile to change the DESIGN_NAME variable - according to the component name - - Args: - comp (Component): the component object for which the makefile is to be edited - makefile_path (str): the string path to the makefile - """ - pattern = re.compile(r'export DESIGN_NAME = (.*)_test') - my_var = comp.name - - with open(makefile_path, 'r') as rf: - data = rf.read() - - new_content = re.sub(pattern, f'export DESIGN_NAME = {my_var}', data) - - with open(makefile_path, 'w') as wf: - wf.write(new_content) - -def evaluate_report(report_fle: str) -> bool: - """used to evaluate the lvs report file - - Args: - report_fle (str): the path to the lvs report file (6_final_lvs.rpt) - - Returns: - bool: The flag indicating if the lvs run was successful - """ - with open(report_fle, 'r') as file: - report_content = file.read() - - string1 = 'Cell pin lists are equivalent.' - string2 = 'Netlists match with' - - if string1 in report_content and string2 in report_content: - return True - return False -###################################################################################################################################################################################################################### -###################################################################################################################################################################################################################### - - -gds_path = './results/sky130hd/glayout/6_final.gds' -cdl_path = './results/sky130hd/glayout/6_final.cdl' -report_path = './reports/sky130hd/glayout/6_final_lvs.rpt' -makefile_script = './Makefile' - -## PMOS -mynet, comp = get_gds_netlist('pmos_test', pmos, sky130, gds_path) - -net_file = cdl_path -mynet = compname_in_net(mynet) -with open(net_file, 'w') as wf: - wf.write(mynet) - -edit_makefile(comp, makefile_script) - -subproc_cmd = ['make', 'netgen_lvs'] -sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) -stdout, stderr = sub.communicate() - -print(stdout) - -report_return_code = evaluate_report(report_path) - -if report_return_code: - print(f'LVS run successful for pmos_test') -else: - print(f'LVS failed for pmos_test!') - sys.exit(1) - -## NMOS -mynet, comp = get_gds_netlist('nmos_test', nmos, sky130, gds_path) - -net_file = cdl_path -mynet = compname_in_net(mynet) -with open(net_file, 'w') as wf: - wf.write(mynet) - -edit_makefile(comp, makefile_script) - -subproc_cmd = ['make', 'netgen_lvs'] -sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) -stdout, stderr = sub.communicate() - -print(stdout) - -report_return_code = evaluate_report(report_path) - -if report_return_code: - print(f'LVS run successful for nmos_test') -else: - print(f'LVS failed for nmos_test!') - sys.exit(1) - -## DIFF_PAIR -mynet, comp = get_gds_netlist('diff_test', diff_pair, sky130, gds_path) - -net_file = cdl_path -mynet = compname_in_net(mynet) -with open(net_file, 'w') as wf: - wf.write(mynet) - -edit_makefile(comp, makefile_script) - -subproc_cmd = ['make', 'netgen_lvs'] -sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) -stdout, stderr = sub.communicate() - -print(stdout) - -report_return_code = evaluate_report(report_path) - -if report_return_code: - print(f'LVS run successful for diff_test') -else: - print(f'LVS failed for diff_test!') - sys.exit(1) - -## OPAMP -##### not using currently because not LVS clean -# mynet, comp = get_gds_netlist('opamp_test', opamp, sky130, gds_path) - -# net_file = cdl_path -# mynet = compname_in_net(mynet) -# with open(net_file, 'w') as wf: -# wf.write(mynet) - -# edit_makefile(comp, makefile_script) - -# subproc_cmd = ['make', 'netgen_lvs'] -# sub = sp.Popen(subproc_cmd, stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True) -# stdout, stderr = sub.communicate() - -# print(stdout) - -# if sub.returncode != 0: -# print(f'LVS failed for opamp_test with error:\n {stderr}') -# else: -# print(f'LVS run successful for opamp_test') \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/add_routing_blk.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/add_routing_blk.tcl deleted file mode 100644 index 9769ad0af..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/add_routing_blk.tcl +++ /dev/null @@ -1,49 +0,0 @@ -################################################### -# Create Routing Blockages around Macros for GF12 # -# Created by Minsoo Kim (mik226@eng.ucsd.edu) # -################################################### -set db [::ord::get_db] -set block [[$db getChip] getBlock] -set tech [$db getTech] - -set layer_M2 [$tech findLayer M2] -set layer_M3 [$tech findLayer M3] -set layer_C4 [$tech findLayer C4] - -set numTrack 5 - -set allInsts [$block getInsts] - -set cnt 0 - -foreach inst $allInsts { - set master [$inst getMaster] - set name [$master getName] - set loc_llx [lindex [$inst getLocation] 0] - set loc_lly [lindex [$inst getLocation] 1] - - if {[string match "*gf12*" $name]||[string match "IN12LP*" $name]} { - set w [$master getWidth] - set h [$master getHeight] - - set llx_Mx [expr $loc_llx - (128*$numTrack)] - set lly_Mx [expr $loc_lly - (128*$numTrack)] - set urx_Mx [expr $loc_llx + $w + (128*$numTrack)] - set ury_Mx [expr $loc_lly + $h + (128*$numTrack)] - - set llx_Cx $loc_llx - set lly_Cx [expr $loc_lly - (160*$numTrack)] - set urx_Cx [expr $loc_llx + $w] - set ury_Cx [expr $loc_lly + $h + (160*$numTrack)] - - set obs_M2 [odb::dbObstruction_create $block $layer_M2 $llx_Mx $lly_Mx $urx_Mx $ury_Mx] - set obs_M3 [odb::dbObstruction_create $block $layer_M3 $llx_Mx $lly_Mx $urx_Mx $ury_Mx] - set obs_C4 [odb::dbObstruction_create $block $layer_C4 $llx_Cx $lly_Cx $urx_Cx $ury_Cx] - - incr cnt - } -} - -if {$cnt != 0} { - puts "\[INFO\] created $cnt routing blockages over macros" -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/cdl.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/cdl.tcl deleted file mode 100644 index 7d6563f83..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/cdl.tcl +++ /dev/null @@ -1,4 +0,0 @@ -source $::env(SCRIPTS_DIR)/load.tcl -load_design 6_1_fill.odb 6_final.sdc "Starting CDL" - -write_cdl -masters $::env(CDL_FILE) $::env(RESULTS_DIR)/6_final.cdl diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/create_custom_connections.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/create_custom_connections.tcl deleted file mode 100644 index a60abd99c..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/create_custom_connections.tcl +++ /dev/null @@ -1,27 +0,0 @@ -proc create_custom_connections {file_name} { - set block [ord::get_db_block] - set units [$block getDefUnits] - - set ch [open $file_name] - - set line [gets $ch] - set net [$block findNet [lindex $line 0]] - - while {![eof $ch]} { - set line [gets $ch] - if {[llength $line] == 0} {break} - - set inst [$block findInst [lindex $line 0]] - set iterm [$inst findITerm [lindex $line 1]] - - if {[ catch {odb::dbITerm_connect $iterm $net} ]} { - puts "Cannot create custom connection on: " - puts "instance name: [$inst getName]" - puts "MTerm name: [[$iterm getMTerm] getName]" - } - - } - - close $ch - -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/def_to_odb.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/def_to_odb.tcl deleted file mode 100644 index 614c606d1..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/def_to_odb.tcl +++ /dev/null @@ -1,24 +0,0 @@ -source $::env(SCRIPTS_DIR)/load.tcl -if {![info exists standalone] || $standalone} { - # Read lef - read_lef $::env(TECH_LEF) - read_lef $::env(SC_LEF) - if {[info exist ::env(ADDITIONAL_LEFS)]} { - foreach lef $::env(ADDITIONAL_LEFS) { - read_lef $lef - } - } - - # Read liberty files - foreach libFile $::env(LIB_FILES) { - read_liberty $libFile - } - - # Read def - read_def $::env(RESULTS_DIR)/2_floorplan_ro.def -} else { - puts "No DEF File?" -} - -write_db $::env(RESULTS_DIR)/2_floorplan_ro.odb -puts "ODB file written to $::env(RESULTS_DIR)" diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteNonClkNets.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteNonClkNets.tcl deleted file mode 100644 index e4b07774e..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteNonClkNets.tcl +++ /dev/null @@ -1,38 +0,0 @@ -read_lef $::env(TECH_LEF) -read_lef $::env(SC_LEF) -if {[info exist ::env(ADDITIONAL_LEFS)]} { - foreach lef $::env(ADDITIONAL_LEFS) { - read_lef $lef - } -} - -# Read liberty files -foreach libFile $::env(LIB_FILES) { - read_liberty $libFile -} -# Read def and sdc -read_def $::env(RESULTS_DIR)/6_final.def - -set block [[[ord::get_db] getChip] getBlock] -set nets [$block getNets] -set insts [$block getInsts] - -# Delete all non-clock nets -foreach net $nets { - set sigType [$net getSigType] - set wire [$net getWire] - if {"$sigType" eq "SIGNAL" && "$wire" ne "NULL"} { - odb::dbWire_destroy $wire - } elseif {"$sigType" eq "POWER" || - "$sigType" eq "GROUND"} { - $net destroySWires - } -} - -# Delete fill cells to clean up screenshot -foreach inst $insts { - if {"[[$inst getMaster] getType]" eq "CORE_SPACER"} { - odb::dbInst_destroy $inst - } -} -write_def $::env(RESULTS_DIR)/6_final_only_clk.def diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deletePowerNets.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deletePowerNets.tcl deleted file mode 100644 index 972a0a06e..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deletePowerNets.tcl +++ /dev/null @@ -1,29 +0,0 @@ -read_lef $::env(TECH_LEF) -read_lef $::env(SC_LEF) -if {[info exist ::env(ADDITIONAL_LEFS)]} { - foreach lef $::env(ADDITIONAL_LEFS) { - read_lef $lef - } -} - -# Read liberty files -foreach libFile $::env(LIB_FILES) { - read_liberty $libFile -} -# Read def and sdc -read_def $::env(RESULTS_DIR)/6_final.def - -proc deleteNetByName {name} { - set db [ord::get_db] - set chip [$db getChip] - set block [$chip getBlock] - set net [$block findNet $name] - $net destroySWires - puts "\[INFO\] Deleted net '[$net getName]'" -} - -deleteNetByName VDD -deleteNetByName VSS - -write_def $::env(RESULTS_DIR)/6_final_no_power.def -exit diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteRoutingObstructions.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteRoutingObstructions.tcl deleted file mode 100644 index 6ed38f6ef..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/deleteRoutingObstructions.tcl +++ /dev/null @@ -1,11 +0,0 @@ -proc deleteRoutingObstructions {} { - set db [ord::get_db] - set chip [$db getChip] - set block [$chip getBlock] - set obstructions [$block getObstructions] - - foreach obstruction $obstructions { - odb::dbObstruction_destroy $obstruction - } - puts "\[INFO\] Deleted [llength $obstructions] routing obstructions" -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/density_fill.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/density_fill.tcl deleted file mode 100644 index 30468b9de..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/density_fill.tcl +++ /dev/null @@ -1,27 +0,0 @@ -if {![info exists standalone] || $standalone} { - # Read lef - read_lef $::env(TECH_LEF) - read_lef $::env(SC_LEF) - if {[info exist ::env(ADDITIONAL_LEFS)]} { - foreach lef $::env(ADDITIONAL_LEFS) { - read_lef $lef - } - } - - # Read def - read_def $::env(RESULTS_DIR)/5_route.def -} else { - puts "Starting density fill" -} - -# Delete routing obstructions for final DEF -source scripts/deleteRoutingObstructions.tcl -deleteRoutingObstructions - -density_fill -rules $::env(FILL_CONFIG) - -if {![info exists standalone] || $standalone} { - write_def $::env(RESULTS_DIR)/6_1_fill.def - write_verilog $::env(RESULTS_DIR)/6_1_fill.v - exit -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_place.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_place.tcl deleted file mode 100644 index 6b09d6931..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_place.tcl +++ /dev/null @@ -1,87 +0,0 @@ -utl::set_metrics_stage "detailedplace__{}" -source $::env(SCRIPTS_DIR)/load.tcl -load_design 3_1_place_gp.odb 2_floorplan.sdc "Starting detailed placement" - -source $::env(PLATFORM_DIR)/setRC.tcl - -set_placement_padding -global \ - -left $::env(CELL_PAD_IN_SITES_DETAIL_PLACEMENT) \ - -right $::env(CELL_PAD_IN_SITES_DETAIL_PLACEMENT) - -# place header cells in the right, starting from row 1 upward (not randomly) -source $::env(SCRIPTS_DIR)/openfasoc/custom_place.tcl -customPlace_east [ord::get_db_block] "HEADER" 1 no - -if {$::env(PLATFORM) eq "sky130hd"} { - set_placement_padding -left 1 -right 1 -masters sky130_fd_sc_hd__decap_4 - set_placement_padding -left 1 -right 1 -masters sky130_fd_sc_hd__inv_1 - set_placement_padding -left 1 -right 1 -masters sky130_fd_sc_hd__nand2_1 - set_placement_padding -left 0 -right 0 -masters sky130_fd_sc_hd__tapvpwrvgnd_1 -} elseif {$::env(PLATFORM) eq "sky130hs"} { - set_placement_padding -left 1 -right 1 -masters sky130_fd_sc_hs__decap_4 - set_placement_padding -left 0 -right 0 -masters sky130_fd_sc_hs__inv_1 - set_placement_padding -left 0 -right 0 -masters sky130_fd_sc_hs__nand2_1 - set_placement_padding -left 0 -right 0 -masters sky130_fd_sc_hs__tapvpwrvgnd_1 -} elseif {$::env(PLATFORM) eq "sky130hvl"} { - set_placement_padding -left 0 -right 0 -masters sky130_fd_sc_hvl__inv_1 - set_placement_padding -left 1 -right 1 -masters sky130_fd_sc_hvl__decap_4 - set_placement_padding -left 0 -right 0 -masters sky130_fd_sc_hvl__nand2_1 -} elseif {$::env(PLATFORM) eq "sky130osu12Ths"} { - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_12T_hs__inv_1 - set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_12T_hs__decap_1 - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_12T_hs__nand2_1 -} elseif {$::env(PLATFORM) eq "sky130osu12Tms"} { - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_12T_ms__inv_1 - set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_12T_ms__decap_1 - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_12T_ms__nand2_1 -} elseif {$::env(PLATFORM) eq "sky130osu12Tls"} { - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_12T_ls__inv_1 - set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_12T_ls__decap_1 - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_12T_ls__nand2_1 -} elseif {$::env(PLATFORM) eq "sky130osu15Ths"} { - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_15T_hs__inv_1 - set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_15T_hs__decap_1 - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_15T_hs__nand2_1 -} elseif {$::env(PLATFORM) eq "sky130osu15Tms"} { - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_15T_ms__inv_1 - set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_15T_ms__decap_1 - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_15T_ms__nand2_1 -} elseif {$::env(PLATFORM) eq "sky130osu15Tls"} { - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_15T_ls__inv_1 - set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_15T_ls__decap_1 - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_15T_ls__nand2_1 -} elseif {$::env(PLATFORM) eq "sky130osu18Ths"} { - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_18T_hs__inv_1 - set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_18T_hs__decap_1 - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_18T_hs__nand2_1 -} elseif {$::env(PLATFORM) eq "sky130osu18Tms"} { - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_18T_ms__inv_1 - set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_18T_ms__decap_1 - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_18T_ms__nand2_1 -} elseif {$::env(PLATFORM) eq "sky130osu18Tls"} { - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_18T_ls__inv_1 - set_placement_padding -left 1 -right 1 -masters sky130_osu_sc_18T_ls__decap_1 - set_placement_padding -left 0 -right 0 -masters sky130_osu_sc_18T_ls__nand2_1 -} - -detailed_placement - -if {[info exists ::env(ENABLE_DPO)] && $::env(ENABLE_DPO)} { - if {[info exist ::env(DPO_MAX_DISPLACEMENT)]} { - improve_placement -max_displacement $::env(DPO_MAX_DISPLACEMENT) - } else { - improve_placement - } -} -optimize_mirroring - -utl::info FLW 12 "Placement violations [check_placement -verbose]." - -estimate_parasitics -placement - -source $::env(SCRIPTS_DIR)/report_metrics.tcl -report_metrics "detailed place" - -if {![info exists save_checkpoint] || $save_checkpoint} { - write_db $::env(RESULTS_DIR)/3_5_place_dp.odb -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_route.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_route.tcl deleted file mode 100644 index 7614eba30..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/detail_route.tcl +++ /dev/null @@ -1,53 +0,0 @@ -utl::set_metrics_stage "detailedroute__{}" -source $::env(SCRIPTS_DIR)/load.tcl -if { [info exists ::env(USE_WXL)]} { - set db_file 4_cts.odb -} else { - set db_file 5_1_grt.odb -} -load_design $db_file 4_cts.sdc "Starting detailed routing" -set_propagated_clock [all_clocks] - -set_thread_count $::env(NUM_CORES) - -set additional_args "" -if { [info exists ::env(dbProcessNode)]} { - append additional_args " -db_process_node $::env(dbProcessNode)" -} -if { [info exists ::env(OR_SEED)]} { - append additional_args " -or_seed $::env(OR_SEED)" -} -if { [info exists ::env(OR_K)]} { - append additional_args " -or_k $::env(OR_K)" -} - -if { [info exists ::env(MIN_ROUTING_LAYER)]} { - append additional_args " -bottom_routing_layer $::env(MIN_ROUTING_LAYER)" -} -if { [info exists ::env(MAX_ROUTING_LAYER)]} { - append additional_args " -top_routing_layer $::env(MAX_ROUTING_LAYER)" -} -if { [info exists ::env(VIA_IN_PIN_MIN_LAYER)]} { - append additional_args " -via_in_pin_bottom_layer $::env(VIA_IN_PIN_MIN_LAYER)" -} -if { [info exists ::env(VIA_IN_PIN_MAX_LAYER)]} { - append additional_args " -via_in_pin_top_layer $::env(VIA_IN_PIN_MAX_LAYER)" -} -if { [info exists ::env(DISABLE_VIA_GEN)]} { - append additional_args " -disable_via_gen" -} - - -detailed_route -output_drc $::env(REPORTS_DIR)/5_route_drc.rpt \ - -output_maze $::env(RESULTS_DIR)/maze.log \ - -save_guide_updates \ - -verbose 1 \ - {*}$additional_args - -if { [info exists ::env(POST_DETAIL_ROUTE_TCL)] } { - source $::env(POST_DETAIL_ROUTE_TCL) -} - -if {![info exists save_checkpoint] || $save_checkpoint} { - write_db $::env(RESULTS_DIR)/5_2_route.odb -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/fillcell.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/fillcell.tcl deleted file mode 100644 index f9a2dc919..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/fillcell.tcl +++ /dev/null @@ -1,11 +0,0 @@ -source $::env(SCRIPTS_DIR)/load.tcl -load_design 4_1_cts.odb 3_place.sdc "Starting fill cell" - -set_propagated_clock [all_clocks] - -filler_placement $::env(FILL_CELLS) -#check_placement - -if {![info exists save_checkpoint] || $save_checkpoint} { - write_db $::env(RESULTS_DIR)/4_2_cts_fillcell.odb -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/final_report.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/final_report.tcl deleted file mode 100644 index a4867f546..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/final_report.tcl +++ /dev/null @@ -1,61 +0,0 @@ -utl::set_metrics_stage "finish__{}" -source $::env(SCRIPTS_DIR)/load.tcl -load_design 6_1_fill.odb 6_1_fill.sdc "Starting final report" - -set_propagated_clock [all_clocks] - -# Delete routing obstructions for final DEF -source $::env(SCRIPTS_DIR)/deleteRoutingObstructions.tcl -deleteRoutingObstructions - -write_db $::env(RESULTS_DIR)/6_final.odb -write_def $::env(RESULTS_DIR)/6_final.def -write_verilog $::env(RESULTS_DIR)/6_final.v - -# Run extraction and STA -if {[info exist ::env(RCX_RULES)]} { - - # Set RC corner for RCX - # Set in config.mk - if {[info exist ::env(RCX_RC_CORNER)]} { - set rc_corner $::env(RCX_RC_CORNER) - } - # RCX section - define_process_corner -ext_model_index 0 X - extract_parasitics -ext_model_file $::env(RCX_RULES) - # Write Spef - write_spef $::env(RESULTS_DIR)/6_final.spef - file delete $::env(DESIGN_NAME).totCap - # Read Spef for OpenSTA - read_spef $::env(RESULTS_DIR)/6_final.spef - # Static IR drop analysis - if {[info exist ::env(PWR_NETS_VOLTAGES)]} { - dict for {pwrNetName pwrNetVoltage} {*}$::env(PWR_NETS_VOLTAGES) { - set_pdnsim_net_voltage -net ${pwrNetName} -voltage ${pwrNetVoltage} - analyze_power_grid -net ${pwrNetName} - } - } else { - puts "IR drop analysis for power nets is skipped because PWR_NETS_VOLTAGES is undefined" - } - if {[info exist ::env(GND_NETS_VOLTAGES)]} { - dict for {gndNetName gndNetVoltage} {*}$::env(GND_NETS_VOLTAGES) { - set_pdnsim_net_voltage -net ${gndNetName} -voltage ${gndNetVoltage} - analyze_power_grid -net ${gndNetName} - } - } else { - puts "IR drop analysis for ground nets is skipped because GND_NETS_VOLTAGES is undefined" - } - -} else { - puts "OpenRCX is not enabled for this platform." -} - -source $::env(SCRIPTS_DIR)/report_metrics.tcl -report_metrics "finish" - -# Save a final image if openroad is compiled with the gui -# if {[expr [llength [info procs save_image]] > 0]} { -# gui::show "source $::env(SCRIPTS_DIR)/save_images.tcl" false -# } - -# ^ commented 22 Dec 23 \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/floorplan.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/floorplan.tcl deleted file mode 100644 index bee5cb9cc..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/floorplan.tcl +++ /dev/null @@ -1,153 +0,0 @@ -utl::set_metrics_stage "floorplan__{}" -source $::env(SCRIPTS_DIR)/load.tcl -load_design 1_synth.v 1_synth.sdc "Starting floorplan" - -set num_instances [llength [get_cells -hier *]] -puts "number instances in verilog is $num_instances" - -# Initialize floorplan using ICeWall FOOTPRINT -# ---------------------------------------------------------------------------- - -if {[info exists ::env(FOOTPRINT)]} { - - ICeWall load_footprint $env(FOOTPRINT) - - initialize_floorplan \ - -die_area [ICeWall get_die_area] \ - -core_area [ICeWall get_core_area] \ - -site $::env(PLACE_SITE) - - ICeWall init_footprint $env(SIG_MAP_FILE) - - -# Initialize floorplan using CORE_UTILIZATION -# ---------------------------------------------------------------------------- -} elseif {[info exists ::env(CORE_UTILIZATION)] && $::env(CORE_UTILIZATION) != "" } { - initialize_floorplan -utilization $::env(CORE_UTILIZATION) \ - -aspect_ratio $::env(CORE_ASPECT_RATIO) \ - -core_space $::env(CORE_MARGIN) \ - -site $::env(PLACE_SITE) - -# Initialize floorplan using DIE_AREA/CORE_AREA -# ---------------------------------------------------------------------------- -} else { - initialize_floorplan -die_area $::env(DIE_AREA) \ - -core_area $::env(CORE_AREA) \ - -site $::env(PLACE_SITE) -} - -if { [info exists ::env(MAKE_TRACKS)] } { - source $::env(MAKE_TRACKS) -} elseif {[file exists $::env(PLATFORM_DIR)/make_tracks.tcl]} { - source $::env(PLATFORM_DIR)/make_tracks.tcl -} else { - make_tracks -} - -if {[info exists ::env(FOOTPRINT_TCL)]} { - source $::env(FOOTPRINT_TCL) - initialize_padring -} - -# remove buffers inserted by yosys/abc -remove_buffers - -##### Restructure for timing ######### -if { [info exist ::env(RESYNTH_TIMING_RECOVER)] && $::env(RESYNTH_TIMING_RECOVER) == 1 } { - repair_design - repair_timing - # pre restructure area/timing report (ideal clocks) - puts "Post synth-opt area" - report_design_area - report_worst_slack -min -digits 3 - puts "Post synth-opt wns" - report_worst_slack -max -digits 3 - puts "Post synth-opt tns" - report_tns -digits 3 - - if {![info exists save_checkpoint] || $save_checkpoint} { - write_verilog $::env(RESULTS_DIR)/2_pre_abc_timing.v - } - - restructure -target timing -liberty_file $::env(DONT_USE_SC_LIB) \ - -work_dir $::env(RESULTS_DIR) - - if {![info exists save_checkpoint] || $save_checkpoint} { - write_verilog $::env(RESULTS_DIR)/2_post_abc_timing.v - } - - # post restructure area/timing report (ideal clocks) - remove_buffers - repair_design - repair_timing - - puts "Post restructure-opt wns" - report_worst_slack -max -digits 3 - puts "Post restructure-opt tns" - report_tns -digits 3 - - # remove buffers inserted by optimization - remove_buffers -} - - -puts "Default units for flow" -report_units -report_units_metric -source $::env(SCRIPTS_DIR)/report_metrics.tcl -report_metrics "floorplan final" false - -if { [info exist ::env(RESYNTH_AREA_RECOVER)] && $::env(RESYNTH_AREA_RECOVER) == 1 } { - - utl::push_metrics_stage "floorplan__{}__pre_restruct" - set num_instances [llength [get_cells -hier *]] - puts "number instances before restructure is $num_instances" - puts "Design Area before restructure" - report_design_area - report_design_area_metrics - utl::pop_metrics_stage - - if {![info exists save_checkpoint] || $save_checkpoint} { - write_verilog $::env(RESULTS_DIR)/2_pre_abc.v - } - - set tielo_cell_name [lindex $env(TIELO_CELL_AND_PORT) 0] - set tielo_lib_name [get_name [get_property [lindex [get_lib_cell $tielo_cell_name] 0] library]] - set tielo_port $tielo_lib_name/$tielo_cell_name/[lindex $env(TIELO_CELL_AND_PORT) 1] - - set tiehi_cell_name [lindex $env(TIEHI_CELL_AND_PORT) 0] - set tiehi_lib_name [get_name [get_property [lindex [get_lib_cell $tiehi_cell_name] 0] library]] - set tiehi_port $tiehi_lib_name/$tiehi_cell_name/[lindex $env(TIEHI_CELL_AND_PORT) 1] - - restructure -liberty_file $::env(DONT_USE_SC_LIB) -target "area" \ - -tiehi_port $tiehi_port \ - -tielo_port $tielo_port \ - -work_dir $::env(RESULTS_DIR) - - # remove buffers inserted by abc - remove_buffers - - if {![info exists save_checkpoint] || $save_checkpoint} { - write_verilog $::env(RESULTS_DIR)/2_post_abc.v - } - utl::push_metrics_stage "floorplan__{}__post_restruct" - set num_instances [llength [get_cells -hier *]] - puts "number instances after restructure is $num_instances" - puts "Design Area after restructure" - report_design_area - report_design_area_metrics - utl::pop_metrics_stage -} - -if { [info exists ::env(POST_FLOORPLAN_TCL)] } { - source $::env(POST_FLOORPLAN_TCL) -} - -if {![info exists save_checkpoint] || $save_checkpoint} { - if {[info exists ::env(GALLERY_REPORT)] && $::env(GALLERY_REPORT) != 0} { - write_def $::env(RESULTS_DIR)/2_1_floorplan.def - } - write_def $::env(RESULTS_DIR)/2_1_floorplan.def - write_db $::env(RESULTS_DIR)/2_1_floorplan.odb - write_sdc $::env(RESULTS_DIR)/2_floorplan.sdc -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place.tcl deleted file mode 100644 index f008eda50..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place.tcl +++ /dev/null @@ -1,81 +0,0 @@ -utl::set_metrics_stage "globalplace__{}" -source $::env(SCRIPTS_DIR)/load.tcl -load_design 2_floorplan_ro.odb 2_floorplan.sdc "Starting global placement" - -set_dont_use $::env(DONT_USE_CELLS) - -# set fastroute layer reduction -if {[info exist env(FASTROUTE_TCL)]} { - source $env(FASTROUTE_TCL) -} else { - set_global_routing_layer_adjustment $env(MIN_ROUTING_LAYER)-$env(MAX_ROUTING_LAYER) 0.5 - set_routing_layers -signal $env(MIN_ROUTING_LAYER)-$env(MAX_ROUTING_LAYER) - set_macro_extension 2 -} -# check the lower boundary of the PLACE_DENSITY and add PLACE_DENSITY_LB_ADDON if it exists -if {[info exist ::env(PLACE_DENSITY_LB_ADDON)]} { - set place_density_lb [gpl::get_global_placement_uniform_density \ - -pad_left $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ - -pad_right $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT)] - set place_density [expr $place_density_lb + ((1.0 - $place_density_lb) * $::env(PLACE_DENSITY_LB_ADDON)) + 0.01] - if {$place_density > 1.0} { - utl::error FLW 24 "Place density exceeds 1.0 (current PLACE_DENSITY_LB_ADDON = $::env(PLACE_DENSITY_LB_ADDON)). Please check if the value of PLACE_DENSITY_LB_ADDON is between 0 and 0.99." - } -} else { - set place_density $::env(PLACE_DENSITY) -} - -# TEMPORARY FIX!!!! (sorry) ASSUME ROUTABILITY DRIVEN -set global_placement_args "" -append global_placement_args " -routability_driven" - -if { 0 != [llength [array get ::env GLOBAL_PLACEMENT_ARGS]] } { -global_placement -density $place_density \ - -pad_left $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ - -pad_right $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ - {*}$global_placement_args \ - $::env(GLOBAL_PLACEMENT_ARGS) -} else { -global_placement -density $place_density \ - -pad_left $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ - -pad_right $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ - {*}$global_placement_args -} - -# force divider to be placed on the right side -set db [::ord::get_db] -set block [[$db getChip] getBlock] -set tech [$db getTech] - -set core [$block getCoreArea] -set core_xl [$core xMin] -set core_yl [$core yMin] -set core_xh [$core xMax] -set core_yh [$core yMax] - -set div_cen_x [expr double(($core_xl + $core_xh) * 3 / 4 / 1000)] -set div_cen_y [expr double(($core_yl + $core_yh) / 2 / 1000)] - -set div_cen [concat $div_cen_x $div_cen_y] - -set allInsts [$block getInsts] - -foreach inst $allInsts { - set master [$inst getMaster] - set name [$inst getName] - if {[string match "_*_" $name]} { - place_cell -inst $name \ - -origin $div_cen \ - -orient R0 - } -} - - -estimate_parasitics -placement - -source $::env(SCRIPTS_DIR)/report_metrics.tcl -report_metrics "global place" false - -if {![info exists save_checkpoint] || $save_checkpoint} { - write_db $::env(RESULTS_DIR)/3_1_place_gp.odb -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place_skip_io.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place_skip_io.tcl deleted file mode 100644 index 25182a451..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_place_skip_io.tcl +++ /dev/null @@ -1,34 +0,0 @@ -source $::env(SCRIPTS_DIR)/load.tcl -load_design 2_floorplan.odb 2_floorplan.sdc "Starting global placement" - -if {[info exists ::env(HAS_IO_CONSTRAINTS)] && $::env(HAS_IO_CONSTRAINTS) != 0} { - puts "Has top down IO Constraints. Skip global placement without IOs" -} else { -# check the lower boundary of the PLACE_DENSITY and add PLACE_DENSITY_LB_ADDON if it exists - if {[info exist ::env(PLACE_DENSITY_LB_ADDON)]} { - set place_density_lb [gpl::get_global_placement_uniform_density \ - -pad_left $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ - -pad_right $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT)] - set place_density [expr $place_density_lb + $::env(PLACE_DENSITY_LB_ADDON) + 0.01] - if {$place_density > 1.0} { - set place_density 1.0 - } - } else { - set place_density $::env(PLACE_DENSITY) - } - - if { 0 != [llength [array get ::env GLOBAL_PLACEMENT_ARGS]] } { - global_placement -skip_io -density $place_density \ - -pad_left $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ - -pad_right $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ - $::env(GLOBAL_PLACEMENT_ARGS) - } else { - global_placement -skip_io -density $place_density \ - -pad_left $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ - -pad_right $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) - } -} - -if {![info exists save_checkpoint] || $save_checkpoint} { - write_db $::env(RESULTS_DIR)/3_1_place_gp_skip_io.odb -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_route.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_route.tcl deleted file mode 100644 index 528f12f66..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/global_route.tcl +++ /dev/null @@ -1,37 +0,0 @@ -utl::set_metrics_stage "globalroute__{}" -source $::env(SCRIPTS_DIR)/load.tcl -load_design 4_cts.odb 4_cts.sdc "Starting global routing" - -if {[info exist env(PRE_GLOBAL_ROUTE)]} { - source $env(PRE_GLOBAL_ROUTE) -} - -if {[info exist env(FASTROUTE_TCL)]} { - source $env(FASTROUTE_TCL) -} else { - set_global_routing_layer_adjustment $env(MIN_ROUTING_LAYER)-$env(MAX_ROUTING_LAYER) 0.5 - set_routing_layers -signal $env(MIN_ROUTING_LAYER)-$env(MAX_ROUTING_LAYER) - set_macro_extension 2 -} - -global_route -guide_file $env(RESULTS_DIR)/route.guide \ - -congestion_iterations 100 \ - -verbose - -set_propagated_clock [all_clocks] -estimate_parasitics -global_routing - -source $env(SCRIPTS_DIR)/report_metrics.tcl -report_metrics "global route" - -puts "\n==========================================================================" -puts "check_antennas" -puts "--------------------------------------------------------------------------" -check_antennas -report_file $env(REPORTS_DIR)/antenna.log -report_violating_nets - -# Write SDC to results with updated clock periods that are just failing. -# Use make target update_sdc_clock to install the updated sdc. -source [file join $env(SCRIPTS_DIR) "write_ref_sdc.tcl"] -if {![info exists save_checkpoint] || $save_checkpoint} { - write_db $env(RESULTS_DIR)/5_1_grt.odb -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/gui.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/gui.tcl deleted file mode 100644 index e236763b2..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/gui.tcl +++ /dev/null @@ -1,12 +0,0 @@ -if {![info exists standalone] || $standalone} { - # Read lef - read_lef $::env(TECH_LEF) - read_lef $::env(SC_LEF) - if {[info exist ::env(ADDITIONAL_LEFS)]} { - foreach lef $::env(ADDITIONAL_LEFS) { - read_lef $lef - } - } - - read_def $::env(RESULTS_DIR)/6_final.def -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement.tcl deleted file mode 100644 index 579fa4825..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement.tcl +++ /dev/null @@ -1,13 +0,0 @@ -source $::env(SCRIPTS_DIR)/load.tcl -load_design 3_1_place_gp_skip_io.odb 2_floorplan.sdc "Starting io placement" - -if {[info exists ::env(IO_CONSTRAINTS)]} { - source $::env(IO_CONSTRAINTS) -} -place_pins -hor_layer $::env(IO_PLACER_H) \ - -ver_layer $::env(IO_PLACER_V) \ - {*}$::env(PLACE_PINS_ARGS) - -if {![info exists save_checkpoint] || $save_checkpoint} { - write_db $::env(RESULTS_DIR)/3_2_place_iop.odb -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement_random.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement_random.tcl deleted file mode 100644 index 48db240be..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/io_placement_random.tcl +++ /dev/null @@ -1,14 +0,0 @@ -source $::env(SCRIPTS_DIR)/load.tcl -load_design 2_1_floorplan.odb 1_synth.sdc "Starting random IO placement" - -if {[info exists ::env(IO_CONSTRAINTS)]} { - source $::env(IO_CONSTRAINTS) -} -place_pins -hor_layer $::env(IO_PLACER_H) \ - -ver_layer $::env(IO_PLACER_V) \ - -random \ - {*}$::env(PLACE_PINS_ARGS) - -if {![info exists save_checkpoint] || $save_checkpoint} { - write_db $::env(RESULTS_DIR)/2_2_floorplan_io.odb -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/klayout.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/klayout.tcl deleted file mode 100644 index 4741ae8e2..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/klayout.tcl +++ /dev/null @@ -1,20 +0,0 @@ -if {[info exists ::env(FILL_CONFIG)]} { - set fill_config $::env(FILL_CONFIG) -} else { - set fill_config "" -} - -if {[info exists ::env(SEAL_GDS)]} { - set seal_gds $::env(SEAL_GDS) -} else { - set seal_gds "" -} - -exec klayout -zz -rd design_name=$::env(DESIGN_NAME) \ - -rd in_def=$::env(RESULTS_DIR)/6_final.def \ - -rd in_gds="$::env(GDS_FILES)" \ - -rd config_file=$fill_config \ - -rd seal_gds=$seal_gds \ - -rd out_gds=$::env(RESULTS_DIR)/6_1_merged.gds \ - -rd tech_file=$::env(OBJECTS_DIR)/klayout.lyt \ - -rm $::env(UTILS_DIR)/def2gds.py diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/load.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/load.tcl deleted file mode 100644 index 1fe5d3836..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/load.tcl +++ /dev/null @@ -1,35 +0,0 @@ -proc load_design {design_file sdc_file msg} { - if {![info exists standalone] || $standalone} { - # Read liberty files - source $::env(SCRIPTS_DIR)/read_liberty.tcl - - # Read design files - set ext [file extension $design_file] - if {$ext == ".v"} { - read_lef $::env(TECH_LEF) - read_lef $::env(SC_LEF) - if {[info exist ::env(ADDITIONAL_LEFS)]} { - foreach lef $::env(ADDITIONAL_LEFS) { - read_lef $lef - } - } - read_verilog $::env(RESULTS_DIR)/$design_file - link_design $::env(DESIGN_NAME) - } elseif {$ext == ".odb"} { - read_db $::env(RESULTS_DIR)/$design_file - } else { - error "Unrecognized input file $design_file" - } - - # Read SDC file - read_sdc $::env(RESULTS_DIR)/$sdc_file - - if [file exists $::env(PLATFORM_DIR)/derate.tcl] { - source $::env(PLATFORM_DIR)/derate.tcl - } - - source $::env(PLATFORM_DIR)/setRC.tcl - } else { - puts $msg - } -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/macro_place.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/macro_place.tcl deleted file mode 100644 index 29f532c99..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/macro_place.tcl +++ /dev/null @@ -1,134 +0,0 @@ -source $::env(SCRIPTS_DIR)/load.tcl -load_design 2_3_floorplan_tdms.odb 1_synth.sdc "Starting macro placement" - -proc find_macros {} { - set macros "" - - set db [ord::get_db] - set block [[$db getChip] getBlock] - foreach inst [$block getInsts] { - set inst_master [$inst getMaster] - - # BLOCK means MACRO cells - if { [string match [$inst_master getType] "BLOCK"] } { - append macros " " $inst - } - } - return $macros -} - -if {[find_macros] != ""} { -# If wrappers defined replace macros with their wrapped version -# # ---------------------------------------------------------------------------- - if {[info exists ::env(MACRO_WRAPPERS)]} { - source $::env(MACRO_WRAPPERS) - - set wrapped_macros [dict keys [dict get $wrapper around]] - set db [ord::get_db] - set block [ord::get_db_block] - - foreach inst [$block getInsts] { - if {[lsearch -exact $wrapped_macros [[$inst getMaster] getName]] > -1} { - set new_master [dict get $wrapper around [[$inst getMaster] getName]] - puts "Replacing [[$inst getMaster] getName] with $new_master for [$inst getName]" - $inst swapMaster [$db findMaster $new_master] - } - } - } - - lassign $::env(MACRO_PLACE_HALO) halo_x halo_y - lassign $::env(MACRO_PLACE_CHANNEL) channel_x channel_y - set halo_max [expr max($halo_x, $halo_y)] - set channel_max [expr max($channel_x, $channel_y)] - set blockage_width [expr max($halo_max, $channel_max/2)] - - - if {[info exists ::env(MACRO_BLOCKAGE_HALO)]} { - set blockage_width $::env(MACRO_BLOCKAGE_HALO) - } - - if {[info exists ::env(RTLMP_FLOW)]} { - puts "RTLMP Flow enabled..." - set additional_partition_args "" - if { [info exists ::env(RTLMP_MAX_INST)]} { - append additional_partition_args " -max_num_inst $env(RTLMP_MAX_INST)" - } - if { [info exists ::env(RTLMP_MIN_INST)]} { - append additional_partition_args " -min_num_inst $env(RTLMP_MIN_INST)" - } - if { [info exists ::env(RTLMP_MAX_MACRO)]} { - append additional_partition_args " -max_num_macro $env(RTLMP_MAX_MACRO)" - } - if { [info exists ::env(RTLMP_MIN_MACRO)]} { - append additional_partition_args " -min_num_macro $env(RTLMP_MIN_MACRO)" - } - - set additional_rtlmp_args "" - - append additional_rtlmp_args " -macro_halo $halo_max" - - if { [info exists ::env(RTLMP_AREA_WT)]} { - append additional_rtlmp_args " -area_weight $env(RTLMP_AREA_WT)" - } - if { [info exists ::env(RTLMP_WIRELENGTH_WT)]} { - append additional_rtlmp_args " -wirelength_weight $env(RTLMP_WIRELENGTH_WT)" - } - if { [info exists ::env(RTLMP_OUTLINE_WT)]} { - append additional_rtlmp_args " -outline_weight $env(RTLMP_OUTLINE_WT)" - } - if { [info exists ::env(RTLMP_BOUNDARY_WT)]} { - append additional_rtlmp_args " -boundary_weight $env(RTLMP_BOUNDARY_WT)" - } - if { [info exists ::env(RTLMP_MACRO_BLOCKAGE_WT)]} { - append additional_rtlmp_args " -macro_blockage_weight $env(RTLMP_MACRO_BLOCKAGE_WT)" - } - if { [info exists ::env(RTLMP_LOCATION_WEIGHT)]} { - append additional_rtlmp_args " -location_weight $env(RTLMP_LOCATION_WEIGHT)" - } - if { [info exists ::env(RTLMP_NOTCH_WT)]} { - append additional_rtlmp_args " -notch_weight $env(RTLMP_NOTCH_WT)" - } - if { [info exists ::env(RTLMP_CONFIG_FILE)]} { - append additional_rtlmp_args " -config_file $env(RTLMP_CONFIG_FILE)" - } - if { [info exists ::env(RTLMP_RPT_FILE)]} { - append additional_rtlmp_args " -report_file $env(RTLMP_RPT_FILE)" - } - if { [info exists ::env(RTLMP_BLOCKAGE_FILE)]} { - append additional_rtlmp_args " -macro_blockage_file $env(RTLMP_BLOCKAGE_FILE)" - } - - partition_design -net_threshold 5 \ - -virtual_weight 1 \ - -num_hop 3 \ - -timing_weight 1 \ - -report_directory $env(RTLMP_RPT_DIR) \ - -report_file $env(RTLMP_RPT_FILE) \ - {*}$additional_partition_args - - rtl_macro_placer -report_directory $env(RTLMP_RPT_DIR) \ - {*}$additional_rtlmp_args - - puts "Delete buffers for RTLMP flow..." - remove_buffers - } else { - if {[info exists ::env(MACRO_PLACEMENT)]} { - source $::env(SCRIPTS_DIR)/read_macro_placement.tcl - puts "\[INFO\]\[FLOW-xxxx\] Using manual macro placement file $::env(MACRO_PLACEMENT)" - read_macro_placement $::env(MACRO_PLACEMENT) - } else { - macro_placement \ - -halo $::env(MACRO_PLACE_HALO) \ - -channel $::env(MACRO_PLACE_CHANNEL) - } - } - - source $::env(SCRIPTS_DIR)/placement_blockages.tcl - block_channels $blockage_width -} else { - puts "No macros found: Skipping macro_placement" -} - -if {![info exists save_checkpoint] || $save_checkpoint} { - write_db $::env(RESULTS_DIR)/2_4_floorplan_macro.odb -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/odb_to_def.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/odb_to_def.tcl deleted file mode 100644 index 8fb761993..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/odb_to_def.tcl +++ /dev/null @@ -1,5 +0,0 @@ -source $::env(SCRIPTS_DIR)/load.tcl -load_design 2_6_floorplan_pdn.odb 2_floorplan.sdc "Starting file transposition" - -write_def $::env(RESULTS_DIR)/2_floorplan.def -puts "DEF file written to $::env(RESULTS_DIR)" diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/README.md b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/README.md deleted file mode 100644 index 1d6cde22a..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/README.md +++ /dev/null @@ -1,13 +0,0 @@ -Scripts not in OpenROAD-flow-scripts, created for use within the OpenROAD flow in OpenFASOC. - -### Scripts part of the flow: - -- `add_ndr_rules.tcl`: adds NDR rules before global route -- `create_custom_connections.tcl`: connects instances to specified net before global route -- `pre_global_route.tcl`: script called before global route in OpenROAD (PRE_GLOBAL_ROUTE env var) -- `read_domain_instances.tcl`: adds instances to voltage domain after floorplan -- `create_routable_power_net.tcl`: creates the r_VIN net in the design, allowing for multi-voltage domain routes - -### Custom scripts: - --`custom_place.tcl`: procedures for placing cells arbitrarily diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/add_ndr_rules.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/add_ndr_rules.tcl deleted file mode 100644 index ddd8c0669..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/add_ndr_rules.tcl +++ /dev/null @@ -1,11 +0,0 @@ -set block [ord::get_db_block] - -# Add 2W, 2S rule to ring oscillator input -create_ndr -name NDR_5W_5S \ - -spacing { *5 } \ - -width { *5 } - -set ndr [$block findNonDefaultRule NDR_5W_5S] -$ndr setHardSpacing 1 - -assign_ndr -ndr NDR_5W_5S -net r_VIN diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_custom_connections.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_custom_connections.tcl deleted file mode 100644 index a60abd99c..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_custom_connections.tcl +++ /dev/null @@ -1,27 +0,0 @@ -proc create_custom_connections {file_name} { - set block [ord::get_db_block] - set units [$block getDefUnits] - - set ch [open $file_name] - - set line [gets $ch] - set net [$block findNet [lindex $line 0]] - - while {![eof $ch]} { - set line [gets $ch] - if {[llength $line] == 0} {break} - - set inst [$block findInst [lindex $line 0]] - set iterm [$inst findITerm [lindex $line 1]] - - if {[ catch {odb::dbITerm_connect $iterm $net} ]} { - puts "Cannot create custom connection on: " - puts "instance name: [$inst getName]" - puts "MTerm name: [[$iterm getMTerm] getName]" - } - - } - - close $ch - -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_routable_power_net.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_routable_power_net.tcl deleted file mode 100644 index 3ae91030a..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/create_routable_power_net.tcl +++ /dev/null @@ -1,94 +0,0 @@ -# Create routable net from power net -# -# This procedure creates a net that will allow routing from instances that -# should connect to a power net other than the grid they're placed in. -# -# For example, in the temp-sense-gen this net allows routing from the HEADER -# cells to the VIN power ring, because connections to the regular VIN net -# aren't routed since it's a power net with a stdcell grid attached. -# -# Arguments: -# - source_net_name: name of the original power net -# - num_connection_points: number of connection points routed in the ring (optional) - -proc create_routable_power_net {source_net_name {num_connection_points 1}} { - set block [ord::get_db_block] - set tech [ord::get_db_tech] - - # Get objects from source net - set net [$block findNet $source_net_name] - set bterm [$net getBTerms] - set bpin [$bterm getBPins] - - # Create routable net in the database - set r_pin "r_$source_net_name" - set r_net [odb::dbNet_create $block $r_pin] - - if {$num_connection_points == 1} { - # Create block terminal for routable net - set r_bterm [odb::dbBTerm_create $r_net $r_pin] - set r_bpin [odb::dbBPin_create $r_bterm] - $r_bpin setPlacementStatus "FIRM" - - # Set to r_VIN the same physical box as that of VIN (its ring) - foreach box [$bpin getBoxes] { - set layer [$box getTechLayer] ;# get metal layer - odb::dbBox_create $r_bpin $layer [$box xMin] [$box yMin] \ - [$box xMax] [$box yMax] ;# create physical box for net - } - } elseif {$num_connection_points > 1} { - # Create num_connection_points block terminals - for {set n 0} {$n < $num_connection_points} {incr n} { - set r_bterm($n) [odb::dbBTerm_create $r_net "$r_pin\($n\)"] - set r_bpin($n) [odb::dbBPin_create $r_bterm($n)] - $r_bpin($n) setPlacementStatus "FIRM" - - # Split the source net's physical box into num_connection_points parts - # and assign each part to a block terminal - foreach box [$bpin getBoxes] { - set layer [$box getTechLayer] ;# get metal layer - - # Get direction to divide physical box (horizontally or vertically) - set first_box [lindex [$bpin getBoxes] 0] - set direction [$first_box getDir] - - if {$direction == 1} { - # Divide net box horizontally - # Careful: the resulting coordinates must stick to the manufacturing grid - # hence the r2grid procedure (defined below) - set dx [r2grid [expr {([$box xMax] - [$box xMin])/$num_connection_points}] $tech] - set xMin($n) [expr {[$box xMin] + $n*$dx}] - set xMax($n) [expr {$xMin($n) + $dx}] - - odb::dbBox_create $r_bpin($n) $layer $xMin($n) [$box yMin] \ - $xMax($n) [$box yMax] ;# create physical box for net - - } elseif {$direction == 0} { - # Divide net box vertically - # Careful: the resulting coordinates must stick to the manufacturing grid - # hence the r2grid procedure (defined below) - set dy [r2grid [expr {([$box yMax] - [$box yMin])/$num_connection_points}] $tech] - set yMin($n) [expr {[$box yMin] + $n*$dy}] - set yMax($n) [expr {$yMin($n) + $dy}] - - odb::dbBox_create $r_bpin($n) $layer [$box xMin] $yMin($n) \ - [$box xMax] $yMax($n) ;# create physical box for net - - } else { - puts "WARNING: Could not determine power net pins orientation. \ - Failed to create routable power net." - } - } - } - } - - -} - -proc r2grid {number db_tech} { - # This will round "number" to a value that respects the manufacturing grid - # For example, if the manufacturing grid is 5 microns and number = 20333, - # the procedure will output 20335. - set grid [$db_tech getManufacturingGrid] - return [expr {round($number / double($grid)) * $grid}] -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/custom_place.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/custom_place.tcl deleted file mode 100644 index f508ae98c..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/custom_place.tcl +++ /dev/null @@ -1,37 +0,0 @@ -# Template procedure which will place cells in the large voltage domain off east -# with name "cell_name" semi-stacked starting from row "row_num" (0 indexed) -# No error checking is used, so you must ensure the target row and block object are correct -# -# The "isfixed" argument indicates whether the instances should be placed as FIRM -# (won't move in detailed_placement) or as PLACED (moves slightly in detailed_placement -# to avoid DRC errors). -# -# Example of usage (after global_placement but before detailed_placement): -# -# source $::env(SCRIPTS_DIR)/openfasoc/custom_place.tcl -# set block [ord::get_db_block] -# customPlace_east $block "HEADER" 10 no - -proc customPlace_east {block_object cell_name row_num isfixed} { - set target_row [lindex [$block_object getRows] $row_num] - set y_initial_row [expr {[lindex [$target_row getOrigin] 1] / 1000.0}] - set row_ydim [expr {[[$target_row getSite] getHeight] / 1000.0}] - set status [expr {$isfixed ? "FIRM" : "PLACED"}] - - foreach inst [$block_object getInsts] { - if {[[$inst getMaster] getName] == $cell_name} { - set row_orient [$target_row getOrient] - if {$row_orient eq "R0"} { - # if row orientation is R0 (VDD above row, GND below) - place_cell -cell $cell_name -inst_name [$inst getName] -origin [list 82.8 $y_initial_row] -orient R0 -status $status - } elseif {$row_orient eq "MX"} { - # if row orientation is MX (VDD below row, GND above) - place_cell -cell $cell_name -inst_name [$inst getName] -origin [list 82.8 [expr $y_initial_row + $row_ydim]] -orient MX -status $status - } - - incr row_num - set target_row [lindex [$block_object getRows] $row_num] - set y_initial_row [expr {[lindex [$target_row getOrigin] 1] / 1000.0}] - } - } -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/pre_global_route.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/pre_global_route.tcl deleted file mode 100644 index 729a105bb..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/pre_global_route.tcl +++ /dev/null @@ -1,12 +0,0 @@ -# Create r_VIN net -source $::env(SCRIPTS_DIR)/openfasoc/create_routable_power_net.tcl -create_routable_power_net "VIN" $::env(VIN_ROUTE_CONNECTION_POINTS) - -# NDR rules -source $::env(SCRIPTS_DIR)/openfasoc/add_ndr_rules.tcl - -# Custom connections -source $::env(SCRIPTS_DIR)/openfasoc/create_custom_connections.tcl -if {[info exist ::env(CUSTOM_CONNECTION)]} { - create_custom_connections $::env(CUSTOM_CONNECTION) -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/read_domain_instances.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/read_domain_instances.tcl deleted file mode 100644 index 46ce2179f..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/openfasoc/read_domain_instances.tcl +++ /dev/null @@ -1,21 +0,0 @@ -proc read_domain_instances {voltage_domain_name instances_list} { - set block [ord::get_db_block] - set units [$block getDefUnits] - - set ch [open $instances_list] - - set domain_region [$block findRegion $voltage_domain_name] - foreach group [$domain_region getGroups] { - if {[string equal [$group getName] $voltage_domain_name]} { set domain_group $group } - } - - while {![eof $ch]} { - set line [gets $ch] - if {[llength $line] == 0} {continue} - - set inst_name [lindex $line 0] - $domain_group addInst [$block findInst $inst_name] - } - - close $ch -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/pdn.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/pdn.tcl deleted file mode 100644 index c320e1e22..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/pdn.tcl +++ /dev/null @@ -1,35 +0,0 @@ -source $::env(SCRIPTS_DIR)/load.tcl -load_design 2_5_floorplan_tapcell.odb 1_synth.sdc "Starting PDN generation" - -if {[info exist ::env(PDN_TCL)]} { - source $::env(PDN_TCL) - pdngen -} elseif {[info exist ::env(PDN_CFG)]} { - convert_pdn_config $::env(PDN_CFG) - pdngen -} - -if { [info exists ::env(POST_PDN_TCL)] && [file exists $::env(POST_PDN_TCL)] } { - source $::env(POST_PDN_TCL) -} - -# Check all supply nets -set block [ord::get_db_block] -foreach net [$block getNets] { - set type [$net getSigType] - if {$type == "POWER" || $type == "GROUND"} { - #puts [[$net getBTerms] getName] - #puts [[[$net getBTerms] getBPins] getName] -# Temporarily disable due to CI issues -# puts "Check supply: [$net getName]" -# check_power_grid -net [$net getName] - } -} - -if {![info exists save_checkpoint] || $save_checkpoint} { - if {[info exists ::env(GALLERY_REPORT)] && $::env(GALLERY_REPORT) != 0} { - write_def $::env(RESULTS_DIR)/2_floorplan.def - } - - write_db $::env(RESULTS_DIR)/2_6_floorplan_pdn.odb -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/placement_blockages.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/placement_blockages.tcl deleted file mode 100644 index 22d5caef9..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/placement_blockages.tcl +++ /dev/null @@ -1,45 +0,0 @@ -proc block_channels {channel_width_in_microns} { - set tech [ord::get_db_tech] - set units [$tech getDbUnitsPerMicron] - set block [ord::get_db_block] - - # - # Collect up all the macros - # - set shapes {} - foreach inst [$block getInsts] { - if {[[$inst getMaster] getType] == "BLOCK"} { - set box [$inst getBBox] - lappend shapes [odb::newSetFromRect [$box xMin] [$box yMin] [$box xMax] [$box yMax]] - } - } - - # - # Resize to fill the channels and edge gap - # - set resize_by [expr round($channel_width_in_microns * $units)] - set shapeSet [odb::orSets $shapes] - set shapeSet [odb::bloatSet $shapeSet $resize_by] - - # - # Clip result to the core area - # - set core [$block getCoreArea] - set xl [$core xMin] - set yl [$core yMin] - set xh [$core xMax] - set yh [$core yMax] - set core_rect [odb::newSetFromRect $xl $yl $xh $yh] - set shapeSet [odb::andSet $shapeSet $core_rect] - - - # - # Output the blockages - # - set rects [odb::getRectangles $shapeSet] - foreach rect $rects { - set b [odb::dbBlockage_create $block \ - [$rect xMin] [$rect yMin] [$rect xMax] [$rect yMax]] - $b setSoft - } -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_domain_instances.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_domain_instances.tcl deleted file mode 100644 index 6760f7ffd..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_domain_instances.tcl +++ /dev/null @@ -1,18 +0,0 @@ -proc read_domain_instances {voltage_domain_name instances_list} { - set block [ord::get_db_block] - set units [$block getDefUnits] - - set ch [open $instances_list] - - set domain_region [$block findRegion $voltage_domain_name] - - while {![eof $ch]} { - set line [gets $ch] - if {[llength $line] == 0} {continue} - - set inst_name [lindex $line 0] - $domain_region addInst [$block findInst $inst_name] - } - - close $ch -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_liberty.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_liberty.tcl deleted file mode 100644 index ed8022ac5..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_liberty.tcl +++ /dev/null @@ -1,17 +0,0 @@ -if {[info exists ::env(CORNERS)]} { - # corners - define_corners {*}$::env(CORNERS) - foreach corner $::env(CORNERS) { - set LIBKEY "LIB_FILES_[string toupper $corner]" - foreach libFile $::env($LIBKEY) { - read_liberty -corner $corner $libFile - } - unset LIBKEY - } - unset corner -} else { - ## no corner - foreach libFile $::env(LIB_FILES) { - read_liberty $libFile - } -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_macro_placement.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_macro_placement.tcl deleted file mode 100644 index 68c08231a..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/read_macro_placement.tcl +++ /dev/null @@ -1,26 +0,0 @@ -proc read_macro_placement {macro_placement_file} { - set block [ord::get_db_block] - set units [$block getDefUnits] - - set ch [open $macro_placement_file] - - while {![eof $ch]} { - set line [gets $ch] - if {[llength $line] == 0} {continue} - - set inst_name [lindex $line 0] - set orientation [lindex $line 1] - set x [expr round([lindex $line 2] * $units)] - set y [expr round([lindex $line 3] * $units)] - - if {[set inst [$block findInst $inst_name]] == "NULL"} { - error "Cannot find instance $inst_name" - } - - $inst setOrient $orientation - $inst setOrigin $x $y - $inst setPlacementStatus FIRM - } - - close $ch -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/report_metrics.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/report_metrics.tcl deleted file mode 100644 index 104f77f18..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/report_metrics.tcl +++ /dev/null @@ -1,166 +0,0 @@ -proc report_metrics { when {include_erc true} } { - puts "\n==========================================================================" - puts "$when report_tns" - puts "--------------------------------------------------------------------------" - report_tns - report_tns_metric - - puts "\n==========================================================================" - puts "$when report_wns" - puts "--------------------------------------------------------------------------" - report_wns - - puts "\n==========================================================================" - puts "$when report_worst_slack" - puts "--------------------------------------------------------------------------" - report_worst_slack - report_worst_slack_metric - - puts "\n==========================================================================" - puts "$when report_clock_skew" - puts "--------------------------------------------------------------------------" - report_clock_skew - - puts "\n==========================================================================" - puts "$when report_checks -path_delay min" - puts "--------------------------------------------------------------------------" - report_checks -path_delay min -fields {slew cap input nets fanout} -format full_clock_expanded - - puts "\n==========================================================================" - puts "$when report_checks -path_delay max" - puts "--------------------------------------------------------------------------" - report_checks -path_delay max -fields {slew cap input nets fanout} -format full_clock_expanded - - puts "\n==========================================================================" - puts "$when report_checks -unconstrained" - puts "--------------------------------------------------------------------------" - report_checks -unconstrained -fields {slew cap input nets fanout} -format full_clock_expanded - - if {$include_erc} { - puts "\n==========================================================================" - puts "$when report_check_types -max_slew -max_cap -max_fanout -violators" - puts "--------------------------------------------------------------------------" - report_check_types -max_slew -max_capacitance -max_fanout -violators - report_erc_metrics - - puts "\n==========================================================================" - puts "$when max_slew_check_slack" - puts "--------------------------------------------------------------------------" - puts "[sta::max_slew_check_slack]" - - puts "\n==========================================================================" - puts "$when max_slew_check_limit" - puts "--------------------------------------------------------------------------" - puts "[sta::max_slew_check_limit]" - - if {[sta::max_slew_check_limit] < 1e30} { - puts "\n==========================================================================" - puts "$when max_slew_check_slack_limit" - puts "--------------------------------------------------------------------------" - puts [format "%.4f" [sta::max_slew_check_slack_limit]] - } - - puts "\n==========================================================================" - puts "$when max_fanout_check_slack" - puts "--------------------------------------------------------------------------" - puts "[sta::max_fanout_check_slack]" - - puts "\n==========================================================================" - puts "$when max_fanout_check_limit" - puts "--------------------------------------------------------------------------" - puts "[sta::max_fanout_check_limit]" - - if {[sta::max_fanout_check_limit] < 1e30} { - puts "\n==========================================================================" - puts "$when max_fanout_check_slack_limit" - puts "--------------------------------------------------------------------------" - puts [format "%.4f" [sta::max_fanout_check_slack_limit]] - } - - puts "\n==========================================================================" - puts "$when max_capacitance_check_slack" - puts "--------------------------------------------------------------------------" - puts "[sta::max_capacitance_check_slack]" - - puts "\n==========================================================================" - puts "$when max_capacitance_check_limit" - puts "--------------------------------------------------------------------------" - puts "[sta::max_capacitance_check_limit]" - - if {[sta::max_capacitance_check_limit] < 1e30} { - puts "\n==========================================================================" - puts "$when max_capacitance_check_slack_limit" - puts "--------------------------------------------------------------------------" - puts [format "%.4f" [sta::max_capacitance_check_slack_limit]] - } - - puts "\n==========================================================================" - puts "$when max_slew_violation_count" - puts "--------------------------------------------------------------------------" - puts "max slew violation count [sta::max_slew_violation_count]" - - puts "\n==========================================================================" - puts "$when max_fanout_violation_count" - puts "--------------------------------------------------------------------------" - puts "max fanout violation count [sta::max_fanout_violation_count]" - - puts "\n==========================================================================" - puts "$when max_cap_violation_count" - puts "--------------------------------------------------------------------------" - puts "max cap violation count [sta::max_capacitance_violation_count]" - - puts "\n==========================================================================" - puts "$when setup_violation_count" - puts "--------------------------------------------------------------------------" - puts "setup violation count [llength [find_timing_paths -path_delay min -slack_max 0]]" - - puts "\n==========================================================================" - puts "$when hold_violation_count" - puts "--------------------------------------------------------------------------" - puts "hold violation count [llength [find_timing_paths -path_delay max -slack_max 0]]" - - set critical_path [lindex [find_timing_paths -sort_by_slack] 0] - if {$critical_path != ""} { - set path_delay [sta::format_time [[$critical_path path] arrival] 4] - set path_slack [sta::format_time [[$critical_path path] slack] 4] - } else { - set path_delay -1 - set path_slack 0 - } - puts "\n==========================================================================" - puts "$when critical path delay" - puts "--------------------------------------------------------------------------" - puts "$path_delay" - - puts "\n==========================================================================" - puts "$when critical path slack" - puts "--------------------------------------------------------------------------" - puts "$path_slack" - - puts "\n==========================================================================" - puts "$when slack div critical path delay" - puts "--------------------------------------------------------------------------" - puts "[format "%4f" [expr $path_slack / $path_delay * 100]]" - } - - puts "\n==========================================================================" - puts "$when report_power" - puts "--------------------------------------------------------------------------" - if {[info exists ::env(CORNERS)]} { - foreach corner $::env(CORNERS) { - puts "Corner: $corner" - report_power -corner $corner - } - unset corner - } else { - report_power - } - - puts "\n==========================================================================" - puts "$when report_design_area" - puts "--------------------------------------------------------------------------" - report_design_area - report_design_area_metrics - - puts "" -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/run_all.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/run_all.tcl deleted file mode 100644 index 3f24c69f3..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/run_all.tcl +++ /dev/null @@ -1,66 +0,0 @@ -# Performs RTL-to-GDS in a single script -# No checkpointing is performed - -set standalone 0 - -# Synthesis -source -verbose $::env(SCRIPTS_DIR)/yosys.tcl - -# Read process / design -# Read lef -read_lef $::env(TECH_LEF) -read_lef $::env(SC_LEF) -if {[info exist ::env(ADDITIONAL_LEFS)]} { - foreach lef $::env(ADDITIONAL_LEFS) { - read_lef $lef - } -} - -# Read liberty files -foreach libFile $::env(LIB_FILES) { - read_liberty $libFile -} - -read_verilog $::env(RESULTS_DIR)/1_1_yosys.v -link_design $::env(DESIGN_NAME) -read_sdc $::env(SDC_FILE) -if [file exists $::env(PLATFORM_DIR)/derate.tcl] { - source $::env(PLATFORM_DIR)/derate.tcl -} - -if [file exists $::env(PLATFORM_DIR)/setRC.tcl] { - source $::env(PLATFORM_DIR)/setRC.tcl -} - -# Floorplan -source -verbose $::env(SCRIPTS_DIR)/floorplan.tcl -source -verbose $::env(SCRIPTS_DIR)/io_placement_random.tcl -source -verbose $::env(SCRIPTS_DIR)/tdms_place.tcl -source -verbose $::env(SCRIPTS_DIR)/macro_place.tcl -source -verbose $::env(SCRIPTS_DIR)/tapcell.tcl -source -verbose $::env(SCRIPTS_DIR)/pdn.tcl - -# Place -source -verbose $::env(SCRIPTS_DIR)/global_place.tcl -source -verbose $::env(SCRIPTS_DIR)/io_placement.tcl -source -verbose $::env(SCRIPTS_DIR)/resize.tcl -source -verbose $::env(SCRIPTS_DIR)/detail_place.tcl - -# CTS -source -verbose $::env(SCRIPTS_DIR)/cts.tcl -source -verbose $::env(SCRIPTS_DIR)/fillcell.tcl - -# Route -source -verbose $::env(SCRIPTS_DIR)/global_route.tcl -source -verbose $::env(SCRIPTS_DIR)/detail_route.tcl - -# Finishing -if {[info exists ::env(USE_FILL)]} { - source -verbose $::env(SCRIPTS_DIR)/density_fill.tcl -} - -# Finishing -source -verbose $::env(SCRIPTS_DIR)/final_report.tcl -source -verbose $::env(SCRIPTS_DIR)/klayout.tcl - -exit diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/synth.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/synth.tcl deleted file mode 100644 index 6c1aaa5e5..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/synth.tcl +++ /dev/null @@ -1,114 +0,0 @@ -yosys -import - -if {[info exist ::env(CACHED_NETLIST)]} { - exec cp $::env(CACHED_NETLIST) $::env(RESULTS_DIR)/1_1_yosys.v - exit -} - -# Setup verilog include directories -set vIdirsArgs "" -if {[info exist ::env(VERILOG_INCLUDE_DIRS)]} { - foreach dir $::env(VERILOG_INCLUDE_DIRS) { - lappend vIdirsArgs "-I$dir" - } - set vIdirsArgs [join $vIdirsArgs] -} - - -# Read verilog files -foreach file $::env(VERILOG_FILES) { - read_verilog -defer -sv {*}$vIdirsArgs $file -} - -# Read standard cells and macros as blackbox inputs -# These libs have their dont_use properties set accordingly -read_liberty -lib {*}$::env(DONT_USE_LIBS) - -# Apply toplevel parameters (if exist) -if {[info exist ::env(VERILOG_TOP_PARAMS)]} { - dict for {key value} $::env(VERILOG_TOP_PARAMS) { - chparam -set $key $value $::env(DESIGN_NAME) - } -} - -# Read platform specific mapfile for OPENROAD_CLKGATE cells -if {[info exist ::env(CLKGATE_MAP_FILE)]} { - read_verilog -defer $::env(CLKGATE_MAP_FILE) -} - -# Generic synthesis -synth -top $::env(DESIGN_NAME) -flatten - -# Optimize the design -opt -purge - -# Technology mapping of latches -if {[info exist ::env(LATCH_MAP_FILE)]} { - techmap -map $::env(LATCH_MAP_FILE) -} - -# Technology mapping of flip-flops -# dfflibmap only supports one liberty file -dfflibmap -liberty $::env(DONT_USE_SC_LIB) -opt - -set constr [open $::env(OBJECTS_DIR)/abc.constr w] -puts $constr "set_driving_cell $::env(ABC_DRIVER_CELL)" -puts $constr "set_load $::env(ABC_LOAD_IN_FF)" -close $constr - - -set script [open $::env(OBJECTS_DIR)/abc.script w] -puts $script "strash" -puts $script "dch" -puts $script "map -B 0.9" -puts $script "topo" -puts $script "stime -c" -puts $script "buffer -c" -puts $script "upsize -c" -puts $script "dnsize -c" -close $script - - -# Technology mapping for cells -# ABC supports multiple liberty files, but the hook from Yosys to ABC doesn't -if {[info exist ::env(ABC_CLOCK_PERIOD_IN_PS)]} { - abc -D [expr $::env(ABC_CLOCK_PERIOD_IN_PS)] \ - -script $::env(OBJECTS_DIR)/abc.script \ - -liberty $::env(DONT_USE_SC_LIB) \ - -constr $::env(OBJECTS_DIR)/abc.constr -} else { - puts "\[WARN\]\[FLOW\] No clock period constraints detected in design" - abc -liberty $::env(DONT_USE_SC_LIB) \ - -constr $::env(OBJECTS_DIR)/abc.constr -} - -# Replace undef values with defined constants -setundef -zero - -# Splitting nets resolves unwanted compound assign statements in netlist (assign {..} = {..}) -splitnets - -# Remove unused cells and wires -opt_clean -purge - -# Technology mapping of constant hi- and/or lo-drivers -hilomap -singleton \ - -hicell {*}$::env(TIEHI_CELL_AND_PORT) \ - -locell {*}$::env(TIELO_CELL_AND_PORT) - -# Insert buffer cells for pass through wires -insbuf -buf {*}$::env(MIN_BUF_CELL_AND_PORTS) - -# Reports -tee -o $::env(REPORTS_DIR)/synth_check.txt check - -# Create argument list for stat -set stat_libs "" -foreach lib $::env(DONT_USE_LIBS) { - append stat_libs "-liberty $lib " -} -tee -o $::env(REPORTS_DIR)/synth_stat.txt stat {*}$stat_libs - -# Write synthesized design -write_verilog -noattr -noexpr -nohex -nodec $::env(RESULTS_DIR)/1_1_yosys.v diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tapcell.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tapcell.tcl deleted file mode 100644 index 9cab794c1..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tapcell.tcl +++ /dev/null @@ -1,10 +0,0 @@ -source $::env(SCRIPTS_DIR)/load.tcl -load_design 2_4_floorplan_macro.odb 1_synth.sdc "Starting tapcell" - -if {[info exist ::env(TAPCELL_TCL)]} { - source $::env(TAPCELL_TCL) -} - -if {![info exists save_checkpoint] || $save_checkpoint} { - write_db $::env(RESULTS_DIR)/2_5_floorplan_tapcell.odb -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tdms_place.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tdms_place.tcl deleted file mode 100644 index 22b428044..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/tdms_place.tcl +++ /dev/null @@ -1,36 +0,0 @@ -source $::env(SCRIPTS_DIR)/load.tcl -load_design 2_2_floorplan_io.odb 1_synth.sdc "Starting TDMS placement" - -proc find_macros {} { - set macros "" - - set db [::ord::get_db] - set block [[$db getChip] getBlock] - foreach inst [$block getInsts] { - set inst_master [$inst getMaster] - - # BLOCK means MACRO cells - if { [string match [$inst_master getType] "BLOCK"] } { - append macros " " $inst - } - } - return $macros -} - -set_dont_use $::env(DONT_USE_CELLS) - -if {[find_macros] != ""} { - if {[info exists ::env(RTLMP_FLOW)]} { - puts "RTLMP flow enabled. Skipping tdms place." - } else { - global_placement -density $::env(PLACE_DENSITY) \ - -pad_left $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) \ - -pad_right $::env(CELL_PAD_IN_SITES_GLOBAL_PLACEMENT) - } -} else { - puts "No macros found: Skipping global_placement" -} - -if {![info exists save_checkpoint] || $save_checkpoint} { - write_db $::env(RESULTS_DIR)/2_3_floorplan_tdms.odb -} diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/write_ref_sdc.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/write_ref_sdc.tcl deleted file mode 100644 index 0dc36c4c0..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/write_ref_sdc.tcl +++ /dev/null @@ -1,36 +0,0 @@ -# Write an SDC file with clock periods that result in slightly negative slack. - -# slack margin for updated clock as a percent of clock period -set margin 5 - -set clks [all_clocks] -if { [llength $clks] == 0 } { - utl::warn "FLW" 6 "No clocks found." -} else { - set clk [lindex $clks 0] - set clk_name [get_name $clk] - set period [get_property $clk "period"] - # Period is in sdc/liberty units. - utl::info "FLW" 7 "clock $clk_name period $period" - - if { [llength $clks] == 1 } { - set slack [sta::time_sta_ui [sta::worst_slack_cmd "max"]] - set ref_period [expr ($period - $slack) * (1.0 - $margin/100.0)] - utl::info "FLW" 8 "Clock $clk_name period [format %.3f $ref_period]" - utl::info "FLW" 9 "Clock $clk_name slack [format %.3f $slack]" - - set sources [$clk sources] - # Redefine clock with updated period. - create_clock -name $clk_name -period $ref_period $sources - # Undo the set_propagated_clock so SDC at beginning of flow uses ideal clocks. - unset_propagated_clock [all_clocks] - write_sdc [file join $env(RESULTS_DIR) "updated_clks.sdc"] - # Reset - create_clock -name $clk_name -period $period $sources - set_propagated_clock [all_clocks] - } else { - utl::warn "FLW" 10 "more than one clock found. Skipping sdc update." - } -} - -utl::info "FLW" 11 "Path endpoint count [sta::endpoint_count]" diff --git a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/yosys.tcl b/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/yosys.tcl deleted file mode 100644 index 7eec228ef..000000000 --- a/openfasoc/generators/gdsfactory-gen/lvs_flow/scripts/yosys.tcl +++ /dev/null @@ -1 +0,0 @@ -exec yosys $::env(SCRIPTS_DIR)/synth.tcl From a49096e84a75112295d5b6e1b197d1c337f51bc5 Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Sat, 20 Apr 2024 20:56:00 +0000 Subject: [PATCH 14/20] fix: cleanup folders and remove unwanted gitignores --- .gitignore | 4 +- .../gdsfactory-gen/setup_glayout_ci.py | 63 ------------------- 2 files changed, 1 insertion(+), 66 deletions(-) delete mode 100644 openfasoc/generators/gdsfactory-gen/setup_glayout_ci.py diff --git a/.gitignore b/.gitignore index 8fe2294cf..262145d5e 100644 --- a/.gitignore +++ b/.gitignore @@ -149,6 +149,4 @@ cython_debug/ *Thumbs.db # glayout -*.res/ -*.res/reports -*.res/results \ No newline at end of file +*.res/** \ No newline at end of file diff --git a/openfasoc/generators/gdsfactory-gen/setup_glayout_ci.py b/openfasoc/generators/gdsfactory-gen/setup_glayout_ci.py deleted file mode 100644 index 927a0f45d..000000000 --- a/openfasoc/generators/gdsfactory-gen/setup_glayout_ci.py +++ /dev/null @@ -1,63 +0,0 @@ -import os -import pathlib -import sys -sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', '.github', 'scripts')) -from run_glayout_drc import run_drc_wrapper -from gdsfactory.component import Component -import argparse - -from glayout.pdk.mappedpdk import MappedPDK -from glayout.pdk.sky130_mapped import sky130_mapped_pdk as sky130 -from glayout.pdk.gf180_mapped import gf180_mapped_pdk as gf180 -import glayout.primitives.fet as fet -import glayout.primitives.guardring as guardring -import glayout.primitives.mimcap as mimcap -import glayout.primitives.via_gen as via -import glayout.placement.two_transistor_place as two_transistor_place -import glayout.components.diff_pair as diff_pair -import glayout.components.opamp as opamp - -parser = argparse.ArgumentParser(description='Run DRC on components') -parser.add_argument('--pdk', required=True, type=str, help='PDK to be used (sky130, gf180)') -args = parser.parse_args(sys.argv[1:]) -if (args.pdk == 'sky130'): - pdk = sky130 -elif (args.pdk == 'gf180'): - pdk = gf180 -else: - print('Invalid PDK, continuing with sky130') - pdk = sky130 - -##### SETUP ##### - -# get path of conda executable -conda_path = pathlib.Path(sys.executable).parent -CONDA_PATH = str(conda_path) -os.environ["CONDA_PATH"] = CONDA_PATH -COMMON_VERIF_DIR = '../../common/drc-lvs-check' -os.environ["COMMON_VERIF_DIR"] = COMMON_VERIF_DIR - -# create results and reports directories -os.makedirs("../../../res/results", exist_ok=True) -os.makedirs("../../../res/reports", exist_ok=True) -results_dir = os.path.abspath("../../../res/results") -reports_dir = os.path.abspath("../../../res/reports") -os.environ["RESULTS_DIR"] = results_dir -os.environ["REPORTS_DIR"] = reports_dir - - -components = [ - ("nfet_test", fet.nmos), - ("pfet_test", fet.pmos), - ("tapring_test", guardring.tapring), - ("mimcap_test", mimcap.mimcap), - ("via_stack_test", via.via_stack, 'poly', 'met1'), - ("via_array_test", via.via_array, 'poly', 'met1', (2.0, 2.5)), - ("ttp_test", two_transistor_place.two_transistor_place, 'aba bab aba', (fet.nmos, {"pdk": pdk}), (fet.nmos, {"pdk": pdk})), - ("diff_pair_test", diff_pair.diff_pair), - ("opamp_test", opamp.opamp) -] - -run_drc_wrapper(pdk, components) - -sys.exit(0) From d2aacff7697747724ee5cd077ed78a5dd7e9c685 Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Sat, 20 Apr 2024 21:26:32 +0000 Subject: [PATCH 15/20] fix: cleanup folders and remove unwanted gitignores --- .github/workflows/glayout.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/glayout.yml b/.github/workflows/glayout.yml index 3c699a49e..07d358f14 100644 --- a/.github/workflows/glayout.yml +++ b/.github/workflows/glayout.yml @@ -38,6 +38,7 @@ jobs: mkdir -p ./res/reports &&\ mkdir -p ./res/results &&\ cp ./.github/scripts/setup_glayout_ci.py ./openfasoc/generators/gdsfactory-gen/. &&\ + rm -r ./openfasoc/common/drc-lvs-check/sky130A &&\ pip3 install -r ./openfasoc/generators/gdsfactory-gen/glayout/requirements.txt &&\ pip3 install gdsfactory==7.7.0 &&\ cd ./openfasoc/generators/gdsfactory-gen/ &&\ @@ -57,7 +58,11 @@ jobs: -w $PWD\ $IMAGE_NAME\ bash -c "\ + mkdir -p ./res &&\ + mkdir -p ./res/reports &&\ + mkdir -p ./res/results &&\ cp ./.github/scripts/setup_glayout_ci.py ./openfasoc/generators/gdsfactory-gen/. &&\ + rm -r ./openfasoc/common/drc-lvs-check/sky130A &&\ pip3 install -r ./openfasoc/generators/gdsfactory-gen/glayout/requirements.txt &&\ pip3 install gdsfactory==7.7.0 &&\ cd ./openfasoc/generators/gdsfactory-gen/ &&\ From 485345573c13ae3f8273c43f46a0edb7771263b5 Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Sat, 20 Apr 2024 21:41:11 +0000 Subject: [PATCH 16/20] fix: cleanup folders and remove unwanted gitignores --- .github/workflows/glayout.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/glayout.yml b/.github/workflows/glayout.yml index 07d358f14..701e00f3c 100644 --- a/.github/workflows/glayout.yml +++ b/.github/workflows/glayout.yml @@ -38,7 +38,6 @@ jobs: mkdir -p ./res/reports &&\ mkdir -p ./res/results &&\ cp ./.github/scripts/setup_glayout_ci.py ./openfasoc/generators/gdsfactory-gen/. &&\ - rm -r ./openfasoc/common/drc-lvs-check/sky130A &&\ pip3 install -r ./openfasoc/generators/gdsfactory-gen/glayout/requirements.txt &&\ pip3 install gdsfactory==7.7.0 &&\ cd ./openfasoc/generators/gdsfactory-gen/ &&\ @@ -62,7 +61,6 @@ jobs: mkdir -p ./res/reports &&\ mkdir -p ./res/results &&\ cp ./.github/scripts/setup_glayout_ci.py ./openfasoc/generators/gdsfactory-gen/. &&\ - rm -r ./openfasoc/common/drc-lvs-check/sky130A &&\ pip3 install -r ./openfasoc/generators/gdsfactory-gen/glayout/requirements.txt &&\ pip3 install gdsfactory==7.7.0 &&\ cd ./openfasoc/generators/gdsfactory-gen/ &&\ From e8f08cffb3065a4ca7d3a6c2989a6bde2516676d Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Sun, 21 Apr 2024 15:47:30 +0000 Subject: [PATCH 17/20] final commits --- .github/scripts/run_glayout_drc.py | 78 +++- .github/scripts/run_glayout_lvs.py | 3 +- .github/scripts/setup_glayout_ci.py | 5 +- docker/conda/Dockerfile | 1 + openfasoc/common/drc-lvs-check/.gitignore | 4 + .../common/drc-lvs-check/run_drc_g180.sh | 3 + .../sky130A/cryo_models/nshort.spice | 420 ------------------ .../sky130A/cryo_models/nshortlvth.spice | 420 ------------------ .../sky130A/cryo_models/pmos.spice | 419 ----------------- .../drc-lvs-check/sky130A/sky130A.magicrc | 74 +-- .../drc-lvs-check/sky130A/sky130A_setup.tcl | 139 +++++- 11 files changed, 233 insertions(+), 1333 deletions(-) create mode 100755 openfasoc/common/drc-lvs-check/run_drc_g180.sh delete mode 100644 openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshort.spice delete mode 100644 openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshortlvth.spice delete mode 100644 openfasoc/common/drc-lvs-check/sky130A/cryo_models/pmos.spice diff --git a/.github/scripts/run_glayout_drc.py b/.github/scripts/run_glayout_drc.py index 6eadb8ea8..6ef14c3bc 100644 --- a/.github/scripts/run_glayout_drc.py +++ b/.github/scripts/run_glayout_drc.py @@ -25,7 +25,7 @@ def place_component(comp_name: str, func: "callable[[Component], any]", pdk, *ar print(f"Error in placing {comp_name} : {e}\n exiting....") sys.exit(1) -def eval_component(comp_to_run: Component, pdk, clean: int): +def eval_component(comp_to_run: Component, pdk_str: str, clean: int): """runs DRC on the generated component passed to it and describes the errors if any. Also cleans the generated gds file @@ -35,16 +35,55 @@ def eval_component(comp_to_run: Component, pdk, clean: int): """ gds_path = f'./{comp_to_run.name}.gds' comp_to_run.write_gds(gds_path) - error_list = run_glayout_drc(comp_to_run.name, gds_path) - check_errors(error_list, comp_to_run.name, pdk) + error_list = run_glayout_drc(comp_to_run.name, gds_path, pdk_str) + check_errors(error_list, comp_to_run.name, pdk_str) # clean if clean: os.remove(gds_path) return error_list - -def run_glayout_drc(design_name: str, gds_file: str) -> list: +def setup_pdk_dir(pdk_str: str): + if pdk_str == 'sky130': + COMMON_VERIF_DIR = '../../../common/drc-lvs-check/' + os.environ["COMMON_VERIF_DIR"] = COMMON_VERIF_DIR + sky130_path = Path(str(os.getenv('COMMON_VERIF_DIR')).replace("\\", "")) / "sky130A" + pdk_root = '/usr/bin/miniconda3/share/pdk' + + if not sky130_path.exists(): + print(f"Sky130A directory not found at {sky130_path}") + os.mkdir(sky130_path) + + source_file = '/usr/bin/miniconda3/share/pdk/sky130A/libs.tech/magic/sky130A.magicrc' + shutil.copy2(source_file, sky130_path) + if os.path.exists(source_file): + print(f'successfully copied sky130A.magicrc') + + source_file = '/usr/bin/miniconda3/share/pdk/sky130A/libs.tech/netgen/sky130A_setup.tcl' + shutil.copy2(source_file, sky130_path) + if os.path.exists(source_file): + print(f'successfully copied sky130A_setup.tcl') + + elif pdk_str == 'gf180': + gf180_path = Path(str(os.getenv('COMMON_VERIF_DIR')).replace("\\", "")) / "gf180mcuC" + pdk_root = '/usr/bin/miniconda3/share/pdk' + + if not gf180_path.exists(): + print(f"gf180mcuC directory not found at {gf180_path}") + os.mkdir(gf180_path) + + source_file = '/usr/bin/miniconda3/share/pdk/gf180mcuC/libs.tech/magic/gf180mcuC.magicrc' + shutil.copy2(source_file, gf180_path) + if os.path.exists(source_file): + print(f'successfully copied gf180mcuC.magicrc') + + source_file = '/usr/bin/miniconda3/share/pdk/gf180mcuC/libs.tech/netgen/gf180mcuC_setup.tcl' + shutil.copy2(source_file, gf180_path) + if os.path.exists(source_file): + print(f'successfully copied gf180mcuC_setup.tcl') + + +def run_glayout_drc(design_name: str, gds_file: str, pdk_str: str) -> list: """sets up the magicDRC script found in the drc-lvs-check directory and runs it on the passed gds file. It then checks the output file for errors @@ -58,19 +97,13 @@ def run_glayout_drc(design_name: str, gds_file: str) -> list: """ os.environ['DESIGN_NAME'] = design_name os.rename(gds_file, '../../../res/results/6_final.gds') - sky130_path = Path(str(os.getenv('COMMON_VERIF_DIR')).replace("\\", "")) / "sky130A" - pdk_root = '/usr/bin/miniconda3/share/pdk' - - if not sky130_path.exists(): - print(f"Sky130A directory not found at {sky130_path}") - os.mkdir(sky130_path) - # source_file = os.path.join(pdk_root, 'libs.tech/magic/sky130A.magicrc') - # shutil.copy2(source_file, sky130_path) - # source_file = os.path.join(pdk_root, 'libs.tech/netgen/sky130A_setup.tcl') - # shutil.copy2(source_file, sky130_path) + setup_pdk_dir(pdk_str) - cmd = 'bash -c "../../common/drc-lvs-check/run_drc.sh"' + if pdk_str == 'sky130': + cmd = 'bash -c "../../common/drc-lvs-check/run_drc.sh"' + elif pdk_str == 'gf180': + cmd = 'bash -c "../../common/drc-lvs-check/run_drc_gf180.sh"' subproc = sp.Popen(cmd, shell=True, stdout=sp.PIPE, stderr=sp.PIPE) subproc.wait() @@ -91,7 +124,7 @@ def run_glayout_drc(design_name: str, gds_file: str) -> list: return [subproc_code, drc_report_code] -def check_errors(list_of_errors: list, comp: str, pdk): +def check_errors(list_of_errors: list, comp: str, pdk_str: str): """helper function to print the errors if any Args: @@ -99,25 +132,26 @@ def check_errors(list_of_errors: list, comp: str, pdk): comp (str): the name of the component """ if list_of_errors[0] == 1: - print(f"Error in running default {comp} for {pdk.name}") + print(f"Error in running default {comp} for {pdk_str}") sys.exit(1) elif list_of_errors[1] == 1: - warnings.warn(f"DRC returned non-zero errors for {comp} for {pdk.name}") + warnings.warn(f"DRC returned non-zero errors for {comp} for {pdk_str}") else: - print(f"DRC passed successfully for {comp} for {pdk.name}") + print(f"DRC passed successfully for {comp} for {pdk_str}") -def run_drc_wrapper(pdk, components: list): +def run_drc_wrapper(pdk, components: list, pdk_str: str): """wrapper function to run DRC on a list of components Args: pdk (MappedPDK): sky130 or gf180, the process-design-kit being used components (list): a list of components to run DRC on, contains the name of the component, the function to generate it and the arguments to be passed to the function + pdk_str (str): the PDK to be used (sky130, etc.) """ error_codes = [] for component_info in components: component_name, component_function, *args = component_info inst = place_component(component_name, component_function, pdk, *args) - error_codes.append(eval_component(inst, pdk, 1)) + error_codes.append(eval_component(inst, pdk_str, 1)) \ No newline at end of file diff --git a/.github/scripts/run_glayout_lvs.py b/.github/scripts/run_glayout_lvs.py index dc407e775..c293d8268 100644 --- a/.github/scripts/run_glayout_lvs.py +++ b/.github/scripts/run_glayout_lvs.py @@ -13,7 +13,7 @@ from glayout.primitives.fet import nmos, pmos from glayout.components.opamp import opamp -from run_glayout_drc import place_component +from run_glayout_drc import place_component, setup_pdk_dir # ########################################################################################################### # ########################################################################################################### @@ -106,6 +106,7 @@ def evaluate_report(report_fle: str) -> bool: report_path = './reports/sky130hd/glayout/6_final_lvs.rpt' makefile_script = './Makefile' +setup_pdk_dir('sky130') ## PMOS mynet, comp = get_gds_netlist('pmos_test', pmos, sky130, gds_path) diff --git a/.github/scripts/setup_glayout_ci.py b/.github/scripts/setup_glayout_ci.py index 927a0f45d..239709ddf 100644 --- a/.github/scripts/setup_glayout_ci.py +++ b/.github/scripts/setup_glayout_ci.py @@ -27,6 +27,7 @@ else: print('Invalid PDK, continuing with sky130') pdk = sky130 + args.pdk = 'sky130' ##### SETUP ##### @@ -53,11 +54,11 @@ ("mimcap_test", mimcap.mimcap), ("via_stack_test", via.via_stack, 'poly', 'met1'), ("via_array_test", via.via_array, 'poly', 'met1', (2.0, 2.5)), - ("ttp_test", two_transistor_place.two_transistor_place, 'aba bab aba', (fet.nmos, {"pdk": pdk}), (fet.nmos, {"pdk": pdk})), + ("ttp_test", two_transistor_place.two_transistor_place, 'aba bab aba', (fet.nmos, {"pdk": pdk}), (fet.pmos, {"pdk": pdk})), ("diff_pair_test", diff_pair.diff_pair), ("opamp_test", opamp.opamp) ] -run_drc_wrapper(pdk, components) +run_drc_wrapper(pdk, components, args.pdk) sys.exit(0) diff --git a/docker/conda/Dockerfile b/docker/conda/Dockerfile index 604ed4910..afb81bbb0 100755 --- a/docker/conda/Dockerfile +++ b/docker/conda/Dockerfile @@ -14,6 +14,7 @@ RUN conda update conda --all -y RUN conda install python=3.10 \ yosys \ open_pdks.sky130a \ + open_pdks.gf180mcuc \ magic \ netgen \ openroad \ diff --git a/openfasoc/common/drc-lvs-check/.gitignore b/openfasoc/common/drc-lvs-check/.gitignore index e69de29bb..735d86ea0 100644 --- a/openfasoc/common/drc-lvs-check/.gitignore +++ b/openfasoc/common/drc-lvs-check/.gitignore @@ -0,0 +1,4 @@ +gf180mcuC/** +gf180mcuC/ +sky130A/ +sky130A/** \ No newline at end of file diff --git a/openfasoc/common/drc-lvs-check/run_drc_g180.sh b/openfasoc/common/drc-lvs-check/run_drc_g180.sh new file mode 100755 index 000000000..b20d2360b --- /dev/null +++ b/openfasoc/common/drc-lvs-check/run_drc_g180.sh @@ -0,0 +1,3 @@ +# run magic +magic -rcfile $COMMON_VERIF_DIR/gf180C/gf180mcuC.magicrc -noconsole -dnull $COMMON_VERIF_DIR/magic_commands.tcl < /dev/null +# -noconsole -dnull < /dev/null diff --git a/openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshort.spice b/openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshort.spice deleted file mode 100644 index c9febdad0..000000000 --- a/openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshort.spice +++ /dev/null @@ -1,420 +0,0 @@ -* -* 4k spice models for n-channel thin oxide mosfets (std VTH). -* -* -* this scaled model was extracted by coolcad electroncis llc, -* akin akturk, akin.akturk@coolcadelectronics.com -* -* measurements used in model extraction correspond to the -* following W (um)/L (um) devices: -*'nshort; w=1.68; l=0.15; m=1'; -*'nshort; w=7.0; l=8.0; m=1'; -*'nshort; w=7.0; l=0.15; m=1'; -*'nshort; w=0.42; l=8.0; m=1'; -*'nshort; w=0.42; l=0.15; m=1'; -* -* to use the models, please set the circuit temperature -* to -269 in celcius. for standard spice, this can be done -* by adding the following line to netlist: .options temp=-269 -* -* -* -* -.MODEL nshort NMOS -+ LEVEL = 54 -+ VERSION = 4.6.5 -+ BINUNIT = 2 -+ PARAMCHK = 1 -+ MOBMOD = 1 -+ MTRLMOD = 0 -+ RDSMOD = 0 -+ IGCMOD = 0 -+ IGBMOD = 0 -+ CVCHARGEMOD = 0 -+ CAPMOD = 2 -+ RGATEMOD = 0 -+ RBODYMOD = 0 -+ TRNQSMOD = 0 -+ ACNQSMOD = 0 -+ FNOIMOD = 1 -+ TNOIMOD = 0 -+ DIOMOD = 1 -+ TEMPMOD = 0 -+ PERMOD = 1 -+ GEOMOD = 0 -+ WPEMOD = 0 -+ EPSROX = 3.9 -+ TOXE = 4.0840E-009 -+ EOT = 4.0840E-009 -+ TOXP = 4.0840E-009 -+ TOXM = 4.0840E-009 -+ DTOX = 0 -+ XJ = 1.5E-007 -+ NDEP = 1.7E+017 -+ NGATE = 1E+022 -+ NSD = 1E+020 -+ XT = 1.55E-007 -+ RSH = 0 -+ RSHG = 0.1 -+ VTH0 = 0.665 -+ WVTH0 = -0.02E-7 -+ LVTH0 = 0.22E-7 -+ PVTH0 = 0.08E-14 -+ VDDEOT = 1.5 -+ LEFFEOT = 1 -+ WEFFEOT = 10 -+ TEMPEOT = 300.1 -+ PHIN = 0 -+ EASUB = 4.05 -+ EPSRSUB = 11.7 -+ NI0SUB = 1.45E+010 -+ BG0SUB = 1.16 -+ TBGASUB = 0.000702 -+ TBGBSUB = 1108 -+ ADOS = 1 -+ BDOS = 1 -+ VFB = -1 -+ K1 = 0.4 -+ K2 = 0.01 -+ LK2 = 0.01E-6 -+ PK2 = 0.008E-13 -+ K3 = 15 -+ K3B = 0 -+ WK1 = -0.0225E-6 -+ LK1 = -0.045E-6 -+ PK1 = -0.5E-15 -+ W0 = 9.222E-007 -+ LPE0 = 1.899E-008 -+ LPEB = 6.702E-008 -+ VBM = -3 -+ DVT0 = 0.001 -+ DVT1 = 0.1135 -+ DVT2 = -2.864 -+ DVTP0 = 5.919E-009 -+ DVTP1 = 2.966 -+ DVT0W = -10.37 -+ DVT1W = 5.3E+006 -+ DVT2W = -0.032 -+ U0 = 0.25 -+ LU0 = -0.036E-6 -+ WU0 = -0.02E-6 -+ PU0 = 0.01E-12 -+ UA = -1.986E-009 -+ LUA = -5E-0117 -+ UB = 0.47E-017 -+ WUB = -2E-025 -+ LUB = -5E-025 -+ PUB = 12E-032 -+ UC = -0.07076 -+ UD = 3.228 -+ UCS = 1.67 -+ UP = 0.3928 -+ LP = 1.39E-005 -+ EU = 1.6 -+ VSAT = 1.8e+004 -+ WVSAT = -1.8E-3 -+ LVSAT = 20E-3 -+ PVSAT = 1.5e-9 -+ A0 = 2.2 -+ AGS = 1.4 -+ B0 = 0 -+ B1 = 0 -+ KETA = -0.02134 -+ A1 = 0 -+ A2 = 0.8779 -+ WINT = -3.6E-008 -+ LINT = -2.4E-008 -+ DWG = 6.974E-009 -+ LDWG = -5E-015 -+ DWB = 0 -+ VOFF = -0.1 -+ VOFFL = 15E-009 -+ MINV = -7 -+ LMINV = -15e-7 -+ NFACTOR = 2 -+ ETA0 = 2.686 -+ ETAB = -1.412 -+ DSUB = 0.6654 -+ CIT = 0 -+ CDSC = 4.441E-016 -+ CDSCB = -6.337E-006 -+ CDSCD = 0 -+ PCLM = 0.5 -+ LPCLM = 0.7E-6 -+ WPCLM = -0.1E-6 -+ PDIBLC1 = 0.001E-10 -+ PDIBLC2 = 1E-006 -+ PDIBLCB = 0 -+ DROUT = 0.56 -+ PSCBE1 = 1.5E+008 -+ PSCBE2 = 0.15E-006 -+ PVAG = 5 -+ DELTA = 0.01 -+ FPROUT = 0 -+ PDITS = 0.01 -+ PDITSL = 1.392E+006 -+ PDITSD = 1 -+ LAMBDA = 0 -+ VTL = 2E+005 -+ LC = 0 -+ XN = 4 -+ PHIG = 4.05 -+ EPSRGATE = 11.7 -+ RDSW = 0.0 -+ RDSWMIN = 5.0 -+ RDW = 100 -+ RDWMIN = 0 -+ RSW = 100 -+ RSWMIN = 0 -+ PRWG = 0.4 -+ PRWB = -0.1169 -+ WR = 8.882E-016 -+ ALPHA0 = 1E-005 -+ ALPHA1 = 0 -+ BETA0 = 15 -+ AGIDL = 1E-015 -+ BGIDL = 2.3E+009 -+ CGIDL = 0.5 -+ EGIDL = 0.8 -+ AGISL = 0 -+ BGISL = 2.3E+009 -+ CGISL = 0.5 -+ EGISL = 0.8 -+ AIGBACC = 0.43 -+ BIGBACC = 0.054 -+ CIGBACC = 0.075 -+ NIGBACC = 1 -+ AIGBINV = 0.35 -+ BIGBINV = 0.03 -+ CIGBINV = 0.006 -+ EIGBINV = 1.1 -+ NIGBINV = 3 -+ AIGC = 0.54 -+ BIGC = 0.054 -+ CIGC = 0.075 -+ AIGSD = 0.43 -+ BIGSD = 0.054 -+ CIGSD = 0.075 -+ DLCIG = 1.051E-008 -+ AIGS = 0.0136 -+ BIGS = 0.00171 -+ CIGS = 0.075 -+ AIGD = 0.0136 -+ BIGD = 0.00171 -+ CIGD = 0.075 -+ DLCIGD = 0 -+ NIGC = 1 -+ POXEDGE = 1 -+ PIGCD = 1 -+ NTOX = 1 -+ TOXREF = 4.0840E-009 -+ VFBSDOFF = 0 -+ XPART = 0 -+ CGSO = 3E-011 -+ CGDO = 3E-011 -+ CGBO = 0 -+ CGSL = 1.343E-010 -+ CGDL = 1.343E-010 -+ CKAPPAS = 0.6 -+ CKAPPAD = 0.6 -+ CF = 2.977E-010 -+ CLC = 1E-007 -+ CLE = 0.6 -+ DLC = 1.051E-008 -+ DWC = 0 -+ VFBCV = -1 -+ NOFF = 2 -+ VOFFCV = 0.051 -+ VOFFCVL = 0 -+ MINVCV = 0 -+ ACDE = 1 -+ MOIN = 15 -+ XRCRG1 = 12 -+ XRCRG2 = 1 -+ RBPB = 50 -+ RBPD = 50 -+ RBPS = 15 -+ RBDB = 50 -+ RBSB = 50 -+ GBMIN = 1E-012 -+ RBPS0 = 50 -+ RBPSL = 0 -+ RBPSW = 0 -+ RBPSNF = 0 -+ RBPD0 = 50 -+ RBPDL = 0 -+ RBPDW = 0 -+ RBPDNF = 0 -+ RBPBX0 = 100 -+ RBPBXL = 0 -+ RBPBXW = 0 -+ RBPBXNF = 0 -+ RBPBY0 = 100 -+ RBPBYL = 0 -+ RBPBYW = 0 -+ RBPBYNF = 0 -+ RBSBX0 = 100 -+ RBSBY0 = 100 -+ RBDBX0 = 100 -+ RBDBY0 = 100 -+ RBSDBXL = 0 -+ RBSDBXW = 0 -+ RBSDBXNF = 0 -+ RBSDBYL = 0 -+ RBSDBYW = 0 -+ RBSDBYNF = 0 -+ NOIA = 6.25E+041 -+ NOIB = 3.125E+026 -+ NOIC = 8.75 -+ EM = 4.1E+007 -+ AF = 1 -+ EF = 1 -+ KF = 0 -+ LINTNOI = 0 -+ NTNOI = 1 -+ TNOIA = 1.5 -+ TNOIB = 3.5 -+ RNOIA = 0.577 -+ RNOIB = 0.5164 -+ DMCG = 0 -+ DMCI = 0 -+ DMDG = 0 -+ DMCGT = 0 -+ DWJ = 0 -+ XGW = 0 -+ XGL = 0 -+ XL = 0 -+ XW = 5E-8 -+ NGCON = 1 -+ IJTHSREV = 0.0044 -+ IJTHSFWD = 0.0044 -+ XJBVS = 1 -+ BVS = 10 -+ JSS = 1.487E-8 -+ JSWS = 1E-18 -+ JSWGS = 0 -+ JTSS = 0 -+ JTSSWS = 0 -+ JTSSWGS = 0 -+ JTWEFF = 0 -+ NJS = 15 -+ NJTS = 20 -+ NJTSSW = 20 -+ NJTSSWG = 20 -+ XTSS = 0.02 -+ XTSSWS = 0.02 -+ XTSSWGS = 0.02 -+ VTSS = 10 -+ VTSSWS = 10 -+ VTSSWGS = 10 -+ TNJTS = 0 -+ TNJTSSW = 0 -+ TNJTSSWG = 0 -+ CJS = 0.001283 -+ MJS = 0.3296 -+ MJSWS = 0.33 -+ CJSWS = 3.5E-011 -+ CJSWGS = 3.5E-011 -+ MJSWGS = 0.33 -+ PBS = 0.9641 -+ PBSWS = 1 -+ PBSWGS = 1 -+ IJTHDREV = 0.0044 -+ IJTHDFWD = 0.0044 -+ XJBVD = 1 -+ BVD = 10 -+ JSD = 1.487E-8 -+ JSWD = 1E-18 -+ JSWGD = 0 -+ JTSD = 0 -+ JTSSWD = 0 -+ JTSSWGD = 0 -+ NJD = 15 -+ NJTSD = 20 -+ NJTSSWD = 20 -+ NJTSSWGD = 20 -+ XTSD = 0.02 -+ XTSSWD = 0.02 -+ XTSSWGD = 0.02 -+ VTSD = 10 -+ VTSSWD = 10 -+ VTSSWGD = 10 -+ TNJTSD = 0 -+ TNJTSSWD = 0 -+ TNJTSSWGD = 0 -+ CJD = 0.001283 -+ MJD = 0.3296 -+ MJSWD = 0.33 -+ CJSWD = 3.5E-011 -+ CJSWGD = 3.5E-011 -+ MJSWGD = 0.33 -+ PBD = 0.9641 -+ PBSWD = 1 -+ PBSWGD = 1 -+ TNOM = -253 -+ UTE = 0 -+ UCSTE = -0.004775 -+ KT1 = 0 -+ KT1L = 0 -+ KT2 = 0 -+ UA1 = 0 -+ UB1 = 0 -+ UC1 = 0 -+ UD1 = 0 -+ AT = 0 -+ PRT = 0 -+ XTIS = 3 -+ XTID = 3 -+ TPB = 0 -+ TPBSW = 0 -+ TPBSWG = 0 -+ TCJ = 0 -+ TCJSW = 0 -+ TCJSWG = 0 -+ TVOFF = 0 -+ TVFBSDOFF = 0 -+ SAREF = 0 -+ SBREF = 0 -+ WLOD = 2E-006 -+ KU0 = 4E-006 -+ KVSAT = 0.0 -+ TKU0 = 0 -+ LKU0 = 1E-006 -+ WKU0 = 1E-006 -+ PKU0 = 0 -+ LLODKU0 = 1.1 -+ WLODKU0 = 1.1 -+ KVTH0 = -2E-008 -+ LKVTH0 = 1.1E-006 -+ WKVTH0 = 1.1E-006 -+ PKVTH0 = 0 -+ LLODVTH = 1 -+ WLODVTH = 1 -+ STK2 = 0 -+ LODK2 = 1 -+ STETA0 = 0 -+ LODETA0 = 1 -+ WEB = 0 -+ WEC = 0 -+ KVTH0WE = 0 -+ K2WE = 0 -+ KU0WE = 0 -+ SCREF = 1E-006 -+ WL = 1E-014 -+ WLN = 1.056 -+ WW = 10.807E-015 -+ WWN = 1.03 -+ WWL = -1.419E-021 -+ LL = -1.609E-015 -+ LLN = 0.9 -+ LW = -7.92E-015 -+ LWN = 1.012 -+ LWL = 6.569E-021 -+ LLC = 0 -+ LWC = 0 -+ LWLC = 0 -+ WLC = 0 -+ WWC = 0 -+ WWLC = 0 -* -* diff --git a/openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshortlvth.spice b/openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshortlvth.spice deleted file mode 100644 index d201c7890..000000000 --- a/openfasoc/common/drc-lvs-check/sky130A/cryo_models/nshortlvth.spice +++ /dev/null @@ -1,420 +0,0 @@ -* -* 4k spice models for n-channel thin oxide mosfets (low VTH). -* -* -* this scaled model was extracted by coolcad electroncis llc, -* akin akturk, akin.akturk@coolcadelectronics.com -* -* measurements used in model extraction correspond to the -* following W (um)/L (um) devices: -*'nlowvt; w=7.0; l=8.0; m=1'; -*'nlowvt; w=7.0; l=0.15; m=1'; -*'nlowvt; w=0.42; l=1.0; m=1'; -*'nlowvt; w=0.42; l=0.15; m=1'; -*'nlowvt; w=0.84; l=0.15; m=1';* -* to use the models, please set the circuit temperature -* to -269 in celcius. for standard spice, this can be done -* by adding the following line to netlist: .options temp=-269 -* -* -* -* -.MODEL nshortlvth NMOS -+ LEVEL = 54 -+ VERSION = 4.6.5 -+ BINUNIT = 2 -+ PARAMCHK = 1 -+ MOBMOD = 1 -+ MTRLMOD = 0 -+ RDSMOD = 0 -+ IGCMOD = 0 -+ IGBMOD = 0 -+ CVCHARGEMOD = 0 -+ CAPMOD = 2 -+ RGATEMOD = 0 -+ RBODYMOD = 0 -+ TRNQSMOD = 0 -+ ACNQSMOD = 0 -+ FNOIMOD = 1 -+ TNOIMOD = 0 -+ DIOMOD = 1 -+ TEMPMOD = 0 -+ PERMOD = 1 -+ GEOMOD = 0 -+ WPEMOD = 0 -+ EPSROX = 3.9 -+ TOXE = 4.0840E-009 -+ EOT = 4.0840E-009 -+ TOXP = 4.0840E-009 -+ TOXM = 4.0840E-009 -+ DTOX = 0 -+ XJ = 1.5E-007 -+ NDEP = 1.7E+017 -+ NGATE = 1E+022 -+ NSD = 1E+020 -+ XT = 1.55E-007 -+ RSH = 0 -+ RSHG = 0.1 -+ VTH0 = 0.585 -+ WVTH0 = -0.02E-7 -+ LVTH0 = 0.27E-7 -+ PVTH0 = 0.08E-14 -+ VDDEOT = 1.5 -+ LEFFEOT = 1 -+ WEFFEOT = 10 -+ TEMPEOT = 300.1 -+ PHIN = 0 -+ EASUB = 4.05 -+ EPSRSUB = 11.7 -+ NI0SUB = 1.45E+010 -+ BG0SUB = 1.16 -+ TBGASUB = 0.000702 -+ TBGBSUB = 1108 -+ ADOS = 1 -+ BDOS = 1 -+ VFB = -1 -+ K1 = 0.35 -+ K2 = 0.01 -+ LK2 = 0.01E-6 -+ K3 = 15 -+ K3B = 0 -+ WK1 = -0.0225E-6 -+ LK1 = -0.045E-6 -+ PK1 = -0.5E-15 -+ W0 = 9.222E-007 -+ LPE0 = 1.899E-008 -+ LPEB = 6.702E-008 -+ VBM = -3 -+ DVT0 = 0.001 -+ DVT1 = 0.1135 -+ DVT2 = -2.864 -+ DVTP0 = 5.919E-009 -+ DVTP1 = 2.966 -+ DVT0W = -10.37 -+ DVT1W = 5.3E+006 -+ DVT2W = -0.032 -+ U0 = 0.65 -+ LU0 = -0.05E-6 -+ WU0 = -0.02E-6 -+ PU0 = 0.01E-12 -+ UA = -3.5E-009 -+ LUA = -5E-0117 -+ UB = 1.4E-017 -+ WUB = -2E-025 -+ LUB = -5E-025 -+ PUB = 12E-032 -+ UC = -0.07076 -+ UD = 3.228 -+ UCS = 1.67 -+ UP = 0.3928 -+ LP = 2E-005 -+ EU = 1.6 -+ VSAT = 3.2e+004 -+ WVSAT = 8E-3 -+ LVSAT = 20E-3 -+ PVSAT = -1.5e-9 -+ A0 = 2.2 -+ AGS = 1.4 -+ B0 = 0 -+ B1 = 0 -+ KETA = -0.02134 -+ A1 = 0 -+ A2 = 0.8779 -+ WINT = -5E-008 -+ LINT = -2.0E-008 -+ DWG = 6.974E-009 -+ LDWG = -5E-015 -+ DWB = 0 -+ VOFF = -0.05 -+ VOFFL = -11E-009 -+ MINV = -8 -+ LMINV = -15e-7 -+ WMINV = -10e-7 -+ NFACTOR = 5 -+ ETA0 = 2.686 -+ ETAB = -1.412 -+ DSUB = 0.6654 -+ CIT = 0 -+ CDSC = 4.441E-016 -+ CDSCB = -6.337E-006 -+ CDSCD = 0 -+ PCLM = 0.5 -+ LPCLM = 0.3E-6 -+ WPCLM = -0.1E-6 -+ PDIBLC1 = 0.001E-10 -+ PDIBLC2 = 1E-006 -+ PDIBLCB = 0 -+ DROUT = 0.56 -+ PSCBE1 = 1.5E+008 -+ PSCBE2 = 0.05E-006 -+ PVAG = 5 -+ DELTA = 0.002 -+ WDELTA = 2E-8 -+ FPROUT = 0 -+ PDITS = 0.01 -+ PDITSL = 1.392E+006 -+ PDITSD = 1 -+ LAMBDA = 0 -+ VTL = 2E+005 -+ LC = 0 -+ XN = 4 -+ PHIG = 4.05 -+ EPSRGATE = 11.7 -+ RDSW = 0.0 -+ RDSWMIN = 11.0 -+ RDW = 100 -+ RDWMIN = 0 -+ RSW = 100 -+ RSWMIN = 0 -+ PRWG = 0.4 -+ PRWB = -0.1169 -+ WR = 8.882E-016 -+ ALPHA0 = 1E-005 -+ ALPHA1 = 0 -+ BETA0 = 15 -+ AGIDL = 1E-015 -+ BGIDL = 2.3E+009 -+ CGIDL = 0.5 -+ EGIDL = 0.8 -+ AGISL = 0 -+ BGISL = 2.3E+009 -+ CGISL = 0.5 -+ EGISL = 0.8 -+ AIGBACC = 0.43 -+ BIGBACC = 0.054 -+ CIGBACC = 0.075 -+ NIGBACC = 1 -+ AIGBINV = 0.35 -+ BIGBINV = 0.03 -+ CIGBINV = 0.006 -+ EIGBINV = 1.1 -+ NIGBINV = 3 -+ AIGC = 0.54 -+ BIGC = 0.054 -+ CIGC = 0.075 -+ AIGSD = 0.43 -+ BIGSD = 0.054 -+ CIGSD = 0.075 -+ DLCIG = 1.051E-008 -+ AIGS = 0.0136 -+ BIGS = 0.00171 -+ CIGS = 0.075 -+ AIGD = 0.0136 -+ BIGD = 0.00171 -+ CIGD = 0.075 -+ DLCIGD = 0 -+ NIGC = 1 -+ POXEDGE = 1 -+ PIGCD = 1 -+ NTOX = 1 -+ TOXREF = 4.0840E-009 -+ VFBSDOFF = 0 -+ XPART = 0 -+ CGSO = 3E-011 -+ CGDO = 3E-011 -+ CGBO = 0 -+ CGSL = 1.343E-010 -+ CGDL = 1.343E-010 -+ CKAPPAS = 0.6 -+ CKAPPAD = 0.6 -+ CF = 2.977E-010 -+ CLC = 1E-007 -+ CLE = 0.6 -+ DLC = 1.051E-008 -+ DWC = 0 -+ VFBCV = -1 -+ NOFF = 2 -+ VOFFCV = 0.051 -+ VOFFCVL = 0 -+ MINVCV = 0 -+ ACDE = 1 -+ MOIN = 15 -+ XRCRG1 = 12 -+ XRCRG2 = 1 -+ RBPB = 50 -+ RBPD = 50 -+ RBPS = 15 -+ RBDB = 50 -+ RBSB = 50 -+ GBMIN = 1E-012 -+ RBPS0 = 50 -+ RBPSL = 0 -+ RBPSW = 0 -+ RBPSNF = 0 -+ RBPD0 = 50 -+ RBPDL = 0 -+ RBPDW = 0 -+ RBPDNF = 0 -+ RBPBX0 = 100 -+ RBPBXL = 0 -+ RBPBXW = 0 -+ RBPBXNF = 0 -+ RBPBY0 = 100 -+ RBPBYL = 0 -+ RBPBYW = 0 -+ RBPBYNF = 0 -+ RBSBX0 = 100 -+ RBSBY0 = 100 -+ RBDBX0 = 100 -+ RBDBY0 = 100 -+ RBSDBXL = 0 -+ RBSDBXW = 0 -+ RBSDBXNF = 0 -+ RBSDBYL = 0 -+ RBSDBYW = 0 -+ RBSDBYNF = 0 -+ NOIA = 6.25E+041 -+ NOIB = 3.125E+026 -+ NOIC = 8.75 -+ EM = 4.1E+007 -+ AF = 1 -+ EF = 1 -+ KF = 0 -+ LINTNOI = 0 -+ NTNOI = 1 -+ TNOIA = 1.5 -+ TNOIB = 3.5 -+ RNOIA = 0.577 -+ RNOIB = 0.5164 -+ DMCG = 0 -+ DMCI = 0 -+ DMDG = 0 -+ DMCGT = 0 -+ DWJ = 0 -+ XGW = 0 -+ XGL = 0 -+ XL = 0 -+ XW = 5E-8 -+ NGCON = 1 -+ IJTHSREV = 0.0044 -+ IJTHSFWD = 0.0044 -+ XJBVS = 1 -+ BVS = 10 -+ JSS = 1.487E-8 -+ JSWS = 1E-18 -+ JSWGS = 0 -+ JTSS = 0 -+ JTSSWS = 0 -+ JTSSWGS = 0 -+ JTWEFF = 0 -+ NJS = 15 -+ NJTS = 20 -+ NJTSSW = 20 -+ NJTSSWG = 20 -+ XTSS = 0.02 -+ XTSSWS = 0.02 -+ XTSSWGS = 0.02 -+ VTSS = 10 -+ VTSSWS = 10 -+ VTSSWGS = 10 -+ TNJTS = 0 -+ TNJTSSW = 0 -+ TNJTSSWG = 0 -+ CJS = 0.001283 -+ MJS = 0.3296 -+ MJSWS = 0.33 -+ CJSWS = 3.5E-011 -+ CJSWGS = 3.5E-011 -+ MJSWGS = 0.33 -+ PBS = 0.9641 -+ PBSWS = 1 -+ PBSWGS = 1 -+ IJTHDREV = 0.0044 -+ IJTHDFWD = 0.0044 -+ XJBVD = 1 -+ BVD = 10 -+ JSD = 1.487E-8 -+ JSWD = 1E-18 -+ JSWGD = 0 -+ JTSD = 0 -+ JTSSWD = 0 -+ JTSSWGD = 0 -+ NJD = 15 -+ NJTSD = 20 -+ NJTSSWD = 20 -+ NJTSSWGD = 20 -+ XTSD = 0.02 -+ XTSSWD = 0.02 -+ XTSSWGD = 0.02 -+ VTSD = 10 -+ VTSSWD = 10 -+ VTSSWGD = 10 -+ TNJTSD = 0 -+ TNJTSSWD = 0 -+ TNJTSSWGD = 0 -+ CJD = 0.001283 -+ MJD = 0.3296 -+ MJSWD = 0.33 -+ CJSWD = 3.5E-011 -+ CJSWGD = 3.5E-011 -+ MJSWGD = 0.33 -+ PBD = 0.9641 -+ PBSWD = 1 -+ PBSWGD = 1 -+ TNOM = -253 -+ UTE = 0 -+ UCSTE = -0.004775 -+ KT1 = 0 -+ KT1L = 0 -+ KT2 = 0 -+ UA1 = 0 -+ UB1 = 0 -+ UC1 = 0 -+ UD1 = 0 -+ AT = 0 -+ PRT = 0 -+ XTIS = 3 -+ XTID = 3 -+ TPB = 0 -+ TPBSW = 0 -+ TPBSWG = 0 -+ TCJ = 0 -+ TCJSW = 0 -+ TCJSWG = 0 -+ TVOFF = 0 -+ TVFBSDOFF = 0 -+ SAREF = 0 -+ SBREF = 0 -+ WLOD = 2E-006 -+ KU0 = 4E-006 -+ KVSAT = 0.0 -+ TKU0 = 0 -+ LKU0 = 1E-006 -+ WKU0 = 1E-006 -+ PKU0 = 0 -+ LLODKU0 = 1.1 -+ WLODKU0 = 1.1 -+ KVTH0 = -2E-008 -+ LKVTH0 = 1.1E-006 -+ WKVTH0 = 1.1E-006 -+ PKVTH0 = 0 -+ LLODVTH = 1 -+ WLODVTH = 1 -+ STK2 = 0 -+ LODK2 = 1 -+ STETA0 = 0 -+ LODETA0 = 1 -+ WEB = 0 -+ WEC = 0 -+ KVTH0WE = 0 -+ K2WE = 0 -+ KU0WE = 0 -+ SCREF = 1E-006 -+ WL = 1E-014 -+ WLN = 1.056 -+ WW = 10.807E-015 -+ WWN = 1.03 -+ WWL = -1.419E-021 -+ LL = -1.609E-015 -+ LLN = 0.9 -+ LW = -7.92E-015 -+ LWN = 1.012 -+ LWL = 6.569E-021 -+ LLC = 0 -+ LWC = 0 -+ LWLC = 0 -+ WLC = 0 -+ WWC = 0 -+ WWLC = 0 -* -* diff --git a/openfasoc/common/drc-lvs-check/sky130A/cryo_models/pmos.spice b/openfasoc/common/drc-lvs-check/sky130A/cryo_models/pmos.spice deleted file mode 100644 index fe1cb7786..000000000 --- a/openfasoc/common/drc-lvs-check/sky130A/cryo_models/pmos.spice +++ /dev/null @@ -1,419 +0,0 @@ -* -* 4k spice models for p-channel thin oxide mosfets (low VTH). -* -* -* this scaled model was extracted by coolcad electroncis llc, -* akin akturk, akin.akturk@coolcadelectronics.com -* -* measurements used in model extraction correspond to the -* following W (um)/L (um) devices: -*'plowvt; w=3.0; l=1.0; m=1'; -*'plowvt; w=7.0; l=8.0; m=1'; -*'plowvt; w=7.0; l=0.35; m=1'; -*'plowvt; w=0.42; l=8.0; m=1'; -*'plowvt; w=0.42; l=0.35; m=1'; -* -* to use the models, please set the circuit temperature -* to -269 in celcius. for standard spice, this can be done -* by adding the following line to netlist: .options temp=-269 -* -* -* -* -.MODEL pshort PMOS -+ LEVEL = 54 -+ VERSION = 4.6.5 -+ BINUNIT = 2 -+ PARAMCHK = 1 -+ MOBMOD = 1 -+ MTRLMOD = 0 -+ RDSMOD = 0 -+ IGCMOD = 0 -+ IGBMOD = 0 -+ CVCHARGEMOD = 0 -+ CAPMOD = 2 -+ RGATEMOD = 0 -+ RBODYMOD = 0 -+ TRNQSMOD = 0 -+ ACNQSMOD = 0 -+ FNOIMOD = 1 -+ TNOIMOD = 0 -+ DIOMOD = 1 -+ TEMPMOD = 0 -+ PERMOD = 1 -+ GEOMOD = 0 -+ WPEMOD = 0 -+ EPSROX = 3.9 -+ TOXE = 4.0349E-009 -+ EOT = 4.0349E-009 -+ TOXP = 4.0349E-009 -+ TOXM = 4.0349E-009 -+ DTOX = 0 -+ XJ = 1.5E-007 -+ NDEP = 4.0E+017 -+ NGATE = 1E+022 -+ NSD = 1E+020 -+ XT = 1.55E-007 -+ RSH = 0 -+ RSHG = 0.1 -+ VTH0 = -1.17 -+ LVTH0 = 0.13e-7 -+ WVTH0 = -0.23e-7 -+ PVTH0 = 20e-16 -+ VDDEOT = -1.5 -+ LEFFEOT = 1 -+ WEFFEOT = 10 -+ TEMPEOT = 300.1 -+ PHIN = 0 -+ EASUB = 4.05 -+ EPSRSUB = 11.7 -+ NI0SUB = 1.45E+010 -+ BG0SUB = 1.16 -+ TBGASUB = 0.000702 -+ TBGBSUB = 1108 -+ ADOS = 1 -+ BDOS = 1 -+ VFB = -1 -+ K1 = 0.618 -+ K2 = 0.039145 -+ K3 = -14.37 -+ K3B = -4.92 -+ WK1 = -4E-8 -+ LK1 = -4E-8 -+ PK1 = 8E-15 -+ W0 = 4.104E-007 -+ LPE0 = 7.535E-016 -+ LPEB = 2.387E-011 -+ VBM = -0.5 -+ DVT0 = 0.007 -+ DVT1 = 0.01 -+ DVT2 = -0.05872 -+ DVTP0 = 0 -+ DVTP1 = 0.001 -+ DVT0W = -100 -+ DVT1W = 5.3E+006 -+ DVT2W = -0.032 -+ U0 = 0.17 -+ LU0 = -6E-9 -+ PU0 = 0E-17 -+ WU0 = 0E-9 -+ UA = -3.272E-010 -+ UB = 2.2E-018 -+ WUB = -3E-026 -+ UC = 0.1 -+ UD = 1.762E+017 -+ UCS = 1 -+ UP = -0.004472 -+ LP = 1E-008 -+ EU = 1.67 -+ VSAT = 25E+004 -+ WVSAT = 3.0 -+ LVSAT = -10E-12 -+ PVSAT = 1E-2 -+ A0 = 0.5 -+ AGS = 0.5529 -+ B0 = 0 -+ B1 = 0 -+ KETA = -0.06744 -+ A1 = 0.07557 -+ A2 = 0.376 -+ WINT = 7E-008 -+ LINT = 1.5E-008 -+ DWG = -1E-008 -+ DWB = -1E-008 -+ VOFF = -0.09 -+ VOFFL = -0.4E-7 -+ MINV = -9 -+ WMINV = 0.39e-6 -+ LMINV = 0.0e-6 -+ PMINV = -0.7e-13 -+ NFACTOR = 4 -+ ETA0 = 12E-005 -+ ETAB = 0.687 -+ DSUB = 0.9 -+ CIT = 0 -+ CDSC = 4.441E-016 -+ CDSCB = -0.001393 -+ CDSCD = 0 -+ PCLM = 0.839 -+ LPCLM = 6E-7 -+ PDIBLC1 = 2 -+ PDIBLC2 = 0.001192 -+ PDIBLCB = 0 -+ DROUT = 0.4 -+ PSCBE1 = 9.24E+008 -+ PSCBE2 = 0.001 -+ PVAG = 1 -+ DELTA = 0.07 -+ PDELTA = -5E-15 -+ FPROUT = 0 -+ PDITS = 0.1 -+ PDITSL = 6.754E+006 -+ PDITSD = 1 -+ LAMBDA = 0 -+ VTL = 3.7E+004 -+ WVTL = 1E-2 -+ LC = 0.2 -+ XN = 10 -+ PHIG = 4.05 -+ EPSRGATE = 11.7 -+ RDSW = 3000 -+ LRDSW = 4e-5 -+ WRDSW = 0e-5 -+ RDSWMIN = 00 -+ RDW = 100 -+ RDWMIN = 0 -+ RSW = 100 -+ RSWMIN = 0 -+ PRWG = 8.421E-005 -+ PRWB = -0.814 -+ WR = 1.21 -+ ALPHA0 = 1E-005 -+ ALPHA1 = 0 -+ BETA0 = 15 -+ AGIDL = 1E-015 -+ BGIDL = 2.3E+009 -+ CGIDL = 0.5 -+ EGIDL = 0.8 -+ AGISL = 0 -+ BGISL = 2.3E+009 -+ CGISL = 0.5 -+ EGISL = 0.8 -+ AIGBACC = 0.43 -+ BIGBACC = 0.054 -+ CIGBACC = 0.075 -+ NIGBACC = 1 -+ AIGBINV = 0.35 -+ BIGBINV = 0.03 -+ CIGBINV = 0.006 -+ EIGBINV = 1.1 -+ NIGBINV = 3 -+ AIGC = 0.54 -+ BIGC = 0.054 -+ CIGC = 0.075 -+ AIGSD = 0.43 -+ BIGSD = 0.054 -+ CIGSD = 0.075 -+ DLCIG = 1.124E-008 -+ AIGS = 0.0136 -+ BIGS = 0.00171 -+ CIGS = 0.075 -+ AIGD = 0.0136 -+ BIGD = 0.00171 -+ CIGD = 0.075 -+ DLCIGD = 0 -+ NIGC = 1 -+ POXEDGE = 1 -+ PIGCD = 1 -+ NTOX = 1 -+ TOXREF = 4.0349E-009 -+ VFBSDOFF = 0 -+ XPART = 0 -+ CGSO = 3.161E-011 -+ CGDO = 3.161E-011 -+ CGBO = 0 -+ CGSL = 1.121E-010 -+ CGDL = 1.121E-010 -+ CKAPPAS = 0.6 -+ CKAPPAD = 0.6 -+ CF = 2.854E-010 -+ CLC = 1E-007 -+ CLE = 0.6 -+ DLC = 1.124E-008 -+ DWC = 0 -+ VFBCV = -1 -+ NOFF = 2 -+ VOFFCV = -0.2538 -+ VOFFCVL = 0 -+ MINVCV = 0 -+ ACDE = 1 -+ MOIN = 15 -+ XRCRG1 = 12 -+ XRCRG2 = 1 -+ RBPB = 50 -+ RBPD = 50 -+ RBPS = 15 -+ RBDB = 50 -+ RBSB = 50 -+ GBMIN = 1E-012 -+ RBPS0 = 50 -+ RBPSL = 0 -+ RBPSW = 0 -+ RBPSNF = 0 -+ RBPD0 = 50 -+ RBPDL = 0 -+ RBPDW = 0 -+ RBPDNF = 0 -+ RBPBX0 = 100 -+ RBPBXL = 0 -+ RBPBXW = 0 -+ RBPBXNF = 0 -+ RBPBY0 = 100 -+ RBPBYL = 0 -+ RBPBYW = 0 -+ RBPBYNF = 0 -+ RBSBX0 = 100 -+ RBSBY0 = 100 -+ RBDBX0 = 100 -+ RBDBY0 = 100 -+ RBSDBXL = 0 -+ RBSDBXW = 0 -+ RBSDBXNF = 0 -+ RBSDBYL = 0 -+ RBSDBYW = 0 -+ RBSDBYNF = 0 -+ NOIA = 6.25E+041 -+ NOIB = 3.125E+026 -+ NOIC = 8.75 -+ EM = 4.1E+007 -+ AF = 1 -+ EF = 1 -+ KF = 0 -+ LINTNOI = 0 -+ NTNOI = 1 -+ TNOIA = 1.5 -+ TNOIB = 3.5 -+ RNOIA = 0.577 -+ RNOIB = 0.5164 -+ DMCG = 0 -+ DMCI = 0 -+ DMDG = 0 -+ DMCGT = 0 -+ DWJ = 0 -+ XGW = 0 -+ XGL = 0 -+ XL = 0 -+ XW = 0 -+ NGCON = 1 -+ IJTHSREV = 0.1 -+ IJTHSFWD = 0.1 -+ XJBVS = 1 -+ BVS = 10 -+ JSS = 0.0001 -+ JSWS = 0 -+ JSWGS = 0 -+ JTSS = 0 -+ JTSSWS = 0 -+ JTSSWGS = 0 -+ JTWEFF = 0 -+ NJS = 15 -+ NJTS = 20 -+ NJTSSW = 20 -+ NJTSSWG = 20 -+ XTSS = 0.02 -+ XTSSWS = 0.02 -+ XTSSWGS = 0.02 -+ VTSS = 10 -+ VTSSWS = 10 -+ VTSSWGS = 10 -+ TNJTS = 0 -+ TNJTSSW = 0 -+ TNJTSSWG = 0 -+ CJS = 0.0005 -+ MJS = 0.5 -+ MJSWS = 0.33 -+ CJSWS = 5E-010 -+ CJSWGS = 5E-010 -+ MJSWGS = 0.33 -+ PBS = 1 -+ PBSWS = 1 -+ PBSWGS = 1 -+ IJTHDREV = 4.878E-003 -+ IJTHDFWD = 4.878E-003 -+ XJBVD = 1 -+ BVD = 10 -+ JSD = 1.004E-014 -+ JSWD = 2.467E-018 -+ JSWGD = 0 -+ JTSD = 0 -+ JTSSWD = 0 -+ JTSSWGD = 0 -+ NJD = 15 -+ NJTSD = 20 -+ NJTSSWD = 20 -+ NJTSSWGD = 20 -+ XTSD = 0.02 -+ XTSSWD = 0.02 -+ XTSSWGD = 0.02 -+ VTSD = 10 -+ VTSSWD = 10 -+ VTSSWGD = 10 -+ TNJTSD = 0 -+ TNJTSSWD = 0 -+ TNJTSSWGD = 0 -+ CJD = 0.0009368 -+ MJD = 0.3545 -+ MJSWD = 0.3141 -+ CJSWD = 7.65E-011 -+ CJSWGD = 5E-010 -+ MJSWGD = 0.33 -+ PBD = 0.9594 -+ PBSWD = 0.9109 -+ PBSWGD = 1 -+ TNOM = -253 -+ UTE = 0 -+ UCSTE = -0.004775 -+ KT1 = -0.11 -+ KT1L = 0 -+ KT2 = 0.022 -+ UA1 = 1E-009 -+ UB1 = -1E-018 -+ UC1 = -0.056 -+ UD1 = 0 -+ AT = 3.3E+004 -+ PRT = 0 -+ XTIS = 3 -+ XTID = 3 -+ TPB = 0 -+ TPBSW = 0 -+ TPBSWG = 0 -+ TCJ = 0 -+ TCJSW = 0 -+ TCJSWG = 0 -+ TVOFF = 0 -+ TVFBSDOFF = 0 -+ SAREF = 0 -+ SBREF = 0 -+ WLOD = 2E-006 -+ KU0 = 4E-006 -+ KVSAT = 0.2 -+ TKU0 = 0 -+ LKU0 = 1E-006 -+ WKU0 = 1E-006 -+ PKU0 = 0 -+ LLODKU0 = 1.1 -+ WLODKU0 = 1.1 -+ KVTH0 = -2E-008 -+ LKVTH0 = 1.1E-006 -+ WKVTH0 = 1.1E-006 -+ PKVTH0 = 0 -+ LLODVTH = 1 -+ WLODVTH = 1 -+ STK2 = 0 -+ LODK2 = 1 -+ STETA0 = 0 -+ LODETA0 = 1 -+ WEB = 0 -+ WEC = 0 -+ KVTH0WE = 0 -+ K2WE = 0 -+ KU0WE = 0 -+ SCREF = 1E-006 -+ WL = 7.641E-015 -+ WLN = 0.9975 -+ WW = -1E-014 -+ WWN = 1.012 -+ WWL = -1.218E-021 -+ LL = -3.165E-015 -+ LLN = 1 -+ LW = -4.827E-015 -+ LWN = 1 -+ LWL = 1.182E-021 -+ LLC = 0 -+ LWC = 0 -+ LWLC = 0 -+ WLC = 0 -+ WWC = 0 -+ WWLC = 0 -* -* diff --git a/openfasoc/common/drc-lvs-check/sky130A/sky130A.magicrc b/openfasoc/common/drc-lvs-check/sky130A/sky130A.magicrc index 9bb1dbd6c..817adb349 100644 --- a/openfasoc/common/drc-lvs-check/sky130A/sky130A.magicrc +++ b/openfasoc/common/drc-lvs-check/sky130A/sky130A.magicrc @@ -18,21 +18,25 @@ catch {random seed} # scale in the model files. ext2spice scale off -# Allow override of PDK path from environment variable PDKPATH -if {[catch {set PDKPATH $env(PDKPATH)}]} { - set PDKPATH $env(PDK_ROOT)/sky130A +# Allow override of PDK path from environment variable PDK_ROOT +# "file nativename" guards against a local PDK_ROOT with "~" in the name +if {[catch {set PDK_ROOT [file nativename $env(PDK_ROOT)]}]} { + set PDK_ROOT /usr/bin/miniconda3/share/pdk } # loading technology -tech load $PDKPATH/libs.tech/magic/sky130A.tech +tech load $PDK_ROOT/sky130A/libs.tech/magic/sky130A.tech + +# halt on error +if {[tech name] != "sky130A"} {quit -noprompt} # load device generator -source $PDKPATH/libs.tech/magic/sky130A.tcl +source $PDK_ROOT/sky130A/libs.tech/magic/sky130A.tcl # load bind keys (optional) -# source $PDKPATH/libs.tech/magic/sky130A-BindKeys +# source $PDK_ROOT/sky130A/libs.tech/magic/sky130A-BindKeys -# set units to lambda grid +# set units to lambda grid snap lambda # set sky130 standard power, ground, and substrate names @@ -48,34 +52,36 @@ if {[catch {set MAGTYPE $env(MAGTYPE)}]} { } # add path to reference cells -if {[file isdir ${PDKPATH}/libs.ref/${MAGTYPE}]} { - addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_pr - addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_io - addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hd - addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hdll - addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hs - addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hvl - addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_lp - addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_ls - addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_ms - addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_osu_sc - addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_osu_sc_t18 - addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_ml_xx_hd - addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_sram_macros +if {[file isdir ${PDK_ROOT}/sky130A/libs.ref/${MAGTYPE}]} { + addpath ${PDK_ROOT}/sky130A/libs.ref/${MAGTYPE}/sky130_fd_pr + addpath ${PDK_ROOT}/sky130A/libs.ref/${MAGTYPE}/sky130_fd_io + addpath ${PDK_ROOT}/sky130A/libs.ref/${MAGTYPE}/sky130_fd_sc_hd + addpath ${PDK_ROOT}/sky130A/libs.ref/${MAGTYPE}/sky130_fd_sc_hdll + addpath ${PDK_ROOT}/sky130A/libs.ref/${MAGTYPE}/sky130_fd_sc_hs + addpath ${PDK_ROOT}/sky130A/libs.ref/${MAGTYPE}/sky130_fd_sc_hvl + addpath ${PDK_ROOT}/sky130A/libs.ref/${MAGTYPE}/sky130_fd_sc_lp + addpath ${PDK_ROOT}/sky130A/libs.ref/${MAGTYPE}/sky130_fd_sc_ls + addpath ${PDK_ROOT}/sky130A/libs.ref/${MAGTYPE}/sky130_fd_sc_ms + addpath ${PDK_ROOT}/sky130A/libs.ref/${MAGTYPE}/sky130_osu_sc + addpath ${PDK_ROOT}/sky130A/libs.ref/${MAGTYPE}/sky130_osu_sc_t18 + addpath ${PDK_ROOT}/sky130A/libs.ref/${MAGTYPE}/sky130_ml_xx_hd + addpath ${PDK_ROOT}/sky130A/libs.ref/${MAGTYPE}/sky130_fd_bd_sram + addpath ${PDK_ROOT}/sky130A/libs.ref/${MAGTYPE}/sky130_sram_macros } else { - addpath ${PDKPATH}/libs.ref/sky130_fd_pr/${MAGTYPE} - addpath ${PDKPATH}/libs.ref/sky130_fd_io/${MAGTYPE} - addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hd/${MAGTYPE} - addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hdll/${MAGTYPE} - addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hs/${MAGTYPE} - addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hvl/${MAGTYPE} - addpath ${PDKPATH}/libs.ref/sky130_fd_sc_lp/${MAGTYPE} - addpath ${PDKPATH}/libs.ref/sky130_fd_sc_ls/${MAGTYPE} - addpath ${PDKPATH}/libs.ref/sky130_fd_sc_ms/${MAGTYPE} - addpath ${PDKPATH}/libs.ref/sky130_osu_sc/${MAGTYPE} - addpath ${PDKPATH}/libs.ref/sky130_osu_sc_t18/${MAGTYPE} - addpath ${PDKPATH}/libs.ref/sky130_ml_xx_hd/${MAGTYPE} - addpath ${PDKPATH}/libs.ref/sky130_sram_macros/${MAGTYPE} + addpath ${PDK_ROOT}/sky130A/libs.ref/sky130_fd_pr/${MAGTYPE} + addpath ${PDK_ROOT}/sky130A/libs.ref/sky130_fd_io/${MAGTYPE} + addpath ${PDK_ROOT}/sky130A/libs.ref/sky130_fd_sc_hd/${MAGTYPE} + addpath ${PDK_ROOT}/sky130A/libs.ref/sky130_fd_sc_hdll/${MAGTYPE} + addpath ${PDK_ROOT}/sky130A/libs.ref/sky130_fd_sc_hs/${MAGTYPE} + addpath ${PDK_ROOT}/sky130A/libs.ref/sky130_fd_sc_hvl/${MAGTYPE} + addpath ${PDK_ROOT}/sky130A/libs.ref/sky130_fd_sc_lp/${MAGTYPE} + addpath ${PDK_ROOT}/sky130A/libs.ref/sky130_fd_sc_ls/${MAGTYPE} + addpath ${PDK_ROOT}/sky130A/libs.ref/sky130_fd_sc_ms/${MAGTYPE} + addpath ${PDK_ROOT}/sky130A/libs.ref/sky130_osu_sc/${MAGTYPE} + addpath ${PDK_ROOT}/sky130A/libs.ref/sky130_osu_sc_t18/${MAGTYPE} + addpath ${PDK_ROOT}/sky130A/libs.ref/sky130_ml_xx_hd/${MAGTYPE} + addpath ${PDK_ROOT}/sky130A/libs.ref/sky130_fd_bd_sram/${MAGTYPE} + addpath ${PDK_ROOT}/sky130A/libs.ref/sky130_sram_macros/${MAGTYPE} } # add path to GDS cells diff --git a/openfasoc/common/drc-lvs-check/sky130A/sky130A_setup.tcl b/openfasoc/common/drc-lvs-check/sky130A/sky130A_setup.tcl index ede844e37..0ce7e3d3d 100644 --- a/openfasoc/common/drc-lvs-check/sky130A/sky130A_setup.tcl +++ b/openfasoc/common/drc-lvs-check/sky130A/sky130A_setup.tcl @@ -17,10 +17,6 @@ catch {format $env(NETGEN_COLUMNS)} set cells1 [cells list -all -circuit1] set cells2 [cells list -all -circuit2] -# NOTE: In accordance with the LVS manager GUI, the schematic is -# always circuit2, so some items like property "par1" only need to -# be specified for circuit2. - #------------------------------------------- # Resistors (except metal) #------------------------------------------- @@ -75,11 +71,46 @@ foreach dev $devices { } #------------------------------------------- -# MRM (metal) resistors and poly resistor +# poly resistor #------------------------------------------- set devices {} lappend devices sky130_fd_pr__res_generic_po + +foreach dev $devices { + if {[lsearch $cells1 $dev] >= 0} { + permute "-circuit1 $dev" end_a end_b + property "-circuit1 $dev" series enable + property "-circuit1 $dev" series {w critical} + property "-circuit1 $dev" series {l add} + property "-circuit1 $dev" parallel enable + property "-circuit1 $dev" parallel {l critical} + property "-circuit1 $dev" parallel {w add} + property "-circuit1 $dev" parallel {value par} + property "-circuit1 $dev" tolerance {l 0.01} {w 0.01} + # Ignore these properties + property "-circuit1 $dev" delete mult + } + if {[lsearch $cells2 $dev] >= 0} { + permute "-circuit2 $dev" end_a end_b + property "-circuit2 $dev" series enable + property "-circuit2 $dev" series {w critical} + property "-circuit2 $dev" series {l add} + property "-circuit2 $dev" parallel enable + property "-circuit2 $dev" parallel {l critical} + property "-circuit2 $dev" parallel {w add} + property "-circuit2 $dev" parallel {value par} + property "-circuit2 $dev" tolerance {l 0.01} {w 0.01} + # Ignore these properties + property "-circuit2 $dev" delete mult + } +} + +#------------------------------------------- +# MRM (metal) resistors +#------------------------------------------- + +set devices {} lappend devices sky130_fd_pr__res_generic_l1 lappend devices sky130_fd_pr__res_generic_m1 lappend devices sky130_fd_pr__res_generic_m2 @@ -97,7 +128,7 @@ foreach dev $devices { property "-circuit1 $dev" parallel {l critical} property "-circuit1 $dev" parallel {w add} property "-circuit1 $dev" parallel {value par} - property "-circuit1 $dev" tolerance {l 0.01} {w 0.01} + property "-circuit1 $dev" tolerance {l 10.0} {w 10.0} # Ignore these properties property "-circuit1 $dev" delete mult } @@ -110,7 +141,7 @@ foreach dev $devices { property "-circuit2 $dev" parallel {l critical} property "-circuit2 $dev" parallel {w add} property "-circuit2 $dev" parallel {value par} - property "-circuit2 $dev" tolerance {l 0.01} {w 0.01} + property "-circuit2 $dev" tolerance {l 10.0} {w 10.0} # Ignore these properties property "-circuit2 $dev" delete mult } @@ -125,40 +156,105 @@ lappend devices sky130_fd_pr__nfet_01v8 lappend devices sky130_fd_pr__nfet_01v8_lvt lappend devices sky130_fd_bs_flash__special_sonosfet_star lappend devices sky130_fd_pr__nfet_g5v0d10v5 +lappend devices sky130_fd_pr__nfet_03v3_nvt lappend devices sky130_fd_pr__nfet_05v0_nvt lappend devices sky130_fd_pr__pfet_01v8 lappend devices sky130_fd_pr__pfet_01v8_lvt lappend devices sky130_fd_pr__pfet_01v8_mvt lappend devices sky130_fd_pr__pfet_01v8_hvt lappend devices sky130_fd_pr__pfet_g5v0d10v5 -lappend devices sky130_fd_pr__special_pfet_pass -lappend devices sky130_fd_pr__special_nfet_pass lappend devices sky130_fd_pr__special_nfet_latch +lappend devices sky130_fd_pr__special_nfet_pass +lappend devices sky130_fd_pr__special_pfet_latch +lappend devices sky130_fd_pr__special_pfet_latch +lappend devices sky130_fd_pr__special_nfet_01v8 +lappend devices sky130_fd_pr__special_pfet_01v8_hvt lappend devices sky130_fd_pr__cap_var_lvt lappend devices sky130_fd_pr__cap_var_hvt lappend devices sky130_fd_pr__cap_var + +foreach dev $devices { + if {[lsearch $cells1 $dev] >= 0} { + permute "-circuit1 $dev" 1 3 + property "-circuit1 $dev" parallel enable + property "-circuit1 $dev" parallel {l critical} + property "-circuit1 $dev" parallel {w add} + property "-circuit1 $dev" tolerance {w 0.01} {l 0.01} + # Ignore these properties + property "-circuit1 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs area perim topography + } + if {[lsearch $cells2 $dev] >= 0} { + permute "-circuit2 $dev" 1 3 + property "-circuit2 $dev" parallel enable + property "-circuit2 $dev" parallel {l critical} + property "-circuit2 $dev" parallel {w add} + property "-circuit2 $dev" tolerance {w 0.01} {l 0.01} + # Ignore these properties + property "-circuit2 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs area perim topography + } +} + +#--------------------------------------------------------------------- +# Extended drain MOSFET devices. These have asymmetric source and +# drain, and so the source and drain are not permutable. +#--------------------------------------------------------------------- + +set devices {} +lappend devices sky130_fd_pr__nfet_20v0_zvt lappend devices sky130_fd_pr__nfet_20v0_nvt +lappend devices sky130_fd_pr__nfet_20v0_iso lappend devices sky130_fd_pr__nfet_20v0 lappend devices sky130_fd_pr__pfet_20v0 +lappend devices sky130_fd_pr__nfet_g5v0d16v0 +lappend devices sky130_fd_pr__pfet_g5v0d16v0 foreach dev $devices { if {[lsearch $cells1 $dev] >= 0} { - permute "-circuit1 $dev" 1 3 property "-circuit1 $dev" parallel enable property "-circuit1 $dev" parallel {l critical} property "-circuit1 $dev" parallel {w add} property "-circuit1 $dev" tolerance {w 0.01} {l 0.01} # Ignore these properties - property "-circuit1 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs + property "-circuit1 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs area perim topography } if {[lsearch $cells2 $dev] >= 0} { - permute "-circuit2 $dev" 1 3 property "-circuit2 $dev" parallel enable property "-circuit2 $dev" parallel {l critical} property "-circuit2 $dev" parallel {w add} property "-circuit2 $dev" tolerance {w 0.01} {l 0.01} # Ignore these properties - property "-circuit2 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs + property "-circuit2 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs area perim topography + } +} + +#--------------------------------------------------------------------- +# (MOS) ESD transistors. Note that the ESD transistors have a flanged +# gate. Magic disagrees slightly on how to interpret the width of the +# devices, so the tolerance is increased to 7% to cover the difference +#--------------------------------------------------------------------- + +set devices {} +lappend devices sky130_fd_pr__esd_nfet_g5v0d10v5 +lappend devices sky130_fd_pr__esd_pfet_g5v0d10v5 + +foreach dev $devices { + if {[lsearch $cells1 $dev] >= 0} { + permute "-circuit1 $dev" 1 3 + property "-circuit1 $dev" parallel enable + property "-circuit1 $dev" parallel {l critical} + property "-circuit1 $dev" parallel {w add} + property "-circuit1 $dev" tolerance {w 0.07} {l 0.01} + # Ignore these properties + property "-circuit1 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs area perim topography + } + if {[lsearch $cells2 $dev] >= 0} { + permute "-circuit2 $dev" 1 3 + property "-circuit2 $dev" parallel enable + property "-circuit2 $dev" parallel {l critical} + property "-circuit2 $dev" parallel {w add} + property "-circuit2 $dev" tolerance {w 0.07} {l 0.01} + # Ignore these properties + property "-circuit2 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs area perim topography } } @@ -180,16 +276,18 @@ foreach dev $devices { if {[lsearch $cells1 $dev] >= 0} { property "-circuit1 $dev" parallel enable property "-circuit1 $dev" parallel {area add} + property "-circuit1 $dev" parallel {pj add} property "-circuit1 $dev" parallel {value add} - property "-circuit1 $dev" tolerance {area 0.02} + property "-circuit1 $dev" tolerance {area 0.02} {pj 0.02} # Ignore these properties property "-circuit1 $dev" delete mult perim } if {[lsearch $cells2 $dev] >= 0} { property "-circuit2 $dev" parallel enable property "-circuit2 $dev" parallel {area add} + property "-circuit2 $dev" parallel {pj add} property "-circuit2 $dev" parallel {value add} - property "-circuit2 $dev" tolerance {area 0.02} + property "-circuit2 $dev" tolerance {area 0.02} {pj 0.02} # Ignore these properties property "-circuit2 $dev" delete mult perim } @@ -234,6 +332,10 @@ lappend devices sky130_fd_pr__npn_05v5_W1p00L1p00 lappend devices sky130_fd_pr__npn_05v5_W1p00L2p00 lappend devices sky130_fd_pr__pnp_05v5_W0p68L0p68 lappend devices sky130_fd_pr__pnp_05v5_W3p40L3p40 +lappend devices sky130_fd_pr__rf_npn_05v5_W1p00L1p00 +lappend devices sky130_fd_pr__rf_npn_05v5_W1p00L2p00 +lappend devices sky130_fd_pr__rf_pnp_05v5_W0p68L0p68 +lappend devices sky130_fd_pr__rf_pnp_05v5_W3p40L3p40 lappend devices sky130_fd_pr__npn_05v5 lappend devices sky130_fd_pr__pnp_05v5 lappend devices sky130_fd_pr__npn_11v0 @@ -270,6 +372,7 @@ foreach dev $devices { } } + #--------------------------------------------------------------- # Schematic cells which are not extractable #--------------------------------------------------------------- @@ -328,6 +431,9 @@ if { [info exist ::env(MAGIC_EXT_USE_GDS)] && $::env(MAGIC_EXT_USE_GDS) } { #--------------------------------------------------------------- foreach cell $cells1 { + if {[regexp {sky130_ef_sc_[^_]+__decap_[[:digit:]]+} $cell match]} { + property "-circuit1 $cell" parallel enable + } if {[regexp {sky130_fd_sc_[^_]+__decap_[[:digit:]]+} $cell match]} { property "-circuit1 $cell" parallel enable } @@ -348,6 +454,9 @@ foreach cell $cells1 { } } foreach cell $cells2 { + if {[regexp {sky130_ef_sc_[^_]+__decap_[[:digit:]]+} $cell match]} { + property "-circuit2 $cell" parallel enable + } if {[regexp {sky130_fd_sc_[^_]+__decap_[[:digit:]]+} $cell match]} { property "-circuit2 $cell" parallel enable } From 9af1b9ed2d31c3a04546cd647b15ede1416df9ce Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Sun, 21 Apr 2024 17:05:57 +0000 Subject: [PATCH 18/20] final commits --- .github/scripts/run_glayout_drc.py | 51 +++++++++++++++++------------ .github/scripts/run_glayout_lvs.py | 3 ++ .github/scripts/setup_glayout_ci.py | 2 +- .github/workflows/glayout.yml | 5 +-- .gitignore | 5 +-- res/reports/6_final_drc.rpt | 3 -- 6 files changed, 38 insertions(+), 31 deletions(-) delete mode 100644 res/reports/6_final_drc.rpt diff --git a/.github/scripts/run_glayout_drc.py b/.github/scripts/run_glayout_drc.py index 6ef14c3bc..a58290e01 100644 --- a/.github/scripts/run_glayout_drc.py +++ b/.github/scripts/run_glayout_drc.py @@ -45,24 +45,23 @@ def eval_component(comp_to_run: Component, pdk_str: str, clean: int): def setup_pdk_dir(pdk_str: str): if pdk_str == 'sky130': - COMMON_VERIF_DIR = '../../../common/drc-lvs-check/' - os.environ["COMMON_VERIF_DIR"] = COMMON_VERIF_DIR sky130_path = Path(str(os.getenv('COMMON_VERIF_DIR')).replace("\\", "")) / "sky130A" + print(sky130_path.absolute()) pdk_root = '/usr/bin/miniconda3/share/pdk' if not sky130_path.exists(): print(f"Sky130A directory not found at {sky130_path}") os.mkdir(sky130_path) - source_file = '/usr/bin/miniconda3/share/pdk/sky130A/libs.tech/magic/sky130A.magicrc' - shutil.copy2(source_file, sky130_path) - if os.path.exists(source_file): - print(f'successfully copied sky130A.magicrc') - - source_file = '/usr/bin/miniconda3/share/pdk/sky130A/libs.tech/netgen/sky130A_setup.tcl' - shutil.copy2(source_file, sky130_path) - if os.path.exists(source_file): - print(f'successfully copied sky130A_setup.tcl') + source_file = '/usr/bin/miniconda3/share/pdk/sky130A/libs.tech/magic/sky130A.magicrc' + shutil.copy2(source_file, sky130_path) + if os.path.exists(source_file): + print(f'successfully copied sky130A.magicrc') + + source_file = '/usr/bin/miniconda3/share/pdk/sky130A/libs.tech/netgen/sky130A_setup.tcl' + shutil.copy2(source_file, sky130_path) + if os.path.exists(source_file): + print(f'successfully copied sky130A_setup.tcl') elif pdk_str == 'gf180': gf180_path = Path(str(os.getenv('COMMON_VERIF_DIR')).replace("\\", "")) / "gf180mcuC" @@ -72,15 +71,15 @@ def setup_pdk_dir(pdk_str: str): print(f"gf180mcuC directory not found at {gf180_path}") os.mkdir(gf180_path) - source_file = '/usr/bin/miniconda3/share/pdk/gf180mcuC/libs.tech/magic/gf180mcuC.magicrc' - shutil.copy2(source_file, gf180_path) - if os.path.exists(source_file): - print(f'successfully copied gf180mcuC.magicrc') - - source_file = '/usr/bin/miniconda3/share/pdk/gf180mcuC/libs.tech/netgen/gf180mcuC_setup.tcl' - shutil.copy2(source_file, gf180_path) - if os.path.exists(source_file): - print(f'successfully copied gf180mcuC_setup.tcl') + source_file = '/usr/bin/miniconda3/share/pdk/gf180mcuC/libs.tech/magic/gf180mcuC.magicrc' + shutil.copy2(source_file, gf180_path) + if os.path.exists(source_file): + print(f'successfully copied gf180mcuC.magicrc') + + source_file = '/usr/bin/miniconda3/share/pdk/gf180mcuC/libs.tech/netgen/gf180mcuC_setup.tcl' + shutil.copy2(source_file, gf180_path) + if os.path.exists(source_file): + print(f'successfully copied gf180mcuC_setup.tcl') def run_glayout_drc(design_name: str, gds_file: str, pdk_str: str) -> list: @@ -98,7 +97,17 @@ def run_glayout_drc(design_name: str, gds_file: str, pdk_str: str) -> list: os.environ['DESIGN_NAME'] = design_name os.rename(gds_file, '../../../res/results/6_final.gds') - setup_pdk_dir(pdk_str) + if pdk_str == 'sky130': + path_magicrc = '../../common/drc-lvs-check/sky130A/sky130A.magicrc' + path_tech = '../../common/drc-lvs-check/sky130A/sky130A_setup.tcl' + elif pdk_str == 'gf180': + path_magicrc = '../../common/drc-lvs-check/gf180mcuC/gf180mcuC.magicrc' + path_tech = '../../common/drc-lvs-check/gf180mcuC/gf180mcuC_setup.tcl' + + f1 = os.path.exists(path_magicrc) + f2 = os.path.exists(path_tech) + if not f1 or not f2: + setup_pdk_dir(pdk_str) if pdk_str == 'sky130': cmd = 'bash -c "../../common/drc-lvs-check/run_drc.sh"' diff --git a/.github/scripts/run_glayout_lvs.py b/.github/scripts/run_glayout_lvs.py index c293d8268..bbd1c5b01 100644 --- a/.github/scripts/run_glayout_lvs.py +++ b/.github/scripts/run_glayout_lvs.py @@ -15,6 +15,9 @@ from run_glayout_drc import place_component, setup_pdk_dir +COMMON_VERIF_DIR = '../../../common/drc-lvs-check' +os.environ["COMMON_VERIF_DIR"] = COMMON_VERIF_DIR + # ########################################################################################################### # ########################################################################################################### def get_gds_netlist(component_name, func, pdk, gds_path): diff --git a/.github/scripts/setup_glayout_ci.py b/.github/scripts/setup_glayout_ci.py index 239709ddf..1d3cd89e1 100644 --- a/.github/scripts/setup_glayout_ci.py +++ b/.github/scripts/setup_glayout_ci.py @@ -54,7 +54,7 @@ ("mimcap_test", mimcap.mimcap), ("via_stack_test", via.via_stack, 'poly', 'met1'), ("via_array_test", via.via_array, 'poly', 'met1', (2.0, 2.5)), - ("ttp_test", two_transistor_place.two_transistor_place, 'aba bab aba', (fet.nmos, {"pdk": pdk}), (fet.pmos, {"pdk": pdk})), + ("ttp_test", two_transistor_place.two_transistor_place, 'ab', (fet.nmos, {"pdk": pdk}), (fet.pmos, {"pdk": pdk})), ("diff_pair_test", diff_pair.diff_pair), ("opamp_test", opamp.opamp) ] diff --git a/.github/workflows/glayout.yml b/.github/workflows/glayout.yml index 701e00f3c..f1b4036e0 100644 --- a/.github/workflows/glayout.yml +++ b/.github/workflows/glayout.yml @@ -34,9 +34,9 @@ jobs: -w $PWD\ $IMAGE_NAME\ bash -c "\ - mkdir -p ./res &&\ mkdir -p ./res/reports &&\ mkdir -p ./res/results &&\ + mkdir -p ./openfasoc/common/drc-lvs-check/sky130A &&\ cp ./.github/scripts/setup_glayout_ci.py ./openfasoc/generators/gdsfactory-gen/. &&\ pip3 install -r ./openfasoc/generators/gdsfactory-gen/glayout/requirements.txt &&\ pip3 install gdsfactory==7.7.0 &&\ @@ -57,9 +57,9 @@ jobs: -w $PWD\ $IMAGE_NAME\ bash -c "\ - mkdir -p ./res &&\ mkdir -p ./res/reports &&\ mkdir -p ./res/results &&\ + mkdir -p ./openfasoc/common/drc-lvs-check/gf180mcuC &&\ cp ./.github/scripts/setup_glayout_ci.py ./openfasoc/generators/gdsfactory-gen/. &&\ pip3 install -r ./openfasoc/generators/gdsfactory-gen/glayout/requirements.txt &&\ pip3 install gdsfactory==7.7.0 &&\ @@ -79,6 +79,7 @@ jobs: -w $PWD\ $IMAGE_NAME\ bash -c "\ + mkdir -p ./openfasoc/common/drc-lvs-check/sky130A &&\ cp ./.github/scripts/run_glayout_lvs.py ./openfasoc/generators/gdsfactory-gen/lvs_flow/. &&\ pip3 install -r ./openfasoc/generators/gdsfactory-gen/glayout/requirements.txt &&\ pip3 install gdsfactory==7.7.0 &&\ diff --git a/.gitignore b/.gitignore index 262145d5e..1bd4fc95c 100644 --- a/.gitignore +++ b/.gitignore @@ -146,7 +146,4 @@ cython_debug/ *.DS_Store .DS_Store -*Thumbs.db - -# glayout -*.res/** \ No newline at end of file +*Thumbs.db \ No newline at end of file diff --git a/res/reports/6_final_drc.rpt b/res/reports/6_final_drc.rpt deleted file mode 100644 index fcff66452..000000000 --- a/res/reports/6_final_drc.rpt +++ /dev/null @@ -1,3 +0,0 @@ -opamp_test count: ----------------------------------------- - From 10b6306c791c300848bb1fb3b883ab981b0cb56e Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Sun, 21 Apr 2024 17:45:20 +0000 Subject: [PATCH 19/20] yes --- .github/workflows/glayout.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/glayout.yml b/.github/workflows/glayout.yml index f1b4036e0..fac36ae64 100644 --- a/.github/workflows/glayout.yml +++ b/.github/workflows/glayout.yml @@ -23,9 +23,13 @@ jobs: - name: Checkout Repository uses: actions/checkout@v2 + - name: Build Custom Image + run: | + cd $GITHUB_WORKSPACE + docker build -t latest-glayout -f docker/conda/Dockerfile . - name: Test sky130 glayout DRC env: - IMAGE_NAME: msaligane/openfasoc:stable + IMAGE_NAME: latest-glayout run: | cd $GITHUB_WORKSPACE touch file_sky130.log @@ -48,7 +52,7 @@ jobs: - name: Test gf180 glayout DRC env: - IMAGE_NAME: msaligane/openfasoc:stable + IMAGE_NAME: latest-glayout run: | cd $GITHUB_WORKSPACE touch file_gf180.log @@ -70,7 +74,7 @@ jobs: if grep "\[ERROR\]" file_gf180.log; then exit 1; else exit 0; fi - name: Test sky130 glayout LVS env: - IMAGE_NAME: msaligane/openfasoc:stable + IMAGE_NAME: latest-glayout run: | cd $GITHUB_WORKSPACE touch file_sky130_lvs.log From 88c4899376444d6c65f92c5a4ed2c6f29adf0667 Mon Sep 17 00:00:00 2001 From: chetanyagoyal Date: Sun, 21 Apr 2024 17:49:57 +0000 Subject: [PATCH 20/20] yes --- .github/workflows/glayout.yml | 4 ++-- docker/conda/Dockerfile | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/glayout.yml b/.github/workflows/glayout.yml index fac36ae64..14640523e 100644 --- a/.github/workflows/glayout.yml +++ b/.github/workflows/glayout.yml @@ -25,8 +25,8 @@ jobs: - name: Build Custom Image run: | - cd $GITHUB_WORKSPACE - docker build -t latest-glayout -f docker/conda/Dockerfile . + cd $GITHUB_WORKSPACE/docker/conda + docker build -t latest-glayout -f ./Dockerfile . - name: Test sky130 glayout DRC env: IMAGE_NAME: latest-glayout diff --git a/docker/conda/Dockerfile b/docker/conda/Dockerfile index afb81bbb0..4274bd058 100755 --- a/docker/conda/Dockerfile +++ b/docker/conda/Dockerfile @@ -28,7 +28,7 @@ RUN wget https://www.klayout.org/downloads/Ubuntu-22/klayout_0.28.12-1_amd64.deb RUN dpkg -i klayout_0.28.12-1_amd64.deb RUN strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 -COPY ./scripts /scripts +# COPY ./scripts /scripts RUN git clone http://git.code.sf.net/p/ngspice/ngspice && \ cd ngspice && \