From 27d05e9b36a5453b6cddb3b5a03c73abd29f17d7 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 22 Feb 2019 14:51:21 -0800 Subject: [PATCH 001/324] Remove outdated SRAM layout virtuoso library --- .../lib/.cadence/cadence.signature.xml | 4 -- .../freepdk45/lib/.cadence/dfII/viva/viva.ini | 43 ---------------- technology/freepdk45/lib/.cdsinit | 47 ------------------ technology/freepdk45/lib/.runset.calibre.drc | 2 - technology/freepdk45/lib/.runset.calibre.lfd | 2 - technology/freepdk45/lib/.runset.calibre.lvs | 3 -- technology/freepdk45/lib/.runset.calibre.pex | 3 -- technology/freepdk45/lib/cds.lib | 8 --- technology/freepdk45/lib/lib.defs | 16 ------ technology/freepdk45/lib/sram/.oalib | 6 --- .../lib/sram/addr_ff/layout/layout.oa | Bin 38620 -> 0 bytes .../lib/sram/addr_ff/layout/master.tag | 2 - .../lib/sram/addr_ff/schematic/data.dm | Bin 3316 -> 0 bytes .../lib/sram/addr_ff/schematic/master.tag | 2 - .../lib/sram/addr_ff/schematic/sch.oa | Bin 48260 -> 0 bytes .../lib/sram/addr_latch/layout/layout.oa | Bin 39172 -> 0 bytes .../lib/sram/addr_latch/layout/master.tag | 2 - .../lib/sram/addr_latch/schematic/data.dm | Bin 3316 -> 0 bytes .../lib/sram/addr_latch/schematic/master.tag | 2 - .../lib/sram/addr_latch/schematic/sch.oa | Bin 33788 -> 0 bytes .../freepdk45/lib/sram/array/layout/layout.oa | Bin 16028 -> 0 bytes .../lib/sram/array/layout/master.tag | 2 - technology/freepdk45/lib/sram/cdsinfo.tag | 40 --------------- .../lib/sram/cell_10t/layout/layout.oa | Bin 42740 -> 0 bytes .../lib/sram/cell_10t/layout/layout.oa- | Bin 42740 -> 0 bytes .../lib/sram/cell_10t/layout/master.tag | 2 - .../lib/sram/cell_10t/schematic/data.dm | Bin 3940 -> 0 bytes .../lib/sram/cell_10t/schematic/master.tag | 2 - .../lib/sram/cell_10t/schematic/sch.oa | Bin 35484 -> 0 bytes .../lib/sram/cell_6t/layout/layout.oa | Bin 43932 -> 0 bytes .../lib/sram/cell_6t/layout/layout.oa- | Bin 43356 -> 0 bytes .../lib/sram/cell_6t/layout/master.tag | 2 - .../lib/sram/cell_6t/schematic/data.dm | Bin 3364 -> 0 bytes .../lib/sram/cell_6t/schematic/master.tag | 2 - .../lib/sram/cell_6t/schematic/sch.oa | Bin 32940 -> 0 bytes .../lib/sram/clock_nor/layout/layout.oa | Bin 27692 -> 0 bytes .../lib/sram/clock_nor/layout/master.tag | 2 - technology/freepdk45/lib/sram/data.dm | Bin 3156 -> 0 bytes .../lib/sram/delay_line/layout/layout.oa | Bin 22172 -> 0 bytes .../lib/sram/delay_line/layout/master.tag | 2 - .../freepdk45/lib/sram/dinv/layout/layout.oa | Bin 29796 -> 0 bytes .../freepdk45/lib/sram/dinv/layout/master.tag | 2 - .../lib/sram/dinv_mx/layout/layout.oa | Bin 29796 -> 0 bytes .../lib/sram/dinv_mx/layout/master.tag | 2 - .../freepdk45/lib/sram/inv/layout/layout.oa | Bin 29788 -> 0 bytes .../freepdk45/lib/sram/inv/layout/master.tag | 2 - .../lib/sram/inv_clk/layout/layout.oa | Bin 29780 -> 0 bytes .../lib/sram/inv_clk/layout/master.tag | 2 - .../lib/sram/inv_col/layout/layout.oa | Bin 30060 -> 0 bytes .../lib/sram/inv_col/layout/master.tag | 2 - .../lib/sram/inv_dec/layout/layout.oa | Bin 27812 -> 0 bytes .../lib/sram/inv_dec/layout/master.tag | 2 - .../lib/sram/inv_nor/layout/layout.oa | Bin 22812 -> 0 bytes .../lib/sram/inv_nor/layout/master.tag | 2 - .../freepdk45/lib/sram/mux_a/layout/layout.oa | Bin 27948 -> 0 bytes .../lib/sram/mux_a/layout/master.tag | 2 - .../lib/sram/mux_abar/layout/layout.oa | Bin 27716 -> 0 bytes .../lib/sram/mux_abar/layout/master.tag | 2 - .../freepdk45/lib/sram/nor_1/layout/layout.oa | Bin 31068 -> 0 bytes .../lib/sram/nor_1/layout/master.tag | 2 - .../lib/sram/nor_1_mx/layout/layout.oa | Bin 27804 -> 0 bytes .../lib/sram/nor_1_mx/layout/master.tag | 2 - .../freepdk45/lib/sram/ntap/layout/layout.oa | Bin 13668 -> 0 bytes .../freepdk45/lib/sram/ntap/layout/master.tag | 2 - .../lib/sram/out_inv_16/layout/layout.oa | Bin 32740 -> 0 bytes .../lib/sram/out_inv_16/layout/layout.oa- | Bin 32420 -> 0 bytes .../lib/sram/out_inv_16/layout/master.tag | 2 - .../lib/sram/out_inv_2/layout/layout.oa | Bin 30020 -> 0 bytes .../lib/sram/out_inv_2/layout/layout.oa- | Bin 29500 -> 0 bytes .../lib/sram/out_inv_2/layout/master.tag | 2 - .../lib/sram/out_inv_2/schematic/data.dm | Bin 3556 -> 0 bytes .../lib/sram/out_inv_2/schematic/master.tag | 2 - .../lib/sram/out_inv_2/schematic/sch.oa | Bin 30132 -> 0 bytes .../lib/sram/out_inv_4/layout/layout.oa | Bin 26940 -> 0 bytes .../lib/sram/out_inv_4/layout/layout.oa- | Bin 26940 -> 0 bytes .../lib/sram/out_inv_4/layout/master.tag | 2 - .../lib/sram/output_latch/layout/layout.oa | Bin 43892 -> 0 bytes .../lib/sram/output_latch/layout/layout.oa- | Bin 34996 -> 0 bytes .../lib/sram/output_latch/layout/master.tag | 2 - .../lib/sram/precharge/layout/layout.oa | Bin 23228 -> 0 bytes .../lib/sram/precharge/layout/master.tag | 2 - .../freepdk45/lib/sram/ptap/layout/layout.oa | Bin 13668 -> 0 bytes .../freepdk45/lib/sram/ptap/layout/master.tag | 2 - .../lib/sram/sense_amp/layout.oa.backup | Bin 26876 -> 0 bytes .../lib/sram/sense_amp/layout/layout.oa | Bin 48100 -> 0 bytes .../lib/sram/sense_amp/layout/layout.oa- | Bin 46460 -> 0 bytes .../lib/sram/sense_amp/layout/master.tag | 2 - .../freepdk45/lib/sram/tgate/layout/layout.oa | Bin 33076 -> 0 bytes .../lib/sram/tgate/layout/layout.oa- | Bin 33076 -> 0 bytes .../lib/sram/tgate/layout/master.tag | 2 - .../lib/sram/write_driver/layout/layout.oa | Bin 35228 -> 0 bytes .../lib/sram/write_driver/layout/layout.oa- | Bin 33628 -> 0 bytes .../lib/sram/write_driver/layout/master.tag | 2 - technology/freepdk45/lib/stream_all_gds.sh | 8 --- 94 files changed, 248 deletions(-) delete mode 100755 technology/freepdk45/lib/.cadence/cadence.signature.xml delete mode 100755 technology/freepdk45/lib/.cadence/dfII/viva/viva.ini delete mode 100755 technology/freepdk45/lib/.cdsinit delete mode 100755 technology/freepdk45/lib/.runset.calibre.drc delete mode 100755 technology/freepdk45/lib/.runset.calibre.lfd delete mode 100755 technology/freepdk45/lib/.runset.calibre.lvs delete mode 100755 technology/freepdk45/lib/.runset.calibre.pex delete mode 100644 technology/freepdk45/lib/cds.lib delete mode 100644 technology/freepdk45/lib/lib.defs delete mode 100755 technology/freepdk45/lib/sram/.oalib delete mode 100755 technology/freepdk45/lib/sram/addr_ff/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/addr_ff/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/addr_ff/schematic/data.dm delete mode 100755 technology/freepdk45/lib/sram/addr_ff/schematic/master.tag delete mode 100755 technology/freepdk45/lib/sram/addr_ff/schematic/sch.oa delete mode 100755 technology/freepdk45/lib/sram/addr_latch/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/addr_latch/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/addr_latch/schematic/data.dm delete mode 100755 technology/freepdk45/lib/sram/addr_latch/schematic/master.tag delete mode 100755 technology/freepdk45/lib/sram/addr_latch/schematic/sch.oa delete mode 100755 technology/freepdk45/lib/sram/array/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/array/layout/master.tag delete mode 100644 technology/freepdk45/lib/sram/cdsinfo.tag delete mode 100755 technology/freepdk45/lib/sram/cell_10t/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/cell_10t/layout/layout.oa- delete mode 100755 technology/freepdk45/lib/sram/cell_10t/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/cell_10t/schematic/data.dm delete mode 100755 technology/freepdk45/lib/sram/cell_10t/schematic/master.tag delete mode 100755 technology/freepdk45/lib/sram/cell_10t/schematic/sch.oa delete mode 100755 technology/freepdk45/lib/sram/cell_6t/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/cell_6t/layout/layout.oa- delete mode 100755 technology/freepdk45/lib/sram/cell_6t/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/cell_6t/schematic/data.dm delete mode 100755 technology/freepdk45/lib/sram/cell_6t/schematic/master.tag delete mode 100755 technology/freepdk45/lib/sram/cell_6t/schematic/sch.oa delete mode 100755 technology/freepdk45/lib/sram/clock_nor/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/clock_nor/layout/master.tag delete mode 100644 technology/freepdk45/lib/sram/data.dm delete mode 100755 technology/freepdk45/lib/sram/delay_line/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/delay_line/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/dinv/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/dinv/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/dinv_mx/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/dinv_mx/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/inv/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/inv/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/inv_clk/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/inv_clk/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/inv_col/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/inv_col/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/inv_dec/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/inv_dec/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/inv_nor/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/inv_nor/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/mux_a/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/mux_a/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/mux_abar/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/mux_abar/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/nor_1/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/nor_1/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/nor_1_mx/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/nor_1_mx/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/ntap/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/ntap/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/out_inv_16/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/out_inv_16/layout/layout.oa- delete mode 100755 technology/freepdk45/lib/sram/out_inv_16/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/out_inv_2/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/out_inv_2/layout/layout.oa- delete mode 100755 technology/freepdk45/lib/sram/out_inv_2/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/out_inv_2/schematic/data.dm delete mode 100755 technology/freepdk45/lib/sram/out_inv_2/schematic/master.tag delete mode 100755 technology/freepdk45/lib/sram/out_inv_2/schematic/sch.oa delete mode 100755 technology/freepdk45/lib/sram/out_inv_4/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/out_inv_4/layout/layout.oa- delete mode 100755 technology/freepdk45/lib/sram/out_inv_4/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/output_latch/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/output_latch/layout/layout.oa- delete mode 100755 technology/freepdk45/lib/sram/output_latch/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/precharge/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/precharge/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/ptap/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/ptap/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/sense_amp/layout.oa.backup delete mode 100755 technology/freepdk45/lib/sram/sense_amp/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/sense_amp/layout/layout.oa- delete mode 100755 technology/freepdk45/lib/sram/sense_amp/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/tgate/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/tgate/layout/layout.oa- delete mode 100755 technology/freepdk45/lib/sram/tgate/layout/master.tag delete mode 100755 technology/freepdk45/lib/sram/write_driver/layout/layout.oa delete mode 100755 technology/freepdk45/lib/sram/write_driver/layout/layout.oa- delete mode 100755 technology/freepdk45/lib/sram/write_driver/layout/master.tag delete mode 100644 technology/freepdk45/lib/stream_all_gds.sh diff --git a/technology/freepdk45/lib/.cadence/cadence.signature.xml b/technology/freepdk45/lib/.cadence/cadence.signature.xml deleted file mode 100755 index 64bab7f4..00000000 --- a/technology/freepdk45/lib/.cadence/cadence.signature.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - Do not remove or change this .cadence directory signature file. diff --git a/technology/freepdk45/lib/.cadence/dfII/viva/viva.ini b/technology/freepdk45/lib/.cadence/dfII/viva/viva.ini deleted file mode 100755 index dfde08be..00000000 --- a/technology/freepdk45/lib/.cadence/dfII/viva/viva.ini +++ /dev/null @@ -1,43 +0,0 @@ -[browser] -orientation=horizontal -pathlist=/mada/users/cpeters/Working/simulations/latch.run1/si.raw, /mada/users/cpeters/Working/simulations/out_latch.run1/si.raw, /mada/users/cpeters/Working/simulations/ms_ff.run1/si.raw -pos=@Point(1118 92) -size=@Size(214 928) -splitter=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\xc0\x1\0\0\0\x4\x1\0\0\0\x1) - -[fullCalculator] -_bufferState=@Invalid() -_funcPanelName=undefined -_funcPanelSplitter=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x2\0\0\0\xb3\0\0\x1\xb4\0\0\0\0\x4\x1\0\0\0\x2) -_funcPanelType=FuncListType -_keyPadSplitter=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x2\0\0\x2\xf4\0\0\0\x64\x1\0\0\0\x4\x1\0\0\0\x1) -_resultsDir= -_signalSelectionHistory=@Invalid() -_splitter=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x2\0\0\0\xb3\0\0\0\0\x1\0\0\0\x4\x1\0\0\0\x2) -_testName= -clipSelectionMode=true -defaultCategory=Special Functions -displayContext=true -mathToolBar=false -plotStyle=Append -pos=@Point(582 186) -rpnMode=true -schematicAnalyses="tran,ac,dc,sweptDc,info,noise,rf" -schematicToolBar=true -showKeyPad=true -showStack=false -signalSelection=Off -size=@Size(866 834) -trigToolBar=false -userButton1=user 1, undefined -userButton10=user 1, undefined -userButton11=user 1, undefined -userButton12=user 1, undefined -userButton2=user 2, undefined -userButton3=user 3, undefined -userButton4=user 4, undefined -userButton5=user 5, undefined -userButton6=user 6, undefined -userButton7=user 7, undefined -userButton8=user 8, undefined -userButton9=user 9, undefined diff --git a/technology/freepdk45/lib/.cdsinit b/technology/freepdk45/lib/.cdsinit deleted file mode 100755 index 14e60079..00000000 --- a/technology/freepdk45/lib/.cdsinit +++ /dev/null @@ -1,47 +0,0 @@ - -envSetVal( "graphic" "drfPath" 'string - strcat( getShellEnvVar("PDK_DIR") "/ncsu_basekit/cdssetup/display.drf")) - - -loadi( strcat( getShellEnvVar("PDK_DIR") "/ncsu_basekit/cdssetup/common_bindkeys.il")) -if( getShellEnvVar("MGC_HOME") then - loadi( strcat( getShellEnvVar("MGC_HOME") "/shared/pkgs/icv/tools/queryskl/calibre.OA.skl")) -) ;if -procedure( prependNCSUCDKInstallPath( dir) - strcat( getShellEnvVar("PDK_DIR") "/ncsu_basekit/" dir)) -(envLoadVals -?envFile ( prependNCSUCDKInstallPath "cdssetup/cdsenv") -?tool "layout") - -printf( strcat( -"---------------------------------------------------------------------------\n" -"Welcome to the FreePDK 45nm Free, Open-Source Process Design Kit\n" -"\n" -"This initiative is brought to you by the Semiconductor Research\n" -"Corporation (SRC), the National Science Foundation (NSF), Silicon\n" -"Integration Initiative (Si2), Mentor Graphics, and Synopsys.\n" -"\n" -"This version of the kit was created by Rhett Davis, Paul Franzon,\n" -"Michael Bucher, and Sunil Basavarajaiah of North Carolina State University,\n" -"and James Stine and Ivan Castellanos of Oklahoma State University.\n" -"\n" -"Contributions and modifications to this kit are welcomed and encouraged.\n" -"\n" -"Copyright 2008 North Carolina State University (ncsu_basekit subtree)\n" -" and Oklahoma State University (osu_soc subtree)\n" -"\n" -"Licensed under the Apache License, Version 2.0 (the \"License\");\n" -"you may not use this file except in compliance with the License.\n" -"You may obtain a copy of the License at\n" -"\n" -" http://www.apache.org/licenses/LICENSE-2.0\n" -"\n" -"Unless required by applicable law or agreed to in writing, software\n" -"distributed under the License is distributed on an \"AS IS\" BASIS,\n" -"WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" -"See the License for the specific language governing permissions and\n" -"limitations under the License.\n" -"---------------------------------------------------------------------------\n" -"\n" -"Done loading FreePDK customizations.\n" -)) diff --git a/technology/freepdk45/lib/.runset.calibre.drc b/technology/freepdk45/lib/.runset.calibre.drc deleted file mode 100755 index 35186ce6..00000000 --- a/technology/freepdk45/lib/.runset.calibre.drc +++ /dev/null @@ -1,2 +0,0 @@ -*drcRulesFile: $PDK_DIR/ncsu_basekit/techfile/calibre/calibreDRC.rul - diff --git a/technology/freepdk45/lib/.runset.calibre.lfd b/technology/freepdk45/lib/.runset.calibre.lfd deleted file mode 100755 index f770b0a1..00000000 --- a/technology/freepdk45/lib/.runset.calibre.lfd +++ /dev/null @@ -1,2 +0,0 @@ -*drcRulesFile: $PDK_DIR/ncsu_basekit/techfile/calibre/calibreLFD.rul - diff --git a/technology/freepdk45/lib/.runset.calibre.lvs b/technology/freepdk45/lib/.runset.calibre.lvs deleted file mode 100755 index aa47aacb..00000000 --- a/technology/freepdk45/lib/.runset.calibre.lvs +++ /dev/null @@ -1,3 +0,0 @@ -*lvsRulesFile: $PDK_DIR/ncsu_basekit/techfile/calibre/calibreLVS.rul - - diff --git a/technology/freepdk45/lib/.runset.calibre.pex b/technology/freepdk45/lib/.runset.calibre.pex deleted file mode 100755 index a1f8b6d9..00000000 --- a/technology/freepdk45/lib/.runset.calibre.pex +++ /dev/null @@ -1,3 +0,0 @@ -*pexRulesFile: $PDK_DIR/ncsu_basekit/techfile/calibre/calibrexRC.rul - - diff --git a/technology/freepdk45/lib/cds.lib b/technology/freepdk45/lib/cds.lib deleted file mode 100644 index e3c63316..00000000 --- a/technology/freepdk45/lib/cds.lib +++ /dev/null @@ -1,8 +0,0 @@ -DEFINE analogLib $CDSHOME/tools/dfII/etc/cdslib/artist/analogLib -DEFINE US_8ths $CDSHOME/tools/dfII/etc/cdslib/sheets/US_8ths -DEFINE basic $CDSHOME/tools/dfII/etc/cdslib/basic -DEFINE cdsDefTechLib $CDSHOME/tools/dfII/etc/cdsDefTechLib -DEFINE NCSU_TechLib_FreePDK45 $PDK_DIR/ncsu_basekit/lib/NCSU_TechLib_FreePDK45 -DEFINE NCSU_Devices_FreePDK45 $PDK_DIR/ncsu_basekit/lib/NCSU_Devices_FreePDK45 -DEFINE sram $OPENRAM_HOME/lib/sram -DEFINE sub_sram $OPENRAM_HOME/lib/sub_sram diff --git a/technology/freepdk45/lib/lib.defs b/technology/freepdk45/lib/lib.defs deleted file mode 100644 index c2a6982c..00000000 --- a/technology/freepdk45/lib/lib.defs +++ /dev/null @@ -1,16 +0,0 @@ -DEFINE analogLib $CDSHOME/tools/dfII/etc/cdslib/artist/analogLib -ASSIGN analogLib libMode shared -DEFINE US_8ths $CDSHOME/tools/dfII/etc/cdslib/sheets/US_8ths -ASSIGN US_8ths libMode shared -DEFINE basic $CDSHOME/tools/dfII/etc/cdslib/basic -ASSIGN basic libMode shared -DEFINE cdsDefTechLib $CDSHOME/tools/dfII/etc/cdsDefTechLib -ASSIGN cdsDefTechLib libMode shared -DEFINE NCSU_TechLib_FreePDK45 $PDK_DIR/ncsu_basekit/lib/NCSU_TechLib_FreePDK45 -ASSIGN NCSU_TechLib_FreePDK45 libMode shared -DEFINE NCSU_Devices_FreePDK45 $PDK_DIR/ncsu_basekit/lib/NCSU_Devices_FreePDK45 -ASSIGN NCSU_Devices_FreePDK45 libMode shared -DEFINE sram $OPENRAM_HOME/lib/sram -ASSIGN sram libMode shared -DEFINE sub_sram $OPENRAM_HOME/lib/sub_sram -ASSIGN sub_sram libMode shared diff --git a/technology/freepdk45/lib/sram/.oalib b/technology/freepdk45/lib/sram/.oalib deleted file mode 100755 index 21ffef89..00000000 --- a/technology/freepdk45/lib/sram/.oalib +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/technology/freepdk45/lib/sram/addr_ff/layout/layout.oa b/technology/freepdk45/lib/sram/addr_ff/layout/layout.oa deleted file mode 100755 index 60a18e100c50f9e316fa4973e8146462d7d287dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38620 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 R`SsbPr$-4k%>whFf9Il4~_vQ^UW()yL~ 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 diff --git a/technology/freepdk45/lib/sram/addr_latch/layout/master.tag b/technology/freepdk45/lib/sram/addr_latch/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/addr_latch/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/addr_latch/schematic/data.dm b/technology/freepdk45/lib/sram/addr_latch/schematic/data.dm deleted file mode 100755 index 6a4c9f974aa739f64fb6a78ecaf78057ad3b89fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3316 zcmeH~J#W)c6o#)8r{$wiC;_#F3M&*yC9rJQNU&9+AR$7DD6qQJv64t8i4v%&)PaGK zk&&Omkb!}r0|P?`egGo_BLeQR-`7MzL4pA~?plvF+gnj~U{jgu zqFPX%XFI;_cvsOw{~G+b*?Rgc=r*Ew*$L`l=(}#P>{;3heA~6%Y(Z^^1bv&oSCKYS zv{p2dx+uPsqbbxhcnmxa&VVPtB6t!!1BQ2=Y;^=ZAMUn$$j}=|nhb~o%I#H_@wZd%`Hkxs* z8@1G}N~PJ;Ns4)37Yj??9L%TOj~SQaO(tA)7+?;}a{|WY!5OrhAoqQbjXr>T;79Ni z_yy!Az!cUgg0tWy9Q4&tzRS*!;Lzv28Aaw-jxXZ(G(fg9=41Y!2*`8d6_NK$yZz)5 zrOzp`jr1X>_CR|gGJHYtQCCCSId#9*@m?{sujw!J@_NXY4tj!vW&3MMT{=f4BB|oqB diff --git a/technology/freepdk45/lib/sram/addr_latch/schematic/master.tag b/technology/freepdk45/lib/sram/addr_latch/schematic/master.tag deleted file mode 100755 index 26be1bef..00000000 --- a/technology/freepdk45/lib/sram/addr_latch/schematic/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -sch.oa diff --git a/technology/freepdk45/lib/sram/addr_latch/schematic/sch.oa b/technology/freepdk45/lib/sram/addr_latch/schematic/sch.oa deleted file mode 100755 index 74b3999fe5611c285ded58897077111f8a0c22d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33788 zcmeHw4RBq@b>6-A{el1q5d0DUL_QD@MNlM&e?Sr`0U$_GHb{YwKc;LtAPB%BY>Jw9IQ5&VH7X~G5fe)pWa=j`s;-Lt#*-go)P_FCWbhCGGG?4;JBF)CWy<4N#Y&E6mbnPO}vka=aDWaRuJbC7Z81>j}a5Z6tRq0L7Y!qK&&J#Bvuof zi7mu?iCc(UiR)O7^~5O^n6&IOMtVZ&h>sJ0&2XCZG8*tSaTN{p%pxYBVUMm1=^Prx z!h0-GdP7J*)fVExdqRAsJH$735_g4|-xK25{UILx9C0c{mGA6VLVDt>m-Ew4Tu#52 z3+eZNE5r=TFMITdY)}0~$Yh?7$-JkTKz4j42(L(Pn07i!{xT|EO5&Lw=8hW z0{_r0(A?0xX`->QDKkEq89Xw6a-?98xUHD(^ltZ>n;RNi8ycHCc}4Wyq{l{&KYD6l z^61D|OXI*JLqn}iO#>~>89N(jZD?v}DpKhED_aBoY(=&Yyk8L?wDUoWrPke*NNk}h z1aBd+ny6*!V$w^9ONm@Yd0M{*Tu*BqA1AH#e3G=*^=Z;t-_IjmPMmGMU&VCMb^jvr z7ZaBdmlAIyE+Z}{t{|=?t|Hz}Tuod<%n)mcYl+xxA=DA?Ag&|cNnB5?CvG6#Mchc- zL~I~#CN>hAh|&E{EBS52c47yylXy4r9%89|66%B`SPo+ejP);;)Yund36AA@nMLgT zutZ0{!(I>jJoGj6GxRa^FZ3<+EA%P!r`s%|KVeI>!Xmar*k@o*y4oW4m>G*T7S~#= zwOD8I4vW|>-Dz>X#d?d_Hr-`$qs2`Y8!T?N*k}=hrrBbP#a4^hTD4p3u!wPpv4?He zy%x7v+-mVYi}zdXve<30$Kp1Ny%x7y++pzni#sjeY(Skp$^f77DT|-B2xo$=1m=eCaMzzF0M zT)zgJ+q=TPR(>s@9PfAJ8qoPYFLw`7`8aOTLFM3fw&0KDceS6+P^OD`n22^jke=BP z;|@XTGL8zz4^Bms{jmqMhwd?<-=V;2Gq!>2m&JUx$rXIasU47>`tsmYXU;K`9~2QG0Z$A@>B*vRAw&rZ9?MjttTY~=XV32*qwXGSMS zwhxa^jZbz@OpFii8=M%K+-A<}xa=o3Rndq+=9j14~4KREQIk*O08OpZS~;qBhGcmF`|$jQ;6krM+uCPzm4dq3UU z*3iG}p}hkK_VqQKc?gC|CZ8b-$_Mvt>dlPuGu=eS`Cum8c_ZQj7Zw%(rZf&T97 z_TBro?R>DWci^GjeGd;jkbP)>zc)U(|M=v{iK)rap{bE!?}6RDH8#zd;#zNNc<11W zZI7Oq8b3Dr)sdc_@l(bE^o@UIWb$A!@i2+~6V@WS;)sV)h*s}Fujy@8!7r8D8?|#J zY4nC|TCw8_afJK5$i zKPTJlWSgCAvy*LhvdvD`7R;7ovy*LcvMo-wB`mCyZE>0~>dY-gu8b!=jkwP z@0jy7+l~$%e`I9a_@l?CyrJ>q$47>yMo*4TJq8E1e`0tLV`I$D_YNH$IW{;oI<)=N z)a0Ng3QhaK$oR35smaHRtv!6A;gMsu(`kk6m7rMP(D0G0xf<6z<}PswzHr!;Vq}tD zRrBEMq~X`$#_8`%&ihIb-QP&h8`O86c!BsPahMq#=DI=UD1|x7T_h?U$txgd9Nxme zG>`coRdB`2qpE>-&cERQ+|LAk!E?b6f_(6&!K=aF1@mG{V{2o-9orahj~|Us#vhNL zj(;ou`|;=E-;ci-|BLvA_|M|+$1ldcL_ATQSe00pXiVIb=uPZS984TZj3rJbPA8s9 zJeznS@p2-ccs21x;?2Z+iHnJJa&a<~+?ec4_9pw2hmuE=Q^{QNo5^RA&nI6>{wR4i z`Fip~@}1=S$#|+N^{Lc>)RENj)K^o#otjB~FZC}||0Z=N^;+t`rrt{ZJoT&8y!6ua z+H^zup7f4%HvJpvFQ!kXr_uCRZ}$seYDE-=09@Cs?A z)8$(@Hx}qJHGBkl$-fxS4`T5|GLc=0KynZ_PR_u@C`unr^e~twivPmY8ezMOOr`m}5685M26#Ow0?CUZTuPS9s->-hygx z;fAH&lI7mARo==qc9$aKlGoh1zTR{9;|?2*EHTVl?QTWgEXS&n*Wp_l3xBx7QrzdU zkHkF}jf?1fC4W)sKAbkZQNIJQM^UGhHb_`-DT`(tZARsD8anXVQxb`cRl`)SzzJ#VF7k(LNiwDS>1^u)&GQKj5GvGo*ZM&D zKEvzJ5}zYJPkfR13h{N~o5Wub<1BERh&m&vo~00WLco1q1lR$g6iUx9^9@ta-4W&C z(xuREsol+4zvmbKxhr`T#g8RYW%FFGaCFLZ6Cx6X*D=+EPT0|$Fueg2#=So1fa&fq zZ*}R<7!2wkE}`+}%Aac;8SOVW>*v)x>V|4J`F$=ERlOTVI@_*oxNGC4 zhRuyl%`L5M?H!$W-*fMlt@qvE)!nnLcRMnmzL=lT5OK^KI)shk%2yYw(6-=%RdHjL zzS;yDZqD*lAj}!9=<=#xb8qd6&52d1g%zta_b#ZbTzBW9ds>!mylv&}HR*ZfYv%vX z9ZRZ~udn|0cQz%L^)zqUe&1bf-rY_2w=S;jZtrN^+SS>xt#^}Y4MVO7ah?bLto3ue zlYn6YL%B9E9Os{v=m!7BQJcaa^j)H^=gj1=jsBPh_+t0Y4ab@Mo}NF;AC}z5t9Q~* zU9Z2EU)KB0^4Id?SVtjT@BM&iCyx}^u?XLS3*V~?Iw`hB+oul*bd=^~gRmD^f%@11JMcYOD zI_z-}GVU0z&2YM&^hTlvVk_xR;uc~Tv6r}$sPcSVk;S|M(CoP)F4h2KfqmUk_3vYU z!h#uNhotktMymT<8fR>0tfH{5DgUZwnj*5PWb@~OSlbuST`j_Sf`6Kb8bSXWh_;0E~&}g6F z0DI_O41G?X)yboZYijE^;eAI2#|z^A4!VhaG2gAJLx%V{BQJ|zGbdDMOf(}R@~Ew< zt%}*-B5RcQ5R9jQc?0j}sUQA*uX{?(lXJD+iLM8t>l(M_v+AoKYkh-f0SI_Eb}j;k zRYBEkbRl7h6OEgVtYD3$gD=ytk^X4?<;P-DK=g?LF;3KjfF$V@QO~8zNC)iXF=CvU zASQ`vqI)=xy0O6We<@y9y&72o-8bkYy@l9IJV-oBJVktx_!RLO;&a3oh!=^vpKzG< znjq$gPZ6IZsy_O?=_;0g6+0S}d8JVPQvFYUGm1)A3irX57KBmxQuNVKtneH_<#f)& zu4Q=rlMb+(x?a=|W2~I<>itoFZSZh7aPsJu@wh#~4lC~HSZe+vuCE;(1QmKMIUgqT zO5%?!)4#O%xFuX`F-pH;*WR*-+YX3lN!w}R885D5oz7bm`SZX0^{+o`@m1r&kAqJC zDx@L*MT_?t?@tWTzgF0_8H-tqea7puO0G6MW!PhANnE{>$ykj3?SRbT8; z5HuE8TrF!g?48ZRl;P2>5$sfc3%=V)_#8O8nVY3u#n+oH7Ut@ZZJ?gKP0 zM%!KUX0+Wkf6CCB|Fr&6xvq5|@GJ-HGR|X~FZ)REBWj-1@9z(juX%Hf^waDhvQsJ4 ze1!3X0RM(SKUsL*taP*K(e?GLkDk+oT0gl*j2n$%bG27Im$PSTe5!`0YtH!jjQQ#R zYiaX_@Zq4pZ`fcFz8(A@TLhi7_>#qg=I@aPa|HZ6{5tSOi?7-F_w0JVU4uO6)5Zr4 z`7RqIorXr{F<#2bD;F+Wa(m64cWrKJvG=4I+_m*}nN`c+$i1ox_T@aU=M0OZx7L&) z5BX!~le?O_eEVC7VDkg59t25D~RdWd|AQtDn}Q~(@We*>?7_Y>i*fwq~9birasN1t4L>v zbwt<^L3SvGvSlNTVxbh4k{4g^rG#2O`NuA+g8DY>Xk^|Zf}3B^*RCZheX!PEN!bw8 z$JfSVu^sXHpgvezza#MD#tC)=8|pX2{rHaf2Blv7)>2j*)GB>oTZU_imOiKWySC^)WCX?zy4TS;{xg+@fHCgo8f0cc z>qz-Sjh7GW`Q^>db784V`wi_^w13flMshcbG}m>DYh23j!2e-6Bz<%za&MRB10|pz zk>88{-b8*-elqG0)0Ee9;^=cl6-4cRqki%*D{_=L+kPa+bn>rHlKv*~DdN*aJ-;~5 z`pB-OQ2tc&rf6X)xf|v8vb`jK-5sTb0LrVb@PYm>l*?0Gm@|5|=;nLqhKaTAv{M)0 zC!Fn=`G@5vZq^^jHtZ&aal~r;y@A?Y?_Xn#!+xd8r}SFqsNm6Y9v#0@sPU@&-e*P^ zBN@hNm$5N7$lTYq_4VpA4{z&6<9${hk$b&VB2Lr4uHF-^G18 z*p)T|`?7#>aoK$_HpX1-_vXs~vREbSaapBqg3x&0NIz6#y0G?*=FiI|{j>IA@`F+! zzbgA`za>AceVX#0?Y)IO3!>jMoMi>ZxUrcaKFH@MRv z*s-I&KCnA_^>KU4!hW|FvpanDYtJ1BUVOvaAiiNoeGre^L}Ur$?w+3|jho1hwQD!v z)SkM!2d~zNT|eI71;GYyLp)}GYfXWrF`e2=vCF$Mq!G$Kir{LWKVg#~*5=$s`j}77bH`v-8&+1wYcN$_X|4%J~{(;4Z&GF&6AlCNx8GgZdInx7tqKN)$I|m=n z67g(M&lE-LnPHWstFSac=oO7;j^INNo;`ln$_9iSo;$8L8mM%@Lq_8|_8ZtE0m1)M zBJ|-pXr;sRPv})X#fb8M#$+C|G=qk}WvKjt$gkcIv4v6j0%wf(j>V;x?k%H%DmU;i zjmCA9N9l?Y`oC*&tEKrDh7TCZ4nW9DFA(j9I^)?bP;~?iTLCi`@f;VZ>p;=Ph-btr zE!}@KyuV|Rx^G3sl&;dMP5#{J-d8X_fS4&aj(Rd4A54SDHPy=52KOXXEL zR7aIt<%K=)OdkmQLqFOR*hj1*f)9J3-GQ$WpCGDzQ4iD$2>al=>IuE7pAd3tPh3~M z!T-9+V-5KYLw7I1cuEgcdfDs084vd!{-@#R4a*HNUYA(Jm<4~K>G~VPm4=W^DUE0Yjw!G_Qk?>#`FNb^a?}|6jabgY~o7*8aJrMMXw`_|{O-U#95XZU)!6 zC?4qIzbIXN?Z(bSjWNqL%v(p%q1M^*E!J{LmsPzGs_g8O@LWL!*1kvgK<4UsqV|`{ z2mPZsC|`ZA0{s;4xD+<&-bg6+n8^ z%!fUq%y!uPfxC;bBPJW+hR_FRc`&!rEdcXAIez{+5-|EZw zclr%}o4>{1=6}lH;~(?~{4e;&{3-uy{acv;GaonlLkG>b7@PMaOwRZf%JZlKOIze`#mi)L3V4;8efV_WTsQlXoSIZU;vFhNtY?Ax+06J&9r8# zP}args{J#u?2>HVnV6L>yT+h;wOud2N)2Pi|8L3YWx>K@-!)eM|nQeElb+sbt@f788YQT7 z^$jYkYpoVN<*wSM$kYUtt}=EBMGPukp=JUrM2~g)Ve5nP1DX#p4`0juV%;CU*6;5q zBcB=SJyiKG_7lmm z?1g2YrXRJ7(#?jlq2$z`P!F`(Z28Rgo{GvZMS2dR=N-x~$Bat#-{^PO)Sva9%f(1R z^?X_NDur5~pp6jJAGd^LVf`ZceauHRlif5F`hjV(F6#OymF6+@{z>fq_}Am#j{l!9 z<2;H{-2c>$#eAIG$93HjALqsIV!IFK8qY!=hm0ktGelm9NPo2eJGn8jI^3tdDvyCq)kiDgUw(o%qGvhI$#^F<>HQoy4V9lbm#*a{T)p%0+Dpj;# zp_@BFeo`47FVvimx}%755mbM* zm);A+_YAP-QhrKzt^HK*9nZGz(eE^rk@|D={bZG^iUnCr)H-Dq={jN~v5VM8)ccM5 zNFO8~A|56V6Tis{>pK9lQz_JV(7H$CLUbv)QvCI709{vm%thN@O~=*78Op$NAg?eQ$} zIpXug7l}V2o+Z9cyg<}G;~mnfS1HsuijE(RBcaks&-))H50 zI7Y&HyL0a4LVlY;kyCX z)z8@&K2i6#_41(h(K4y#8Re&b`zrI-K3V63<|BDuK_eM$lgByM?^wHCK0b`WfV3_>Gr!UCaiilx N<+xdVWP7du{{iB34MhL| diff --git a/technology/freepdk45/lib/sram/array/layout/layout.oa b/technology/freepdk45/lib/sram/array/layout/layout.oa deleted file mode 100755 index 8af1983b139981d33e6597d2c27c1bb714b635f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16028 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 C3+3Ga diff --git a/technology/freepdk45/lib/sram/cell_10t/layout/layout.oa- b/technology/freepdk45/lib/sram/cell_10t/layout/layout.oa- deleted file mode 100755 index 7f81fccb4585a27347e795518a471aac8af702fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42740 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 aKP$?GA;riIiob8LAZM#e)ic-R|Mf2ba0Af* diff --git a/technology/freepdk45/lib/sram/cell_10t/schematic/master.tag b/technology/freepdk45/lib/sram/cell_10t/schematic/master.tag deleted file mode 100755 index 26be1bef..00000000 --- a/technology/freepdk45/lib/sram/cell_10t/schematic/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -sch.oa diff --git a/technology/freepdk45/lib/sram/cell_10t/schematic/sch.oa b/technology/freepdk45/lib/sram/cell_10t/schematic/sch.oa deleted file mode 100755 index 8f2d4cd010c9f8d4c4f6af2c60944b0a733275af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35484 zcmeHw4UnA0nO=W0JM*n}_D?GbgtUm!9}+?=Gy5wz8B41bNVWvBBrx3JNQ-uj*0}sT8^|ROz)1&^Luix%|`|Y>ie!uRXZ&vqiTpBsI$0@j>D*7#?AIJ{9-~v6%`wG$#}|NQFP04e6&T zz?#(|UAR8rx*M6lF5uox0q?&p;JTdwSKi6=-2qSa27CbnZb9x^kI&}YnKQ9PpDxw_ax={n%XD*4bqu()yyxeuI!KTV-0+)fsZxt zu?9ZYz{eW+wbejtOY3zbxm-RwJeuvjXZXJUk|wHb#k9g*=~`P`a_ud-)-}vg`Ua*4 z2Zr|FziV`F|6p5g*S&l8wCD4?+FG-Ax2wG+-;$rgF#EMp=l=JypKk_j>w-jX(TGv-It@V8k(;4D) z>-|QSD_{4|A$=}!9`Q2b<;3~KD~Jn-3yICdD~XGUR}r(s#l$7VrNm{#<;1IrD~KzJ z*AQ0`uO+S~UPo*pUQf&s^ThJ~PCMxx#7<%taSibX;*G>g`y>oEieNd6B{0^%SW;sd zj-@x2>sZ2Ld5$d<><)W9?DJr2urt^g><{q|NzhQB$#ZOqg$>Jw1uCut_Vz`XGb&S3>v< zIFCd}U zRiTvyQl%h;cv=pXm_u4ngIzJ{9Hq>c{vZMACsqhro)*AEWdJG8HV zXnf4|-SgRj(f*Bn1LMP^>qkb0dw2GZ^p9>Z&voCx==lEOvEiQn&-d;h9QSkwN$wcv z|58ui=Dt#5%fLN8J+^0W&%oHoVDAIldiVTx|M=J~qr>}0+}51Cb;FL^clGq&H?XIF zY}d`B{r%f|KHc8Ya_iRHcI>)i=PfN`5A3^Vc+e3#*w% zbG6;(dLf<{WngG*d{cjKU;pT4yIbnE=H1p-x3$e}ZLh$!Wm^ztlY~*)b#}FMSSxO8 zhXdQ*p*{Ue-R7LTr*~{%Ps<%WJ*r{1f#~dRvD=(yky~yp6|q}qak1OB`Brfl7#
  • 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 Zbobs)mrR`QIG*k}gbcIc`Zg>|{C}MM6s-UN diff --git a/technology/freepdk45/lib/sram/cell_6t/layout/layout.oa- b/technology/freepdk45/lib/sram/cell_6t/layout/layout.oa- deleted file mode 100755 index 43f013e8aca43d8392fd12011fcd8f85026a7e07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43356 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 TbjR^@$01~x4cE7EN#g$l?A**B diff --git a/technology/freepdk45/lib/sram/cell_6t/layout/master.tag b/technology/freepdk45/lib/sram/cell_6t/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/cell_6t/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/cell_6t/schematic/data.dm b/technology/freepdk45/lib/sram/cell_6t/schematic/data.dm deleted file mode 100755 index c2d60e51913576b477a426006e9db3754acd8116..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3364 zcmeH~yKWOf6o$vQgiE*ugAyRHGJ!Y}SoX#gbdfNGh+r%Q(yrq5%CTf@%Z7+ZDXHk7 z=20kIP^3taf+7VEzynYs;2h8YZ_G+AQXnXNr1dv5XD(-F&;GNnKfD=BnS`MgrEo^B z7#gmDb6^rofwSNQcnh2aZ-A%3DKHEE;Do4iy(a1%@D;cV{(`+l-NbFd!NL{L(VG#Q zhoAFTY_s9=28 zI4R1oVCIbL=JLf{-n|b`wBBsAUcd3WTS0Rv@6~<3SSWZ)t|KL{m@DK8;e=99sd%^W zb5+}}XDwBpR3oX2kSlXmJBgjMFz3Mw;52vq>0T%iK9)e%NZ{T;3p8!*sCk@VkcM#}ax*P9k&oq02gJYU&Ajr;is zvfa)){{2@wpy|OB!8_9*JRBv?3y;JVd~cTW|yf{QV~<%;2Y77 zH!&~{GT&3EPk@sk^Edk5P(P`s)K})EYMdIsPnnmt^(dc__G~^j@fwBW7&i0#6FjQH zs>Sqk?>V0RqxZ}4ea!P2+ynQ)Ly+@~BKN0{{-dCAGS=bzz|-y1ul%5sNa4M5$g92=#Gqx@j~g;xr;8-CF99(9ADQhHLnCxa_bpRIcv b&maFe&&cj&+kIuI`=Z2FlS^Z+%m1U_nb4A< diff --git a/technology/freepdk45/lib/sram/cell_6t/schematic/master.tag b/technology/freepdk45/lib/sram/cell_6t/schematic/master.tag deleted file mode 100755 index 26be1bef..00000000 --- a/technology/freepdk45/lib/sram/cell_6t/schematic/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -sch.oa diff --git a/technology/freepdk45/lib/sram/cell_6t/schematic/sch.oa b/technology/freepdk45/lib/sram/cell_6t/schematic/sch.oa deleted file mode 100755 index 51940d44084e1799be7ee95efc7ac7e11308c35b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32940 zcmeHv4QyQ3mELG|&cz7hGPDJ_xNSg0;>-*?abIrrXk&$)l^4WHQF7zV*$AorvN8qHgzb8CsW z6Dx=*;;qCqaU(H9Tu-bdK0wCRq_e~vF;A=^hRmNNridA06){K56KjaI#AU>KVjHoY z_*vrp#Lp4$U^|+L(`qnj$!C=Ggz^!eBL150BF!pzmE>2FGA^oklBLgm_c%UKH*bT?gc8;CB|PMeK_g!ttP%k#d?JWpOGRG z&ocg9=C34uhT|~0!t=YI>1y9gtoM&&@$WNU`6`*Nb}RlS-ju*i3EY&xO$pqTz)cDK z|1N>HmbQB)qNuenK3NzzG=6NjB#;W*G2I#59<;T!L>(zFUT?_bXN z6~vXqRm59}tBJP~ZzHZDt|i`1Tt{3_ED#%r8;Cetpi|JNTg*eBaMrxdJdQ>L}(88}vc(fls+yUp)0 zk0U0|dpbj2j~<|`v2c0<#5lw87#w^aOwIKWc^r0Qi}^RVV)&AU2J7g(l;c#w#3 zfD@mEQ2dpz;7WV@K~OZKKlOm|kc^~58Z(Z8(@S(j@f?#Y;+3vWlV1_>Oq;QwqcvVi z!|-qQi{w?)A@AFtblP*(bd^^hU zJ#b`#ahK_#LtBqdkMA2eHoWc8%dwN=L%Xfm@Z?lr!L6esPmCQI9-E#Dh7NscWO8`> z(8%=o>4@b z=&8ZOeIrv7qXSR&4-EdD;pwRzljBDxg56QDXWPC<4)hHl8yOs)I`H7+@Nj?M7dtvz z_UwLm-+@Q>?`WBN^2nj_(SV@nGR1-;<3q!v!B>NOqp@H#=(OiPn`(P)>V=?OQ%1(7 zrgshx3=K~{WTD1jcWbb_E!f>2?CvPTwWZ%TW~Uk>I_T9ksc-JJp04vY;BHwF(y z!J&bvk-?Tn`}$PEf<7{^P($!gE3@p_Q_5n&zD=+yN1k&&+r_x6q-w)!2q_HWzy(5}7%5AWIa!7 z3mbNKZn&@TmC^Bm>5;J~EPmqX^k>G8P8+lY4>CH~w|85xZ+z6OqA)Z*4F-dg<5N=w zJBQeDWV+B?FsYc^T(~D{>9j!Mu9jdMvLMHTMLWCNIyW1O_SUvelsw{QoNb2(#-147 zHhy$$Iv5-u8yg;+9yvBL{UoNbM<#{_plG8O-Zyx7_=q)saQpG;$pOpcM{39L_>tl1 z$tULy-q2Lb6G!Z@(}AH>hPnI(hYszv*~X2wO`1r;j5y?4VLgGk-C%UO!RT~@5p}xJ zh`QWxL|tw?qAoWeQI{K$sLKsW)aAxA>T*1yF2^M5@?5$+mu}Cc+jHsmT)I7%ZqKFL zbLsY6x;>X}&!yXQ+2Xlu@m#ieE}rmV&(QN@qtLs^GxNMWD{pL3t1s=%E%Npjd4r3* z#YNuaB5!k%H@e7MUF6L!@^%-s`9^rli@fPY-u5DIe34ln+SBHn;tefo_s#Z(6?w~w zylF+=wjys_k+-hMn^)xREAj>wc?*j=eDA%DMc&9FZ)K4;v&h?7lRyITog_Nm-kz5Im+)_an8{mLfgpreo-0X=VI}BoBS>iFB0D+ zo?-=h@1T8LIeeMr9%DJ>WAv3^`CejdY5x=67|xnqgxnLs)8YB>V))arFR?SRE770$ z!^E?R(~0L3A0%p$&B^}cW67c9Sn}J+f0leH`QMU%mHb)qrxhPpq*EQK2U2@ekEgzp znn-;ubu#s>)bpwDq+U+Fk~)`qGj$>Le(IxCkj|x7r<>AI`u_CJ^#1h0^l18c`d_Di zkp5BnFVgR%KTQ83ozB!})@AO_bY*%odosV9`ATLo^K|B$nQv#lllfle)y$t}&S!p{ z`K!#&GA~x2t$wZg_3FQ_qnI?6cW_l6@)r@3QBz z=d%~HA7($!R_9jdnsQO@{@l*o{@lUbXzqCKWbSnCOzwNR*K$9~y`6h6_fam9ugkB? zZ_eMB-V4c}EO(N4mUw}9k=WtSYe6$EF3i=zsLj1alpM<8W}n@i zhY=JVN0r~tet*Pr?-S1vm5=02SRx7Z7@sEd5Pze2b47&1L^7;Mr8AXP)!AIWrZ!Qx ztUhTG%NY}{a9<|4d8RI06|N22LyuQJmGaFnNVJD9CVG>vR9yc1QN=qIzo=N__0899 z(`+JCI zl@D@tLG79q!Scpn-74PE-dbqb(1<(Y{Z;@nfa!FYbeil|%;S|$rQn_dcV`tr!Tuuq z!xQ&>PIG50=p6F7SM#XATzvhL-Iu!$E;oO;$;tS+Q8Cm#b`F)8b9Xw1u5Lq}+mQw* z`=Z(V$m@7=`Y4rTH%t6qWD2Gg)TMMzQ|ewRzamslYx2wFbC&phqWVz|?`OVp0QpIV zTKB;V?L`|A2I9W;GxWHdg~xp@5IO{pyf2!E`)&0XI=GNqVHx1z)MxbZQm{H)7wY-- z48nLG3%?PbN#E2@y$4b}`U3YHBVezvC8d|s(}mV|t=B0T z2pP)Wwa%;F=b8Qj@eJ`r;>*M$@lE1I;w7R}R%?F+8;*X%sh{Og^MmvPa)2v`;&V{- z`s_>gg#Ez7q5TF$gv}MvwOzKq)gR)}j4+wXRQZX|(dhu|hb1UoD+y^VdPx60>kQTe z@Br_PHdE=(Nav&%E|bM9)jY0!U|e4oJHKmKq<$JN&G(WmyLa87dde|Sy6S(55$GRm zSn1bmXL0$7q3lfc&9I`A#Ak@l5@m-kkv>a2M|_+30a5m*ewD+xUBzkHn^1h3SWh{* zUTZw`7p4I@<9(#LqI=R761IBH(TRC!Rokl{%ik(l+6|<&M|P$8Z#mOf5?2w`pM}n;@3MpX zj&&Ey&k&y>o+3U+e4h9M(QUr0efq97M?uvQR}WQnd_KMY_CAsaR&y; zTpX1yEXQxi7ccG40*WH`I#+4}0aIT*AVE@iV;(%#nR>;=(g`wC;FebE8Ath2eW(RkeHzRIu&Uzc#k0!0w*cBVLIh_0dy z=!xsi%s5K$&xhy6C?%Me&&Q4jSI_BEjla3bL;P7LI-YF-8gm=YO&S)>Bl?~|^Gn(D zF!f&N#A}`ZG|$E7Kh2A^Y`@NgTBER6fh%{e<}~6n*)!J6pn@s!{THv-O8ac>1N2>4 zp~P`D;Y-kIMJ6pzfdbe&}(=pCYQ>a;Wi?zF3oP2nW4{ z$2tT#nk%Bq%Y$2&RW#fd)HMf9sp{mK+=kkkO+o$bYgdQ)6_#=HT`O<7BUo3}xbe=r zQO3M;lFujy0^cgyvbEs&X#cv9-N(nVoW1Kki7M7QqIONNebdC_#HWZSiO&(w5cT_~ z?~{Iw=r#q`&vT?-C%!?9?|UVuawt90e53hC@o~BwpK|dRsn>4MZr}%|Z>>F?TZ-(C z)8qDTe4Xl?qYDY#(3bSo#o4vb+_)Jd=J~(2O#r^F!%)IQbd7b5bx9kXOP4Mgb=hG( zaNmYgzJJsEnR529RQnjoT6z`VueiOO$w2F)_AO587LRY3m%`DkN~{*5OBu@q)Su1l zV1wnu+$A#+|9Jm3ZzaWm7!ni23ZlC#H@<1oI(g`vTBUN_7$%9lw+vFG)5J=mdkKxc zvB8?}GE7&$B6gsIxP_?SdG?Xkd*Z{Sj}znPZ=Ji(F#RQ>&f630&kXSt@eEPFLoJey z*xnvupYRjDch>wU{nPvzN98MrLy)C8VZ3}fdcqeg?cdq0(gC1{={GuHuK*7hpLby^ zv%$mRpM0`sd{rL;pvK+Wh-y>zw37C_QE&0+Urlz<(e~3$LZIs(jS|D z$`Ur1kJJCt(mpm18^&)LerDmf&ErlHV{*>I?~z8_>!dBHccjG^fA#BM7cCxp!Y^2S zpM`fBe$V_V^Z(oER}CA@Uoww6rp<%j8N;HL|JxS+h4~Zar;YA1eA)1K4b6GEB<-FQ zQo2ssy~gl%@A!q;mFt?V(}-H(ToBAy7{Aw;>rPkhtvFGcSbe(ka;PnNYBt@QKA+wj z)~8OSP9#pJPG|NePgKlSp022Op+x3%h3vw&Kjpvr|E@7_GLNpnqyE3!znIWaobxT72Hsyj*VnwF?{PLSllbd3Ukvrq)N<3fVgyM8%vgoxDK%VMNF~Z!VYL zyJ0W=X?AG8eX`-MYqI%T_p>wDHR44}H#S-v;ze(=Fo!YFK7Fz02d%Ghz0mp_*9)z~ z8VIeU+Q+F~pY;5o|KIQtI%!V#=midZGqK$ItaZ7E`5vbNNlxWZ>zdZV$9?tgT>^rN zSH6Y#D19yaaVD;)F;0|*k1vEL2xkkcQL@{I*X#m>*tYxSDy9jLi=O!%bd8pvxYoa!%UW@_iP)}{XH{tNeKPXAev>JxvpL*;Zo ztMSu#>YNiFN7bWtijU?U-D613IA_BZ-1EwN)SZkMpM_BT%jHu&N+ca*iyE6pNpp7D1OGit~E8~~h`q2sEj+_>l*s{1i1u-=F0{jcsn zbx)xCZ&jf6PV1D~(Zh=Sh&ze9i2I4UM|**Ek@zn0ec}hiOGK@YkRP1nP!1)-CX)?Z zIV@LR@vlg*p3M#a!~&s30&+C6$W9fhXBGI&=?d@V;PPZwtuL5Qtk15mw7+a+wh}H| zx!!Sdc{V0~FOgW@kXX}@?ab!04OQ7xV^w43VgCNt9ZzFSd4H15|suN`DZ4igvJ|IaYr zNus+2F}XZT`V{dwqRt8W9fssu4mJO2eG@G#SMGY_`#7K~f6aHkau@*;0+P${k;X9!#v?+$I5?G^TcB31IdPJB6DFc{^mgA{t+7l8;AVLwNLpM zvh%q8ilOXP_5GX`eH^Q>f`Z8r3q;LF{iKJ8KPP@nEVYxOjMK6wotL#g6)k)&R$l+N zhtW4I;5!z5%W^gQ{P4Y>y#L{cfBE5izK2DKwI*C)YXJUo7RrZQdy5!4e^>dijt@Sr zBALMNdnkKcxqbuQvd_RTHT@ksbK@+I|BZ^Xd7S@~mj0l{{}=O5oByRLdchFwr`lNP zvO~Na<`pL|MlN<)I#*%^L6W_NiG!MkT+b;K=PAwVh{r)o2 zD^wvHqWMGZe3K1(i}*J20#WA^okO(m5Z@;9*L$-*())=+#8-%V|8)gNg9mr7A?5I)#XYfo+Sz!m4E58waEdw=Qs;^!(%V2hxu?1Ol! z+=Be#^U`8zYxa`Qt-mRr5b*=%ai0cxQ)U*L?_d}6?yopFOLg8`s`*#uRjwcNdv*Pk z>{;&<8jKb8zVZ4wO$EvypPzLO(>y2!npY)XeOIY@Sm!j=ztHyv`hMUeHmIKs8seto zFmV?z>6^Hbe}gZ=hPVMM^@E~|(|Z3A#}zbw<$srg()yt98FW5VzUv>Mnn1N#AdV84K`TNc=F6YRe+t_tku34#4SAt?PoA;2#bf(N&6Zrj$^ z+10(}-r&B^-v2q{@j&qTo~^w*b_Nf*8vHvRyGsk)jhcg?GHds1K{jg|?h}Ib>(|43 z=R%ge9y!csgH`5?-KwBaNF*#P*K)U>_;>7!dsbCdU1q>`pEcn;YvB)wc&`Oo@3%y+ zV?502@0-W``H##i9{6q2Kzs)w1V7QJ5AV-VpHTIw9dqOHy$9;UHyNm}**wzq9!@k6 z<<%b1c+ZUTjpk7v^&2?E6oYob0YU4%9}qP7%zY0i8i=~Ucf|ZX=BLb~9NMP$h2RSs z*w1*;z`tktQTC4vyA2;P5Bh+4&}c8(0YrJx_~r%i|H=?!@ox>$SH%O-KD84Fxy9qr zew0I<2*cqF1w>u&_@+i4@d$%A@R#O)XdZg;p9~TIDpC1BqyKS4I^uytS3$@f=|H3d z(HoE|vg>rC;7cG9!2aGTD0pnC>b)sDFRS@lv-bxRVZ*DyF4g8>Q;HUTA zKsNT4!vXxxZ!Uk6Jv==yU5qxi4D$PYlu5 zpBm!*Ir=HYnO!vG1R99+OXh*1A!q2BBJ~cO1;bf33%q?*_elCake2l*)-eTXAK!@OJJlHSbymNJ1klQ+abEmbebmzqErF|;5Ywmw3D{V2Dj1{IBO0nAS z>38GkkL!ar@{%7*C|Z0~UUJp{$K@e#<`!RIris`}e1NEWOATT`d@D&yo)}j+*c{wu z52gRRJVE*t@fG4zMDbk+SI6?NC9Qf3WoSl!V!(LozlP5ifqm+BusBFy9v?V?;`x7M!vCMT~oybeE>_0`Kh)?r?hj=Qfx92cy4cXmHhh z$Ui>5!=6`9$9TPK<=-~^hYRre#y7rHvZoip(OlX*WUW4X^}F)@qfK$nsoYDR3|=Ol zC4Qf{kRDx9Ma&-u?3>}SmP!676532rYg^#kZN}YXE9kvJkNwlzJ+?3UTfu<6KOPT` z1z!(N2LB*99sJ|qOz4+;U9#@?SJ0wbjyf8=~7}Fkv>FTRbEIW}2d&3jU!rnCCL?WC`f-;z`M_SfV_0_X^ zqfRGIESpUl%;qgaA~l=uwJ+KXklo4|RbL&3Clb9`JnL)ECyj9;bw26x8FeC4U)!5D z=*=3;CPDSyW~HoVOEXBM@Ud{hnqZ8RVWPU;AYoiv!Lj;u#?r#m8B3Z?p09K*Jzwcs z>ZsoA>5Ns@a5`h@y;)atef9aIl{%fV!qy1`)VwZ{vbui98l0#_vri-}ycIo|Z3t%@ zT>ObbB4ymrSZhM>N(-j#X&p{9hT&}GiGq1+dBGAw>xcEpp2&m}#&(@Wr^EBNfJsA|1U+~*A$umb>dsZi$v%-oZj=P-{ny2jpoyGsCBU% zzTm4Z`-B)JTg^Y%i()T{y(Em-uf01~Wc!BsX@qMD+@2FqpQ2M5|Ui!6}-BP;B>pMu%%(iHN zI5Za0PckiHo&04oOl@~)k+<;73=7qTBQkll#?Lcez( zV#T9G*_nO^FMBGrgPn`h(tn}kiaQ24<*!pmee|NAU?-Mwdm!^-tdb&rmxbSLJ!S35RdUuB}=8>Zss?(i#;c+?`YyuIQ3uSrSEK38gsh>kr+yH`lNcQ{fA%v zYz|{Vy>HS!Mc*l_BI$Gddq1_SjtyQxTuod{)Y&j1-9y|(>?iIgK1O_;c#t?me3tD# zrS?<@0+u5A7;+!y86(P1i^Rk+;VBDAX zJQS~G@eXowcSWppsq9Yrx779*Z@>Dnln7C1+%+#lPS7Qa>6-0Q@`&4`7|Q-s-}9{K z1>zZ^_FFHLevMde|F8Ym2h68_l|$K4+mpD*PA{6BbM{G|g|vyV+1ONG6S z_lyTc}2^cPtXjo)&~A-)O(qZVr)OJxsg-(peYcaHt5H-^`w=NycX zsC!uc?mE!9SMrmdt3K)N8?66L;#)+WC#1(Z$5ygFtw#mYT8GrHawz?kK1<()iWiE{ z#l;HzH&h!B~e;qJcF6mv0XD5 z$g;_ZWwkWRwv?sPb~ov6Q>3s`{z#>?siJK)8%0f|jVemhCV!wds!%tpZo4U}s%W*{ z^nCYy-;8-M*x1ew5{^0Zz5DCjd(S=h+*q&kRAQ-x*$WG3fg}|5Z+M}U=0=3S|5aexF*1cdjedr zKEUio#%~F5^TPqYw==*asQ_!z0oJhtS++y{>I#zcIL_?`&15VHYPO-i}X8t%)^{buN@R|m$Y2ca$ zu4&+!2Ciw~ng*^84K&p^-7(zI&{#7xQq#M0Xq1~cYkbW9mf3E*sj0r9xxS&Pg&k7( zE`|rvgM0V)jOABMT zfgQ%Z#^HVUEF>Du4#2AU>bm@Lb|N;(X!);`PKEh&K`!5*HC~A}%J@5NnAy6LH!CEhXMU zyp_0&SVvq=yp4D}aRu=XVm}7(Nd*Gkz6uHE|8Gg?JZnE%9#RI^sP<^a+>P zwqvV~eLA-MI2U4zkL^8<0yy{K=mopORv-2TTZ5g!#$aEtE!Y)o3idSL81{st6pm3h z8sl7pGwDsnIAhir*Bak!yu^5^@h!$U_boH7GhS|doAK?&D~#_j#_{V;;|60)nkM6w z#?8j7j8_}uXoh)+xwqE%ZsT>vII4Zg_+H~ys(0ayiAdc78 zSWwJc3WGI*oxv`h0Rt(AkdNju)Y-So&I}RCq2J5y3o>TEPEg&F;Y2MnLqGT1c~BAehCJG&nn&oRF!UgeM% zM0q*HGc9YEE-ZUc8q8~7U}Kj|$9OI};Ee5(=_;>2V50p>Mqp(@>A_L2C%JR9ZM3s@ zPo_KlL~2{6_laS~6~f7#>-T1cw)Kvt+8!yyjtnKYSh3W|9?ve<52X7CpGXa6_ISyi zUrCRoHYU@Vp^^2&!$ZB@y~C-IHuH+3>5q`v`Jd#fBYfpA0 z^MTIvP8Uw@>>B9pOF{6ak#utV&`7#JJ!n;25dG+-qqlF%q=qlb>moZEy{&EA9`5N* z_3gI0dhQ!ZrMlYhZ(dbD_{7kjp3zKy{Xp-5p}iT8py(pSynWt)w<|r^4|OEdyLPn= z4Q6`#GM%YinQ*vmXw>WP&7{U=35AhmjFdL(ern|6n2;o98zU=-2}ye>-M{;SM!ATP ztRT}EQTa?AO+|E2KO9n>!rq-`AZKCpFTKG@{#OD8kCz1=CN(cWaT6GE&T zdk0c`Ql{g;&J9P?eQvx{`!il&a_2)9u_rw=h^dCThq)yUxjEpBzlenn_nB>}`7Yq? zZyU^b2k^m}(B~|M22n&#UUh9wn}wj)v8tHzP_?P3ZEwB-g&1$s*7jO&VE?vEy6<-n zY_$MSTDAu?wD|@UHW)SM4g>bUU{HR&@h3n*ksSIR z@jmoBBacM}B7?ElVhtsSN}efsx#ZQ7iqdDwZi+X@kH(*mzaD=xemeecd_m&Y#EL{y zq9xIq*qrD}Y)|Y+09SU4TK-;ue=B`N|Yd- zH%l2mn;0Xi{?ly7+r)Q?XNkWcs$4b8FC{h;TZrB4;KGui!|xH*?_#KZpY|LIhf(Eq z4tGx z6`^vcSpG%gOT?Fn>PIoud}a2F0PR;F1D+W3sI z+!Fz+A162f(93lAdHLZIDUtGJ*Rpf@ebxV6=6ja-L*hx|i^RVs=7?_+-zJ_VzDHcg zc0dOp^}85qUP!+R3&Zh}^Em6v5>1_xA{3VhwAX?;3UYqxcY=wMk5k&1axM+s#+V`= zMV7bP#~4DI^AW6Uy8MvV`LG>K)jvrmGArp_{tC7}9i)1S$x^!N*E$dX>b6mGWYQ}I zDLUMK%?I75`bLm3E4krzsNS$W%CCj*ODU{!S+4%h0Z(tx$bYM=Ir*r#G|hICLdeQTc@UO$W3t^8CO2Tt$1Bp9ASEGJeFXA#vP z`9ICG>zF>5IFG3QjJNMS#}0l#)O$c$ywuK0%GJJj0mBQ4D~REJvixQ{(>D{_IpI!X zQ)Ps)8%r9OVyN+yohe)li^-9_t6Vr=IR4i(j2+ZhMurk}<5T}c`@v`)o0hXnkedg7 zB#Pu5B8+nG^J2_eyx5gn9$Ut&E*{tUbOip_c&RalS9PQQA zW3uz2`&a5;c6z1rQ1eapt$C>VIoWk)%n{i2H`GioMlFQb8%_ha)*=h`i6A|9t#P5L ze@xa~Ic+a$fa2A!3U(Onc74$JvScxRXxt||o*K9Ccxs%(esv}ruJ)>9>WAjN{EPgA z#s&5Z(z;mVLctusWgWvShz-PMqMhd)ts}M)+liZrYR_jC+02U|Y-jN8mMJ?~R{uLG z7<*3a)l^S0yVChV>#xdpv0yiGJ5l@Z-3+VVVkrBNy;zg33POLt&>Oqz{5&00&Y~Tu z-&)^mEf&w|S;mz|#;_mI{>ZI1$Us3pF+z+HONgb!GGd&VAV%moqr@1ogjh<96Z0>+ zu)$ha%9yTxHLwHY?O%2>?(K`-v@FAUcU% zMD3XV z?c)29pGW^J`l{66)Kek~3b?pfS=p=^vuD*Zql=3gB@$6>SzMeSjhaQ2d1L2t!p%-q z5$yjeD=RG`rhSGhJNu?PHsFp9*Qnet|L>!Zj$7k#&jjxc<$e={|HiJrVRjr&|4Ykz z!1#V^_cx7k{i-pp?=!|V;&6?)aQ+PQA7%cr^`(OjdnOdc4^QUHg2``L&mdJ70MweyHlT+T&H{{qz2zd57j5 zpI5k=Q+HM3s;4*g{wl@LR$(~XX21@sOn6u?{BEwQ29`0 zL0aLeAmhTToew_WGxFetan|DW`L%_(LS61EU*b|_cRpqEo4VP7msORhx^9@~|oc0HD+?c5X#q=wgH zt=BTj@Ve|Kf)(|-E``_Qsh*q6i8;dF4#aBAV+F){=5&XcG3M?v=>1jb5Ty57gV1O1 zQ~er%F&JTQg|@3-j4ryrQi9IE+Bb#ARr{*&xN3i;3bj8{dxqJ73~@j4An`EqSz-+b zD16_ilkr`|ZsK;L_EkxSrI%u;{fy3GhoL+p?QfJW98ZqY>)4M#+UM^RwgpBvIk$3l z3Ch9d5;ma|u~=!Ow6r7^FM;}U8!Z9v;R3NwU1f!_e*Ud-i>;+Uu`tqq+tN3gB85mt zKBS}E^ES2!1HW%!<*Tsp&n?gQSYC3ES@<7}ja=KJ<+JCmTD)fd%De7fyy=cRJ6wvT zg)nR3vFyQiyDZWm&v41+8?q)oTV>b!tFl;J?-=LLL^*=}P3L_qIlA!t9nUXo-fKSV zyfjsRta-ui=KZb>nIqT|$mzgP=KMc!Ky{;#syYucx57GV?sjPlxZPD1N;1SDN0=0aZCRYsvtzvK2cnT=3j= zOj?c=39}X+kMsKis8;W1*rg-PL#I1d{&C$;pQ=BRZfG8wF6_l82O9VPVS_Nop}%77 zQ~vShdHDXb1Zuvjz7JWEo+rt%#;BMI;!>jKx8|?*XW{)+zMWKMIIQ_3KU@sYh05za zMn+$?fO(_2bE)}RQ8|0Y%vfnzv}D%LBEic}ISiGK+5x)myZET@m$(z9pWq3P_W)+i zj8)7?#LG&{OQOLT=1}UCUE>}C?m<}nPlGKw3l4{|--5l}Vm=i2I>PDG9kw=jFW9}F ziMB6X|6c1`oymZ{Xtoe}S%Tj(Rpck$RQ=Xe{nKR|JBdUaHb-w!A$Y$4dnM=yBt1=a zKT+)YmfnZ0WCc~kYE{UF$Umu_r`fQ#iQ)HU&oTbjM9Eu0xq9CJIK#SMew5*p#3NMD z01qQwJoxV>4iKfsVmML1R?Oci{#-CDUKo|G`dc-C%>PA!as6j`WX8`*qGhGASu$v?k5pFLKTu>gp9Nj9{IEa!yoF8cxzAgl!u|Q8^bzi-!seQrNnSA5 zaBq1s>#y79(4S3p{ndR)oqMNiJ(j!Wauam>WB8PR*E&`UJsXGX=kk?5zlP5R>c7tW z5}{;KHbW6+_)O4P!Msu5!tc zA{75I48=8(SAhobd<6_M@#t8!Sh^hCB5@z`#Q@&jLtSIZPC!#>PIFI z_ni?wXpAt_|AEPX{6$vpe#*nVM}2P?;(0OB=UY3!ZMeqxUyV;2 z;~w}vOV?TMrxr$kwpbeagLIws&>oP^inm!Fd@tx_i^KD4$j5KKG*}o}?b1$vMO97Q-QEGyBh8nsl}!uM;co_Csg`m(Nuc@QT6#a)!WPj=xieEf&9N- z4A43te;>Z@o1YMDkm_q;z3Ygr#CBpgaR(7L3_46aN;H#qbb?{^s~84bciM=_)4IUr z1a{>}$e_2I7w85Uw(0EC_MX63Vt*8SIjA(4?`CpYq;ji?3y2Ge8O5{yVd9&_w}=@|tdmq_mJ{s9&PjOQ zQ9Ad0zu2vCcst`y5)~FI|0(vnfq0hr^&Z^mkbDL|GqBZK0)~3L`P%lU9)0?;Y}K6T%P^5)peUkjfQ9?DsB5 zxUUPwx`2h&An*rvfwq29toEzlpO(IsTAwdRx{nC|$t5ZWJR3c0uR4@?rS>i>_OCPS zSGy|gWP$wX+o#g~O0RRl2#R@YwZC^`I>D=yb`*$v!`y?D~Z^Ob7Mb{}cBAZ?J0r diff --git a/technology/freepdk45/lib/sram/clock_nor/layout/master.tag b/technology/freepdk45/lib/sram/clock_nor/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/clock_nor/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/data.dm b/technology/freepdk45/lib/sram/data.dm deleted file mode 100644 index 329ccd3c597d24bc23ca72c8918baa1a71caa684..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3156 zcmeH~yK59t6o>Eb&L%#h(YQ){1Q!w?g$^^56|@t4fGA->1-l_xhD~5KVTodq(m%z* z!otEoAcducg@uK+SXx+Eh%w)`ZxKH^AP2n{W$$r98rR^`g=y@EzDC-~#QM zzsop<7kA(nHT@O|S-^1~eqx};tN)ne42(1Izh@u`ld~I96t~xh?d6sA2U)q`zy7{;2lvAncmTHGL3jwx!XwaN>o7Sq)i>QTEjRr($u!;D=|9u!-Tu?M ze6=jnz|!%TE0!b6kM4j!r7fFl!5uZjmy-qZJJ4cW^xr%_VKeKk-dI~%TE3gPrAs$& zr?(16dUcp(-OJZI=Zd^q|Ca=?`}4i!6H@zPL(b=c4V`ZeGb{s1cOD+0ZS zZ{S<_9)5&+3TVC-^UcCDEc62`*G+P&w)W2`>YmlO7Jtu+%6yn({G$xm|4CcZ&YL&4 z&Bpi3I!oR*T7T0rqis3qmapc;+VZy|6W3rJYQHzJC*UO1{;i%H>8Ny7I;(wYT4zP? zRPD>c`~5uY-7Ej^l4Dd3)3UYyAJbxbY_Zf{Ii9(0=UtglL&X_I<%8}& NVbng5w)Oq*iEnTsk~07R diff --git a/technology/freepdk45/lib/sram/delay_line/layout/layout.oa b/technology/freepdk45/lib/sram/delay_line/layout/layout.oa deleted file mode 100755 index 2a84a0752bdca0f46cb79947c61b8f5a952fefa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22172 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 XIaxAtvh#Sd^AJ2-57%w~zv%x13t)+P diff --git a/technology/freepdk45/lib/sram/dinv/layout/master.tag b/technology/freepdk45/lib/sram/dinv/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/dinv/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/dinv_mx/layout/layout.oa b/technology/freepdk45/lib/sram/dinv_mx/layout/layout.oa deleted file mode 100755 index ca7c13d29d6fcafab0169a5a001070d3035adc90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29796 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 diff --git a/technology/freepdk45/lib/sram/inv/layout/master.tag b/technology/freepdk45/lib/sram/inv/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/inv/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/inv_clk/layout/layout.oa b/technology/freepdk45/lib/sram/inv_clk/layout/layout.oa deleted file mode 100755 index 20790f89b8725837cb781402f52010fc43f3bec9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29780 zcmeHQe{57&c78J++hc6NfB}=h#tu#}2_d#I#33Xx*!*xX#DJ3}DH|~MU?wrP*NhEF zsn%lCZZ=A_D5YE4M%px+Dp@Iiq;0B1>9!h0sEf2wMcGt~RQ_PANSjuvx@)EGCu_XA|cT=MonXZzI+a8;EO&Yl(NV zy;@>Q0x_=s_c1=Ga>QqepEEqicqJ9|9Pu<2P+s8|IA7^w)h#~8t9(3HR)ee7wvdJ>KibtDg4p-6JgbO&>c_KAxd`>Tidi>}kA( z8b=|Ed8b)GdMYpQb5!rgylAK1Kc-&NOkY~!mv1J_G_hPQ4eK=Xn`kg+7(c`E zZ$y25f5P}FVw@zpksezjsxT%4g8n~%}n;N*OfiG4A4XYdO8LX?TuNoMt>N+?u zlE^d{vmMt8Z<*K7u)3~sbzMUfa}>Xy@xEmL@bUdahZB8k>h||`cQ@A8?_bkUWmo$f zSJ$tu&td5OsqJ}I{O=2oAngZ>irtQ}&91wQg8S|{C}d%-4_-NO9&tW#0g>BTZz1E0 zh}_nFR6LmhQV0C7J|+tcQAe@aRsrKxRQ7m@owTO;yuLG#CwT##Cl@z z{L{#EorBgfejl-kct3GH@d4rn;)6u=376P*V~dUbHMZn97h=nf^8&W^IQQX*1-rx6 z9rgxWgPp;~U|+B;*cEIF_O#dt_Jp%0j!U;1;hcgq>DP>K#;h``HoDztxlxVL9Y#3c ztuU%JT4{8b(cMO?jBvzSZFH|uoe?HYgV7qJMx(Vx>x^&&!#u>?TW|D$5sqUI8a-t6 zuu-$oMx#weEk>U*)P?ZGZmY zQgJ5Vgb)p2ShdE%rcq3`!m)SrAvc}2FeY8~P!@sw(nx3Cs9n0a>_mAmJKpmcHy`7? z?1VGIar0GQeZU0#D;bB?MM(CKc>8+}jGCHg#yAXNOfw3?23Ca${ezxBp0@KXugWIr#PDP-1gWGBq%?ad2>;tFvn`G1Ow- zawIvF8Xh=0(3&{ZHQbkS>0WoDukZ0>;#g}>TTdp^o;>K{JqJ7by1El!ymctqvv*)9 z*_-UQCay|;V*KR2ds2zPF=bt1TfMilWzS>#I}_c9t*!lAh7yU6*6odJSN9(oIJ$o% z)w{Z{>%_ot$|EQ_q?&ik>+=pJ`+K2|p5&oJEd%|juI^NO;!r9WZy6Zzdb?7I+#-QE zisW! zVdm83Ws}UDkEXi%yA#X3wmPq^F^mb-uJL6Qv1Cu`uy;7&G}_hE(+(!qjp4q;(S+&Pw{ydhWVajd#PO8Z-E(la zB^*r-^kb@F?qP08Lv9W@;}5aW!EUoHiSHub@s|FScLE=r3Ej?OXb>TMGOBBF+RR41 zwzXl(L(`_Bmf?&5*%WW<&em$L@A#fnviq46JFWjudcFNU-bhc6ZK3+q&CSPCLtx?C zgO%UWxx;H)=k4s=*x_~HqwPMgt;uV<-)pPK_RR&kt`8Z9zbrPAkL5D$_NXYL@+uHK zuZYh@6t-~52k$cRBcjeTt!zkq!?23=npK||2H5k05HjmSBs8E{8hwp=pGDfEPe%Kq z{jv9Bb%iGjUnqRL@V&yaq8Ez47H^Ed7=JZ>HhwOCK7KJ?S<+C_RPsmv3lK%rL z4ts9w+4JdB`jDa{{yxZy5(|i8q;p{r)8`UnM74jOa(qa%4f*Z^k=IR6e6O;S1IPd;th%LK8^4y;L+3E%1%T z&6_`to{v5rEAk$<0qXY$$uAcvEQ|R!BV0V{-D<%J?c$EPMNb=Z?A^f|ZI##O~&J~&$VfRVYiQxRw{Ts|x1U@Fq-0yK`9ZPp@8){#PvIw$EP6t16 z3ZK+*rl$Oc_`k*++$TU=%I7pz_cHP*LG|8X{Wpnk5#J`NoiNmVW$`fp`PB#cT@-@; za1Tm+CC^vY51s2E+js%G1)(qM2Xu{lCqVV%GzS2BnF&8HKU^p!lE3U)b}qlK_Rp}~ z%fwfRuMyuQzDrCK&k;W)ULsy5ZlD~{0fPD+hME`Buj0aBy7=s4d!s~C=ad4fiv{Gh zXqt?ipL*J#D48_n<8P@@**9K4w9W_ZV7mTEI+0mP@A6le zhcgk>P8cuct9`BW@DFYqB}XQ`l97^w@@qcme$pTK1xLjyooF4MSHKa~fpHj;eWCt{z9y&3Wm!t||uYHBiaO_c?VU2f30grUY$cBXh3hVhZTt6s2NF#Xpwj04nD zN`~Th<17D!{2+)&(b9H_;N}5#tGGsjg|zz|i=&nZjUk3t zZKM4GD+jX6s{-bjdlpC`WzX_svh&dWYrsw?I}bJAWZ#;Hnx9i$XL63fuD<~>y%@C+ zTyHoH+**qw6)dOcqg9Mg7pU$@v*ENIQ%~vYR~b7Dxm_PLzN{Ih4~@Gv&66EZjazU$ zHO@i5I-7z^UUf|U(7cy_k)P1Gz^jiKL>DG%lIl{9kG#U=Q$TP5Sxju#BD^$ zbG;(P90Nf+gKxJ&qf;gIznzS+=fqx3?S$Et&JS9DRlkE3JBfRV`-q2$YBvmJAF>w{ z>4pgC4+wf=SDl}ygGyVn3+lJl_i9VU^K{m6^-(bB2edzOs|^Z}QG^&J#)yT)B4RNy zPAnlt={O6BF=8RHh^Y5~GcTl2V67{~ET?|eu><+`F9%pIMSPz4GVv|qS>i?FC&W?q zqk`?%5;qV#h&{yP#7Zs@tB7?(?U~3{Y952KPx&kPvB~0TjHLzPMC-po{j0p>4f`jSpaE(g;_y2wV`AcS4 zxMza*d(yx0roJNo3ftZxxjW?2!i>e#^-02kMqzktnfct`3pw#EdC=qWdEn}Ewk$pD|d^P z3)cS^%l{wa`_Gp5oDC@A|7L{v-&j2hPIvYsC0bx)Y^IcEBNnXdKb#>y@U>>`ou;
    jK$eBP>R0I_ z^dDo8=!5l(zM%gkh!A7M3T0$LQ`P$uEJu3(GQ%f{1-{s_U^uAX8lQwpSH3LEEePsE zxV z{t@Dn#Ak?FH>(|CDEkn~Zi1-%r^5s`$#}3!mJ9n87L^wk(K!1cZ|)jt-woIZ^Ep7f zT-#X5WbI?B`d-Y_WUeKD=?U}^^O|HAv?I}%tKB4!9u^irOrNYCYF(rC%u_7yII+M7 z8yyUPTzVJQ2Vk45kJ3ko@Orn1_t&BnsnbJ@U%|1uxQ^d6J=A$E&Wp8|M0-o>AqV>4 zIkDE$IzP}kK_%&{h}Fb6v4&VnoIzA4O0Q-2bC^Dlcpg#hDRut*CL8!JQGBa@okuTX zxedfd;xgiTVmomwv6I+M+(S%qVtknsBGweeE@)T5u@y`%4WYMNa8zvg%B;9#yyE)h^i&_;zhj z|1xKoJk;-#?N9Yvus_w$!Ev{ajEi42OzqIPpmk-iUvy5d^QZ*~H*pW~ z4x;umsy7U!7t$AF=~Lmxnn&1l@t?h4mJ;VoyPZ0GzkrNE(i6@D#5KFDIPLodGFOl5BQ2L^AKBz~*a9BBE z@o!R2FRG)^nV$lOc@Z9LQ>1yjgv%rDzVCSVf7=D!kBf`MDx#D_o=Gm=&V+FL2rln_ z#~6Q}u>ro(5>XdC>R4ibUe5h`Z^K!f9L9Zj6h^s9|1^I|FF&kxOPGC3*Lp=}CcV;m zmh`dI`_*_Sb~+sUzED)DaDg!7LhaFc6y$ZrIVAI`o}e7mzoo`A?XSYdHPtUR#h1o| z>0WQB{ErINt{~D}3en?T4~Xw8*&&Oq1k6DyFRZ^b|CFf!qV0#A(|}RVuzS+RQYsj( zBvuitiBS$HcI(W#i$_CKTZOay;dKCk?< zP81t`J;)wSRkzoc*Hm4PZw#1o@nvOY@wj>W)3)2iM-VEDdl9d! z4m^pzy2d!8+&SJk`ucjCWz5^3%+kfryyz;=YsFsabD05GjFEB6lbhpasp+u?aI9retyn>>$I+BY3+!<{icf8XT# zUoG5h8&k;Qq~(Ln{-sTJmm3~6Txxl`Ow=ol_Gv30`M*l~|70)hgZ_E@P(Z@cuCfJc zuhsv%7LW3FSU#k0viPrA{{L$S9xaxCojr0Gf1{TGQw$}7qu6{a2fjLPKVW0C6l zWzkA|E>fRe@yjWGeA+5Sy~dgs@is>0d4Fx+*SN_z|FX9`@})>m+xz0s= zKrYMl6-&@JF%i|Y>9x9J%})&A+Er~b97W3#@$_|aMKMBa%U zJMY+ekDhn-tJkU?ofTbjY}V{0kIq8gsNp;H@6>;P@%Ici7&c6HNoWLTA9Oj2< zIhQQ=3k|L}v>wp_7hHGfP&dMPIk?`K>N?*{)j2b1=U9zLcD1~9as&bFq}b^(02>CJ z!#7Dj$xiLk`2g0A;9c#4zQEZ~=bY%ZepEt)1X>pc`&H}4V83eps0y|I6F=iUuh99# zOXTA%;=9E6iRwu4q58G{o680k+8Jy&!#2b_cO|iw0$a(j(uHB=1=H1D7V{eii>*cQ zuq%FRCvTTU&)eMpQw#sv)*Rpq z^)y=kSM7SM#iKstLp@k!;tUFiG5QyF4Sus0{<#V0*Tx6({k^6Ag_Zl3#c#E>$RArh z%kA2nlUrF$-EHSz_=lJN>F-=M>uXmm`EufO8~$SHcZV*$dDp=AzVw$@EXVWWbol`0 zEL`lpUm0IdSfo{3@NP;mBgLO3=kOc6Myx2T8M$IA^zGg$|5+h)(>4!Te>msM(hH7T zrRF1zcN#~u51#5gM0UuW-wz0gUCl4!J#W&!u2A44FH}GJb1Vm)nT%6=*RueelbO1k zKKV}Ns(#Uj%|p}uJc1a}{8URu#BVDZY$t9db`raZdx-~$8t=o-<8!3bx%@*6KTLdt z_!v>=_HU5Cf}AMFU|91H_nDr;!XW)r!|m))l|#0s3@BE*V*4!jd^rov7p3JDN6Z

    UbjAP)!Qsh}!W{q5Az@G6Wlk{KEJXeJMMyqQ2{S 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 Rb>39_z}s}V1Dlsb{y(|0&e#9| diff --git a/technology/freepdk45/lib/sram/sense_amp/layout/master.tag b/technology/freepdk45/lib/sram/sense_amp/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/sense_amp/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/tgate/layout/layout.oa b/technology/freepdk45/lib/sram/tgate/layout/layout.oa deleted file mode 100755 index df7fd9beaecc4cc8c73cf8c82c37e1af3255d7e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33076 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 diff --git a/technology/freepdk45/lib/sram/tgate/layout/layout.oa- b/technology/freepdk45/lib/sram/tgate/layout/layout.oa- deleted file mode 100755 index df7fd9beaecc4cc8c73cf8c82c37e1af3255d7e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33076 zcmeHP3vg7|dA|FQw7U`@uz18zVX%!ITb6_{*v7Fy0;3>aMz*nyBZRbujb%v|%PVo> z4I#0|LuNd#(;=-pbzNrSw9J&Ww8^ASyLD;9G<1d`q;;k=Lo#%d&Lk7plTOptjr)J+ ze&5yVqHCdtA2|Hd+3)=4@t<@4^PlIvyW3XGi+NtRC)#VCx#ld;(Urujh)H4@@gu}? z;&sFd;x)t+@naO6Azw+XB2FR3m@YvqBUTWrh*OADiPMPFiI)+tATIl1E zr9KX{__*mFAB(FQzR|}e50QVw#|4l1SY*XF<$d1U?c>2uG2Lf4V4lz))nuf%=%Unc(?F-258)t*auNduQOa7hD~G;m1+mo#um17p)bV_oAd1NHR{ zwf%#&U0eHiWrOTV+fm)%UF9`4*3~!F)i>VGm@wa)>)W}fb8vgMcVT_!w(jnxhKA0C zjkV_MY^rOhYbX)ueckppH~i1DA4k}y9{w+fZRYPX7v6VIMIxhVK6ur{>BJet%ZS{* zdNaw-BF-UdA0OwwPW$;JdF|`V$!mX~BA+H^h?T_A_W#vPr*psz@;VRHke^AMMVw8X zL;MKwa^e-lD~VSTuO{l8QA>U<@meBITOgf7t|Nav@dn}o;*G?ch#w{1OuU6yN4%9- zPi!ED&pS;F*SY65@{5T}h_@5(Al^w_O1z7RHo=Q+G`7sxFJp_1?KigKI1gaUj&mQ5 zRIod2#bIx-HP{(!4E6=vf?dI;U{ABn!JcqLy4)O&NH~Y!OnS9BoH1+7%{6zexq0U1 zo4d{&&T}`ITVU=+b2pj$sJWZX-C_>Ms$0#~o5P@KG>0QrletCaZZo&o+!Avbi+7m2 z(;SXpcbWT`xx39Zn_FgXxw#f|t>#vkTWJnQvsLCMN@&wqNa-gFF=t@%z!9_E+!}Lh z&8;(s^PtYWVLMRxXlNpwodD6#ARdRkyCKx5nTUP`p>ILU7`~i1T3wTVHg72m)(AER zyL1K&q#QyJ%;R8i?$x{&ryS0Eh24I_!sm%92ck}T0`{M^*@eIBM5gI_ZYK?ZL22S*Oxv@xF@I4`XWY-{k=wrsqwvm@KR-OB1*Ihf6^ zZ(ZHAsIKqv{vDmW^4scqyY}|)%zFd{M`W{WwqEbiT;DdRqbK+1qb>b?`L6DKd-lsviy*cw0m>gwhyb63kb>b6P1Vx616o( z=%8*Oq&o55t!5xC{X5Z!9bSLeeSL%39r?jrcRt%=-E+@i|IUGxy+kHIyw}~c^itY|Q7nAKSau+W(NZt*^)1 z)zf2Js9rU5#h&~iMELe#>DP3u@!D?l+7^3lOT4z*y|xDHzJ>;Kjpi1bYx3F}Evzwe z(5_k7Y1I!5V~DlPi%jxuQSAv*QU{XLVs$|+tXd6LuLi4Fleq?~-D2Y#t!7PdR=dS; zs3Fk87F&T$NCRh9*s*NAc@}x=;W1szwf*Qou5X^VYsZecZeNNiS?l&`&d*p6D$HpO z;WotW!I4Dil^}c`lbqL)*yxN8-dW-~qRuNXu^`Ef!e-`slBjfK&x2+Q!QL7atbeib zk`q&eF5=#=V(syV;=S>{8wO1`cMxzACysXgrooq@8iN@%CHslksxz(`5+h^Aq~%Vr8+Uf0^R=xSi~-@DF#6 zH=z*k{gK%t&ODF})2znLK*2l(_h}xVU_ZD^a0vk%SUQhsTtwY3MU5}rd+8nwV-}=y zlRG0C@5(mRejI5)ev|#X4?kplpB!#MX3ZOte~2--U%^mRJcqNI7t}`q%J&NMA0{3l z9wn-rD6C<+D1cs+SMxd2;#_~q9NLFEE6odR0QwcWAFVy3&6AqXoFSS#36x#PPBd?- z{DUm`MdC}uL&U?xZxV~dQkuRui8$3w_2 z5vZ@RMapsG{FA<+1!0OS$>-wGZ1gF@k>$o_`zRsAxiQAVCTkpPoebN-M8~&uqVXxc z>&T4pI2ojJqGTyvaTieUpa^JuO!wI>xtTDYQAh{_$p#Mv6TbvklQs3-94iZLF$(%RDa6OgbEL1lpNW+ z(udQ9!+%A?*g`!G$WVN9dEY-#Usf$Rhp|#_9K`&{VSdGjuwcBLOaH_UrtrhT1o2?L zYO-q$(ZwhRs)6gbzc68pxo42npX^!lnCv`q|EEUMp2j*3HQvJGP~&sF>x`SbOBx%h zW-#A`*BcH4x7H%N_Gfx7TU#P?B3`O{%p$1f^YSTN2=$fD*f&L1+@adr%S3o~kLUYTOOQ7_{JqvS+|zpf5p z=UuGuPWFf;I)rodq)Z@Sllp&KF7R`u7rb}dG`0l8|EP)-n}D5y}sA`lBjVo zS^JUjcn$A6+@8#Ipmk3B54{(L_beuZIGh4eqwzt)2#?0c&1~RYONTj&-RSxoS;Otu ze3g&@VvHCkCW&Rla$*HBMNAXp+~6gMNn#nXoR}g8FYK|xn&&DQuXgF26~5Qkd8?HT z>>=(U9w5F%JW4!HJVSg#@odK)mVbcw67eYUIPnazK!bXLc#w!S21K#JJ~+&4UaUoD z8OaXEipTuyp728RAEN%1UiAy_6Dj_p1*|)8=x*ML7tITDOCUCDci5o(-T1#J{vfc4 zpFmwb z^^CQ?V7d>-|H$J1&cYuv_k?M3nem`?mgkUl=75F&()@23USk>!=f_aZo9xe;d)qeA z;J;*v!1q`_l>e&9MfvyGgOck^&Mz$d>xT19-WiKOYxz({ucb3`{S`~tv!sMQ^R3zrE1^r|1+s2zM#M-Ph6jN4azm4cLg(@)Kf#gNZOEZ zNXBsA)(tOr4sIA8W;M>edB;%LP+86w?nnGSb_EhTm>G65{rq7u7{B&q4ZrFpa zpdDCe*q@Pg%d^%GO%{Q^^ZU>2%6rbaf>$uKkHT~I;T0-;vZ=v0D$C;bYm;(Ml!P>^ z5K-&8*8QmU-3<=pA+0r6&HJ#h(fDUlHLdzjb0sGfS!_XjYxK#CWJ^NSD17o>1s%!lstI%^Re&UNgn zqIp3@*xZ~{`OHLRJROTyWHRw;Z^mUc(`u7tAG!RBE3cYfSy@(Ip467VxWY30udS27 zADcq|%JN@s{4Ivp+dw{S1^n9LcANXD`GL4E_#1Ob4@Ca&8qPL{csz#&f0K0#)^8!= zvDW^p<#TBHrrBDI`$FJqn<#)kuyU|g|F`8;J+_-4^*L^7vB!AB(tY3Lh4cTOmH9*4 zFa5v}`Gwe5eA?0j4_e$`7_PMPfCvX79M6u{*~E3+%J_usJHTVdX5@66sGOFVea$Vm zHY{Fr`<-{)y==ujtJkdCuyEsj4?OtrBc1lT@3!1y{Vutmhu$KwU|8zB=S}`A7HAMS zOA-3Bh7{Zagxn>6(=p^rc%<=DA_nv3mPz|FVIo|>zL+A&3`(l zPIUcZbyzvSU%;rkT9+>LUIF@=3{v^l$0HJKXgs9$E~Nn6hv2NJawJ#fD}B`Z6@D*J z&s{I{el+}iLlx1wR>g{_zRj#)D{&REo!CL#LflRqZCxxd-G1UT!~?|Vh`NV8NM832 zfu7hYVcw=2M>w;B#0$geC(5_7LnX&Ab>g28D_gNCeb{?BC2>WTBrF&|nhW+(P_5p7 zGp{3zL#I0y{%+lCPINwzZfG9CJi=zYXP|z^85e{x4*f;dPw7V+=i%p*5~%U2^7Nj; zTcHAzR7@3dK2hUa<5&CH^&I~l#GsyNlu?-1c+xx^h3EY2L4JK-m%$e;VBBczj5I#0 zDw3I>lqce4l~boxyBFX5y$bX_7AFN?+Eb{ICF-&-?45ttCCd1toAwTkj z<45C>AB1}$+%tvKc-#xp-DOH`C6r%tK%2V)Vca<`Ddhtt-ihR3U_>_27y z@k;xG18B_h!}HmPjfYM?Y;6j+=QpK|7*ka?)(njNv9{6z$Fu(0QXecx6J39GZ>w|f zWUa@VZn@l`#_tMge%CrS*GhqY!sT=M8d`^xfDvlH&ifLebynwpl~d1rO~mkf)>==u zGhXXxGuKVMZ~f{R*US0TqVOo&AwBE~@$ZV#FA2S9HGr=O!eJkeGqh3BeRBP!e>h+e z`*!8l=<PvvIJ+(jp#o+T#0--(vB&->)-2p26=m#Crw0tH05B#N&6P5RY)s zGIKgtfyZ-kozrlCkFuXJL>Z_r?)~w+z17-^bKDgc_GgCwV)erFfE9*1*C8JDL_E%U zn{6}ux7I$Kv1XZj+GJOoY@HiX{*NsF36s-pauBa`CGPo=|1Yh*$p6>W2l8OAeE=R( zDSy`FbX#6N@AppFq=)!Tc6LR5bq+mk?EuYTJkE*Xb0L1utku$(IR6}2@P_@RaJy$A zK=|am!ghvlNBA(hSnjt}X;YmePS5_AXB9aCr1}F1(D6v5@}Fb^tizLWzom0$)Ox1! z3M_X&@fqR);tRx=h=+-<6VDRQ5w%XLT~R2z@vmHXCu(iKnMzW;@~@(N@gwPSJYguu zhJhm+f|wqPKIgyZ@*kNrwiQJbuXkOQUSU9d-w$}Xy`Txyce2gv9kw`}OOX!_@za7A z4UI9nSjUY`gN{)D$smmz=&6*Tvr>{BR52mmkHy$gI^~xy) z8fU6UH4CmG&LLh&+)r$0#f}p7zCtZ4`ZG>QDJu9J@hk_-5&zE93))5Hg!%0ZKTZ@c zRQeNC+?7PUTLyZI2~PTKP#)P23~aHQz~Ofc*P1gbqA9rYO~jLlvSfK#MR{uPr)J;x z>HD92;4_;(``}X#6{gQfOu1}o&9s@-v!>6UF{gj+z~}bOdHD02_doK5Pkga+%GB7j z>Ui#xGus~fc<<`R+xyl$F*s}8j`jHsJMZ1Kad*d_r?)(Va?qt~V(VfXVh_f0u_t2( zV!t2zdhG9Gug88K`*mzad|rGavA4S4RE(1F-Nebn_Y?kStNl{qO8b?>RbHF@zTj&6 zZNW9Bi#q#F!42NM-bSy(yU)Add%)Y|J!n4_^su+td&Fz8HziQRKwrV#kMqQb6W$*! zp>#T(DIt4p%(jIV7*J|BSz4829g|3wl~<(FnaZjuQ@!fx_QuD|S+nQ3H$J>;YUf@% zZ~k@H->~4un?8E;+PYi4hQ@_Wi*8%IgrhU){dOTep70 zy&F63yZ?br4?gtp=B1zLJZ+tS!U}^8pm8)mG2I}xBNXfN@0`~w;IG5- zt~dQc$E6OxyD`HYKK+zq{q&_-6C7clb(aYor(?bc;CwS#=YLi!m=|n&Iw4~9Gz|x` zlJp%Sq8v<-RDj-R@d#uCP5(9NA^5@!-g>&CraO``x})Rm88( zd7oGa;I^Anzi0mW4+rkbeBz){HJ-DN<-I*yD10J@-@gpM zXRi0pqu#p=f1g0#2h_$w=Rno>LZ7$)k_()kyXzcT#SMynzhypoJy%#tzCb)iJW14h zdU&rH^fO{eEy22}@RXn2?MvVlA4VQ8-5nIth51$l8VSSk;#KY|+MxN_K6IaGr`jsp zXCvL-=Fzf8%lhrl!iowHquU$WSFVr-{MsTHs zc>+%3ZOrExjx&#)5S|Y-UqsCdu2EL}M4x}^9!%#SUf-x%I)-T9tLCER9|)rQye7YI z-MGj5USxxMbGixI6?LDcjG8|scL@b9B{maViS5KA>{mC4tRBb6tDaG)`K*U>oNZZt zr9U~z+J;=owlVj%u|*c)-XnaP%t}LiKNb$(wfdf)ma#tkwgH@IpLyVL-bZubESvj| z>?OIwbZwgPzh_)J-?+fg2kgU*Rocf`=bQ1)6QOEcFe}^AxWKiq>;XbJEQ0w(>7&M_ z-ggL(PszW~-{a|}{`4FP>jFs6i-LOi!NC|&xW=ha;}rb|Qo3r&^+PBA32_pMv1DwK zQp3pLAU=5C77?f~5<*LhK4x&_+2CDR{gGd8TJG{sc%#dHakckwSI*6*Ak?0r*aOmfES4` z5f2d$6Y>5H=mhaJ@eJ`SQSFGr@VL=BqHv+|t9-xo_x=-lm+nUzA925;#p9Olj4dcY zyjx{dbf3gWOi1|M0?ipr=Kx_Yocf&T_>iH5?P0X@)-VxWPQvAj7l!MlaMk}96X16vFt;ncY(nKIeJ~!GfbXKX_f8-?p>SoOK#fb4cbwrG zZzsuz$K6jE{wrdN^7URrEqSe%DmDr={5_rt9mnGxhp5A3(6$xxV*d~2_teb* diff --git a/technology/freepdk45/lib/sram/tgate/layout/master.tag b/technology/freepdk45/lib/sram/tgate/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/tgate/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/write_driver/layout/layout.oa b/technology/freepdk45/lib/sram/write_driver/layout/layout.oa deleted file mode 100755 index 79c3ed15a439b5ee610e063d2b4cf62e186ce571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35228 zcmeHw4RoB^+eY<`UOXUkwfw&fpz0Rw_Kgk4#d23tXvR9SY+ zCJm~g;U}~uE@>Q^o)St=NH=Fgi@PN$ZD&*OhTXcYovvfBp z`#j(GJTv3Z9%M@kEi8evvAO*maRLpV!#q3{ynd||V&Mc5`> zpmrAukDDRIEr&tHM}%X-&j{avgi{9qJ+dryQ#}hok~Bh@_7|lulBbI^HQjz6%n0nD))lYUzQ>r z%trYOMSq{@u2=cz)!r9HXP+=7G=J{LIXowUa}qcwfpZc#CxLSkI46N~68Kq=K=b0} zt4EeBX=)fAZRp)Hyen7eR3&z}mj@RI&CQFKv@TxK+^!tQmn%LvFtl@b&*-+?V9S!8 zt$ls1O-(&5%?$|kv@UL1+*Cp^NY@3yfw8A*C??U(&;I&;1eD0afLU1!8 z2v9Y2^}?CLS;E=E^MpE91Q#gob5v62oC;y3(C4da#eL37DV`Q)gtfwn&S7;bS1+6? z^!aSI;^ztH2+tQ@ApD5X=edg%pDVmr_)($Hdku;=3NID%v`gpn;AM(05MC}^C|o4G zLU^U{D&f__#lmZZON33r__?!H={|ohReYJSUASC$t?)YG3gPua_K86rZ+Mj9Ifh3c z9)oy9;`xk6DW1D|RHEKd=csSgHR>64jQU00qFzy_s88p^Q=fR&zYzW+c%BP+C%|JX z&-e}SjqsPk&x4;2e;ND&_{-rJ!Y_iq0{%+)tKhGOUkrZ@{1SLh8Xk9B;9KF_;FrQL zgXcWt+`AV3I(Qz3uZO<@{zmu?_?7Uh;8(+U!moi}3%?G2J^WN1`$YGCW5mVT|D32_ zv{^J_H^bA2-2#6r{B7_X;eGcpRXklijJE?8LOmx^PwA+ubT@Kxz;y_zmvq!kx|K>_ zC7h_Ql~J`|J|`R;=Sg@4p?EkMktTBCykt3DGZgMoY?qU&*T_OaFn(jy!1&EVw-aR- zKh1~lU%Z}p-SGWQgQ|20Hw!tAbfz;An!d|5gtepj&!FQ<{<#N^x5hM_9~6jnLSuYV zy2kvZbl0;`ss9M)nXbHX$E^>}qk3f`r3lN%^EsXuKM-o?Df3-lZH5zV3m2CX_o>l= zv0P98=)kVrXwcKYW!LIm8+vz)bq{RM-8t5~eMD)+c>k7_JI99a?A?`HeRnZ+bh!T( zRLhO-2oPL3IIwkSdv0iKN6^3JV*{hPHT?r)!=o!lMuvO4dq;Akt6|=E4UCTM9Nsb9 znY*ud=ipeF9`xk~2k#!peX6s+tG^K0Ft8YKj|%HXhj)&w9qiqTuI2j1 zg080E*4203)zh8p+Xl{h){f?K8#`}qZCgCFeRxODuCc9)2YVkF-Z>TsoLr__@Tp)h zxNl%+D}~oTaNm8ahlj>``^Glp?i-88R}b$Bw)T$YN{hteEK)*cHH3wcJt-wdNySQN zMJX|AcMNRZb^=pjLX1{asDxCZ(7@1+vEHG++`OP`Nf~J@9*GIj@t~_Y=xPbNTFX_G zOe}mwIS9GYrT_wkibt{LV0&(?cd!Ynx^pboIe_e2Z@YC(A=(^#YM_5?Td*w`cDJ{` ze*=kN{C5uKcH|&{NM(V$2KvIm$nAz=w3TCRqz^-C#==Ojd-c#*@Blxgu6^M^X&lNZ z*e%UHw>0(a8t7dNj|tQp6jFk&r9s!SpsT$c4~3Ge!^*|zgcVkuSYcJrwH%XR34Bw~ z*T3Zs2w}&-@DMEpO$SYbrxVIx)S57CO|9^4@L;nEd^WYiFAsK%_HJK1Ftp3UK`>0i zXrqDVCU_8N27zV}Xa<315NHMgobtMw!AJ|rwV+%J)uSb}8KJT0YC(k-RA@nk7F1|K zg%(t3MTJ&WXhnrqDiq4KqFgJ=wW3@r%C(|g8_KnzTpP-@prj8NtG~ajm|J=<78py3xex^j zw7e88FGb5s!QoOgwG>S)MN><`;W9L{3>+>)xn(G~4CR)g+%l9~wrs)%r3h|tH7bGd zG7xTG5_ERm8tmG!gPb=q&=}m>y>er)ksn(IgDs;dg{IrlbbCv%rgPnzo~8(zBTypG z1m1VNs&$9!SPi__MsL63`z#kosG#>w4m+=%S|c>|QdsFZu1{E6Kl29;@uEy1VM$sx4LftM*m@kLuku<26s!JYDll z&096ysZXXxQoB?6)GMh&sn=4kr`}8*OTC?HNH0t`r>{+~O5c>eBYjVLOZt=P(e%Gc z?@2$N-kW|py+8eO`at?%`qlK2^wIQ>(#O+3PFH5Knc11SnfaNkGOd{vna<3HOn2tq zOn+ui=JCwl%+r}?GryPlgUq)x`OJUF{8i@C+VNcId5LkM~}xrjVI5tJPS{xN4_`l zMm`}$OA0Hjcp~KcmTINX5LOD^{vq-4s_-@85#cdmR`nW$t-=+;4q?AKxR93sa6b~d z-{o+2R6IQ2Gw8U{`$pIIJ<0*qGdf?%=ioh-0Pl6^sdgIbJj01(BAKqLu1ST5(;%GR zixWf1wkrPNjwM8fbdE?Yzo=$G;<{ujQk0eqE|QDV_<0d7jT(S#gQ{7FzxMDi7>|%Q zHbuvy2l)#t5Lgk;cG&Zz+2Zs z>ZyAL`p+qcM<%xAd`)Y2uTb6zuJ^p^e?$0!aKF&=tsIt^KGir8$cK6H`oj|4@T6%z zKB)YYSN4&f@^v5Br%RwDmbc~eloF_yXT$E>o>y5BMBjRCJ@-1`_V=mWSA@?9pA&vV z_>wR$d`0-G@QCnrq1OY-fzJIdhn^SK6UUA5bkn(4?Trf|&Ph2|Hwp5KXkLUunEidCj=SDOX#IA% zhLGx+f3O?u3w78sh@+`m&zY|>;|S&%c0Zj*Y=k#|-ZygJ%4ajorzBgI~89q+#u{0ZW4}Z!oAAFCLG7E)OlRWp~o}6k9K+-%hBOj)46=STs(cQzGz3;1J zl+Q?^93ywah;;zT14TtK(GQ1z!FYsVvin_)m-YKh=dI_b z=Y{93=ksLOrO?)wbUwyr!9K;;Crz7hZDw`P1HZS>P(pJm!O5z(bnm35o$h&-RfoxU z*awfVYL=6S$9=Nn>2ZsXr^h*Nho^~g^XrbeAGQ--_q>jJTx@5&jy8zEeBnajRl+60 zR$;qvg|I`|DO@i!KOa;Sn3_DC~~yuSB*mUh%l~vH@d9XZv-gxId~M7*DtUxa9Bh z=C95ZR&+n?z;mAO(q!xM>QkOwU7Gk(#ix_suh^fwzv{M%+bSw6k7$IW^GsFIv09#D ztE{Y;c@!^jgKqQ^JgKE zZ(&g4`F{((o?u*L53HfUf{yz}yFN5Y+aTyk;$9E#h z<05SS{u5ph`~&s-I2I_z7eV50pxy%1Cw;hR+-edv)u~KkS|v5)jMLJoX_>^#nv%N3 z$6+Bo<|Kj(66Xb#iAxjzH+UuZ)8HZWj_+pTUogAq!c9Hjwfrt?$~CV#JZ(?wv%B`T z&RlqS+8ftC+w<17r%Eg4GPLEh&-RRdHVoa4(Cu#}-b(D5vuDoUImOUu`mMU}G=691 z;l^U!J5cR01D{yU9(>l2qw+w$V7&7&_C2^X6!5-x^{go~kK zZZQ&Z%T-ro9RyC?FpC8Pq`^+)mx#~6YR=`v{{ z^rIEXaf!wz2p$cdgdfKzJwrr1vn@KritenPn<^uk@pakjcDeOAGAGaU5=k$3k?$%THqyzi@= z;q$NePw{c}{whAM-e%Wy1KG@(PfJ(FGryAnxL|}GE==Eo#AmJ|3ggLjR*~3(r$zy2;;yoj`TLj z_RDDa-(ak6hb{bj;4~bt-+=HLXZpjKz%0l5A&MUBJpsCRV;wz+a-Tz6jHIU&S&r=tq8-kO^*A^(oydCMMIQMhvOS{fU5N7cAn!$#BOZfag*3KHB)@dzpLXw8 zfb0+PdiVzH8NLbrjb8?R?yE|17x+E||BvuYFO4(35ox8kAN0DAz6`h%{alHLng6Fi zwo{7Rz&GWn(w8s!-Nq}w_Vs`L``>)=5C7;}fBYwZ_V51u>c9EH ze`)!PkV1(*DLxJ?^`UV-hD3C&;IT}W{i{a~J^$)Y2o-ajkCyOJ|5yb8NMC-WM3EO|4v#G~)kvg3I`vRE0p%XibMdQne+4Z^{-u)uo z=R)6e`ukb@P7NL9bvB&ar+%NxQ5PrU++V-abvvvRO6i*P}5PfQwEZ?uE0E>@LaznFRzA-!#yx*P_&-U2!@XHFqEAd zf3KduOx2!PHd2p*9Z@%aYT$7{E`~VADZg_3x%@=)JpR1G1U+Bf-rH*E$FT-0C77&m zzR>gA^Vj?Njhg>{ep}#El8nbapKOQA;n7%qf4^19A6nqN@!UDp{LD_DQIn~x_`B+4 zRb4F~N@x#Nyjo$Xm_B`aB9W~~@=hS7IhW^G+>!XA+O<>yXuPZp;) zQJml9twy1nK(7jnPgK4JMra{;VE?7I2)(_tOPezyERq&6mfC(K0W^qN+5iH zg?lA+w;(4?Ut(PKuwdT`OnroPJdF;^=(y(cuA9 z`JWe<*nZX~Gk;fAQBz%6H!Yfskv$A=P5lu{>#U|HlXK?aUv|!%+9V!}(48^;iR{~l zJ)bi9u=imi{(oNjNb{4Oj=2Ve3+Ebt3uH3uFSZJW1!=15ukWpW?mb)UvCXZP8*==f zINNuxV~uEKGUo#K-{<{69q>Bq_eOmW;PxhZe_>qf<^iGadtSz#kj}pwITmiJf?$6* zxW)HB+`l+>M%9Bj?pHf5zhC|6&_Fm{)z87tnFRRTH1wP!mqmRK*WEDaNgGsCJEcic zA!=mFT*eK2=v*VDkqLEJitTD4mef2UJ!&HnohU*Y$t2EZ)yd}h$u!=7NG7w{+H9gK zQB{R6iY2m%n#&W}Y_c&`RaG6PW~-(plG#~!SW*?Xktg|D@WC_Imo%qtz*&uPz65%_7G zd)fa7QJ4MyHt6vg&HYIC8J78!7xO7E=KmJThxth7vz*5ur@sU)0Wa+TR`_0|jU)aD z`toChDG#0{9)hm{{m+BWV?dVw2=cB%{5OGoSA^}{hdTV7GWPQTT%r2EWY%Fj#Si}Lys`a^l~j)3|1qmSg5`paixqtG`#n_@oi6s`mBO#dG6 z_tDNjp$^addr^nGWz(D@E!Ey5hrhk>Xb+LwhL3p-Ny_5lAD zb_C;%X0DRpkQRT(se^e%_t4xQ<^y!To0`w;J|{GPC%uXumz)yVC&tDzOb4q>Oz z?-36w{=Crpp}gWS1)<}!YdZ5;4t=jcJ)!ga=OJTy=X@ zTlLnec6iz-xRAwME*H=<{uxx_^K|~E;9@X13gmNiK7ZzWdOrd7KoOEq?mvcYy9SuU zJY?O<$c5oBCHlzgwa3CUGxAj(xsqbh_jy8o#k9x82){zwz^?PyGc z*Esla$7Nd&NMS68a=0z3hIa@f=eW`JtjAdi@O70pUxyTTc||`kuo;}tQwOewhYRNc zw|^DM%8IJW>MFdnnY(ZH>aCsI)(ouu>20P&8a_s<^^lkPHS4% zyuPKY^`^F)mu{FoBT-kMyzB0n%Rbh=Y5B*mz2~}5tho1I{L5L__uR1g#@>!CEBjXU zvmFlY!->x&9!)%%cqZ{;;?EQRIq_!VCy5!!`N_6qSMr|ZRC2GuZ%8)b_aj^I-cK8T zH*y)?16q#Xi@YwhArDl1w&J0R=yNKq6y)Wry9jGfba;!o)X6v)QmIt*&QbB5=ql{6 zPjGGr4^I3AxZ3Qr=|Nrn%vrO~n{)mJAGz?NxfchQG&Ej1Z~kQqE?>CliYu=Q7GJZZ zskx=KZRxW1<=0*pTz^B*u`*cQxn}LU^<6jJyy2ExZ`&B$acB2kcYkct$M5+B#;E82 zVg4LMV^n93&uskF;g>&WpVD_DePeJJeih(U{@v>aFXzE#{w^|6+a=iqk3PyZsaAM=^h*`m_yn@3;N) zc`oASsz_=j4S#a<8zD8T|T$C zy@}pa^0~(6m?bjktwKNdpQ{Z(gV5tu4%tUKBl}I~@*NVu^J>TG#;Ej%_tX0U_P}~l zl9n&&Ss~0jGQJ1S_i(6FEKl*2erJa1p-d&eGu|gk-rhgO&+XQq$?hAY>jf|=7i+FC z{?4B)s{3WDTaPxVAoso8>$+Z9zLb#=#^+W1-oSEnI}?46{V6eUNcfuYb)n~NO6|KJ z<*;26@V!$?aiiy*@hi$dQy_a{@g#j_I_ZzY`#gbQ=n{#CHzwyVPdv3T8T3a#je*QIVP?946j-SD4)cU_gq7x2(y9bx#%FGPradEm4SU+CC|%+k3OmM!_9oWd)a zGUq4H2amg}S{B|;>RJbT-xHn78BffOVzdt)U%$V__sl3$*ONL}-3s%_>jXC5krO6_ zNn!kZX8!(Jx$hmszfb7z^P3^BKj!z47@X*Rv*Rk~_s%TWtOV)bL7K0)pQo=-d|Y@y zcu06e_@?kj!kAc!a+A0`Ppp5A$I|Ur~B&lPn`_UidR-& zS-k{*NXt7tj?{hJ@^K_Xn~{ttM)m{uSWZtQt3owOr(VFq_E9W~@%%?niO+)h9PXpx1&;0oD#8`yWM0Ad_fXz*o6{kMZy3{; zI_hJnlQIC4UgtFkaeH8UQO+*-d&N`T2k3gcU>9vC#a6+d$t>8sl#1eg4V%wajRWU3 z_c)4%`!g~qa}&6{?Xokx&vHfEPt%>~`IYwW(EIa3yJQ9~9*4?>&d)Dw?_BPX z^3N71Ozq=j?OF*7XB6~2^E~Ex#QIA@ z?&s;+5uZ!q_QdojI*0U2Zi7NTOQw5L=yQtsE{C=&M%xviH(akybfZ?L{z-Bs$+?ec zUR2|#qROrv9ZxSXqzGu5vGK@F(w|77(pey(=kLuSvyhx_mG z@^f!Kf9Dy^?YZ3P>Z#w~u)fC6Q}O5TZpiDSe+SaP8)&|KZ{_tY{yg5_yYqckhZx@= z#Bnrq-NH@6dxe{Y{lX{I;U|TbQ#tf}@HxQq!trwT%BB1NcXYnTBkIL__sMqLR(zh7 zBN+GZI`6_e1T}iL=AHHLY|lTb2fFy)If}yLZo5o-}HC`jPF66+aQm-Bcq;I3n5luVA*Ht6}`lU(20)YAKDZZnCd*S zg2nY>qI2R@=aa|Ly>ovp)3A@o^c^_Adr9ZtqljXY|8zU1;PxFiIz3+A{2x#OT;HGB z^BozG!hN&i6;5{pqVM_X_Fhr?L80%JAXtO=>LPx$Jjn8P8t$rzLX~A;ykxQT9jibOC?Tr9#3{2l83Y5 Jwyv3%`2XaD6Yl^3 diff --git a/technology/freepdk45/lib/sram/write_driver/layout/layout.oa- b/technology/freepdk45/lib/sram/write_driver/layout/layout.oa- deleted file mode 100755 index e5f3cdf735e6b64feee8710cf120cd5bc6a20e46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33628 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%0DW6Ot?#E?I?t%4`m+%l*44P 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 Date: Fri, 22 Feb 2019 16:44:50 -0800 Subject: [PATCH 002/324] Fix extract bug. --- compiler/verify/magic.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/compiler/verify/magic.py b/compiler/verify/magic.py index 5b4e8e3f..392f98a0 100644 --- a/compiler/verify/magic.py +++ b/compiler/verify/magic.py @@ -45,7 +45,7 @@ def write_magic_script(cell_name, gds_name, extract=False, final_verification=Fa #f.write("load {}_new\n".format(cell_name)) #f.write("cellname rename {0}_new {0}\n".format(cell_name)) #f.write("load {}\n".format(cell_name)) - f.write("cellname delete \(UNNAMED\)\n") + f.write(r'cellname delete \(UNNAMED\)'+"\n") f.write("writeall force\n") f.write("select top cell\n") f.write("expand\n") @@ -58,9 +58,8 @@ def write_magic_script(cell_name, gds_name, extract=False, final_verification=Fa else: pre = "" if final_verification: - f.write(pre+"extract unique\n".format(cell_name)) - else: - f.write(pre+"extract\n".format(cell_name)) + f.write(pre+"extract unique\n") + f.write(pre+"extract\n") #f.write(pre+"ext2spice hierarchy on\n") #f.write(pre+"ext2spice scale off\n") # lvs exists in 8.2.79, but be backword compatible for now From 0cb7c2b09043e14c8db1abeedec3e2dc7ee8253b Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 22 Feb 2019 17:10:23 -0800 Subject: [PATCH 003/324] Add port makeall for removing symmetry problems in netgen --- compiler/verify/magic.py | 1 + technology/scn4m_subm/mag_lib/setup.tcl | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/compiler/verify/magic.py b/compiler/verify/magic.py index 392f98a0..52bd0266 100644 --- a/compiler/verify/magic.py +++ b/compiler/verify/magic.py @@ -53,6 +53,7 @@ def write_magic_script(cell_name, gds_name, extract=False, final_verification=Fa f.write("drc catchup\n") f.write("drc count total\n") f.write("drc count\n") + f.write("port makeall\n") if not extract: pre = "#" else: diff --git a/technology/scn4m_subm/mag_lib/setup.tcl b/technology/scn4m_subm/mag_lib/setup.tcl index 084428b5..1799e910 100644 --- a/technology/scn4m_subm/mag_lib/setup.tcl +++ b/technology/scn4m_subm/mag_lib/setup.tcl @@ -4,12 +4,12 @@ equate class {-circuit1 nfet} {-circuit2 n} equate class {-circuit1 pfet} {-circuit2 p} # This circuit has symmetries and needs to be flattened to resolve them # or the banks won't pass -flatten class {-circuit1 bitcell_array_0} -flatten class {-circuit1 bitcell_array_1} -flatten class {-circuit1 precharge_array_0} -flatten class {-circuit1 precharge_array_1} -flatten class {-circuit1 precharge_array_2} -flatten class {-circuit1 precharge_array_3} +#flatten class {-circuit1 bitcell_array_0} +#flatten class {-circuit1 bitcell_array_1} +#flatten class {-circuit1 precharge_array_0} +#flatten class {-circuit1 precharge_array_1} +#flatten class {-circuit1 precharge_array_2} +#flatten class {-circuit1 precharge_array_3} property {-circuit1 nfet} remove as ad ps pd property {-circuit1 pfet} remove as ad ps pd property {-circuit2 n} remove as ad ps pd From 3802c537e51164c15895752eda4b8de426c6d678 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Wed, 27 Feb 2019 22:19:03 -0800 Subject: [PATCH 004/324] added add_db.py to add .db files to datasheets --- compiler/datasheet/add_db.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 compiler/datasheet/add_db.py diff --git a/compiler/datasheet/add_db.py b/compiler/datasheet/add_db.py new file mode 100644 index 00000000..1df3cf7b --- /dev/null +++ b/compiler/datasheet/add_db.py @@ -0,0 +1,34 @@ +from pathlib import Path +import glob +import os + +# This is the path to the directory you would like to search +# This directory is searched recursively for .html files + +path_to_files = '../temp/' + + +def get_file_tree(path): + return list(Path(path).rglob("*.html")) + + +def parse_html(file, db): + start_tag = 'Deliverables

    ' + with open(file, 'r+') as f: + + file_string = f.read() + start_byte = file_string.find(start_tag) + len(start_tag) + row = '' + file_string = "%s%s%s" % ( + file_string[:start_byte], row, file_string[start_byte:]) + f.seek(0) + f.write(file_string) + + +datasheet_list = get_file_tree(path_to_files) +for datasheet in datasheet_list: + if glob.glob(os.path.dirname(datasheet)+'/*.db'): + db_files = list(Path(os.path.dirname(datasheet)).rglob("*.db")) + for db_file in db_files: + parse_html(datasheet, db_file) From d1788018825ab125799b81d7be3303680c9bdf23 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Wed, 6 Mar 2019 07:41:38 -0800 Subject: [PATCH 005/324] Simplify tech organization and import --- compiler/globals.py | 48 ++++++++++--------- .../__init__.py} | 6 --- technology/freepdk45/tech/__init__.py | 2 +- .../__init__.py} | 5 -- technology/scn3me_subm/tech/__init__.py | 2 +- .../__init__.py} | 5 -- technology/scn4m_subm/tech/__init__.py | 2 +- technology/setup_scripts/README | 4 -- 8 files changed, 29 insertions(+), 45 deletions(-) rename technology/{setup_scripts/setup_openram_freepdk45.py => freepdk45/__init__.py} (83%) rename technology/{setup_scripts/setup_openram_scn3me_subm.py => scn3me_subm/__init__.py} (83%) rename technology/{setup_scripts/setup_openram_scn4m_subm.py => scn4m_subm/__init__.py} (83%) delete mode 100644 technology/setup_scripts/README diff --git a/compiler/globals.py b/compiler/globals.py index c1422592..a3e98b56 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -187,11 +187,12 @@ def setup_bitcell(): # See if a custom bitcell exists from importlib import find_loader - bitcell_loader = find_loader(OPTS.bitcell) - replica_bitcell_loader = find_loader(OPTS.replica_bitcell) - # Use the pbitcell if we couldn't find a custom bitcell - # or its custom replica bitcell - if bitcell_loader==None or replica_bitcell_loader==None: + try: + __import__(OPTS.bitcell) + __import__(OPTS.replica_bitcell) + except ImportError: + # Use the pbitcell if we couldn't find a custom bitcell + # or its custom replica bitcell # Use the pbitcell (and give a warning if not in unit test mode) OPTS.bitcell = "pbitcell" OPTS.replica_bitcell = "replica_pbitcell" @@ -403,27 +404,30 @@ def import_tech(): try: OPENRAM_TECH = os.path.abspath(os.environ.get("OPENRAM_TECH")) except: - debug.error("$OPENRAM_TECH is not properly defined.",1) - debug.check(os.path.isdir(OPENRAM_TECH),"$OPENRAM_TECH does not exist: {0}".format(OPENRAM_TECH)) - - OPTS.openram_tech = OPENRAM_TECH + "/" + OPTS.tech_name - if not OPTS.openram_tech.endswith('/'): - OPTS.openram_tech += "/" - debug.info(1, "Technology path is " + OPTS.openram_tech) + debug.error("$OPENRAM_TECH environment variable is not defined.",1) + # Add all of the paths + for tech_path in OPENRAM_TECH.split(":"): + debug.check(os.path.isdir(tech_path),"$OPENRAM_TECH does not exist: {0}".format(tech_path)) + sys.path.append(tech_path) + debug.info(1, "Adding technology path: {}".format(tech_path)) + + # Import the tech try: - filename = "setup_openram_{0}".format(OPTS.tech_name) - # we assume that the setup scripts (and tech dirs) are located at the - # same level as the compielr itself, probably not a good idea though. - path = "{0}/setup_scripts".format(os.environ.get("OPENRAM_TECH")) - debug.check(os.path.isdir(path),"OPENRAM_TECH does not exist: {0}".format(path)) - sys.path.append(os.path.abspath(path)) - __import__(filename) + tech_mod = __import__(OPTS.tech_name) except ImportError: - debug.error("Nonexistent technology_setup_file: {0}.py".format(filename)) - sys.exit(1) + debug.error("Nonexistent technology_setup_file: {0}.py".format(filename), -1) - import tech + OPTS.openram_tech = os.path.dirname(tech_mod.__file__) + "/" + + + # Add the tech directory + tech_path = OPTS.openram_tech + sys.path.append(tech_path) + try: + import tech + except ImportError: + debug.error("Could not load tech module.", -1) # Set some default options now based on the technology... if (OPTS.process_corners == ""): OPTS.process_corners = tech.spice["fet_models"].keys() diff --git a/technology/setup_scripts/setup_openram_freepdk45.py b/technology/freepdk45/__init__.py similarity index 83% rename from technology/setup_scripts/setup_openram_freepdk45.py rename to technology/freepdk45/__init__.py index 3ba0aa16..f7f801ea 100644 --- a/technology/setup_scripts/setup_openram_freepdk45.py +++ b/technology/freepdk45/__init__.py @@ -8,7 +8,6 @@ import sys import os TECHNOLOGY = "freepdk45" -LOCAL = "{0}/..".format(os.path.dirname(__file__)) ########################## # FreePDK45 paths @@ -33,8 +32,3 @@ os.environ["DRCLVS_HOME"] = DRCLVS_HOME # except: # Always use the one in the PDK dir for FreePDK45 os.environ["SPICE_MODEL_DIR"] = PDK_DIR+"/ncsu_basekit/models/hspice/tran_models" - -########################## -#Paths required for OPENRAM to function - -sys.path.append("{0}/{1}/tech".format(LOCAL,TECHNOLOGY)) diff --git a/technology/freepdk45/tech/__init__.py b/technology/freepdk45/tech/__init__.py index 6b2d03b3..2573d2c2 100644 --- a/technology/freepdk45/tech/__init__.py +++ b/technology/freepdk45/tech/__init__.py @@ -2,5 +2,5 @@ Import tech specific modules. """ -from tech import * +from .tech import * diff --git a/technology/setup_scripts/setup_openram_scn3me_subm.py b/technology/scn3me_subm/__init__.py similarity index 83% rename from technology/setup_scripts/setup_openram_scn3me_subm.py rename to technology/scn3me_subm/__init__.py index 1508b2a8..9542c26a 100644 --- a/technology/setup_scripts/setup_openram_scn3me_subm.py +++ b/technology/scn3me_subm/__init__.py @@ -34,8 +34,3 @@ os.environ["DRCLVS_HOME"] = DRCLVS_HOME OPENRAM_TECH=os.path.abspath(os.environ.get("OPENRAM_TECH")) os.environ["SPICE_MODEL_DIR"] = "{0}/{1}/models".format(OPENRAM_TECH, TECHNOLOGY) -########################## -# Paths required for OPENRAM to function - -LOCAL = "{0}/..".format(os.path.dirname(__file__)) -sys.path.append("{0}/{1}/tech".format(LOCAL,TECHNOLOGY)) diff --git a/technology/scn3me_subm/tech/__init__.py b/technology/scn3me_subm/tech/__init__.py index 6b2d03b3..2573d2c2 100755 --- a/technology/scn3me_subm/tech/__init__.py +++ b/technology/scn3me_subm/tech/__init__.py @@ -2,5 +2,5 @@ Import tech specific modules. """ -from tech import * +from .tech import * diff --git a/technology/setup_scripts/setup_openram_scn4m_subm.py b/technology/scn4m_subm/__init__.py similarity index 83% rename from technology/setup_scripts/setup_openram_scn4m_subm.py rename to technology/scn4m_subm/__init__.py index 19a4960c..d8474497 100644 --- a/technology/setup_scripts/setup_openram_scn4m_subm.py +++ b/technology/scn4m_subm/__init__.py @@ -34,8 +34,3 @@ os.environ["DRCLVS_HOME"] = DRCLVS_HOME OPENRAM_TECH=os.path.abspath(os.environ.get("OPENRAM_TECH")) os.environ["SPICE_MODEL_DIR"] = "{0}/{1}/models".format(OPENRAM_TECH, TECHNOLOGY) -########################## -# Paths required for OPENRAM to function - -LOCAL = "{0}/..".format(os.path.dirname(__file__)) -sys.path.append("{0}/{1}/tech".format(LOCAL,TECHNOLOGY)) diff --git a/technology/scn4m_subm/tech/__init__.py b/technology/scn4m_subm/tech/__init__.py index 6b2d03b3..2573d2c2 100755 --- a/technology/scn4m_subm/tech/__init__.py +++ b/technology/scn4m_subm/tech/__init__.py @@ -2,5 +2,5 @@ Import tech specific modules. """ -from tech import * +from .tech import * diff --git a/technology/setup_scripts/README b/technology/setup_scripts/README deleted file mode 100644 index 628cec7e..00000000 --- a/technology/setup_scripts/README +++ /dev/null @@ -1,4 +0,0 @@ -THIS DIRECTORY SHOULD ONLY CONTAIN SETUP SCRIPTS FOR TECHNOLOGIES. - -These scripts will be called automatically by the import_tech functions in -globals.py in the compiler directory. From cfc14f327e657ff826df368ca1359e1dd39e3152 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Wed, 6 Mar 2019 07:46:30 -0800 Subject: [PATCH 006/324] Factor default corner out of import_tech --- compiler/globals.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/compiler/globals.py b/compiler/globals.py index a3e98b56..cef24cf6 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -128,6 +128,8 @@ def init_openram(config_file, is_unit_test=True): import_tech() + set_default_corner() + init_paths() from sram_factory import factory @@ -393,9 +395,20 @@ def init_paths(): except: debug.error("Unable to make output directory.",-1) +def set_default_corner(): + """ Set the default corner. """ + + # Set some default options now based on the technology... + if (OPTS.process_corners == ""): + OPTS.process_corners = tech.spice["fet_models"].keys() + if (OPTS.supply_voltages == ""): + OPTS.supply_voltages = tech.spice["supply_voltages"] + if (OPTS.temperatures == ""): + OPTS.temperatures = tech.spice["temperatures"] + -# imports correct technology directories for testing def import_tech(): + """ Dynamically adds the tech directory to the path and imports it. """ global OPTS debug.info(2,"Importing technology: " + OPTS.tech_name) @@ -428,13 +441,6 @@ def import_tech(): import tech except ImportError: debug.error("Could not load tech module.", -1) - # Set some default options now based on the technology... - if (OPTS.process_corners == ""): - OPTS.process_corners = tech.spice["fet_models"].keys() - if (OPTS.supply_voltages == ""): - OPTS.supply_voltages = tech.spice["supply_voltages"] - if (OPTS.temperatures == ""): - OPTS.temperatures = tech.spice["temperatures"] def print_time(name, now_time, last_time=None, indentation=2): From acf2798a188dd1b6d691b5d225bfe102e146b9bc Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Wed, 6 Mar 2019 08:29:43 -0800 Subject: [PATCH 007/324] Add link to presentation in README --- README.md | 10 +++++++++- compiler/tests/03_ptx_1finger_nmos_test.py | 11 ++++++----- compiler/tests/03_ptx_1finger_pmos_test.py | 11 ++++++----- compiler/tests/03_ptx_3finger_nmos_test.py | 15 ++++++++------- compiler/tests/03_ptx_3finger_pmos_test.py | 15 ++++++++------- compiler/tests/03_ptx_4finger_nmos_test.py | 15 ++++++++------- compiler/tests/03_ptx_4finger_pmos_test.py | 13 +++++++------ 7 files changed, 52 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index d97356a4..c567ee70 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,13 @@ other views necessary to use SRAMs in ASIC design. OpenRAM supports integration in both commercial and open-source flows with both predictive and fabricable technologies. +# Documentation + +Please take a look at our presentation We have created a detailed +presentation that serves as our [documentation][documentation]. +This is the most up-to-date information, so please let us know if you see +things that need to be fixed. + # Basic Setup ## Docker Image @@ -197,6 +204,7 @@ Each specific technology (e.g., [FreePDK45]) should be a subdirectory # Further Help + [Additional hints](./HINTS.md) ++ [Documentation][documentation] + [OpenRAM Slack Workspace][Slack] + [OpenRAM Users Group][user-group] ([subscribe here][user-group-subscribe]) + [OpenRAM Developers Group][dev-group] ([subscribe here][dev-group-subscribe]) @@ -233,7 +241,7 @@ If I forgot to add you, please let me know! [Github pull request]: https://github.com/VLSIDA/PrivateRAM/pulls [Github projects]: https://github.com/VLSIDA/PrivateRAM -[email me]: mailto:mrg+openram@ucsc.edu +[documentation]: https://docs.google.com/presentation/d/10InGB33N51I6oBHnqpU7_w9DXlx-qe9zdrlco2Yc5co/edit?usp=sharing [dev-group]: mailto:openram-dev-group@ucsc.edu [user-group]: mailto:openram-user-group@ucsc.edu [dev-group-subscribe]: mailto:openram-dev-group+subscribe@ucsc.edu diff --git a/compiler/tests/03_ptx_1finger_nmos_test.py b/compiler/tests/03_ptx_1finger_nmos_test.py index 9a81810e..32372e25 100755 --- a/compiler/tests/03_ptx_1finger_nmos_test.py +++ b/compiler/tests/03_ptx_1finger_nmos_test.py @@ -7,19 +7,20 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug -class ptx_test(openram_test): +class ptx_1finger_nmos_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import ptx import tech debug.info(2, "Checking min size NMOS with 1 finger") - fet = ptx.ptx(width=tech.drc["minwidth_tx"], - mults=1, - tx_type="nmos") + fet = factory.create(module_type="ptx", + width=tech.drc["minwidth_tx"], + mults=1, + tx_type="nmos") self.local_drc_check(fet) globals.end_openram() diff --git a/compiler/tests/03_ptx_1finger_pmos_test.py b/compiler/tests/03_ptx_1finger_pmos_test.py index a3ed99ff..2ca3181b 100755 --- a/compiler/tests/03_ptx_1finger_pmos_test.py +++ b/compiler/tests/03_ptx_1finger_pmos_test.py @@ -7,19 +7,20 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug -class ptx_test(openram_test): +class ptx_1finger_pmos_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import ptx import tech debug.info(2, "Checking min size PMOS with 1 finger") - fet = ptx.ptx(width=tech.drc["minwidth_tx"], - mults=1, - tx_type="pmos") + fet = factory.create(module_type="ptx", + width=tech.drc["minwidth_tx"], + mults=1, + tx_type="pmos") self.local_drc_check(fet) globals.end_openram() diff --git a/compiler/tests/03_ptx_3finger_nmos_test.py b/compiler/tests/03_ptx_3finger_nmos_test.py index e1febdbc..4e5e2eaf 100755 --- a/compiler/tests/03_ptx_3finger_nmos_test.py +++ b/compiler/tests/03_ptx_3finger_nmos_test.py @@ -7,21 +7,22 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug -class ptx_test(openram_test): +class ptx_3finger_nmos_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import ptx import tech debug.info(2, "Checking three fingers NMOS") - fet = ptx.ptx(width=tech.drc["minwidth_tx"], - mults=3, - tx_type="nmos", - connect_active=True, - connect_poly=True) + fet = factory.create(module_type="ptx", + width=tech.drc["minwidth_tx"], + mults=3, + tx_type="nmos", + connect_active=True, + connect_poly=True) self.local_drc_check(fet) globals.end_openram() diff --git a/compiler/tests/03_ptx_3finger_pmos_test.py b/compiler/tests/03_ptx_3finger_pmos_test.py index af9a5d42..53a4aeca 100755 --- a/compiler/tests/03_ptx_3finger_pmos_test.py +++ b/compiler/tests/03_ptx_3finger_pmos_test.py @@ -7,21 +7,22 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug -class ptx_test(openram_test): +class ptx_3finger_pmos_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import ptx import tech debug.info(2, "Checking three fingers PMOS") - fet = ptx.ptx(width=tech.drc["minwidth_tx"], - mults=3, - tx_type="pmos", - connect_active=True, - connect_poly=True) + fet = factory.create(module_type="ptx", + width=tech.drc["minwidth_tx"], + mults=3, + tx_type="pmos", + connect_active=True, + connect_poly=True) self.local_drc_check(fet) globals.end_openram() diff --git a/compiler/tests/03_ptx_4finger_nmos_test.py b/compiler/tests/03_ptx_4finger_nmos_test.py index 08a20898..10f7deda 100755 --- a/compiler/tests/03_ptx_4finger_nmos_test.py +++ b/compiler/tests/03_ptx_4finger_nmos_test.py @@ -7,21 +7,22 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug -class ptx_test(openram_test): +class ptx_4finger_nmos_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import ptx import tech debug.info(2, "Checking three fingers NMOS") - fet = ptx.ptx(width=tech.drc["minwidth_tx"], - mults=4, - tx_type="nmos", - connect_active=True, - connect_poly=True) + fet = factory.create(module_type="ptx", + width= tech.drc["minwidth_tx"], + mults=4, + tx_type="nmos", + connect_active=True, + connect_poly=True) self.local_drc_check(fet) globals.end_openram() diff --git a/compiler/tests/03_ptx_4finger_pmos_test.py b/compiler/tests/03_ptx_4finger_pmos_test.py index 01857eda..e8dc2bc0 100755 --- a/compiler/tests/03_ptx_4finger_pmos_test.py +++ b/compiler/tests/03_ptx_4finger_pmos_test.py @@ -7,21 +7,22 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class ptx_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import ptx import tech debug.info(2, "Checking three fingers PMOS") - fet = ptx.ptx(width=tech.drc["minwidth_tx"], - mults=4, - tx_type="pmos", - connect_active=True, - connect_poly=True) + fet = factory.create(module_type="ptx", + width=tech.drc["minwidth_tx"], + mults=4, + tx_type="pmos", + connect_active=True, + connect_poly=True) self.local_drc_check(fet) globals.end_openram() From 09a429aef729e3672cd774b09030e621a472b704 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Wed, 6 Mar 2019 14:12:24 -0800 Subject: [PATCH 008/324] Update unit tests to all use the sram_factory --- compiler/modules/control_logic.py | 2 +- compiler/modules/tri_gate_array.py | 4 ++-- compiler/sram_factory.py | 2 +- compiler/tests/04_pand2_test.py | 1 + compiler/tests/04_pbitcell_test.py | 21 +++++++++---------- compiler/tests/04_pbuf_test.py | 7 ++----- compiler/tests/04_pdriver_test.py | 15 ++++++------- compiler/tests/04_pinv_10x_test.py | 7 +++---- compiler/tests/04_pinv_1x_beta_test.py | 5 ++--- compiler/tests/04_pinv_1x_test.py | 5 ++--- compiler/tests/04_pinv_2x_test.py | 5 ++--- compiler/tests/04_pinvbuf_test.py | 4 ++-- compiler/tests/04_pnand2_test.py | 5 ++--- compiler/tests/04_pnand3_test.py | 5 ++--- compiler/tests/04_pnor2_test.py | 5 ++--- compiler/tests/04_precharge_test.py | 14 ++++++------- compiler/tests/04_replica_pbitcell_test.py | 2 +- .../tests/04_single_level_column_mux_test.py | 10 ++++----- .../tests/05_bitcell_1rw_1r_array_test.py | 4 ++-- compiler/tests/05_bitcell_array_test.py | 4 ++-- compiler/tests/05_pbitcell_array_test.py | 8 +++---- .../tests/06_hierarchical_decoder_test.py | 21 ++++++++----------- .../06_hierarchical_predecode2x4_test.py | 7 +++---- .../06_hierarchical_predecode3x8_test.py | 7 +++---- .../07_single_level_column_mux_array_test.py | 16 +++++++------- compiler/tests/08_precharge_array_test.py | 7 +++---- compiler/tests/08_wordline_driver_test.py | 7 +++---- compiler/tests/09_sense_amp_array_test.py | 11 +++++----- compiler/tests/10_write_driver_array_test.py | 11 +++++----- compiler/tests/11_dff_array_test.py | 8 +++---- compiler/tests/11_dff_buf_array_test.py | 8 +++---- compiler/tests/11_dff_buf_test.py | 4 ++-- compiler/tests/12_tri_gate_array_test.py | 6 +++--- compiler/tests/13_delay_chain_test.py | 4 ++-- .../14_replica_bitline_multiport_test.py | 9 ++++---- compiler/tests/14_replica_bitline_test.py | 8 +++---- compiler/tests/16_control_logic_test.py | 11 +++++----- compiler/tests/19_bank_select_test.py | 10 ++++----- compiler/tests/19_multi_bank_test.py | 14 ++++++++----- compiler/tests/19_pmulti_bank_test.py | 18 +++++++++++----- compiler/tests/19_psingle_bank_test.py | 2 +- compiler/tests/19_single_bank_1rw_1r_test.py | 18 +++++++++++----- compiler/tests/19_single_bank_test.py | 18 +++++++++++----- .../tests/20_psram_1bank_2mux_1rw_1w_test.py | 4 ++-- .../tests/20_psram_1bank_2mux_1w_1r_test.py | 4 ++-- compiler/tests/20_psram_1bank_2mux_test.py | 4 ++-- .../tests/20_psram_1bank_4mux_1rw_1r_test.py | 4 ++-- .../tests/20_sram_1bank_2mux_1rw_1r_test.py | 4 ++-- .../tests/20_sram_1bank_2mux_1w_1r_test.py | 4 ++-- compiler/tests/20_sram_1bank_2mux_test.py | 4 ++-- compiler/tests/20_sram_1bank_4mux_test.py | 4 ++-- .../tests/20_sram_1bank_8mux_1rw_1r_test.py | 4 ++-- compiler/tests/20_sram_1bank_8mux_test.py | 4 ++-- .../tests/20_sram_1bank_nomux_1rw_1r_test.py | 4 ++-- compiler/tests/20_sram_1bank_nomux_test.py | 4 ++-- compiler/tests/20_sram_2bank_test.py | 14 ++++++++----- compiler/tests/21_hspice_delay_test.py | 4 ++-- compiler/tests/21_hspice_setuphold_test.py | 1 + compiler/tests/21_ngspice_delay_test.py | 4 ++-- compiler/tests/21_ngspice_setuphold_test.py | 1 + .../tests/22_psram_1bank_2mux_func_test.py | 4 ++-- .../tests/22_psram_1bank_4mux_func_test.py | 4 ++-- .../tests/22_psram_1bank_8mux_func_test.py | 4 ++-- .../tests/22_psram_1bank_nomux_func_test.py | 4 ++-- .../tests/22_sram_1bank_2mux_func_test.py | 4 ++-- .../tests/22_sram_1bank_4mux_func_test.py | 4 ++-- .../tests/22_sram_1bank_8mux_func_test.py | 4 ++-- .../tests/22_sram_1bank_nomux_func_test.py | 4 ++-- .../22_sram_1rw_1r_1bank_nomux_func_test.py | 4 ++-- .../tests/23_lib_sram_model_corners_test.py | 5 +++-- compiler/tests/23_lib_sram_model_test.py | 5 +++-- compiler/tests/23_lib_sram_prune_test.py | 5 +++-- compiler/tests/23_lib_sram_test.py | 5 +++-- compiler/tests/24_lef_sram_test.py | 4 ++-- compiler/tests/25_verilog_sram_test.py | 4 ++-- compiler/tests/26_pex_test.py | 1 + compiler/tests/27_worst_case_delay_test.py | 4 ++-- compiler/tests/28_delay_model_test.py | 4 ++-- compiler/tests/30_openram_test.py | 1 + 79 files changed, 260 insertions(+), 246 deletions(-) diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index b8532ee9..ac9aaa1f 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -14,7 +14,7 @@ class control_logic(design.design): Dynamically generated Control logic for the total SRAM circuit. """ - def __init__(self, num_rows, words_per_row, word_size, sram=None, port_type="rw"): + def __init__(self, num_rows, words_per_row, word_size, sram=None, port_type="rw", name=""): """ Constructor """ name = "control_logic_" + port_type design.design.__init__(self, name) diff --git a/compiler/modules/tri_gate_array.py b/compiler/modules/tri_gate_array.py index c9dee703..913c6097 100644 --- a/compiler/modules/tri_gate_array.py +++ b/compiler/modules/tri_gate_array.py @@ -10,9 +10,9 @@ class tri_gate_array(design.design): Dynamically generated tri gate array of all bitlines. words_per_row """ - def __init__(self, columns, word_size): + def __init__(self, columns, word_size, name): """Intial function of tri gate array """ - design.design.__init__(self, "tri_gate_array") + design.design.__init__(self, name) debug.info(1, "Creating {0}".format(self.name)) self.columns = columns diff --git a/compiler/sram_factory.py b/compiler/sram_factory.py index 7b420a6b..26069610 100644 --- a/compiler/sram_factory.py +++ b/compiler/sram_factory.py @@ -58,7 +58,7 @@ class sram_factory: (obj_kwargs, obj_item) = obj # Must have the same dictionary exactly (conservative) if obj_kwargs == kwargs: - #debug.info(1, "Existing module: type={0} name={1} kwargs={2}".format(module_type, obj_item.name, str(kwargs))) + debug.info(1, "Existing module: type={0} name={1} kwargs={2}".format(module_type, obj_item.name, str(kwargs))) return obj_item # Use the default name if there are default arguments diff --git a/compiler/tests/04_pand2_test.py b/compiler/tests/04_pand2_test.py index 91b3458e..ff722500 100755 --- a/compiler/tests/04_pand2_test.py +++ b/compiler/tests/04_pand2_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class pand2_test(openram_test): diff --git a/compiler/tests/04_pbitcell_test.py b/compiler/tests/04_pbitcell_test.py index c78b3284..eca1fbda 100755 --- a/compiler/tests/04_pbitcell_test.py +++ b/compiler/tests/04_pbitcell_test.py @@ -17,14 +17,13 @@ class pbitcell_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from pbitcell import pbitcell OPTS.num_rw_ports=1 OPTS.num_w_ports=1 OPTS.num_r_ports=1 factory.reset() debug.info(2, "Bitcell with 1 of each port: read/write, write, and read") - tx = pbitcell(name="pbc") + tx = factory.create(module_type="pbitcell") self.local_check(tx) OPTS.num_rw_ports=0 @@ -32,7 +31,7 @@ class pbitcell_test(openram_test): OPTS.num_r_ports=1 factory.reset() debug.info(2, "Bitcell with 0 read/write ports") - tx = pbitcell(name="pbc") + tx = factory.create(module_type="pbitcell") self.local_check(tx) OPTS.num_rw_ports=1 @@ -40,7 +39,7 @@ class pbitcell_test(openram_test): OPTS.num_r_ports=1 factory.reset() debug.info(2, "Bitcell with 0 write ports") - tx = pbitcell(name="pbc") + tx = factory.create(module_type="pbitcell") self.local_check(tx) OPTS.num_rw_ports=1 @@ -48,7 +47,7 @@ class pbitcell_test(openram_test): OPTS.num_r_ports=0 factory.reset() debug.info(2, "Bitcell with 0 read ports") - tx = pbitcell(name="pbc") + tx = factory.create(module_type="pbitcell") self.local_check(tx) OPTS.num_rw_ports=1 @@ -56,7 +55,7 @@ class pbitcell_test(openram_test): OPTS.num_r_ports=0 factory.reset() debug.info(2, "Bitcell with 0 read ports and 0 write ports") - tx = pbitcell(name="pbc") + tx = factory.create(module_type="pbitcell") self.local_check(tx) OPTS.num_rw_ports=2 @@ -64,7 +63,7 @@ class pbitcell_test(openram_test): OPTS.num_r_ports=2 factory.reset() debug.info(2, "Bitcell with 2 of each port: read/write, write, and read") - tx = pbitcell(name="pbc") + tx = factory.create(module_type="pbitcell") self.local_check(tx) OPTS.num_rw_ports=0 @@ -72,7 +71,7 @@ class pbitcell_test(openram_test): OPTS.num_r_ports=2 factory.reset() debug.info(2, "Bitcell with 0 read/write ports") - tx = pbitcell(name="pbc") + tx = factory.create(module_type="pbitcell") self.local_check(tx) OPTS.num_rw_ports=2 @@ -80,7 +79,7 @@ class pbitcell_test(openram_test): OPTS.num_r_ports=2 factory.reset() debug.info(2, "Bitcell with 0 write ports") - tx = pbitcell(name="pbc") + tx = factory.create(module_type="pbitcell") self.local_check(tx) OPTS.num_rw_ports=2 @@ -88,7 +87,7 @@ class pbitcell_test(openram_test): OPTS.num_r_ports=0 factory.reset() debug.info(2, "Bitcell with 0 read ports") - tx = pbitcell(name="pbc") + tx = factory.create(module_type="pbitcell") self.local_check(tx) OPTS.num_rw_ports=2 @@ -96,7 +95,7 @@ class pbitcell_test(openram_test): OPTS.num_r_ports=0 factory.reset() debug.info(2, "Bitcell with 0 read ports and 0 write ports") - tx = pbitcell(name="pbc") + tx = factory.create(module_type="pbitcell") self.local_check(tx) globals.end_openram() diff --git a/compiler/tests/04_pbuf_test.py b/compiler/tests/04_pbuf_test.py index ed5b8627..5dff97d7 100755 --- a/compiler/tests/04_pbuf_test.py +++ b/compiler/tests/04_pbuf_test.py @@ -9,19 +9,16 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class pbuf_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - global verify - import verify - - import pbuf debug.info(2, "Testing inverter/buffer 4x 8x") - a = pbuf.pbuf(name="pbufx8", size=8) + a = factory.create(module_type="pbuf", size=8) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/04_pdriver_test.py b/compiler/tests/04_pdriver_test.py index ba89961f..0cb50a97 100755 --- a/compiler/tests/04_pdriver_test.py +++ b/compiler/tests/04_pdriver_test.py @@ -9,35 +9,32 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class pdriver_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - global verify - import verify - - import pdriver debug.info(2, "Testing inverter/buffer 4x 8x") # a tests the error message for specifying conflicting conditions #a = pdriver.pdriver(fanout = 4,size_list = [1,2,4,8]) #self.local_check(a) - b = pdriver.pdriver(name="pdriver1", size_list = [1,2,4,8]) + b = factory.create(module_type="pdriver", size_list = [1,2,4,8]) self.local_check(b) - c = pdriver.pdriver(name="pdriver2", fanout = 50) + c = factory.create(module_type="pdriver", fanout = 50) self.local_check(c) - d = pdriver.pdriver(name="pdriver3", fanout = 50, neg_polarity = True) + d = factory.create(module_type="pdriver", fanout = 50, neg_polarity = True) self.local_check(d) - e = pdriver.pdriver(name="pdriver4", fanout = 64) + e = factory.create(module_type="pdriver", fanout = 64) self.local_check(e) - f = pdriver.pdriver(name="pdriver5", fanout = 64, neg_polarity = True) + f = factory.create(module_type="pdriver", fanout = 64, neg_polarity = True) self.local_check(f) globals.end_openram() diff --git a/compiler/tests/04_pinv_10x_test.py b/compiler/tests/04_pinv_10x_test.py index 42c38ca1..fb68dc01 100755 --- a/compiler/tests/04_pinv_10x_test.py +++ b/compiler/tests/04_pinv_10x_test.py @@ -9,17 +9,16 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class pinv_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import pinv - import tech - debug.info(2, "Checking 10x inverter") - tx = pinv.pinv(name="pinvx10",size=8) + debug.info(2, "Checking 8x inverter") + tx = factory.create(module_type="pinv", size=8) self.local_check(tx) globals.end_openram() diff --git a/compiler/tests/04_pinv_1x_beta_test.py b/compiler/tests/04_pinv_1x_beta_test.py index 9ac66a65..aaa9f2de 100755 --- a/compiler/tests/04_pinv_1x_beta_test.py +++ b/compiler/tests/04_pinv_1x_beta_test.py @@ -9,17 +9,16 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class pinv_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import pinv - import tech debug.info(2, "Checking 1x beta=3 size inverter") - tx = pinv.pinv(name="pinvx1b", size=1, beta=3) + tx = factory.create(module_type="pinv", size=1, beta=3) self.local_check(tx) globals.end_openram() diff --git a/compiler/tests/04_pinv_1x_test.py b/compiler/tests/04_pinv_1x_test.py index 850aa78e..b0e0d6f3 100755 --- a/compiler/tests/04_pinv_1x_test.py +++ b/compiler/tests/04_pinv_1x_test.py @@ -8,17 +8,16 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class pinv_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import pinv - import tech debug.info(2, "Checking 1x size inverter") - tx = pinv.pinv(name="pinvx1", size=1) + tx = factory.create(module_type="pinv", size=1) self.local_check(tx) globals.end_openram() diff --git a/compiler/tests/04_pinv_2x_test.py b/compiler/tests/04_pinv_2x_test.py index 33950da9..f34f08f7 100755 --- a/compiler/tests/04_pinv_2x_test.py +++ b/compiler/tests/04_pinv_2x_test.py @@ -9,17 +9,16 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class pinv_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import pinv - import tech debug.info(2, "Checking 2x size inverter") - tx = pinv.pinv(name="pinvx2", size=2) + tx = factory.create(module_type="pinv", size=2) self.local_check(tx) globals.end_openram() diff --git a/compiler/tests/04_pinvbuf_test.py b/compiler/tests/04_pinvbuf_test.py index 53814628..8bef3c93 100755 --- a/compiler/tests/04_pinvbuf_test.py +++ b/compiler/tests/04_pinvbuf_test.py @@ -9,16 +9,16 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class pinvbuf_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import pinvbuf debug.info(2, "Testing inverter/buffer 4x 8x") - a = pinvbuf.pinvbuf(name="pinvufx8", size=8) + a = factory.create(module_type="pinvbuf", size=8) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/04_pnand2_test.py b/compiler/tests/04_pnand2_test.py index cb0b65c6..ffdc542c 100755 --- a/compiler/tests/04_pnand2_test.py +++ b/compiler/tests/04_pnand2_test.py @@ -11,17 +11,16 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class pnand2_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import pnand2 - import tech debug.info(2, "Checking 2-input nand gate") - tx = pnand2.pnand2(name="pnand2", size=1) + tx = factory.create(module_type="pnand2", size=1) self.local_check(tx) globals.end_openram() diff --git a/compiler/tests/04_pnand3_test.py b/compiler/tests/04_pnand3_test.py index f3bbdb73..4ff2478b 100755 --- a/compiler/tests/04_pnand3_test.py +++ b/compiler/tests/04_pnand3_test.py @@ -11,17 +11,16 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class pnand3_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import pnand3 - import tech debug.info(2, "Checking 3-input nand gate") - tx = pnand3.pnand3(name="pnand3", size=1) + tx = factory.create(module_type="pnand3", size=1) self.local_check(tx) globals.end_openram() diff --git a/compiler/tests/04_pnor2_test.py b/compiler/tests/04_pnor2_test.py index 32214ded..ddfec78d 100755 --- a/compiler/tests/04_pnor2_test.py +++ b/compiler/tests/04_pnor2_test.py @@ -11,17 +11,16 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class pnor2_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import pnor2 - import tech debug.info(2, "Checking 2-input nor gate") - tx = pnor2.pnor2(name="pnor2", size=1) + tx = factory.create(module_type="pnor2", size=1) self.local_check(tx) globals.end_openram() diff --git a/compiler/tests/04_precharge_test.py b/compiler/tests/04_precharge_test.py index a73595eb..cd3e79f3 100755 --- a/compiler/tests/04_precharge_test.py +++ b/compiler/tests/04_precharge_test.py @@ -9,19 +9,17 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -import debug from sram_factory import factory +import debug class precharge_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import precharge - import tech # check precharge in single port debug.info(2, "Checking precharge for handmade bitcell") - tx = precharge.precharge(name="precharge_driver", size=1) + tx = factory.create(module_type="precharge", size=1) self.local_check(tx) # check precharge in multi-port @@ -32,15 +30,17 @@ class precharge_test(openram_test): factory.reset() debug.info(2, "Checking precharge for pbitcell (innermost connections)") - tx = precharge.precharge(name="precharge_driver", size=1, bitcell_bl="bl0", bitcell_br="br0") + tx = factory.create(module_type="precharge", size=1, bitcell_bl="bl0", bitcell_br="br0") self.local_check(tx) + factory.reset() debug.info(2, "Checking precharge for pbitcell (innermost connections)") - tx = precharge.precharge(name="precharge_driver", size=1, bitcell_bl="bl1", bitcell_br="br1") + tx = factory.create(module_type="precharge", size=1, bitcell_bl="bl1", bitcell_br="br1") self.local_check(tx) + factory.reset() debug.info(2, "Checking precharge for pbitcell (outermost connections)") - tx = precharge.precharge(name="precharge_driver", size=1, bitcell_bl="bl2", bitcell_br="br2") + tx = factory.create(module_type="precharge", size=1, bitcell_bl="bl2", bitcell_br="br2") self.local_check(tx) globals.end_openram() diff --git a/compiler/tests/04_replica_pbitcell_test.py b/compiler/tests/04_replica_pbitcell_test.py index 9a672419..1f00ccca 100755 --- a/compiler/tests/04_replica_pbitcell_test.py +++ b/compiler/tests/04_replica_pbitcell_test.py @@ -9,8 +9,8 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -import debug from sram_factory import factory +import debug class replica_pbitcell_test(openram_test): diff --git a/compiler/tests/04_single_level_column_mux_test.py b/compiler/tests/04_single_level_column_mux_test.py index 2a107b9a..98a696d6 100755 --- a/compiler/tests/04_single_level_column_mux_test.py +++ b/compiler/tests/04_single_level_column_mux_test.py @@ -9,8 +9,8 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -import debug from sram_factory import factory +import debug #@unittest.skip("SKIPPING 04_driver_test") @@ -18,12 +18,10 @@ class single_level_column_mux_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import single_level_column_mux - import tech # check single level column mux in single port debug.info(2, "Checking column mux") - tx = single_level_column_mux.single_level_column_mux(name="mux8", tx_size=8) + tx = factory.create(module_type="single_level_column_mux", tx_size=8) self.local_check(tx) # check single level column mux in multi-port @@ -34,12 +32,12 @@ class single_level_column_mux_test(openram_test): factory.reset() debug.info(2, "Checking column mux for pbitcell (innermost connections)") - tx = single_level_column_mux.single_level_column_mux(name="mux8_2", tx_size=8, bitcell_bl="bl0", bitcell_br="br0") + tx = factory.create(module_type="single_level_column_mux", tx_size=8, bitcell_bl="bl0", bitcell_br="br0") self.local_check(tx) factory.reset() debug.info(2, "Checking column mux for pbitcell (outermost connections)") - tx = single_level_column_mux.single_level_column_mux(name="mux8_3", tx_size=8, bitcell_bl="bl2", bitcell_br="br2") + tx = factory.create(module_type="single_level_column_mux",tx_size=8, bitcell_bl="bl2", bitcell_br="br2") self.local_check(tx) globals.end_openram() diff --git a/compiler/tests/05_bitcell_1rw_1r_array_test.py b/compiler/tests/05_bitcell_1rw_1r_array_test.py index 1223085e..9e070038 100755 --- a/compiler/tests/05_bitcell_1rw_1r_array_test.py +++ b/compiler/tests/05_bitcell_1rw_1r_array_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 05_bitcell_1rw_1r_array_test") @@ -17,14 +18,13 @@ class bitcell_1rw_1r_array_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import bitcell_array debug.info(2, "Testing 4x4 array for cell_1rw_1r") OPTS.bitcell = "bitcell_1rw_1r" OPTS.num_rw_ports = 1 OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 - a = bitcell_array.bitcell_array(name="bitcell_1rw_1r_array", cols=4, rows=4) + a = factory.create(module_type="bitcell_array", cols=4, rows=4) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/05_bitcell_array_test.py b/compiler/tests/05_bitcell_array_test.py index 93668e05..a1ee5b1a 100755 --- a/compiler/tests/05_bitcell_array_test.py +++ b/compiler/tests/05_bitcell_array_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 05_array_test") @@ -17,10 +18,9 @@ class array_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import bitcell_array debug.info(2, "Testing 4x4 array for 6t_cell") - a = bitcell_array.bitcell_array(name="bitcell_array", cols=4, rows=4) + a = factory.create(module_type="bitcell_array", cols=4, rows=4) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/05_pbitcell_array_test.py b/compiler/tests/05_pbitcell_array_test.py index 4da5bec9..a6216a10 100755 --- a/compiler/tests/05_pbitcell_array_test.py +++ b/compiler/tests/05_pbitcell_array_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 05_pbitcell_array_test") @@ -16,14 +17,13 @@ class pbitcell_array_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import bitcell_array debug.info(2, "Testing 4x4 array for multiport bitcell, with read ports at the edge of the bit cell") OPTS.bitcell = "pbitcell" OPTS.num_rw_ports = 2 OPTS.num_r_ports = 2 OPTS.num_w_ports = 2 - a = bitcell_array.bitcell_array(name="pbitcell_array_Rport_edge", cols=4, rows=4) + a = factory.create(module_type="bitcell_array", cols=4, rows=4) self.local_check(a) debug.info(2, "Testing 4x4 array for multiport bitcell, with write ports at the edge of the bit cell") @@ -31,7 +31,7 @@ class pbitcell_array_test(openram_test): OPTS.num_rw_ports = 2 OPTS.num_r_ports = 0 OPTS.num_w_ports = 2 - a = bitcell_array.bitcell_array(name="pbitcell_array_Wport_edge", cols=4, rows=4) + a = factory.create(module_type="bitcell_array", cols=4, rows=4) self.local_check(a) debug.info(2, "Testing 4x4 array for multiport bitcell, with read/write ports at the edge of the bit cell") @@ -39,7 +39,7 @@ class pbitcell_array_test(openram_test): OPTS.num_rw_ports = 2 OPTS.num_r_ports = 0 OPTS.num_w_ports = 0 - a = bitcell_array.bitcell_array(name="pbitcell_array_RWport_edge", cols=4, rows=4) + a = factory.create(module_type="bitcell_array", cols=4, rows=4) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/06_hierarchical_decoder_test.py b/compiler/tests/06_hierarchical_decoder_test.py index 2400d3c2..d77e7572 100755 --- a/compiler/tests/06_hierarchical_decoder_test.py +++ b/compiler/tests/06_hierarchical_decoder_test.py @@ -9,16 +9,13 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -import debug from sram_factory import factory +import debug class hierarchical_decoder_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import hierarchical_decoder - import tech - # Doesn't require hierarchical decoder # debug.info(1, "Testing 4 row sample for hierarchical_decoder") # a = hierarchical_decoder.hierarchical_decoder(name="hd1, rows=4) @@ -31,19 +28,19 @@ class hierarchical_decoder_test(openram_test): # check hierarchical decoder for single port debug.info(1, "Testing 16 row sample for hierarchical_decoder") - a = hierarchical_decoder.hierarchical_decoder(name="hd3", rows=16) + a = factory.create(module_type="hierarchical_decoder", rows=16) self.local_check(a) debug.info(1, "Testing 32 row sample for hierarchical_decoder") - a = hierarchical_decoder.hierarchical_decoder(name="hd4", rows=32) + a = factory.create(module_type="hierarchical_decoder", rows=32) self.local_check(a) debug.info(1, "Testing 128 row sample for hierarchical_decoder") - a = hierarchical_decoder.hierarchical_decoder(name="hd5", rows=128) + a = factory.create(module_type="hierarchical_decoder", rows=128) self.local_check(a) debug.info(1, "Testing 512 row sample for hierarchical_decoder") - a = hierarchical_decoder.hierarchical_decoder(name="hd6", rows=512) + a = factory.create(module_type="hierarchical_decoder", rows=512) self.local_check(a) # check hierarchical decoder for multi-port @@ -54,19 +51,19 @@ class hierarchical_decoder_test(openram_test): factory.reset() debug.info(1, "Testing 16 row sample for hierarchical_decoder (multi-port case)") - a = hierarchical_decoder.hierarchical_decoder(name="hd7", rows=16) + a = factory.create(module_type="hierarchical_decoder", rows=16) self.local_check(a) debug.info(1, "Testing 32 row sample for hierarchical_decoder (multi-port case)") - a = hierarchical_decoder.hierarchical_decoder(name="hd8", rows=32) + a = factory.create(module_type="hierarchical_decoder", rows=32) self.local_check(a) debug.info(1, "Testing 128 row sample for hierarchical_decoder (multi-port case)") - a = hierarchical_decoder.hierarchical_decoder(name="hd9", rows=128) + a = factory.create(module_type="hierarchical_decoder", rows=128) self.local_check(a) debug.info(1, "Testing 512 row sample for hierarchical_decoder (multi-port case)") - a = hierarchical_decoder.hierarchical_decoder(name="hd10", rows=512) + a = factory.create(module_type="hierarchical_decoder", rows=512) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/06_hierarchical_predecode2x4_test.py b/compiler/tests/06_hierarchical_predecode2x4_test.py index 6fbba350..8b82b721 100755 --- a/compiler/tests/06_hierarchical_predecode2x4_test.py +++ b/compiler/tests/06_hierarchical_predecode2x4_test.py @@ -9,18 +9,17 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class hierarchical_predecode2x4_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import hierarchical_predecode2x4 as pre - import tech # checking hierarchical precode 2x4 for single port debug.info(1, "Testing sample for hierarchy_predecode2x4") - a = pre.hierarchical_predecode2x4(name="pre1") + a = factory.create(module_type="hierarchical_predecode2x4") self.local_check(a) # checking hierarchical precode 2x4 for multi-port @@ -30,7 +29,7 @@ class hierarchical_predecode2x4_test(openram_test): OPTS.num_r_ports = 0 debug.info(1, "Testing sample for hierarchy_predecode2x4 (multi-port case)") - a = pre.hierarchical_predecode2x4(name="pre2") + a = factory.create(module_type="hierarchical_predecode2x4") self.local_check(a) globals.end_openram() diff --git a/compiler/tests/06_hierarchical_predecode3x8_test.py b/compiler/tests/06_hierarchical_predecode3x8_test.py index b704a50d..f8d22e69 100755 --- a/compiler/tests/06_hierarchical_predecode3x8_test.py +++ b/compiler/tests/06_hierarchical_predecode3x8_test.py @@ -9,18 +9,17 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class hierarchical_predecode3x8_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import hierarchical_predecode3x8 as pre - import tech # checking hierarchical precode 3x8 for single port debug.info(1, "Testing sample for hierarchy_predecode3x8") - a = pre.hierarchical_predecode3x8(name="pre1") + a = factory.create(module_type="hierarchical_predecode3x8") self.local_check(a) # checking hierarchical precode 3x8 for multi-port @@ -30,7 +29,7 @@ class hierarchical_predecode3x8_test(openram_test): OPTS.num_r_ports = 0 debug.info(1, "Testing sample for hierarchy_predecode3x8 (multi-port case)") - a = pre.hierarchical_predecode3x8(name="pre2") + a = factory.create(module_type="hierarchical_predecode3x8") self.local_check(a) globals.end_openram() diff --git a/compiler/tests/07_single_level_column_mux_array_test.py b/compiler/tests/07_single_level_column_mux_array_test.py index 8cc16f56..9ccf56fc 100755 --- a/compiler/tests/07_single_level_column_mux_array_test.py +++ b/compiler/tests/07_single_level_column_mux_array_test.py @@ -8,8 +8,8 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -import debug from sram_factory import factory +import debug class single_level_column_mux_test(openram_test): @@ -19,15 +19,15 @@ class single_level_column_mux_test(openram_test): # check single level column mux array in single port debug.info(1, "Testing sample for 2-way column_mux_array") - a = single_level_column_mux_array.single_level_column_mux_array(name="mux1", columns=16, word_size=8) + a = factory.create(module_type="single_level_column_mux_array", columns=16, word_size=8) self.local_check(a) debug.info(1, "Testing sample for 4-way column_mux_array") - a = single_level_column_mux_array.single_level_column_mux_array(name="mux2", columns=16, word_size=4) + a = factory.create(module_type="single_level_column_mux_array", columns=16, word_size=4) self.local_check(a) debug.info(1, "Testing sample for 8-way column_mux_array") - a = single_level_column_mux_array.single_level_column_mux_array(name="mux3", columns=32, word_size=4) + a = factory.create(module_type="single_level_column_mux_array", columns=32, word_size=4) self.local_check(a) # check single level column mux array in multi-port @@ -38,19 +38,19 @@ class single_level_column_mux_test(openram_test): factory.reset() debug.info(1, "Testing sample for 2-way column_mux_array in multi-port") - a = single_level_column_mux_array.single_level_column_mux_array(name="mux4", columns=16, word_size=8, bitcell_bl="bl0", bitcell_br="br0") + a = factory.create(module_type="single_level_column_mux_array", columns=16, word_size=8, bitcell_bl="bl0", bitcell_br="br0") self.local_check(a) debug.info(1, "Testing sample for 4-way column_mux_array in multi-port") - a = single_level_column_mux_array.single_level_column_mux_array(name="mux5", columns=16, word_size=4, bitcell_bl="bl0", bitcell_br="br0") + a = factory.create(module_type="single_level_column_mux_array", columns=16, word_size=4, bitcell_bl="bl0", bitcell_br="br0") self.local_check(a) debug.info(1, "Testing sample for 8-way column_mux_array in multi-port (innermost connections)") - a = single_level_column_mux_array.single_level_column_mux_array(name="mux6", columns=32, word_size=4, bitcell_bl="bl0", bitcell_br="br0") + a = factory.create(module_type="single_level_column_mux_array", columns=32, word_size=4, bitcell_bl="bl0", bitcell_br="br0") self.local_check(a) debug.info(1, "Testing sample for 8-way column_mux_array in multi-port (outermost connections)") - a = single_level_column_mux_array.single_level_column_mux_array(name="mux7", columns=32, word_size=4, bitcell_bl="bl2", bitcell_br="br2") + a = factory.create(module_type="single_level_column_mux_array", columns=32, word_size=4, bitcell_bl="bl2", bitcell_br="br2") self.local_check(a) globals.end_openram() diff --git a/compiler/tests/08_precharge_array_test.py b/compiler/tests/08_precharge_array_test.py index c31f133a..c5d72190 100755 --- a/compiler/tests/08_precharge_array_test.py +++ b/compiler/tests/08_precharge_array_test.py @@ -9,18 +9,17 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -import debug from sram_factory import factory +import debug class precharge_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import precharge_array # check precharge array in single port debug.info(2, "Checking 3 column precharge") - pc = precharge_array.precharge_array(name="pre1", columns=3) + pc = factory.create(module_type="precharge_array", columns=3) self.local_check(pc) # check precharge array in multi-port @@ -31,7 +30,7 @@ class precharge_test(openram_test): factory.reset() debug.info(2, "Checking 3 column precharge array for 1RW/1R bitcell") - pc = precharge_array.precharge_array(name="pre2", columns=3, bitcell_bl="bl0", bitcell_br="br0") + pc = factory.create(module_type="precharge_array", columns=3, bitcell_bl="bl0", bitcell_br="br0") self.local_check(pc) # debug.info(2, "Checking 3 column precharge array for pbitcell (innermost connections)") diff --git a/compiler/tests/08_wordline_driver_test.py b/compiler/tests/08_wordline_driver_test.py index bc69c776..8f8c51ac 100755 --- a/compiler/tests/08_wordline_driver_test.py +++ b/compiler/tests/08_wordline_driver_test.py @@ -9,8 +9,8 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -import debug from sram_factory import factory +import debug #@unittest.skip("SKIPPING 04_driver_test") @@ -18,11 +18,10 @@ class wordline_driver_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import wordline_driver # check wordline driver for single port debug.info(2, "Checking driver") - tx = wordline_driver.wordline_driver(name="wld1", rows=8, cols=32) + tx = factory.create(module_type="wordline_driver", rows=8, cols=32) self.local_check(tx) # check wordline driver for multi-port @@ -33,7 +32,7 @@ class wordline_driver_test(openram_test): factory.reset() debug.info(2, "Checking driver (multi-port case)") - tx = wordline_driver.wordline_driver(name="wld2", rows=8, cols=64) + tx = factory.create(module_type="wordline_driver", rows=8, cols=64) self.local_check(tx) globals.end_openram() diff --git a/compiler/tests/09_sense_amp_array_test.py b/compiler/tests/09_sense_amp_array_test.py index c144b12b..57654353 100755 --- a/compiler/tests/09_sense_amp_array_test.py +++ b/compiler/tests/09_sense_amp_array_test.py @@ -9,22 +9,21 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -import debug from sram_factory import factory +import debug class sense_amp_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import sense_amp_array # check sense amp array for single port debug.info(2, "Testing sense_amp_array for word_size=4, words_per_row=2") - a = sense_amp_array.sense_amp_array(name="sa1", word_size=4, words_per_row=2) + a = factory.create(module_type="sense_amp_array", word_size=4, words_per_row=2) self.local_check(a) debug.info(2, "Testing sense_amp_array for word_size=4, words_per_row=4") - a = sense_amp_array.sense_amp_array(name="sa2", word_size=4, words_per_row=4) + a = factory.create(module_type="sense_amp_array", word_size=4, words_per_row=4) self.local_check(a) # check sense amp array for multi-port @@ -35,11 +34,11 @@ class sense_amp_test(openram_test): factory.reset() debug.info(2, "Testing sense_amp_array for word_size=4, words_per_row=2 (multi-port case)") - a = sense_amp_array.sense_amp_array(name="sa3", word_size=4, words_per_row=2) + a = factory.create(module_type="sense_amp_array", word_size=4, words_per_row=2) self.local_check(a) debug.info(2, "Testing sense_amp_array for word_size=4, words_per_row=4 (multi-port case)") - a = sense_amp_array.sense_amp_array(name="sa4", word_size=4, words_per_row=4) + a = factory.create(module_type="sense_amp_array", word_size=4, words_per_row=4) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/10_write_driver_array_test.py b/compiler/tests/10_write_driver_array_test.py index 98507b60..53338a32 100755 --- a/compiler/tests/10_write_driver_array_test.py +++ b/compiler/tests/10_write_driver_array_test.py @@ -9,22 +9,21 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -import debug from sram_factory import factory +import debug class write_driver_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import write_driver_array # check write driver array for single port debug.info(2, "Testing write_driver_array for columns=8, word_size=8") - a = write_driver_array.write_driver_array(name="wd1", columns=8, word_size=8) + a = factory.create(module_type="write_driver_array", columns=8, word_size=8) self.local_check(a) debug.info(2, "Testing write_driver_array for columns=16, word_size=8") - a = write_driver_array.write_driver_array(name="wd2", columns=16, word_size=8) + a = factory.create(module_type="write_driver_array", columns=16, word_size=8) self.local_check(a) # check write driver array for multi-port @@ -35,11 +34,11 @@ class write_driver_test(openram_test): factory.reset() debug.info(2, "Testing write_driver_array for columns=8, word_size=8 (multi-port case)") - a = write_driver_array.write_driver_array(name="wd3", columns=8, word_size=8) + a = factory.create(module_type="write_driver_array", columns=8, word_size=8) self.local_check(a) debug.info(2, "Testing write_driver_array for columns=16, word_size=8 (multi-port case)") - a = write_driver_array.write_driver_array(name="wd4", columns=16, word_size=8) + a = factory.create(module_type="write_driver_array", columns=16, word_size=8) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/11_dff_array_test.py b/compiler/tests/11_dff_array_test.py index eed41dda..d1889388 100755 --- a/compiler/tests/11_dff_array_test.py +++ b/compiler/tests/11_dff_array_test.py @@ -9,24 +9,24 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class dff_array_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import dff_array debug.info(2, "Testing dff_array for 3x3") - a = dff_array.dff_array(rows=3, columns=3) + a = factory.create(module_type="dff_array", rows=3, columns=3) self.local_check(a) debug.info(2, "Testing dff_array for 1x3") - a = dff_array.dff_array(rows=1, columns=3) + a = factory.create(module_type="dff_array", rows=1, columns=3) self.local_check(a) debug.info(2, "Testing dff_array for 3x1") - a = dff_array.dff_array(rows=3, columns=1) + a = factory.create(module_type="dff_array", rows=3, columns=1) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/11_dff_buf_array_test.py b/compiler/tests/11_dff_buf_array_test.py index d2932cac..3d866ec8 100755 --- a/compiler/tests/11_dff_buf_array_test.py +++ b/compiler/tests/11_dff_buf_array_test.py @@ -9,24 +9,24 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class dff_buf_array_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import dff_buf_array debug.info(2, "Testing dff_buf_array for 3x3") - a = dff_buf_array.dff_buf_array(rows=3, columns=3) + a = factory.create(module_type="dff_buf_array", rows=3, columns=3) self.local_check(a) debug.info(2, "Testing dff_buf_array for 1x3") - a = dff_buf_array.dff_buf_array(rows=1, columns=3) + a = factory.create(module_type="dff_buf_array", rows=1, columns=3) self.local_check(a) debug.info(2, "Testing dff_buf_array for 3x1") - a = dff_buf_array.dff_buf_array(rows=3, columns=1) + a = factory.create(module_type="dff_buf_array", rows=3, columns=1) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/11_dff_buf_test.py b/compiler/tests/11_dff_buf_test.py index c9c25f16..e25399a6 100755 --- a/compiler/tests/11_dff_buf_test.py +++ b/compiler/tests/11_dff_buf_test.py @@ -9,16 +9,16 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class dff_buf_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import dff_buf debug.info(2, "Testing dff_buf 4x 8x") - a = dff_buf.dff_buf(4, 8) + a = factory.create(module_type="dff_buf", inv1_size=4, inv2_size=8) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/12_tri_gate_array_test.py b/compiler/tests/12_tri_gate_array_test.py index cb789155..c52aa641 100755 --- a/compiler/tests/12_tri_gate_array_test.py +++ b/compiler/tests/12_tri_gate_array_test.py @@ -9,20 +9,20 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class tri_gate_array_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import tri_gate_array debug.info(1, "Testing tri_gate_array for columns=8, word_size=8") - a = tri_gate_array.tri_gate_array(columns=8, word_size=8) + a = factory.create(module_type="tri_gate_array", columns=8, word_size=8) self.local_check(a) debug.info(1, "Testing tri_gate_array for columns=16, word_size=8") - a = tri_gate_array.tri_gate_array(columns=16, word_size=8) + a = factory.create(module_type="tri_gate_array", columns=16, word_size=8) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/13_delay_chain_test.py b/compiler/tests/13_delay_chain_test.py index bfe2b3ff..b4dae777 100755 --- a/compiler/tests/13_delay_chain_test.py +++ b/compiler/tests/13_delay_chain_test.py @@ -9,16 +9,16 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class delay_chain_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import delay_chain debug.info(2, "Testing delay_chain") - a = delay_chain.delay_chain(name="dc", fanout_list=[4, 4, 4, 4]) + a = factory.create(module_type="delay_chain", fanout_list=[4, 4, 4, 4]) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/14_replica_bitline_multiport_test.py b/compiler/tests/14_replica_bitline_multiport_test.py index f379e0d2..aee4bcfe 100755 --- a/compiler/tests/14_replica_bitline_multiport_test.py +++ b/compiler/tests/14_replica_bitline_multiport_test.py @@ -9,14 +9,13 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -import debug from sram_factory import factory +import debug class replica_bitline_multiport_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import replica_bitline stages=4 fanout=4 @@ -30,7 +29,7 @@ class replica_bitline_multiport_test(openram_test): factory.reset() debug.info(2, "Testing 1rw 1r RBL with {0} FO4 stages, {1} rows".format(stages,rows)) - a = replica_bitline.replica_bitline(name="rbl1", delay_fanout_list=stages*[fanout], bitcell_loads=rows) + a = factory.create(module_type="replica_bitline", delay_fanout_list=stages*[fanout], bitcell_loads=rows) self.local_check(a) # check replica bitline in pbitcell multi-port @@ -42,7 +41,7 @@ class replica_bitline_multiport_test(openram_test): factory.reset() debug.info(2, "Testing RBL pbitcell 1rw with {0} FO4 stages, {1} rows".format(stages,rows)) - a = replica_bitline.replica_bitline(name="rbl2", delay_fanout_list=stages*[fanout], bitcell_loads=rows) + a = factory.create(module_type="replica_bitline", delay_fanout_list=stages*[fanout], bitcell_loads=rows) self.local_check(a) OPTS.num_rw_ports = 1 @@ -51,7 +50,7 @@ class replica_bitline_multiport_test(openram_test): factory.reset() debug.info(2, "Testing RBL pbitcell 1rw 1w 1r with {0} FO4 stages, {1} rows".format(stages,rows)) - a = replica_bitline.replica_bitline(name="rbl3", delay_fanout_list=stages*[fanout], bitcell_loads=rows) + a = factory.create(module_type="replica_bitline", delay_fanout_list=stages*[fanout], bitcell_loads=rows) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/14_replica_bitline_test.py b/compiler/tests/14_replica_bitline_test.py index ca213d5c..cd314126 100755 --- a/compiler/tests/14_replica_bitline_test.py +++ b/compiler/tests/14_replica_bitline_test.py @@ -9,30 +9,28 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class replica_bitline_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import replica_bitline # check replica bitline in single port stages=4 fanout=4 rows=13 debug.info(2, "Testing RBL with {0} FO4 stages, {1} rows".format(stages,rows)) - a = replica_bitline.replica_bitline(name="rbl1", delay_fanout_list=stages*[fanout], bitcell_loads=rows) + a = factory.create(module_type="replica_bitline", delay_fanout_list=stages*[fanout], bitcell_loads=rows) self.local_check(a) - #debug.error("Exiting...", 1) stages=8 rows=100 debug.info(2, "Testing RBL with {0} FO4 stages, {1} rows".format(stages,rows)) - a = replica_bitline.replica_bitline(name="rbl2", delay_fanout_list=stages*[fanout], bitcell_loads=rows) + a = factory.create(module_type="replica_bitline", delay_fanout_list=stages*[fanout], bitcell_loads=rows) self.local_check(a) - globals.end_openram() # run the test from the command line diff --git a/compiler/tests/16_control_logic_test.py b/compiler/tests/16_control_logic_test.py index e0545af4..1ba54cea 100755 --- a/compiler/tests/16_control_logic_test.py +++ b/compiler/tests/16_control_logic_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class control_logic_test(openram_test): @@ -20,7 +21,7 @@ class control_logic_test(openram_test): # check control logic for single port debug.info(1, "Testing sample for control_logic") - a = control_logic.control_logic(num_rows=128, words_per_row=1, word_size=32) + a = factory.create(module_type="control_logic", num_rows=128, words_per_row=1, word_size=32) self.local_check(a) # check control logic for multi-port @@ -31,7 +32,7 @@ class control_logic_test(openram_test): OPTS.num_r_ports = 0 debug.info(1, "Testing sample for control_logic for multiport") - a = control_logic.control_logic(num_rows=128, words_per_row=1, word_size=8) + a = factory.create(module_type="control_logic", num_rows=128, words_per_row=1, word_size=8) self.local_check(a) # Check port specific control logic @@ -40,19 +41,19 @@ class control_logic_test(openram_test): OPTS.num_r_ports = 0 debug.info(1, "Testing sample for control_logic for multiport, only write control logic") - a = control_logic.control_logic(num_rows=128, words_per_row=1, word_size=8, port_type="rw") + a = factory.create(module_type="control_logic", num_rows=128, words_per_row=1, word_size=8, port_type="rw") self.local_check(a) OPTS.num_rw_ports = 0 OPTS.num_w_ports = 1 debug.info(1, "Testing sample for control_logic for multiport, only write control logic") - a = control_logic.control_logic(num_rows=128, words_per_row=1, word_size=8, port_type="w") + a = factory.create(module_type="control_logic", num_rows=128, words_per_row=1, word_size=8, port_type="w") self.local_check(a) OPTS.num_w_ports = 0 OPTS.num_r_ports = 1 debug.info(1, "Testing sample for control_logic for multiport, only read control logic") - a = control_logic.control_logic(num_rows=128, words_per_row=1, word_size=8, port_type="r") + a = factory.create(module_type="control_logic", num_rows=128, words_per_row=1, word_size=8, port_type="r") self.local_check(a) globals.end_openram() diff --git a/compiler/tests/19_bank_select_test.py b/compiler/tests/19_bank_select_test.py index 1245926b..3f511464 100755 --- a/compiler/tests/19_bank_select_test.py +++ b/compiler/tests/19_bank_select_test.py @@ -9,21 +9,21 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class bank_select_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - import bank_select debug.info(1, "No column mux, rw control logic") - a = bank_select.bank_select(port="rw") + a = factory.create(module_type="bank_select", port="rw") self.local_check(a) OPTS.bitcell = "pbitcell" debug.info(1, "No column mux, rw control logic") - a = bank_select.bank_select(port="rw") + a = factory.create(module_type="bank_select", port="rw") self.local_check(a) OPTS.num_rw_ports = 0 @@ -31,11 +31,11 @@ class bank_select_test(openram_test): OPTS.num_r_ports = 1 debug.info(1, "No column mux, w control logic") - a = bank_select.bank_select(port="w") + a = factory.create(module_type="bank_select", port="w") self.local_check(a) debug.info(1, "No column mux, r control logic") - a = bank_select.bank_select(port="r") + a = factory.create(module_type="bank_select", port="r") self.local_check(a) globals.end_openram() diff --git a/compiler/tests/19_multi_bank_test.py b/compiler/tests/19_multi_bank_test.py index 0eff040d..af2ef7b0 100755 --- a/compiler/tests/19_multi_bank_test.py +++ b/compiler/tests/19_multi_bank_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug @unittest.skip("SKIPPING 19_multi_bank_test") @@ -16,7 +17,6 @@ class multi_bank_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from bank import bank from sram_config import sram_config c = sram_config(word_size=4, @@ -24,31 +24,35 @@ class multi_bank_test(openram_test): c.num_banks=2 c.words_per_row=1 + factory.reset() c.recompute_sizes() debug.info(1, "No column mux") - a = bank(c, name="bank1_multi") + a = factory.create("bank", sram_config=c) self.local_check(a) c.num_words=32 c.words_per_row=2 + factory.reset() c.recompute_sizes() debug.info(1, "Two way column mux") - a = bank(c, name="bank2_multi") + a = factory.create("bank", sram_config=c) self.local_check(a) c.num_words=64 c.words_per_row=4 + factory.reset() c.recompute_sizes() debug.info(1, "Four way column mux") - a = bank(c, name="bank3_multi") + a = factory.create("bank", sram_config=c) self.local_check(a) c.word_size=2 c.num_words=128 c.words_per_row=8 + factory.reset() c.recompute_sizes() debug.info(1, "Eight way column mux") - a = bank(c, name="bank4_multi") + a = factory.create("bank", sram_config=c) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/19_pmulti_bank_test.py b/compiler/tests/19_pmulti_bank_test.py index 32d3917a..6b842160 100755 --- a/compiler/tests/19_pmulti_bank_test.py +++ b/compiler/tests/19_pmulti_bank_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug @unittest.skip("SKIPPING 19_pmulti_bank_test") @@ -16,7 +17,6 @@ class multi_bank_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from bank import bank from sram_config import sram_config OPTS.bitcell = "pbitcell" @@ -29,27 +29,35 @@ class multi_bank_test(openram_test): c.num_banks=2 c.words_per_row=1 + factory.reset() + c.recompute_sizes() debug.info(1, "No column mux") - a = bank(c, name="bank1_multi") + a = factory.create("bank", sram_config=c) self.local_check(a) c.num_words=32 c.words_per_row=2 + factory.reset() + c.recompute_sizes() debug.info(1, "Two way column mux") - a = bank(c, name="bank2_multi") + a = factory.create("bank", sram_config=c) self.local_check(a) c.num_words=64 c.words_per_row=4 + factory.reset() + c.recompute_sizes() debug.info(1, "Four way column mux") - a = bank(c, name="bank3_multi") + a = factory.create("bank", sram_config=c) self.local_check(a) c.word_size=2 c.num_words=128 c.words_per_row=8 + factory.reset() + c.recompute_sizes() debug.info(1, "Eight way column mux") - a = bank(c, name="bank4_multi") + a = factory.create("bank", sram_config=c) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/19_psingle_bank_test.py b/compiler/tests/19_psingle_bank_test.py index 8e462318..524f3025 100755 --- a/compiler/tests/19_psingle_bank_test.py +++ b/compiler/tests/19_psingle_bank_test.py @@ -9,8 +9,8 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -import debug from sram_factory import factory +import debug #@unittest.skip("SKIPPING 19_psingle_bank_test") class psingle_bank_test(openram_test): diff --git a/compiler/tests/19_single_bank_1rw_1r_test.py b/compiler/tests/19_single_bank_1rw_1r_test.py index 93bfd35a..41255b7b 100755 --- a/compiler/tests/19_single_bank_1rw_1r_test.py +++ b/compiler/tests/19_single_bank_1rw_1r_test.py @@ -9,13 +9,13 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class single_bank_1rw_1r_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from bank import bank OPTS.bitcell = "bitcell_1rw_1r" OPTS.num_rw_ports = 1 @@ -27,27 +27,35 @@ class single_bank_1rw_1r_test(openram_test): num_words=16) c.words_per_row=1 + factory.reset() + c.recompute_sizes() debug.info(1, "No column mux") - a = bank(c, name="bank1_single") + a = factory.create(module_type="bank", sram_config=c) self.local_check(a) c.num_words=32 c.words_per_row=2 + factory.reset() + c.recompute_sizes() debug.info(1, "Two way column mux") - a = bank(c, name="bank2_single") + a = factory.create(module_type="bank", sram_config=c) self.local_check(a) c.num_words=64 c.words_per_row=4 + factory.reset() + c.recompute_sizes() debug.info(1, "Four way column mux") - a = bank(c, name="bank3_single") + a = factory.create(module_type="bank", sram_config=c) self.local_check(a) c.word_size=2 c.num_words=128 c.words_per_row=8 + factory.reset() + c.recompute_sizes() debug.info(1, "Eight way column mux") - a = bank(c, name="bank4_single") + a = factory.create(module_type="bank", sram_config=c) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/19_single_bank_test.py b/compiler/tests/19_single_bank_test.py index e7179d96..1e4c59de 100755 --- a/compiler/tests/19_single_bank_test.py +++ b/compiler/tests/19_single_bank_test.py @@ -9,40 +9,48 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class single_bank_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from bank import bank from sram_config import sram_config c = sram_config(word_size=4, num_words=16) c.words_per_row=1 + factory.reset() + c.recompute_sizes() debug.info(1, "No column mux") - a = bank(c, name="bank1_single") + a = factory.create("bank", sram_config=c) self.local_check(a) c.num_words=32 c.words_per_row=2 + factory.reset() + c.recompute_sizes() debug.info(1, "Two way column mux") - a = bank(c, name="bank2_single") + a = factory.create("bank", sram_config=c) self.local_check(a) c.num_words=64 c.words_per_row=4 + factory.reset() + c.recompute_sizes() debug.info(1, "Four way column mux") - a = bank(c, name="bank3_single") + a = factory.create("bank", sram_config=c) self.local_check(a) c.word_size=2 c.num_words=128 c.words_per_row=8 + factory.reset() + c.recompute_sizes() debug.info(1, "Eight way column mux") - a = bank(c, name="bank4_single") + a = factory.create("bank", sram_config=c) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py b/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py index f2f6386c..719f3138 100755 --- a/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py +++ b/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 20_psram_1bank_test, multiport layout not complete") @@ -16,7 +17,6 @@ class psram_1bank_2mux_1rw_1w_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from sram import sram from sram_config import sram_config OPTS.bitcell = "pbitcell" OPTS.replica_bitcell="replica_pbitcell" @@ -38,7 +38,7 @@ class psram_1bank_2mux_1rw_1w_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - a = sram(c, "sram") + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) globals.end_openram() diff --git a/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py b/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py index 3d049aef..255faa9b 100755 --- a/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py +++ b/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 20_psram_1bank_2mux_1w_1r_test, odd supply routing error") @@ -16,7 +17,6 @@ class psram_1bank_2mux_1w_1r_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from sram import sram from sram_config import sram_config OPTS.bitcell = "pbitcell" OPTS.replica_bitcell="replica_pbitcell" @@ -38,7 +38,7 @@ class psram_1bank_2mux_1w_1r_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - a = sram(c, "sram") + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) globals.end_openram() diff --git a/compiler/tests/20_psram_1bank_2mux_test.py b/compiler/tests/20_psram_1bank_2mux_test.py index 3afd2c9b..23f0dfb7 100755 --- a/compiler/tests/20_psram_1bank_2mux_test.py +++ b/compiler/tests/20_psram_1bank_2mux_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 20_psram_1bank_2mux_test, wide metal supply routing error") @@ -16,7 +17,6 @@ class psram_1bank_2mux_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from sram import sram from sram_config import sram_config OPTS.bitcell = "pbitcell" OPTS.replica_bitcell="replica_pbitcell" @@ -39,7 +39,7 @@ class psram_1bank_2mux_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - a = sram(c, "sram") + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) globals.end_openram() diff --git a/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py b/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py index 1be26ca7..dac37929 100755 --- a/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py +++ b/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py @@ -9,13 +9,13 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class psram_1bank_4mux_1rw_1r_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from sram import sram from sram_config import sram_config OPTS.bitcell = "pbitcell" OPTS.replica_bitcell="replica_pbitcell" @@ -37,7 +37,7 @@ class psram_1bank_4mux_1rw_1r_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - a = sram(c, "sram") + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) globals.end_openram() diff --git a/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py index ea5fba78..f5878f71 100755 --- a/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py @@ -9,13 +9,13 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class sram_1bank_2mux_1rw_1r_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from sram import sram from sram_config import sram_config OPTS.bitcell = "bitcell_1rw_1r" @@ -37,7 +37,7 @@ class sram_1bank_2mux_1rw_1r_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - a = sram(c, "sram") + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) globals.end_openram() diff --git a/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py index 2954ffbc..dd2e7415 100755 --- a/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 20_psram_1bank_2mux_1w_1r_test, odd supply routing error") @@ -16,7 +17,6 @@ class psram_1bank_2mux_1w_1r_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from sram import sram from sram_config import sram_config OPTS.bitcell = "bitcell_1w_1r" OPTS.replica_bitcell="replica_bitcell_1w_1r" @@ -38,7 +38,7 @@ class psram_1bank_2mux_1w_1r_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - a = sram(c, "sram") + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) globals.end_openram() diff --git a/compiler/tests/20_sram_1bank_2mux_test.py b/compiler/tests/20_sram_1bank_2mux_test.py index 26a7755f..1157ff31 100755 --- a/compiler/tests/20_sram_1bank_2mux_test.py +++ b/compiler/tests/20_sram_1bank_2mux_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 20_sram_1bank_2mux_test") @@ -16,7 +17,6 @@ class sram_1bank_2mux_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from sram import sram from sram_config import sram_config c = sram_config(word_size=4, num_words=32, @@ -31,7 +31,7 @@ class sram_1bank_2mux_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - a = sram(c, "sram") + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) globals.end_openram() diff --git a/compiler/tests/20_sram_1bank_4mux_test.py b/compiler/tests/20_sram_1bank_4mux_test.py index 16654be5..272de77d 100755 --- a/compiler/tests/20_sram_1bank_4mux_test.py +++ b/compiler/tests/20_sram_1bank_4mux_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 20_sram_1bank_4mux_test") @@ -16,7 +17,6 @@ class sram_1bank_4mux_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from sram import sram from sram_config import sram_config c = sram_config(word_size=4, num_words=64, @@ -31,7 +31,7 @@ class sram_1bank_4mux_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - a = sram(c, "sram") + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) globals.end_openram() diff --git a/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py index dfd8a6a1..3f0ed8f7 100755 --- a/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py @@ -9,13 +9,13 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class sram_1bank_8mux_1rw_1r_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from sram import sram from sram_config import sram_config OPTS.bitcell = "bitcell_1rw_1r" @@ -37,7 +37,7 @@ class sram_1bank_8mux_1rw_1r_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - a = sram(c, "sram") + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) globals.end_openram() diff --git a/compiler/tests/20_sram_1bank_8mux_test.py b/compiler/tests/20_sram_1bank_8mux_test.py index dde1a448..0bb636e3 100755 --- a/compiler/tests/20_sram_1bank_8mux_test.py +++ b/compiler/tests/20_sram_1bank_8mux_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 20_sram_1bank_8mux_test") @@ -16,7 +17,6 @@ class sram_1bank_8mux_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from sram import sram from sram_config import sram_config c = sram_config(word_size=2, num_words=128, @@ -31,7 +31,7 @@ class sram_1bank_8mux_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - a = sram(c, "sram") + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) globals.end_openram() diff --git a/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py index 02e82687..ea372d61 100755 --- a/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py @@ -9,13 +9,13 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class sram_1bank_nomux_1rw_1r_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from sram import sram from sram_config import sram_config OPTS.bitcell = "bitcell_1rw_1r" @@ -37,7 +37,7 @@ class sram_1bank_nomux_1rw_1r_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - a = sram(c, "sram") + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) globals.end_openram() diff --git a/compiler/tests/20_sram_1bank_nomux_test.py b/compiler/tests/20_sram_1bank_nomux_test.py index 7a03ce1e..ce44a206 100755 --- a/compiler/tests/20_sram_1bank_nomux_test.py +++ b/compiler/tests/20_sram_1bank_nomux_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 20_sram_1bank_nomux_test") @@ -16,7 +17,6 @@ class sram_1bank_nomux_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from sram import sram from sram_config import sram_config c = sram_config(word_size=4, num_words=16, @@ -31,7 +31,7 @@ class sram_1bank_nomux_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - a = sram(c, "sram") + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) globals.end_openram() diff --git a/compiler/tests/20_sram_2bank_test.py b/compiler/tests/20_sram_2bank_test.py index 59db981d..9ae2bee9 100755 --- a/compiler/tests/20_sram_2bank_test.py +++ b/compiler/tests/20_sram_2bank_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug @unittest.skip("Multibank is not working yet.") @@ -16,7 +17,6 @@ class sram_2bank_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from sram import sram from sram_config import sram_config c = sram_config(word_size=16, num_words=32, @@ -25,21 +25,24 @@ class sram_2bank_test(openram_test): c.words_per_row=1 c.recompute_sizes() debug.info(1, "Two bank, no column mux with control logic") - a = sram(c, "sram1") + factory.reset() + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) c.num_words=64 c.words_per_row=2 c.recompute_sizes() debug.info(1, "Two bank two way column mux with control logic") - a = sram(c, "sram2") + factory.reset() + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) c.num_words=128 c.words_per_row=4 c.recompute_sizes() debug.info(1, "Two bank, four way column mux with control logic") - a = sram(c, "sram3") + factory.reset() + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) c.word_size=2 @@ -47,7 +50,8 @@ class sram_2bank_test(openram_test): c.words_per_row=8 c.recompute_sizes() debug.info(1, "Two bank, eight way column mux with control logic") - a = sram(c, "sram4") + factory.reset() + a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) globals.end_openram() diff --git a/compiler/tests/21_hspice_delay_test.py b/compiler/tests/21_hspice_delay_test.py index fa7fc35f..cf397f72 100755 --- a/compiler/tests/21_hspice_delay_test.py +++ b/compiler/tests/21_hspice_delay_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class timing_sram_test(openram_test): @@ -24,7 +25,6 @@ class timing_sram_test(openram_test): import characterizer reload(characterizer) from characterizer import delay - from sram import sram from sram_config import sram_config c = sram_config(word_size=1, num_words=16, @@ -32,7 +32,7 @@ class timing_sram_test(openram_test): c.words_per_row=1 c.recompute_sizes() debug.info(1, "Testing timing for sample 1bit, 16words SRAM with 1 bank") - s = sram(c, name="sram1") + s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/21_hspice_setuphold_test.py b/compiler/tests/21_hspice_setuphold_test.py index c003f54a..2488317b 100755 --- a/compiler/tests/21_hspice_setuphold_test.py +++ b/compiler/tests/21_hspice_setuphold_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class timing_setup_test(openram_test): diff --git a/compiler/tests/21_ngspice_delay_test.py b/compiler/tests/21_ngspice_delay_test.py index 5af44e69..80b684e9 100755 --- a/compiler/tests/21_ngspice_delay_test.py +++ b/compiler/tests/21_ngspice_delay_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class timing_sram_test(openram_test): @@ -24,7 +25,6 @@ class timing_sram_test(openram_test): import characterizer reload(characterizer) from characterizer import delay - from sram import sram from sram_config import sram_config c = sram_config(word_size=1, num_words=16, @@ -32,7 +32,7 @@ class timing_sram_test(openram_test): c.words_per_row=1 c.recompute_sizes() debug.info(1, "Testing timing for sample 1bit, 16words SRAM with 1 bank") - s = sram(c, name="sram1") + s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/21_ngspice_setuphold_test.py b/compiler/tests/21_ngspice_setuphold_test.py index 924d05a5..0bf004b9 100755 --- a/compiler/tests/21_ngspice_setuphold_test.py +++ b/compiler/tests/21_ngspice_setuphold_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class timing_setup_test(openram_test): diff --git a/compiler/tests/22_psram_1bank_2mux_func_test.py b/compiler/tests/22_psram_1bank_2mux_func_test.py index 87c8db48..11db4842 100755 --- a/compiler/tests/22_psram_1bank_2mux_func_test.py +++ b/compiler/tests/22_psram_1bank_2mux_func_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 22_psram_1bank_2mux_1rw_1r_1w_func_test, third port reads are broken?") @@ -30,7 +31,6 @@ class psram_1bank_2mux_1rw_1r_1w_func_test(openram_test): import characterizer reload(characterizer) from characterizer import functional, delay - from sram import sram from sram_config import sram_config c = sram_config(word_size=4, num_words=64, @@ -44,7 +44,7 @@ class psram_1bank_2mux_1rw_1r_1w_func_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - s = sram(c, name="sram") + s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/22_psram_1bank_4mux_func_test.py b/compiler/tests/22_psram_1bank_4mux_func_test.py index 16661483..e8a436bd 100755 --- a/compiler/tests/22_psram_1bank_4mux_func_test.py +++ b/compiler/tests/22_psram_1bank_4mux_func_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 22_psram_1bank_4mux_func_test, third port reads are broken?") @@ -30,7 +31,6 @@ class psram_1bank_4mux_func_test(openram_test): import characterizer reload(characterizer) from characterizer import functional, delay - from sram import sram from sram_config import sram_config c = sram_config(word_size=4, num_words=256, @@ -44,7 +44,7 @@ class psram_1bank_4mux_func_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - s = sram(c, name="sram") + s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/22_psram_1bank_8mux_func_test.py b/compiler/tests/22_psram_1bank_8mux_func_test.py index 86cfd16f..34e974a5 100755 --- a/compiler/tests/22_psram_1bank_8mux_func_test.py +++ b/compiler/tests/22_psram_1bank_8mux_func_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 22_psram_1bank_8mux_func_test") @@ -30,7 +31,6 @@ class psram_1bank_8mux_func_test(openram_test): import characterizer reload(characterizer) from characterizer import functional, delay - from sram import sram from sram_config import sram_config c = sram_config(word_size=4, num_words=256, @@ -44,7 +44,7 @@ class psram_1bank_8mux_func_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - s = sram(c, name="sram") + s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/22_psram_1bank_nomux_func_test.py b/compiler/tests/22_psram_1bank_nomux_func_test.py index 3133eb03..f9e80915 100755 --- a/compiler/tests/22_psram_1bank_nomux_func_test.py +++ b/compiler/tests/22_psram_1bank_nomux_func_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 22_psram_1bank_nomux_func_test") @@ -30,7 +31,6 @@ class psram_1bank_nomux_func_test(openram_test): import characterizer reload(characterizer) from characterizer import functional, delay - from sram import sram from sram_config import sram_config c = sram_config(word_size=4, num_words=32, @@ -44,7 +44,7 @@ class psram_1bank_nomux_func_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - s = sram(c, name="sram") + s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/22_sram_1bank_2mux_func_test.py b/compiler/tests/22_sram_1bank_2mux_func_test.py index f163216e..15dfc902 100755 --- a/compiler/tests/22_sram_1bank_2mux_func_test.py +++ b/compiler/tests/22_sram_1bank_2mux_func_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 22_sram_1bank_2mux_func_test") @@ -25,7 +26,6 @@ class sram_1bank_2mux_func_test(openram_test): import characterizer reload(characterizer) from characterizer import functional, delay - from sram import sram from sram_config import sram_config c = sram_config(word_size=4, num_words=64, @@ -36,7 +36,7 @@ class sram_1bank_2mux_func_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - s = sram(c, name="sram") + s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/22_sram_1bank_4mux_func_test.py b/compiler/tests/22_sram_1bank_4mux_func_test.py index 049d8459..1ea8b6b9 100755 --- a/compiler/tests/22_sram_1bank_4mux_func_test.py +++ b/compiler/tests/22_sram_1bank_4mux_func_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 22_sram_1bank_4mux_func_test") @@ -25,7 +26,6 @@ class sram_1bank_4mux_func_test(openram_test): import characterizer reload(characterizer) from characterizer import functional, delay - from sram import sram from sram_config import sram_config c = sram_config(word_size=4, num_words=256, @@ -36,7 +36,7 @@ class sram_1bank_4mux_func_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - s = sram(c, name="sram") + s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/22_sram_1bank_8mux_func_test.py b/compiler/tests/22_sram_1bank_8mux_func_test.py index d159f265..95536c17 100755 --- a/compiler/tests/22_sram_1bank_8mux_func_test.py +++ b/compiler/tests/22_sram_1bank_8mux_func_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 22_sram_1bank_8mux_func_test") @@ -28,7 +29,6 @@ class sram_1bank_8mux_func_test(openram_test): if not OPTS.spice_exe: debug.error("Could not find {} simulator.".format(OPTS.spice_name),-1) - from sram import sram from sram_config import sram_config c = sram_config(word_size=4, num_words=256, @@ -39,7 +39,7 @@ class sram_1bank_8mux_func_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - s = sram(c, name="sram") + s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/22_sram_1bank_nomux_func_test.py b/compiler/tests/22_sram_1bank_nomux_func_test.py index 08a21d92..d3712bee 100755 --- a/compiler/tests/22_sram_1bank_nomux_func_test.py +++ b/compiler/tests/22_sram_1bank_nomux_func_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 22_sram_func_test") @@ -24,7 +25,6 @@ class sram_1bank_nomux_func_test(openram_test): import characterizer reload(characterizer) from characterizer import functional - from sram import sram from sram_config import sram_config c = sram_config(word_size=4, num_words=32, @@ -35,7 +35,7 @@ class sram_1bank_nomux_func_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - s = sram(c, name="sram") + s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/22_sram_1rw_1r_1bank_nomux_func_test.py b/compiler/tests/22_sram_1rw_1r_1bank_nomux_func_test.py index a609460b..4bb17eb6 100755 --- a/compiler/tests/22_sram_1rw_1r_1bank_nomux_func_test.py +++ b/compiler/tests/22_sram_1rw_1r_1bank_nomux_func_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug #@unittest.skip("SKIPPING 22_sram_1rw_1r_1bank_nomux_func_test") @@ -30,7 +31,6 @@ class psram_1bank_nomux_func_test(openram_test): import characterizer reload(characterizer) from characterizer import functional, delay - from sram import sram from sram_config import sram_config c = sram_config(word_size=4, num_words=32, @@ -41,7 +41,7 @@ class psram_1bank_nomux_func_test(openram_test): c.num_words, c.words_per_row, c.num_banks)) - s = sram(c, name="sram") + s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/23_lib_sram_model_corners_test.py b/compiler/tests/23_lib_sram_model_corners_test.py index 431555bc..744bf4ed 100755 --- a/compiler/tests/23_lib_sram_model_corners_test.py +++ b/compiler/tests/23_lib_sram_model_corners_test.py @@ -9,6 +9,7 @@ import sys,os,re sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class model_corners_lib_test(openram_test): @@ -17,7 +18,6 @@ class model_corners_lib_test(openram_test): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) from characterizer import lib - from sram import sram from sram_config import sram_config c = sram_config(word_size=2, num_words=16, @@ -25,7 +25,8 @@ class model_corners_lib_test(openram_test): c.words_per_row=1 c.recompute_sizes() debug.info(1, "Testing analytical timing for sample 2 bit, 16 words SRAM with 1 bank") - s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name)) + + s = factory.create(module_type="sram", sram_config=c, name="sram_2_16_1_{0}".format(OPTS.tech_name)) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/23_lib_sram_model_test.py b/compiler/tests/23_lib_sram_model_test.py index 8a996cb4..518943a1 100755 --- a/compiler/tests/23_lib_sram_model_test.py +++ b/compiler/tests/23_lib_sram_model_test.py @@ -9,6 +9,7 @@ import sys,os,re sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class lib_test(openram_test): @@ -17,7 +18,6 @@ class lib_test(openram_test): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) from characterizer import lib - from sram import sram from sram_config import sram_config c = sram_config(word_size=2, num_words=16, @@ -25,7 +25,8 @@ class lib_test(openram_test): c.words_per_row=1 c.recompute_sizes() debug.info(1, "Testing analytical timing for sample 2 bit, 16 words SRAM with 1 bank") - s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name)) + + s = factory.create(module_type="sram", sram_config=c, name="sram_2_16_1_{0}".format(OPTS.tech_name)) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/23_lib_sram_prune_test.py b/compiler/tests/23_lib_sram_prune_test.py index 1b93d1fd..2280ac79 100755 --- a/compiler/tests/23_lib_sram_prune_test.py +++ b/compiler/tests/23_lib_sram_prune_test.py @@ -9,6 +9,7 @@ import sys,os,re sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class lib_test(openram_test): @@ -26,7 +27,6 @@ class lib_test(openram_test): if not OPTS.spice_exe: debug.error("Could not find {} simulator.".format(OPTS.spice_name),-1) - from sram import sram from sram_config import sram_config c = sram_config(word_size=2, num_words=16, @@ -34,7 +34,8 @@ class lib_test(openram_test): c.words_per_row=1 c.recompute_sizes() debug.info(1, "Testing pruned timing for sample 2 bit, 16 words SRAM with 1 bank") - s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name)) + + s = factory.create(module_type="sram", sram_config=c, name="sram_2_16_1_{0}".format(OPTS.tech_name)) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/23_lib_sram_test.py b/compiler/tests/23_lib_sram_test.py index 1c26fd45..1cd142bf 100755 --- a/compiler/tests/23_lib_sram_test.py +++ b/compiler/tests/23_lib_sram_test.py @@ -9,6 +9,7 @@ import sys,os,re sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class lib_test(openram_test): @@ -26,7 +27,6 @@ class lib_test(openram_test): if not OPTS.spice_exe: debug.error("Could not find {} simulator.".format(OPTS.spice_name),-1) - from sram import sram from sram_config import sram_config c = sram_config(word_size=2, num_words=16, @@ -34,7 +34,8 @@ class lib_test(openram_test): c.words_per_row=1 c.recompute_sizes() debug.info(1, "Testing timing for sample 2 bit, 16 words SRAM with 1 bank") - s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name)) + + s = factory.create(module_type="sram", sram_config=c, name="sram_2_16_1_{0}".format(OPTS.tech_name)) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/24_lef_sram_test.py b/compiler/tests/24_lef_sram_test.py index 983038a2..f5946234 100755 --- a/compiler/tests/24_lef_sram_test.py +++ b/compiler/tests/24_lef_sram_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug @unittest.skip("SKIPPING 24_lef_sram_test") @@ -17,7 +18,6 @@ class lef_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from sram import sram from sram_config import sram_config c = sram_config(word_size=2, num_words=16, @@ -25,7 +25,7 @@ class lef_test(openram_test): c.words_per_row=1 c.recompute_sizes() debug.info(1, "Testing LEF for sample 2 bit, 16 words SRAM with 1 bank") - s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name)) + s = factory.create(module_type="sram", sram_config=c, name="sram_2_16_1_{0}".format(OPTS.tech_name)) gdsfile = s.name + ".gds" leffile = s.name + ".lef" diff --git a/compiler/tests/25_verilog_sram_test.py b/compiler/tests/25_verilog_sram_test.py index f98475b4..95329f48 100755 --- a/compiler/tests/25_verilog_sram_test.py +++ b/compiler/tests/25_verilog_sram_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class verilog_test(openram_test): @@ -16,7 +17,6 @@ class verilog_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - from sram import sram from sram_config import sram_config c = sram_config(word_size=2, num_words=16, @@ -24,7 +24,7 @@ class verilog_test(openram_test): c.words_per_row=1 c.recompute_sizes() debug.info(1, "Testing Verilog for sample 2 bit, 16 words SRAM with 1 bank") - s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name)) + s = factory.create(module_type="sram", sram_config=c, name="sram_2_16_1_{0}".format(OPTS.tech_name)) vfile = s.name + ".v" vname = OPTS.openram_temp + vfile diff --git a/compiler/tests/26_pex_test.py b/compiler/tests/26_pex_test.py index d374e485..df4ff0f7 100755 --- a/compiler/tests/26_pex_test.py +++ b/compiler/tests/26_pex_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug @unittest.skip("SKIPPING 26_pex_test") diff --git a/compiler/tests/27_worst_case_delay_test.py b/compiler/tests/27_worst_case_delay_test.py index 834c6b69..a023a614 100755 --- a/compiler/tests/27_worst_case_delay_test.py +++ b/compiler/tests/27_worst_case_delay_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug @unittest.skip("SKIPPING 27_worst_case_delay_test") @@ -33,7 +34,6 @@ class worst_case_timing_sram_test(openram_test): debug.error("Could not find {} simulator.".format(OPTS.spice_name),-1) word_size, num_words, num_banks = 2, 16, 1 - from sram import sram from sram_config import sram_config c = sram_config(word_size=word_size, num_words=num_words, @@ -42,7 +42,7 @@ class worst_case_timing_sram_test(openram_test): c.recompute_sizes() debug.info(1, "Testing the timing different bitecells inside a {}bit, {} words SRAM with {} bank".format( word_size, num_words, num_banks)) - s = sram(c, name="sram1") + s = factory.create(module_type="sram", sram_config=c) sp_netlist_file = OPTS.openram_temp + "temp.sp" s.sp_write(sp_netlist_file) diff --git a/compiler/tests/28_delay_model_test.py b/compiler/tests/28_delay_model_test.py index a02a42e9..a999cd20 100755 --- a/compiler/tests/28_delay_model_test.py +++ b/compiler/tests/28_delay_model_test.py @@ -9,6 +9,7 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug class delay_model_test(openram_test): @@ -27,7 +28,6 @@ class delay_model_test(openram_test): reload(characterizer) from characterizer import model_check - from sram import sram from sram_config import sram_config c = sram_config(word_size=4, num_words=16, @@ -35,7 +35,7 @@ class delay_model_test(openram_test): c.words_per_row=1 c.recompute_sizes() debug.info(1, "Testing timing for sample 1bit, 16words SRAM with 1 bank") - s = sram(c, name="sram1") + s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/30_openram_test.py b/compiler/tests/30_openram_test.py index 55ab9457..531302cf 100755 --- a/compiler/tests/30_openram_test.py +++ b/compiler/tests/30_openram_test.py @@ -11,6 +11,7 @@ import sys,os,re,shutil sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS +from sram_factory import factory import debug import getpass From c4c844a8a272bb1aeb54604f516add5b158f8d1b Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Wed, 6 Mar 2019 14:14:46 -0800 Subject: [PATCH 009/324] Remove duplicate module name checking since we use the factory --- compiler/base/hierarchy_design.py | 27 --------------------------- compiler/globals.py | 4 ---- 2 files changed, 31 deletions(-) diff --git a/compiler/base/hierarchy_design.py b/compiler/base/hierarchy_design.py index 1dc052e3..5b45abe1 100644 --- a/compiler/base/hierarchy_design.py +++ b/compiler/base/hierarchy_design.py @@ -25,33 +25,6 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): hierarchy_spice.spice.__init__(self, name) - # Check if the name already exists, if so, give an error - # because each reference must be a unique name. - # These modules ensure unique names or have no changes if they - # aren't unique - ok_list = ['contact', - 'ptx', - 'pbitcell', - 'replica_pbitcell', - 'sram', - 'hierarchical_predecode2x4', - 'hierarchical_predecode3x8'] - - # Library cells don't change - if self.is_library_cell: - return - # Name is unique so far - elif name not in hierarchy_design.name_map: - hierarchy_design.name_map.append(name) - else: - # Name is in our list of exceptions (they don't change) - for ok_names in ok_list: - if ok_names == self.__class__.__name__: - break - else: - debug.error("Duplicate layout reference name {0} of class {1}. GDS2 requires names be unique.".format(name,self.__class__),-1) - - def get_layout_pins(self,inst): """ Return a map of pin locations of the instance offset """ # find the instance diff --git a/compiler/globals.py b/compiler/globals.py index cef24cf6..590fc97f 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -137,10 +137,6 @@ def init_openram(config_file, is_unit_test=True): setup_bitcell() - # Reset the static duplicate name checker for unit tests. - import hierarchy_design - hierarchy_design.hierarchy_design.name_map=[] - global OPTS global CHECKPOINT_OPTS From 77229d5121e7180f3a7244450603f6cf326eaa47 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Wed, 6 Mar 2019 14:24:18 -0800 Subject: [PATCH 010/324] Reduce verbosity --- compiler/sram_factory.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/sram_factory.py b/compiler/sram_factory.py index 26069610..1b4041d4 100644 --- a/compiler/sram_factory.py +++ b/compiler/sram_factory.py @@ -58,7 +58,7 @@ class sram_factory: (obj_kwargs, obj_item) = obj # Must have the same dictionary exactly (conservative) if obj_kwargs == kwargs: - debug.info(1, "Existing module: type={0} name={1} kwargs={2}".format(module_type, obj_item.name, str(kwargs))) + debug.info(3, "Existing module: type={0} name={1} kwargs={2}".format(module_type, obj_item.name, str(kwargs))) return obj_item # Use the default name if there are default arguments From 95137a2c260bc847bf97ecbe12b0ac256f16d739 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Wed, 6 Mar 2019 14:24:24 -0800 Subject: [PATCH 011/324] Wrap debug line --- .../tests/20_psram_1bank_2mux_1rw_1w_test.py | 16 ++++---- compiler/tests/20_psram_1bank_2mux_test.py | 16 ++++---- .../tests/20_psram_1bank_4mux_1rw_1r_test.py | 16 ++++---- .../tests/20_sram_1bank_2mux_1rw_1r_test.py | 16 ++++---- .../tests/20_sram_1bank_2mux_1w_1r_test.py | 16 ++++---- compiler/tests/20_sram_1bank_2mux_test.py | 16 ++++---- compiler/tests/20_sram_1bank_4mux_test.py | 16 ++++---- .../tests/20_sram_1bank_8mux_1rw_1r_test.py | 16 ++++---- compiler/tests/20_sram_1bank_8mux_test.py | 16 ++++---- .../tests/20_sram_1bank_nomux_1rw_1r_test.py | 16 ++++---- compiler/tests/20_sram_1bank_nomux_test.py | 16 ++++---- compiler/tests/20_sram_2bank_test.py | 40 +++++++++++++++++-- 12 files changed, 135 insertions(+), 81 deletions(-) diff --git a/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py b/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py index 719f3138..878cb252 100755 --- a/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py +++ b/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py @@ -31,13 +31,15 @@ class psram_1bank_2mux_1rw_1w_test(openram_test): c.num_words=32 c.words_per_row=2 c.recompute_sizes() - debug.info(1, "Layout test for {}rw,{}r,{}w psram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports, - OPTS.num_r_ports, - OPTS.num_w_ports, - c.word_size, - c.num_words, - c.words_per_row, - c.num_banks)) + debug.info(1, "Layout test for {}rw,{}r,{}w psram " + "with {} bit words, {} words, {} words per " + "row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) diff --git a/compiler/tests/20_psram_1bank_2mux_test.py b/compiler/tests/20_psram_1bank_2mux_test.py index 23f0dfb7..bc8b90d8 100755 --- a/compiler/tests/20_psram_1bank_2mux_test.py +++ b/compiler/tests/20_psram_1bank_2mux_test.py @@ -32,13 +32,15 @@ class psram_1bank_2mux_test(openram_test): c.num_words=32 c.words_per_row=2 c.recompute_sizes() - debug.info(1, "Layout test for {}rw,{}r,{}w psram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports, - OPTS.num_r_ports, - OPTS.num_w_ports, - c.word_size, - c.num_words, - c.words_per_row, - c.num_banks)) + debug.info(1, "Layout test for {}rw,{}r,{}w psram " + "with {} bit words, {} words, {} words per " + "row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) diff --git a/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py b/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py index dac37929..3a0a9c8e 100755 --- a/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py +++ b/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py @@ -30,13 +30,15 @@ class psram_1bank_4mux_1rw_1r_test(openram_test): c.num_words=64 c.words_per_row=4 c.recompute_sizes() - debug.info(1, "Layout test for {}rw,{}r,{}w psram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports, - OPTS.num_r_ports, - OPTS.num_w_ports, - c.word_size, - c.num_words, - c.words_per_row, - c.num_banks)) + debug.info(1, "Layout test for {}rw,{}r,{}w psram " + "with {} bit words, {} words, {} words per " + "row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) diff --git a/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py index f5878f71..9cd7fe76 100755 --- a/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py @@ -30,13 +30,15 @@ class sram_1bank_2mux_1rw_1r_test(openram_test): c.words_per_row=2 c.recompute_sizes() - debug.info(1, "Layout test for {}rw,{}r,{}w sram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports, - OPTS.num_r_ports, - OPTS.num_w_ports, - c.word_size, - c.num_words, - c.words_per_row, - c.num_banks)) + debug.info(1, "Layout test for {}rw,{}r,{}w sram " + "with {} bit words, {} words, {} words per " + "row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) diff --git a/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py index dd2e7415..36b23800 100755 --- a/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py @@ -31,13 +31,15 @@ class psram_1bank_2mux_1w_1r_test(openram_test): c.num_words=32 c.words_per_row=2 c.recompute_sizes() - debug.info(1, "Layout test for {}rw,{}r,{}w psram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports, - OPTS.num_r_ports, - OPTS.num_w_ports, - c.word_size, - c.num_words, - c.words_per_row, - c.num_banks)) + debug.info(1, "Layout test for {}rw,{}r,{}w sram " + "with {} bit words, {} words, {} words per " + "row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) diff --git a/compiler/tests/20_sram_1bank_2mux_test.py b/compiler/tests/20_sram_1bank_2mux_test.py index 1157ff31..d9118690 100755 --- a/compiler/tests/20_sram_1bank_2mux_test.py +++ b/compiler/tests/20_sram_1bank_2mux_test.py @@ -24,13 +24,15 @@ class sram_1bank_2mux_test(openram_test): c.words_per_row=2 c.recompute_sizes() - debug.info(1, "Layout test for {}rw,{}r,{}w sram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports, - OPTS.num_r_ports, - OPTS.num_w_ports, - c.word_size, - c.num_words, - c.words_per_row, - c.num_banks)) + debug.info(1, "Layout test for {}rw,{}r,{}w sram " + "with {} bit words, {} words, {} words per " + "row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) diff --git a/compiler/tests/20_sram_1bank_4mux_test.py b/compiler/tests/20_sram_1bank_4mux_test.py index 272de77d..59a7cdcc 100755 --- a/compiler/tests/20_sram_1bank_4mux_test.py +++ b/compiler/tests/20_sram_1bank_4mux_test.py @@ -24,13 +24,15 @@ class sram_1bank_4mux_test(openram_test): c.words_per_row=4 c.recompute_sizes() - debug.info(1, "Layout test for {}rw,{}r,{}w sram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports, - OPTS.num_r_ports, - OPTS.num_w_ports, - c.word_size, - c.num_words, - c.words_per_row, - c.num_banks)) + debug.info(1, "Layout test for {}rw,{}r,{}w sram " + "with {} bit words, {} words, {} words per " + "row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) diff --git a/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py index 3f0ed8f7..fd62f39a 100755 --- a/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py @@ -30,13 +30,15 @@ class sram_1bank_8mux_1rw_1r_test(openram_test): c.words_per_row=8 c.recompute_sizes() - debug.info(1, "Layout test for {}rw,{}r,{}w sram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports, - OPTS.num_r_ports, - OPTS.num_w_ports, - c.word_size, - c.num_words, - c.words_per_row, - c.num_banks)) + debug.info(1, "Layout test for {}rw,{}r,{}w sram " + "with {} bit words, {} words, {} words per " + "row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) diff --git a/compiler/tests/20_sram_1bank_8mux_test.py b/compiler/tests/20_sram_1bank_8mux_test.py index 0bb636e3..df2b3d8c 100755 --- a/compiler/tests/20_sram_1bank_8mux_test.py +++ b/compiler/tests/20_sram_1bank_8mux_test.py @@ -24,13 +24,15 @@ class sram_1bank_8mux_test(openram_test): c.words_per_row=8 c.recompute_sizes() - debug.info(1, "Layout test for {}rw,{}r,{}w sram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports, - OPTS.num_r_ports, - OPTS.num_w_ports, - c.word_size, - c.num_words, - c.words_per_row, - c.num_banks)) + debug.info(1, "Layout test for {}rw,{}r,{}w sram " + "with {} bit words, {} words, {} words per " + "row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) diff --git a/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py index ea372d61..00191aec 100755 --- a/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py @@ -30,13 +30,15 @@ class sram_1bank_nomux_1rw_1r_test(openram_test): c.words_per_row=1 c.recompute_sizes() - debug.info(1, "Layout test for {}rw,{}r,{}w sram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports, - OPTS.num_r_ports, - OPTS.num_w_ports, - c.word_size, - c.num_words, - c.words_per_row, - c.num_banks)) + debug.info(1, "Layout test for {}rw,{}r,{}w sram " + "with {} bit words, {} words, {} words per " + "row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) diff --git a/compiler/tests/20_sram_1bank_nomux_test.py b/compiler/tests/20_sram_1bank_nomux_test.py index ce44a206..6369398b 100755 --- a/compiler/tests/20_sram_1bank_nomux_test.py +++ b/compiler/tests/20_sram_1bank_nomux_test.py @@ -24,13 +24,15 @@ class sram_1bank_nomux_test(openram_test): c.words_per_row=1 c.recompute_sizes() - debug.info(1, "Layout test for {}rw,{}r,{}w sram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports, - OPTS.num_r_ports, - OPTS.num_w_ports, - c.word_size, - c.num_words, - c.words_per_row, - c.num_banks)) + debug.info(1, "Layout test for {}rw,{}r,{}w sram " + "with {} bit words, {} words, {} words per " + "row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) diff --git a/compiler/tests/20_sram_2bank_test.py b/compiler/tests/20_sram_2bank_test.py index 9ae2bee9..db4782a8 100755 --- a/compiler/tests/20_sram_2bank_test.py +++ b/compiler/tests/20_sram_2bank_test.py @@ -24,7 +24,15 @@ class sram_2bank_test(openram_test): c.words_per_row=1 c.recompute_sizes() - debug.info(1, "Two bank, no column mux with control logic") + debug.info(1, "Layout test for {}rw,{}r,{}w sram " + "with {} bit words, {} words, {} words per " + "row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) factory.reset() a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) @@ -32,7 +40,15 @@ class sram_2bank_test(openram_test): c.num_words=64 c.words_per_row=2 c.recompute_sizes() - debug.info(1, "Two bank two way column mux with control logic") + debug.info(1, "Layout test for {}rw,{}r,{}w sram " + "with {} bit words, {} words, {} words per " + "row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) factory.reset() a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) @@ -40,7 +56,15 @@ class sram_2bank_test(openram_test): c.num_words=128 c.words_per_row=4 c.recompute_sizes() - debug.info(1, "Two bank, four way column mux with control logic") + debug.info(1, "Layout test for {}rw,{}r,{}w sram " + "with {} bit words, {} words, {} words per " + "row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) factory.reset() a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) @@ -49,7 +73,15 @@ class sram_2bank_test(openram_test): c.num_words=256 c.words_per_row=8 c.recompute_sizes() - debug.info(1, "Two bank, eight way column mux with control logic") + debug.info(1, "Layout test for {}rw,{}r,{}w sram " + "with {} bit words, {} words, {} words per " + "row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) factory.reset() a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) From fac9ff9be632ccd9118d771b825aa89a114ef0d3 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Wed, 6 Mar 2019 20:59:52 -0800 Subject: [PATCH 012/324] changed add_db.py to uncommenting method --- compiler/datasheet/add_db.py | 47 ++++++++++++++++++++--------- compiler/datasheet/datasheet.py | 15 +++++---- compiler/datasheet/datasheet_gen.py | 5 +++ compiler/datasheet/table_gen.py | 25 ++++++++++----- 4 files changed, 63 insertions(+), 29 deletions(-) diff --git a/compiler/datasheet/add_db.py b/compiler/datasheet/add_db.py index 1df3cf7b..f0f69fc7 100644 --- a/compiler/datasheet/add_db.py +++ b/compiler/datasheet/add_db.py @@ -12,23 +12,40 @@ def get_file_tree(path): return list(Path(path).rglob("*.html")) -def parse_html(file, db): - start_tag = 'Deliverables

    TypeDescriptionLink
    .dbCompiled .lib file'+str(os.path.basename(db))+'
    ' - with open(file, 'r+') as f: +def parse_html(file, comment): + start_tag = '' + with open(file, 'r+') as f: file_string = f.read() - start_byte = file_string.find(start_tag) + len(start_tag) - row = '' - file_string = "%s%s%s" % ( - file_string[:start_byte], row, file_string[start_byte:]) - f.seek(0) - f.write(file_string) + start_byte = file_string.find(start_tag) + while(start_byte != -1): + f.seek(0) + file_string = f.read() + start_byte = file_string.find(start_tag) + end_byte = file_string.find(end_tag) + start_byte + len(end_tag) + + f.seek(start_byte) + found = f.read(end_byte - start_byte) + + file_string = "%s%s%s" % ( + file_string[:start_byte], found[len(start_tag):len(found)-len(end_tag)] , file_string[end_byte:]) + + f.seek(0) + f.write(file_string) + start_byte = file_string.find(start_tag) + end_byte = file_string.find(end_tag) + start_byte + len(end_tag) + +def uncomment(comments): + for datasheet in datasheet_list: + for comment in comments: + if glob.glob(os.path.dirname(datasheet)+'/*' + comment): + comment_files = list(Path(os.path.dirname(datasheet)).rglob('*'+comment)) + for comment_file in comment_files: + parse_html(datasheet, comment) datasheet_list = get_file_tree(path_to_files) -for datasheet in datasheet_list: - if glob.glob(os.path.dirname(datasheet)+'/*.db'): - db_files = list(Path(os.path.dirname(datasheet)).rglob("*.db")) - for db_file in db_files: - parse_html(datasheet, db_file) +comments = ['.db'] +uncomment(comments) + diff --git a/compiler/datasheet/datasheet.py b/compiler/datasheet/datasheet.py index a7700349..a21d3dae 100644 --- a/compiler/datasheet/datasheet.py +++ b/compiler/datasheet/datasheet.py @@ -38,6 +38,9 @@ class datasheet(): with open(os.path.abspath(os.environ.get("OPENRAM_HOME")) + '/datasheet/assets/OpenRAM_logo.png', "rb") as image_file: openram_logo = base64.b64encode(image_file.read()) + #comment table rows which we may want to enable after compile time + comments = ['.db'] + self.html += 'VLSIDAOpenRAM'.format(str(vlsi_logo)[2:-1], str(openram_logo)[2:-1]) self.html += '

    ' + \ @@ -51,11 +54,11 @@ class datasheet(): 'Git commit id: ' + str(self.git_id) + '

    ' # print port table self.html += '

    Ports and Configuration

    ' - self.html += self.io_table.to_html() + self.html += self.io_table.to_html(comments) # print operating condidition information self.html += '

    Operating Conditions

    ' - self.html += self.operating_table.to_html() + self.html += self.operating_table.to_html(comments) # check if analytical model is being used self.html += '

    Timing Data

    ' @@ -66,13 +69,13 @@ class datasheet(): model = "spice characterizer" # display timing data self.html += '

    Using '+model+'

    ' - self.html += self.timing_table.to_html() + self.html += self.timing_table.to_html(comments) # display power data self.html += '

    Power Data

    ' - self.html += self.power_table.to_html() + self.html += self.power_table.to_html(comments) # display corner information self.html += '

    Characterization Corners

    ' - self.html += self.corners_table.to_html() + self.html += self.corners_table.to_html(comments) # display deliverables table self.html += '

    Deliverables

    ' - self.html += self.dlv_table.to_html() + self.html += self.dlv_table.to_html(comments) diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py index 3b4fe2ac..e6c728f0 100644 --- a/compiler/datasheet/datasheet_gen.py +++ b/compiler/datasheet/datasheet_gen.py @@ -386,6 +386,9 @@ def parse_characterizer_csv(f, pages): [PROC, VOLT, TEMP, LIB_NAME.replace(OUT_DIR, '').replace(NAME, '')]) new_sheet.dlv_table.add_row( ['.lib', 'Synthesis models', '{1}'.format(LIB_NAME, LIB_NAME.replace(OUT_DIR, ''))]) + new_sheet.dlv_table.add_row( + ['.db', 'Compiled .lib', '{1}'.format(LIB_NAME[:-3] + 'db', LIB_NAME.replace(OUT_DIR, '')[:-3] + 'db')]) + if found == 0: @@ -603,6 +606,8 @@ def parse_characterizer_csv(f, pages): ['.html', 'This datasheet', '{0}.{1}'.format(OPTS.output_name, 'html')]) new_sheet.dlv_table.add_row( ['.lib', 'Synthesis models', '{1}'.format(LIB_NAME, LIB_NAME.replace(OUT_DIR, ''))]) + new_sheet.dlv_table.add_row( + ['.db', 'Compiled .lib', '{1}'.format(LIB_NAME[:-3] + 'db', LIB_NAME.replace(OUT_DIR, '')[:-3] + 'db')]) new_sheet.dlv_table.add_row( ['.py', 'OpenRAM configuration file', '{0}.{1}'.format(OPTS.output_name, 'py')]) new_sheet.dlv_table.add_row( diff --git a/compiler/datasheet/table_gen.py b/compiler/datasheet/table_gen.py index 8f94e896..a03fea8c 100644 --- a/compiler/datasheet/table_gen.py +++ b/compiler/datasheet/table_gen.py @@ -22,27 +22,36 @@ class table_gen: html += '' return html - def gen_table_body(self): + def gen_table_body(self,comments): """generate html body (used after gen_table_head)""" html = '' html += '' html += '' for row in self.rows[1:]: - html += '' - for col in row: - html += '' - html += '' + + if row[0] not in comments: + html += '' + for col in row: + html += '' + html += '' + + else: + html += '' + html += '' html += '' return html - def to_html(self): + def to_html(self,comments): """writes table_gen object to inline html""" html = '' html += '
    TypeDescriptionLink
    .dbCompiled .lib file'+str(os.path.basename(db))+'
    ' + str(col) + '
    ' + str(col) + '
    ' html += self.gen_table_head() - html += self.gen_table_body() - html += '
    ' + html += self.gen_table_body(comments) + html += '\n' return html From 83e810f8b89fde9144c916954a980aa70f3ca89c Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Wed, 6 Mar 2019 21:12:21 -0800 Subject: [PATCH 013/324] added sorting to deliverables output --- compiler/datasheet/datasheet.py | 1 + compiler/datasheet/table_gen.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/compiler/datasheet/datasheet.py b/compiler/datasheet/datasheet.py index a21d3dae..b48d217d 100644 --- a/compiler/datasheet/datasheet.py +++ b/compiler/datasheet/datasheet.py @@ -78,4 +78,5 @@ class datasheet(): self.html += self.corners_table.to_html(comments) # display deliverables table self.html += '

    Deliverables

    ' + self.dlv_table.sort() self.html += self.dlv_table.to_html(comments) diff --git a/compiler/datasheet/table_gen.py b/compiler/datasheet/table_gen.py index a03fea8c..82cb3393 100644 --- a/compiler/datasheet/table_gen.py +++ b/compiler/datasheet/table_gen.py @@ -45,6 +45,8 @@ class table_gen: html += '' html += '' return html + def sort(self): + self.rows[1:] = sorted(self.rows[1:], key=lambda x : x[0]) def to_html(self,comments): """writes table_gen object to inline html""" From c1770036aca72ef91515df4736127567fce80eaf Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Wed, 6 Mar 2019 22:20:07 -0800 Subject: [PATCH 014/324] made the add_db code much simpler --- compiler/datasheet/add_db.py | 33 +++++++++++---------------------- compiler/datasheet/table_gen.py | 2 +- 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/compiler/datasheet/add_db.py b/compiler/datasheet/add_db.py index f0f69fc7..d708985f 100644 --- a/compiler/datasheet/add_db.py +++ b/compiler/datasheet/add_db.py @@ -14,36 +14,25 @@ def get_file_tree(path): def parse_html(file, comment): start_tag = '' + end_tag = comment+'-->' - with open(file, 'r+') as f: + with open(file, 'r') as f: + file_string = f.read() - start_byte = file_string.find(start_tag) - while(start_byte != -1): - f.seek(0) - file_string = f.read() - start_byte = file_string.find(start_tag) - end_byte = file_string.find(end_tag) + start_byte + len(end_tag) - - f.seek(start_byte) - found = f.read(end_byte - start_byte) - - file_string = "%s%s%s" % ( - file_string[:start_byte], found[len(start_tag):len(found)-len(end_tag)] , file_string[end_byte:]) - - f.seek(0) - f.write(file_string) - start_byte = file_string.find(start_tag) - end_byte = file_string.find(end_tag) + start_byte + len(end_tag) + with open(file, 'w') as f: + file_string = file_string.replace(start_tag,"") + file_string = file_string.replace(end_tag,"") + + f.write(file_string) + def uncomment(comments): + comment_files = [] for datasheet in datasheet_list: for comment in comments: if glob.glob(os.path.dirname(datasheet)+'/*' + comment): - comment_files = list(Path(os.path.dirname(datasheet)).rglob('*'+comment)) - for comment_file in comment_files: - parse_html(datasheet, comment) + parse_html(datasheet, comment) datasheet_list = get_file_tree(path_to_files) comments = ['.db'] diff --git a/compiler/datasheet/table_gen.py b/compiler/datasheet/table_gen.py index 82cb3393..227bb5c4 100644 --- a/compiler/datasheet/table_gen.py +++ b/compiler/datasheet/table_gen.py @@ -40,7 +40,7 @@ class table_gen: html += '' + html += ''+row[0]+'-->' html += '' html += '' From 4754e6851d20db5454e00c6620fa9908e34da266 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Wed, 6 Mar 2019 22:21:05 -0800 Subject: [PATCH 015/324] add_db takes commline line argv for path --- compiler/datasheet/add_db.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/datasheet/add_db.py b/compiler/datasheet/add_db.py index d708985f..862c1d8a 100644 --- a/compiler/datasheet/add_db.py +++ b/compiler/datasheet/add_db.py @@ -1,11 +1,12 @@ from pathlib import Path import glob import os +import sys # This is the path to the directory you would like to search # This directory is searched recursively for .html files -path_to_files = '../temp/' +path_to_files = sys.argv[1] def get_file_tree(path): From 910878ed30ed65aec2ec8ef787a8cba3b8c70bd7 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Thu, 7 Mar 2019 12:30:27 -0800 Subject: [PATCH 016/324] Removed bitline measures until hardcoded signal names are made dynamic --- compiler/characterizer/delay.py | 18 +++++++++--------- compiler/tests/21_hspice_delay_test.py | 12 ++---------- compiler/tests/21_ngspice_delay_test.py | 12 ++---------- 3 files changed, 13 insertions(+), 29 deletions(-) diff --git a/compiler/characterizer/delay.py b/compiler/characterizer/delay.py index 29b12ae9..9c15cd2a 100644 --- a/compiler/characterizer/delay.py +++ b/compiler/characterizer/delay.py @@ -42,8 +42,8 @@ class delay(simulation): #Altering the names will crash the characterizer. TODO: object orientated approach to the measurements. self.delay_meas_names = ["delay_lh", "delay_hl", "slew_lh", "slew_hl"] self.power_meas_names = ["read0_power", "read1_power", "write0_power", "write1_power"] - self.voltage_when_names = ["volt_bl", "volt_br"] - self.bitline_delay_names = ["delay_bl", "delay_br"] + #self.voltage_when_names = ["volt_bl", "volt_br"] + #self.bitline_delay_names = ["delay_bl", "delay_br"] def create_measurement_objects(self): """Create the measurements used for read and write ports""" @@ -84,8 +84,8 @@ class delay(simulation): bl_name = "Xsram.Xbank0.bl{}_{}".format(port_format, self.bitline_column) br_name = "Xsram.Xbank0.br{}_{}".format(port_format, self.bitline_column) - self.read_meas_objs.append(voltage_when_measure(self.voltage_when_names[0], trig_name, bl_name, "RISE", .5)) - self.read_meas_objs.append(voltage_when_measure(self.voltage_when_names[1], trig_name, br_name, "RISE", .5)) + # self.read_meas_objs.append(voltage_when_measure(self.voltage_when_names[0], trig_name, bl_name, "RISE", .5)) + # self.read_meas_objs.append(voltage_when_measure(self.voltage_when_names[1], trig_name, br_name, "RISE", .5)) #These are read values but need to be separated for unique error checking. self.create_bitline_delay_measurement_objects() @@ -105,10 +105,10 @@ class delay(simulation): targ_val = (self.vdd_voltage - tech.spice["v_threshold_typical"])/self.vdd_voltage #Calculate as a percentage of vdd targ_name = "{0}{1}_{2}".format(self.dout_name,"{}",self.probe_data) #Empty values are the port and probe data bit - self.bitline_delay_objs.append(delay_measure(self.bitline_delay_names[0], trig_name, bl_name, "FALL", "FALL", targ_vdd=targ_val, measure_scale=1e9)) - self.bitline_delay_objs[-1].meta_str = "read0" - self.bitline_delay_objs.append(delay_measure(self.bitline_delay_names[1], trig_name, br_name, "FALL", "FALL", targ_vdd=targ_val, measure_scale=1e9)) - self.bitline_delay_objs[-1].meta_str = "read1" + # self.bitline_delay_objs.append(delay_measure(self.bitline_delay_names[0], trig_name, bl_name, "FALL", "FALL", targ_vdd=targ_val, measure_scale=1e9)) + # self.bitline_delay_objs[-1].meta_str = "read0" + # self.bitline_delay_objs.append(delay_measure(self.bitline_delay_names[1], trig_name, br_name, "FALL", "FALL", targ_vdd=targ_val, measure_scale=1e9)) + # self.bitline_delay_objs[-1].meta_str = "read1" #Enforces the time delay on the bitline measurements for read0 or read1 for obj in self.bitline_delay_objs: obj.meta_add_delay = True @@ -966,7 +966,7 @@ class delay(simulation): def get_empty_measure_data_dict(self): """Make a dict of lists for each type of delay and power measurement to append results to""" - measure_names = self.delay_meas_names + self.power_meas_names + self.voltage_when_names + self.bitline_delay_names + measure_names = self.delay_meas_names + self.power_meas_names #Create list of dicts. List lengths is # of ports. Each dict maps the measurement names to lists. measure_data = [{mname:[] for mname in measure_names} for i in self.all_ports] return measure_data diff --git a/compiler/tests/21_hspice_delay_test.py b/compiler/tests/21_hspice_delay_test.py index fa7fc35f..8808b868 100755 --- a/compiler/tests/21_hspice_delay_test.py +++ b/compiler/tests/21_hspice_delay_test.py @@ -51,9 +51,7 @@ class timing_sram_test(openram_test): data.update(port_data[0]) if OPTS.tech_name == "freepdk45": - golden_data = {'delay_bl': [0.1980959], - 'delay_br': [0.1946091], - 'delay_hl': [0.2121267], + golden_data = {'delay_hl': [0.2121267], 'delay_lh': [0.2121267], 'leakage_power': 0.0023761999999999998, 'min_period': 0.43, @@ -61,14 +59,10 @@ class timing_sram_test(openram_test): 'read1_power': [0.48940979999999995], 'slew_hl': [0.0516745], 'slew_lh': [0.0516745], - 'volt_bl': [0.5374525], - 'volt_br': [1.1058], 'write0_power': [0.46267169999999996], 'write1_power': [0.4670826]} elif OPTS.tech_name == "scn4m_subm": - golden_data = {'delay_bl': [1.1029], - 'delay_br': [0.9656455999999999], - 'delay_hl': [1.288], + golden_data = {'delay_hl': [1.288], 'delay_lh': [1.288], 'leakage_power': 0.0273896, 'min_period': 2.578, @@ -76,8 +70,6 @@ class timing_sram_test(openram_test): 'read1_power': [16.2616], 'slew_hl': [0.47891700000000004], 'slew_lh': [0.47891700000000004], - 'volt_bl': [4.2155], - 'volt_br': [5.8142], 'write0_power': [16.0656], 'write1_power': [16.2616]} diff --git a/compiler/tests/21_ngspice_delay_test.py b/compiler/tests/21_ngspice_delay_test.py index 5af44e69..4548f836 100755 --- a/compiler/tests/21_ngspice_delay_test.py +++ b/compiler/tests/21_ngspice_delay_test.py @@ -51,9 +51,7 @@ class timing_sram_test(openram_test): data.update(port_data[0]) if OPTS.tech_name == "freepdk45": - golden_data = {'delay_bl': [0.2003652], - 'delay_br': [0.198698], - 'delay_hl': [0.2108836], + golden_data = {'delay_hl': [0.2108836], 'delay_lh': [0.2108836], 'leakage_power': 0.001564799, 'min_period': 0.508, @@ -61,14 +59,10 @@ class timing_sram_test(openram_test): 'read1_power': [0.4198608], 'slew_hl': [0.0455126], 'slew_lh': [0.0455126], - 'volt_bl': [0.6472883], - 'volt_br': [1.114024], 'write0_power': [0.40681890000000004], 'write1_power': [0.4198608]} elif OPTS.tech_name == "scn4m_subm": - golden_data = {'delay_bl': [1.3937359999999999], - 'delay_br': [1.2596429999999998], - 'delay_hl': [1.5747600000000002], + golden_data = {'delay_hl': [1.5747600000000002], 'delay_lh': [1.5747600000000002], 'leakage_power': 0.00195795, 'min_period': 3.281, @@ -76,8 +70,6 @@ class timing_sram_test(openram_test): 'read1_power': [14.369810000000001], 'slew_hl': [0.49631959999999997], 'slew_lh': [0.49631959999999997], - 'volt_bl': [4.132618], - 'volt_br': [5.573099], 'write0_power': [13.79953], 'write1_power': [14.369810000000001]} From d8f64500e6c297f63f399d6eed1cae95bc2c4c4e Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 8 Mar 2019 08:31:26 -0800 Subject: [PATCH 017/324] Remove factory create from lib tests so that we can give required name --- compiler/tests/23_lib_sram_model_corners_test.py | 8 +++++--- compiler/tests/23_lib_sram_model_test.py | 6 ++++-- compiler/tests/23_lib_sram_prune_test.py | 6 ++++-- compiler/tests/23_lib_sram_test.py | 6 ++++-- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/compiler/tests/23_lib_sram_model_corners_test.py b/compiler/tests/23_lib_sram_model_corners_test.py index 744bf4ed..8b830832 100755 --- a/compiler/tests/23_lib_sram_model_corners_test.py +++ b/compiler/tests/23_lib_sram_model_corners_test.py @@ -9,7 +9,6 @@ import sys,os,re sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -from sram_factory import factory import debug class model_corners_lib_test(openram_test): @@ -18,6 +17,7 @@ class model_corners_lib_test(openram_test): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) from characterizer import lib + from sram import sram from sram_config import sram_config c = sram_config(word_size=2, num_words=16, @@ -25,8 +25,10 @@ class model_corners_lib_test(openram_test): c.words_per_row=1 c.recompute_sizes() debug.info(1, "Testing analytical timing for sample 2 bit, 16 words SRAM with 1 bank") - - s = factory.create(module_type="sram", sram_config=c, name="sram_2_16_1_{0}".format(OPTS.tech_name)) + + # This doesn't have to use the factory since worst case + # it will just replaece the top-level module of the same name + s = sram(c, name="sram", name="sram_2_16_1_{0}".format(OPTS.tech_name)) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/23_lib_sram_model_test.py b/compiler/tests/23_lib_sram_model_test.py index 518943a1..0b4a17b0 100755 --- a/compiler/tests/23_lib_sram_model_test.py +++ b/compiler/tests/23_lib_sram_model_test.py @@ -9,7 +9,6 @@ import sys,os,re sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -from sram_factory import factory import debug class lib_test(openram_test): @@ -18,6 +17,7 @@ class lib_test(openram_test): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) from characterizer import lib + from sram import sram from sram_config import sram_config c = sram_config(word_size=2, num_words=16, @@ -26,7 +26,9 @@ class lib_test(openram_test): c.recompute_sizes() debug.info(1, "Testing analytical timing for sample 2 bit, 16 words SRAM with 1 bank") - s = factory.create(module_type="sram", sram_config=c, name="sram_2_16_1_{0}".format(OPTS.tech_name)) + # This doesn't have to use the factory since worst case + # it will just replaece the top-level module of the same name + s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name)) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/23_lib_sram_prune_test.py b/compiler/tests/23_lib_sram_prune_test.py index 2280ac79..f8666d6f 100755 --- a/compiler/tests/23_lib_sram_prune_test.py +++ b/compiler/tests/23_lib_sram_prune_test.py @@ -9,7 +9,6 @@ import sys,os,re sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -from sram_factory import factory import debug class lib_test(openram_test): @@ -27,6 +26,7 @@ class lib_test(openram_test): if not OPTS.spice_exe: debug.error("Could not find {} simulator.".format(OPTS.spice_name),-1) + from sram import sram from sram_config import sram_config c = sram_config(word_size=2, num_words=16, @@ -35,7 +35,9 @@ class lib_test(openram_test): c.recompute_sizes() debug.info(1, "Testing pruned timing for sample 2 bit, 16 words SRAM with 1 bank") - s = factory.create(module_type="sram", sram_config=c, name="sram_2_16_1_{0}".format(OPTS.tech_name)) + # This doesn't have to use the factory since worst case + # it will just replaece the top-level module of the same name + s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name)) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) diff --git a/compiler/tests/23_lib_sram_test.py b/compiler/tests/23_lib_sram_test.py index 1cd142bf..6cddd840 100755 --- a/compiler/tests/23_lib_sram_test.py +++ b/compiler/tests/23_lib_sram_test.py @@ -9,7 +9,6 @@ import sys,os,re sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -from sram_factory import factory import debug class lib_test(openram_test): @@ -27,6 +26,7 @@ class lib_test(openram_test): if not OPTS.spice_exe: debug.error("Could not find {} simulator.".format(OPTS.spice_name),-1) + from sram import sram from sram_config import sram_config c = sram_config(word_size=2, num_words=16, @@ -35,7 +35,9 @@ class lib_test(openram_test): c.recompute_sizes() debug.info(1, "Testing timing for sample 2 bit, 16 words SRAM with 1 bank") - s = factory.create(module_type="sram", sram_config=c, name="sram_2_16_1_{0}".format(OPTS.tech_name)) + # This doesn't have to use the factory since worst case + # it will just replaece the top-level module of the same name + s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name)) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) From bd256d33d69b407a68a6bffd0cc4889715c6660b Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 8 Mar 2019 08:35:18 -0800 Subject: [PATCH 018/324] Remove syntax error --- compiler/tests/23_lib_sram_model_corners_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/tests/23_lib_sram_model_corners_test.py b/compiler/tests/23_lib_sram_model_corners_test.py index 8b830832..5c787245 100755 --- a/compiler/tests/23_lib_sram_model_corners_test.py +++ b/compiler/tests/23_lib_sram_model_corners_test.py @@ -28,7 +28,7 @@ class model_corners_lib_test(openram_test): # This doesn't have to use the factory since worst case # it will just replaece the top-level module of the same name - s = sram(c, name="sram", name="sram_2_16_1_{0}".format(OPTS.tech_name)) + s = sram(c, name="sram_2_16_1_{0}".format(OPTS.tech_name)) tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) From 196710ec3eda8e039f65ee1ac631f6ab9a72c1ac Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 8 Mar 2019 09:22:48 -0800 Subject: [PATCH 019/324] Remove factory from lef and verilog tests --- compiler/tests/24_lef_sram_test.py | 6 ++++-- compiler/tests/25_verilog_sram_test.py | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/compiler/tests/24_lef_sram_test.py b/compiler/tests/24_lef_sram_test.py index f5946234..5417a40f 100755 --- a/compiler/tests/24_lef_sram_test.py +++ b/compiler/tests/24_lef_sram_test.py @@ -9,7 +9,6 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -from sram_factory import factory import debug @unittest.skip("SKIPPING 24_lef_sram_test") @@ -18,6 +17,7 @@ class lef_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + from sram import sram from sram_config import sram_config c = sram_config(word_size=2, num_words=16, @@ -25,7 +25,9 @@ class lef_test(openram_test): c.words_per_row=1 c.recompute_sizes() debug.info(1, "Testing LEF for sample 2 bit, 16 words SRAM with 1 bank") - s = factory.create(module_type="sram", sram_config=c, name="sram_2_16_1_{0}".format(OPTS.tech_name)) + # This doesn't have to use the factory since worst case + # it will just replaece the top-level module of the same name + s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name)) gdsfile = s.name + ".gds" leffile = s.name + ".lef" diff --git a/compiler/tests/25_verilog_sram_test.py b/compiler/tests/25_verilog_sram_test.py index 95329f48..18d626cd 100755 --- a/compiler/tests/25_verilog_sram_test.py +++ b/compiler/tests/25_verilog_sram_test.py @@ -9,7 +9,6 @@ import sys,os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS -from sram_factory import factory import debug class verilog_test(openram_test): @@ -17,6 +16,7 @@ class verilog_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + from sram import sram from sram_config import sram_config c = sram_config(word_size=2, num_words=16, @@ -24,7 +24,9 @@ class verilog_test(openram_test): c.words_per_row=1 c.recompute_sizes() debug.info(1, "Testing Verilog for sample 2 bit, 16 words SRAM with 1 bank") - s = factory.create(module_type="sram", sram_config=c, name="sram_2_16_1_{0}".format(OPTS.tech_name)) + # This doesn't have to use the factory since worst case + # it will just replaece the top-level module of the same name + s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name)) vfile = s.name + ".v" vname = OPTS.openram_temp + vfile From 0354e2dfb73bbc247fec7a0a4dd1b63ce03580b5 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 8 Mar 2019 10:47:41 -0800 Subject: [PATCH 020/324] Rename config_20 to config since it is used in all tests --- compiler/tests/01_library_drc_test.py | 2 +- compiler/tests/02_library_lvs_test.py | 2 +- compiler/tests/03_contact_test.py | 2 +- compiler/tests/03_path_test.py | 2 +- compiler/tests/03_ptx_1finger_nmos_test.py | 2 +- compiler/tests/03_ptx_1finger_pmos_test.py | 2 +- compiler/tests/03_ptx_3finger_nmos_test.py | 2 +- compiler/tests/03_ptx_3finger_pmos_test.py | 2 +- compiler/tests/03_ptx_4finger_nmos_test.py | 2 +- compiler/tests/03_ptx_4finger_pmos_test.py | 2 +- compiler/tests/03_wire_test.py | 2 +- compiler/tests/04_pand2_test.py | 2 +- compiler/tests/04_pbitcell_test.py | 2 +- compiler/tests/04_pbuf_test.py | 2 +- compiler/tests/04_pdriver_test.py | 2 +- compiler/tests/04_pinv_10x_test.py | 2 +- compiler/tests/04_pinv_1x_beta_test.py | 2 +- compiler/tests/04_pinv_1x_test.py | 2 +- compiler/tests/04_pinv_2x_test.py | 2 +- compiler/tests/04_pinvbuf_test.py | 2 +- compiler/tests/04_pnand2_test.py | 2 +- compiler/tests/04_pnand3_test.py | 2 +- compiler/tests/04_pnor2_test.py | 2 +- compiler/tests/04_precharge_test.py | 2 +- compiler/tests/04_replica_pbitcell_test.py | 2 +- compiler/tests/04_single_level_column_mux_test.py | 2 +- compiler/tests/05_bitcell_1rw_1r_array_test.py | 2 +- compiler/tests/05_bitcell_array_test.py | 2 +- compiler/tests/05_pbitcell_array_test.py | 2 +- compiler/tests/06_hierarchical_decoder_test.py | 2 +- compiler/tests/06_hierarchical_predecode2x4_test.py | 2 +- compiler/tests/06_hierarchical_predecode3x8_test.py | 2 +- compiler/tests/07_single_level_column_mux_array_test.py | 2 +- compiler/tests/08_precharge_array_test.py | 2 +- compiler/tests/08_wordline_driver_test.py | 2 +- compiler/tests/09_sense_amp_array_test.py | 2 +- compiler/tests/10_write_driver_array_test.py | 2 +- compiler/tests/11_dff_array_test.py | 2 +- compiler/tests/11_dff_buf_array_test.py | 2 +- compiler/tests/11_dff_buf_test.py | 2 +- compiler/tests/12_tri_gate_array_test.py | 2 +- compiler/tests/13_delay_chain_test.py | 2 +- compiler/tests/14_replica_bitline_multiport_test.py | 2 +- compiler/tests/14_replica_bitline_test.py | 2 +- compiler/tests/16_control_logic_test.py | 2 +- compiler/tests/19_bank_select_test.py | 2 +- compiler/tests/19_multi_bank_test.py | 2 +- compiler/tests/19_pmulti_bank_test.py | 2 +- compiler/tests/19_psingle_bank_test.py | 2 +- compiler/tests/19_single_bank_1rw_1r_test.py | 2 +- compiler/tests/19_single_bank_test.py | 2 +- compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py | 2 +- compiler/tests/20_psram_1bank_2mux_1w_1r_test.py | 2 +- compiler/tests/20_psram_1bank_2mux_test.py | 2 +- compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py | 2 +- compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py | 2 +- compiler/tests/20_sram_1bank_2mux_1w_1r_test.py | 2 +- compiler/tests/20_sram_1bank_2mux_test.py | 2 +- compiler/tests/20_sram_1bank_4mux_test.py | 2 +- compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py | 2 +- compiler/tests/20_sram_1bank_8mux_test.py | 2 +- compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py | 2 +- compiler/tests/20_sram_1bank_nomux_test.py | 2 +- compiler/tests/20_sram_2bank_test.py | 2 +- compiler/tests/21_hspice_delay_test.py | 2 +- compiler/tests/21_hspice_setuphold_test.py | 2 +- compiler/tests/21_ngspice_delay_test.py | 2 +- compiler/tests/21_ngspice_setuphold_test.py | 2 +- compiler/tests/22_psram_1bank_2mux_func_test.py | 2 +- compiler/tests/22_psram_1bank_4mux_func_test.py | 2 +- compiler/tests/22_psram_1bank_8mux_func_test.py | 2 +- compiler/tests/22_psram_1bank_nomux_func_test.py | 2 +- compiler/tests/22_sram_1bank_2mux_func_test.py | 2 +- compiler/tests/22_sram_1bank_4mux_func_test.py | 2 +- compiler/tests/22_sram_1bank_8mux_func_test.py | 2 +- compiler/tests/22_sram_1bank_nomux_func_test.py | 2 +- compiler/tests/22_sram_1rw_1r_1bank_nomux_func_test.py | 2 +- compiler/tests/23_lib_sram_model_corners_test.py | 2 +- compiler/tests/23_lib_sram_model_test.py | 2 +- compiler/tests/23_lib_sram_prune_test.py | 2 +- compiler/tests/23_lib_sram_test.py | 2 +- compiler/tests/24_lef_sram_test.py | 2 +- compiler/tests/25_verilog_sram_test.py | 2 +- compiler/tests/26_pex_test.py | 2 +- compiler/tests/27_worst_case_delay_test.py | 2 +- compiler/tests/28_delay_model_test.py | 2 +- compiler/tests/30_openram_test.py | 4 ++-- .../tests/{config_20_freepdk45.py => config_freepdk45.py} | 0 .../tests/{config_20_scn3me_subm.py => config_scn3me_subm.py} | 0 .../tests/{config_20_scn4m_subm.py => config_scn4m_subm.py} | 0 90 files changed, 88 insertions(+), 88 deletions(-) rename compiler/tests/{config_20_freepdk45.py => config_freepdk45.py} (100%) rename compiler/tests/{config_20_scn3me_subm.py => config_scn3me_subm.py} (100%) rename compiler/tests/{config_20_scn4m_subm.py => config_scn4m_subm.py} (100%) diff --git a/compiler/tests/01_library_drc_test.py b/compiler/tests/01_library_drc_test.py index 046e6378..1f4aa853 100755 --- a/compiler/tests/01_library_drc_test.py +++ b/compiler/tests/01_library_drc_test.py @@ -12,7 +12,7 @@ import debug class library_drc_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) import verify (gds_dir, gds_files) = setup_files() diff --git a/compiler/tests/02_library_lvs_test.py b/compiler/tests/02_library_lvs_test.py index 4ec40dc7..f312c298 100755 --- a/compiler/tests/02_library_lvs_test.py +++ b/compiler/tests/02_library_lvs_test.py @@ -12,7 +12,7 @@ import debug class library_lvs_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) import verify (gds_dir, sp_dir, allnames) = setup_files() diff --git a/compiler/tests/03_contact_test.py b/compiler/tests/03_contact_test.py index 33aa45ae..29d7ca0e 100755 --- a/compiler/tests/03_contact_test.py +++ b/compiler/tests/03_contact_test.py @@ -12,7 +12,7 @@ import debug class contact_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) import contact diff --git a/compiler/tests/03_path_test.py b/compiler/tests/03_path_test.py index f0fc2299..78abc9e3 100755 --- a/compiler/tests/03_path_test.py +++ b/compiler/tests/03_path_test.py @@ -12,7 +12,7 @@ import debug class path_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) import wire_path import tech import design diff --git a/compiler/tests/03_ptx_1finger_nmos_test.py b/compiler/tests/03_ptx_1finger_nmos_test.py index 32372e25..a5ea028c 100755 --- a/compiler/tests/03_ptx_1finger_nmos_test.py +++ b/compiler/tests/03_ptx_1finger_nmos_test.py @@ -13,7 +13,7 @@ import debug class ptx_1finger_nmos_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) import tech debug.info(2, "Checking min size NMOS with 1 finger") diff --git a/compiler/tests/03_ptx_1finger_pmos_test.py b/compiler/tests/03_ptx_1finger_pmos_test.py index 2ca3181b..f1a4de56 100755 --- a/compiler/tests/03_ptx_1finger_pmos_test.py +++ b/compiler/tests/03_ptx_1finger_pmos_test.py @@ -13,7 +13,7 @@ import debug class ptx_1finger_pmos_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) import tech debug.info(2, "Checking min size PMOS with 1 finger") diff --git a/compiler/tests/03_ptx_3finger_nmos_test.py b/compiler/tests/03_ptx_3finger_nmos_test.py index 4e5e2eaf..535560e1 100755 --- a/compiler/tests/03_ptx_3finger_nmos_test.py +++ b/compiler/tests/03_ptx_3finger_nmos_test.py @@ -13,7 +13,7 @@ import debug class ptx_3finger_nmos_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) import tech debug.info(2, "Checking three fingers NMOS") diff --git a/compiler/tests/03_ptx_3finger_pmos_test.py b/compiler/tests/03_ptx_3finger_pmos_test.py index 53a4aeca..fd2abc0b 100755 --- a/compiler/tests/03_ptx_3finger_pmos_test.py +++ b/compiler/tests/03_ptx_3finger_pmos_test.py @@ -13,7 +13,7 @@ import debug class ptx_3finger_pmos_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) import tech debug.info(2, "Checking three fingers PMOS") diff --git a/compiler/tests/03_ptx_4finger_nmos_test.py b/compiler/tests/03_ptx_4finger_nmos_test.py index 10f7deda..56102419 100755 --- a/compiler/tests/03_ptx_4finger_nmos_test.py +++ b/compiler/tests/03_ptx_4finger_nmos_test.py @@ -13,7 +13,7 @@ import debug class ptx_4finger_nmos_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) import tech debug.info(2, "Checking three fingers NMOS") diff --git a/compiler/tests/03_ptx_4finger_pmos_test.py b/compiler/tests/03_ptx_4finger_pmos_test.py index e8dc2bc0..4d7181b1 100755 --- a/compiler/tests/03_ptx_4finger_pmos_test.py +++ b/compiler/tests/03_ptx_4finger_pmos_test.py @@ -13,7 +13,7 @@ import debug class ptx_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) import tech debug.info(2, "Checking three fingers PMOS") diff --git a/compiler/tests/03_wire_test.py b/compiler/tests/03_wire_test.py index 1b18e14b..1cce5f08 100755 --- a/compiler/tests/03_wire_test.py +++ b/compiler/tests/03_wire_test.py @@ -12,7 +12,7 @@ import debug class wire_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) import wire import tech import design diff --git a/compiler/tests/04_pand2_test.py b/compiler/tests/04_pand2_test.py index ff722500..8dd900fe 100755 --- a/compiler/tests/04_pand2_test.py +++ b/compiler/tests/04_pand2_test.py @@ -15,7 +15,7 @@ import debug class pand2_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) global verify import verify diff --git a/compiler/tests/04_pbitcell_test.py b/compiler/tests/04_pbitcell_test.py index eca1fbda..b1edb5d7 100755 --- a/compiler/tests/04_pbitcell_test.py +++ b/compiler/tests/04_pbitcell_test.py @@ -16,7 +16,7 @@ from sram_factory import factory class pbitcell_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.num_rw_ports=1 OPTS.num_w_ports=1 diff --git a/compiler/tests/04_pbuf_test.py b/compiler/tests/04_pbuf_test.py index 5dff97d7..7ee53781 100755 --- a/compiler/tests/04_pbuf_test.py +++ b/compiler/tests/04_pbuf_test.py @@ -15,7 +15,7 @@ import debug class pbuf_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Testing inverter/buffer 4x 8x") a = factory.create(module_type="pbuf", size=8) diff --git a/compiler/tests/04_pdriver_test.py b/compiler/tests/04_pdriver_test.py index 0cb50a97..65cc3ee3 100755 --- a/compiler/tests/04_pdriver_test.py +++ b/compiler/tests/04_pdriver_test.py @@ -15,7 +15,7 @@ import debug class pdriver_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Testing inverter/buffer 4x 8x") # a tests the error message for specifying conflicting conditions diff --git a/compiler/tests/04_pinv_10x_test.py b/compiler/tests/04_pinv_10x_test.py index fb68dc01..d24b3ef4 100755 --- a/compiler/tests/04_pinv_10x_test.py +++ b/compiler/tests/04_pinv_10x_test.py @@ -15,7 +15,7 @@ import debug class pinv_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Checking 8x inverter") tx = factory.create(module_type="pinv", size=8) diff --git a/compiler/tests/04_pinv_1x_beta_test.py b/compiler/tests/04_pinv_1x_beta_test.py index aaa9f2de..0786ed80 100755 --- a/compiler/tests/04_pinv_1x_beta_test.py +++ b/compiler/tests/04_pinv_1x_beta_test.py @@ -15,7 +15,7 @@ import debug class pinv_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Checking 1x beta=3 size inverter") tx = factory.create(module_type="pinv", size=1, beta=3) diff --git a/compiler/tests/04_pinv_1x_test.py b/compiler/tests/04_pinv_1x_test.py index b0e0d6f3..a83fc6ee 100755 --- a/compiler/tests/04_pinv_1x_test.py +++ b/compiler/tests/04_pinv_1x_test.py @@ -14,7 +14,7 @@ import debug class pinv_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Checking 1x size inverter") tx = factory.create(module_type="pinv", size=1) diff --git a/compiler/tests/04_pinv_2x_test.py b/compiler/tests/04_pinv_2x_test.py index f34f08f7..517c5b0a 100755 --- a/compiler/tests/04_pinv_2x_test.py +++ b/compiler/tests/04_pinv_2x_test.py @@ -15,7 +15,7 @@ import debug class pinv_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Checking 2x size inverter") tx = factory.create(module_type="pinv", size=2) diff --git a/compiler/tests/04_pinvbuf_test.py b/compiler/tests/04_pinvbuf_test.py index 8bef3c93..2febfab3 100755 --- a/compiler/tests/04_pinvbuf_test.py +++ b/compiler/tests/04_pinvbuf_test.py @@ -15,7 +15,7 @@ import debug class pinvbuf_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Testing inverter/buffer 4x 8x") a = factory.create(module_type="pinvbuf", size=8) diff --git a/compiler/tests/04_pnand2_test.py b/compiler/tests/04_pnand2_test.py index ffdc542c..b8e25d52 100755 --- a/compiler/tests/04_pnand2_test.py +++ b/compiler/tests/04_pnand2_test.py @@ -17,7 +17,7 @@ import debug class pnand2_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Checking 2-input nand gate") tx = factory.create(module_type="pnand2", size=1) diff --git a/compiler/tests/04_pnand3_test.py b/compiler/tests/04_pnand3_test.py index 4ff2478b..9d0d8241 100755 --- a/compiler/tests/04_pnand3_test.py +++ b/compiler/tests/04_pnand3_test.py @@ -17,7 +17,7 @@ import debug class pnand3_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Checking 3-input nand gate") tx = factory.create(module_type="pnand3", size=1) diff --git a/compiler/tests/04_pnor2_test.py b/compiler/tests/04_pnor2_test.py index ddfec78d..bb458b63 100755 --- a/compiler/tests/04_pnor2_test.py +++ b/compiler/tests/04_pnor2_test.py @@ -17,7 +17,7 @@ import debug class pnor2_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Checking 2-input nor gate") tx = factory.create(module_type="pnor2", size=1) diff --git a/compiler/tests/04_precharge_test.py b/compiler/tests/04_precharge_test.py index cd3e79f3..ccf05090 100755 --- a/compiler/tests/04_precharge_test.py +++ b/compiler/tests/04_precharge_test.py @@ -15,7 +15,7 @@ import debug class precharge_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) # check precharge in single port debug.info(2, "Checking precharge for handmade bitcell") diff --git a/compiler/tests/04_replica_pbitcell_test.py b/compiler/tests/04_replica_pbitcell_test.py index 1f00ccca..7ce1b9cf 100755 --- a/compiler/tests/04_replica_pbitcell_test.py +++ b/compiler/tests/04_replica_pbitcell_test.py @@ -15,7 +15,7 @@ import debug class replica_pbitcell_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) import replica_pbitcell OPTS.bitcell = "pbitcell" diff --git a/compiler/tests/04_single_level_column_mux_test.py b/compiler/tests/04_single_level_column_mux_test.py index 98a696d6..58d79ca4 100755 --- a/compiler/tests/04_single_level_column_mux_test.py +++ b/compiler/tests/04_single_level_column_mux_test.py @@ -17,7 +17,7 @@ import debug class single_level_column_mux_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) # check single level column mux in single port debug.info(2, "Checking column mux") diff --git a/compiler/tests/05_bitcell_1rw_1r_array_test.py b/compiler/tests/05_bitcell_1rw_1r_array_test.py index 9e070038..9ea0cc32 100755 --- a/compiler/tests/05_bitcell_1rw_1r_array_test.py +++ b/compiler/tests/05_bitcell_1rw_1r_array_test.py @@ -17,7 +17,7 @@ import debug class bitcell_1rw_1r_array_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Testing 4x4 array for cell_1rw_1r") OPTS.bitcell = "bitcell_1rw_1r" diff --git a/compiler/tests/05_bitcell_array_test.py b/compiler/tests/05_bitcell_array_test.py index a1ee5b1a..82eaf256 100755 --- a/compiler/tests/05_bitcell_array_test.py +++ b/compiler/tests/05_bitcell_array_test.py @@ -17,7 +17,7 @@ import debug class array_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Testing 4x4 array for 6t_cell") a = factory.create(module_type="bitcell_array", cols=4, rows=4) diff --git a/compiler/tests/05_pbitcell_array_test.py b/compiler/tests/05_pbitcell_array_test.py index a6216a10..15040649 100755 --- a/compiler/tests/05_pbitcell_array_test.py +++ b/compiler/tests/05_pbitcell_array_test.py @@ -16,7 +16,7 @@ import debug class pbitcell_array_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Testing 4x4 array for multiport bitcell, with read ports at the edge of the bit cell") OPTS.bitcell = "pbitcell" diff --git a/compiler/tests/06_hierarchical_decoder_test.py b/compiler/tests/06_hierarchical_decoder_test.py index d77e7572..f2277335 100755 --- a/compiler/tests/06_hierarchical_decoder_test.py +++ b/compiler/tests/06_hierarchical_decoder_test.py @@ -15,7 +15,7 @@ import debug class hierarchical_decoder_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) # Doesn't require hierarchical decoder # debug.info(1, "Testing 4 row sample for hierarchical_decoder") # a = hierarchical_decoder.hierarchical_decoder(name="hd1, rows=4) diff --git a/compiler/tests/06_hierarchical_predecode2x4_test.py b/compiler/tests/06_hierarchical_predecode2x4_test.py index 8b82b721..dce5069f 100755 --- a/compiler/tests/06_hierarchical_predecode2x4_test.py +++ b/compiler/tests/06_hierarchical_predecode2x4_test.py @@ -15,7 +15,7 @@ import debug class hierarchical_predecode2x4_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) # checking hierarchical precode 2x4 for single port debug.info(1, "Testing sample for hierarchy_predecode2x4") diff --git a/compiler/tests/06_hierarchical_predecode3x8_test.py b/compiler/tests/06_hierarchical_predecode3x8_test.py index f8d22e69..1710b459 100755 --- a/compiler/tests/06_hierarchical_predecode3x8_test.py +++ b/compiler/tests/06_hierarchical_predecode3x8_test.py @@ -15,7 +15,7 @@ import debug class hierarchical_predecode3x8_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) # checking hierarchical precode 3x8 for single port debug.info(1, "Testing sample for hierarchy_predecode3x8") diff --git a/compiler/tests/07_single_level_column_mux_array_test.py b/compiler/tests/07_single_level_column_mux_array_test.py index 9ccf56fc..1ff0d65b 100755 --- a/compiler/tests/07_single_level_column_mux_array_test.py +++ b/compiler/tests/07_single_level_column_mux_array_test.py @@ -14,7 +14,7 @@ import debug class single_level_column_mux_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) import single_level_column_mux_array # check single level column mux array in single port diff --git a/compiler/tests/08_precharge_array_test.py b/compiler/tests/08_precharge_array_test.py index c5d72190..eb6d75dd 100755 --- a/compiler/tests/08_precharge_array_test.py +++ b/compiler/tests/08_precharge_array_test.py @@ -15,7 +15,7 @@ import debug class precharge_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) # check precharge array in single port debug.info(2, "Checking 3 column precharge") diff --git a/compiler/tests/08_wordline_driver_test.py b/compiler/tests/08_wordline_driver_test.py index 8f8c51ac..12edf32e 100755 --- a/compiler/tests/08_wordline_driver_test.py +++ b/compiler/tests/08_wordline_driver_test.py @@ -17,7 +17,7 @@ import debug class wordline_driver_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) # check wordline driver for single port debug.info(2, "Checking driver") diff --git a/compiler/tests/09_sense_amp_array_test.py b/compiler/tests/09_sense_amp_array_test.py index 57654353..903e5512 100755 --- a/compiler/tests/09_sense_amp_array_test.py +++ b/compiler/tests/09_sense_amp_array_test.py @@ -15,7 +15,7 @@ import debug class sense_amp_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) # check sense amp array for single port debug.info(2, "Testing sense_amp_array for word_size=4, words_per_row=2") diff --git a/compiler/tests/10_write_driver_array_test.py b/compiler/tests/10_write_driver_array_test.py index 53338a32..f3ed3ee6 100755 --- a/compiler/tests/10_write_driver_array_test.py +++ b/compiler/tests/10_write_driver_array_test.py @@ -15,7 +15,7 @@ import debug class write_driver_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) # check write driver array for single port debug.info(2, "Testing write_driver_array for columns=8, word_size=8") diff --git a/compiler/tests/11_dff_array_test.py b/compiler/tests/11_dff_array_test.py index d1889388..5e3ce761 100755 --- a/compiler/tests/11_dff_array_test.py +++ b/compiler/tests/11_dff_array_test.py @@ -15,7 +15,7 @@ import debug class dff_array_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Testing dff_array for 3x3") a = factory.create(module_type="dff_array", rows=3, columns=3) diff --git a/compiler/tests/11_dff_buf_array_test.py b/compiler/tests/11_dff_buf_array_test.py index 3d866ec8..86d394e6 100755 --- a/compiler/tests/11_dff_buf_array_test.py +++ b/compiler/tests/11_dff_buf_array_test.py @@ -15,7 +15,7 @@ import debug class dff_buf_array_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Testing dff_buf_array for 3x3") a = factory.create(module_type="dff_buf_array", rows=3, columns=3) diff --git a/compiler/tests/11_dff_buf_test.py b/compiler/tests/11_dff_buf_test.py index e25399a6..30b56957 100755 --- a/compiler/tests/11_dff_buf_test.py +++ b/compiler/tests/11_dff_buf_test.py @@ -15,7 +15,7 @@ import debug class dff_buf_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Testing dff_buf 4x 8x") a = factory.create(module_type="dff_buf", inv1_size=4, inv2_size=8) diff --git a/compiler/tests/12_tri_gate_array_test.py b/compiler/tests/12_tri_gate_array_test.py index c52aa641..04ef1369 100755 --- a/compiler/tests/12_tri_gate_array_test.py +++ b/compiler/tests/12_tri_gate_array_test.py @@ -15,7 +15,7 @@ import debug class tri_gate_array_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(1, "Testing tri_gate_array for columns=8, word_size=8") a = factory.create(module_type="tri_gate_array", columns=8, word_size=8) diff --git a/compiler/tests/13_delay_chain_test.py b/compiler/tests/13_delay_chain_test.py index b4dae777..1dbfbc67 100755 --- a/compiler/tests/13_delay_chain_test.py +++ b/compiler/tests/13_delay_chain_test.py @@ -15,7 +15,7 @@ import debug class delay_chain_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(2, "Testing delay_chain") a = factory.create(module_type="delay_chain", fanout_list=[4, 4, 4, 4]) diff --git a/compiler/tests/14_replica_bitline_multiport_test.py b/compiler/tests/14_replica_bitline_multiport_test.py index aee4bcfe..3a83d397 100755 --- a/compiler/tests/14_replica_bitline_multiport_test.py +++ b/compiler/tests/14_replica_bitline_multiport_test.py @@ -15,7 +15,7 @@ import debug class replica_bitline_multiport_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) stages=4 fanout=4 diff --git a/compiler/tests/14_replica_bitline_test.py b/compiler/tests/14_replica_bitline_test.py index cd314126..8c1c306c 100755 --- a/compiler/tests/14_replica_bitline_test.py +++ b/compiler/tests/14_replica_bitline_test.py @@ -15,7 +15,7 @@ import debug class replica_bitline_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) # check replica bitline in single port stages=4 diff --git a/compiler/tests/16_control_logic_test.py b/compiler/tests/16_control_logic_test.py index 1ba54cea..2b9a8be2 100755 --- a/compiler/tests/16_control_logic_test.py +++ b/compiler/tests/16_control_logic_test.py @@ -15,7 +15,7 @@ import debug class control_logic_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) import control_logic import tech diff --git a/compiler/tests/19_bank_select_test.py b/compiler/tests/19_bank_select_test.py index 3f511464..9dcb6039 100755 --- a/compiler/tests/19_bank_select_test.py +++ b/compiler/tests/19_bank_select_test.py @@ -15,7 +15,7 @@ import debug class bank_select_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) debug.info(1, "No column mux, rw control logic") a = factory.create(module_type="bank_select", port="rw") diff --git a/compiler/tests/19_multi_bank_test.py b/compiler/tests/19_multi_bank_test.py index af2ef7b0..57a089aa 100755 --- a/compiler/tests/19_multi_bank_test.py +++ b/compiler/tests/19_multi_bank_test.py @@ -16,7 +16,7 @@ import debug class multi_bank_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config c = sram_config(word_size=4, diff --git a/compiler/tests/19_pmulti_bank_test.py b/compiler/tests/19_pmulti_bank_test.py index 6b842160..f201c778 100755 --- a/compiler/tests/19_pmulti_bank_test.py +++ b/compiler/tests/19_pmulti_bank_test.py @@ -16,7 +16,7 @@ import debug class multi_bank_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config OPTS.bitcell = "pbitcell" diff --git a/compiler/tests/19_psingle_bank_test.py b/compiler/tests/19_psingle_bank_test.py index 524f3025..c36df8ef 100755 --- a/compiler/tests/19_psingle_bank_test.py +++ b/compiler/tests/19_psingle_bank_test.py @@ -16,7 +16,7 @@ import debug class psingle_bank_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from bank import bank from sram_config import sram_config OPTS.bitcell = "pbitcell" diff --git a/compiler/tests/19_single_bank_1rw_1r_test.py b/compiler/tests/19_single_bank_1rw_1r_test.py index 41255b7b..96fc2512 100755 --- a/compiler/tests/19_single_bank_1rw_1r_test.py +++ b/compiler/tests/19_single_bank_1rw_1r_test.py @@ -15,7 +15,7 @@ import debug class single_bank_1rw_1r_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.bitcell = "bitcell_1rw_1r" OPTS.num_rw_ports = 1 diff --git a/compiler/tests/19_single_bank_test.py b/compiler/tests/19_single_bank_test.py index 1e4c59de..368a7cad 100755 --- a/compiler/tests/19_single_bank_test.py +++ b/compiler/tests/19_single_bank_test.py @@ -15,7 +15,7 @@ import debug class single_bank_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config c = sram_config(word_size=4, diff --git a/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py b/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py index 878cb252..22b878b9 100755 --- a/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py +++ b/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py @@ -16,7 +16,7 @@ import debug class psram_1bank_2mux_1rw_1w_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config OPTS.bitcell = "pbitcell" OPTS.replica_bitcell="replica_pbitcell" diff --git a/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py b/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py index 255faa9b..61d636d9 100755 --- a/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py +++ b/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py @@ -16,7 +16,7 @@ import debug class psram_1bank_2mux_1w_1r_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config OPTS.bitcell = "pbitcell" OPTS.replica_bitcell="replica_pbitcell" diff --git a/compiler/tests/20_psram_1bank_2mux_test.py b/compiler/tests/20_psram_1bank_2mux_test.py index bc8b90d8..7c38da90 100755 --- a/compiler/tests/20_psram_1bank_2mux_test.py +++ b/compiler/tests/20_psram_1bank_2mux_test.py @@ -16,7 +16,7 @@ import debug class psram_1bank_2mux_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config OPTS.bitcell = "pbitcell" OPTS.replica_bitcell="replica_pbitcell" diff --git a/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py b/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py index 3a0a9c8e..f7cb57fc 100755 --- a/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py +++ b/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py @@ -15,7 +15,7 @@ import debug class psram_1bank_4mux_1rw_1r_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config OPTS.bitcell = "pbitcell" OPTS.replica_bitcell="replica_pbitcell" diff --git a/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py index 9cd7fe76..b13c8020 100755 --- a/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py @@ -15,7 +15,7 @@ import debug class sram_1bank_2mux_1rw_1r_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config OPTS.bitcell = "bitcell_1rw_1r" diff --git a/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py index 36b23800..a0d75054 100755 --- a/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py @@ -16,7 +16,7 @@ import debug class psram_1bank_2mux_1w_1r_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config OPTS.bitcell = "bitcell_1w_1r" OPTS.replica_bitcell="replica_bitcell_1w_1r" diff --git a/compiler/tests/20_sram_1bank_2mux_test.py b/compiler/tests/20_sram_1bank_2mux_test.py index d9118690..7f305c0e 100755 --- a/compiler/tests/20_sram_1bank_2mux_test.py +++ b/compiler/tests/20_sram_1bank_2mux_test.py @@ -16,7 +16,7 @@ import debug class sram_1bank_2mux_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config c = sram_config(word_size=4, num_words=32, diff --git a/compiler/tests/20_sram_1bank_4mux_test.py b/compiler/tests/20_sram_1bank_4mux_test.py index 59a7cdcc..96e8cfda 100755 --- a/compiler/tests/20_sram_1bank_4mux_test.py +++ b/compiler/tests/20_sram_1bank_4mux_test.py @@ -16,7 +16,7 @@ import debug class sram_1bank_4mux_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config c = sram_config(word_size=4, num_words=64, diff --git a/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py index fd62f39a..b2cd395f 100755 --- a/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py @@ -15,7 +15,7 @@ import debug class sram_1bank_8mux_1rw_1r_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config OPTS.bitcell = "bitcell_1rw_1r" diff --git a/compiler/tests/20_sram_1bank_8mux_test.py b/compiler/tests/20_sram_1bank_8mux_test.py index df2b3d8c..f8b43835 100755 --- a/compiler/tests/20_sram_1bank_8mux_test.py +++ b/compiler/tests/20_sram_1bank_8mux_test.py @@ -16,7 +16,7 @@ import debug class sram_1bank_8mux_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config c = sram_config(word_size=2, num_words=128, diff --git a/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py index 00191aec..b33ef2c4 100755 --- a/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py @@ -15,7 +15,7 @@ import debug class sram_1bank_nomux_1rw_1r_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config OPTS.bitcell = "bitcell_1rw_1r" diff --git a/compiler/tests/20_sram_1bank_nomux_test.py b/compiler/tests/20_sram_1bank_nomux_test.py index 6369398b..004c7604 100755 --- a/compiler/tests/20_sram_1bank_nomux_test.py +++ b/compiler/tests/20_sram_1bank_nomux_test.py @@ -16,7 +16,7 @@ import debug class sram_1bank_nomux_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config c = sram_config(word_size=4, num_words=16, diff --git a/compiler/tests/20_sram_2bank_test.py b/compiler/tests/20_sram_2bank_test.py index db4782a8..b63691ec 100755 --- a/compiler/tests/20_sram_2bank_test.py +++ b/compiler/tests/20_sram_2bank_test.py @@ -16,7 +16,7 @@ import debug class sram_2bank_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram_config import sram_config c = sram_config(word_size=16, num_words=32, diff --git a/compiler/tests/21_hspice_delay_test.py b/compiler/tests/21_hspice_delay_test.py index 09d75e24..abe65b02 100755 --- a/compiler/tests/21_hspice_delay_test.py +++ b/compiler/tests/21_hspice_delay_test.py @@ -15,7 +15,7 @@ import debug class timing_sram_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.spice_name="hspice" OPTS.analytical_delay = False OPTS.netlist_only = True diff --git a/compiler/tests/21_hspice_setuphold_test.py b/compiler/tests/21_hspice_setuphold_test.py index 2488317b..11020365 100755 --- a/compiler/tests/21_hspice_setuphold_test.py +++ b/compiler/tests/21_hspice_setuphold_test.py @@ -15,7 +15,7 @@ import debug class timing_setup_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.spice_name="hspice" OPTS.analytical_delay = False OPTS.netlist_only = True diff --git a/compiler/tests/21_ngspice_delay_test.py b/compiler/tests/21_ngspice_delay_test.py index 2a0a4cb1..c0b2c8fe 100755 --- a/compiler/tests/21_ngspice_delay_test.py +++ b/compiler/tests/21_ngspice_delay_test.py @@ -15,7 +15,7 @@ import debug class timing_sram_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.spice_name="ngspice" OPTS.analytical_delay = False OPTS.netlist_only = True diff --git a/compiler/tests/21_ngspice_setuphold_test.py b/compiler/tests/21_ngspice_setuphold_test.py index 0bf004b9..774e3e75 100755 --- a/compiler/tests/21_ngspice_setuphold_test.py +++ b/compiler/tests/21_ngspice_setuphold_test.py @@ -15,7 +15,7 @@ import debug class timing_setup_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.spice_name="ngspice" OPTS.analytical_delay = False OPTS.netlist_only = True diff --git a/compiler/tests/22_psram_1bank_2mux_func_test.py b/compiler/tests/22_psram_1bank_2mux_func_test.py index 11db4842..8606fd5f 100755 --- a/compiler/tests/22_psram_1bank_2mux_func_test.py +++ b/compiler/tests/22_psram_1bank_2mux_func_test.py @@ -16,7 +16,7 @@ import debug class psram_1bank_2mux_1rw_1r_1w_func_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.analytical_delay = False OPTS.netlist_only = True OPTS.trim_netlist = False diff --git a/compiler/tests/22_psram_1bank_4mux_func_test.py b/compiler/tests/22_psram_1bank_4mux_func_test.py index e8a436bd..45c4676d 100755 --- a/compiler/tests/22_psram_1bank_4mux_func_test.py +++ b/compiler/tests/22_psram_1bank_4mux_func_test.py @@ -16,7 +16,7 @@ import debug class psram_1bank_4mux_func_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.analytical_delay = False OPTS.netlist_only = True OPTS.trim_netlist = False diff --git a/compiler/tests/22_psram_1bank_8mux_func_test.py b/compiler/tests/22_psram_1bank_8mux_func_test.py index 34e974a5..7bc75e2e 100755 --- a/compiler/tests/22_psram_1bank_8mux_func_test.py +++ b/compiler/tests/22_psram_1bank_8mux_func_test.py @@ -16,7 +16,7 @@ import debug class psram_1bank_8mux_func_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.analytical_delay = False OPTS.netlist_only = True OPTS.trim_netlist = False diff --git a/compiler/tests/22_psram_1bank_nomux_func_test.py b/compiler/tests/22_psram_1bank_nomux_func_test.py index f9e80915..1673c4f7 100755 --- a/compiler/tests/22_psram_1bank_nomux_func_test.py +++ b/compiler/tests/22_psram_1bank_nomux_func_test.py @@ -16,7 +16,7 @@ import debug class psram_1bank_nomux_func_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.analytical_delay = False OPTS.netlist_only = True OPTS.trim_netlist = False diff --git a/compiler/tests/22_sram_1bank_2mux_func_test.py b/compiler/tests/22_sram_1bank_2mux_func_test.py index 15dfc902..60e8929d 100755 --- a/compiler/tests/22_sram_1bank_2mux_func_test.py +++ b/compiler/tests/22_sram_1bank_2mux_func_test.py @@ -16,7 +16,7 @@ import debug class sram_1bank_2mux_func_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.analytical_delay = False OPTS.netlist_only = True OPTS.trim_netlist = False diff --git a/compiler/tests/22_sram_1bank_4mux_func_test.py b/compiler/tests/22_sram_1bank_4mux_func_test.py index 1ea8b6b9..b768a7b9 100755 --- a/compiler/tests/22_sram_1bank_4mux_func_test.py +++ b/compiler/tests/22_sram_1bank_4mux_func_test.py @@ -16,7 +16,7 @@ import debug class sram_1bank_4mux_func_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.analytical_delay = False OPTS.netlist_only = True OPTS.trim_netlist = False diff --git a/compiler/tests/22_sram_1bank_8mux_func_test.py b/compiler/tests/22_sram_1bank_8mux_func_test.py index 95536c17..45aa2bff 100755 --- a/compiler/tests/22_sram_1bank_8mux_func_test.py +++ b/compiler/tests/22_sram_1bank_8mux_func_test.py @@ -16,7 +16,7 @@ import debug class sram_1bank_8mux_func_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.analytical_delay = False OPTS.netlist_only = True OPTS.trim_netlist = False diff --git a/compiler/tests/22_sram_1bank_nomux_func_test.py b/compiler/tests/22_sram_1bank_nomux_func_test.py index d3712bee..baf10e9e 100755 --- a/compiler/tests/22_sram_1bank_nomux_func_test.py +++ b/compiler/tests/22_sram_1bank_nomux_func_test.py @@ -16,7 +16,7 @@ import debug class sram_1bank_nomux_func_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.analytical_delay = False OPTS.netlist_only = True diff --git a/compiler/tests/22_sram_1rw_1r_1bank_nomux_func_test.py b/compiler/tests/22_sram_1rw_1r_1bank_nomux_func_test.py index 4bb17eb6..df0ad3a6 100755 --- a/compiler/tests/22_sram_1rw_1r_1bank_nomux_func_test.py +++ b/compiler/tests/22_sram_1rw_1r_1bank_nomux_func_test.py @@ -16,7 +16,7 @@ import debug class psram_1bank_nomux_func_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.analytical_delay = False OPTS.netlist_only = True OPTS.trim_netlist = False diff --git a/compiler/tests/23_lib_sram_model_corners_test.py b/compiler/tests/23_lib_sram_model_corners_test.py index 5c787245..6cac68b1 100755 --- a/compiler/tests/23_lib_sram_model_corners_test.py +++ b/compiler/tests/23_lib_sram_model_corners_test.py @@ -14,7 +14,7 @@ import debug class model_corners_lib_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from characterizer import lib from sram import sram diff --git a/compiler/tests/23_lib_sram_model_test.py b/compiler/tests/23_lib_sram_model_test.py index 0b4a17b0..0b4e1efb 100755 --- a/compiler/tests/23_lib_sram_model_test.py +++ b/compiler/tests/23_lib_sram_model_test.py @@ -14,7 +14,7 @@ import debug class lib_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from characterizer import lib from sram import sram diff --git a/compiler/tests/23_lib_sram_prune_test.py b/compiler/tests/23_lib_sram_prune_test.py index f8666d6f..266d3ba3 100755 --- a/compiler/tests/23_lib_sram_prune_test.py +++ b/compiler/tests/23_lib_sram_prune_test.py @@ -14,7 +14,7 @@ import debug class lib_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.analytical_delay = False OPTS.trim_netlist = True diff --git a/compiler/tests/23_lib_sram_test.py b/compiler/tests/23_lib_sram_test.py index 6cddd840..a81b1479 100755 --- a/compiler/tests/23_lib_sram_test.py +++ b/compiler/tests/23_lib_sram_test.py @@ -14,7 +14,7 @@ import debug class lib_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.analytical_delay = False OPTS.trim_netlist = False diff --git a/compiler/tests/24_lef_sram_test.py b/compiler/tests/24_lef_sram_test.py index 5417a40f..bd1fdc6a 100755 --- a/compiler/tests/24_lef_sram_test.py +++ b/compiler/tests/24_lef_sram_test.py @@ -15,7 +15,7 @@ import debug class lef_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram import sram from sram_config import sram_config diff --git a/compiler/tests/25_verilog_sram_test.py b/compiler/tests/25_verilog_sram_test.py index 18d626cd..63810357 100755 --- a/compiler/tests/25_verilog_sram_test.py +++ b/compiler/tests/25_verilog_sram_test.py @@ -14,7 +14,7 @@ import debug class verilog_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) from sram import sram from sram_config import sram_config diff --git a/compiler/tests/26_pex_test.py b/compiler/tests/26_pex_test.py index df4ff0f7..cd47a21c 100755 --- a/compiler/tests/26_pex_test.py +++ b/compiler/tests/26_pex_test.py @@ -16,7 +16,7 @@ import debug class sram_func_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.use_pex = True diff --git a/compiler/tests/27_worst_case_delay_test.py b/compiler/tests/27_worst_case_delay_test.py index a023a614..0b208f62 100755 --- a/compiler/tests/27_worst_case_delay_test.py +++ b/compiler/tests/27_worst_case_delay_test.py @@ -17,7 +17,7 @@ class worst_case_timing_sram_test(openram_test): def runTest(self): OPTS.tech_name = "freepdk45" - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.spice_name="hspice" OPTS.analytical_delay = False OPTS.netlist_only = True diff --git a/compiler/tests/28_delay_model_test.py b/compiler/tests/28_delay_model_test.py index a999cd20..95db008b 100755 --- a/compiler/tests/28_delay_model_test.py +++ b/compiler/tests/28_delay_model_test.py @@ -15,7 +15,7 @@ import debug class delay_model_test(openram_test): def runTest(self): - globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + globals.init_openram("config_{0}".format(OPTS.tech_name)) OPTS.spice_name="hspice" OPTS.analytical_delay = False OPTS.netlist_only = True diff --git a/compiler/tests/30_openram_test.py b/compiler/tests/30_openram_test.py index 531302cf..2681b351 100755 --- a/compiler/tests/30_openram_test.py +++ b/compiler/tests/30_openram_test.py @@ -19,7 +19,7 @@ class openram_test(openram_test): def runTest(self): OPENRAM_HOME = os.path.abspath(os.environ.get("OPENRAM_HOME")) - globals.init_openram("{0}/tests/config_20_{1}".format(OPENRAM_HOME,OPTS.tech_name)) + globals.init_openram("{0}/tests/config_{1}".format(OPENRAM_HOME,OPTS.tech_name)) debug.info(1, "Testing top-level openram.py with 2-bit, 16 word SRAM.") out_file = "testsram" @@ -49,7 +49,7 @@ class openram_test(openram_test): exe_name = "{0}/openram.py ".format(OPENRAM_HOME) else: exe_name = "coverage run -p {0}/openram.py ".format(OPENRAM_HOME) - config_name = "{0}config_20_{1}.py".format(OPENRAM_HOME + "/tests/",OPTS.tech_name) + config_name = "{0}config_{1}.py".format(OPENRAM_HOME + "/tests/",OPTS.tech_name) cmd = "{0} -n -o {1} -p {2} {3} {4} 2>&1 > {5}/output.log".format(exe_name, out_file, out_path, diff --git a/compiler/tests/config_20_freepdk45.py b/compiler/tests/config_freepdk45.py similarity index 100% rename from compiler/tests/config_20_freepdk45.py rename to compiler/tests/config_freepdk45.py diff --git a/compiler/tests/config_20_scn3me_subm.py b/compiler/tests/config_scn3me_subm.py similarity index 100% rename from compiler/tests/config_20_scn3me_subm.py rename to compiler/tests/config_scn3me_subm.py diff --git a/compiler/tests/config_20_scn4m_subm.py b/compiler/tests/config_scn4m_subm.py similarity index 100% rename from compiler/tests/config_20_scn4m_subm.py rename to compiler/tests/config_scn4m_subm.py From 95d96bd45d6a37096eb781b9c205e4a2888ca247 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 8 Mar 2019 11:12:30 -0800 Subject: [PATCH 021/324] Add OPENRAM_TMP environment check --- compiler/options.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/compiler/options.py b/compiler/options.py index 4d3461e6..f3410f86 100644 --- a/compiler/options.py +++ b/compiler/options.py @@ -13,8 +13,12 @@ class options(optparse.Values): # This is the name of the technology. tech_name = "" # This is the temp directory where all intermediate results are stored. - openram_temp = "/tmp/openram_{0}_{1}_temp/".format(getpass.getuser(),os.getpid()) - #openram_temp = "{0}/openram_temp/".format(os.getenv("HOME")) + try: + # If user defined the temporary location in their environment, use it + openram_temp = os.path.abspath(os.environ.get("OPENRAM_TMP")) + except: + # Else use a unique temporary directory + openram_temp = "/tmp/openram_{0}_{1}_temp/".format(getpass.getuser(),os.getpid()) # This is the verbosity level to control debug information. 0 is none, 1 # is minimal, etc. debug_level = 0 From 1a54fd0d1c2d12554581f204d549585e4ce2a5b8 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Mon, 11 Mar 2019 14:20:02 -0700 Subject: [PATCH 022/324] Remove scn3me_subm since it does not have 4 metal layers --- technology/scn3me_subm/__init__.py | 36 - technology/scn3me_subm/gds_lib/cell_6t.gds | Bin 5916 -> 0 bytes technology/scn3me_subm/gds_lib/dff.gds | Bin 16622 -> 0 bytes technology/scn3me_subm/gds_lib/ms_flop.gds | Bin 18934 -> 0 bytes .../scn3me_subm/gds_lib/replica_cell_6t.gds | Bin 6060 -> 0 bytes technology/scn3me_subm/gds_lib/sense_amp.gds | Bin 8312 -> 0 bytes technology/scn3me_subm/gds_lib/tri_gate.gds | Bin 4576 -> 0 bytes .../scn3me_subm/gds_lib/write_driver.gds | Bin 11804 -> 0 bytes technology/scn3me_subm/mag_lib/.magicrc | 5 - technology/scn3me_subm/mag_lib/cell_6t.mag | 117 - technology/scn3me_subm/mag_lib/convertall.sh | 14 - technology/scn3me_subm/mag_lib/dff.mag | 279 - technology/scn3me_subm/mag_lib/ms_flop.mag | 294 - .../scn3me_subm/mag_lib/replica_cell_6t.mag | 118 - technology/scn3me_subm/mag_lib/sense_amp.mag | 136 - technology/scn3me_subm/mag_lib/setup.tcl | 15 - technology/scn3me_subm/mag_lib/tri_gate.mag | 98 - .../scn3me_subm/mag_lib/write_driver.mag | 224 - technology/scn3me_subm/models/ff/nmos.sp | 10 - technology/scn3me_subm/models/ff/pmos.sp | 9 - technology/scn3me_subm/models/nom/nmos.sp | 9 - technology/scn3me_subm/models/nom/pmos.sp | 9 - technology/scn3me_subm/models/ss/nmos.sp | 10 - technology/scn3me_subm/models/ss/pmos.sp | 9 - technology/scn3me_subm/sp_lib/cell_6t.sp | 10 - technology/scn3me_subm/sp_lib/dff.sp | 27 - technology/scn3me_subm/sp_lib/ms_flop.sp | 29 - .../scn3me_subm/sp_lib/replica_cell_6t.sp | 10 - technology/scn3me_subm/sp_lib/sense_amp.sp | 12 - technology/scn3me_subm/sp_lib/tri_gate.sp | 13 - technology/scn3me_subm/sp_lib/write_driver.sp | 38 - technology/scn3me_subm/sue_lib/cell_6t.sue | 46 - technology/scn3me_subm/sue_lib/ms_flop.sue | 84 - .../scn3me_subm/sue_lib/replica_cell_6t.sue | 49 - technology/scn3me_subm/sue_lib/sense_amp.sue | 52 - technology/scn3me_subm/sue_lib/tri_gate.sue | 37 - .../scn3me_subm/sue_lib/write_driver.sue | 44 - technology/scn3me_subm/tech/README | 10 - .../scn3me_subm/tech/SCN3ME_SUBM.30.tech | 7891 ----------------- technology/scn3me_subm/tech/__init__.py | 6 - .../tech/calibreDRC_scn3me_subm.rul | 225 - .../tech/calibreLVS_scn3me_subm.rul | 123 - technology/scn3me_subm/tech/tech.py | 279 - technology/scn3me_subm/tf/README | 19 - technology/scn3me_subm/tf/display.drf | 714 -- .../scn3me_subm/tf/glade_scn3me_subm.py | 7 - technology/scn3me_subm/tf/layers.map | 16 - technology/scn3me_subm/tf/mosis.tf | 848 -- 48 files changed, 11981 deletions(-) delete mode 100644 technology/scn3me_subm/__init__.py delete mode 100644 technology/scn3me_subm/gds_lib/cell_6t.gds delete mode 100644 technology/scn3me_subm/gds_lib/dff.gds delete mode 100644 technology/scn3me_subm/gds_lib/ms_flop.gds delete mode 100644 technology/scn3me_subm/gds_lib/replica_cell_6t.gds delete mode 100644 technology/scn3me_subm/gds_lib/sense_amp.gds delete mode 100644 technology/scn3me_subm/gds_lib/tri_gate.gds delete mode 100644 technology/scn3me_subm/gds_lib/write_driver.gds delete mode 100644 technology/scn3me_subm/mag_lib/.magicrc delete mode 100644 technology/scn3me_subm/mag_lib/cell_6t.mag delete mode 100755 technology/scn3me_subm/mag_lib/convertall.sh delete mode 100644 technology/scn3me_subm/mag_lib/dff.mag delete mode 100644 technology/scn3me_subm/mag_lib/ms_flop.mag delete mode 100644 technology/scn3me_subm/mag_lib/replica_cell_6t.mag delete mode 100644 technology/scn3me_subm/mag_lib/sense_amp.mag delete mode 100644 technology/scn3me_subm/mag_lib/setup.tcl delete mode 100644 technology/scn3me_subm/mag_lib/tri_gate.mag delete mode 100644 technology/scn3me_subm/mag_lib/write_driver.mag delete mode 100644 technology/scn3me_subm/models/ff/nmos.sp delete mode 100644 technology/scn3me_subm/models/ff/pmos.sp delete mode 100644 technology/scn3me_subm/models/nom/nmos.sp delete mode 100644 technology/scn3me_subm/models/nom/pmos.sp delete mode 100644 technology/scn3me_subm/models/ss/nmos.sp delete mode 100644 technology/scn3me_subm/models/ss/pmos.sp delete mode 100644 technology/scn3me_subm/sp_lib/cell_6t.sp delete mode 100644 technology/scn3me_subm/sp_lib/dff.sp delete mode 100644 technology/scn3me_subm/sp_lib/ms_flop.sp delete mode 100644 technology/scn3me_subm/sp_lib/replica_cell_6t.sp delete mode 100644 technology/scn3me_subm/sp_lib/sense_amp.sp delete mode 100644 technology/scn3me_subm/sp_lib/tri_gate.sp delete mode 100644 technology/scn3me_subm/sp_lib/write_driver.sp delete mode 100644 technology/scn3me_subm/sue_lib/cell_6t.sue delete mode 100644 technology/scn3me_subm/sue_lib/ms_flop.sue delete mode 100644 technology/scn3me_subm/sue_lib/replica_cell_6t.sue delete mode 100644 technology/scn3me_subm/sue_lib/sense_amp.sue delete mode 100644 technology/scn3me_subm/sue_lib/tri_gate.sue delete mode 100644 technology/scn3me_subm/sue_lib/write_driver.sue delete mode 100644 technology/scn3me_subm/tech/README delete mode 100644 technology/scn3me_subm/tech/SCN3ME_SUBM.30.tech delete mode 100755 technology/scn3me_subm/tech/__init__.py delete mode 100755 technology/scn3me_subm/tech/calibreDRC_scn3me_subm.rul delete mode 100755 technology/scn3me_subm/tech/calibreLVS_scn3me_subm.rul delete mode 100755 technology/scn3me_subm/tech/tech.py delete mode 100644 technology/scn3me_subm/tf/README delete mode 100644 technology/scn3me_subm/tf/display.drf delete mode 100644 technology/scn3me_subm/tf/glade_scn3me_subm.py delete mode 100644 technology/scn3me_subm/tf/layers.map delete mode 100644 technology/scn3me_subm/tf/mosis.tf diff --git a/technology/scn3me_subm/__init__.py b/technology/scn3me_subm/__init__.py deleted file mode 100644 index 9542c26a..00000000 --- a/technology/scn3me_subm/__init__.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/python -""" -This type of setup script should be placed in the setup_scripts directory in the trunk -""" - -import sys -import os - -TECHNOLOGY = "scn3me_subm" - - -########################## -# CDK paths - -# os.environ["CDK_DIR"] = CDK_DIR #PDK path -# os.environ["SYSTEM_CDS_LIB_DIR"] = "{0}/cdssetup".format(CDK_DIR) -# os.environ["CDS_SITE"] = CDK_DIR -os.environ["MGC_TMPDIR"] = "/tmp" - -########################### -# OpenRAM Paths - - -try: - DRCLVS_HOME = os.path.abspath(os.environ.get("DRCLVS_HOME")) -except: - OPENRAM_TECH=os.path.abspath(os.environ.get("OPENRAM_TECH")) - DRCLVS_HOME=OPENRAM_TECH+"/scn3me_subm/tech" -os.environ["DRCLVS_HOME"] = DRCLVS_HOME - -# try: -# SPICE_MODEL_DIR = os.path.abspath(os.environ.get("SPICE_MODEL_DIR")) -# except: -OPENRAM_TECH=os.path.abspath(os.environ.get("OPENRAM_TECH")) -os.environ["SPICE_MODEL_DIR"] = "{0}/{1}/models".format(OPENRAM_TECH, TECHNOLOGY) - diff --git a/technology/scn3me_subm/gds_lib/cell_6t.gds b/technology/scn3me_subm/gds_lib/cell_6t.gds deleted file mode 100644 index 20e5367ece732f8208aab30adb0584859e15655f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5916 zcmbuDJ#3X_6vq#@x0eD1+sa2v3e;4PmQo5-sUJ~H*kEvAAcjPvH8M1Y7=w%q4w^79 zFqp`|K%xVK149Rg4#qGtI5;pcFgQ3k5EnnL=XcNh_kHfg^Eya!`Q84X=YP)g{XX}# zjm;Skaf7Cs`A`(Y&VefnCKU(|EW)Da1h0klg@@43vw=MB^yT89> zw&h*3iH(|jE{869dE&p>;U~X{A6?A-F+SvA{KT0Dp^L7k{U;ATts6)m z(8U4&k$V2k4qh`mdBbdespiV*&_ypV^B4YZ_s?(4j$DlWBQ8D)U39(CPwv)*XahWQ zQE`J_p7_mnjD?T=OB_f$(8VS{`-FOU#l=Ul|3uf*{P^+izgm+xid&VZe#Rev`N5Aa zdRgL+@gWD}Chor)y6Af1k33Zydw%tW{PYRt{>Z}~9lI2J74Di0UG(xa|F-q0J9bHo zIK+%kPfz{RGf|IrQy+4Mpo>lUr)MHBdyTcso*|CnR^?^>rE>oqx@)%lUF>!7)J`*W z(e>0n`q*szrr9&E)qM6BGj!3*Q~$nm;X81rCO&jA_jkL0{TR77Ez}&p8M^3gOY_rD z+Rj-g(jRoO$v^s7Z4k|93;hrF^fdpzbKyI1M+_hR$6u8v{_wERs4E`57rN+r;*UP# zqp#x8d!dU>{=HAaM|<%@eCT46pK->=_>1_^#oQnLBp3Y`HKwBLY5&QCkNhHiKoR^s@|M}w>t-Tx6c@Ul`q?);x1T>>lf3BS!1KE=Kl9ER ziC-ihy6AeEpL*P%cb}gU;A&NcJEK13G>=D#mL`O3Ls?wAX7 z(aX#HCkETkbC3EW&pp~N4m|$~f1E$`oAXCJcrA2sp#OzG&KZ2{d69AB{1Kb{Bg>I% z>vb{O!kEyesyyxgn8ulz6`=wg$fb~4wTlOnOuMc0%5$N2DD zf$SvF$=NWgAexr-7r+(Hcdmg_? zobpU@J@s?Oa_6W0BK<%YT~GbAlX~PAX$QLKdZVAb+}lOsC@yTu&pKn?87qYny$)|{ETt< z%illv8T(+by!4;!Kfl7?x*(eA+zK}N>-Ot+AY;aR2ihNO_OtFdC%7|+_|QeyllI4+ zp`WZD5g&U%bUpR|zwu+8#kkEciIJCeNB*k3mwzS%hzz-2i|@8^VVa1 LTE*Jzy=dFtRZEf{ diff --git a/technology/scn3me_subm/gds_lib/dff.gds b/technology/scn3me_subm/gds_lib/dff.gds deleted file mode 100644 index 07c37298b1293dad95cbcfb12e4c3222dddffa7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16622 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 diff --git a/technology/scn3me_subm/gds_lib/write_driver.gds b/technology/scn3me_subm/gds_lib/write_driver.gds deleted file mode 100644 index fdd3ad883b0f7ba91571eb508c5a78e27876802e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11804 zcmai)Z>*PP8OJXVha=d@@I(TR%qIEw6lg3dU0GStq+-R2i0qVy3Fg>|;mHQpXYns z*L~mD{XF;cJii!=k(d)p&l!o?m>;7t9+$@X|NHw|X$wZiKEG|t_D!Ff-nM0S)3#VR zXYSkI`IYN#e)0#W-+I%b<@>+0VO=bp+whNd{iE|D#$GuR?})MUM@89Jo z^AC9HQ2uS||BYUt|9bwb`u>+*dT~d@?8bUimYh5G*Z@${R-LpP(mGHcKwZRN^klA!J%#B0|?n8b5jD81>YcFxOzEYc_|ysQo5VpkrI&u@_lx6M zKPL5vZb~oxuDdtv%=&}3U6S$4q5A8Lzv~Vk_2)R~)M4*<**^7g)rzb?^SXsO|EBb& zpE_~fK;k$q)bT<8)r0jj`f$V_?}%8cKAV5tp$oQjQ+nyY;QokTsPBxU`Q&&6x+%T% zpT8jDr>cMaCUMYB=}rG5%ALA5iQ~9Xdg-U12jr#y=0h{te^YwX{|${7e)HRkNnBHU z=_kM4t22L-IOwMI(m(f^h%Zg&^~bztUj(`-z3Hb;xqg|O^*4TVsQx?k!+BF$yO&1UsTkM(BaLpNLg#otXIHOXPkiWR%fIAU`nZ3P2gHYNw*1^@-t+U!*IYf3_a9SwnLqa#eB^85LpNLgMKkFm zU;Gdsy4mtyay;UFJM#WvzW+o7x+%TPpZ>GwV!lkCfzeIrrJp+a$(pPmll?EcDZTWw ze!h8ot{?MTPvrVBrI&u%!N>YB@u8b7KkEb^>&L{0Znpf4+s+SX{hN3HD96*3Ugl5T z;G_OceCTG&Prcxy?oE8?X3NjM@zc6q@C;?%s=lL}(#!m*ljXD7U-OzjWc`@ZOF!!b zAN@7)p_?r~>jWSDHSwXFEkEl7ANwy8AG$f@f79UpUXf z^ZsP~xqN>DiQ~9%=>18@|LRi_zq?QOKh2@Zdlz(5df7hxJo!}SZ_+-xDZS}Gu{5t8 zCUG1WN-zDapWm*^{7w3SZc1i1Wp={JdkZb~oxTxWRC#QP8P z$cnuFn9@r>^ZWI+IsYc_5ztNPrJwf)Joi&KCUMZsq38dX)eq-UKPK%`Kc@7uea@p@ z=Gi0;y4h-vIP3fhd``*mX^qa&%H>H>U z3FWs%Z7rJVlYXF^I$rvjr;YdLdNG+t&ui~^>8CzEvNHD%CUxYx>K!lrtQ&l+W0O44 zP3fhdI^jI}Z!#X}ru3$NgWBePYZAwCq4d(vJkekLCUMYB>7{?!y6iXCFZ%E67&_Op z-tp4UIIVpqeI{`{uD#<;{|9&F_?yIWTqwQt&!37|GnsyqIOwMIrk`sUb!HOBaiR3m zKcPCm;dIWI$$M{fQ+nxV--eI%YT`pTTYlPk+rIRh#BpA|<7NB2Z=o&5*<>8hP3fhd z`0U-NQ9exespu_{cY#|#lD}pIwO`#1Kze_ow+ zZvJI|?uSk3rJv^)?(>Y7$@>s=Q+nyApP$p(qyOgi(d@q|z3Kn>g7ll8Q2&W*N-zD~ zch^nje#!i(#uMF?Uiw)dy!&MAO|C`gru5QJoltw!kIA(d-IPA)zjko`@cgs4{>|rh zWh_&A>E}7`ZwK;vY5pVf`OlPI`Wfd(HFwOP$#+9^Q+nxVpTv6?>euAG3%WV<{-x7@ z#(2~7S+6GVozYF{W&7N>xZd&nWOCg^H;1mDo%T78_XhaQ%TK1?lwP*aJhOI~f0Mm0 zx+#6of6d_hv(A_&*1E}a7rH6E>E}BQ^=cBwaiR3m&pP3|4}R0%eaxZnKb`#9x8kF} zCO&kt(#`M zZVtUa>$J~2^ScA)-+V|Kx;gawgN~o~9{8AllX^fmTYlQn?@P}3P2xDO-tn^kj33V_ zjGxJOKXg-i=_fvQL;p?ka9+LRrJr_oug>#L@^D_gEfIGdpwrn8a~hD82MEZrmrSca!HfbW?iiXP)Rc^JfwV-8@_W@zK7C zkG##6-_L(Mr}6v;d45DUho1jB^}}~op4Yhdn#4gjrI-EZ{>OJ_{3dbGP3fhdcKF>H ze$(HrP3fhd{U6`0+3%b9(9NOm*PZ^e@50A;nIBT_=w{1L{;O`x_D%ZXe)W!*`E#7# zpU{7E<>Bu4^P%6Lbn>U4llNx(CV8Nn(#!VgC+*UIllIZgR{PwyXqUP(sT*{&)js{l zOZz5ycwBnN%ltLfXRiG`J8}}mLCN-zD?4eyBQuj%JTQ~IF)&4c?-o_oCSG*3xG zH;4A09si=4{=UuoH+<;k(EhFCXWYDRFuiXuhxQL0|HP61fB!?@`$FEAcXywEJAR&f zrjOYepG;%S$t^Jb@8@pzKkv;XYpaff~E!EU?fD$mjQ EFZKmEzW@LL diff --git a/technology/scn3me_subm/mag_lib/.magicrc b/technology/scn3me_subm/mag_lib/.magicrc deleted file mode 100644 index f52d0592..00000000 --- a/technology/scn3me_subm/mag_lib/.magicrc +++ /dev/null @@ -1,5 +0,0 @@ -path sys +$::env(OPENRAM_TECH)/scn3me_subm/tech -tech load SCN3ME_SUBM.30 -noprompt -scalegrid 1 4 -set GND gnd -set VDD vdd diff --git a/technology/scn3me_subm/mag_lib/cell_6t.mag b/technology/scn3me_subm/mag_lib/cell_6t.mag deleted file mode 100644 index f2e9906a..00000000 --- a/technology/scn3me_subm/mag_lib/cell_6t.mag +++ /dev/null @@ -1,117 +0,0 @@ -magic -tech scmos -timestamp 1536091415 -<< nwell >> -rect -8 29 42 51 -<< pwell >> -rect -8 -8 42 29 -<< ntransistor >> -rect 7 10 9 18 -rect 29 10 31 18 -rect 10 3 14 5 -rect 24 3 28 5 -<< ptransistor >> -rect 7 37 11 40 -rect 27 37 31 40 -<< ndiffusion >> -rect -2 16 7 18 -rect 2 12 7 16 -rect -2 10 7 12 -rect 9 14 10 18 -rect 9 10 14 14 -rect 28 14 29 18 -rect 24 10 29 14 -rect 31 16 36 18 -rect 31 12 32 16 -rect 31 10 36 12 -rect 10 5 14 10 -rect 24 5 28 10 -rect 10 2 14 3 -rect 24 2 28 3 -<< pdiffusion >> -rect 2 37 7 40 -rect 11 37 12 40 -rect 26 37 27 40 -rect 31 37 32 40 -<< ndcontact >> -rect -2 12 2 16 -rect 10 14 14 18 -rect 24 14 28 18 -rect 32 12 36 16 -rect 10 -2 14 2 -rect 24 -2 28 2 -<< pdcontact >> -rect -2 36 2 40 -rect 12 36 16 40 -rect 22 36 26 40 -rect 32 36 36 40 -<< psubstratepcontact >> -rect -2 22 2 26 -rect 32 22 36 26 -<< nsubstratencontact >> -rect 32 44 36 48 -<< polysilicon >> -rect 7 40 11 42 -rect 27 40 31 42 -rect 7 35 11 37 -rect 7 21 9 35 -rect 27 34 31 37 -rect 15 33 31 34 -rect 19 32 31 33 -rect 7 20 21 21 -rect 7 19 24 20 -rect 7 18 9 19 -rect 29 18 31 32 -rect 7 8 9 10 -rect 17 5 21 6 -rect 29 8 31 10 -rect -2 3 10 5 -rect 14 3 24 5 -rect 28 3 36 5 -<< polycontact >> -rect 15 29 19 33 -rect 21 20 25 24 -rect 17 6 21 10 -<< metal1 >> -rect -2 44 15 48 -rect 19 44 32 48 -rect -2 40 2 44 -rect 32 40 36 44 -rect 11 36 12 40 -rect 26 36 27 40 -rect -2 26 2 29 -rect -2 16 2 22 -rect 11 18 15 36 -rect 23 24 27 36 -rect 25 20 27 24 -rect 14 14 15 18 -rect 23 18 27 20 -rect 32 26 36 29 -rect 23 14 24 18 -rect 32 16 36 22 -rect -2 6 17 9 -rect 21 6 36 9 -rect -2 5 36 6 -<< m2contact >> -rect 15 44 19 48 -rect -2 29 2 33 -rect 32 29 36 33 -rect 6 -2 10 2 -rect 20 -2 24 2 -<< metal2 >> -rect -2 33 2 48 -rect -2 -2 2 29 -rect 6 2 10 48 -rect 24 -2 28 48 -rect 32 33 36 48 -rect 32 -2 36 29 -<< bb >> -rect 0 0 34 46 -<< labels >> -rlabel metal2 0 0 0 0 1 gnd -rlabel metal2 34 0 34 0 1 gnd -rlabel m2contact 17 46 17 46 5 vdd -rlabel metal2 8 43 8 43 1 bl -rlabel metal2 26 43 26 43 1 br -rlabel metal1 4 7 4 7 1 wl -<< end >> diff --git a/technology/scn3me_subm/mag_lib/convertall.sh b/technology/scn3me_subm/mag_lib/convertall.sh deleted file mode 100755 index f5e2482c..00000000 --- a/technology/scn3me_subm/mag_lib/convertall.sh +++ /dev/null @@ -1,14 +0,0 @@ -magic -dnull -noconsole << EOF -load dff -gds write dff.gds -load cell_6t -gds write cell_6t.gds -load replica_cell_6t -gds write replica_cell_6t.gds -load sense_amp -gds write sense_amp.gds -load tri_gate -gds write tri_gate.gds -load write_driver -gds write write_driver.gds -EOF diff --git a/technology/scn3me_subm/mag_lib/dff.mag b/technology/scn3me_subm/mag_lib/dff.mag deleted file mode 100644 index 46d22c84..00000000 --- a/technology/scn3me_subm/mag_lib/dff.mag +++ /dev/null @@ -1,279 +0,0 @@ -magic -tech scmos -timestamp 1536089597 -<< nwell >> -rect 0 48 109 103 -<< pwell >> -rect 0 -3 109 48 -<< ntransistor >> -rect 11 6 13 26 -rect 19 6 21 16 -rect 24 6 26 16 -rect 33 6 35 16 -rect 38 6 40 16 -rect 47 6 49 16 -rect 63 6 65 16 -rect 68 6 70 16 -rect 78 6 80 16 -rect 83 6 85 16 -rect 91 6 93 26 -<< ptransistor >> -rect 11 54 13 94 -rect 19 74 21 94 -rect 25 74 27 94 -rect 33 74 35 94 -rect 39 74 41 94 -rect 47 74 49 94 -rect 63 74 65 94 -rect 68 74 70 94 -rect 78 84 80 94 -rect 83 84 85 94 -rect 91 54 93 94 -<< ndiffusion >> -rect 6 25 11 26 -rect 10 6 11 25 -rect 13 25 18 26 -rect 13 6 14 25 -rect 86 25 91 26 -rect 18 6 19 16 -rect 21 6 24 16 -rect 26 15 33 16 -rect 26 6 28 15 -rect 32 6 33 15 -rect 35 6 38 16 -rect 40 15 47 16 -rect 40 6 41 15 -rect 45 6 47 15 -rect 49 15 54 16 -rect 49 6 50 15 -rect 58 15 63 16 -rect 62 6 63 15 -rect 65 6 68 16 -rect 70 15 78 16 -rect 70 6 72 15 -rect 76 6 78 15 -rect 80 6 83 16 -rect 85 6 86 16 -rect 90 6 91 25 -rect 93 25 98 26 -rect 93 6 94 25 -<< pdiffusion >> -rect 6 93 11 94 -rect 10 54 11 93 -rect 13 55 14 94 -rect 18 74 19 94 -rect 21 74 25 94 -rect 27 93 33 94 -rect 27 74 28 93 -rect 32 74 33 93 -rect 35 74 39 94 -rect 41 93 47 94 -rect 41 74 42 93 -rect 46 74 47 93 -rect 49 93 54 94 -rect 49 74 50 93 -rect 58 93 63 94 -rect 62 74 63 93 -rect 65 74 68 94 -rect 70 93 78 94 -rect 70 74 72 93 -rect 76 84 78 93 -rect 80 84 83 94 -rect 85 93 91 94 -rect 85 84 86 93 -rect 76 74 77 84 -rect 13 54 18 55 -rect 90 54 91 93 -rect 93 93 98 94 -rect 93 54 94 93 -<< ndcontact >> -rect 6 6 10 25 -rect 14 6 18 25 -rect 28 6 32 15 -rect 41 6 45 15 -rect 50 6 54 15 -rect 58 6 62 15 -rect 72 6 76 15 -rect 86 6 90 25 -rect 94 6 98 25 -<< pdcontact >> -rect 6 54 10 93 -rect 14 55 18 94 -rect 28 74 32 93 -rect 42 74 46 93 -rect 50 74 54 93 -rect 58 74 62 93 -rect 72 74 76 93 -rect 86 54 90 93 -rect 94 54 98 93 -<< psubstratepcontact >> -rect 102 6 106 10 -<< nsubstratencontact >> -rect 102 89 106 93 -<< polysilicon >> -rect 11 94 13 96 -rect 19 94 21 96 -rect 25 94 27 96 -rect 33 94 35 96 -rect 39 94 41 96 -rect 47 94 49 96 -rect 63 94 65 96 -rect 68 94 70 96 -rect 78 94 80 96 -rect 83 94 85 96 -rect 91 94 93 96 -rect 11 37 13 54 -rect 19 46 21 74 -rect 11 26 13 33 -rect 19 16 21 42 -rect 25 38 27 74 -rect 33 54 35 74 -rect 33 29 35 50 -rect 24 27 35 29 -rect 39 71 41 74 -rect 24 16 26 27 -rect 39 23 41 67 -rect 47 61 49 74 -rect 63 73 65 74 -rect 54 71 65 73 -rect 34 19 35 23 -rect 33 16 35 19 -rect 38 19 39 23 -rect 38 16 40 19 -rect 47 16 49 57 -rect 53 19 55 67 -rect 68 63 70 74 -rect 78 67 80 84 -rect 76 65 80 67 -rect 63 61 70 63 -rect 61 24 63 33 -rect 68 31 70 61 -rect 83 53 85 84 -rect 79 51 85 53 -rect 78 31 80 47 -rect 91 45 93 54 -rect 89 41 93 45 -rect 68 29 75 31 -rect 61 22 70 24 -rect 53 17 65 19 -rect 63 16 65 17 -rect 68 16 70 22 -rect 73 19 75 29 -rect 78 27 79 31 -rect 73 17 80 19 -rect 78 16 80 17 -rect 83 16 85 31 -rect 91 26 93 41 -rect 11 4 13 6 -rect 19 4 21 6 -rect 24 4 26 6 -rect 33 4 35 6 -rect 38 4 40 6 -rect 47 4 49 6 -rect 63 4 65 6 -rect 68 4 70 6 -rect 78 4 80 6 -rect 83 4 85 6 -rect 91 4 93 6 -<< polycontact >> -rect 17 42 21 46 -rect 10 33 14 37 -rect 31 50 35 54 -rect 25 34 29 38 -rect 39 67 43 71 -rect 45 57 49 61 -rect 30 19 34 23 -rect 39 19 43 23 -rect 53 67 57 71 -rect 59 59 63 63 -rect 74 61 78 65 -rect 59 33 63 37 -rect 77 47 81 51 -rect 85 41 89 45 -rect 79 27 83 31 -<< metal1 >> -rect 0 97 109 103 -rect 14 94 18 97 -rect 6 93 10 94 -rect 28 93 32 94 -rect 22 74 28 77 -rect 42 93 46 97 -rect 50 93 54 94 -rect 58 93 62 97 -rect 71 93 77 94 -rect 71 74 72 93 -rect 76 74 77 93 -rect 86 93 90 97 -rect 50 71 53 74 -rect 43 68 53 71 -rect 26 57 45 60 -rect 52 60 59 63 -rect 52 54 55 60 -rect 71 56 74 65 -rect 10 50 31 52 -rect 35 51 55 54 -rect 62 53 74 56 -rect 94 93 98 94 -rect 102 93 106 97 -rect 6 49 34 50 -rect 21 43 38 46 -rect 18 34 25 37 -rect 62 37 65 53 -rect 94 51 98 54 -rect 81 48 94 51 -rect 74 41 85 44 -rect 29 34 59 37 -rect 6 25 10 26 -rect 14 25 18 26 -rect 31 23 34 34 -rect 63 34 65 37 -rect 94 31 98 47 -rect 83 28 98 31 -rect 94 25 98 28 -rect 43 19 53 22 -rect 50 16 53 19 -rect 22 15 32 16 -rect 22 13 28 15 -rect 41 15 46 16 -rect 45 6 46 15 -rect 50 15 54 16 -rect 58 15 62 16 -rect 70 15 77 16 -rect 70 13 72 15 -rect 71 6 72 13 -rect 76 6 77 15 -rect 14 3 18 6 -rect 41 3 46 6 -rect 58 3 62 6 -rect 86 3 90 6 -rect 102 3 106 6 -rect 0 -3 109 3 -<< m2contact >> -rect 22 70 26 74 -rect 70 70 74 74 -rect 22 57 26 61 -rect 6 50 10 54 -rect 38 43 42 47 -rect 14 33 18 37 -rect 94 47 98 51 -rect 70 40 74 44 -rect 6 26 10 30 -rect 22 16 26 20 -rect 70 16 74 20 -<< metal2 >> -rect 22 61 26 70 -rect 6 30 10 50 -rect 22 20 26 57 -rect 70 44 74 70 -rect 70 20 74 40 -<< bb >> -rect 0 0 109 100 -<< labels >> -rlabel m2contact 15 34 15 34 4 clk -rlabel m2contact 40 45 40 45 4 D -rlabel m2contact 96 49 96 49 4 Q -rlabel metal1 32 98 32 98 4 vdd -rlabel metal1 44 1 44 1 4 gnd -<< properties >> -string path 0.000 0.000 900.000 0.000 900.000 900.000 0.000 900.000 0.000 0.000 -<< end >> diff --git a/technology/scn3me_subm/mag_lib/ms_flop.mag b/technology/scn3me_subm/mag_lib/ms_flop.mag deleted file mode 100644 index 713d264f..00000000 --- a/technology/scn3me_subm/mag_lib/ms_flop.mag +++ /dev/null @@ -1,294 +0,0 @@ -magic -tech scmos -timestamp 1536089622 -<< nwell >> -rect -2 0 18 200 -<< pwell >> -rect 18 0 40 200 -<< ntransistor >> -rect 24 178 27 180 -rect 24 162 27 164 -rect 24 138 27 140 -rect 24 130 27 132 -rect 24 112 27 114 -rect 24 93 27 95 -rect 24 77 27 79 -rect 24 50 27 52 -rect 24 42 27 44 -rect 24 24 27 26 -<< ptransistor >> -rect 6 178 12 180 -rect 6 162 12 164 -rect 6 138 12 140 -rect 6 130 12 132 -rect 6 112 12 114 -rect 6 93 12 95 -rect 6 77 12 79 -rect 6 50 12 52 -rect 6 42 12 44 -rect 6 24 12 26 -<< ndiffusion >> -rect 24 180 27 181 -rect 24 177 27 178 -rect 24 164 27 165 -rect 24 161 27 162 -rect 28 157 32 161 -rect 24 140 27 141 -rect 24 137 27 138 -rect 24 132 27 133 -rect 24 129 27 130 -rect 24 114 27 115 -rect 24 111 27 112 -rect 24 95 27 96 -rect 24 92 27 93 -rect 24 79 27 80 -rect 24 76 27 77 -rect 28 72 32 76 -rect 24 52 27 53 -rect 24 49 27 50 -rect 24 44 27 45 -rect 24 41 27 42 -rect 24 26 27 27 -rect 24 23 27 24 -<< pdiffusion >> -rect 6 180 12 181 -rect 6 177 12 178 -rect 6 164 12 165 -rect 6 161 12 162 -rect 6 140 12 141 -rect 6 137 12 138 -rect 6 132 12 133 -rect 6 129 12 130 -rect 6 114 12 115 -rect 6 111 12 112 -rect 6 95 12 96 -rect 6 92 12 93 -rect 6 79 12 80 -rect 6 76 12 77 -rect 6 52 12 53 -rect 6 49 12 50 -rect 6 44 12 45 -rect 6 41 12 42 -rect 6 26 12 27 -rect 6 23 12 24 -rect 8 18 12 19 -<< ndcontact >> -rect 24 181 28 185 -rect 24 173 28 177 -rect 24 165 28 169 -rect 24 157 28 161 -rect 24 141 28 145 -rect 24 133 28 137 -rect 24 125 28 129 -rect 24 115 28 119 -rect 24 107 28 111 -rect 24 96 28 100 -rect 24 88 28 92 -rect 24 80 28 84 -rect 24 72 28 76 -rect 24 53 28 57 -rect 24 45 28 49 -rect 24 37 28 41 -rect 24 27 28 31 -rect 24 19 28 23 -<< pdcontact >> -rect 6 181 12 185 -rect 6 173 12 177 -rect 6 165 12 169 -rect 6 157 12 161 -rect 6 141 12 145 -rect 6 133 12 137 -rect 6 125 12 129 -rect 6 115 12 119 -rect 6 107 12 111 -rect 6 96 12 100 -rect 6 88 12 92 -rect 6 80 12 84 -rect 6 72 12 76 -rect 6 53 12 57 -rect 6 45 12 49 -rect 6 37 12 41 -rect 6 27 12 31 -rect 6 19 12 23 -<< psubstratepcontact >> -rect 32 157 36 161 -rect 32 72 36 76 -<< nsubstratencontact >> -rect 8 14 12 18 -<< polysilicon >> -rect 4 178 6 180 -rect 12 178 24 180 -rect 27 178 29 180 -rect 17 173 19 178 -rect 4 162 6 164 -rect 12 163 24 164 -rect 12 162 17 163 -rect 21 162 24 163 -rect 27 162 29 164 -rect 3 148 13 150 -rect 3 140 5 148 -rect 3 138 6 140 -rect 12 138 14 140 -rect 17 138 24 140 -rect 27 138 29 140 -rect 17 132 19 138 -rect 3 130 6 132 -rect 12 130 19 132 -rect 22 130 24 132 -rect 27 130 31 132 -rect 3 114 5 130 -rect 29 122 31 130 -rect 20 120 31 122 -rect 3 112 6 114 -rect 12 112 24 114 -rect 27 112 29 114 -rect 4 93 6 95 -rect 12 93 24 95 -rect 27 93 29 95 -rect 19 89 21 93 -rect 4 77 6 79 -rect 12 78 24 79 -rect 12 77 17 78 -rect 21 77 24 78 -rect 27 77 29 79 -rect 3 60 13 62 -rect 3 52 5 60 -rect 3 50 6 52 -rect 12 50 14 52 -rect 17 50 24 52 -rect 27 50 29 52 -rect 17 44 19 50 -rect 3 42 6 44 -rect 12 42 19 44 -rect 22 42 24 44 -rect 27 42 31 44 -rect 3 26 5 42 -rect 29 34 31 42 -rect 20 32 31 34 -rect 3 24 6 26 -rect 12 24 24 26 -rect 27 24 29 26 -rect 16 14 18 24 -<< polycontact >> -rect 16 169 20 173 -rect 17 159 21 163 -rect 13 148 17 152 -rect 16 118 20 122 -rect 15 108 19 112 -rect 17 85 21 89 -rect 17 74 21 78 -rect 13 60 17 64 -rect 16 30 20 34 -rect 15 10 19 14 -<< metal1 >> -rect 16 182 24 185 -rect -2 173 6 177 -rect 28 173 36 177 -rect -2 164 2 173 -rect 12 166 20 169 -rect 2 160 6 161 -rect -2 157 6 160 -rect 33 161 36 173 -rect -2 111 2 157 -rect 28 157 32 161 -rect 12 142 24 145 -rect 12 134 20 137 -rect 12 126 20 129 -rect 20 118 24 119 -rect 16 116 24 118 -rect -2 107 6 111 -rect 33 111 36 153 -rect -2 92 2 107 -rect 28 107 36 111 -rect 12 97 24 100 -rect 33 92 36 107 -rect -2 88 6 92 -rect -2 76 2 88 -rect 28 88 36 92 -rect 6 84 20 85 -rect 12 82 20 84 -rect -2 72 6 76 -rect 33 76 36 88 -rect -2 41 2 72 -rect 28 72 32 76 -rect 12 54 24 57 -rect 12 46 20 49 -rect 12 38 20 41 -rect -2 22 2 37 -rect 20 30 24 31 -rect 16 28 24 30 -rect 33 23 36 68 -rect -2 19 6 22 -rect 28 20 36 23 -rect 8 18 12 19 -rect -2 10 15 11 -rect 19 10 36 11 -rect -2 8 36 10 -<< m2contact >> -rect 12 181 16 185 -rect 20 166 24 170 -rect -2 160 2 164 -rect 17 155 21 159 -rect 32 153 36 157 -rect 6 145 10 149 -rect 17 148 21 152 -rect 20 133 24 137 -rect 20 125 24 129 -rect 12 115 16 119 -rect 15 104 19 108 -rect 6 100 10 104 -rect 20 81 24 85 -rect 17 70 21 74 -rect 32 68 36 72 -rect 6 57 10 61 -rect 17 60 21 64 -rect 20 45 24 49 -rect -2 37 2 41 -rect 20 37 24 41 -rect 12 27 16 31 -<< metal2 >> -rect 6 185 10 200 -rect 15 196 19 200 -rect 15 192 24 196 -rect 6 181 12 185 -rect 6 149 9 181 -rect 20 170 24 192 -rect 21 155 27 159 -rect 18 143 21 148 -rect 13 140 21 143 -rect 13 119 16 140 -rect 24 133 27 155 -rect 5 100 6 104 -rect 5 61 8 100 -rect 15 93 19 104 -rect 11 90 19 93 -rect 11 67 14 90 -rect 24 81 27 129 -rect 21 70 27 74 -rect 11 64 16 67 -rect 5 57 6 61 -rect 13 60 17 64 -rect 13 31 16 60 -rect 24 45 27 70 -rect 24 8 27 41 -rect 19 4 27 8 -rect 15 0 19 4 -<< m3contact >> -rect 15 4 19 8 -<< metal3 >> -rect 14 8 20 9 -rect 14 4 15 8 -rect 19 4 20 8 -rect 14 3 20 4 -<< bb >> -rect 0 0 34 200 -<< labels >> -rlabel metal1 0 8 0 8 2 clk -rlabel metal3 15 4 15 4 1 din -rlabel metal2 6 196 6 196 5 dout_bar -rlabel metal2 15 196 15 196 5 dout -rlabel m2contact 34 70 34 70 1 gnd -rlabel m2contact 34 154 34 154 1 gnd -rlabel m2contact 0 162 0 162 3 vdd -rlabel m2contact 0 38 0 38 3 vdd -<< end >> diff --git a/technology/scn3me_subm/mag_lib/replica_cell_6t.mag b/technology/scn3me_subm/mag_lib/replica_cell_6t.mag deleted file mode 100644 index d0dc472f..00000000 --- a/technology/scn3me_subm/mag_lib/replica_cell_6t.mag +++ /dev/null @@ -1,118 +0,0 @@ -magic -tech scmos -timestamp 1536091380 -<< nwell >> -rect -8 29 42 51 -<< pwell >> -rect -8 -8 42 29 -<< ntransistor >> -rect 7 10 9 18 -rect 29 10 31 18 -rect 10 3 14 5 -rect 24 3 28 5 -<< ptransistor >> -rect 7 37 11 40 -rect 27 37 31 40 -<< ndiffusion >> -rect -2 16 7 18 -rect 2 12 7 16 -rect -2 10 7 12 -rect 9 14 10 18 -rect 9 10 14 14 -rect 28 14 29 18 -rect 24 10 29 14 -rect 31 16 36 18 -rect 31 12 32 16 -rect 31 10 36 12 -rect 10 5 14 10 -rect 24 5 28 10 -rect 10 2 14 3 -rect 24 2 28 3 -<< pdiffusion >> -rect 2 37 7 40 -rect 11 37 12 40 -rect 26 37 27 40 -rect 31 37 32 40 -<< ndcontact >> -rect -2 12 2 16 -rect 10 14 14 18 -rect 24 14 28 18 -rect 32 12 36 16 -rect 10 -2 14 2 -rect 24 -2 28 2 -<< pdcontact >> -rect -2 36 2 40 -rect 12 36 16 40 -rect 22 36 26 40 -rect 32 36 36 40 -<< psubstratepcontact >> -rect -2 22 2 26 -rect 32 22 36 26 -<< nsubstratencontact >> -rect 32 44 36 48 -<< polysilicon >> -rect 7 40 11 42 -rect 27 40 31 42 -rect 7 35 11 37 -rect 7 21 9 35 -rect 27 34 31 37 -rect 15 33 31 34 -rect 19 32 31 33 -rect 7 20 21 21 -rect 7 19 24 20 -rect 7 18 9 19 -rect 29 18 31 32 -rect 7 8 9 10 -rect 17 5 21 6 -rect 29 8 31 10 -rect -2 3 10 5 -rect 14 3 24 5 -rect 28 3 36 5 -<< polycontact >> -rect 15 29 19 33 -rect 21 20 25 24 -rect 17 6 21 10 -<< metal1 >> -rect -2 44 15 48 -rect 19 44 32 48 -rect -2 40 2 44 -rect 32 40 36 44 -rect 11 36 12 40 -rect 26 36 27 40 -rect -2 26 2 29 -rect 11 22 15 36 -rect 23 24 27 36 -rect -2 18 15 22 -rect 25 20 27 24 -rect -2 16 2 18 -rect 14 14 15 18 -rect 23 18 27 20 -rect 32 26 36 29 -rect 23 14 24 18 -rect 32 16 36 22 -rect -2 6 17 9 -rect 21 6 36 9 -rect -2 5 36 6 -<< m2contact >> -rect 15 44 19 48 -rect -2 29 2 33 -rect 32 29 36 33 -rect 6 -2 10 2 -rect 20 -2 24 2 -<< metal2 >> -rect -2 33 2 48 -rect -2 -2 2 29 -rect 6 2 10 48 -rect 24 -2 28 48 -rect 32 33 36 48 -rect 32 -2 36 29 -<< bb >> -rect 0 0 34 46 -<< labels >> -rlabel metal2 0 0 0 0 1 gnd -rlabel metal2 34 0 34 0 1 gnd -rlabel m2contact 17 46 17 46 5 vdd -rlabel metal2 8 43 8 43 1 bl -rlabel metal2 26 43 26 43 1 br -rlabel metal1 4 7 4 7 1 wl -<< end >> diff --git a/technology/scn3me_subm/mag_lib/sense_amp.mag b/technology/scn3me_subm/mag_lib/sense_amp.mag deleted file mode 100644 index e5fa4373..00000000 --- a/technology/scn3me_subm/mag_lib/sense_amp.mag +++ /dev/null @@ -1,136 +0,0 @@ -magic -tech scmos -timestamp 1536089670 -<< nwell >> -rect 0 0 40 102 -<< pwell >> -rect 0 102 40 163 -<< ntransistor >> -rect 21 130 23 139 -rect 12 108 14 117 -rect 20 108 22 117 -<< ptransistor >> -rect 12 78 14 96 -rect 20 78 22 96 -rect 11 20 13 44 -rect 27 20 29 44 -<< ndiffusion >> -rect 20 130 21 139 -rect 23 130 24 139 -rect 11 108 12 117 -rect 14 108 15 117 -rect 19 108 20 117 -rect 22 108 23 117 -<< pdiffusion >> -rect 7 94 12 96 -rect 11 80 12 94 -rect 7 78 12 80 -rect 14 94 20 96 -rect 14 80 15 94 -rect 19 80 20 94 -rect 14 78 20 80 -rect 22 94 27 96 -rect 22 80 23 94 -rect 22 78 27 80 -rect 10 20 11 44 -rect 13 20 14 44 -rect 26 20 27 44 -rect 29 20 30 44 -<< ndcontact >> -rect 16 130 20 139 -rect 24 130 28 139 -rect 7 108 11 117 -rect 15 108 19 117 -rect 23 108 27 117 -<< pdcontact >> -rect 7 80 11 94 -rect 15 80 19 94 -rect 23 80 27 94 -rect 6 20 10 44 -rect 14 20 18 44 -rect 22 20 26 44 -rect 30 20 34 44 -<< psubstratepcontact >> -rect 32 137 36 141 -<< nsubstratencontact >> -rect 27 70 31 74 -<< polysilicon >> -rect 21 139 23 149 -rect 21 129 23 130 -rect 3 127 23 129 -rect 3 47 5 127 -rect 12 122 34 124 -rect 12 117 14 122 -rect 20 117 22 119 -rect 12 96 14 108 -rect 20 96 22 108 -rect 32 105 34 122 -rect 30 101 34 105 -rect 12 76 14 78 -rect 20 69 22 78 -rect 13 67 22 69 -rect 9 55 11 65 -rect 32 55 34 101 -rect 33 51 34 55 -rect 3 45 13 47 -rect 11 44 13 45 -rect 27 44 29 46 -rect 11 19 13 20 -rect 27 19 29 20 -rect 11 17 29 19 -<< polycontact >> -rect 20 149 24 153 -rect 26 101 30 105 -rect 9 65 13 69 -rect 9 51 13 55 -rect 29 51 33 55 -<< metal1 >> -rect -2 149 20 153 -rect 24 149 36 153 -rect 28 133 32 137 -rect 16 117 19 130 -rect 7 94 11 108 -rect 23 105 27 108 -rect 23 101 26 105 -rect 7 69 11 80 -rect 15 94 19 96 -rect 15 78 19 80 -rect 23 94 27 101 -rect 23 78 27 80 -rect 15 75 18 78 -rect 15 74 31 75 -rect 15 72 27 74 -rect 7 65 9 69 -rect 6 44 9 54 -rect 33 51 34 55 -rect 31 44 34 51 -rect 3 20 6 23 -rect 3 15 7 20 -<< m2contact >> -rect 32 133 36 137 -rect 27 66 31 70 -rect 13 44 17 48 -rect 22 44 26 48 -rect 3 11 7 15 -<< metal2 >> -rect 10 48 14 163 -rect 20 48 24 163 -rect 32 129 36 133 -rect 27 62 31 66 -rect 10 44 13 48 -rect 20 44 22 48 -rect 3 0 7 11 -rect 10 0 14 44 -rect 20 0 24 44 -<< bb >> -rect 0 0 34 163 -<< labels >> -flabel metal1 0 149 0 149 4 FreeSans 26 0 0 0 en -rlabel metal2 34 131 34 131 1 gnd -rlabel metal2 29 64 29 64 1 vdd -rlabel metal2 12 161 12 161 5 bl -rlabel metal2 22 161 22 161 5 br -rlabel metal2 5 3 5 3 1 dout -<< properties >> -string path 270.000 468.000 270.000 486.000 288.000 486.000 288.000 468.000 270.000 468.000 -<< end >> diff --git a/technology/scn3me_subm/mag_lib/setup.tcl b/technology/scn3me_subm/mag_lib/setup.tcl deleted file mode 100644 index af55a416..00000000 --- a/technology/scn3me_subm/mag_lib/setup.tcl +++ /dev/null @@ -1,15 +0,0 @@ -# Setup file for netgen -ignore class c -equate class {-circuit1 nfet} {-circuit2 n} -equate class {-circuit1 pfet} {-circuit2 p} -# This circuit has symmetries and needs to be flattened to resolve them -# or the banks won't pass -flatten class {-circuit1 precharge_array_1} -flatten class {-circuit1 precharge_array_2} -flatten class {-circuit1 precharge_array_3} -flatten class {-circuit1 precharge_array_4} -property {-circuit1 nfet} remove as ad ps pd -property {-circuit1 pfet} remove as ad ps pd -property {-circuit2 n} remove as ad ps pd -property {-circuit2 p} remove as ad ps pd -permute transistors diff --git a/technology/scn3me_subm/mag_lib/tri_gate.mag b/technology/scn3me_subm/mag_lib/tri_gate.mag deleted file mode 100644 index bda635c7..00000000 --- a/technology/scn3me_subm/mag_lib/tri_gate.mag +++ /dev/null @@ -1,98 +0,0 @@ -magic -tech scmos -timestamp 1536089695 -<< nwell >> -rect -2 45 38 73 -<< pwell >> -rect -2 0 38 45 -<< ntransistor >> -rect 9 27 11 31 -rect 17 27 19 31 -rect 25 27 27 31 -<< ptransistor >> -rect 9 53 11 61 -rect 17 53 19 61 -rect 25 53 27 61 -<< ndiffusion >> -rect 8 27 9 31 -rect 11 27 12 31 -rect 16 27 17 31 -rect 19 27 20 31 -rect 24 27 25 31 -rect 27 27 28 31 -<< pdiffusion >> -rect 8 53 9 61 -rect 11 53 12 61 -rect 16 53 17 61 -rect 19 53 20 61 -rect 24 53 25 61 -rect 27 53 28 61 -<< ndcontact >> -rect 4 27 8 31 -rect 12 27 16 31 -rect 20 27 24 31 -rect 28 27 32 31 -<< pdcontact >> -rect 4 53 8 61 -rect 12 53 16 61 -rect 20 53 24 61 -rect 28 53 32 61 -<< psubstratepcontact >> -rect 12 19 16 23 -<< nsubstratencontact >> -rect 12 65 16 69 -<< polysilicon >> -rect 25 63 35 65 -rect 9 61 11 63 -rect 17 61 19 63 -rect 25 61 27 63 -rect 9 50 11 53 -rect 9 31 11 46 -rect 17 42 19 53 -rect 25 51 27 53 -rect 17 31 19 38 -rect 25 31 27 33 -rect 9 25 11 27 -rect 17 25 19 27 -rect 25 16 27 27 -rect 33 8 35 63 -rect 32 6 35 8 -<< polycontact >> -rect 9 46 13 50 -rect 16 38 20 42 -rect 25 12 29 16 -rect 28 4 32 8 -<< metal1 >> -rect 16 65 23 69 -rect 12 61 16 65 -rect 3 53 4 61 -rect 3 42 6 53 -rect 13 46 15 50 -rect 3 38 16 42 -rect 3 31 6 38 -rect 29 31 32 53 -rect 3 27 4 31 -rect 12 23 16 27 -rect 16 19 24 23 -rect 0 12 25 16 -rect 29 12 36 16 -rect 0 4 28 8 -rect 32 4 36 8 -<< m2contact >> -rect 23 65 27 69 -rect 15 46 19 50 -rect 25 34 29 38 -rect 24 19 28 23 -<< metal2 >> -rect 15 34 25 38 -rect 15 0 19 34 -<< bb >> -rect 0 0 34 73 -<< labels >> -rlabel metal1 0 12 0 12 3 en -rlabel metal1 0 4 0 4 2 en_bar -rlabel metal2 16 1 16 1 1 out -rlabel m2contact 26 21 26 21 1 gnd -rlabel m2contact 25 67 25 67 1 vdd -rlabel m2contact 17 48 17 48 1 in -<< end >> diff --git a/technology/scn3me_subm/mag_lib/write_driver.mag b/technology/scn3me_subm/mag_lib/write_driver.mag deleted file mode 100644 index ab2014aa..00000000 --- a/technology/scn3me_subm/mag_lib/write_driver.mag +++ /dev/null @@ -1,224 +0,0 @@ -magic -tech scmos -timestamp 1536089714 -<< nwell >> -rect -3 101 37 138 -rect -3 0 37 51 -<< pwell >> -rect -3 138 37 202 -rect -3 51 37 101 -<< ntransistor >> -rect 9 177 11 189 -rect 17 177 19 189 -rect 15 162 27 164 -rect 9 144 11 148 -rect 17 144 19 148 -rect 10 82 12 89 -rect 18 82 20 89 -rect 8 57 10 64 -rect 16 57 18 64 -rect 24 60 26 64 -<< ptransistor >> -rect 9 125 11 132 -rect 17 125 19 132 -rect 10 107 12 114 -rect 18 107 20 114 -rect 8 38 10 45 -rect 16 38 18 45 -rect 24 38 26 45 -<< ndiffusion >> -rect 8 177 9 189 -rect 11 177 12 189 -rect 16 177 17 189 -rect 19 177 20 189 -rect 15 164 27 165 -rect 15 161 27 162 -rect 12 157 15 160 -rect 12 156 16 157 -rect 8 144 9 148 -rect 11 144 12 148 -rect 16 144 17 148 -rect 19 144 20 148 -rect 9 82 10 89 -rect 12 82 13 89 -rect 17 82 18 89 -rect 20 82 21 89 -rect 25 82 26 86 -rect 7 57 8 64 -rect 10 57 11 64 -rect 15 57 16 64 -rect 18 57 19 64 -rect 23 60 24 64 -rect 26 60 27 64 -<< pdiffusion >> -rect 8 125 9 132 -rect 11 125 12 132 -rect 16 125 17 132 -rect 19 125 20 132 -rect 12 122 16 125 -rect 9 107 10 114 -rect 12 107 13 114 -rect 17 107 18 114 -rect 20 107 21 114 -rect 7 38 8 45 -rect 10 38 11 45 -rect 15 38 16 45 -rect 18 38 19 45 -rect 23 38 24 45 -rect 26 38 27 45 -rect 3 35 7 38 -<< ndcontact >> -rect 4 177 8 189 -rect 12 177 16 189 -rect 20 177 24 189 -rect 15 165 27 169 -rect 15 157 27 161 -rect 4 144 8 148 -rect 12 144 16 148 -rect 20 144 24 148 -rect 5 82 9 89 -rect 13 82 17 89 -rect 21 82 25 89 -rect 3 57 7 64 -rect 11 57 15 64 -rect 19 57 23 64 -rect 27 60 31 64 -<< pdcontact >> -rect 4 125 8 132 -rect 12 125 16 132 -rect 20 125 24 132 -rect 5 107 9 114 -rect 13 107 17 114 -rect 21 107 25 114 -rect 3 38 7 45 -rect 11 38 15 45 -rect 19 38 23 45 -rect 27 38 31 45 -<< psubstratepcontact >> -rect 12 152 16 156 -rect 26 82 30 86 -<< nsubstratencontact >> -rect 12 118 16 122 -rect 3 31 7 35 -<< polysilicon >> -rect 9 194 30 196 -rect 9 189 11 194 -rect 17 189 19 191 -rect 28 185 30 194 -rect 9 175 11 177 -rect 17 172 19 177 -rect 6 170 19 172 -rect 6 167 8 170 -rect 13 162 15 164 -rect 27 162 33 164 -rect 9 148 11 150 -rect 17 148 19 150 -rect 9 132 11 144 -rect 17 132 19 144 -rect 9 124 11 125 -rect 2 122 11 124 -rect 17 124 19 125 -rect 17 122 28 124 -rect 2 75 4 122 -rect 10 114 12 116 -rect 18 114 20 116 -rect 10 89 12 107 -rect 18 106 20 107 -rect 16 104 20 106 -rect 16 92 18 104 -rect 26 100 28 122 -rect 27 96 28 100 -rect 16 90 20 92 -rect 18 89 20 90 -rect 10 81 12 82 -rect 10 79 13 81 -rect 2 71 3 75 -rect 11 71 13 79 -rect 18 79 20 82 -rect 18 77 23 79 -rect 31 71 33 162 -rect 11 69 33 71 -rect 11 67 13 69 -rect 8 65 13 67 -rect 8 64 10 65 -rect 16 64 18 66 -rect 24 64 26 66 -rect 8 45 10 57 -rect 16 52 18 57 -rect 24 52 26 60 -rect 16 50 26 52 -rect 16 45 18 50 -rect 24 45 26 50 -rect 8 28 10 38 -rect 16 14 18 38 -rect 24 36 26 38 -<< polycontact >> -rect 28 181 32 185 -rect 4 163 8 167 -rect 23 96 27 100 -rect 3 71 7 75 -rect 23 75 27 79 -rect 7 24 11 28 -rect 15 10 19 14 -<< metal1 >> -rect 5 192 10 196 -rect 5 189 8 192 -rect 32 181 33 185 -rect 13 169 16 177 -rect 13 165 15 169 -rect 4 148 8 163 -rect 12 157 15 161 -rect 12 156 16 157 -rect 12 148 16 152 -rect 4 132 8 144 -rect 20 142 24 144 -rect 30 142 33 181 -rect 20 138 33 142 -rect 20 132 24 138 -rect 12 122 16 125 -rect 13 114 17 118 -rect 5 104 9 107 -rect 21 104 25 107 -rect 5 101 25 104 -rect 5 89 9 101 -rect 21 100 25 101 -rect 21 96 23 100 -rect 25 82 26 90 -rect 4 64 7 71 -rect 27 64 31 79 -rect 3 51 7 57 -rect 3 48 15 51 -rect 11 45 15 48 -rect 27 45 31 60 -rect 3 35 7 38 -rect 19 35 23 38 -rect 7 31 19 35 -rect 0 24 7 28 -rect 11 24 36 28 -<< m2contact >> -rect 10 192 14 196 -rect 20 189 24 193 -rect 23 153 27 157 -rect 16 118 20 122 -rect 26 86 30 90 -rect 19 64 23 68 -rect 19 31 23 35 -rect 15 6 19 10 -<< metal2 >> -rect 10 196 14 202 -rect 20 193 24 202 -rect 20 177 24 189 -rect 15 0 19 6 -<< bb >> -rect 0 0 34 202 -<< labels >> -rlabel metal2 15 1 15 1 1 din -rlabel metal1 2 25 2 25 3 en -rlabel metal2 12 200 12 200 5 bl -rlabel metal2 22 200 22 200 5 br -rlabel m2contact 21 66 21 66 1 gnd -rlabel m2contact 28 88 28 88 1 gnd -rlabel m2contact 21 33 21 33 1 vdd -rlabel m2contact 18 120 18 120 1 vdd -rlabel m2contact 25 155 25 155 1 gnd -<< end >> diff --git a/technology/scn3me_subm/models/ff/nmos.sp b/technology/scn3me_subm/models/ff/nmos.sp deleted file mode 100644 index 9711c533..00000000 --- a/technology/scn3me_subm/models/ff/nmos.sp +++ /dev/null @@ -1,10 +0,0 @@ -********************************************* -* Transistor Models -* Note: These models are approximate -* and should be substituted with actual -* models from MOSIS or SCN3ME -********************************************* - -.MODEL n NMOS (LEVEL=49 VTHO=0.669845 -+ NSUB=6E16 U0=461 K1=0.5705 TOX=13.9n VERSION=3.3.0) - diff --git a/technology/scn3me_subm/models/ff/pmos.sp b/technology/scn3me_subm/models/ff/pmos.sp deleted file mode 100644 index e08967e4..00000000 --- a/technology/scn3me_subm/models/ff/pmos.sp +++ /dev/null @@ -1,9 +0,0 @@ -********************************************* -* Transistor Models -* Note: These models are approximate -* and should be substituted with actual -* models from MOSIS or SCN3ME -********************************************* - -.MODEL p PMOS (LEVEL=49 VTHO=-0.322431 -+ NSUB=6E16 U0=212 K1=0.0821 TOX=13.9n VERSION=3.3.0) diff --git a/technology/scn3me_subm/models/nom/nmos.sp b/technology/scn3me_subm/models/nom/nmos.sp deleted file mode 100644 index 59f88cfd..00000000 --- a/technology/scn3me_subm/models/nom/nmos.sp +++ /dev/null @@ -1,9 +0,0 @@ -********************************************* -* Transistor Models -* Note: These models are approximate -* and should be substituted with actual -* models from MOSIS or SCN3ME -********************************************* - -.MODEL n NMOS (LEVEL=49 VTHO=0.669845 -+ NSUB=6E16 U0=458 K1=0.5705 TOX=13.9n VERSION=3.3.0) diff --git a/technology/scn3me_subm/models/nom/pmos.sp b/technology/scn3me_subm/models/nom/pmos.sp deleted file mode 100644 index 69f3aacd..00000000 --- a/technology/scn3me_subm/models/nom/pmos.sp +++ /dev/null @@ -1,9 +0,0 @@ -********************************************* -* Transistor Models -* Note: These models are approximate -* and should be substituted with actual -* models from MOSIS or SCN3ME -********************************************* - -.MODEL p PMOS (LEVEL=49 VTHO=-0.322431 -+ NSUB=6E16 U0=212 K1=0.0821 TOX=13.9n VERSION=3.3.0) diff --git a/technology/scn3me_subm/models/ss/nmos.sp b/technology/scn3me_subm/models/ss/nmos.sp deleted file mode 100644 index 4e8a531f..00000000 --- a/technology/scn3me_subm/models/ss/nmos.sp +++ /dev/null @@ -1,10 +0,0 @@ -********************************************* -* Transistor Models -* Note: These models are approximate -* and should be substituted with actual -* models from MOSIS or SCN3ME -********************************************* - -.MODEL n NMOS (LEVEL=49 VTHO=0.669845 -+ NSUB=6E16 U0=460 K1=0.5705 TOX=13.9n VERSION=3.3.0) - diff --git a/technology/scn3me_subm/models/ss/pmos.sp b/technology/scn3me_subm/models/ss/pmos.sp deleted file mode 100644 index e08967e4..00000000 --- a/technology/scn3me_subm/models/ss/pmos.sp +++ /dev/null @@ -1,9 +0,0 @@ -********************************************* -* Transistor Models -* Note: These models are approximate -* and should be substituted with actual -* models from MOSIS or SCN3ME -********************************************* - -.MODEL p PMOS (LEVEL=49 VTHO=-0.322431 -+ NSUB=6E16 U0=212 K1=0.0821 TOX=13.9n VERSION=3.3.0) diff --git a/technology/scn3me_subm/sp_lib/cell_6t.sp b/technology/scn3me_subm/sp_lib/cell_6t.sp deleted file mode 100644 index 76c40f31..00000000 --- a/technology/scn3me_subm/sp_lib/cell_6t.sp +++ /dev/null @@ -1,10 +0,0 @@ - -*********************** "cell_6t" ****************************** -.SUBCKT cell_6t bl br wl vdd gnd -M_1 Q Qb vdd vdd p W='0.9u' L=1.2u -M_2 Qb Q vdd vdd p W='0.9u' L=1.2u -M_3 br wl Qb gnd n W='1.2u' L=0.6u -M_4 bl wl Q gnd n W='1.2u' L=0.6u -M_5 Qb Q gnd gnd n W='2.4u' L=0.6u -M_6 Q Qb gnd gnd n W='2.4u' L=0.6u -.ENDS $ cell_6t diff --git a/technology/scn3me_subm/sp_lib/dff.sp b/technology/scn3me_subm/sp_lib/dff.sp deleted file mode 100644 index d3fa7635..00000000 --- a/technology/scn3me_subm/sp_lib/dff.sp +++ /dev/null @@ -1,27 +0,0 @@ -*********************** "dff" ****************************** -* Positive edge-triggered FF -.SUBCKT dff D Q clk vdd gnd -M0 vdd clk a_2_6# vdd p w=12u l=0.6u -M1 a_17_74# D vdd vdd p w=6u l=0.6u -M2 a_22_6# clk a_17_74# vdd p w=6u l=0.6u -M3 a_31_74# a_2_6# a_22_6# vdd p w=6u l=0.6u -M4 vdd a_34_4# a_31_74# vdd p w=6u l=0.6u -M5 a_34_4# a_22_6# vdd vdd p w=6u l=0.6u -M6 a_61_74# a_34_4# vdd vdd p w=6u l=0.6u -M7 a_66_6# a_2_6# a_61_74# vdd p w=6u l=0.6u -M8 a_76_84# clk a_66_6# vdd p w=3u l=0.6u -M9 vdd Q a_76_84# vdd p w=3u l=0.6u -M10 gnd clk a_2_6# gnd n w=6u l=0.6u -M11 Q a_66_6# vdd vdd p w=12u l=0.6u -M12 a_17_6# D gnd gnd n w=3u l=0.6u -M13 a_22_6# a_2_6# a_17_6# gnd n w=3u l=0.6u -M14 a_31_6# clk a_22_6# gnd n w=3u l=0.6u -M15 gnd a_34_4# a_31_6# gnd n w=3u l=0.6u -M16 a_34_4# a_22_6# gnd gnd n w=3u l=0.6u -M17 a_61_6# a_34_4# gnd gnd n w=3u l=0.6u -M18 a_66_6# clk a_61_6# gnd n w=3u l=0.6u -M19 a_76_6# a_2_6# a_66_6# gnd n w=3u l=0.6u -M20 gnd Q a_76_6# gnd n w=3u l=0.6u -M21 Q a_66_6# gnd gnd n w=6u l=0.6u - -.ENDS dff diff --git a/technology/scn3me_subm/sp_lib/ms_flop.sp b/technology/scn3me_subm/sp_lib/ms_flop.sp deleted file mode 100644 index abf664e7..00000000 --- a/technology/scn3me_subm/sp_lib/ms_flop.sp +++ /dev/null @@ -1,29 +0,0 @@ -*master-slave flip-flop with both output and inverted ouput - -.subckt dlatch din dout dout_bar clk clk_bar vdd gnd -*clk inverter -mPff1 clk_bar clk vdd vdd p W=1.8u L=0.6u m=1 -mNff1 clk_bar clk gnd gnd n W=0.9u L=0.6u m=1 - -*transmission gate 1 -mtmP1 din clk int1 vdd p W=1.8u L=0.6u m=1 -mtmN1 din clk_bar int1 gnd n W=0.9u L=0.6u m=1 - -*foward inverter -mPff3 dout_bar int1 vdd vdd p W=1.8u L=0.6u m=1 -mNff3 dout_bar int1 gnd gnd n W=0.9u L=0.6u m=1 - -*backward inverter -mPff4 dout dout_bar vdd vdd p W=1.8u L=0.6u m=1 -mNf4 dout dout_bar gnd gnd n W=0.9u L=0.6u m=1 - -*transmission gate 2 -mtmP2 int1 clk_bar dout vdd p W=1.8u L=0.6u m=1 -mtmN2 int1 clk dout gnd n W=0.9u L=0.6u m=1 -.ends dlatch - -.subckt ms_flop din dout dout_bar clk vdd gnd -xmaster din mout mout_bar clk clk_bar vdd gnd dlatch -xslave mout_bar dout_bar dout clk_bar clk_nn vdd gnd dlatch -.ends flop - diff --git a/technology/scn3me_subm/sp_lib/replica_cell_6t.sp b/technology/scn3me_subm/sp_lib/replica_cell_6t.sp deleted file mode 100644 index 1fa75a55..00000000 --- a/technology/scn3me_subm/sp_lib/replica_cell_6t.sp +++ /dev/null @@ -1,10 +0,0 @@ - -*********************** "cell_6t" ****************************** -.SUBCKT replica_cell_6t bl br wl vdd gnd -M_1 gnd net_2 vdd vdd p W='0.9u' L=1.2u -M_2 net_2 gnd vdd vdd p W='0.9u' L=1.2u -M_3 br wl net_2 gnd n W='1.2u' L=0.6u -M_4 bl wl gnd gnd n W='1.2u' L=0.6u -M_5 net_2 gnd gnd gnd n W='2.4u' L=0.6u -M_6 gnd net_2 gnd gnd n W='2.4u' L=0.6u -.ENDS $ replica_cell_6t diff --git a/technology/scn3me_subm/sp_lib/sense_amp.sp b/technology/scn3me_subm/sp_lib/sense_amp.sp deleted file mode 100644 index 1399228d..00000000 --- a/technology/scn3me_subm/sp_lib/sense_amp.sp +++ /dev/null @@ -1,12 +0,0 @@ -*********************** "sense_amp" ****************************** - -.SUBCKT sense_amp bl br dout en vdd gnd -M_1 dout net_1 vdd vdd p W='5.4*1u' L=0.6u -M_2 dout net_1 net_2 gnd n W='2.7*1u' L=0.6u -M_3 net_1 dout vdd vdd p W='5.4*1u' L=0.6u -M_4 net_1 dout net_2 gnd n W='2.7*1u' L=0.6u -M_5 bl en dout vdd p W='7.2*1u' L=0.6u -M_6 br en net_1 vdd p W='7.2*1u' L=0.6u -M_7 net_2 en gnd gnd n W='2.7*1u' L=0.6u -.ENDS sense_amp - diff --git a/technology/scn3me_subm/sp_lib/tri_gate.sp b/technology/scn3me_subm/sp_lib/tri_gate.sp deleted file mode 100644 index 0d298172..00000000 --- a/technology/scn3me_subm/sp_lib/tri_gate.sp +++ /dev/null @@ -1,13 +0,0 @@ -*********************** tri_gate ****************************** - -.SUBCKT tri_gate in out en en_bar vdd gnd - -M_1 net_2 in_inv gnd gnd n W='1.2*1u' L=0.6u -M_2 net_3 in_inv vdd vdd p W='2.4*1u' L=0.6u -M_3 out en_bar net_3 vdd p W='2.4*1u' L=0.6u -M_4 out en net_2 gnd n W='1.2*1u' L=0.6u -M_5 in_inv in vdd vdd p W='2.4*1u' L=0.6u -M_6 in_inv in gnd gnd n W='1.2*1u' L=0.6u - - -.ENDS diff --git a/technology/scn3me_subm/sp_lib/write_driver.sp b/technology/scn3me_subm/sp_lib/write_driver.sp deleted file mode 100644 index 88f80361..00000000 --- a/technology/scn3me_subm/sp_lib/write_driver.sp +++ /dev/null @@ -1,38 +0,0 @@ -*********************** Write_Driver ****************************** -.SUBCKT write_driver din bl br en vdd gnd - -**** Inverter to conver Data_in to data_in_bar ****** -* din_bar = inv(din) -M_1 din_bar din gnd gnd n W=1.2u L=0.6u -M_2 din_bar din vdd vdd p W=2.1u L=0.6u - -**** 2input nand gate follwed by inverter to drive BL ****** -* din_bar_gated = nand(en, din) -M_3 din_bar_gated en net_7 gnd n W=2.1u L=0.6u -M_4 net_7 din gnd gnd n W=2.1u L=0.6u -M_5 din_bar_gated en vdd vdd p W=2.1u L=0.6u -M_6 din_bar_gated din vdd vdd p W=2.1u L=0.6u -* din_bar_gated_bar = inv(din_bar_gated) -M_7 din_bar_gated_bar din_bar_gated vdd vdd p W=2.1u L=0.6u -M_8 din_bar_gated_bar din_bar_gated gnd gnd n W=1.2u L=0.6u - -**** 2input nand gate follwed by inverter to drive BR****** -* din_gated = nand(en, din_bar) -M_9 din_gated en vdd vdd p W=2.1u L=0.6u -M_10 din_gated en net_8 gnd n W=2.1u L=0.6u -M_11 net_8 din_bar gnd gnd n W=2.1u L=0.6u -M_12 din_gated din_bar vdd vdd p W=2.1u L=0.6u -* din_gated_bar = inv(din_gated) -M_13 din_gated_bar din_gated vdd vdd p W=2.1u L=0.6u -M_14 din_gated_bar din_gated gnd gnd n W=1.2u L=0.6u - -************************************************ -* pull down with en enable -M_15 bl din_gated_bar net_5 gnd n W=3.6u L=0.6u -M_16 br din_bar_gated_bar net_5 gnd n W=3.6u L=0.6u -M_17 net_5 en gnd gnd n W=3.6u L=0.6u - - - -.ENDS $ write_driver - diff --git a/technology/scn3me_subm/sue_lib/cell_6t.sue b/technology/scn3me_subm/sue_lib/cell_6t.sue deleted file mode 100644 index 427b1d05..00000000 --- a/technology/scn3me_subm/sue_lib/cell_6t.sue +++ /dev/null @@ -1,46 +0,0 @@ -# SUE version MMI_SUE5.0.7 - -proc SCHEMATIC_cell_6t {} { - make inout -name BL -origin {190 360} - make inout -name BR -origin {830 360} - make input -name WL -origin {240 120} - make global -orient RXY -name vdd -origin {520 160} - make global -name gnd -origin {510 600} - make pmos -orient RY -W 0.9u -L 1.2u -origin {630 230} - make pmos -orient RXY -W 0.9u -L 1.2u -origin {400 230} - make nmos -orient R90 -W 1.2 -L 0.6u -origin {740 360} - make nmos -orient R90X -W 1.2 -L 0.6u -origin {270 360} - make nmos -W 2.4u -L 0.6u -origin {630 490} - make nmos -orient RX -W 2.4u -L 0.6u -origin {400 490} - make_wire 630 550 630 530 - make_wire 400 530 400 550 - make_wire 400 190 400 170 - make_wire 630 170 630 190 - make_wire 400 360 400 270 - make_wire 310 360 400 360 - make_wire 630 360 630 450 - make_wire 630 360 700 360 - make_wire 270 300 270 120 - make_wire 270 120 740 120 - make_wire 740 120 740 300 - make_wire 230 360 190 360 - make_wire 780 360 830 360 - make_wire 510 550 400 550 - make_wire 510 550 630 550 - make_wire 510 550 510 600 - make_wire 520 170 400 170 - make_wire 520 170 630 170 - make_wire 520 160 520 170 - make_wire 240 120 270 120 - make_wire 460 290 630 290 - make_wire 460 290 460 490 - make_wire 460 290 460 230 - make_wire 630 290 630 360 - make_wire 630 290 630 270 - make_wire 570 420 400 420 - make_wire 570 420 570 490 - make_wire 570 420 570 230 - make_wire 400 420 400 360 - make_wire 400 420 400 450 -} - diff --git a/technology/scn3me_subm/sue_lib/ms_flop.sue b/technology/scn3me_subm/sue_lib/ms_flop.sue deleted file mode 100644 index 85cc8e03..00000000 --- a/technology/scn3me_subm/sue_lib/ms_flop.sue +++ /dev/null @@ -1,84 +0,0 @@ -# SUE version MMI_SUE5.0.7 - -proc SCHEMATIC_ms_flop {} { - make pmos -orient R90X -W 1.8u -L 0.6u -origin {40 250} - make nmos -orient R270 -W 0.9u -L 0.6u -origin {40 380} - make inverter -WP 1.8u -LP 0.6u -WN 0.9u -LN 0.6u -origin {-270 540} - make inverter -WP 1.8u -LP 0.6u -WN 0.9u -LN 0.6u -origin {310 310} - make inverter -orient RX -WP 1.8u -LP 0.6u -WN 0.9u -LN 0.6u -origin {430 730} - make pmos -orient R90X -W 1.8u -L 0.6u -origin {190 670} - make nmos -orient R270 -W 0.9u -L 0.6u -origin {190 780} - make input -name clk -origin {-380 540} - make input -name din -origin {-370 320} - make pmos -orient R90X -W 1.8u -L 0.6u -origin {720 250} - make nmos -orient R270 -W 0.9u -L 0.6u -origin {720 380} - make inverter -WP 1.8u -LP 0.6u -WN 0.9u -LN 0.6u -origin {990 310} - make pmos -orient R90X -W 1.8u -L 0.6u -origin {870 670} - make nmos -orient R270 -W 0.9u -L 0.6u -origin {870 780} - make inverter -WP 1.8u -LP 0.6u -WN 0.9u -LN 0.6u -origin {620 540} - make output -name dout -origin {1410 310} - make output -name dout_bar -origin {1430 930} - make inverter -orient RX -WP 1.8u -LP 0.6u -WN 0.9u -LN 0.6u -origin {1110 730} - make_wire -330 160 40 160 - make_wire 40 160 40 190 - make_wire -370 320 0 320 - make_wire 360 310 480 310 - make_wire 460 730 480 730 - make_wire 230 730 380 730 - make_wire 100 310 100 720 - make_wire 100 720 150 720 - make_wire 100 310 80 310 - make_wire 100 310 280 310 - make_wire 0 250 0 320 - make_wire 0 320 0 380 - make_wire 80 250 80 310 - make_wire 80 310 80 380 - make_wire 40 440 40 540 - make_wire -330 840 190 840 - make_wire 230 670 230 730 - make_wire 230 730 230 780 - make_wire 150 670 150 720 - make_wire 150 720 150 780 - make_wire 190 540 190 610 - make_wire -330 540 -330 840 - make_wire -220 540 40 540 - make_wire 40 540 190 540 - make_wire -380 540 -330 540 - make_wire -330 540 -300 540 - make_wire -330 540 -330 160 - make_wire 720 160 720 190 - make_wire 1140 730 1160 730 - make_wire 780 310 780 720 - make_wire 780 720 830 720 - make_wire 780 310 760 310 - make_wire 780 310 960 310 - make_wire 680 320 680 380 - make_wire 760 250 760 310 - make_wire 760 310 760 380 - make_wire 720 440 720 540 - make_wire 910 670 910 730 - make_wire 910 730 910 780 - make_wire 830 670 830 720 - make_wire 830 720 830 780 - make_wire 870 540 870 610 - make_wire 720 540 870 540 - make_wire 670 540 720 540 - make_wire 480 310 480 730 - make_wire 1160 310 1160 730 - make_wire 530 540 530 160 - make_wire 530 160 720 160 - make_wire 530 540 190 540 - make_wire 530 540 590 540 - make_wire 530 540 530 840 - make_wire 530 840 870 840 - make_wire 680 310 480 310 - make_wire 680 310 680 250 - make_wire 680 310 680 320 - make_wire 950 730 910 730 - make_wire 950 730 1060 730 - make_wire 1040 310 1160 310 - make_wire 1160 310 1410 310 - make_wire 950 930 1430 930 - make_wire 950 730 950 930 -} - diff --git a/technology/scn3me_subm/sue_lib/replica_cell_6t.sue b/technology/scn3me_subm/sue_lib/replica_cell_6t.sue deleted file mode 100644 index 56e72056..00000000 --- a/technology/scn3me_subm/sue_lib/replica_cell_6t.sue +++ /dev/null @@ -1,49 +0,0 @@ -# SUE version MMI_SUE5.0.7 - -proc SCHEMATIC_replica_cell_6t {} { - make inout -name BL -origin {190 360} - make inout -name BR -origin {830 360} - make input -name WL -origin {240 120} - make global -orient RXY -name vdd -origin {520 160} - make global -name gnd -origin {510 600} - make pmos -orient RY -W 0.9u -L 1.2u -origin {630 230} - make pmos -orient RXY -W 0.9u -L 1.2u -origin {400 230} - make nmos -orient R90 -W 1.2 -L 0.6u -origin {740 360} - make nmos -orient R90X -W 1.2 -L 0.6u -origin {270 360} - make nmos -W 2.4u -L 0.6u -origin {630 490} - make nmos -orient RX -W 2.4u -L 0.6u -origin {400 490} - make_wire 630 550 630 530 - make_wire 400 530 400 550 - make_wire 400 190 400 170 - make_wire 630 170 630 190 - make_wire 400 360 400 270 - make_wire 630 360 630 450 - make_wire 630 360 700 360 - make_wire 270 300 270 120 - make_wire 270 120 740 120 - make_wire 740 120 740 300 - make_wire 230 360 190 360 - make_wire 780 360 830 360 - make_wire 510 550 400 550 - make_wire 510 550 630 550 - make_wire 510 550 510 600 - make_wire 520 170 400 170 - make_wire 520 170 630 170 - make_wire 520 160 520 170 - make_wire 240 120 270 120 - make_wire 460 290 630 290 - make_wire 460 290 460 490 - make_wire 460 290 460 230 - make_wire 630 290 630 360 - make_wire 630 290 630 270 - make_wire 570 420 400 420 - make_wire 570 420 570 490 - make_wire 570 420 570 230 - make_wire 400 420 400 360 - make_wire 400 420 400 450 - make_wire 320 360 320 550 - make_wire 320 550 400 550 - make_wire 320 360 310 360 - make_wire 320 360 400 360 -} - diff --git a/technology/scn3me_subm/sue_lib/sense_amp.sue b/technology/scn3me_subm/sue_lib/sense_amp.sue deleted file mode 100644 index 4d29e11a..00000000 --- a/technology/scn3me_subm/sue_lib/sense_amp.sue +++ /dev/null @@ -1,52 +0,0 @@ -# SUE version MMI_SUE5.0.7 - -proc SCHEMATIC_sense_amp {} { - make inout -name BL -origin {260 10} - make global -orient RXY -name vdd -origin {490 170} - make global -name gnd -origin {480 660} - make input -name sclk -origin {180 610} - make nmos -W 3.9u -L 0.6u -origin {600 500} - make nmos -orient RX -W 3.9u -L 0.6u -origin {370 500} - make pmos -orient RY -W 3u -L 0.6u -origin {600 240} - make pmos -orient RXY -W 3u -L 0.6u -origin {370 240} - make nmos -W 3.9u -L 0.6u -origin {480 610} - make inout -name BR -origin {710 20} - make pmos -W 3.9u -L 0.6u -origin {710 90} - make pmos -orient RX -W 3.9u -L 0.6u -origin {260 90} - make output -orient RXY -name dout -origin {110 370} - make_wire 600 560 600 540 - make_wire 370 540 370 560 - make_wire 370 200 370 180 - make_wire 600 180 600 200 - make_wire 490 180 370 180 - make_wire 490 180 600 180 - make_wire 490 170 490 180 - make_wire 430 300 600 300 - make_wire 430 300 430 500 - make_wire 430 300 430 240 - make_wire 600 300 600 280 - make_wire 540 430 370 430 - make_wire 540 430 540 500 - make_wire 540 430 540 240 - make_wire 370 430 370 460 - make_wire 480 560 600 560 - make_wire 480 560 370 560 - make_wire 480 560 480 570 - make_wire 480 650 480 660 - make_wire 420 610 180 610 - make_wire 650 90 320 90 - make_wire 600 360 710 360 - make_wire 710 360 710 130 - make_wire 600 360 600 300 - make_wire 600 360 600 460 - make_wire 370 370 260 370 - make_wire 260 370 260 130 - make_wire 370 370 370 430 - make_wire 370 370 370 280 - make_wire 260 10 260 50 - make_wire 710 20 710 50 - make_wire 320 90 180 90 - make_wire 180 90 180 610 - make_wire 110 370 260 370 -} - diff --git a/technology/scn3me_subm/sue_lib/tri_gate.sue b/technology/scn3me_subm/sue_lib/tri_gate.sue deleted file mode 100644 index d296171f..00000000 --- a/technology/scn3me_subm/sue_lib/tri_gate.sue +++ /dev/null @@ -1,37 +0,0 @@ -# SUE version MMI_SUE5.0.7 - -proc SCHEMATIC_tri_gate {} { - make global -orient RXY -name vdd -origin {630 150} - make global -name gnd -origin {630 570} - make input -name tri_in -origin {320 340} - make output -name tri_out -origin {690 360} - make input -name en -origin {570 410} - make input -name en_bar -origin {570 310} - make nmos -W 1.2u -L 0.6u -origin {630 490} - make nmos -W 1.2u -L 0.6u -origin {630 410} - make pmos -orient RY -W 2.4u -L 0.6u -origin {630 310} - make pmos -orient RY -W 2.4u -L 0.6u -origin {630 230} - make pmos -orient RY -W 2.4u -L 0.6u -origin {380 290} - make nmos -W 1.2u -L 0.6u -origin {380 400} - make_wire 570 490 470 490 - make_wire 470 230 570 230 - make_wire 630 550 380 550 - make_wire 380 550 380 440 - make_wire 630 550 630 570 - make_wire 630 550 630 530 - make_wire 630 170 380 170 - make_wire 380 170 380 250 - make_wire 630 170 630 190 - make_wire 630 170 630 150 - make_wire 320 340 320 400 - make_wire 320 340 320 290 - make_wire 380 340 470 340 - make_wire 380 340 380 330 - make_wire 380 340 380 360 - make_wire 470 340 470 490 - make_wire 470 340 470 230 - make_wire 630 360 630 350 - make_wire 630 360 630 370 - make_wire 630 360 690 360 -} - diff --git a/technology/scn3me_subm/sue_lib/write_driver.sue b/technology/scn3me_subm/sue_lib/write_driver.sue deleted file mode 100644 index de3909a7..00000000 --- a/technology/scn3me_subm/sue_lib/write_driver.sue +++ /dev/null @@ -1,44 +0,0 @@ -# SUE version MMI_SUE5.0.7 - -proc SCHEMATIC_write_driver {} { - make inout -name BL -origin {550 260} - make inout -name BR -origin {830 250} - make inverter -WP 2.1u -LP 0.6u -WN 1.2u -LN 0.6u -origin {280 520} - make nand2 -WP 2.1u -WN 2.1u -origin {90 360} - make inverter -WP 2.1u -LP 0.6u -WN 1.2u -LN 0.6u -origin {270 360} - make nmos -W 3.6u -L 0.6u -origin {830 410} - make nmos -W 3.6u -L 0.6u -origin {710 610} - make global -name gnd -origin {710 690} - make nand2 -WP 2.1u -WN 2.1u -origin {90 520} - make nmos -W 3.6u -L 0.6u -origin {550 410} - make input -name wen -origin {-290 340} - make input -name din -origin {-290 380} - make inverter -WP 2.1u -LP 0.6u -WN 1.2u -LN 0.6u -origin {-80 540} - make_wire 160 360 240 360 - make_wire 830 250 830 370 - make_wire 550 260 550 370 - make_wire 550 450 550 560 - make_wire 550 560 710 560 - make_wire 710 560 710 570 - make_wire 710 560 830 560 - make_wire 830 560 830 450 - make_wire 710 650 710 690 - make_wire 250 520 160 520 - make_wire 770 410 770 520 - make_wire 770 520 330 520 - make_wire 320 360 490 360 - make_wire 490 360 490 410 - make_wire -180 380 -290 380 - make_wire -180 380 70 380 - make_wire -180 540 -110 540 - make_wire -180 380 -180 540 - make_wire -30 540 70 540 - make_wire 20 340 20 500 - make_wire 20 500 70 500 - make_wire 20 340 70 340 - make_wire -240 340 -240 610 - make_wire -240 610 650 610 - make_wire -240 340 20 340 - make_wire -240 340 -290 340 -} - diff --git a/technology/scn3me_subm/tech/README b/technology/scn3me_subm/tech/README deleted file mode 100644 index 0d923fcb..00000000 --- a/technology/scn3me_subm/tech/README +++ /dev/null @@ -1,10 +0,0 @@ -The file SCN3ME_SUBM.30.tech is from qflow 1.2 and has the following -license information: ---------------------------------------------------------------- -Tim Edwards -Open Circuit Design -v1.0 April 2013 -v1.1 May 2015 -v1.2 April 2017 ---------------------------------------------------------------- -GPL Copyright (c) 2017 diff --git a/technology/scn3me_subm/tech/SCN3ME_SUBM.30.tech b/technology/scn3me_subm/tech/SCN3ME_SUBM.30.tech deleted file mode 100644 index be511001..00000000 --- a/technology/scn3me_subm/tech/SCN3ME_SUBM.30.tech +++ /dev/null @@ -1,7891 +0,0 @@ -tech - format 32 - scmos -end - -version - version 2002a - description "SCMOS: Submit as technology.lambda: SCN3ME_SUBM.30 [to process: AMIc5]" -end - -planes - well,w - implant,i - select,s - cap,c - active,a - metal1,m1 - metal2,m2 - metal3,m3 - oxide,ox - comment - xp - contact - via1,v1 - via2,v2 - fill -end - -types - well nwell,nw - well pwell,pw - implant n_field_implant,nfi - implant p_field_implant,pfi - select nselect,ns - select pselect,ps - cap electrode,poly2,el,p2 - cap electrodecontact,poly2contact,poly2c,p2c,elc - cap p2m12contact,p2m12c - cap electrodecap,ecap,poly2cap,p2cap,pcap - contact genericpoly2contact,gc2 - active ntransistor,nfet - active ptransistor,pfet - active diffusion,diff - active transistor,fet - active ndiffusion,ndif,green - active pdiffusion,pdif,brown - active ndcontact,ndc - active pdcontact,pdc - active psubstratepdiff,pohmicdiff,pod,ppdiff,ppd,psd - active nsubstratendiff,nohmicdiff,nod,nndiff,nnd,nsd - active psubstratepcontact,pohmiccontact,poc,pwcontact,pwc,psc - active nsubstratencontact,nohmiccontact,noc,nwcontact,nwc,nsc - active polysilicon,red,poly,p - active polycontact,pcontact,polycut,pc - contact genericcontact,gcontact,gc - metal1 metal1,m1,blue - metal1 pseudo_rmetal1,prm1 - metal1 rmetal1,rm1 - metal1 fillm1,fm1 - metal1 m2contact,m2cut,m2c,via1,v1 - metal2 metal2,m2,purple - metal2 pseudo_rmetal2,prm2 - metal2 rmetal2,rm2 - metal2 fillm2,fm2 - via1 gv1 - metal2 m3contact,m3cut,m3c,via2,v2 - metal3 metal3,m3,cyan - metal3 pseudo_rmetal3,prm3 - metal3 rmetal3,rm3 - metal3 fillm3,fm3 - via2 gv2 - metal3 pad - oxide glass - cap high_resist,hr - cap poly2_high_resist,phr - active pseudo_rpoly,prp - active rpoly,rp - cap pseudo_rpoly2,prp2 - cap rpoly2,rp2 - active pseudo_rndiffusion,prnd - active rndiffusion,rndiff,rnd - active pseudo_rpdiffusion,prpd - active rpdiffusion,rpdiff,rpd - active pseudo_rnwell,prnwell,prnw - active rnwell,rnw - implant filln,fn - fill filla,fa - fill fillb,fb - active fillp,fp - active fillapm,fapm - xp xp - xp m1p - xp m2p - xp m3p - comment comment - comment bb -end - -contact - pc poly metal1 - ndc ndiff metal1 - pdc pdiff metal1 - nsc nsd metal1 - psc psd metal1 - m2c metal1 metal2 - m3c metal2 metal3 - stackable pc m2c pm12contact,pm12c - stackable pdc m2c pdm12contact,pdm12c - stackable psc m2c psm12contact,psm12c,pom12c,pwm12c - stackable ndc m2c ndm12contact,ndm12c - stackable nsc m2c nsm12contact,nsm12c,nom12c,nwm12c - stackable m2c m3c m123contact,m123c -end - -styles - styletype mos - nwell 12 - pwell 13 - nfi 53 - pfi 54 - nselect 43 - pselect 44 - diff 25 - tran 2 4 - ndiff 2 - pdiff 4 - nsd 3 - psd 5 - nfet 6 7 - pfet 8 9 - ndc 2 20 32 - pdc 4 20 32 - nsc 3 20 32 - psc 5 20 32 - poly 1 - pcontact 1 20 32 - gc 32 - metal1 20 - rm1 20 48 - prm1 48 - m1p 20 34 - fm1 20 34 - fp 1 34 - fa 32 - fb 45 34 - fn 45 34 - fapm 1 20 21 34 - gv1 55 - m2contact 20 21 55 - p2m12contact 14 20 21 32 55 - metal2 21 - rm2 21 48 - prm2 48 - m2p 21 34 - fm2 21 34 - gv2 56 - m3contact 21 22 56 - metal3 22 - rm3 22 48 - prm3 48 - m3p 22 34 - fm3 22 34 - pad 22 23 34 38 - glass 34 - xp 25 34 - ecap 10 14 - poly2 14 - p2c 14 20 32 - gc2 19 - hr 10 - phr 14 48 - rp 47 48 - prp 48 - rp2 14 48 - prp2 48 - rnd 2 48 - prnd 48 - rpd 4 53 - prpd 53 - rnw 12 53 - prnw 54 - comment 45 - bb 32 - error_p 42 - error_s 42 - error_ps 42 - magnet 54 - rotate 57 - fence 59 -end - -compose - compose nfet poly ndiff - compose pfet poly pdiff - paint diff nselect ndiff - paint diff pselect pdiff - compose tran poly diff - paint tran nselect nfet - paint tran pselect pfet - paint psd ns ndiff - paint nsd ps pdiff - paint ndiff ps psd - paint pdiff ns nsd - paint pad m1 pad - paint pad m2 pad - paint pad m2c pad - paint pfi nwell nfi - paint nfi pwell pfi - paint ndc nwell pdc - paint nfet nwell pfet - paint ndiff nwell pdiff - paint psd nwell nsd - paint psc nwell nsc - paint pdc pwell ndc - paint pfet pwell nfet - paint pdiff pwell ndiff - paint nsd pwell psd - paint nsc pwell psc - paint poly2 poly ecap - erase ecap poly poly2 - paint p2c poly2 p2c - paint p2c ecap p2c - paint p2m12c poly2 p2m12c - paint p2m12c ecap p2m12c - paint pad m3 pad - compose phr poly2 hr - paint hr poly2 phr - paint poly2 hr phr - erase phr hr poly2 -#CRE/CRM - compose rm1 prm1 m1 - compose rm2 prm2 m2 - compose rm3 prm3 m3 - compose rp prp poly - compose rp2 prp2 poly2 - compose rnd prnd ndiff - compose rpd prpd pdiff - paint nwell rnw space - paint nwell prnw space - paint poly fp fp - paint m1 fm1 fm1 - paint m2 fm2 fm2 - paint m3 fm3 fm3 -end - -connect - nwell,nsc/a,nsd nwell,nsc/a,nsd - pwell,psc/a,psd pwell,psc/a,psd - m1,fm1,fapm,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 m1,fm1,fapm,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 - m2,fm2,fapm,m2c/m2,m3c/m2,m3c/m2 m2,fm2,fapm,m2c/m2,m3c/m2,m3c/m2 - m3,fm3,fapm,m3c/m3 m3,fm3,fapm,m3c/m3 - ndiff,ndc/a,pdiff,pdc/a ndiff,ndc/a,pdiff,pdc/a - poly,fp,nfet,pfet,fet,fapm,pc/a poly,fp,nfet,pfet,fet,fapm,pc/a - gc2 poly2,ecap,metal1 - p2c poly2,ecap,m1,fm1,fapm,m2c/m1 - p2m12c poly2,ecap,m1,fm1,fapm,m2c/m1,m2,fm2,fapm,m2c/m2,m3c/m2 - poly2,ecap,p2c,p2m12c poly2,ecap,p2c,p2m12c - gc2 poly2,ecap,m1,fm1,fapm,m2c/m1 - gc poly,fp,ndiff,pdiff,nsd,psd,m1,fm1,fapm,m2c/m1 - gv1 m1,fm1,fapm,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2,fm2,fapm,m3c/m2 - gv2 m2,fm2,fapm,m2c/m2,m3c/m2,m3,fm3,fapm - pad m1,fm1,m2,fm2,m3,fm3 - rm1 prm1 - rm2 prm2 - rm3 prm3 - rnw prnw - rp prp - rp2 prp2 - rnd prnd - rpd prpd - phr hr -end - -cifoutput - -style lambda=0.30(p) - scalefactor 30 15 - - # This is a custom section to add bounding boxes in OpenRAM - layer BB bb - labels bb - calma 63 0 - - layer CWN nwell,rnw - bloat-or pdiff,rpd,pdc/a,pfet * 180 - bloat-or nsd,nsc/a * 90 - bloat-or nfi * 120 - grow 90 - shrink 90 - labels nwell,rnw - calma 42 0 - - layer CWP pwell - bloat-or ndiff,rnd,ndc/a,nfet * 180 - bloat-or psd,psc/a * 90 - bloat-or pfi * 120 - grow 90 - shrink 90 - and-not CWN - labels pwell - calma 41 0 - - templayer TNS ns - - templayer TPS ps - -#we give priority to selects autogenerated around diffusions (vrs. ohmics) -#XDP = (pdiff*60) Or ps -#XDN = (ndiff*60) Or ns -#FSP = ((pdiff*60,psc*60) Or XDP And-Not XDN Or ps shrink-grow -#FSN = ((ndiff*60,nsc*60) Or XDN And-Not FDP Or ns shrink-grow -#CSN = FSN -#CSP = FSP - -#diffusion auto-nselect (will have priority) - templayer XDN - bloat-or ndiff,rnd,ndc/a * 60 psd,psc/a 0 - or TNS - -#diffusion auto-pselect (will have priority) - templayer XDP - bloat-or pdiff,rpd,pdc/a * 60 nsd,nsc/a 0 - or TPS - -#final pselect - templayer FSP - bloat-or pdiff,rpd,pfet,psd,pdc/a,psc/a,pfet * 60 ndiff,rnd,ndc/a,nsd,nsc/a,nfet 0 - or XDP -#give diff nselect priority - and-not XDN - or TPS - shrink 15 - grow 15 - grow 15 - shrink 15 - -#final nselect - templayer FSN - bloat-or ndiff,rnd,nfet,nsd,ndc/a,nsc/a,nfet * 60 pdiff,rpd,pdc/a,psd,psc/a,pfet 0 - or XDN -#never conflict with final pselect - and-not FSP -#drawn select always goes - or TNS - shrink 15 - grow 15 - grow 15 - shrink 15 - - layer CSN FSN - calma 45 0 - - layer CSP FSP - calma 44 0 - - layer CAA diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet - labels diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet - calma 43 0 - - layer CCA ndc/m1,nsc/m1 - squares 30 60 90 - calma 48 0 - - layer CCA pdc/m1,psc/m1 - squares 30 60 90 - calma 48 0 - - layer CPG poly,rp,nfet,pfet,fet,pc/a - labels poly,rp,nfet,pfet,fet,pc/a - calma 46 0 - - layer CCP pc/m1 - squares 30 60 90 - calma 47 0 - - layer CCE gc2 - squares 0 60 90 - calma 55 0 - - layer CCE p2c,p2m12c - squares 30 60 90 - calma 55 0 - - layer CCE gc2 - squares 0 60 90 - calma 55 0 - - layer CCC gc - squares 0 60 90 - calma 25 0 - - layer CV1 m2c/m1,p2m12c - squares 30 60 90 - calma 50 0 - - layer CV1 gv1 - squares 0 60 90 - calma 50 0 - - layer CV2 m3c/m2 - squares 30 60 90 - calma 61 0 - - layer CV2 gv2 - squares 0 60 90 - calma 61 0 - - - templayer XPAD1 pad - shrink 180 - - templayer XPAD2 XPAD1 - shrink 180 - - layer CM3 pad - labels pad - calma 62 0 - - layer CV2 XPAD2 - squares 240 60 300 - calma 61 0 - - layer CM2 pad - labels pad - calma 51 0 - - layer CV1 XPAD2 - squares 60 60 300 - calma 50 0 - - layer CM1 pad - calma 49 0 - - layer CM1 m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c - labels m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c - calma 49 0 - - layer CM2 m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c - labels m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c - calma 51 0 - - layer CMFP m1p - labels m1p - calma 81 0 - - layer CMSP m2p - labels m2p - calma 82 0 - - layer 100 fp - labels fp - calma 100 0 - - layer 101 fm1 - labels fm1 - calma 101 0 - - layer 102 fm2 - labels fm2 - calma 102 0 - - layer 103 fm3 - labels fm3 - calma 103 0 - - layer 109 fa - or fb - squares 0 210 120 - labels fa - calma 109 0 - - layer 119 fn - calma 119 0 - - layer 110 fapm - labels fapm - calma 110 0 - -# layer CPG fp - layer CPG fp,fapm - squares 0 210 120 - labels fp - calma 46 0 - -# layer CM1 fm1 - layer CM1 fm1,fapm - squares 0 210 120 - labels fm1 - calma 49 0 - -# layer CM2 fm2 - layer CM2 fm2,fapm - - squares 0 210 120 - labels fm2 - calma 51 0 - -# layer CM3 fm3 - layer CM3 fm3,fapm - - squares 0 210 120 - labels fm3 - calma 62 0 - - layer CM3 m3,rm3,m3c/m3 - labels m3,rm3,m3c/m3 - calma 62 0 - - layer CMTP m3p - labels m3p - calma 83 0 - - layer COG pad - shrink 600 - labels pad - calma 52 0 - - layer COG glass - labels glass - calma 52 0 - - layer CFI nfi,pfi - labels nfi,pfi - calma 27 0 - - layer CHR hr,phr - labels hr,phr - calma 34 0 - - layer CEL poly2,ecap,phr,p2c,p2m12c - labels poly2,ecap,phr,p2c,p2m12c - calma 56 0 - -#CRE/CRM - layer CRW rnw,prnw - labels rnw,prnw - calma 65 0 - layer CRG rp,prp - labels rp,prp - calma 67 0 - layer CRD rnd,rpd,prnd,prpd - labels rnd,rpd,prnd,prpd - calma 66 0 - layer CRE rnw,rp,rnd,rpd,rp2 - labels rnw,rp,rnd,rpd,rp2 - calma 64 0 - layer CRF rm1,prm1 - labels rm1,prm1 - calma 71 0 - layer CRS rm2,prm2 - labels rm2,prm2 - calma 72 0 - layer CRG2 rp2,prp2 - labels rp2,prp2 - calma 68 0 - layer CRT rm3,prm3 - labels rm3,prm3 - calma 73 0 -#CRE/CRM layer CRM rm1,prm1,rm2,prm2,rm3,prm3 -#CRE/CRM calma 70 0 - - layer CX comment - labels comment - calma 63 0 - - layer XP pad,xp - labels pad,xp - calma 26 0 - -style fill-only - scalefactor 30 15 - - layer 100 fp - calma 100 0 - - layer 101 fm1 - calma 101 0 - - layer 102 fm2 - calma 102 0 - - layer 103 fm3 - calma 103 0 - - layer 109 fa - or fb - calma 109 0 - - layer 119 fn - calma 119 0 - -style fapm-boxes - -# this output style creates fill boxes automatically (to meet minimum -# density requirements for poly and metal layers) 5 microns outside of -# drawn layout IF: 1. you have a flattened version of your chip -# 2. over which you paint the special fill layer 'fa', preferably with -# a size that is a multiple of 7 + n * (7 + 4), 3. set 'cif -# ostype fapm-boxes' and cif out to a file (this actually creates the -# fill boxes on cif/strm layer '110' using the magic 'squares' -# command), 4. cif in the resulting file (which creates boxes on magic -# layer 'fapm') and place this cell onto your chip (and verify absence -# of drc errors or shorts), then 5. cif out under your regular cif out -# style, where the 'fapm' layer creates fill boxes on poly and all -# metal layers. - - scalefactor 30 15 - - templayer CRIT fapm,fn,diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet,poly,rp,nfet,pfet,fet,pc/a,poly2,ecap,phr,p2c,p2m12c - or fm1,m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c - or fm2,m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c - or fm3,m3,rm3,m3c/m3 - or glass,pad - grow 510 - and fa - - layer 110 fa - squares 0 210 120 - and-not CRIT - shrink 90 - grow 90 - or fapm - labels fapm - calma 110 0 - -style fapm-stripes - scalefactor 30 15 - -# this output style creates the above layer 110 as stripes for reduced size -# HOWEVER it requires each 'fa' box to first be an exact multiple as above -# and then *replacing* the left side (1-lambda wide) stripe of each 'fa' box -# to be a 1-lambda wide layer 'fb' box -- else you won't get strips! - - templayer CRIT fapm,fn,diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet,poly,rp,nfet,pfet,fet,pc/a,poly2,ecap,phr,p2c,p2m12c - or fm1,m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c - or fm2,m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c - or fm3,m3,rm3,m3c/m3 - or glass,pad - grow 510 - and fa - - templayer FB fa - or fb - squares 0 210 120 - and-not CRIT - - layer 110 fa - squares 0 210 120 - and-not CRIT - or FB - shrink 90 - grow 90 - or fapm - labels fapm - calma 110 0 - - -style lambda=0.30(cp) - scalefactor 30 15 - - layer CWN nwell,rnw - bloat-or pdiff,rpd,pdc/a,pfet * 180 - bloat-or nsd,nsc/a * 90 - bloat-or nfi * 120 - grow 90 - shrink 90 - labels nwell,rnw - calma 42 0 - - layer CWP pwell - bloat-or ndiff,rnd,ndc/a,nfet * 180 - bloat-or psd,psc/a * 90 - bloat-or pfi * 120 - grow 90 - shrink 90 - and-not CWN - labels pwell - calma 41 0 - - templayer TNS ns - - templayer TPS ps - -#we give priority to selects autogenerated around diffusions (vrs. ohmics) -#XDP = (pdiff*60) Or ps -#XDN = (ndiff*60) Or ns -#FSP = ((pdiff*60,psc*60) Or XDP And-Not XDN Or ps shrink-grow -#FSN = ((ndiff*60,nsc*60) Or XDN And-Not FDP Or ns shrink-grow -#CSN = FSN -#CSP = FSP - -#diffusion auto-nselect (will have priority) - templayer XDN - bloat-or ndiff,rnd,ndc/a * 60 psd,psc/a 0 - or TNS - -#diffusion auto-pselect (will have priority) - templayer XDP - bloat-or pdiff,rpd,pdc/a * 60 nsd,nsc/a 0 - or TPS - -#final pselect - templayer FSP - bloat-or pdiff,rpd,pfet,psd,pdc/a,psc/a,pfet * 60 ndiff,rnd,ndc/a,nsd,nsc/a,nfet 0 - or XDP -#give diff nselect priority - and-not XDN - or TPS - shrink 15 - grow 15 - grow 15 - shrink 15 - -#final nselect - templayer FSN - bloat-or ndiff,rnd,nfet,nsd,ndc/a,nsc/a,nfet * 60 pdiff,rpd,pdc/a,psd,psc/a,pfet 0 - or XDN -#never conflict with final pselect - and-not FSP -#drawn select always goes - or TNS - shrink 15 - grow 15 - grow 15 - shrink 15 - - layer CSN FSN - calma 45 0 - - layer CSP FSP - calma 44 0 - - layer CAA diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet - labels diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet - calma 43 0 - - layer CCC ndc/m1,nsc/m1 - squares 30 60 90 - calma 25 0 - - layer CCC pdc/m1,psc/m1 - squares 30 60 90 - calma 25 0 - - layer CPG poly,rp,nfet,pfet,fet,pc/a - labels poly,rp,nfet,pfet,fet,pc/a - calma 46 0 - - layer CCC pc/m1 - squares 30 60 90 - calma 25 0 - - layer CCC gc2 - squares 0 60 90 - calma 25 0 - - layer CCC p2c,p2m12c - squares 30 60 90 - calma 25 0 - - layer CCC gc2 - squares 0 60 90 - calma 25 0 - - layer CCC gc - squares 0 60 90 - calma 25 0 - - layer CV1 m2c/m1,p2m12c - squares 30 60 90 - calma 50 0 - - layer CV1 gv1 - squares 0 60 90 - calma 50 0 - - layer CV2 m3c/m2 - squares 30 60 90 - calma 61 0 - - layer CV2 gv2 - squares 0 60 90 - calma 61 0 - - - templayer XPAD1 pad - shrink 180 - - templayer XPAD2 XPAD1 - shrink 180 - - layer CM3 pad - labels pad - calma 62 0 - - layer CV2 XPAD2 - squares 240 60 300 - calma 61 0 - - layer CM2 pad - labels pad - calma 51 0 - - layer CV1 XPAD2 - squares 60 60 300 - calma 50 0 - - layer CM1 pad - calma 49 0 - - layer CM1 m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c - labels m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c - calma 49 0 - - layer CM2 m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c - labels m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c - calma 51 0 - - layer CMFP m1p - labels m1p - calma 81 0 - - layer CMSP m2p - labels m2p - calma 82 0 - - layer 100 fp - labels fp - calma 100 0 - - layer 101 fm1 - labels fm1 - calma 101 0 - - layer 102 fm2 - labels fm2 - calma 102 0 - - layer 103 fm3 - labels fm3 - calma 103 0 - - layer 109 fa - or fb - squares 0 210 120 - labels fa - calma 109 0 - - layer 119 fn - calma 119 0 - - layer 110 fapm - labels fapm - calma 110 0 - -# layer CPG fp - layer CPG fp,fapm - squares 0 210 120 - labels fp - calma 46 0 - -# layer CM1 fm1 - layer CM1 fm1,fapm - squares 0 210 120 - labels fm1 - calma 49 0 - -# layer CM2 fm2 - layer CM2 fm2,fapm - - squares 0 210 120 - labels fm2 - calma 51 0 - -# layer CM3 fm3 - layer CM3 fm3,fapm - - squares 0 210 120 - labels fm3 - calma 62 0 - - layer CM3 m3,rm3,m3c/m3 - labels m3,rm3,m3c/m3 - calma 62 0 - - layer CMTP m3p - labels m3p - calma 83 0 - - layer COG pad - shrink 600 - labels pad - calma 52 0 - - layer COG glass - labels glass - calma 52 0 - - layer CFI nfi,pfi - labels nfi,pfi - calma 27 0 - - layer CHR hr,phr - labels hr,phr - calma 34 0 - - layer CEL poly2,ecap,phr,p2c,p2m12c - labels poly2,ecap,phr,p2c,p2m12c - calma 56 0 - -#CRE/CRM - layer CRW rnw,prnw - labels rnw,prnw - calma 65 0 - layer CRG rp,prp - labels rp,prp - calma 67 0 - layer CRD rnd,rpd,prnd,prpd - labels rnd,rpd,prnd,prpd - calma 66 0 - layer CRE rnw,rp,rnd,rpd,rp2 - labels rnw,rp,rnd,rpd,rp2 - calma 64 0 - layer CRF rm1,prm1 - labels rm1,prm1 - calma 71 0 - layer CRS rm2,prm2 - labels rm2,prm2 - calma 72 0 - layer CRG2 rp2,prp2 - labels rp2,prp2 - calma 68 0 - layer CRT rm3,prm3 - labels rm3,prm3 - calma 73 0 -#CRE/CRM layer CRM rm1,prm1,rm2,prm2,rm3,prm3 -#CRE/CRM calma 70 0 - - layer CX comment - labels comment - calma 63 0 - - layer XP pad,xp - labels pad,xp - calma 26 0 - - -style lambda=0.30(c) - scalefactor 30 15 - - layer CWN nwell,rnw - bloat-or pdiff,rpd,pdc/a,pfet * 180 - bloat-or nsd,nsc/a * 90 - bloat-or nfi * 120 - grow 90 - shrink 90 - labels nwell,rnw - calma 42 0 - - templayer TNS ns - - templayer TPS ps - -#we give priority to selects autogenerated around diffusions (vrs. ohmics) -#XDP = (pdiff*60) Or ps -#XDN = (ndiff*60) Or ns -#FSP = ((pdiff*60,psc*60) Or XDP And-Not XDN Or ps shrink-grow -#FSN = ((ndiff*60,nsc*60) Or XDN And-Not FDP Or ns shrink-grow -#CSN = FSN -#CSP = FSP - -#diffusion auto-nselect (will have priority) - templayer XDN - bloat-or ndiff,rnd,ndc/a * 60 psd,psc/a 0 - or TNS - -#diffusion auto-pselect (will have priority) - templayer XDP - bloat-or pdiff,rpd,pdc/a * 60 nsd,nsc/a 0 - or TPS - -#final pselect - templayer FSP - bloat-or pdiff,rpd,pfet,psd,pdc/a,psc/a,pfet * 60 ndiff,rnd,ndc/a,nsd,nsc/a,nfet 0 - or XDP -#give diff nselect priority - and-not XDN - or TPS - shrink 15 - grow 15 - grow 15 - shrink 15 - -#final nselect - templayer FSN - bloat-or ndiff,rnd,nfet,nsd,ndc/a,nsc/a,nfet * 60 pdiff,rpd,pdc/a,psd,psc/a,pfet 0 - or XDN -#never conflict with final pselect - and-not FSP -#drawn select always goes - or TNS - shrink 15 - grow 15 - grow 15 - shrink 15 - - layer CSN FSN - calma 45 0 - - layer CSP FSP - calma 44 0 - - layer CAA diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet - labels diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet - calma 43 0 - - layer CCC ndc/m1,nsc/m1 - squares 30 60 90 - calma 25 0 - - layer CCC pdc/m1,psc/m1 - squares 30 60 90 - calma 25 0 - - layer CPG poly,rp,nfet,pfet,fet,pc/a - labels poly,rp,nfet,pfet,fet,pc/a - calma 46 0 - - layer CCC pc/m1 - squares 30 60 90 - calma 25 0 - - layer CCC gc2 - squares 0 60 90 - calma 25 0 - - layer CCC p2c,p2m12c - squares 30 60 90 - calma 25 0 - - layer CCC gc2 - squares 0 60 90 - calma 25 0 - - layer CCC gc - squares 0 60 90 - calma 25 0 - - layer CV1 m2c/m1,p2m12c - squares 30 60 90 - calma 50 0 - - layer CV1 gv1 - squares 0 60 90 - calma 50 0 - - layer CV2 m3c/m2 - squares 30 60 90 - calma 61 0 - - layer CV2 gv2 - squares 0 60 90 - calma 61 0 - - - templayer XPAD1 pad - shrink 180 - - templayer XPAD2 XPAD1 - shrink 180 - - layer CM3 pad - labels pad - calma 62 0 - - layer CV2 XPAD2 - squares 240 60 300 - calma 61 0 - - layer CM2 pad - labels pad - calma 51 0 - - layer CV1 XPAD2 - squares 60 60 300 - calma 50 0 - - layer CM1 pad - calma 49 0 - - layer CM1 m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c - labels m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c - calma 49 0 - - layer CM2 m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c - labels m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c - calma 51 0 - - layer CMFP m1p - labels m1p - calma 81 0 - - layer CMSP m2p - labels m2p - calma 82 0 - - layer 100 fp - labels fp - calma 100 0 - - layer 101 fm1 - labels fm1 - calma 101 0 - - layer 102 fm2 - labels fm2 - calma 102 0 - - layer 103 fm3 - labels fm3 - calma 103 0 - - layer 109 fa - or fb - squares 0 210 120 - labels fa - calma 109 0 - - layer 119 fn - calma 119 0 - - layer 110 fapm - labels fapm - calma 110 0 - -# layer CPG fp - layer CPG fp,fapm - squares 0 210 120 - labels fp - calma 46 0 - -# layer CM1 fm1 - layer CM1 fm1,fapm - squares 0 210 120 - labels fm1 - calma 49 0 - -# layer CM2 fm2 - layer CM2 fm2,fapm - - squares 0 210 120 - labels fm2 - calma 51 0 - -# layer CM3 fm3 - layer CM3 fm3,fapm - - squares 0 210 120 - labels fm3 - calma 62 0 - - layer CM3 m3,rm3,m3c/m3 - labels m3,rm3,m3c/m3 - calma 62 0 - - layer CMTP m3p - labels m3p - calma 83 0 - - layer COG pad - shrink 600 - labels pad - calma 52 0 - - layer COG glass - labels glass - calma 52 0 - - layer CFI nfi,pfi - labels nfi,pfi - calma 27 0 - - layer CHR hr,phr - labels hr,phr - calma 34 0 - - layer CEL poly2,ecap,phr,p2c,p2m12c - labels poly2,ecap,phr,p2c,p2m12c - calma 56 0 - -#CRE/CRM - layer CRW rnw,prnw - labels rnw,prnw - calma 65 0 - layer CRG rp,prp - labels rp,prp - calma 67 0 - layer CRD rnd,rpd,prnd,prpd - labels rnd,rpd,prnd,prpd - calma 66 0 - layer CRE rnw,rp,rnd,rpd,rp2 - labels rnw,rp,rnd,rpd,rp2 - calma 64 0 - layer CRF rm1,prm1 - labels rm1,prm1 - calma 71 0 - layer CRS rm2,prm2 - labels rm2,prm2 - calma 72 0 - layer CRG2 rp2,prp2 - labels rp2,prp2 - calma 68 0 - layer CRT rm3,prm3 - labels rm3,prm3 - calma 73 0 -#CRE/CRM layer CRM rm1,prm1,rm2,prm2,rm3,prm3 -#CRE/CRM calma 70 0 - - layer CX comment - labels comment - calma 63 0 - - layer XP pad,xp - labels pad,xp - calma 26 0 - - -style lambda=0.30() - scalefactor 30 15 - - layer CWN nwell,rnw - bloat-or pdiff,rpd,pdc/a,pfet * 180 - bloat-or nsd,nsc/a * 90 - bloat-or nfi * 120 - grow 90 - shrink 90 - labels nwell,rnw - calma 42 0 - - templayer TNS ns - - templayer TPS ps - -#we give priority to selects autogenerated around diffusions (vrs. ohmics) -#XDP = (pdiff*60) Or ps -#XDN = (ndiff*60) Or ns -#FSP = ((pdiff*60,psc*60) Or XDP And-Not XDN Or ps shrink-grow -#FSN = ((ndiff*60,nsc*60) Or XDN And-Not FDP Or ns shrink-grow -#CSN = FSN -#CSP = FSP - -#diffusion auto-nselect (will have priority) - templayer XDN - bloat-or ndiff,rnd,ndc/a * 60 psd,psc/a 0 - or TNS - -#diffusion auto-pselect (will have priority) - templayer XDP - bloat-or pdiff,rpd,pdc/a * 60 nsd,nsc/a 0 - or TPS - -#final pselect - templayer FSP - bloat-or pdiff,rpd,pfet,psd,pdc/a,psc/a,pfet * 60 ndiff,rnd,ndc/a,nsd,nsc/a,nfet 0 - or XDP -#give diff nselect priority - and-not XDN - or TPS - shrink 15 - grow 15 - grow 15 - shrink 15 - -#final nselect - templayer FSN - bloat-or ndiff,rnd,nfet,nsd,ndc/a,nsc/a,nfet * 60 pdiff,rpd,pdc/a,psd,psc/a,pfet 0 - or XDN -#never conflict with final pselect - and-not FSP -#drawn select always goes - or TNS - shrink 15 - grow 15 - grow 15 - shrink 15 - - layer CSN FSN - calma 45 0 - - layer CSP FSP - calma 44 0 - - layer CAA diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet - labels diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet - calma 43 0 - - layer CCA ndc/m1,nsc/m1 - squares 30 60 90 - calma 48 0 - - layer CCA pdc/m1,psc/m1 - squares 30 60 90 - calma 48 0 - - layer CPG poly,rp,nfet,pfet,fet,pc/a - labels poly,rp,nfet,pfet,fet,pc/a - calma 46 0 - - layer CCP pc/m1 - squares 30 60 90 - calma 47 0 - - layer CCE gc2 - squares 0 60 90 - calma 55 0 - - layer CCE p2c,p2m12c - squares 30 60 90 - calma 55 0 - - layer CCE gc2 - squares 0 60 90 - calma 55 0 - - layer CCC gc - squares 0 60 90 - calma 25 0 - - layer CV1 m2c/m1,p2m12c - squares 30 60 90 - calma 50 0 - - layer CV1 gv1 - squares 0 60 90 - calma 50 0 - - layer CV2 m3c/m2 - squares 30 60 90 - calma 61 0 - - layer CV2 gv2 - squares 0 60 90 - calma 61 0 - - - templayer XPAD1 pad - shrink 180 - - templayer XPAD2 XPAD1 - shrink 180 - - layer CM3 pad - labels pad - calma 62 0 - - layer CV2 XPAD2 - squares 240 60 300 - calma 61 0 - - layer CM2 pad - labels pad - calma 51 0 - - layer CV1 XPAD2 - squares 60 60 300 - calma 50 0 - - layer CM1 pad - calma 49 0 - - layer CM1 m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c - labels m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c - calma 49 0 - - layer CM2 m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c - labels m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c - calma 51 0 - - layer CMFP m1p - labels m1p - calma 81 0 - - layer CMSP m2p - labels m2p - calma 82 0 - - layer 100 fp - labels fp - calma 100 0 - - layer 101 fm1 - labels fm1 - calma 101 0 - - layer 102 fm2 - labels fm2 - calma 102 0 - - layer 103 fm3 - labels fm3 - calma 103 0 - - layer 109 fa - or fb - squares 0 210 120 - labels fa - calma 109 0 - - layer 119 fn - calma 119 0 - - layer 110 fapm - labels fapm - calma 110 0 - -# layer CPG fp - layer CPG fp,fapm - squares 0 210 120 - labels fp - calma 46 0 - -# layer CM1 fm1 - layer CM1 fm1,fapm - squares 0 210 120 - labels fm1 - calma 49 0 - -# layer CM2 fm2 - layer CM2 fm2,fapm - - squares 0 210 120 - labels fm2 - calma 51 0 - -# layer CM3 fm3 - layer CM3 fm3,fapm - - squares 0 210 120 - labels fm3 - calma 62 0 - - layer CM3 m3,rm3,m3c/m3 - labels m3,rm3,m3c/m3 - calma 62 0 - - layer CMTP m3p - labels m3p - calma 83 0 - - layer COG pad - shrink 600 - labels pad - calma 52 0 - - layer COG glass - labels glass - calma 52 0 - - layer CFI nfi,pfi - labels nfi,pfi - calma 27 0 - - layer CHR hr,phr - labels hr,phr - calma 34 0 - - layer CEL poly2,ecap,phr,p2c,p2m12c - labels poly2,ecap,phr,p2c,p2m12c - calma 56 0 - -#CRE/CRM - layer CRW rnw,prnw - labels rnw,prnw - calma 65 0 - layer CRG rp,prp - labels rp,prp - calma 67 0 - layer CRD rnd,rpd,prnd,prpd - labels rnd,rpd,prnd,prpd - calma 66 0 - layer CRE rnw,rp,rnd,rpd,rp2 - labels rnw,rp,rnd,rpd,rp2 - calma 64 0 - layer CRF rm1,prm1 - labels rm1,prm1 - calma 71 0 - layer CRS rm2,prm2 - labels rm2,prm2 - calma 72 0 - layer CRG2 rp2,prp2 - labels rp2,prp2 - calma 68 0 - layer CRT rm3,prm3 - labels rm3,prm3 - calma 73 0 -#CRE/CRM layer CRM rm1,prm1,rm2,prm2,rm3,prm3 -#CRE/CRM calma 70 0 - - layer CX comment - labels comment - calma 63 0 - - layer XP pad,xp - labels pad,xp - calma 26 0 - -end - -cifinput - -style lambda=0.30(p) - scalefactor 30 - - # This is a custom section to add bounding boxes in OpenRAM - layer bb BB - labels BB - calma 63 0 - -layer nwell CWN - and-not CWNR - and-not CTA - labels CWN - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRE - and-not CSB - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRW - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer pseudo_rnwell CRW - and-not CRE - calma CRW 65 * - - layer pwell CWP - and-not CTA - labels CWP - calma CWP 41 * - - layer diff CAA - and-not CTA - and-not CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - layer tran CAA - and-not CTA - and CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - calma CSN 45 * - - calma CSP 44 * - - layer ndiff CAA - and CSN - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRD - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rndiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and CSN - and-not CBA - calma CRD 66 * - - layer pdiff CAA - and CSP - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRD - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rpdiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CRD 66 * - - layer nfet CAA - and CSN - and-not CWNR - and-not CTA - and CPG - and-not CEL - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer pfet CAA - and CSP - and-not CWNR - and-not CTA - and CPG - and-not CEL - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer nsd CAA - and CSN - and-not CWNR - and-not CTA - and CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer psd CAA - and CSP - and-not CWNR - and-not CTA - and-not CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer ndc CAA - and CSN - and CCA - and-not CV1 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer ndc CAA - and CSN - and CCC - and-not CV1 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer nsc CAA - and CSN - and CCA - and-not CV1 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer nsc CAA - and CSN - and CCC - and-not CV1 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer pdc CAA - and CSP - and CCA - and-not CV1 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer pdc CAA - and CSP - and CCC - and-not CV1 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer psc CAA - and CSP - and CCA - and-not CV1 - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer psc CAA - and CSP - and CCC - and-not CV1 - and-not CWNR - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer ndc CAA - and CSN - and CCA - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer ndc CAA - and CSN - and CCC - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer nsc CAA - and CSN - and CCA - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer nsc CAA - and CSN - and CCC - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer pdc CAA - and CSP - and CCA - and CV1 - and CV2 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer pdc CAA - and CSP - and CCC - and CV1 - and CV2 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer psc CAA - and CSP - and CCA - and CV1 - and CV2 - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer psc CAA - and CSP - and CCC - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer poly CPG - and-not CRE - labels CPG - calma CPG 46 * - - layer rp CPG - and CRE - and-not CSB - calma CPG 46 * - - layer rp CPG - and CRG - calma CPG 46 * - - layer pseudo_rpoly CRG - and-not CRE - calma CRG 67 * - - layer pc CCP - and-not CV1 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCP 47 * - - layer pc CCC - and-not CV1 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer pc CCP - and CV1 - and CV2 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCP 47 * - - layer pc CCC - and CV1 - and CV2 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer p2c CCE - and-not CV1 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCE 55 * - - layer p2c CCC - and-not CV1 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer p2c CCE - and CV1 - and CV2 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCE 55 * - - layer p2c CCC - and CV1 - and CV2 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer gc CCP - and-not CPG - and-not CPC - calma CCP 47 * - - layer gc CCP - and-not CM1 - calma CCP 47 * - - layer gc CCA - and-not COP - and-not CAA - and-not CBA - calma CCA 48 * - - layer gc CCA - and-not COP - and-not CM1 - calma CCA 48 * - - layer gc CCC - and-not COP - and-not CPG - and-not CPC - and-not CEL - and-not CAA - and-not CBA - calma CCC 25 * - - layer gc CCC - and-not COP - and-not CM1 - calma CCC 25 * - - layer gc2 CCE - and-not CPC - and-not CEL - calma CCE 55 * - - layer gc2 CCE - and-not CM1 - calma CCE 55 * - - layer gv1 CV1 - and-not COP - and-not CM1 - calma CV1 50 * - - layer gv1 CV1 - and-not COP - and-not CM2 - calma CV1 50 * - - layer gv2 CV2 - and-not COP - and-not CM2 - calma CV2 61 * - - layer gv2 CV2 - and-not COP - and-not CM3 - calma CV2 61 * - - layer m2c CV1 - and-not CV2 - and-not CCC - and-not CCE - and-not CCP - and-not CCA - and-not XP - grow 30 - and CM2 - and CM1 - grow 15 - shrink 15 - calma CV1 50 * - - - - layer p2m12c CV1 - and-not CV2 - and CCE - grow 30 - and CM2 - and CM1 - and CPG - and CEL - grow 15 - shrink 15 - calma CV1 50 * - - layer p2m12c CV1 - and-not CV2 - and CCC - grow 30 - and CM2 - and CM1 - and CPG - and CEL - grow 15 - shrink 15 - calma CV1 50 * - - layer m1 CM1 - and-not CRM - and-not CRF - and-not XP - labels CM1 - calma CM1 49 * - - layer rm1 CRM - and CM1 - calma CRM 70 * - - layer rm1 CRF - and CM1 - calma CRF 71 * - - layer pseudo_rmetal1 CRF - and-not rm1 - calma CRF 71 * - - layer m1p CMFP - labels CMFP - calma CMFP 81 * - - layer m2 CM2 - and-not CRM - and-not CRS - and-not XP - labels CM2 - calma CM2 51 * - - layer rm2 CRM - and CM2 - calma CRM 70 * - - layer rm2 CRS - and CM2 - calma CRS 72 * - - layer pseudo_rmetal2 CRS - and-not rm2 - calma CRS 72 * - - layer m2p CMSP - labels CMSP - calma CMSP 82 * - - - - - - - - - - layer fp 100 - calma 100 100 * - - layer fm1 101 - calma 101 101 * - - layer fm2 102 - calma 102 102 * - - layer fm3 103 - calma 103 103 * - - layer fa 109 - calma 109 109 * - - layer fn 119 - calma 119 119 * - - layer fapm 110 - calma 110 110 * - - layer m3c CV2 - - and-not CV1 - and-not XP - grow 30 - and CM3 - and CM2 - grow 15 - shrink 15 - calma CV2 61 * - - - layer m3 CM3 - and-not CRM - and-not CRT - and-not XP - labels CM3 - calma CM3 62 * - - layer rm3 CRM - and CM3 - calma CRM 70 * - - layer rm3 CRT - and CM3 - calma CRT 73 * - - layer pseudo_rmetal3 CRT - and-not rm3 - calma CRT 73 * - - layer m3p CMTP - labels CMTP - calma CMTP 83 * - - layer pad XP - labels pad - calma XP 26 * - - layer glass COG - and-not COP - and-not XP - labels COG - calma COG 52 * - - layer nfi CFI - and CWN - labels CFI - calma CFI 27 * - - layer pfi CFI - and-not CWN - labels CFI - calma CFI 27 * - - layer hr CHR - labels CHR - calma CHR 34 * - - layer phr CEL - and CHR - calma CEL 56 * - - layer ecap CEL - and CPG - labels CEL - calma CEL 56 * - - layer poly2 CEL - and-not CPG - labels CEL - calma CEL 56 * - - layer rp2 CEL - and CRG2 - calma CEL 56 * - - layer pseudo_rpoly2 CRG2 - and-not CRE - calma CRG2 68 * - - layer comment CX - labels CX - calma CX 63 * - - calma CTA 60 * - - calma CRW 65 * - calma CRG 67 * - calma CRD 66 * - calma CRE 64 * - calma CRF 71 * - calma CRS 72 * - calma CRT 73 * - calma CRM 70 * - - -style lambda=0.30(s) - scalefactor 30 - - layer nwell CWN - and-not CWNR - and-not CTA - labels CWN - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRE - and-not CSB - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRW - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer pseudo_rnwell CRW - and-not CRE - calma CRW 65 * - - - ignore CWP - calma CWP 41 * - - layer diff CAA - and-not CTA - and-not CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - layer tran CAA - and-not CTA - and CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - layer nselect CSN - calma CSN 45 * - - layer pselect CSP - calma CSP 44 * - - layer ndiff CAA - and CSN - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRD - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rndiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and CSN - and-not CBA - calma CRD 66 * - - layer pdiff CAA - and CSP - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRD - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rpdiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CRD 66 * - - layer nfet CAA - and CSN - and-not CWNR - and-not CTA - and CPG - and-not CEL - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer pfet CAA - and CSP - and-not CWNR - and-not CTA - and CPG - and-not CEL - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer nsd CAA - and CSN - and-not CWNR - and-not CTA - and CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer psd CAA - and CSP - and-not CWNR - and-not CTA - and-not CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer ndc CAA - and CSN - and CCA - and-not CV1 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer ndc CAA - and CSN - and CCC - and-not CV1 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer nsc CAA - and CSN - and CCA - and-not CV1 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer nsc CAA - and CSN - and CCC - and-not CV1 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer pdc CAA - and CSP - and CCA - and-not CV1 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer pdc CAA - and CSP - and CCC - and-not CV1 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer psc CAA - and CSP - and CCA - and-not CV1 - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer psc CAA - and CSP - and CCC - and-not CV1 - and-not CWNR - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer ndc CAA - and CSN - and CCA - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer ndc CAA - and CSN - and CCC - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer nsc CAA - and CSN - and CCA - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer nsc CAA - and CSN - and CCC - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer pdc CAA - and CSP - and CCA - and CV1 - and CV2 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer pdc CAA - and CSP - and CCC - and CV1 - and CV2 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer psc CAA - and CSP - and CCA - and CV1 - and CV2 - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer psc CAA - and CSP - and CCC - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer poly CPG - and-not CRE - labels CPG - calma CPG 46 * - - layer rp CPG - and CRE - and-not CSB - calma CPG 46 * - - layer rp CPG - and CRG - calma CPG 46 * - - layer pseudo_rpoly CRG - and-not CRE - calma CRG 67 * - - layer pc CCP - and-not CV1 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCP 47 * - - layer pc CCC - and-not CV1 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer pc CCP - and CV1 - and CV2 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCP 47 * - - layer pc CCC - and CV1 - and CV2 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer p2c CCE - and-not CV1 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCE 55 * - - layer p2c CCC - and-not CV1 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer p2c CCE - and CV1 - and CV2 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCE 55 * - - layer p2c CCC - and CV1 - and CV2 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer gc CCP - and-not CPG - and-not CPC - calma CCP 47 * - - layer gc CCP - and-not CM1 - calma CCP 47 * - - layer gc CCA - and-not COP - and-not CAA - and-not CBA - calma CCA 48 * - - layer gc CCA - and-not COP - and-not CM1 - calma CCA 48 * - - layer gc CCC - and-not COP - and-not CPG - and-not CPC - and-not CEL - and-not CAA - and-not CBA - calma CCC 25 * - - layer gc CCC - and-not COP - and-not CM1 - calma CCC 25 * - - layer gc2 CCE - and-not CPC - and-not CEL - calma CCE 55 * - - layer gc2 CCE - and-not CM1 - calma CCE 55 * - - layer gv1 CV1 - and-not COP - and-not CM1 - calma CV1 50 * - - layer gv1 CV1 - and-not COP - and-not CM2 - calma CV1 50 * - - layer gv2 CV2 - and-not COP - and-not CM2 - calma CV2 61 * - - layer gv2 CV2 - and-not COP - and-not CM3 - calma CV2 61 * - - layer m2c CV1 - and-not CV2 - and-not CCC - and-not CCE - and-not CCP - and-not CCA - and-not XP - grow 30 - and CM2 - and CM1 - grow 15 - shrink 15 - calma CV1 50 * - - - - layer p2m12c CV1 - and-not CV2 - and CCE - grow 30 - and CM2 - and CM1 - and CPG - and CEL - grow 15 - shrink 15 - calma CV1 50 * - - layer p2m12c CV1 - and-not CV2 - and CCC - grow 30 - and CM2 - and CM1 - and CPG - and CEL - grow 15 - shrink 15 - calma CV1 50 * - - layer m1 CM1 - and-not CRM - and-not CRF - and-not XP - labels CM1 - calma CM1 49 * - - layer rm1 CRM - and CM1 - calma CRM 70 * - - layer rm1 CRF - and CM1 - calma CRF 71 * - - layer pseudo_rmetal1 CRF - and-not rm1 - calma CRF 71 * - - layer m1p CMFP - labels CMFP - calma CMFP 81 * - - layer m2 CM2 - and-not CRM - and-not CRS - and-not XP - labels CM2 - calma CM2 51 * - - layer rm2 CRM - and CM2 - calma CRM 70 * - - layer rm2 CRS - and CM2 - calma CRS 72 * - - layer pseudo_rmetal2 CRS - and-not rm2 - calma CRS 72 * - - layer m2p CMSP - labels CMSP - calma CMSP 82 * - - - - - - - - - - layer fp 100 - calma 100 100 * - - layer fm1 101 - calma 101 101 * - - layer fm2 102 - calma 102 102 * - - layer fm3 103 - calma 103 103 * - - layer fa 109 - calma 109 109 * - - layer fn 119 - calma 119 119 * - - layer fapm 110 - calma 110 110 * - - layer m3c CV2 - - and-not CV1 - and-not XP - grow 30 - and CM3 - and CM2 - grow 15 - shrink 15 - calma CV2 61 * - - - layer m3 CM3 - and-not CRM - and-not CRT - and-not XP - labels CM3 - calma CM3 62 * - - layer rm3 CRM - and CM3 - calma CRM 70 * - - layer rm3 CRT - and CM3 - calma CRT 73 * - - layer pseudo_rmetal3 CRT - and-not rm3 - calma CRT 73 * - - layer m3p CMTP - labels CMTP - calma CMTP 83 * - - layer pad XP - labels pad - calma XP 26 * - - layer glass COG - and-not COP - and-not XP - labels COG - calma COG 52 * - - layer nfi CFI - and CWN - labels CFI - calma CFI 27 * - - layer pfi CFI - and-not CWN - labels CFI - calma CFI 27 * - - layer hr CHR - labels CHR - calma CHR 34 * - - layer phr CEL - and CHR - calma CEL 56 * - - layer ecap CEL - and CPG - labels CEL - calma CEL 56 * - - layer poly2 CEL - and-not CPG - labels CEL - calma CEL 56 * - - layer rp2 CEL - and CRG2 - calma CEL 56 * - - layer pseudo_rpoly2 CRG2 - and-not CRE - calma CRG2 68 * - - layer comment CX - labels CX - calma CX 63 * - - calma CTA 60 * - - calma CRW 65 * - calma CRG 67 * - calma CRD 66 * - calma CRE 64 * - calma CRF 71 * - calma CRS 72 * - calma CRT 73 * - calma CRM 70 * - - -style lambda=0.30(ps) - scalefactor 30 - - layer nwell CWN - and-not CWNR - and-not CTA - labels CWN - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRE - and-not CSB - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRW - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer pseudo_rnwell CRW - and-not CRE - calma CRW 65 * - - layer pwell CWP - and-not CTA - labels CWP - calma CWP 41 * - - layer diff CAA - and-not CTA - and-not CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - layer tran CAA - and-not CTA - and CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - layer nselect CSN - calma CSN 45 * - - layer pselect CSP - calma CSP 44 * - - layer ndiff CAA - and CSN - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRD - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rndiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and CSN - and-not CBA - calma CRD 66 * - - layer pdiff CAA - and CSP - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRD - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rpdiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CRD 66 * - - layer nfet CAA - and CSN - and-not CWNR - and-not CTA - and CPG - and-not CEL - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer pfet CAA - and CSP - and-not CWNR - and-not CTA - and CPG - and-not CEL - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer nsd CAA - and CSN - and-not CWNR - and-not CTA - and CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer psd CAA - and CSP - and-not CWNR - and-not CTA - and-not CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer ndc CAA - and CSN - and CCA - and-not CV1 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer ndc CAA - and CSN - and CCC - and-not CV1 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer nsc CAA - and CSN - and CCA - and-not CV1 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer nsc CAA - and CSN - and CCC - and-not CV1 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer pdc CAA - and CSP - and CCA - and-not CV1 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer pdc CAA - and CSP - and CCC - and-not CV1 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer psc CAA - and CSP - and CCA - and-not CV1 - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer psc CAA - and CSP - and CCC - and-not CV1 - and-not CWNR - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer ndc CAA - and CSN - and CCA - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer ndc CAA - and CSN - and CCC - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer nsc CAA - and CSN - and CCA - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer nsc CAA - and CSN - and CCC - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer pdc CAA - and CSP - and CCA - and CV1 - and CV2 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer pdc CAA - and CSP - and CCC - and CV1 - and CV2 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer psc CAA - and CSP - and CCA - and CV1 - and CV2 - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer psc CAA - and CSP - and CCC - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer poly CPG - and-not CRE - labels CPG - calma CPG 46 * - - layer rp CPG - and CRE - and-not CSB - calma CPG 46 * - - layer rp CPG - and CRG - calma CPG 46 * - - layer pseudo_rpoly CRG - and-not CRE - calma CRG 67 * - - layer pc CCP - and-not CV1 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCP 47 * - - layer pc CCC - and-not CV1 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer pc CCP - and CV1 - and CV2 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCP 47 * - - layer pc CCC - and CV1 - and CV2 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer p2c CCE - and-not CV1 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCE 55 * - - layer p2c CCC - and-not CV1 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer p2c CCE - and CV1 - and CV2 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCE 55 * - - layer p2c CCC - and CV1 - and CV2 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer gc CCP - and-not CPG - and-not CPC - calma CCP 47 * - - layer gc CCP - and-not CM1 - calma CCP 47 * - - layer gc CCA - and-not COP - and-not CAA - and-not CBA - calma CCA 48 * - - layer gc CCA - and-not COP - and-not CM1 - calma CCA 48 * - - layer gc CCC - and-not COP - and-not CPG - and-not CPC - and-not CEL - and-not CAA - and-not CBA - calma CCC 25 * - - layer gc CCC - and-not COP - and-not CM1 - calma CCC 25 * - - layer gc2 CCE - and-not CPC - and-not CEL - calma CCE 55 * - - layer gc2 CCE - and-not CM1 - calma CCE 55 * - - layer gv1 CV1 - and-not COP - and-not CM1 - calma CV1 50 * - - layer gv1 CV1 - and-not COP - and-not CM2 - calma CV1 50 * - - layer gv2 CV2 - and-not COP - and-not CM2 - calma CV2 61 * - - layer gv2 CV2 - and-not COP - and-not CM3 - calma CV2 61 * - - layer m2c CV1 - and-not CV2 - and-not CCC - and-not CCE - and-not CCP - and-not CCA - and-not XP - grow 30 - and CM2 - and CM1 - grow 15 - shrink 15 - calma CV1 50 * - - - - layer p2m12c CV1 - and-not CV2 - and CCE - grow 30 - and CM2 - and CM1 - and CPG - and CEL - grow 15 - shrink 15 - calma CV1 50 * - - layer p2m12c CV1 - and-not CV2 - and CCC - grow 30 - and CM2 - and CM1 - and CPG - and CEL - grow 15 - shrink 15 - calma CV1 50 * - - layer m1 CM1 - and-not CRM - and-not CRF - and-not XP - labels CM1 - calma CM1 49 * - - layer rm1 CRM - and CM1 - calma CRM 70 * - - layer rm1 CRF - and CM1 - calma CRF 71 * - - layer pseudo_rmetal1 CRF - and-not rm1 - calma CRF 71 * - - layer m1p CMFP - labels CMFP - calma CMFP 81 * - - layer m2 CM2 - and-not CRM - and-not CRS - and-not XP - labels CM2 - calma CM2 51 * - - layer rm2 CRM - and CM2 - calma CRM 70 * - - layer rm2 CRS - and CM2 - calma CRS 72 * - - layer pseudo_rmetal2 CRS - and-not rm2 - calma CRS 72 * - - layer m2p CMSP - labels CMSP - calma CMSP 82 * - - - - - - - - - - layer fp 100 - calma 100 100 * - - layer fm1 101 - calma 101 101 * - - layer fm2 102 - calma 102 102 * - - layer fm3 103 - calma 103 103 * - - layer fa 109 - calma 109 109 * - - layer fn 119 - calma 119 119 * - - layer fapm 110 - calma 110 110 * - - layer m3c CV2 - - and-not CV1 - and-not XP - grow 30 - and CM3 - and CM2 - grow 15 - shrink 15 - calma CV2 61 * - - - layer m3 CM3 - and-not CRM - and-not CRT - and-not XP - labels CM3 - calma CM3 62 * - - layer rm3 CRM - and CM3 - calma CRM 70 * - - layer rm3 CRT - and CM3 - calma CRT 73 * - - layer pseudo_rmetal3 CRT - and-not rm3 - calma CRT 73 * - - layer m3p CMTP - labels CMTP - calma CMTP 83 * - - layer pad XP - labels pad - calma XP 26 * - - layer glass COG - and-not COP - and-not XP - labels COG - calma COG 52 * - - layer nfi CFI - and CWN - labels CFI - calma CFI 27 * - - layer pfi CFI - and-not CWN - labels CFI - calma CFI 27 * - - layer hr CHR - labels CHR - calma CHR 34 * - - layer phr CEL - and CHR - calma CEL 56 * - - layer ecap CEL - and CPG - labels CEL - calma CEL 56 * - - layer poly2 CEL - and-not CPG - labels CEL - calma CEL 56 * - - layer rp2 CEL - and CRG2 - calma CEL 56 * - - layer pseudo_rpoly2 CRG2 - and-not CRE - calma CRG2 68 * - - layer comment CX - labels CX - calma CX 63 * - - calma CTA 60 * - - calma CRW 65 * - calma CRG 67 * - calma CRD 66 * - calma CRE 64 * - calma CRF 71 * - calma CRS 72 * - calma CRT 73 * - calma CRM 70 * - - -style lambda=0.30() - scalefactor 30 - - layer nwell CWN - and-not CWNR - and-not CTA - labels CWN - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRE - and-not CSB - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRW - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer pseudo_rnwell CRW - and-not CRE - calma CRW 65 * - - - ignore CWP - calma CWP 41 * - - layer diff CAA - and-not CTA - and-not CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - layer tran CAA - and-not CTA - and CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - calma CSN 45 * - - calma CSP 44 * - - layer ndiff CAA - and CSN - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRD - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rndiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and CSN - and-not CBA - calma CRD 66 * - - layer pdiff CAA - and CSP - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRD - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rpdiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CRD 66 * - - layer nfet CAA - and CSN - and-not CWNR - and-not CTA - and CPG - and-not CEL - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer pfet CAA - and CSP - and-not CWNR - and-not CTA - and CPG - and-not CEL - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer nsd CAA - and CSN - and-not CWNR - and-not CTA - and CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer psd CAA - and CSP - and-not CWNR - and-not CTA - and-not CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer ndc CAA - and CSN - and CCA - and-not CV1 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer ndc CAA - and CSN - and CCC - and-not CV1 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer nsc CAA - and CSN - and CCA - and-not CV1 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer nsc CAA - and CSN - and CCC - and-not CV1 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer pdc CAA - and CSP - and CCA - and-not CV1 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer pdc CAA - and CSP - and CCC - and-not CV1 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer psc CAA - and CSP - and CCA - and-not CV1 - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer psc CAA - and CSP - and CCC - and-not CV1 - and-not CWNR - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer ndc CAA - and CSN - and CCA - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer ndc CAA - and CSN - and CCC - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer nsc CAA - and CSN - and CCA - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer nsc CAA - and CSN - and CCC - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer pdc CAA - and CSP - and CCA - and CV1 - and CV2 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer pdc CAA - and CSP - and CCC - and CV1 - and CV2 - and-not CTA - - and-not CPS - and CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer psc CAA - and CSP - and CCA - and CV1 - and CV2 - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCA 48 * - - layer psc CAA - and CSP - and CCC - and CV1 - and CV2 - and-not CWNR - and-not CTA - - and-not CPS - and-not CWN - and CM1 - grow 30 - grow 15 - shrink 15 - calma CCC 25 * - - layer poly CPG - and-not CRE - labels CPG - calma CPG 46 * - - layer rp CPG - and CRE - and-not CSB - calma CPG 46 * - - layer rp CPG - and CRG - calma CPG 46 * - - layer pseudo_rpoly CRG - and-not CRE - calma CRG 67 * - - layer pc CCP - and-not CV1 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCP 47 * - - layer pc CCC - and-not CV1 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer pc CCP - and CV1 - and CV2 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCP 47 * - - layer pc CCC - and CV1 - and CV2 - and CPG - and-not CPC - and-not CEL - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer p2c CCE - and-not CV1 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCE 55 * - - layer p2c CCC - and-not CV1 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer p2c CCE - and CV1 - and CV2 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCE 55 * - - layer p2c CCC - and CV1 - and CV2 - and CPG - and CEL - and-not CPC - and-not CAA - grow 30 - and CM1 - grow 15 - shrink 15 - calma CCC 25 * - - layer gc CCP - and-not CPG - and-not CPC - calma CCP 47 * - - layer gc CCP - and-not CM1 - calma CCP 47 * - - layer gc CCA - and-not COP - and-not CAA - and-not CBA - calma CCA 48 * - - layer gc CCA - and-not COP - and-not CM1 - calma CCA 48 * - - layer gc CCC - and-not COP - and-not CPG - and-not CPC - and-not CEL - and-not CAA - and-not CBA - calma CCC 25 * - - layer gc CCC - and-not COP - and-not CM1 - calma CCC 25 * - - layer gc2 CCE - and-not CPC - and-not CEL - calma CCE 55 * - - layer gc2 CCE - and-not CM1 - calma CCE 55 * - - layer gv1 CV1 - and-not COP - and-not CM1 - calma CV1 50 * - - layer gv1 CV1 - and-not COP - and-not CM2 - calma CV1 50 * - - layer gv2 CV2 - and-not COP - and-not CM2 - calma CV2 61 * - - layer gv2 CV2 - and-not COP - and-not CM3 - calma CV2 61 * - - layer m2c CV1 - and-not CV2 - and-not CCC - and-not CCE - and-not CCP - and-not CCA - and-not XP - grow 30 - and CM2 - and CM1 - grow 15 - shrink 15 - calma CV1 50 * - - - - layer p2m12c CV1 - and-not CV2 - and CCE - grow 30 - and CM2 - and CM1 - and CPG - and CEL - grow 15 - shrink 15 - calma CV1 50 * - - layer p2m12c CV1 - and-not CV2 - and CCC - grow 30 - and CM2 - and CM1 - and CPG - and CEL - grow 15 - shrink 15 - calma CV1 50 * - - layer m1 CM1 - and-not CRM - and-not CRF - and-not XP - labels CM1 - calma CM1 49 * - - layer rm1 CRM - and CM1 - calma CRM 70 * - - layer rm1 CRF - and CM1 - calma CRF 71 * - - layer pseudo_rmetal1 CRF - and-not rm1 - calma CRF 71 * - - layer m1p CMFP - labels CMFP - calma CMFP 81 * - - layer m2 CM2 - and-not CRM - and-not CRS - and-not XP - labels CM2 - calma CM2 51 * - - layer rm2 CRM - and CM2 - calma CRM 70 * - - layer rm2 CRS - and CM2 - calma CRS 72 * - - layer pseudo_rmetal2 CRS - and-not rm2 - calma CRS 72 * - - layer m2p CMSP - labels CMSP - calma CMSP 82 * - - - - - - - - - - layer fp 100 - calma 100 100 * - - layer fm1 101 - calma 101 101 * - - layer fm2 102 - calma 102 102 * - - layer fm3 103 - calma 103 103 * - - layer fa 109 - calma 109 109 * - - layer fn 119 - calma 119 119 * - - layer fapm 110 - calma 110 110 * - - layer m3c CV2 - - and-not CV1 - and-not XP - grow 30 - and CM3 - and CM2 - grow 15 - shrink 15 - calma CV2 61 * - - - layer m3 CM3 - and-not CRM - and-not CRT - and-not XP - labels CM3 - calma CM3 62 * - - layer rm3 CRM - and CM3 - calma CRM 70 * - - layer rm3 CRT - and CM3 - calma CRT 73 * - - layer pseudo_rmetal3 CRT - and-not rm3 - calma CRT 73 * - - layer m3p CMTP - labels CMTP - calma CMTP 83 * - - layer pad XP - labels pad - calma XP 26 * - - layer glass COG - and-not COP - and-not XP - labels COG - calma COG 52 * - - layer nfi CFI - and CWN - labels CFI - calma CFI 27 * - - layer pfi CFI - and-not CWN - labels CFI - calma CFI 27 * - - layer hr CHR - labels CHR - calma CHR 34 * - - layer phr CEL - and CHR - calma CEL 56 * - - layer ecap CEL - and CPG - labels CEL - calma CEL 56 * - - layer poly2 CEL - and-not CPG - labels CEL - calma CEL 56 * - - layer rp2 CEL - and CRG2 - calma CEL 56 * - - layer pseudo_rpoly2 CRG2 - and-not CRE - calma CRG2 68 * - - layer comment CX - labels CX - calma CX 63 * - - calma CTA 60 * - - calma CRW 65 * - calma CRG 67 * - calma CRD 66 * - calma CRE 64 * - calma CRF 71 * - calma CRS 72 * - calma CRT 73 * - calma CRM 70 * - - -style lambda=0.30(c) - scalefactor 30 - - layer nwell CWN - and-not CWNR - and-not CTA - labels CWN - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRE - and-not CSB - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRW - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer pseudo_rnwell CRW - and-not CRE - calma CRW 65 * - - - ignore CWP - calma CWP 41 * - - layer diff CAA - and-not CTA - and-not CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - layer tran CAA - and-not CTA - and CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - calma CSN 45 * - - calma CSP 44 * - - layer ndiff CAA - and CSN - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRD - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rndiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and CSN - and-not CBA - calma CRD 66 * - - layer pdiff CAA - and CSP - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRD - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rpdiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CRD 66 * - - layer nfet CAA - and CSN - and-not CWNR - and-not CTA - and CPG - and-not CEL - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer pfet CAA - and CSP - and-not CWNR - and-not CTA - and CPG - and-not CEL - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer nsd CAA - and CSN - and-not CWNR - and-not CTA - and CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer psd CAA - and CSP - and-not CWNR - and-not CTA - and-not CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer gc2 CCA - and CEL - calma CCA 48 * - - layer gc2 CCP - and CEL - calma CCP 47 * - - layer gc2 CCC - and CEL - calma CCC 25 * - - layer gc2 CCE - and CEL - calma CCE 55 * - - layer gc2 CCA - and CPC - and-not CPG - calma CCA 48 * - - layer gc2 CCP - and CPC - and-not CPG - calma CCP 47 * - - layer gc2 CCC - and CPC - and-not CPG - calma CCC 25 * - - layer gc2 CCE - and CPC - and-not CPG - calma CCE 55 * - - layer gc CCA - and CPG - and-not CEL - calma CCA 48 * - - layer gc CCP - and CPG - and-not CEL - calma CCP 47 * - - layer gc CCC - and CPG - and-not CEL - calma CCC 25 * - - layer gc CCE - and CPG - and-not CEL - calma CCE 55 * - - layer gc CCA - and-not COP - and-not CPC - and-not CEL - calma CCA 48 * - - layer gc CCP - and-not COP - and-not CPC - and-not CEL - calma CCP 47 * - - layer gc CCC - and-not COP - and-not CPC - and-not CEL - calma CCC 25 * - - layer gc CCE - and-not COP - and-not CPC - and-not CEL - calma CCE 55 * - - layer poly CPG - and-not CRE - labels CPG - calma CPG 46 * - - layer rp CPG - and CRE - and-not CSB - calma CPG 46 * - - layer rp CPG - and CRG - calma CPG 46 * - - layer pseudo_rpoly CRG - and-not CRE - calma CRG 67 * - - layer m1 CM1 - and-not CRM - and-not CRF - labels CM1 - calma CM1 49 * - - layer rm1 CRM - and CM1 - calma CRM 70 * - - layer rm1 CRF - and CM1 - calma CRF 71 * - - layer pseudo_rmetal1 CRF - and-not rm1 - calma CRF 71 * - - layer m1p CMFP - labels CMFP - calma CMFP 81 * - - layer gv1 CV1 - calma CV1 50 * - - layer m2 CM2 - and-not CRM - and-not CRS - labels CM2 - calma CM2 51 * - - layer rm2 CRM - and CM2 - calma CRM 70 * - - layer rm2 CRS - and CM2 - calma CRS 72 * - - layer pseudo_rmetal2 CRS - and-not rm2 - calma CRS 72 * - - layer m2p CMSP - labels CMSP - calma CMSP 82 * - - layer fp 100 - calma 100 100 * - - layer fm1 101 - calma 101 101 * - - layer fm2 102 - calma 102 102 * - - layer fm3 103 - calma 103 103 * - - layer fa 109 - calma 109 109 * - - layer fn 119 - calma 119 119 * - - layer fapm 110 - calma 110 110 * - - layer gv2 CV2 - calma CV2 61 * - - layer m3 CM3 - and-not CRM - and-not CRT - labels CM3 - calma CM3 62 * - - layer rm3 CRM - and CM3 - calma CRM 70 * - - layer rm3 CRT - and CM3 - calma CRT 73 * - - layer pseudo_rmetal3 CRT - and-not rm3 - calma CRT 73 * - - layer m3p CMTP - labels CMTP - calma CMTP 83 * - - layer xp XP - calma XP 26 * - - layer glass COG - and-not COP - labels COG - calma COG 52 * - - layer nfi CFI - and CWN - labels CFI - calma CFI 27 * - - layer pfi CFI - and-not CWN - labels CFI - calma CFI 27 * - - layer hr CHR - labels CHR - calma CHR 34 * - - layer phr CEL - and CHR - calma CEL 56 * - - layer ecap CEL - and CPG - labels CEL - calma CEL 56 * - - layer poly2 CEL - and-not CPG - labels CEL - calma CEL 56 * - - layer rp2 CEL - and CRG2 - calma CEL 56 * - - layer pseudo_rpoly2 CRG2 - and-not CRE - calma CRG2 68 * - - layer comment CX - labels CX - calma CX 63 * - - calma CTA 60 * - - calma CRW 65 * - calma CRG 67 * - calma CRD 66 * - calma CRE 64 * - calma CRF 71 * - calma CRS 72 * - calma CRT 73 * - calma CRM 70 * - - -style lambda=0.30(cs) - scalefactor 30 - - layer nwell CWN - and-not CWNR - and-not CTA - labels CWN - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRE - and-not CSB - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRW - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer pseudo_rnwell CRW - and-not CRE - calma CRW 65 * - - - ignore CWP - calma CWP 41 * - - layer diff CAA - and-not CTA - and-not CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - layer tran CAA - and-not CTA - and CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - layer nselect CSN - calma CSN 45 * - - layer pselect CSP - calma CSP 44 * - - layer ndiff CAA - and CSN - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRD - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rndiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and CSN - and-not CBA - calma CRD 66 * - - layer pdiff CAA - and CSP - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRD - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rpdiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CRD 66 * - - layer nfet CAA - and CSN - and-not CWNR - and-not CTA - and CPG - and-not CEL - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer pfet CAA - and CSP - and-not CWNR - and-not CTA - and CPG - and-not CEL - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer nsd CAA - and CSN - and-not CWNR - and-not CTA - and CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer psd CAA - and CSP - and-not CWNR - and-not CTA - and-not CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer gc2 CCA - and CEL - calma CCA 48 * - - layer gc2 CCP - and CEL - calma CCP 47 * - - layer gc2 CCC - and CEL - calma CCC 25 * - - layer gc2 CCE - and CEL - calma CCE 55 * - - layer gc2 CCA - and CPC - and-not CPG - calma CCA 48 * - - layer gc2 CCP - and CPC - and-not CPG - calma CCP 47 * - - layer gc2 CCC - and CPC - and-not CPG - calma CCC 25 * - - layer gc2 CCE - and CPC - and-not CPG - calma CCE 55 * - - layer gc CCA - and CPG - and-not CEL - calma CCA 48 * - - layer gc CCP - and CPG - and-not CEL - calma CCP 47 * - - layer gc CCC - and CPG - and-not CEL - calma CCC 25 * - - layer gc CCE - and CPG - and-not CEL - calma CCE 55 * - - layer gc CCA - and-not COP - and-not CPC - and-not CEL - calma CCA 48 * - - layer gc CCP - and-not COP - and-not CPC - and-not CEL - calma CCP 47 * - - layer gc CCC - and-not COP - and-not CPC - and-not CEL - calma CCC 25 * - - layer gc CCE - and-not COP - and-not CPC - and-not CEL - calma CCE 55 * - - layer poly CPG - and-not CRE - labels CPG - calma CPG 46 * - - layer rp CPG - and CRE - and-not CSB - calma CPG 46 * - - layer rp CPG - and CRG - calma CPG 46 * - - layer pseudo_rpoly CRG - and-not CRE - calma CRG 67 * - - layer m1 CM1 - and-not CRM - and-not CRF - labels CM1 - calma CM1 49 * - - layer rm1 CRM - and CM1 - calma CRM 70 * - - layer rm1 CRF - and CM1 - calma CRF 71 * - - layer pseudo_rmetal1 CRF - and-not rm1 - calma CRF 71 * - - layer m1p CMFP - labels CMFP - calma CMFP 81 * - - layer gv1 CV1 - calma CV1 50 * - - layer m2 CM2 - and-not CRM - and-not CRS - labels CM2 - calma CM2 51 * - - layer rm2 CRM - and CM2 - calma CRM 70 * - - layer rm2 CRS - and CM2 - calma CRS 72 * - - layer pseudo_rmetal2 CRS - and-not rm2 - calma CRS 72 * - - layer m2p CMSP - labels CMSP - calma CMSP 82 * - - layer fp 100 - calma 100 100 * - - layer fm1 101 - calma 101 101 * - - layer fm2 102 - calma 102 102 * - - layer fm3 103 - calma 103 103 * - - layer fa 109 - calma 109 109 * - - layer fn 119 - calma 119 119 * - - layer fapm 110 - calma 110 110 * - - layer gv2 CV2 - calma CV2 61 * - - layer m3 CM3 - and-not CRM - and-not CRT - labels CM3 - calma CM3 62 * - - layer rm3 CRM - and CM3 - calma CRM 70 * - - layer rm3 CRT - and CM3 - calma CRT 73 * - - layer pseudo_rmetal3 CRT - and-not rm3 - calma CRT 73 * - - layer m3p CMTP - labels CMTP - calma CMTP 83 * - - layer xp XP - calma XP 26 * - - layer glass COG - and-not COP - labels COG - calma COG 52 * - - layer nfi CFI - and CWN - labels CFI - calma CFI 27 * - - layer pfi CFI - and-not CWN - labels CFI - calma CFI 27 * - - layer hr CHR - labels CHR - calma CHR 34 * - - layer phr CEL - and CHR - calma CEL 56 * - - layer ecap CEL - and CPG - labels CEL - calma CEL 56 * - - layer poly2 CEL - and-not CPG - labels CEL - calma CEL 56 * - - layer rp2 CEL - and CRG2 - calma CEL 56 * - - layer pseudo_rpoly2 CRG2 - and-not CRE - calma CRG2 68 * - - layer comment CX - labels CX - calma CX 63 * - - calma CTA 60 * - - calma CRW 65 * - calma CRG 67 * - calma CRD 66 * - calma CRE 64 * - calma CRF 71 * - calma CRS 72 * - calma CRT 73 * - calma CRM 70 * - - -style lambda=0.30(cps) - scalefactor 30 - - layer nwell CWN - and-not CWNR - and-not CTA - labels CWN - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRE - and-not CSB - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRW - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer pseudo_rnwell CRW - and-not CRE - calma CRW 65 * - - layer pwell CWP - and-not CTA - labels CWP - calma CWP 41 * - - layer diff CAA - and-not CTA - and-not CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - layer tran CAA - and-not CTA - and CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - layer nselect CSN - calma CSN 45 * - - layer pselect CSP - calma CSP 44 * - - layer ndiff CAA - and CSN - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRD - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rndiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and CSN - and-not CBA - calma CRD 66 * - - layer pdiff CAA - and CSP - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRD - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rpdiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CRD 66 * - - layer nfet CAA - and CSN - and-not CWNR - and-not CTA - and CPG - and-not CEL - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer pfet CAA - and CSP - and-not CWNR - and-not CTA - and CPG - and-not CEL - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer nsd CAA - and CSN - and-not CWNR - and-not CTA - and CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer psd CAA - and CSP - and-not CWNR - and-not CTA - and-not CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer gc2 CCA - and CEL - calma CCA 48 * - - layer gc2 CCP - and CEL - calma CCP 47 * - - layer gc2 CCC - and CEL - calma CCC 25 * - - layer gc2 CCE - and CEL - calma CCE 55 * - - layer gc2 CCA - and CPC - and-not CPG - calma CCA 48 * - - layer gc2 CCP - and CPC - and-not CPG - calma CCP 47 * - - layer gc2 CCC - and CPC - and-not CPG - calma CCC 25 * - - layer gc2 CCE - and CPC - and-not CPG - calma CCE 55 * - - layer gc CCA - and CPG - and-not CEL - calma CCA 48 * - - layer gc CCP - and CPG - and-not CEL - calma CCP 47 * - - layer gc CCC - and CPG - and-not CEL - calma CCC 25 * - - layer gc CCE - and CPG - and-not CEL - calma CCE 55 * - - layer gc CCA - and-not COP - and-not CPC - and-not CEL - calma CCA 48 * - - layer gc CCP - and-not COP - and-not CPC - and-not CEL - calma CCP 47 * - - layer gc CCC - and-not COP - and-not CPC - and-not CEL - calma CCC 25 * - - layer gc CCE - and-not COP - and-not CPC - and-not CEL - calma CCE 55 * - - layer poly CPG - and-not CRE - labels CPG - calma CPG 46 * - - layer rp CPG - and CRE - and-not CSB - calma CPG 46 * - - layer rp CPG - and CRG - calma CPG 46 * - - layer pseudo_rpoly CRG - and-not CRE - calma CRG 67 * - - layer m1 CM1 - and-not CRM - and-not CRF - labels CM1 - calma CM1 49 * - - layer rm1 CRM - and CM1 - calma CRM 70 * - - layer rm1 CRF - and CM1 - calma CRF 71 * - - layer pseudo_rmetal1 CRF - and-not rm1 - calma CRF 71 * - - layer m1p CMFP - labels CMFP - calma CMFP 81 * - - layer gv1 CV1 - calma CV1 50 * - - layer m2 CM2 - and-not CRM - and-not CRS - labels CM2 - calma CM2 51 * - - layer rm2 CRM - and CM2 - calma CRM 70 * - - layer rm2 CRS - and CM2 - calma CRS 72 * - - layer pseudo_rmetal2 CRS - and-not rm2 - calma CRS 72 * - - layer m2p CMSP - labels CMSP - calma CMSP 82 * - - layer fp 100 - calma 100 100 * - - layer fm1 101 - calma 101 101 * - - layer fm2 102 - calma 102 102 * - - layer fm3 103 - calma 103 103 * - - layer fa 109 - calma 109 109 * - - layer fn 119 - calma 119 119 * - - layer fapm 110 - calma 110 110 * - - layer gv2 CV2 - calma CV2 61 * - - layer m3 CM3 - and-not CRM - and-not CRT - labels CM3 - calma CM3 62 * - - layer rm3 CRM - and CM3 - calma CRM 70 * - - layer rm3 CRT - and CM3 - calma CRT 73 * - - layer pseudo_rmetal3 CRT - and-not rm3 - calma CRT 73 * - - layer m3p CMTP - labels CMTP - calma CMTP 83 * - - layer xp XP - calma XP 26 * - - layer glass COG - and-not COP - labels COG - calma COG 52 * - - layer nfi CFI - and CWN - labels CFI - calma CFI 27 * - - layer pfi CFI - and-not CWN - labels CFI - calma CFI 27 * - - layer hr CHR - labels CHR - calma CHR 34 * - - layer phr CEL - and CHR - calma CEL 56 * - - layer ecap CEL - and CPG - labels CEL - calma CEL 56 * - - layer poly2 CEL - and-not CPG - labels CEL - calma CEL 56 * - - layer rp2 CEL - and CRG2 - calma CEL 56 * - - layer pseudo_rpoly2 CRG2 - and-not CRE - calma CRG2 68 * - - layer comment CX - labels CX - calma CX 63 * - - calma CTA 60 * - - calma CRW 65 * - calma CRG 67 * - calma CRD 66 * - calma CRE 64 * - calma CRF 71 * - calma CRS 72 * - calma CRT 73 * - calma CRM 70 * - - -style lambda=0.30(cp) - scalefactor 30 - - layer nwell CWN - and-not CWNR - and-not CTA - labels CWN - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRE - and-not CSB - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer rnw CWN - and-not CWNR - and CRW - and-not CRD - and-not CAA - and-not CPG - calma CWN 42 * - - layer pseudo_rnwell CRW - and-not CRE - calma CRW 65 * - - layer pwell CWP - and-not CTA - labels CWP - calma CWP 41 * - - layer diff CAA - and-not CTA - and-not CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - layer tran CAA - and-not CTA - and CPG - and-not CWNR - and-not COP - and-not CSN - and-not CSP - labels CAA - calma CAA 43 * - - calma CSN 45 * - - calma CSP 44 * - - layer ndiff CAA - and CSN - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRE - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer rnd CAA - and CSN - and-not CWNR - and CRD - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rndiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and-not CWN - and-not CSP - and CSN - and-not CBA - calma CRD 66 * - - layer pdiff CAA - and CSP - and-not CWNR - and-not CTA - and-not CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRE - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer rpd CAA - and CSP - and-not CWNR - and CRD - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CAA 43 * - - layer pseudo_rpdiff CRD - and-not CRE - and-not CAA - and-not CSB - and-not CPG - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - calma CRD 66 * - - layer nfet CAA - and CSN - and-not CWNR - and-not CTA - and CPG - and-not CEL - and-not CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer pfet CAA - and CSP - and-not CWNR - and-not CTA - and CPG - and-not CEL - and CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer nsd CAA - and CSN - and-not CWNR - and-not CTA - and CWN - and-not CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer psd CAA - and CSP - and-not CWNR - and-not CTA - and-not CWN - and-not CSN - and-not CPS - and CSP - and-not CBA - labels CAA - calma CAA 43 * - - layer gc2 CCA - and CEL - calma CCA 48 * - - layer gc2 CCP - and CEL - calma CCP 47 * - - layer gc2 CCC - and CEL - calma CCC 25 * - - layer gc2 CCE - and CEL - calma CCE 55 * - - layer gc2 CCA - and CPC - and-not CPG - calma CCA 48 * - - layer gc2 CCP - and CPC - and-not CPG - calma CCP 47 * - - layer gc2 CCC - and CPC - and-not CPG - calma CCC 25 * - - layer gc2 CCE - and CPC - and-not CPG - calma CCE 55 * - - layer gc CCA - and CPG - and-not CEL - calma CCA 48 * - - layer gc CCP - and CPG - and-not CEL - calma CCP 47 * - - layer gc CCC - and CPG - and-not CEL - calma CCC 25 * - - layer gc CCE - and CPG - and-not CEL - calma CCE 55 * - - layer gc CCA - and-not COP - and-not CPC - and-not CEL - calma CCA 48 * - - layer gc CCP - and-not COP - and-not CPC - and-not CEL - calma CCP 47 * - - layer gc CCC - and-not COP - and-not CPC - and-not CEL - calma CCC 25 * - - layer gc CCE - and-not COP - and-not CPC - and-not CEL - calma CCE 55 * - - layer poly CPG - and-not CRE - labels CPG - calma CPG 46 * - - layer rp CPG - and CRE - and-not CSB - calma CPG 46 * - - layer rp CPG - and CRG - calma CPG 46 * - - layer pseudo_rpoly CRG - and-not CRE - calma CRG 67 * - - layer m1 CM1 - and-not CRM - and-not CRF - labels CM1 - calma CM1 49 * - - layer rm1 CRM - and CM1 - calma CRM 70 * - - layer rm1 CRF - and CM1 - calma CRF 71 * - - layer pseudo_rmetal1 CRF - and-not rm1 - calma CRF 71 * - - layer m1p CMFP - labels CMFP - calma CMFP 81 * - - layer gv1 CV1 - calma CV1 50 * - - layer m2 CM2 - and-not CRM - and-not CRS - labels CM2 - calma CM2 51 * - - layer rm2 CRM - and CM2 - calma CRM 70 * - - layer rm2 CRS - and CM2 - calma CRS 72 * - - layer pseudo_rmetal2 CRS - and-not rm2 - calma CRS 72 * - - layer m2p CMSP - labels CMSP - calma CMSP 82 * - - layer fp 100 - calma 100 100 * - - layer fm1 101 - calma 101 101 * - - layer fm2 102 - calma 102 102 * - - layer fm3 103 - calma 103 103 * - - layer fa 109 - calma 109 109 * - - layer fn 119 - calma 119 119 * - - layer fapm 110 - calma 110 110 * - - layer gv2 CV2 - calma CV2 61 * - - layer m3 CM3 - and-not CRM - and-not CRT - labels CM3 - calma CM3 62 * - - layer rm3 CRM - and CM3 - calma CRM 70 * - - layer rm3 CRT - and CM3 - calma CRT 73 * - - layer pseudo_rmetal3 CRT - and-not rm3 - calma CRT 73 * - - layer m3p CMTP - labels CMTP - calma CMTP 83 * - - layer xp XP - calma XP 26 * - - layer glass COG - and-not COP - labels COG - calma COG 52 * - - layer nfi CFI - and CWN - labels CFI - calma CFI 27 * - - layer pfi CFI - and-not CWN - labels CFI - calma CFI 27 * - - layer hr CHR - labels CHR - calma CHR 34 * - - layer phr CEL - and CHR - calma CEL 56 * - - layer ecap CEL - and CPG - labels CEL - calma CEL 56 * - - layer poly2 CEL - and-not CPG - labels CEL - calma CEL 56 * - - layer rp2 CEL - and CRG2 - calma CEL 56 * - - layer pseudo_rpoly2 CRG2 - and-not CRE - calma CRG2 68 * - - layer comment CX - labels CX - calma CX 63 * - - calma CTA 60 * - - calma CRW 65 * - calma CRG 67 * - calma CRD 66 * - calma CRE 64 * - calma CRF 71 * - calma CRS 72 * - calma CRT 73 * - calma CRM 70 * - -style fill-only - scalefactor 30 -# scalefactor 100 - - layer fp 100 - calma 100 100 * - - layer fm1 101 - calma 101 101 * - - layer fm2 102 - calma 102 102 * - - layer fm3 103 - calma 103 103 * - - layer fa 109 - or fb - calma 109 109 * - - layer fn 119 - calma 119 119 * - - layer fapm 110 - calma 110 110 * - -end - -mzrouter - style irouter -# layer hCost vCost jogCost hintCost - layer metal3 1 2 2 1 - layer metal2 2 1 2 1 - layer metal1 2 3 2 1 - layer poly 10 10 11 1 - contact m3contact metal3 metal2 5 - contact m2contact metal2 metal1 6 - contact pcontact metal1 poly 7 - notactive poly pcontact - -style garouter - layer m2 32 64 256 1 - layer m1 64 32 256 1 - contact m2contact metal1 metal2 1024 - -end - -drc - width nwell 12 \ - "N-well width < 12 (Mosis #1.1)" - - width rnw 12 \ - "rnwell (for resistor L/W extraction) width < 12 (Mosis #1.1)" - - width pwell 12 \ - "P-well width < 12 (Mosis #1.1)" - - width diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a 3 \ - "Diffusion width < 3 (Mosis #2.1)" - - width poly,fp,rp,pc/a,nfet,pfet,fet 2 \ - "Poly width < 2 (Mosis #3.1)" - - width nselect 2 \ - "N-Select width < 2 (Mosis #4.4)" - - width pselect 2 \ - "P-Select width < 2 (Mosis #4.4)" - - width pc/m1 4 \ - "Poly contact width < 4 (Mosis #5.1)" - - - width gc 2 \ - "GC contact width < 2 (Mosis #6.1)" - - width ndc/m1 4 \ - "Diffusion contact width < 4 (Mosis #6.1)" - - - width nsc/m1 4 \ - "Diffusion contact width < 4 (Mosis #6.1)" - - - width pdc/m1 4 \ - "Diffusion contact width < 4 (Mosis #6.1)" - - - width psc/m1 4 \ - "Diffusion contact width < 4 (Mosis #6.1)" - - - width m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 3 \ - "Metal1 width < 3 (Mosis #7.1)" - - width gv1 2 \ - "GV1 via width < 2 (Mosis #8.1)" - - width m2c/m1 4 \ - "Metal2 contact width < 4 (Mosis #8.1)" - - - - - - - - width p2m12c 4 \ - "Metal2 contact width < 4 (Mosis #8.1)" - - width p2m12c 4 \ - "stacked p2m12c width < 4 (Mosis #8.1)" - - width m2,fm2,rm2,m2c/m2,m3c/m2 3 \ - "Metal2 width < 3 (Mosis #9.1)" - - width poly2,ecap,phr,p2c,p2m12c,p2c,p2m12c 5 \ - "Poly2 width < 5 (Mosis #11.1)" - - width gc2 2 \ - "Generic contact2 width < 2 (Mosis #13.1)" - - width p2c 4 \ - "Poly2 contact width < 4 (Mosis #13.1)" - - width p2m12c 4 \ - "Poly2 contact width < 4 (Mosis #13.1)" - - width gv2 2 \ - "GV2 via width < 2 (Mosis #14.1)" - - width m3c/m2 4 \ - "Metal3 contact width < 4 (Mosis #14.1)" - - - width m3,fm3,rm3,m3c/m3,pad 5 \ - "Metal3 width < 5 (Mosis #15.1)" - - width hr,phr 4 \ - "High-Resist width < 4 (Mosis #27.1)" - - width phr 5 \ - "High-Resist poly2R width < 5 (Mosis #27.7)" - - width nfi,pfi 4 \ - "N/P_field-implant width < 4 (Mosis #29.1)" - - spacing nwell nwell 6 touching_ok \ - "N-well(at-same-potential) spacing < 6 (Mosis #1.3)" - - spacing pwell pwell 6 touching_ok \ - "P-well(at-same-potential) spacing < 6 (Mosis #1.3)" - - spacing rnw nwell 18 touching_illegal \ - "rnw (for resistor L/W extraction) spacing to N-well < 18 (Mosis #2.3)" - - edge4way ~(pwell)/well pwell 1 ~(rnw)/active 0 0 \ - "P-well cannot touch rnw (for resistor L/W extraction) (Mosis #1.4)" active - - spacing diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a 3 touching_ok \ - "Diffusion spacing < 3 (Mosis #2.2)" - - spacing nwell ndiff,rnd,nfet,ndc/a 6 touching_illegal \ - "N-well spacing to N-Diffusion < 6 (Mosis #2.3)" - - spacing pwell pdiff,rpd,pfet,pdc/a 6 touching_illegal \ - "P-well spacing to P-Diffusion < 6 (Mosis #2.3)" - - spacing ndiff,rnd,nfet,ndc/a pdiff,rpd,pfet,pdc/a 12 touching_illegal \ - "N-Diffusion spacing to P-Diffusion < 12 (Mosis #2.3+2.3)" - - edge4way ~(nwell)/well nwell 6 ~(pdiff,rpd,pfet,pdc/a)/active nwell 6 \ - "N-well overlap of P-Diffusion < 6 (Mosis #2.4)" active - - edge4way ~(pwell)/well pwell 6 ~(ndiff,rnd,nfet,ndc/a)/active pwell 6 \ - "P-well overlap of N-Diffusion < 6 (Mosis #2.4)" active - - edge4way ~(nwell)/well nwell 3 ~(nsd,nsc/a)/active nwell 3 \ - "N-well overlap of N-Ohmic < 3 (Mosis #2.4)" active - - edge4way ~(pwell)/well pwell 3 ~(psd,psc/a)/active pwell 3 \ - "P-well overlap of P-Ohmic < 3 (Mosis #2.4)" active - - spacing ndiff,rnd,ndc/a nsd,nsc/a 9 touching_illegal \ - "N-Diffusion spacing to N-Ohmic < 9 (Mosis #2.3+2.4)" - - spacing pdiff,rpd,pdc/a psd,psc/a 9 touching_illegal \ - "P-Diffusion spacing to P-Ohmic < 9 (Mosis #2.3+2.4)" - - spacing nwell psd,psc/a 3 touching_illegal \ - "N-well spacing to P-Ohmic < 3 (Mosis #2.4)" - - spacing pwell nsd,nsc/a 3 touching_illegal \ - "P-well spacing to N-Ohmic < 3 (Mosis #2.4)" - - spacing psd,psc/a rnw,prnw 3 touching_illegal \ - "P-Ohmic spacing to rnw,prnw < 3 (Mosis #2.4)" - - spacing nsd,nsc/a psd,psc/a 6 touching_illegal \ - "N-Ohmic spacing to P-Ohmic < 6 (Mosis #2.4+2.4)" - - spacing ndiff,rnd,nfet,ndc/a,nfet psd,psc/a 4 touching_ok \ - "N-Diffusion spacing to P-Ohmic < 4 (Mosis #2.5)" - - spacing pdiff,rpd,pfet,pdc/a,pfet nsd,nsc/a 4 touching_ok \ - "P-Diffusion spacing to N-Ohmic < 4 (Mosis #2.5)" - - spacing poly,rp,pc/a,nfet,pfet,fet poly,rp,pc/a,nfet,pfet,fet 3 touching_ok \ - "Poly spacing < 3 (Mosis #3.2)" - - spacing poly,rp,pc/a,nfet,pfet,fet fp,fapm 3 touching_illegal \ - "Poly spacing to fill layer (fp) < 3 (Mosis #3.2)" - - spacing fp fp 4 touching_ok \ - "Poly fill layer (fp) spacing < 4 (Mosis #0)" - - edge4way nfet,pfet,fet space/active,poly,fp,rp,pc/a 2 poly,fp,rp,pc/a 0 0 \ - "Poly overhang of Transistor < 2 (Mosis #3.3)" active - - edge4way nfet,pfet,fet space/active,ndiff,rnd,ndc/a,pdiff,rpd,pdc/a 3 ndiff,rnd,ndc/a,pdiff,rpd,pdc/a,nfet,pfet,fet 0 0 \ - "N-Diffusion,P-Diffusion overhang of Transistor < 3 (Mosis #3.4)" active - - edge4way poly,fp,rp,pc/a ~(poly,fp,rp,pc/a,nfet,pfet,fet,prp)/active 1 space space 1 \ - "Poly spacing to Diffusion < 1 (Mosis #3.5)" - - edge4way nfet ~(nfet)/active 3 ~(pselect)/select ~(nfet)/active 3 \ - "N-Transistor space to P-Select < 3 (Mosis #4.1)" select - - edge4way pfet ~(pfet)/active 3 ~(nselect)/select ~(pfet)/active 3 \ - "P-Transistor space to N-Select < 3 (Mosis #4.1)" select - - edge4way nfet ~(nfet)/active 3 ~(psd,psc/a)/active ~(nfet)/active 2 \ - "N-Transistor space to P-Ohmic < 3 (Mosis #4.1)" active - - edge4way pfet ~(pfet)/active 3 ~(nsd,nsc/a)/active ~(pfet)/active 2 \ - "P-Transistor space to N-Ohmic < 3 (Mosis #4.1)" active - -#PEZ edge4way psd,psc/a space ~(nfet)/active space \ -#PEZ "P-Ohmic space to N-Transistor < (Mosis #4.1)" active - -#PEZ edge4way nsd,nsc/a space ~(pfet)/active space \ -#PEZ "N-Ohmic space to P-Transistor < (Mosis #4.1)" active - - edge4way ~(nselect,pselect)/select nselect,pselect 2 ~(diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a)/active nselect,pselect 2 \ - "N-Select,P-Select overlap of Diffusion < 2 (Mosis #4.2_)" active - - edge4way space nselect,pselect 2 ~(ndiff,rnd,nfet,ndc/a)/active nselect 2 \ - "N-Select space to N-Diffusion < 2 (Mosis #4.2a)" active - - edge4way nselect,pselect space 2 ~(ndiff,rnd,nfet,ndc/a)/active nselect 2 \ - "N-Select space to N-Diffusion < 2 (Mosis #4.2b)" active - - edge4way nselect,pselect space 2 ~(ndiff,rnd,nfet,ndc/a)/active space,nselect,pselect 2 \ - "N-Select space to N-Diffusion < 2 (Mosis #4.2c)" active - - edge4way space nselect,pselect 2 ~(pdiff,rpd,pfet,pdc/a)/active pselect 2 \ - "P-Select space to P-Diffusion < 2 (Mosis #4.2aa)" active - - edge4way nselect,pselect space 2 ~(pdiff,rpd,pfet,pdc/a)/active pselect 2 \ - "P-Select space to P-Diffusion < 2 (Mosis #4.2bb)" active - - edge4way nselect,pselect space 2 ~(pdiff,rpd,pfet,pdc/a)/active space,nselect,pselect 2 \ - "P-Select space to P-Diffusion < 2 (Mosis #4.2cc)" active - - edge4way diff space 2 nselect space 2 \ - "N-Select must overlap Diffusion by 2 (Mosis #4.2)" select - - edge4way diff space 2 pselect space 2 \ - "P-Select must overlap Diffusion by 2 (Mosis #4.2)" select - - edge4way ndiff,rnd,nfet,ndc/a space 2 ~(pselect)/select space 2 \ - "P-Select space to N-Diffusion < 2 (Mosis #4.2e)" select - - edge4way pdiff,rpd,pfet,pdc/a space 2 ~(nselect)/select space 2 \ - "N-Select space to P-Diffusion < 2 (Mosis #4.2e)" select - - edge4way ~(pdiff,rpd,pfet,pdc/a,psd,psc/a)/active pdiff,rpd,pfet,pdc/a,psd,psc/a 1 ~(nselect)/select 0 0 \ - "N-Select cannot touch P-Diffusion,P-Ohmic (Mosis #4.2f)" select - - edge4way ~(ndiff,rnd,nfet,ndc/a,nsd,nsc/a)/active ndiff,rnd,nfet,ndc/a,nsd,nsc/a 1 ~(pselect)/select 0 0 \ - "P-Select cannot touch N-Diffusion,N-Ohmic (Mosis #4.2f)" select - - width nsd,nsc/a,psd,psc/a 2 \ - "N-Ohmic,P-Ohmic width < 2 (Mosis #4.1)" - - spacing nselect nselect 2 touching_ok \ - "N-Select spacing < 2 (Mosis #4.4)" - - spacing pselect pselect 2 touching_ok \ - "P-Select spacing < 2 (Mosis #4.4)" - - edge4way ndiff,rnd,ndc/a psd,psc/a 2 ~(ndiff,rnd,ndc/a)/active 0 0 \ - "P-Ohmic(that touches N-Diffusion) width < 2 (Mosis #4.4)" - - edge4way pdiff,rpd,pdc/a nsd,nsc/a 2 ~(pdiff,rpd,pdc/a)/active 0 0 \ - "N-Ohmic(that touches P-Diffusion) width < 2 (Mosis #4.4)" - - edge4way gc ~(gc)/contact 1 poly,fp,rp,pc/a,diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a ~(gc)/contact 1 \ - "Poly,Diffusion overlap of GC contact < 1 (Mosis #5.2)" active - - edge4way gc space 1 poly,fp,rp,pc/a,diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a space 1 \ - "one of: Poly,Diffusion must overlap GC contact by 1 (Mosis #5.2a,6.2a)" active - - edge4way ~(poly,fp,rp,pc/a,diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a)/active poly,fp,rp,pc/a,diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a 1 ~(gc)/contact 0 0 \ - "Edge to one of: Poly,Diffusion cannot touch GC contact (Mosis #5.2a,6.2a)" contact - - spacing gc gc 3 touching_ok \ - "Generic contact spacing < 3 (Mosis #5.3)" - - edge4way ~(gc)/contact gc 1 ~(ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1)/metal1 0 0 \ - "GC contact cannot touch Metal1 contacts (Mosis #0)" metal1 - - edge4way ~(gc2)/contact gc2 1 ~(ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1)/metal1 0 0 \ - "Generic contact2 cannot touch Metal1 contacts (Mosis #0)" metal1 - - spacing gv1 m2c/m2 2 touching_illegal \ - "GV1 via spacing to Metal2 contacts < 2 (Mosis #14.2)" - - spacing poly,fp,rp,pc/a pc/a 4 touching_ok \ - "Poly spacing to Poly contact < 4 (Mosis #5.5.b)" - - edge4way gc ~(gc)/contact 1 diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,poly,fp,rp,pc/a ~(gc)/contact 1 \ - "Diffusion,Poly overlap of GC contact < 1 (Mosis #6.2)" active - - spacing gc pc/a,ndc/a,pdc/a,psc/a,nsc/a 2 touching_illegal \ - "Generic contact spacing to Poly contact,Diffusion contact < 2 (Mosis #5.3)" - - spacing nsc/m1 pdc/m1 1 touching_illegal \ - "nsc spacing to pdc < 1 (Mosis #6.3)" - - spacing psc/m1 ndc/m1 1 touching_illegal \ - "psc spacing to ndc < 1 (Mosis #6.3)" - - - - - - - - spacing nfet,pfet ndc/a,pdc/a,psc/a,nsc/a 1 touching_illegal \ - "N-Transistor,P-Transistor spacing to Diffusion contact < 1 (Mosis #6.4)" - - spacing nfet,pfet gc 2 touching_illegal \ - "N-Transistor,P-Transistor spacing to Generic contact < 2 (Mosis #6.4)" - - spacing diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a pc/a 1 touching_illegal \ - "Diffusion spacing to Poly contact < 1 (Mosis #6.5.b)" - - spacing diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,nfet,pfet ndc/a,pdc/a,psc/a,nsc/a 4 touching_ok \ - "Diffusion spacing to Diffusion contact < 4 (Mosis #6.5.b)" - - spacing pc/a ndc/a,pdc/a,psc/a,nsc/a 2 touching_illegal \ - "pc/a,pm12c/a spacing to ndc/a,pdc/a,psc/a,nsc/a < 2 (Mosis #6.7)" - - spacing m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 3 touching_ok \ - "Metal1 spacing < 3 (Mosis #7.2)" - - spacing m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 fm1,fapm 3 touching_illegal \ - "Metal1 spacing to fill layer (fm1) < 3 (Mosis #7.2)" - - spacing fm1 fm1 4 touching_ok \ - "Metal1 fill layer (fm1) spacing < 4 (Mosis #0)" - - edge4way gc space 1 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 space 1 \ - "Metal1 must overlap GC contact by 1 (Mosis #7.3,7.4)" metal1 - - edge4way ~(m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1)/metal1 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 1 ~(gc)/contact 0 0 \ - "Metal1(edge) cannot touch GC contact (Mosis #7.3+7.4)" contact - - spacing gv1 gv1 3 touching_ok \ - "GV1 via spacing < 3 (Mosis #8.2)" - - edge4way gv1 ~(gv1)/via1 1 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 ~(gv1)/via1 1 \ - "Metal1 overlap of GV1 via < 1 (Mosis #8.3)" metal1 - - edge4way gv1 space 1 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 space 1 \ - "Metal1 must overlap GV1 via by 1 (Mosis #8.3)" metal1 - - edge4way ~(m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1)/metal1 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 1 ~(gv1)/via1 0 0 \ - "Metal1(edge) cannot touch GV1 via (Mosis #8.3)" via1 - - spacing m2,rm2,m2c/m2,m3c/m2 m2,rm2,m2c/m2,m3c/m2 3 touching_ok \ - "Metal2 spacing < 3 (Mosis #9.2)" - - spacing m2,rm2,m2c/m2,m3c/m2 fm2,fapm 3 touching_illegal \ - "Metal2 spacing to fill layer (fm2) < 3 (Mosis #9.2)" - - spacing fm2 fm2 4 touching_ok \ - "Metal2 fill layer (fm2) spacing < 4 (Mosis #0)" - - edge4way gv1 space 1 m2,fm2,rm2,m2c/m2,m3c/m2 space 1 \ - "Metal2 must overlap GV1 via by 1 (Mosis #9.3)" metal2 - - edge4way ~(m2,fm2,rm2,m2c/m2,m3c/m2)/metal2 m2,fm2,rm2,m2c/m2,m3c/m2 1 ~(gv1)/via1 0 0 \ - "Metal2(edge) cannot touch GV1 via (Mosis #9.3)" via1 - - width glass 10 \ - "COG width < 10 (Mosis #10.2)" - - edge4way ~(pad)/metal3 pad 20 ~(glass)/oxide pad 20 \ - "pad overlap of COG < 20 (Mosis #10.3)" oxide - - spacing ecap ecap 3 touching_ok \ - "Ecap spacing < 3 (Mosis #11.2)" - - edge4way ecap ~(ecap)/cap 5 poly,fp,rp,pc/a ~(ecap)/cap 5 \ - "Poly overlap of Ecap < 5 (Mosis #11.3)" active - - edge4way ~(ecap)/cap ecap 1 poly,fp,rp,pc/a 0 0 \ - "Ecap must touch Poly (Mosis #11.3x)" active - - edge4way poly2,phr,p2c,p2m12c space 5 ~(poly,fp,rp,pc/a)/active space 5 \ - "Poly2 spacing to Poly < 5 (Mosis #11.3c)" active - - spacing ecap pc/a 2 touching_illegal \ - "Ecap spacing to Poly contact < 2 (Mosis #11.5)" - - spacing ecap gc 3 touching_illegal \ - "Ecap spacing to Generic contact < 3 (Mosis #11.5)" - - spacing poly2,ecap,phr,p2c,p2m12c poly2,ecap,phr,p2c,p2m12c 3 touching_ok \ - "Poly2 spacing < 3 (Mosis #11.2)" - - spacing poly2,ecap,phr,p2c,p2m12c pc/a,ndc/a,pdc/a,psc/a,nsc/a 2 touching_illegal \ - "Poly2 spacing to Poly contact,Diffusion contact < 2 (Mosis #11.5)" - - spacing poly2,ecap,phr,p2c,p2m12c gc,gc 3 touching_illegal \ - "Poly2 spacing to GC contact < 3 (Mosis #11.5)" - - spacing gc2 gc2 3 touching_ok \ - "Generic contact2 spacing < 3 (Mosis #13.2)" - - edge4way ~(ecap)/cap ecap 3 ~(gc2)/contact ecap 3 \ - "Ecap overlap of Generic contact2 < 3 (Mosis #13.3)" contact - - edge4way ~(ecap)/cap ecap 2 ~(p2c,p2m12c)/cap ecap 2 \ - "Ecap overlap of Poly2 contact < 2 (Mosis #13.3)" cap - - edge4way gc2 space 1 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 space 1 \ - "Metal1 must overlap Generic contact2 by 1 (Mosis #13.4)" metal1 - - edge4way ~(m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1)/metal1 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 1 ~(gc2)/contact 0 0 \ - "Metal1(edge) cannot touch Generic contact2 (Mosis #13.4)" contact - - edge4way ~(poly2,ecap,phr,p2c,p2m12c)/cap poly2,ecap,phr,p2c,p2m12c 1 ~(p2c,p2m12c)/cap poly2,ecap,phr,p2c,p2m12c 1 \ - "Poly2 overlap of Poly2 contact < 1 (Mosis #13.4)" cap - - spacing gv2 gv2 3 touching_ok \ - "GV2 via spacing < 3 (Mosis #14.2)" - - spacing gv2 m3c/m2 2 touching_illegal \ - "GV2 via spacing to Metal3 contact < 2 (Mosis #14.2)" - - edge4way gv2 space 1 m2,fm2,rm2,m2c/m2,m3c/m2 space 1 \ - "Metal2 must overlap GV2 via by 1 (Mosis #14.3)" metal2 - - edge4way ~(m2,fm2,rm2,m2c/m2,m3c/m2)/metal2 m2,fm2,rm2,m2c/m2,m3c/m2 1 ~(gv2)/via2 0 0 \ - "Metal2(edge) cannot touch GV2 via (Mosis #14.3)" via2 - - spacing m3,rm3,m3c/m3,pad m3,rm3,m3c/m3,pad 3 touching_ok \ - "Metal3 spacing < 3 (Mosis #15.2)" - - spacing m3,rm3,m3c/m3,pad fm3,fapm 3 touching_illegal \ - "Metal3 spacing to fill layer (fm3) < 3 (Mosis #15.2)" - - spacing fm3 fm3 4 touching_ok \ - "Metal3 fill layer (fm3) spacing < 4 (Mosis #0)" - - edge4way m3c/m2 ~(m3c/m2)/metal2 1 m3,fm3,rm3,m3c/m3,pad ~(m3c/m2)/metal2 1 \ - "Metal3 overlap of Metal3 contact < 1 (Mosis #15.3)" metal3 - - edge4way gv2 space 2 m3,fm3,rm3,m3c/m3,pad space 2 \ - "Metal3 must overlap GV2 via by 2 (Mosis #15.3)" metal3 - - edge4way ~(m3,fm3,rm3,m3c/m3,pad)/metal3 m3,fm3,rm3,m3c/m3,pad 1 ~(gv2)/via2 0 0 \ - "Metal3(edge) cannot touch GV2 via (Mosis #15.3)" via2 - - spacing hr,phr hr,phr 4 touching_ok \ - "High-Resist spacing < 4 (Mosis #27.2)" - - spacing hr,phr,phr p2c,p2m12c 2 touching_illegal \ - "High-Resist spacing to Poly2 contact < 2 (Mosis #27.3)" - - spacing hr,phr,phr gc 2 touching_illegal \ - "High-Resist spacing to GC contact < 2 (Mosis #27.3)" - - edge4way hr,phr space 2 ~(ndiff,rnd,ndc/a,pdiff,rpd,pdc/a)/active 0 2 \ - "High-Resist space to Diffusion < 2 (Mosis #27.4)" active - - spacing hr,phr,phr poly2,ecap,phr,p2c,p2m12c 2 touching_ok \ - "High-Resist spacing to other Poly2 < 2 (Mosis #27.5)" - - edge4way hr,phr space 2 ~(poly2,ecap,phr,p2c,p2m12c)/contact hr,phr 2 \ - "High-Resist space to Poly2 < 2 (Mosis #27.5x)" contact - - spacing nwell phr 4 touching_illegal \ - "N-well spacing to Silicide-Block poly2R < 4 (Mosis #27.6)" - - spacing phr phr 7 touching_ok \ - "High-Resist poly2R spacing < 7 (Mosis #27.13)" - - edge4way phr space/active,hr 2 hr hr 2 \ - "High-Resist overlap of High-Resist poly2R < 2 (Mosis #27.15)" - - spacing nfi nfi 4 touching_ok \ - "N_field-implant spacing < 4 (Mosis #35.2)" - - spacing pfi pfi 4 touching_ok \ - "P_field-implant spacing < 4 (Mosis #35.2)" - - spacing nfi pfi 4 touching_illegal \ - "N_field-implant spacing to P_field-implant < 4 (Mosis #35.2)" - - spacing nwell,pdiff,rpd,pfet,pdc/a pfi 4 touching_illegal \ - "N-well,P-Diffusion spacing to P_field-implant < 4 (Mosis #2.1)" - - spacing pwell,ndiff,rnd,nfet,ndc/a nfi 4 touching_illegal \ - "P-well,N-Diffusion spacing to N_field-implant < 4 (Mosis #2.1)" - - edge4way ~(nwell)/well nwell 4 ~(nfi)/implant nwell 4 \ - "N-well overlap of N_field-implant < 4 (Mosis #21.2)" implant - - edge4way ~(pwell)/well pwell 4 ~(pfi)/implant pwell 4 \ - "P-well overlap of P_field-implant < 4 (Mosis #21.2)" implant - - spacing fa fapm 4 touching_illegal \ - "fill layer fa spacing to fill layer fapm < 4 (Mosis #0)" - - width fa 7 \ - "filla width < 7 (Mosis #0)" - - width fapm 7 \ - "fillapm width < 7 (Mosis #0)" - - width fp 7 \ - "fillp width < 7 (Mosis #0)" - - width fm1 7 \ - "fillm1 width < 7 (Mosis #0)" - - width fm2 7 \ - "fillm2 width < 7 (Mosis #0)" - - width fm3 7 \ - "fillm3 width < 7 (Mosis #0)" - - edge4way fa ~(fa)/fill 1 ~(fa)/fill (~(fa),fa)/fill 1 \ - "Contact not rectangular (Magic rule)" - - edge4way fb ~(fb)/fill 1 ~(fb)/fill (~(fb),fb)/fill 1 \ - "Contact not rectangular (Magic rule)" - - edge4way fapm ~(fapm)/active 1 ~(fapm)/active (~(fapm),fapm)/active 1 \ - "Contact not rectangular (Magic rule)" - - edge4way fp ~(fp)/active 1 ~(fp)/active (~(fp),fp)/active 1 \ - "Contact not rectangular (Magic rule)" - - edge4way fm1 ~(fm1)/metal1 1 ~(fm1)/metal1 (~(fm1),fm1)/metal1 1 \ - "Contact not rectangular (Magic rule)" - - edge4way fm2 ~(fm2)/metal2 1 ~(fm2)/metal2 (~(fm2),fm2)/metal2 1 \ - "Contact not rectangular (Magic rule)" - - edge4way fm3 ~(fm3)/metal3 1 ~(fm3)/metal3 (~(fm3),fm3)/metal3 1 \ - "Contact not rectangular (Magic rule)" - - edge4way rp space/active 1 prp 0 0 \ - "prp overhang of rpoly (for resistor L/W extraction) < 1 (Mosis #0)" active - - edge4way rp2 space/cap 1 prp2 0 0 \ - "prp2 overhang of rpoly2 (for resistor L/W extraction) < 1 (Mosis #0)" cap - - edge4way rnw space/active 1 prnw 0 0 \ - "prnw overhang of rnwell (for resistor L/W extraction) < 1 (Mosis #0)" active - - edge4way rpd space/active 1 prpd 0 0 \ - "prpd overhang of rpdiff (for resistor L/W extraction) < 1 (Mosis #0)" active - - edge4way rnd space/active 1 prnd 0 0 \ - "prnd overhang of rndiff (for resistor L/W extraction) < 1 (Mosis #0)" active - - edge4way rm1 space/metal1 1 prm1 0 0 \ - "prm1 overhang of rmetal1 (for resistor L/W extraction) < 1 (Mosis #0)" metal1 - - edge4way rm2 space/metal2 1 prm2 0 0 \ - "prm2 overhang of rmetal2 (for resistor L/W extraction) < 1 (Mosis #0)" metal2 - - edge4way rm3 space/metal3 1 prm3 0 0 \ - "prm3 overhang of rmetal3 (for resistor L/W extraction) < 1 (Mosis #0)" metal3 - - edge4way ndc/a,nsc/a ~(ndc/a,nsc/a)/active 1 ~(ndc/a,nsc/a)/active (~(ndc/a,nsc/a),ndc/a,nsc/a)/active 1 \ - "Contact not rectangular (Magic rule)" - - edge4way pdc/a,psc/a ~(pdc/a,psc/a)/active 1 ~(pdc/a,psc/a)/active (~(pdc/a,psc/a),pdc/a,psc/a)/active 1 \ - "Contact not rectangular (Magic rule)" - - edge4way pc/a ~(pc/a)/active 1 ~(pc/a)/active (~(pc/a),pc/a)/active 1 \ - "Contact not rectangular (Magic rule)" - - edge4way gc2 ~(gc2)/contact 1 ~(gc2)/contact (~(gc2),gc2)/contact 1 \ - "Contact not rectangular (Magic rule)" - - edge4way p2c,p2m12c ~(p2c,p2m12c)/cap 1 ~(p2c,p2m12c)/cap (~(p2c,p2m12c),p2c,p2m12c)/cap 1 \ - "Contact not rectangular (Magic rule)" - - edge4way gc ~(gc)/contact 1 ~(gc)/contact (~(gc),gc)/contact 1 \ - "Contact not rectangular (Magic rule)" - - edge4way gv1 ~(gv1)/via1 1 ~(gv1)/via1 (~(gv1),gv1)/via1 1 \ - "Contact not rectangular (Magic rule)" - - edge4way m2c/m1 ~(m2c/m1)/metal1 1 ~(m2c/m1)/metal1 (~(m2c/m1),m2c/m1)/metal1 1 \ - "Contact not rectangular (Magic rule)" - - edge4way gv2 ~(gv2)/via2 1 ~(gv2)/via2 (~(gv2),gv2)/via2 1 \ - "Contact not rectangular (Magic rule)" - - edge4way m3c/m2 ~(m3c/m2)/metal2 1 ~(m3c/m2)/metal2 (~(m3c/m2),m3c/m2)/metal2 1 \ - "Contact not rectangular (Magic rule)" - - exact_overlap gc,ndc/a,pdc/a,psc/a,nsc/a,gc,pc/a,gc - - exact_overlap gc2,p2c,p2m12c - - edge4way pad ~(pad)/m3 1 ~(pad)/m3 (~(pad),pad)/m3 1 \ - "Contact not rectangular (Magic rule)" - - exact_overlap ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1 - - exact_overlap m2c/m2 - - exact_overlap m3c/m3 - - exact_overlap gv1 - - exact_overlap gv2 - - - width m1p 4 \ - "Metal1 PIN width < 4 (do_pins)" - - spacing m1p m1p 4 touching_ok \ - "Metal1 PIN spacing < 4 (do_pins)" - - width m2p 4 \ - "Metal2 PIN width < 4 (do_pins)" - - spacing m2p m2p 4 touching_ok \ - "Metal2 PIN spacing < 4 (do_pins)" - - width m3p 6 \ - "Metal3 PIN width < 6 (do_pins)" - - spacing m3p m3p 4 touching_ok \ - "Metal3 PIN spacing < 4 (do_pins)" - -#CC cifstyle lambda=0.30(p) -#CC cifwidth CWN 360 \ -#CC "generated CIF layer CWN width will be < 12 (';cif see CWN')" -#CC cifspacing CWN CWN 180 touching_ok \ -#CC "generated CIF layer CWN spacing will be < 6 (';cif see CWN')" -#CC cifwidth CWP 360 \ -#CC "generated CIF layer CWP width will be < 12 (';cif see CWP')" -#CC cifspacing CWP CWP 180 touching_ok \ -#CC "generated CIF layer CWP spacing will be < 6 (';cif see CWP')" -#CC cifwidth CSN 60 \ -#CC "generated CIF layer CSN width will be < 2 (';cif see CSN')" -#CC cifspacing CSN CSN 60 touching_ok \ -#CC "generated CIF layer CSN spacing will be < 2 (';cif see CSN')" -#CC cifwidth CSP 60 \ -#CC "generated CIF layer CSP width will be < 2 (';cif see CSP')" -#CC cifspacing CSP CSP 60 touching_ok \ -#CC "generated CIF layer CSP spacing will be < 2 (';cif see CSP')" - - stepsize 400 - -end - -#--------------------------------------------------- -# LEF format definitions -#--------------------------------------------------- - -lef - -ignore PC -ignore CA - -routing m1 M1 m1 met1 -routing m2 M2 m2 met2 -routing m3 M3 m3 met3 - -contact m2c via via1 V1 v1 -contact m3c via2 V2 v2 - -end - -extract - style AMI0.5um(amic5)from:T24H - cscale 1 - lambda 30 - step 100 - sidehalo 8 - planeorder well 0 - planeorder implant 1 - planeorder select 2 - planeorder cap 3 - planeorder active 4 - planeorder metal1 5 - planeorder metal2 6 - planeorder metal3 7 - planeorder oxide 8 - planeorder xp 9 - planeorder comment 10 - planeorder contact 11 - planeorder via1 12 - planeorder via2 13 - planeorder fill 14 - - resist (ndiff,rnd,ndc,nsd,nsc)/active 82200 - resist (pdiff,rpd,pdc,psd,psc)/active 105200 - resist (nwell)/well 808000 - resist (rnw)/active 808000 - resist (pwell)/well 1 - resist (poly,fp,rp,pc,pc,nfet,pfet,fet)/active 22000 - resist (poly2,ecap,p2c,p2m12c,p2c,p2m12c)/cap 40300 - resist (phr)/cap 40300 - resist (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c,m2c)/metal1 90 - resist (m2,fm2,rm2,m2c,m3c,m3c)/metal2 90 - resist (m3,fm3,rm3,m3c,pad)/metal3 50 - - contact ndc 4 62700 - contact pdc 4 160000 - contact pc 4 15600 - contact p2c 4 26100 - contact m2c 4 910 - contact m3c 4 830 - - -#poly2 - overlap (poly,fp,rp,pc,pc)/active (poly2,ecap,phr,p2c,p2m12c,p2c,p2m12c)/cap 84.960 - -#nwell,cwell,pwell - areacap (nwell)/well 3.600 - -#rnw - areacap (rnw)/active 3.600 - -#ndiff -# MODEL HANDLES THIS: areacap (ndiff,ndc)/active 38.430 -# MODEL HANDLES THIS: overlap (ndiff,ndc)/active ~space/w 38.430 -# MODEL HANDLES THIS: perimc (ndiff,ndc)/active ~(ndiff,ndc,nfet,pfet,fet)/active 94.800 -# MODEL HANDLES THIS: sideoverlap (ndiff,ndc)/active ~(ndiff,ndc,nfet,pfet,fet)/active ~space/w 94.800 - - areacap (rnd)/active 38.430 - overlap (rnd)/active ~space/w 38.430 - perimc (rnd)/active ~(rnd)/active 94.800 - sideoverlap (rnd)/active ~(rnd)/active ~space/w 94.800 - -#pdiff -# MODEL HANDLES THIS: areacap (pdiff,pdc)/active 65.880 -# MODEL HANDLES THIS: overlap (pdiff,pdc)/active ~space/w 65.880 -# MODEL HANDLES THIS: perimc (pdiff,pdc)/active ~(pdiff,pdc,nfet,pfet,fet)/active 75.300 -# MODEL HANDLES THIS: sideoverlap (pdiff,pdc)/active ~(pdiff,pdc,nfet,pfet,fet)/active ~space/w 75.300 - - areacap (rpd)/active 65.880 - overlap (rpd)/active ~space/w 65.880 - perimc (rpd)/active ~(rpd)/active 75.300 - sideoverlap (rpd)/active ~(rpd)/active ~space/w 75.300 - -#rnw - -#poly -# MODEL HANDLES THIS: overlap (nfet)/active (ndiff,rnd,ndc)/active 221.670 -# MODEL HANDLES THIS: sideoverlap (nfet)/active ~(nfet)/active (ndiff,rnd,ndc)/active 58.500 -# MODEL HANDLES THIS: overlap (pfet)/active (pdiff,rpd,pdc)/active 213.480 -# MODEL HANDLES THIS: sideoverlap (pfet)/active ~(pfet)/active (pdiff,rpd,pdc)/active 82.800 - - areacap (poly,fp,rp,pc)/active 7.740 - overlap (poly,fp,rp,pc)/active ~space/w 7.740 - -#poly2 - -#rnw - -#metal1 - areacap (m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 2.700 - -#metal1-sub blocked by ~space/a,~space/c - overlap (m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 ~space/w 2.700 ~space/a,~space/c - perimc (m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 20.700 - sideoverlap (m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 ~space/w 20.700 ~space/a,~space/c - -#rnw - overlap (m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 rnw/active 2.700 ~space/c - sideoverlap (m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 rnw/active 20.700 ~space/c - -#metal1-diff blocked by ~space/c - overlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (ndiff,rnd,ndc)/active 3.150 ~space/c - sideoverlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (ndiff,rnd,ndc)/active 20.700 ~space/c - overlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (pdiff,rpd,pdc)/active 3.150 ~space/c - sideoverlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (pdiff,rpd,pdc)/active 20.700 ~space/c - -#metal1-poly blocked by ~space/c - overlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (poly,fp,rp,pc,nfet,pfet,fet)/active 4.590 ~space/c - sideoverlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (poly,fp,rp,pc,nfet,pfet,fet)/active 15.900 ~space/c - sideoverlap (poly,fp,rp,pc,nfet,pfet,fet)/active ~(poly,fp,rp,pc,nfet,pfet,fet)/active (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 15.900 ~space/c - -#metal1-poly2 not blocked - overlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (poly2,ecap,phr,p2c,p2m12c)/cap 3.960 - -#metal2 - areacap (m2,fm2,rm2,m3c)/metal2 1.350 - -#metal2-sub blocked by - overlap (m2,fm2,rm2,m3c)/metal2 ~space/w 1.350 ~space/a,~space/m1,~space/c - perimc (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 15.900 - sideoverlap (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 ~space/w 15.900 ~space/a,~space/m1,~space/c - overlap (m2,fm2,rm2,m3c)/metal2 rnw/active 1.350 ~space/m1,~space/c - sideoverlap (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 rnw/active 15.900 ~space/m1,~space/c - -#metal2-*diff blocked by ~space/m1,~space/c - overlap (m2,fm2,rm2,m3c)/metal2 (ndiff,rnd,ndc)/active 1.350 ~space/m1,~space/c - sideoverlap (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 (ndiff,rnd,ndc)/active 15.900 ~space/m1,~space/c - overlap (m2,fm2,rm2,m2c,m3c)/metal2 (pdiff,rpd,pdc)/active 1.350 ~space/m1,~space/c - sideoverlap (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 (pdiff,rpd,pdc)/active 15.900 ~space/m1,~space/c - -#metal2-poly blocked by ~space/m1,~space/c - overlap (m2,fm2,rm2,m3c)/metal2 (poly,fp,rp,pc,nfet,pfet,fet)/active 1.350 ~space/m1,~space/c - sideoverlap (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 (poly,fp,rp,pc,nfet,pfet,fet)/active 10.800 ~space/m1,~space/c - sideoverlap (poly,fp,rp,pc,nfet,pfet,fet)/active ~(poly,fp,rp,pc,nfet,pfet,fet)/active (m2,fm2,rm2,m2c,m3c)/metal2 10.800 ~space/m1,~space/c - -#metal2-poly2 blocked by ~space/m1 - -#M2->M1 - overlap (m2,fm2,rm2,m3c)/metal2 (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 2.520 - sideoverlap (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 14.700 - sideoverlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (m2,fm2,rm2,m2c,m3c)/metal2 14.700 - -#metal3 - areacap (m3,fm3,rm3,pad)/metal3 0.900 - -#metal3-sub blocked by ~space/a,~space/m1,~space/m2,~space/c - overlap (m3,fm3,rm3,pad)/metal3 ~space/w 0.900 ~space/a,~space/m1,~space/m2,~space/c - perimc (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 10.500 - sideoverlap (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 ~space/w 10.500 ~space/a,~space/m1,~space/m2,~space/c - -#rnw - overlap (m3,fm3,rm3,pad)/metal3 rnw/active 0.900 ~space/m1,~space/m2,~space/c - sideoverlap (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 rnw/active 10.500 ~space/m1,~space/m2,~space/c - -#metal3-*diff blocked by ~space/m1,~space/m2,~space/c - overlap (m3,fm3,rm3,pad)/metal3 (ndiff,rnd,ndc)/active 0.990 ~space/m1,~space/m2,~space/c - sideoverlap (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 (ndiff,rnd,ndc)/active 10.500 ~space/m1,~space/m2,~space/c - overlap (m3,fm3,rm3,pad)/metal3 (pdiff,rpd,pdc)/active 0.990 ~space/m1,~space/m2,~space/c - sideoverlap (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 (pdiff,rpd,pdc)/active 10.500 ~space/m1,~space/m2,~space/c - -#metal3-poly blocked by ~space/m1,~space/m2,~space/c - overlap (m3,fm3,rm3,pad)/metal3 (poly,fp,rp,pc,nfet,pfet,fet)/active 0.810 ~space/m1,~space/m2,~space/c - sideoverlap (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 (poly,fp,rp,pc,nfet,pfet,fet)/active 8.100 ~space/m1,~space/m2,~space/c - sideoverlap (poly,fp,rp,pc,nfet,pfet,fet)/active ~(poly,fp,rp,pc,nfet,pfet,fet)/active (m3,fm3,rm3,m3c,pad)/metal3 8.100 ~space/m1,~space/m2,~space/c - -#metal3-poly2 blocked by ~space/m1,~space/m2 - -#M3->M1 - overlap (m3,fm3,rm3,pad)/metal3 (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 1.080 ~space/m2 - -#metal3-metal1 blocked by ~space/m2 - sideoverlap (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 9.900 ~space/m2 - sideoverlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (m3,fm3,rm3,m3c,pad)/metal3 9.900 ~space/m2 - -#M3->M2 - overlap (m3,fm3,rm3,pad)/metal3 (m2,fm2,rm2,m2c,m3c)/metal2 3.060 - sideoverlap (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 (m2,fm2,rm2,m2c,m3c)/metal2 16.800 - sideoverlap (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 (m3,fm3,rm3,m3c,pad)/metal3 16.800 - -#metal4 - -#metal5 - -#metal6 - -#metal7 - -#metali - -#fets - -# fet pfet pdiff,pdc 2 pfet Vdd! nwell 83 213 -# fet pfet pdiff,pdc 1 pfet Vdd! nwell 83 213 - - device mosfet pfet pfet pdiff,pdc nwell $VDD 83 213 - -# fet nfet ndiff,ndc 2 nfet Gnd! pwell 59 222 -# fet nfet ndiff,ndc 1 nfet Gnd! pwell 59 222 - - device mosfet nfet nfet ndiff,ndc pwell $GND 59 222 - - fetresis pfet linear 20996 - fetresis pfet saturation 20996 - fetresis nfet linear 6144 - fetresis nfet saturation 6144 - -# fet rnwell nsd,nsc 2 nwellResistor Gnd! nwell,pwell 0 0 -# fet rpoly poly,pc 2 polyResistor Gnd! nwell,pwell 0 0 -# fet rpoly2 poly2,p2c 2 poly2Resistor Gnd! nwell,pwell 0 0 -# fet rndiff ndiff,ndc 2 ndiffResistor Gnd! nwell,pwell 0 0 -# fet rpdiff pdiff,pdc 2 pdiffResistor Gnd! nwell,pwell 0 0 - - device resistor None rnwell nsd,nsc - device resistor None rpoly poly,pc - device resistor None rpoly2 poly2,p2c - device resistor None rndiff ndiff,ndc - device resistor None rpdiff pdiff,pdc - -# fet rmetal1 metal1 2 metal1Resistor Gnd! nwell,pwell 0 0 -# fet rmetal2 metal2 2 metal2Resistor Gnd! nwell,pwell 0 0 -# fet rmetal3 metal3 2 metal3Resistor Gnd! nwell,pwell 0 0 -# fet phr poly2,p2c 2 phrResistor Gnd! nwell,pwell 0 0 - - device resistor None rmetal1 *metal1 - device resistor None rmetal2 *metal2 - device resistor None rmetal3 *metal3 - device resistor None phr poly2,p2c - -end - -wiring - contact pdcontact 4 metal1 0 pdiff 0 - contact ndcontact 4 metal1 0 ndiff 0 - contact pcontact 4 metal1 0 poly 0 - contact m2contact 4 metal1 0 metal2 0 - contact m3contact 5 metal2 0 metal3 1 - -end - -router - layer2 metal2 3 m2,fm2,rm2,m2c/m2,m3c/m2,m3c/m2 4 poly,fp,rp,ndiff,rnd,nsd,pdiff,rpd,psd,m1,fm1,rm1 1 - layer1 metal1 3 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 3 - contacts m2contact 4 - gridspacing 8 - -end - -plowing - fixed nfet,pfet,glass,pad - covered nfet,pfet - drag nfet,pfet - -end - -plot -style colorversatec - ndiff,rnd,ndc/a yellow \ - 5555 AAAA 5555 AAAA \ - 5555 AAAA 5555 AAAA \ - 5555 AAAA 5555 AAAA \ - 5555 AAAA 5555 AAAA - ndiff,rnd,ndc/a cyan \ - 0000 5555 0000 5555 \ - 0000 5555 0000 5555 \ - 0000 5555 0000 5555 \ - 0000 5555 0000 5555 - nsd,nsc/a yellow \ - 1515 2A2A 5151 A2A2 \ - 1515 2A2A 5151 A2A2 \ - 1515 2A2A 5151 A2A2 \ - 1515 2A2A 5151 A2A2 - nsd,nsc/a cyan \ - 0000 1515 0000 5151 \ - 0000 1515 0000 5151 \ - 0000 1515 0000 5151 \ - 0000 1515 0000 5151 - pdiff,rpd,pdc/a yellow \ - 5555 AAAA 5555 AAAA \ - 5555 AAAA 5555 AAAA \ - 5555 AAAA 5555 AAAA \ - 5555 AAAA 5555 AAAA - pdiff,rpd,pdc/a cyan \ - 0000 5555 0000 5555 \ - 0000 5555 0000 5555 \ - 0000 5555 0000 5555 \ - 0000 5555 0000 5555 - pdiff,rpd,pdc/a magenta \ - AAAA 0000 AAAA 0000 \ - AAAA 0000 AAAA 0000 \ - AAAA 0000 AAAA 0000 \ - AAAA 0000 AAAA 0000 - psd,psc/a yellow \ - 1515 2A2A 5151 A2A2 \ - 1515 2A2A 5151 A2A2 \ - 1515 2A2A 5151 A2A2 \ - 1515 2A2A 5151 A2A2 - psd,psc/a cyan \ - 0000 1515 0000 5151 \ - 0000 1515 0000 5151 \ - 0000 1515 0000 5151 \ - 0000 1515 0000 5151 - psd,psc/a magenta \ - 2A2A 0000 A2A2 0000 \ - 2A2A 0000 A2A2 0000 \ - 2A2A 0000 A2A2 0000 \ - 2A2A 0000 A2A2 0000 - poly,fp,rp,pc/a magenta \ - 5555 AAAA 5555 AAAA \ - 5555 AAAA 5555 AAAA \ - 5555 AAAA 5555 AAAA \ - 5555 AAAA 5555 AAAA - nfet yellow \ - 0505 8282 1414 0A0A \ - 5050 2828 4141 A0A0 \ - 0505 8282 1414 0A0A \ - 5050 2828 4141 A0A0 - nfet cyan \ - 0000 0505 0000 1414 \ - 0000 5050 0000 4141 \ - 0000 0505 0000 1414 \ - 0000 5050 0000 4141 - nfet magenta \ - 5050 2828 4141 A0A0 \ - 0505 8282 1414 0A0A \ - 5050 2828 4141 A0A0 \ - 0505 8282 1414 0A0A - pfet yellow \ - 6363 A0A0 5050 2828 \ - 3636 0A0A 0505 8282 \ - 6363 A0A0 5050 2828 \ - 3636 0A0A 0505 8282 - pfet cyan \ - 0000 5151 0000 5454 \ - 0000 1515 0000 1515 \ - 0000 5151 0000 5454 \ - 0000 1515 0000 1515 - pfet magenta \ - 9494 0A0A 2525 8282 \ - 4949 A0A0 5252 2828 \ - 9494 0A0A 2525 8282 \ - 4949 A0A0 5252 2828 - poly2,ecap,phr,p2c,p2m12c yellow \ - FFFF FFFF FFFF FFFF \ - FFFF FFFF FFFF FFFF \ - FFFF FFFF FFFF FFFF \ - FFFF FFFF FFFF FFFF - m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 cyan \ - AAAA 0000 AAAA 0000 \ - AAAA 0000 AAAA 0000 \ - AAAA 0000 AAAA 0000 \ - AAAA 0000 AAAA 0000 - m2,fm2,rm2,m2c/m2,m3c/m2 cyan \ - 0000 1111 0000 4444 \ - 0000 1111 0000 4444 \ - 0000 1111 0000 4444 \ - 0000 1111 0000 4444 - m2,fm2,rm2,m2c/m2,m3c/m2 magenta \ - 0000 4444 0000 1111 \ - 0000 4444 0000 1111 \ - 0000 4444 0000 1111 \ - 0000 4444 0000 1111 - m2c/m1,gv1 black \ - 0000 6666 6666 0000 \ - 0000 9999 9999 0000 \ - 0000 6666 6666 0000 \ - 0000 9999 9999 0000 - pad,glass black \ - 0300 0700 0E00 1C00 \ - 3800 7000 E000 C000 \ - 00C0 00E0 0070 0038 \ - 001C 000E 0007 0003 - nwell yellow \ - 0800 1000 2000 4000 \ - 8000 0001 0002 0004 \ - 0008 0010 0020 0040 \ - 0080 0010 0200 0400 - nwell cyan \ - 1000 2000 4000 8000 \ - 0001 0002 0004 0008 \ - 0010 0020 0040 0080 \ - 0100 0200 0400 0800 - pwell yellow \ - 1000 0400 0400 0100 \ - 0100 0040 0040 0010 \ - 0010 0004 0004 0001 \ - 0001 4000 4000 1000 - pwell cyan \ - 0000 0800 0000 0200 \ - 0000 0080 0000 0020 \ - 0000 0008 0000 0002 \ - 0000 8000 0000 2000 - pwell magenta \ - 0800 0000 0200 0000 \ - 0080 0000 0020 0000 \ - 0008 0000 0002 0000 \ - 8000 0000 2000 0000 - m3c/m2,gv2 black \ - 0100 0000 0000 0000 \ - 1010 0000 0000 0000 \ - 0001 0000 0000 0000 \ - 1010 0000 0000 0000 - m3c/m2,gv2 cyan \ - 0280 0000 0820 0000 \ - 2008 0000 8002 0000 \ - 8002 0000 2008 0000 \ - 0820 0000 0280 0000 - m3c/m2,gv2 magenta \ - 0100 06C0 0440 1830 \ - 1010 600C 4004 8003 \ - 0001 C006 4004 3018 \ - 1010 0C60 0440 0380 - m3c/m2,gv2 black \ - 0820 0820 0820 0FE0 \ - E00F 2008 2008 2008 \ - 2008 2008 2008 E00F \ - 0000 0FE0 0820 0820 - error_p,error_s,error_ps black \ - 0000 3C3C 4646 4A4A \ - 5252 6262 3C3C 0000 \ - 0000 3C3C 4646 4A4A \ - 5252 6262 3C3C 0000 - magnet yellow \ - AAAA 0000 5555 0000 \ - AAAA 0000 5555 0000 \ - AAAA 0000 5555 0000 \ - AAAA 0000 5555 0000 - fence magenta \ - FFFF 0000 0000 0000 \ - 0000 0000 0000 0000 \ - FFFF 0000 0000 0000 \ - 0000 0000 0000 0000 - rotate cyan \ - 0000 E0E0 E0E0 E0E0 \ - 0000 0000 0000 0000 \ - 0000 E0E0 E0E0 E0E0 \ - 0000 0000 0000 0000 - pc/a,ndc/a,pdc/a,psc/a,nsc/a,gc,gc,gc X - -style versatec - pfet \ - 07c0 0f80 1f00 3e00 \ - 7c00 f800 f001 e003 \ - c007 800f 001f 003e \ - 00c7 00f8 01f0 03e0 - nfet \ - 1f00 0f80 07c0 03e0 \ - 01f0 00f8 007c 003e \ - 001f 800f c007 e003 \ - f001 f800 7c00 3e00 - gv1 \ - c3c3 c3c3 0000 0000 \ - 0000 0000 c3c3 c3c3 \ - c3c3 c3c3 0000 0000 \ - 0000 0000 c3c3 c3c3 - pwell \ - 2020 2020 2020 2020 \ - 2020 2020 2020 2020 \ - 0000 0000 0000 0000 \ - 0000 0000 0000 0000 - nwell \ - 0808 0404 0202 0101 \ - 0000 0000 0000 0000 \ - 0808 0404 0202 0101 \ - 0000 0000 0000 0000 - poly,fp,rp,pc/a,nfet,pfet \ - 0808 0400 0202 0101 \ - 8080 4000 2020 1010 \ - 0808 0004 0202 0101 \ - 8080 0040 2020 1010 - m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 \ - 8080 0000 0000 0000 \ - 0808 0000 0000 0000 \ - 8080 0000 0000 0000 \ - 0808 0000 0000 0000 - pad,glass \ - 0000 0000 1c1c 3e3e \ - 3636 3e3e 1c1c 0000 \ - 0000 0000 1c1c 3e3e \ - 3636 3e3e 1c1c 0000 - nsd,nsc/a \ - 0808 1414 2222 4141 \ - 8080 4040 2020 1010 \ - 0808 1414 2222 4141 \ - 8080 4040 2020 1010 - m2,fm2,rm2,m2c/m2,m3c/m2 \ - 0000 1111 0000 0000 \ - 0000 1111 0000 0000 \ - 0000 1111 0000 0000 \ - 0000 1111 0000 0000 - pdiff,rpd,pdc/a,pfet \ - 0000 0808 5555 8080 \ - 0000 8080 5555 0808 \ - 0000 0808 5555 8080 \ - 0000 8080 5555 0808 - psd,psc/a \ - 1414 2222 0000 2222 \ - 4141 2222 0000 2222 \ - 1414 2222 0000 2222 \ - 4141 2222 0000 2222 - ndiff,rnd,ndc/a,nfet \ - 0808 1010 2020 4040 \ - 8080 4141 2222 1414 \ - 0808 1010 2020 4040 \ - 8080 4141 2222 1414 - pc/a,ndc/a,pdc/a,psc/a,nsc/a,gc,gc,gc X - -style gremlin - pfet 9 - nfet 10 - gv1 11 - pwell 15 - nwell 16 - poly,fp,rp,pc/a,nfet,pfet 19 - pc/a,ndc/a,pdc/a,psc/a,nsc/a,gc,gc,gc 22 - pad,glass 23 - nsd,nsc/a 24 - gv1 28 - pdiff,rpd,pdc/a,pfet 29 - psd,psc/a 30 - ndiff,rnd,ndc/a,nfet 31 - pc/a,ndc/a,pdc/a,psc/a,nsc/a,gc,gc,gc,gv1 X - -end - diff --git a/technology/scn3me_subm/tech/__init__.py b/technology/scn3me_subm/tech/__init__.py deleted file mode 100755 index 2573d2c2..00000000 --- a/technology/scn3me_subm/tech/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -""" -Import tech specific modules. -""" - -from .tech import * - diff --git a/technology/scn3me_subm/tech/calibreDRC_scn3me_subm.rul b/technology/scn3me_subm/tech/calibreDRC_scn3me_subm.rul deleted file mode 100755 index 91d35fb4..00000000 --- a/technology/scn3me_subm/tech/calibreDRC_scn3me_subm.rul +++ /dev/null @@ -1,225 +0,0 @@ -//////////////////////////////////////////////////////////// -// DEFINE BOOLEAN LAYERS -//////////////////////////////////////////////////////////// -LAYOUT USE DATABASE PRECISION YES - -layer pwell 41 -layer nwell 42 -layer active 43 -layer poly 46 -layer nimplant 45 -layer pimplant 44 -layer contact 25 -layer active_contact 48 -layer poly_contact 47 -layer metal1 49 -layer via1 50 -layer metal2 51 -layer via2 61 -layer metal3 62 -layer glass 52 -layer pad 26 - -//Enabling incremental connectivity for antenna rule checks -DRC Incremental Connect Yes - -well = nwell OR pwell -gate = poly AND active -implant = nimplant OR pimplant -fieldpoly = poly NOT active - -contactenc1 = active OR poly -contactenc = contactenc1 AND metal1 -diode = contact AND active -act_poly = interact poly active - -GROUP mask_check -//Well.2 Well.4 -Poly.1 Poly.2 Poly.3 Poly.4 Poly.5 -Active.1 Active.2 // Active.3 -Contact.1 Contact.2 Contact.3 Contact.4 -Contact.5 Contact.6 Metal1.1 Metal1.2 Metal1.3 - - - -//Well.1 { -//@Nwell and Pwell must not overlap -//AND nwell pwell -//} - -//Well.2 { -//@Min spacing of pwell to nwell = 0.00 -//EXTERNAL nwell pwell < 0.00 -//} - -//Well.4 { -//@Min width of nwell = 3.6 -//INTERNAL nwell < 3.6 -//} - -Poly.1 { -@Min width of poly = 0.6 -INTERNAL poly < 0.6 -} - -Poly.2 { -@Min spacing of gate poly = 0.9 -EXTERNAL gate < 0.9 -} - -Poly.3 { -@Min extension of poly past active = 0.6 -ENCLOSURE active poly < 0.6 -} - -Poly.4 { -@Minimum active enclosure of gate =0.6 -ENCLOSURE poly active < 0.6 -} - -Poly.5 { -@Minimum spacing of poly to active = 0.3 -EXTERNAL act_poly active < 0.3 -} - -Active.1 { -@Minimum width of active = 0.9 -INTERNAL active < 0.9 -} - -Active.2 { -@Minimum spacing of active areas = 0.9 -EXTERNAL active < 0.9 -} - -//Active.3 { -//@Minimum well enclosure of active = 1.8 -//ENCLOSURE active well < 1.8 -//} - -Contact.1 { -@Minimum width of contact = 0.6 -INTERNAL contact < 0.6 -} - -Contact.2 { -@Minimum spacing of contact = 0.9 -EXTERNAL contact < 0.9 -} - -Contact.3 { -@Contact must be inside metal1 and active or poly -NOT contact contactenc -} - -Contact.4 { -@Minimum active enclosure of contact = 0.3 -ENCLOSURE contact active < 0.3 -} - -Contact.5 { -@Minimum poly enclosure of contact = 0.3 -ENCLOSURE contact poly < 0.3 -} - -Contact.6 { -@Minimum spacing of contact to poly = 0.6 -EXTERNAL poly contact < 0.6 -} - -Metal1.1 { -@Minimum width of metal1 = 0.9 -INTERNAL metal1 < 0.9 -} - -Metal1.2 { -@Minimum spacing of metal1 = 0.9 -EXTERNAL metal1 < 0.9 -} - -Metal1.3 { -@Metal1 must extend past contact by 0.3 on two opposite sides -RECTANGLE ENCLOSURE contact metal1 -GOOD 0.00 0.3 OPPOSITE 0.00 0.3 OPPOSITE -} - -Metal1.4 { -@Metal1 must extend past via1 by 0.3 on two opposite sides -RECTANGLE ENCLOSURE via1 metal1 -GOOD 0.00 0.3 OPPOSITE 0.00 0.3 OPPOSITE -} - -Via1.1 { -@Minimum width of via1 = 0.6 -INTERNAL via1 < 0.6 -} - -Via1.2 { -@Minimum spacing of via1 = 0.6 -EXTERNAL via1 < 0.6 -} - -Via1.3 { -@Via1 must be inside metal1 -NOT via1 metal1 -} - - -Metal2.1 { -@Minimum width of metal2 = 0.9 -INTERNAL metal2 < 0.9 -} - -Metal2.2 { -@Minimum spacing of metal2 = 0.9 -EXTERNAL metal2 < 0.9 -} - -Metal2.3 { -@Metal2 must extend past via1 by 0.3 on two opposite sides -RECTANGLE ENCLOSURE via1 metal2 -GOOD 0.00 0.3 OPPOSITE 0.00 0.3 OPPOSITE -} - -Metal2.4 { -@Metal2 must extend past via2 by 0.3 on two opposite sides -RECTANGLE ENCLOSURE via2 metal2 -GOOD 0.00 0.3 OPPOSITE 0.00 0.3 OPPOSITE -} - -Via2.1 { -@Minimum width of via2 = 0.6 -INTERNAL via2 < 0.6 -} - -Via2.2 { -@Minimum spacing of via2 = 0.9 -EXTERNAL via2 < 0.9 -} - -Via2.3 { -@Via2 must be inside metal2 -NOT via2 metal2 -} - -Via2.4 { -@Via2 must be inside metal3 -NOT via2 metal3 -} - -Metal3.1 { -@Minimum width of metal3 = 1.5 -INTERNAL metal3 < 1.5 -} - -Metal3.2 { -@Minimum spacing of metal3 = 0.9 -EXTERNAL metal3 < 0.9 -} - -Metal3.3 { -@Metal3 must extend past via2 by 0.6 on two opposite sides -RECTANGLE ENCLOSURE via2 metal3 -GOOD 0.00 0.6 OPPOSITE 0.00 0.6 OPPOSITE -} - diff --git a/technology/scn3me_subm/tech/calibreLVS_scn3me_subm.rul b/technology/scn3me_subm/tech/calibreLVS_scn3me_subm.rul deleted file mode 100755 index 5d3516a6..00000000 --- a/technology/scn3me_subm/tech/calibreLVS_scn3me_subm.rul +++ /dev/null @@ -1,123 +0,0 @@ -TITLE "LVS Rule File for scn3me_subm" - -LVS POWER NAME vdd -LVS GROUND NAME gnd GROUND -LVS REDUCE PARALLEL MOS yes -LVS REDUCE SERIES MOS yes -LVS REDUCE SEMI SERIES MOS yes -LVS FILTER UNUSED MOS no -LVS RECOGNIZE GATES all -LVS COMPONENT TYPE PROPERTY element -LVS COMPONENT SUBTYPE PROPERTY model -LVS IGNORE PORTS no - -LVS REPORT mask.lvs.rep -LVS REPORT OPTION N -LVS REPORT MAXIMUM 50 -MASK RESULTS DATABASE maskdb - -precision 1000 -resolution 250 - -TEXT LAYER metal1 metal2 metal3 -PORT LAYER TEXT metal1 metal2 metal3 - - -layer pwell 41 -layer nwell 42 -layer active 43 -layer poly 46 -layer nimplant 45 -layer pimplant 44 -layer contact 25 -layer active_contact 48 -layer poly_contact 47 -layer metal1 49 -layer via1 50 -layer metal2 51 -layer via2 61 -layer metal3 62 -layer glass 52 -layer pad 26 - -connect metal1 metal2 by via1 -connect metal2 metal3 by via2 - -pdif = active and pimplant // P-diffusion -ndif = active and nimplant // N-diffusion - -ngate = poly and ndif // N-Transistor -pgate = poly and pdif // P-transistor - -nsrcdrn = ndif not ngate // N-tansistor Source and Drain contacts diffusion region -psrcdrn = pdif not pgate // P-tansistor Source and Drain contacts diffusion region - -pcont = psrcdrn and pwell - -ntapcont = active not interact pimplant -ptapcont = active not interact nimplant - -bulk = extent -nsub = (bulk not pwell) and nwell -ncont = nsrcdrn and nsub - -connect metal1 poly psrcdrn nsrcdrn by contact mask -connect psrcdrn pwell by pcont mask -connect nsrcdrn nsub by ncont mask - -ncont1= ntapcont and nsub -pcont1= ptapcont and pwell -connect metal1 ncont1 by contact mask -connect metal1 pcont1 by contact mask -connect ncont1 nsub -connect pcont1 pwell - -connect psrcdrn metal1 by contact -connect nsrcdrn metal1 by contact - -connect psrcdrn metal1 by active_contact -connect nsrcdrn metal1 by active_contact - -connect poly metal1 by contact - -connect poly metal1 by poly_contact - -device mp (p) pgate poly (G) psrcdrn (S) psrcdrn (D) nsub CMACRO FET_PROPERTIES pgate nsub -device mn (n) ngate poly (G) nsrcdrn (S) nsrcdrn (D) pwell CMACRO FET_PROPERTIES ngate pwell - -VARIABLE trace_delta 4e-9 - -DMACRO FET_TRACE device_type device_name { -TRACE PROPERTY device_type(device_name) l l trace_delta ABSOLUTE -TRACE PROPERTY device_type(device_name) w w trace_delta ABSOLUTE - -} - -CMACRO FET_TRACE MN n -CMACRO FET_TRACE MP p - -DMACRO FET_PROPERTIES seed well{ -[ -PROPERTY W, L, AS, AD, PS, PD - - AS = area(S) - AD = area(D) - PS = perimeter(S) - PD = perimeter(D) - if ( AS == 0 ) { - AD = area(D) / 2 - AS = AD - PD = perimeter(D) / 2 - PS = PD - } - if ( AD == 0 ) { - AS = area(S) / 2 - AD = AS - PS = perimeter(S) / 2 - PD = PS - } - W = (perim_co(seed,S) + perim_co(seed,D) ) * 0.5 - L = (perim(seed) - perim_co(seed,S) - perim_in(seed,S) - perim_co(seed,D) - perim_in(seed,D) ) * 0.5 - -] -} diff --git a/technology/scn3me_subm/tech/tech.py b/technology/scn3me_subm/tech/tech.py deleted file mode 100755 index e088eff9..00000000 --- a/technology/scn3me_subm/tech/tech.py +++ /dev/null @@ -1,279 +0,0 @@ -import os -from design_rules import * - -""" -File containing the process technology parameters for SCMOS 3me, subm, 180nm. -""" - -#GDS file info -GDS={} -# gds units -GDS["unit"]=(0.001,1e-6) -# default label zoom -GDS["zoom"] = 0.5 - - -################################################### -##GDS Layer Map -################################################### - -# create the GDS layer map -layer={} -layer["vtg"] = -1 -layer["vth"] = -1 -layer["contact"] = 47 -layer["pwell"] = 41 -layer["nwell"] = 42 -layer["active"] = 43 -layer["pimplant"] = 44 -layer["nimplant"] = 45 -layer["poly"] = 46 -layer["active_contact"] = 48 -layer["metal1"] = 49 -layer["via1"] = 50 -layer["metal2"] = 51 -layer["via2"] = 61 -layer["metal3"] = 62 -layer["text"] = 63 -layer["boundary"] = 63 -layer["blockage"] = 83 - -################################################### -##END GDS Layer Map -################################################### - -################################################### -##DRC/LVS Rules Setup -################################################### -_lambda_ = 0.3 - -#technology parameter -parameter={} -parameter["min_tx_size"] = 4*_lambda_ -parameter["beta"] = 2 - -parameter["6T_inv_nmos_size"] = 8*_lambda_ -parameter["6T_inv_pmos_size"] = 3*_lambda_ -parameter["6T_access_size"] = 4*_lambda_ - -drclvs_home=os.environ.get("DRCLVS_HOME") - -drc = design_rules("scn3me_subm") - -drc["body_tie_down"] = 0 -drc["has_pwell"] = True -drc["has_nwell"] = True - - -#grid size is 1/2 a lambda -drc["grid"]=0.5*_lambda_ -#DRC/LVS test set_up -drc["drc_rules"]=drclvs_home+"/calibreDRC_scn3me_subm.rul" -drc["lvs_rules"]=drclvs_home+"/calibreLVS_scn3me_subm.rul" -drc["layer_map"]=os.environ.get("OPENRAM_TECH")+"/scn3me_subm/layers.map" - - -# minwidth_tx with contact (no dog bone transistors) -drc["minwidth_tx"] = 4*_lambda_ -drc["minlength_channel"] = 2*_lambda_ - -# 1.3 Minimum spacing between wells of same type (if both are drawn) -drc["well_to_well"] = 6*_lambda_ -# 1.4 Minimum spacing between wells of different type (if both are drawn) -drc["pwell_to_nwell"] = 0 -# 1.1 Minimum width -drc["minwidth_well"] = 12*_lambda_ - -# 3.1 Minimum width -drc["minwidth_poly"] = 2*_lambda_ -# 3.2 Minimum spacing over active -drc["poly_to_poly"] = 3*_lambda_ -# 3.3 Minimum gate extension of active -drc["poly_extend_active"] = 2*_lambda_ -# 5.5.b Minimum spacing between poly contact and other poly (alternative rules) -drc["poly_to_polycontact"] = 4*_lambda_ -# ?? -drc["active_enclosure_gate"] = 0.0 -# 3.5 Minimum field poly to active -drc["poly_to_active"] = _lambda_ -# 3.2.a Minimum spacing over field poly -drc["poly_to_field_poly"] = 3*_lambda_ -# Not a rule -drc["minarea_poly"] = 0.0 - -# ?? -drc["active_to_body_active"] = 4*_lambda_ # Fix me -# 2.1 Minimum width -drc["minwidth_active"] = 3*_lambda_ -# 2.2 Minimum spacing -drc["active_to_active"] = 3*_lambda_ -# 2.3 Source/drain active to well edge -drc["well_enclosure_active"] = 6*_lambda_ -# Reserved for asymmetric enclosures -drc["well_extend_active"] = 6*_lambda_ -# Not a rule -drc["minarea_active"] = 0.0 - -# 4.1 Minimum select spacing to channel of transistor to ensure adequate source/drain width -drc["implant_to_channel"] = 3*_lambda_ -# 4.2 Minimum select overlap of active -drc["implant_enclosure_active"] = 2*_lambda_ -# 4.3 Minimum select overlap of contact -drc["implant_enclosure_contact"] = _lambda_ -# Not a rule -drc["implant_to_contact"] = 0 -# Not a rule -drc["implant_to_implant"] = 0 -# Not a rule -drc["minwidth_implant"] = 0 - -# 6.1 Exact contact size -drc["minwidth_contact"] = 2*_lambda_ -# 5.3 Minimum contact spacing -drc["contact_to_contact"] = 3*_lambda_ -# 6.2.b Minimum active overlap -drc["active_enclosure_contact"] = _lambda_ -# Reserved for asymmetric enclosure -drc["active_extend_contact"] = _lambda_ -# 5.2.b Minimum poly overlap -drc["poly_enclosure_contact"] = _lambda_ -# Reserved for asymmetric enclosures -drc["poly_extend_contact"] = _lambda_ -# Reserved for other technologies -drc["contact_to_gate"] = 2*_lambda_ -# 5.4 Minimum spacing to gate of transistor -drc["contact_to_poly"] = 2*_lambda_ - -# 7.1 Minimum width -drc["minwidth_metal1"] = 3*_lambda_ -# 7.2 Minimum spacing -drc["metal1_to_metal1"] = 3*_lambda_ -# 7.3 Minimum overlap of any contact -drc["metal1_enclosure_contact"] = _lambda_ -# Reserved for asymmetric enclosure -drc["metal1_extend_contact"] = _lambda_ -# 8.3 Minimum overlap by metal1 -drc["metal1_enclosure_via1"] = _lambda_ -# Reserve for asymmetric enclosures -drc["metal1_extend_via1"] = _lambda_ -# Not a rule -drc["minarea_metal1"] = 0 - -# 8.1 Exact size -drc["minwidth_via1"] = 2*_lambda_ -# 8.2 Minimum via1 spacing -drc["via1_to_via1"] = 3*_lambda_ - -# 9.1 Minimum width -drc["minwidth_metal2"] = 3*_lambda_ -# 9.2 Minimum spacing -drc["metal2_to_metal2"] = 3*_lambda_ -# 9.3 Minimum overlap of via1 -drc["metal2_extend_via1"] = _lambda_ -# Reserved for asymmetric enclosures -drc["metal2_enclosure_via1"] = _lambda_ -# 14.3 Minimum overlap by metal2 -drc["metal2_extend_via2"] = _lambda_ -# Reserved for asymmetric enclosures -drc["metal2_enclosure_via2"] = _lambda_ -# Not a rule -drc["minarea_metal2"] = 0 - -# 14.1 Exact size -drc["minwidth_via2"] = 2*_lambda_ -# 14.2 Minimum spacing -drc["via2_to_via2"] = 3*_lambda_ - -# 15.1 Minimum width -drc["minwidth_metal3"] = 5*_lambda_ -# 15.2 Minimum spacing to metal3 -drc["metal3_to_metal3"] = 3*_lambda_ -# 15.3 Minimum overlap of via 2 -drc["metal3_extend_via2"] = 2*_lambda_ -# Reserved for asymmetric enclosures -drc["metal3_enclosure_via2"] = 2*_lambda_ -# Not a rule -drc["minarea_metal3"] = 0 - -################################################### -##END DRC/LVS Rules -################################################### - -################################################### -##Spice Simulation Parameters -################################################### - -# spice model info -spice={} -spice["nmos"]="n" -spice["pmos"]="p" -# This is a map of corners to model files -SPICE_MODEL_DIR=os.environ.get("SPICE_MODEL_DIR") -# FIXME: Uncomment when we have the new spice models -#spice["fet_models"] = { "TT" : [SPICE_MODEL_DIR+"/nom/pmos.sp",SPICE_MODEL_DIR+"/nom/nmos.sp"] } -spice["fet_models"] = { "TT" : [SPICE_MODEL_DIR+"/nom/pmos.sp",SPICE_MODEL_DIR+"/nom/nmos.sp"], - "FF" : [SPICE_MODEL_DIR+"/ff/pmos.sp",SPICE_MODEL_DIR+"/ff/nmos.sp"], - "FS" : [SPICE_MODEL_DIR+"/ff/pmos.sp",SPICE_MODEL_DIR+"/ss/nmos.sp"], - "SF" : [SPICE_MODEL_DIR+"/ss/pmos.sp",SPICE_MODEL_DIR+"/ff/nmos.sp"], - "SS" : [SPICE_MODEL_DIR+"/ss/pmos.sp",SPICE_MODEL_DIR+"/ss/nmos.sp"] } - - -#spice stimulus related variables -spice["feasible_period"] = 5 # estimated feasible period in ns -spice["supply_voltages"] = [4.5, 5.0, 5.5] # Supply voltage corners in [Volts] -spice["nom_supply_voltage"] = 5.0 # Nominal supply voltage in [Volts] -spice["rise_time"] = 0.05 # rise time in [Nano-seconds] -spice["fall_time"] = 0.05 # fall time in [Nano-seconds] -spice["temperatures"] = [0, 25, 100] # Temperature corners (celcius) -spice["nom_temperature"] = 25 # Nominal temperature (celcius) - -#sram signal names -#FIXME: We don't use these everywhere... -spice["vdd_name"] = "vdd" -spice["gnd_name"] = "gnd" -spice["control_signals"] = ["CSB", "WEB"] -spice["data_name"] = "DATA" -spice["addr_name"] = "ADDR" -spice["minwidth_tx"] = drc["minwidth_tx"] -spice["channel"] = drc["minlength_channel"] -spice["clk"] = "clk" - -# analytical delay parameters -# FIXME: These need to be updated for SCMOS, they are copied from FreePDK45. -spice["vdd_nominal"] = 5.0 # Typical Threshold voltage in Volts -spice["temp_nominal"] = 25.0 # Typical Threshold voltage in Volts -spice["v_threshold_typical"] = 1.3 # Typical Threshold voltage in Volts -spice["wire_unit_r"] = 0.075 # Unit wire resistance in ohms/square -spice["wire_unit_c"] = 0.64 # Unit wire capacitance ff/um^2 -spice["min_tx_r"] = 9250.0 # Minimum transistor on resistance in ohms -spice["min_tx_drain_c"] = 0.7 # Minimum transistor drain capacitance in ff -spice["min_tx_gate_c"] = 0.1 # Minimum transistor gate capacitance in ff -spice["msflop_setup"] = 9 # DFF setup time in ps -spice["msflop_hold"] = 1 # DFF hold time in ps -spice["msflop_delay"] = 20.5 # DFF Clk-to-q delay in ps -spice["msflop_slew"] = 13.1 # DFF output slew in ps w/ no load -spice["msflop_in_cap"] = 9.8242 # Input capacitance of ms_flop (Din) [Femto-farad] -spice["dff_setup"] = 9 # DFF setup time in ps -spice["dff_hold"] = 1 # DFF hold time in ps -spice["dff_delay"] = 20.5 # DFF Clk-to-q delay in ps -spice["dff_slew"] = 13.1 # DFF output slew in ps w/ no load -spice["dff_in_cap"] = 9.8242 # Input capacitance of ms_flop (Din) [Femto-farad] - -# analytical power parameters, many values are temporary -spice["bitcell_leakage"] = 1 # Leakage power of a single bitcell in nW -spice["inv_leakage"] = 1 # Leakage power of inverter in nW -spice["nand2_leakage"] = 1 # Leakage power of 2-input nand in nW -spice["nand3_leakage"] = 1 # Leakage power of 3-input nand in nW -spice["nor2_leakage"] = 1 # Leakage power of 2-input nor in nW -spice["msflop_leakage"] = 1 # Leakage power of flop in nW -spice["flop_para_cap"] = 2 # Parasitic Output capacitance in fF - -spice["default_event_rate"] = 100 # Default event activity of every gate. MHz -spice["flop_transition_prob"] = .5 # Transition probability of inverter. -spice["inv_transition_prob"] = .5 # Transition probability of inverter. -spice["nand2_transition_prob"] = .1875 # Transition probability of 2-input nand. -spice["nand3_transition_prob"] = .1094 # Transition probability of 3-input nand. -spice["nor2_transition_prob"] = .1875 # Transition probability of 2-input nor. -################################################### -##END Spice Simulation Parameters -################################################### diff --git a/technology/scn3me_subm/tf/README b/technology/scn3me_subm/tf/README deleted file mode 100644 index 400cfe98..00000000 --- a/technology/scn3me_subm/tf/README +++ /dev/null @@ -1,19 +0,0 @@ -;; NCSU CDK v. 1.6.0.beta -;; Last Modified: 2007-07-12 - -The NCSU CDK is Copyright (C) NC State University, 1998, 1999, 2004, -2006, 2007. Users are free to use or modify the NCSU CDK as appropriate as long -as this notice appears in the modified package. The NCSU CDK is -provided with NO WARRANTY. - -As of version 1.5.1, all documentation for the NCSU CDK is provided -by the NCSU EDA Wiki which can be found at: - - http://www.eda.ncsu.edu/ - -This beta release of the kit is to be used in migrating to Cadence Virtuoso 6.1 -for OpenAccess. Details of the conversion of the CDK from the CDB version can -be found in the file cdb2oa/OA_Conversion.txt. - -This kit is not yet fully supported. Please post problems and solutions at -http://www.chiptalk.org -> Forums -> NCSU CDK -> NCSU CDK 1.6.0.beta for Virtuoso 6.1 diff --git a/technology/scn3me_subm/tf/display.drf b/technology/scn3me_subm/tf/display.drf deleted file mode 100644 index 4bd251e8..00000000 --- a/technology/scn3me_subm/tf/display.drf +++ /dev/null @@ -1,714 +0,0 @@ -drDefineDisplay( -;( DisplayName ) - ( display ) -) -drDefineColor( -;( DisplayName ColorsName Red Green Blue ) - ( display white 255 255 255 ) - ( display yellow 255 255 0 ) - ( display silver 217 230 255 ) - ( display cream 255 255 204 ) - ( display pink 255 191 242 ) - ( display magenta 255 0 255 ) - ( display lime 0 255 0 ) - ( display tan 255 230 191 ) - ( display cyan 0 255 255 ) - ( display cadetBlue 57 191 255 ) - ( display orange 255 128 0 ) - ( display red 255 51 51 ) - ( display purple 153 0 230 ) - ( display green 0 204 102 ) - ( display brown 191 64 38 ) - ( display blue 51 77 255 ) - ( display slate 140 140 166 ) - ( display gold 217 204 0 ) - ( display maroon 230 31 13 ) - ( display violet 94 0 230 ) - ( display forest 38 140 107 ) - ( display chocolate 128 38 38 ) - ( display navy 51 51 153 ) - ( display black 0 0 0 ) - ( display gray 204 204 217 ) - ( display winColor1 166 166 166 ) - ( display winColor2 115 115 115 ) - ( display winColor3 189 204 204 ) - ( display winColor4 204 204 204 ) - ( display winColor5 199 199 199 ) - ( display blinkRed 255 0 0 t ) - ( display blinkYellow 255 255 0 t ) - ( display blinkWhite 255 255 255 t ) - ( display winBack 224 224 224 ) - ( display winFore 128 0 0 ) - ( display winText 51 51 51 ) -) -drDefineStipple( -;( DisplayName StippleName Bitmap ) - ( display dots ( ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) ) ) - ( display dots1 ( ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) ) ) - ( display hLine ( ( 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 0 0 0 0 ) - ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) - ( 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 0 0 0 0 ) - ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) - ( 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 0 0 0 0 ) - ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) - ( 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 0 0 0 0 ) - ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) ) ) - ( display vLine ( ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) ) ) - ( display cross ( ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) ) ) - ( display grid ( ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) ) ) - ( display slash ( ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) ) ) - ( display backSlash ( ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) ) ) - ( display hZigZag ( ( 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 ) - ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 ) - ( 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 ) - ( 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ) - ( 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 ) - ( 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 ) - ( 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 ) - ( 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 ) - ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 ) - ( 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ) - ( 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 ) - ( 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 ) - ( 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 ) - ( 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 ) ) ) - ( display vZigZag ( ( 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 ) - ( 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 ) - ( 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 ) - ( 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 ) - ( 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 ) - ( 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 ) - ( 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 ) - ( 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 ) - ( 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 ) - ( 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 ) - ( 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 ) - ( 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 ) - ( 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 ) - ( 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 ) - ( 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 ) - ( 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 ) ) ) - ( display hCurb ( ( 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 1 1 1 1 1 0 0 0 1 1 1 1 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 ) - ( 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 0 0 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 ) - ( 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 ) ) ) - ( display vCurb ( ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 ) - ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 ) - ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 ) - ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 ) - ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 ) - ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 ) - ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 ) - ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 ) ) ) - ( display brick ( ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) - ( 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 ) - ( 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 ) - ( 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 ) - ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) - ( 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 ) - ( 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 ) - ( 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 ) ) ) - ( display dagger ( ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 ) - ( 0 0 1 0 0 0 0 0 0 0 1 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 1 0 0 0 0 0 0 0 1 0 0 ) - ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 ) - ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 ) - ( 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 ) - ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 ) - ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 ) - ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 ) ) ) - ( display triangle ( ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 ) - ( 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ) - ( 1 1 1 1 1 1 1 1 1 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 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 ) - ( 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 ) - ( 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 ) - ( 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 ) ) ) - ( display x ( ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) ) ) - ( display stipple0 ( ( 1 ) ) ) - ( display stipple1 ( ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) - ( 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 0 0 0 0 ) - ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) - ( 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 0 0 0 0 ) - ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) - ( 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 0 0 0 0 ) - ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) - ( 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 0 0 0 0 ) ) ) - ( display stipple2 ( ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 ) - ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 ) - ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 ) - ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 ) - ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 ) - ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 ) - ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 ) - ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 ) - ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 ) - ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 ) - ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 ) - ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 ) - ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 ) - ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 ) - ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 ) - ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 ) ) ) - ( display stipple3 ( ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) ) ) - ( display stipple4 ( ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 ) ) ) - ( display stipple5 ( ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) ) ) - ( display stipple6 ( ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) ) ) - ( display stipple7 ( ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 ) - ( 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 ) - ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 ) - ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 ) - ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 ) - ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 ) - ( 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 ) - ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 ) - ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 ) - ( 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 ) - ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 ) - ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 ) - ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 ) - ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 ) - ( 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 ) - ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 ) ) ) - ( display stipple8 ( ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) ) ) - ( display stipple9 ( ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) - ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) ) ) - ( display stipple10 ( ( 1 0 0 0 0 0 0 0 1 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 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 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 ) - ( 1 0 0 0 0 0 0 0 1 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 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 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 ) ) ) - ( display stipple11 ( ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) ) ) - ( display dots2 ( ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) ) ) - ( display dots4 ( ( 1 0 0 0 0 0 1 0 0 0 0 0 1 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 1 0 0 0 0 0 1 0 0 0 0 0 1 ) - ( 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 ) - ( 1 0 0 0 0 0 1 0 0 0 0 0 1 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 1 0 0 0 0 0 1 0 0 0 0 0 1 ) - ( 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 ) - ( 1 0 0 0 0 0 1 0 0 0 0 0 1 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 1 0 0 0 0 0 1 0 0 0 0 0 1 ) ) ) - ( display dats5 ( ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 1 0 0 0 0 0 0 0 0 1 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 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 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 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) - ( 0 0 0 1 0 0 0 0 0 0 0 0 1 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 0 0 0 0 0 0 0 ) - ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) ) ) -) -drDefineLineStyle( -;( DisplayName LineStyle Size Pattern ) - ( display solid 1 (1 ) ) - ( display dashed 1 (1 1 1 0 0 1 1 1 ) ) - ( display dots 1 (1 0 0 ) ) - ( display dashDot 1 (1 1 1 0 0 1 0 0 ) ) - ( display shortDash 1 (1 1 0 0 ) ) - ( display doubleDash 1 (1 1 1 1 0 0 1 1 0 0 ) ) - ( display hidden 1 (1 0 0 0 ) ) - ( display thickLine 3 (1 1 1 ) ) - ( display lineStyle0 1 (1 ) ) - ( display lineStyle1 1 (1 1 1 0 1 1 1 0 1 1 1 0 1 1 0 1 ) ) -) -drDefinePacket( -;( DisplayName PacketName Stipple LineStyle Fill Outline [FillStyle]) - ( display NwellNet dots4 thickLine slate slate outlineStipple) - ( display border stipple0 solid tan tan solid ) - ( display y8 stipple0 solid gold gold solid ) - ( display background stipple1 lineStyle0 black black outlineStipple) - ( display y9 stipple0 solid silver silver solid ) - ( display Metal3Net dots4 solid navy navy outlineStipple) - ( display A1 stipple0 lineStyle0 winBack winBack solid ) - ( display pin solid lineStyle0 red red solid ) - ( display XPNet blank solid yellow yellow outline ) - ( display hardFence stipple0 solid red red solid ) - ( display PbaseNet dots4 solid yellow yellow outlineStipple) - ( display designFlow3 stipple1 lineStyle0 pink pink outlineStipple) - ( display A2 stipple0 lineStyle0 winBack winBack solid ) - ( display Unrouted1 stipple0 lineStyle1 brown brown solid ) - ( display RowLbl blank solid cyan cyan outline ) - ( display edgeLayerPin stipple0 solid yellow yellow solid ) - ( display instance blank solid winBack red outline ) - ( display Nselect dots4 solid green green outlineStipple) - ( display snap stipple0 solid yellow yellow solid ) - ( display pinAnt stipple0 solid red red solid ) - ( display winAttentionText solid solid winText winText solid ) - ( display designFlow2 stipple1 lineStyle0 purple purple outlineStipple) - ( display Unrouted2 stipple0 lineStyle1 red red solid ) - ( display hilite blank solid white white outline ) - ( display P2Con solid lineStyle0 orange orange solid ) - ( display designFlow1 stipple1 lineStyle0 red red outlineStipple) - ( display grid1 stipple0 solid gray gray solid ) - ( display Unrouted3 stipple0 lineStyle1 pink pink solid ) - ( display ViaNet x solid magenta magenta outlineStipple) - ( display select stipple0 solid tan tan solid ) - ( display Poly2Net dots4 lineStyle0 orange orange outlineStipple) - ( display winText solid solid winText winText solid ) - ( display Unrouted4 stipple0 lineStyle1 orange orange solid ) - ( display wireLbl solid lineStyle0 cyan cyan solid ) - ( display designFlow7 stipple1 lineStyle0 cyan cyan outlineStipple) - ( display align stipple0 solid tan tan solid ) - ( display Poly2Pin blank solid yellow yellow outline ) - ( display Unrouted5 stipple0 lineStyle1 green green solid ) - ( display unset stipple0 solid forest forest solid ) - ( display Poly1Net dots4 lineStyle0 red red outlineStipple) - ( display Resistor dots2 lineStyle0 cyan cyan outlineStipple) - ( display DiodeNet dots4 lineStyle0 cream cream outlineStipple) - ( display designFlow6 stipple1 lineStyle0 tan tan outlineStipple) - ( display Unrouted6 stipple0 lineStyle1 blue blue solid ) - ( display resist stipple0 solid cyan cyan solid ) - ( display designFlow5 stipple1 lineStyle0 silver silver outlineStipple) - ( display CapWellNet brick solid slate slate outlineStipple) - ( display Unrouted7 stipple0 lineStyle1 purple purple solid ) - ( display CannotoccupyBnd blank solid red red outline ) - ( display winTopShadow solid solid white white solid ) - ( display designFlow4 stipple1 lineStyle0 black black outlineStipple) - ( display softFence stipple0 solid yellow yellow solid ) - ( display ResistorNet dots4 solid cyan cyan outlineStipple) - ( display winError solid solid winColor5 winColor5 solid ) - ( display changedLayerTl1 stipple0 solid yellow yellow solid ) - ( display prBoundaryLbl stipple0 solid purple purple solid ) - ( display ActXNet x solid yellow yellow outlineStipple) - ( display Pbase stipple10 lineStyle0 yellow yellow outlineStipple) - ( display Active dots2 lineStyle0 yellow yellow outlineStipple) - ( display changedLayerTl0 stipple0 solid red red solid ) - ( display spike stipple0 solid purple purple solid ) - ( display Metal3 grid solid navy violet outlineStipple) - ( display text blank solid white white outline ) - ( display Poly1Pin stipple0 lineStyle0 red red solid ) - ( display Row blank solid cyan cyan outline ) - ( display Pwell stipple9 lineStyle0 slate slate outlineStipple) - ( display Metal2 stipple5 lineStyle0 magenta magenta outlineStipple) - ( display wire solid lineStyle0 cyan cyan solid ) - ( display ActX solid solid yellow yellow solid ) - ( display Metal1 stipple6 lineStyle0 cadetBlue cadetBlue outlineStipple) - ( display Cannotoccupy blank solid red red outline ) - ( display GroupLbl stipple0 solid green green solid ) - ( display axis stipple0 solid slate slate solid ) - ( display SiBlockNet x dashed tan tan outlineStipple) - ( display edgeLayer stipple0 solid gray gray solid ) - ( display annotate2 stipple0 solid lime lime solid ) - ( display Metal1Pin stipple0 lineStyle0 blue blue solid ) - ( display Diode stipple7 lineStyle0 cream cream outlineStipple) - ( display Glass X lineStyle0 white white X ) - ( display ViaXNet x solid magenta magenta outlineStipple) - ( display annotate3 stipple0 solid cyan cyan solid ) - ( display Poly2 dots1 lineStyle0 orange orange outlineStipple) - ( display deviceAnt stipple0 solid yellow yellow solid ) - ( display winBottomShadow solid solid winColor1 winColor1 solid ) - ( display PselectNet dots4 solid brown brown outlineStipple) - ( display comment stipple0 lineStyle0 winBack winBack outlineStipple) - ( display Poly1 dots lineStyle0 red red outlineStipple) - ( display Unrouted stipple0 lineStyle1 winColor5 winColor5 solid ) - ( display stretch stipple0 solid yellow yellow solid ) - ( display XP blank lineStyle0 winBack gold outline ) - ( display annotate1 stipple0 solid pink pink solid ) - ( display Group stipple2 solid green green outlineStipple) - ( display deviceLbl stipple0 solid green green solid ) - ( display annotate6 stipple0 solid silver silver solid ) - ( display GlassNet blank solid yellow yellow outline ) - ( display Canplace blank solid cyan cyan outline ) - ( display annotate7 stipple0 solid red red solid ) - ( display Via2 solid solid navy navy solid ) - ( display Metal2Pin stipple0 lineStyle0 magenta magenta solid ) - ( display annotate4 stipple0 solid yellow yellow solid ) - ( display device1 stipple1 lineStyle0 green green outlineStipple) - ( display "90" blank solid white white outline ) - ( display markerWarn x solid yellow yellow outlineStipple) - ( display text2 stipple1 lineStyle0 white white outlineStipple) - ( display CapacitorNet dots4 lineStyle0 tan tan outlineStipple) - ( display designFlow stipple1 lineStyle0 green green outlineStipple) - ( display hilite1 stipple0 solid silver silver solid ) - ( display device blank solid green green outline ) - ( display prBoundary stipple0 solid purple purple solid ) - ( display annotate5 stipple0 solid white white solid ) - ( display text1 stipple0 dashed white white solid ) - ( display Via solid solid magenta magenta solid ) - ( display Capacitor stipple7 lineStyle0 tan tan outlineStipple) - ( display markerErr x solid white white outlineStipple) - ( display unknown stipple0 solid yellow yellow solid ) - ( display annotate stipple0 solid orange orange solid ) - ( display P1ConNet x solid red red outlineStipple) - ( display hilite3 stipple0 solid cyan cyan solid ) - ( display winActiveBanner solid solid winColor3 winColor3 solid ) - ( display pinLbl stipple0 solid red red solid ) - ( display device2 stipple0 lineStyle1 green green solid ) - ( display grid stipple0 solid slate slate solid ) - ( display winBackground solid solid winBack winBack solid ) - ( display Metal1Net dots4 lineStyle0 blue blue outlineStipple) - ( display hilite2 stipple0 solid tan tan solid ) - ( display annotate8 stipple0 solid tan tan solid ) - ( display hilite5 stipple0 solid lime lime solid ) - ( display annotate9 stipple0 solid green green solid ) - ( display Metal2Net dots4 lineStyle0 magenta magenta outlineStipple) - ( display Metal3Pin stipple0 solid navy navy solid ) - ( display hilite4 stipple0 solid gray gray solid ) - ( display y0 stipple0 solid gray gray solid ) - ( display supply stipple0 solid lime lime solid ) - ( display ActiveNet dots4 lineStyle0 yellow yellow outlineStipple) - ( display hilite7 stipple0 solid cream cream solid ) - ( display y1 stipple0 solid brown brown solid ) - ( display defaultPacket x solid chocolate winColor2 outlineStipple) - ( display Via2Net cross solid navy navy outlineStipple) - ( display NselectNet dots4 solid green green outlineStipple) - ( display Unrouted8 stipple0 lineStyle1 gold gold solid ) - ( display hilite6 stipple0 solid orange orange solid ) - ( display y2 stipple0 solid red red solid ) - ( display winBorder solid solid winColor2 winColor2 solid ) - ( display Nwell dats5 thickLine slate slate outlineStipple) - ( display Unrouted9 stipple0 lineStyle1 silver silver solid ) - ( display hilite9 stipple0 solid pink pink solid ) - ( display SiBlock blank dashed tan tan outline ) - ( display y3 stipple0 solid orange orange solid ) - ( display prBoundaryBnd stipple0 solid cyan cyan solid ) - ( display winForeground solid solid winFore winFore solid ) - ( display hilite8 stipple0 solid magenta magenta solid ) - ( display y4 stipple0 solid yellow yellow solid ) - ( display Pselect dots1 solid brown brown outlineStipple) - ( display winInactiveBanner solid solid winColor4 winColor4 solid ) - ( display designFlow9 stipple1 lineStyle0 orange orange outlineStipple) - ( display winButton solid solid winFore winFore solid ) - ( display y5 stipple0 solid green green solid ) - ( display hiz stipple0 solid orange orange solid ) - ( display drive stipple0 solid blue blue solid ) - ( display wireFlt stipple0 dashed red red solid ) - ( display instanceLbl stipple0 solid gold gold solid ) - ( display P2ConNet x lineStyle0 orange orange outlineStipple) - ( display designFlow8 stipple1 lineStyle0 navy navy outlineStipple) - ( display y6 stipple0 solid blue blue solid ) - ( display PwellNet dots4 lineStyle0 slate slate outlineStipple) - ( display P1Con solid solid red red solid ) - ( display CapWell dagger solid slate slate outlineStipple) - ( display y7 stipple0 solid purple purple solid ) - ( display ViaX solid solid magenta magenta solid ) - ( display HR x solid chocolate winColor2 outlineStipple) - ( display HRnet x solid chocolate winColor2 outlineStipple) -) diff --git a/technology/scn3me_subm/tf/glade_scn3me_subm.py b/technology/scn3me_subm/tf/glade_scn3me_subm.py deleted file mode 100644 index d2f9aa7e..00000000 --- a/technology/scn3me_subm/tf/glade_scn3me_subm.py +++ /dev/null @@ -1,7 +0,0 @@ -import os -CWD = os.environ.get("OPENRAM_TECH") + "/scn3me_subm/tf" -ui().importCds("default", CWD+"/display.drf", CWD+"/mosis.tf", 1000, 1, CWD+"/layers.map") - - - - diff --git a/technology/scn3me_subm/tf/layers.map b/technology/scn3me_subm/tf/layers.map deleted file mode 100644 index b5440f23..00000000 --- a/technology/scn3me_subm/tf/layers.map +++ /dev/null @@ -1,16 +0,0 @@ -Pwell drawing 41 0 -Nwell drawing 42 0 -Active drawing 43 0 -Poly1 drawing 46 0 -Pselect drawing 45 0 -Nselect drawing 44 0 -contact drawing 25 0 -P1Con drawing 47 0 -ActX drawing 48 0 -Metal1 drawing 49 0 -Via drawing 50 0 -Metal2 drawing 51 0 -Via2 drawing 61 0 -Metal3 drawing 62 0 -Glass drawing 52 0 -comment drawing 63 0 diff --git a/technology/scn3me_subm/tf/mosis.tf b/technology/scn3me_subm/tf/mosis.tf deleted file mode 100644 index 759221f1..00000000 --- a/technology/scn3me_subm/tf/mosis.tf +++ /dev/null @@ -1,848 +0,0 @@ -; Generated on Sep 28 16:05:23 1998 -; with @(#)$CDS: icfb.exe version 4.4.1 06/17/98 23:40 (cds10067) $ -; -; Matt Clapp fixed: October 10, 2002 -; added via devices, deleted useless app-specific crap, -; added lxExtractRules so undo in layout editor doesn't -; complain. - - -;******************************** -; LAYER DEFINITION -;******************************** - -layerDefinitions( - techLayers( - ;( LayerName Layer# Abbreviation ) - ;( --------- ------ ------------ ) - ;User-Defined Layers: - ( P2Con 3 P2Con ) - ( Poly2 7 Poly2 ) - ( Pbase 10 Pbase ) - ( Resistor 16 Resisto ) - ( Capacitor 17 Capacit ) - ( Diode 18 Diode ) - ( SiBlock 29 SiBlock ) - ( HR 34 HR ) - ( Pwell 41 Pwell ) - ( Nwell 42 Nwell ) - ( Active 43 Active ) - ( Pselect 44 Pselect ) - ( Nselect 45 Nselect ) - ( Poly1 46 Poly1 ) - ( P1Con 47 P1Con ) - ( ActX 48 ActX ) - ( Metal1 49 Metal1 ) - ( Via 50 Via ) - ( Metal2 51 Metal2 ) - ( Glass 52 Glass ) - ( CapWell 59 CapWell ) - ( XP 60 XP ) - ( Via2 61 Via2 ) - ( Metal3 62 Metal3 ) - ( A1 80 A1 ) - ( A2 81 A2 ) - ( comment 117 comment ) - ;System-Reserved Layers: - ( Unrouted 200 Unroute ) - ( Row 201 Row ) - ( Group 202 Group ) - ( Cannotoccupy 203 Cannoto ) - ( Canplace 204 Canplac ) - ( hardFence 205 hardFen ) - ( softFence 206 softFen ) - ( y0 207 y0 ) - ( y1 208 y1 ) - ( y2 209 y2 ) - ( y3 210 y3 ) - ( y4 211 y4 ) - ( y5 212 y5 ) - ( y6 213 y6 ) - ( y7 214 y7 ) - ( y8 215 y8 ) - ( y9 216 y9 ) - ( designFlow 217 designF ) - ( stretch 218 stretch ) - ( edgeLayer 219 edgeLay ) - ( changedLayer 220 changed ) - ( unset 221 unset ) - ( unknown 222 unknown ) - ( spike 223 spike ) - ( hiz 224 hiz ) - ( resist 225 resist ) - ( drive 226 drive ) - ( supply 227 supply ) - ( wire 228 wire ) - ( pin 229 pin ) - ( text 230 text ) - ( device 231 device ) - ( border 232 border ) - ( snap 233 snap ) - ( align 234 align ) - ( prBoundary 235 prBound ) - ( instance 236 instanc ) - ( annotate 237 annotat ) - ( marker 238 marker ) - ( select 239 select ) - ( grid 251 grid ) - ( axis 252 axis ) - ( hilite 253 hilite ) - ( background 254 backgro ) - ) ;techLayers - - techPurposes( - ;( PurposeName Purpose# Abbreviation ) - ;( ----------- -------- ------------ ) - ;User-Defined Purposes: - ;System-Reserved Purposes: - ( warning 234 wng ) - ( tool1 235 tl1 ) - ( tool0 236 tl0 ) - ( label 237 lbl ) - ( flight 238 flt ) - ( error 239 err ) - ( annotate 240 ant ) - ( drawing1 241 dr1 ) - ( drawing2 242 dr2 ) - ( drawing3 243 dr3 ) - ( drawing4 244 dr4 ) - ( drawing5 245 dr5 ) - ( drawing6 246 dr6 ) - ( drawing7 247 dr7 ) - ( drawing8 248 dr8 ) - ( drawing9 249 dr9 ) - ( boundary 250 bnd ) - ( pin 251 pin ) - ( drawing 252 drw ) - ( net 253 net ) - ( cell 254 cel ) - ( all 255 all ) - ) ;techPurposes - - techLayerPurposePriorities( - ;layers are ordered from lowest to highest priority - ; (higher priority is drawn on top of lower priority) - ;( LayerName Purpose ) - ;( --------- ------- ) - ( background drawing ) - ( grid drawing ) - ( grid drawing1 ) - ( Nwell drawing ) - ( Pwell drawing ) - ( CapWell drawing ) - ( Pselect drawing ) - ( Nselect drawing ) - ( Active drawing ) - ( ActX drawing ) - ( SiBlock drawing ) - ( HR drawing ) - ( Poly1 drawing ) - ( P1Con drawing ) - ( Poly2 drawing ) - ( P2Con drawing ) - ( Metal1 drawing ) - ( Via drawing ) - ( Metal2 drawing ) - ( Via2 drawing ) - ( Metal3 drawing ) - ( annotate drawing ) - ( annotate drawing1 ) - ( annotate drawing2 ) - ( annotate drawing3 ) - ( annotate drawing4 ) - ( annotate drawing5 ) - ( annotate drawing6 ) - ( annotate drawing7 ) - ( annotate drawing8 ) - ( annotate drawing9 ) - ( Poly1 pin ) - ( Metal1 pin ) - ( Metal2 pin ) - ( Metal3 pin ) - ( Glass drawing ) - ( XP drawing ) - ( prBoundary drawing ) - ( prBoundary boundary ) - ( instance drawing ) - ( prBoundary label ) - ( instance label ) - ( Row drawing ) - ( Nwell net ) - ( align drawing ) - ( Pwell net ) - ( CapWell net ) - ( hardFence drawing ) - ( Active net ) - ( softFence drawing ) - ( Row label ) - ( Group drawing ) - ( Group label ) - ( Cannotoccupy drawing ) - ( Cannotoccupy boundary ) - ( Canplace drawing ) - ( ActX net ) - ( A2 drawing ) - ( A1 drawing ) - ( comment drawing ) - ( border drawing ) - ( Pselect net ) - ( Nselect net ) - ( SiBlock net ) - ( HR net ) - ( wire drawing ) - ( Poly1 net ) - ( wire label ) - ( P1Con net ) - ( wire flight ) - ( Metal1 net ) - ( device annotate ) - ( Metal2 net ) - ( device label ) - ( Via net ) - ( Metal3 net ) - ( Via2 net ) - ( pin label ) - ( text drawing ) - ( pin drawing ) - ( text drawing1 ) - ( pin annotate ) - ( device drawing ) - ( axis drawing ) - ( edgeLayer drawing ) - ( edgeLayer pin ) - ( snap drawing ) - ( stretch drawing ) - ( y0 drawing ) - ( y1 drawing ) - ( y2 drawing ) - ( y3 drawing ) - ( y4 drawing ) - ( y5 drawing ) - ( y6 drawing ) - ( y7 drawing ) - ( y8 drawing ) - ( y9 drawing ) - ( hilite drawing ) - ( hilite drawing1 ) - ( hilite drawing2 ) - ( hilite drawing3 ) - ( hilite drawing4 ) - ( hilite drawing5 ) - ( hilite drawing6 ) - ( hilite drawing7 ) - ( hilite drawing8 ) - ( hilite drawing9 ) - ( select drawing ) - ( drive drawing ) - ( hiz drawing ) - ( resist drawing ) - ( spike drawing ) - ( supply drawing ) - ( unknown drawing ) - ( unset drawing ) - ( designFlow drawing ) - ( designFlow drawing1 ) - ( designFlow drawing2 ) - ( designFlow drawing3 ) - ( designFlow drawing4 ) - ( designFlow drawing5 ) - ( designFlow drawing6 ) - ( designFlow drawing7 ) - ( designFlow drawing8 ) - ( designFlow drawing9 ) - ( changedLayer tool0 ) - ( changedLayer tool1 ) - ( marker warning ) - ( marker error ) - ( device drawing1 ) - ( Pbase drawing ) - ( Pbase net ) - ( Resistor net ) - ( Resistor drawing ) - ( Capacitor net ) - ( Capacitor drawing ) - ( Diode net ) - ( Diode drawing ) - ( Poly2 net ) - ( P2Con net ) - ( device drawing2 ) - ( Unrouted drawing ) - ( text drawing2 ) - ( Unrouted drawing1 ) - ( Unrouted drawing2 ) - ( Unrouted drawing3 ) - ( Unrouted drawing4 ) - ( Unrouted drawing5 ) - ( Unrouted drawing6 ) - ( Unrouted drawing7 ) - ( Unrouted drawing8 ) - ( Unrouted drawing9 ) - ) ;techLayerPurposePriorities - - techDisplays( - ;( LayerName Purpose Packet Vis Sel Con2ChgLy DrgEnbl Valid ) - ;( --------- ------- ------ --- --- --------- ------- ----- ) - ( background drawing background t nil nil nil nil ) - ( grid drawing grid t nil nil nil nil ) - ( grid drawing1 grid1 t nil nil nil nil ) - ( Nwell drawing Nwell t t t t t ) - ( Pwell drawing Pwell t t t t nil ) - ( Active drawing Active t t t t t ) - ( ActX drawing ActX t t t t t ) - ( Pselect drawing Pselect t t t t t ) - ( Nselect drawing Nselect t t t t t ) - ( SiBlock drawing SiBlock t t t t t ) - ( HR drawing HR t t t t t ) - ( CapWell drawing CapWell t t t t t ) - ( Poly1 drawing Poly1 t t t t t ) - ( P1Con drawing P1Con t t t t t ) - ( Metal1 drawing Metal1 t t t t t ) - ( Via drawing Via t t t t t ) - ( Metal2 drawing Metal2 t t t t t ) - ( annotate drawing annotate t t nil t nil ) - ( annotate drawing1 annotate1 t t nil t nil ) - ( annotate drawing2 annotate2 t t nil t nil ) - ( annotate drawing3 annotate3 t t nil t nil ) - ( annotate drawing4 annotate4 t t nil t nil ) - ( annotate drawing5 annotate5 t t nil t nil ) - ( annotate drawing6 annotate6 t t nil t nil ) - ( annotate drawing7 annotate7 t t nil t nil ) - ( annotate drawing8 annotate8 t t nil t nil ) - ( annotate drawing9 annotate9 t t nil t nil ) - ( Via2 drawing Via2 t t t t t ) - ( Metal3 drawing Metal3 t t t t t ) - ( Glass drawing Glass t t t nil t ) - ( XP drawing XP t t t nil t ) - ( Metal1 pin Metal1Pin t t t nil t ) - ( Metal2 pin Metal2Pin t t t nil t ) - ( Metal3 pin Metal3Pin t t t nil t ) - ( Poly1 pin Poly1Pin t t t nil t ) - ( prBoundary drawing prBoundary t t nil t nil ) - ( prBoundary boundary prBoundaryBnd t t nil t nil ) - ( instance drawing instance t t nil t t ) - ( prBoundary label prBoundaryLbl t t t t nil ) - ( instance label instanceLbl t t t t nil ) - ( Row drawing Row t t t t nil ) - ( Nwell net NwellNet t t t nil nil ) - ( align drawing align t t nil t nil ) - ( Pwell net PwellNet t t t nil nil ) - ( CapWell net CapWellNet t t t nil nil ) - ( SiBlock net SiBlockNet t t t nil nil ) - ( HR net HRnet t t t nil nil ) - ( hardFence drawing hardFence t t t t nil ) - ( Active net ActiveNet t t t nil nil ) - ( softFence drawing softFence t t t t nil ) - ( Row label RowLbl t t t t nil ) - ( Group drawing Group t t t t nil ) - ( Group label GroupLbl t t t t nil ) - ( Cannotoccupy drawing Cannotoccupy t t t t nil ) - ( Cannotoccupy boundary CannotoccupyBnd t t t t nil ) - ( Canplace drawing Canplace t t t t nil ) - ( ActX net ActXNet t t t nil nil ) - ( A2 drawing A2 t t t t nil ) - ( A1 drawing A1 t t t t nil ) - ( comment drawing comment t t t t nil ) - ( border drawing border t t t t nil ) - ( Pselect net PselectNet t t t nil nil ) - ( Nselect net NselectNet t t t nil nil ) - ( wire drawing wire t t t t nil ) - ( Poly1 net Poly1Net t t t nil nil ) - ( wire label wireLbl t t t t nil ) - ( P1Con net P1ConNet t t t nil nil ) - ( wire flight wireFlt t t t t nil ) - ( Metal1 net Metal1Net t t t nil nil ) - ( device annotate deviceAnt t t t t nil ) - ( Metal2 net Metal2Net t t t nil nil ) - ( Metal3 net Metal3Net t t t nil nil ) - ( device label deviceLbl t t t t nil ) - ( Via net ViaNet t t t nil nil ) - ( Via2 net Via2Net t t t nil nil ) - ( pin label pinLbl t t t t nil ) - ( text drawing text t t t t t ) - ( pin drawing pin t t t t nil ) - ( text drawing1 text1 t t t t nil ) - ( pin annotate pinAnt t t t t nil ) - ( device drawing device t t t t nil ) - ( axis drawing axis t t t t nil ) - ( edgeLayer drawing edgeLayer t t nil t nil ) - ( edgeLayer pin edgeLayerPin t t nil t nil ) - ( snap drawing snap t t nil t nil ) - ( stretch drawing stretch t t nil t nil ) - ( y0 drawing y0 t t nil t nil ) - ( y1 drawing y1 t t nil t nil ) - ( y2 drawing y2 t t nil t nil ) - ( y3 drawing y3 t t nil t nil ) - ( y4 drawing y4 t t nil t nil ) - ( y5 drawing y5 t t nil t nil ) - ( y6 drawing y6 t t nil t nil ) - ( y7 drawing y7 t t nil t nil ) - ( y8 drawing y8 t t nil t nil ) - ( y9 drawing y9 t t nil t nil ) - ( hilite drawing hilite t t nil t nil ) - ( hilite drawing1 hilite1 t t t t nil ) - ( hilite drawing2 hilite2 t t nil t nil ) - ( hilite drawing3 hilite3 t t t t nil ) - ( hilite drawing4 hilite4 t t t t nil ) - ( hilite drawing5 hilite5 t t t t nil ) - ( hilite drawing6 hilite6 t t t t nil ) - ( hilite drawing7 hilite7 t t t t nil ) - ( hilite drawing8 hilite8 t t t t nil ) - ( hilite drawing9 hilite9 t t t t nil ) - ( select drawing select t t nil t nil ) - ( drive drawing drive t t t t nil ) - ( hiz drawing hiz t t t t nil ) - ( resist drawing resist t t t t nil ) - ( spike drawing spike t t t t nil ) - ( supply drawing supply t t t t nil ) - ( unknown drawing unknown t t t t nil ) - ( unset drawing unset t t t t nil ) - ( designFlow drawing designFlow t t t nil nil ) - ( designFlow drawing1 designFlow1 t t t nil nil ) - ( designFlow drawing2 designFlow2 t t t nil nil ) - ( designFlow drawing3 designFlow3 t t t nil nil ) - ( designFlow drawing4 designFlow4 t t t nil nil ) - ( designFlow drawing5 designFlow5 t t t nil nil ) - ( designFlow drawing6 designFlow6 t t t nil nil ) - ( designFlow drawing7 designFlow7 t t t nil nil ) - ( designFlow drawing8 designFlow8 t t t nil nil ) - ( designFlow drawing9 designFlow9 t t t nil nil ) - ( changedLayer tool0 changedLayerTl0 nil nil nil nil nil ) - ( changedLayer tool1 changedLayerTl1 nil nil t nil nil ) - ( marker warning markerWarn t t t t nil ) - ( marker error markerErr t t t t nil ) - ( device drawing1 device1 t t t t nil ) - ( Poly2 net Poly2Net t t t nil nil ) - ( Poly2 drawing Poly2 t t t t t ) - ( P2Con net P2ConNet t t t nil nil ) - ( P2Con drawing P2Con t t t t t ) - ( Pbase net PbaseNet t t t nil nil ) - ( Pbase drawing Pbase t t t t t ) - ( Resistor net ResistorNet t t t nil nil ) - ( Resistor drawing Resistor t t t t t ) - ( Capacitor net CapacitorNet t t t nil nil ) - ( Capacitor drawing Capacitor t t t t t ) - ( Diode net DiodeNet t t t nil nil ) - ( Diode drawing Diode t t t t t ) - ( device drawing2 device2 t t t t nil ) - ( Unrouted drawing Unrouted t t t t nil ) - ( text drawing2 text2 t t t t nil ) - ( Unrouted drawing1 Unrouted1 t t t t nil ) - ( Unrouted drawing2 Unrouted2 t t t t nil ) - ( Unrouted drawing3 Unrouted3 t t t t nil ) - ( Unrouted drawing4 Unrouted4 t t t t nil ) - ( Unrouted drawing5 Unrouted5 t t t t nil ) - ( Unrouted drawing6 Unrouted6 t t t t nil ) - ( Unrouted drawing7 Unrouted7 t t t t nil ) - ( Unrouted drawing8 Unrouted8 t t t t nil ) - ( Unrouted drawing9 Unrouted9 t t t t nil ) - ) ;techDisplays - -; I don't think the following is necessary (or used!) -techLayerProperties( -;( PropName Layer1 [ Layer2 ] PropValue ) - ( contactLimit P2Con 10000 ) - ( eqPinLimit P2Con 10000 ) - ( horizontalJogLength P2Con 2147483648.000000 ) - ( routingGrid P2Con 1.000000 ) - ( verticalJogLength P2Con 2147483648.000000 ) - ( routingGrid Poly2 1.000000 ) - ( contactLimit Active 10000 ) - ( eqPinLimit Active 10000 ) - ( horizontalJogLength Active 2147483648.000000 ) - ( routingGrid Active 1.000000 ) - ( verticalJogLength Active 2147483648.000000 ) - ( routingGrid Poly1 1.000000 ) - ( contactLimit P1Con 10000 ) - ( eqPinLimit P1Con 10000 ) - ( horizontalJogLength P1Con 2147483648.000000 ) - ( routingGrid P1Con 1.000000 ) - ( verticalJogLength P1Con 2147483648.000000 ) - ( contactLimit ActX 10000 ) - ( eqPinLimit ActX 10000 ) - ( horizontalJogLength ActX 2147483648.000000 ) - ( routingGrid ActX 1.000000 ) - ( verticalJogLength ActX 2147483648.000000 ) - ( routingGrid Metal1 1.000000 ) - ( contactLimit Via 10000 ) - ( eqPinLimit Via 10000 ) - ( horizontalJogLength Via 2147483648.000000 ) - ( routingGrid Via 1.000000 ) - ( verticalJogLength Via 2147483648.000000 ) - ( routingGrid Metal2 1.000000 ) -) - -) ;layerDefinitions - - -;******************************** -; DEVICE RULES -;******************************** - -devices( - tcCreateCDSDeviceClass() - - symContactDevice( - ;( deviceName viaLayer viaPurpose - ( VIA Via drawing - - ; layer1 purpose1 [implant1] - Metal1 drawing - - ; layer2 purpose2 [implant2] - Metal2 drawing - - ; width length [( row column xPitch yPitch xBias yBias )] - ; 2 2 ( 1 1 _NA_ _NA_ _NA_ _NA_ ) - 2 2 - - ; encLayer1 encLayer2 legalRegion ) - 1 1 _NA_) - ) ;symContactDevice - - symContactDevice( - ;( deviceName viaLayer viaPurpose - ( VIA2 Via2 drawing - - ; layer1 purpose1 [implant1] - Metal2 drawing - - ; layer2 purpose2 [implant2] - Metal3 drawing - - ; width length [( row column xPitch yPitch xBias yBias )] - ; 2 2 ( 1 1 _NA_ _NA_ _NA_ _NA_ ) - 2 2 - - ; encLayer1 encLayer2 legalRegion ) - 1 2 _NA_) - ) ;symContactDevice - -) ;devices - - -;******************************** -; LAYER RULES -;******************************** - -layerRules( - streamLayers( - ;( layer streamNumber dataType translate ) - ;( ----- ------------ -------- --------- ) - ( ("background" "drawing") 0 0 nil ) - ( ("grid" "drawing") 0 0 nil ) - ( ("grid" "drawing1") 0 0 nil ) - ( ("Nwell" "drawing") 42 0 t ) - ( ("Pwell" "drawing") 41 0 t ) - ( ("Active" "drawing") 43 0 t ) - ( ("ActX" "drawing") 48 0 t ) - ( ("Pselect" "drawing") 44 0 t ) - ( ("Nselect" "drawing") 45 0 t ) - ( ("Poly1" "drawing") 46 0 t ) - ( ("P1Con" "drawing") 47 0 t ) - ( ("Metal1" "drawing") 49 0 t ) - ( ("Metal2" "drawing") 51 0 t ) - ( ("annotate" "drawing") 0 0 nil ) - ( ("annotate" "drawing1") 0 0 nil ) - ( ("annotate" "drawing2") 0 0 nil ) - ( ("annotate" "drawing3") 0 0 nil ) - ( ("annotate" "drawing4") 0 0 nil ) - ( ("annotate" "drawing5") 0 0 nil ) - ( ("annotate" "drawing6") 0 0 nil ) - ( ("annotate" "drawing7") 0 0 nil ) - ( ("annotate" "drawing8") 0 0 nil ) - ( ("annotate" "drawing9") 0 0 nil ) - ( ("Via" "drawing") 50 0 t ) - ( ("Glass" "drawing") 52 0 t ) - ( ("XP" "drawing") 60 0 t ) - ( ("Metal2" "pin") 0 0 nil ) - ( ("Poly1" "pin") 0 0 nil ) - ( ("prBoundary" "drawing") 0 0 nil ) - ( ("Metal1" "pin") 0 0 nil ) - ( ("prBoundary" "boundary") 0 0 nil ) - ( ("instance" "drawing") 246 0 nil ) - ( ("instance" "label") 0 0 nil ) - ( ("Nwell" "net") 0 0 nil ) - ( ("align" "drawing") 0 0 nil ) - ( ("Pwell" "net") 0 0 nil ) - ( ("hardFence" "drawing") 0 0 nil ) - ( ("Active" "net") 0 0 nil ) - ( ("softFence" "drawing") 0 0 nil ) - ( ("ActX" "net") 0 0 nil ) - ( ("A2" "drawing") 5 0 nil ) - ( ("A1" "drawing") 2 0 nil ) - ( ("comment" "drawing") 0 0 nil ) - ( ("border" "drawing") 0 0 nil ) - ( ("Pselect" "net") 0 0 nil ) - ( ("Nselect" "net") 0 0 nil ) - ( ("wire" "drawing") 0 0 nil ) - ( ("Poly1" "net") 0 0 nil ) - ( ("P1Con" "net") 0 0 nil ) - ( ("Metal1" "net") 0 0 nil ) - ( ("Metal2" "net") 0 0 nil ) - ( ("device" "label") 0 0 nil ) - ( ("Via" "net") 0 0 nil ) - ( ("pin" "label") 0 0 nil ) - ( ("text" "drawing") 63 0 t ) - ( ("pin" "drawing") 0 0 nil ) - ( ("device" "drawing") 0 0 nil ) - ( ("axis" "drawing") 0 0 nil ) - ( ("edgeLayer" "drawing") 0 0 nil ) - ( ("edgeLayer" "pin") 0 0 nil ) - ( ("snap" "drawing") 0 0 nil ) - ( ("stretch" "drawing") 0 0 nil ) - ( ("y0" "drawing") 0 0 nil ) - ( ("y1" "drawing") 0 0 nil ) - ( ("y2" "drawing") 0 0 nil ) - ( ("y3" "drawing") 0 0 nil ) - ( ("y4" "drawing") 0 0 nil ) - ( ("y5" "drawing") 0 0 nil ) - ( ("y6" "drawing") 0 0 nil ) - ( ("y7" "drawing") 0 0 nil ) - ( ("y8" "drawing") 0 0 nil ) - ( ("y9" "drawing") 0 0 nil ) - ( ("hilite" "drawing") 0 0 nil ) - ( ("hilite" "drawing2") 0 0 nil ) - ( ("select" "drawing") 0 0 nil ) - ( ("drive" "drawing") 0 0 nil ) - ( ("hiz" "drawing") 0 0 nil ) - ( ("resist" "drawing") 0 0 nil ) - ( ("spike" "drawing") 0 0 nil ) - ( ("supply" "drawing") 0 0 nil ) - ( ("unknown" "drawing") 0 0 nil ) - ( ("unset" "drawing") 0 0 nil ) - ( ("changedLayer" "tool0") 0 0 nil ) - ( ("Resistor" "net") 0 0 nil ) - ( ("Resistor" "drawing") 0 0 nil ) - ( ("Capacitor" "net") 0 0 nil ) - ( ("Capacitor" "drawing") 0 0 nil ) - ( ("Diode" "net") 0 0 nil ) - ( ("Diode" "drawing") 0 0 nil ) - ( ("Poly2" "net") 0 0 nil ) - ( ("Poly2" "drawing") 0 0 nil ) - ( ("P2Con" "net") 0 0 nil ) - ( ("P2Con" "drawing") 0 0 nil ) - ( ("Pbase" "drawing") 0 0 nil ) - ( ("Pbase" "net") 0 0 nil ) - ( P2Con 0 0 nil ) - ( Poly2 0 0 nil ) - ( Pwell 0 0 nil ) - ( Nwell 0 0 nil ) - ( Active 0 0 nil ) - ( Pselect 0 0 nil ) - ( Nselect 0 0 nil ) - ( Poly1 0 0 nil ) - ( P1Con 0 0 nil ) - ( ActX 0 0 nil ) - ( Metal1 0 0 nil ) - ( Via 0 0 nil ) - ( Metal2 0 0 nil ) - ( Glass 0 0 nil ) - ( XP 0 0 nil ) - ( ("Via2" "drawing") 50 0 t ) - ( ("Via2" "net") 0 0 nil ) - ( ("Metal3" "drawing") 50 0 t ) - ( ("Metal3" "net") 0 0 nil ) - ( ("Metal3" "pin") 0 0 nil ) - ( ("CapWell" "drawing") 0 0 nil ) - ( ("CapWell" "net") 0 0 nil ) - ( ("SiBlock" "drawing") 0 0 nil ) - ( ("SiBlock" "net") 0 0 nil ) - ( ("HR" "drawing") 0 0 nil ) - ( ("HR" "net") 0 0 nil ) - ) ;streamLayers - - viaLayers( - ;( layer1 viaLayer layer2 ) - ;( ------ -------- ------ ) - ( Metal2 Via2 Metal3 ) - ( Metal1 Via Metal2 ) - ( Active ActX Poly1 ) - ( Poly1 P1Con Metal1 ) - ( Poly2 P2Con Metal1 ) - ) ;viaLayers - -) ;layerRules - - -;******************************** -; PHYSICAL RULES -;******************************** - -physicalRules( - orderedSpacingRules( - ;( rule layer1 layer2 value ) - ;( ---- ------ ------ ----- ) - ( minEnclosure "prBoundary" "Metal1" 0.0 ) - ( minEnclosure "Metal2" "Via" 1.0 ) - ( minEnclosure "Metal1" "Via" 1.0 ) - ( minEnclosure "Metal1" "P1Con" 1.0 ) - ( minEnclosure "Metal1" "ActX" 1.0 ) - ( minEnclosure "Nselect" "Active" 2.0 ) - ( minEnclosure "Pselect" "Active" 2.0 ) - ( minEnclosure "Active" "ActX" 1.0 ) - ( minEnclosure "Pwell" "Active" 5.0 ) - ( minEnclosure "Nwell" "Active" 5.0 ) - ) ;orderedSpacingRules - - spacingRules( - ;( rule layer1 layer2 value ) - ;( ---- ------ ------ ----- ) - ( minSpacing "P2Con" 2.0 ) - ( minSpacing "Poly2" 3.0 ) - ( minSpacing "Pwell" 9.0 ) - ( minSpacing "Nwell" 9.0 ) - ( minSpacing "Active" 3.0 ) - ( minSpacing "Pselect" 2.0 ) - ( minSpacing "Nselect" 2.0 ) - ( minSpacing "Poly1" 2.0 ) - ( minSpacing "P1Con" 2.0 ) - ( minSpacing "ActX" 2.0 ) - ( minSpacing "Metal1" 3.0 ) - ( minSpacing "Via" 3.0 ) - ( minSpacing "Via2" 3.0 ) - ( minSpacing "Metal2" 3.0 ) - ( minSpacing "Metal3" 4.0 ) - ( minSpacing "Glass" 75.0 ) - ( minSpacing "XP" 100.0 ) - ( minSpacing "Metal2" 4.0 ) - ( minSpacing "P1Con" "Via" 2.0 ) - ( minSpacing "ActX" "Via" 2.0 ) - ( minSpacing "ActX" "P2Con" 2.0 ) - ( minSpacing "Poly2" "P2Con" 4.0 ) - ( minSpacing "Poly1" "P1Con" 4.0 ) - ( minSpacing "ActX" "P1Con" 2.0 ) - ( minSpacing "Active" "P1Con" 2.0 ) - ( minSpacing "Active" "Poly2" 2.0 ) - ( minSpacing "Poly1" "Poly2" 2.0 ) - ( minSpacing "Active" "Poly1" 2.0 ) - ( minSpacing "ActX" "Poly1" 2.0 ) - ( minSpacing "Pselect" "Nselect" 0.0 ) - ( minSpacing "Nwell" "Pwell" 9.0 ) - ( minWidth "P2Con" 2.0 ) - ( minWidth "Poly2" 3.0 ) - ( minWidth "Pwell" 10.0 ) - ( minWidth "Nwell" 10.0 ) - ( minWidth "Active" 3.0 ) - ( minWidth "Pselect" 2.0 ) - ( minWidth "Nselect" 2.0 ) - ( minWidth "Poly1" 2.0 ) - ( minWidth "P1Con" 2.0 ) - ( minWidth "ActX" 2.0 ) - ( minWidth "Metal1" 4.0 ) - ( minWidth "Via" 2.0 ) - ( minWidth "Metal2" 4.0 ) - ( minWidth "Glass" 75.0 ) - ( minWidth "XP" 100.0 ) - ( minWidth "Metal3" 6.0 ) - ) ;spacingRules - - mfgGridResolution( - ( 1.000000 ) - ) ;mfgGridResolution - -) ;physicalRules - - -;******************************** -; ELECTRICAL RULES -;******************************** - -electricalRules( - characterizationRules( - ;( rule layer1 layer2 value ) - ;( ---- ------ ------ ----- ) - ( areaCap "P2Con" 0.0 ) - ( areaCap "Poly2" 0.0 ) - ( areaCap "Active" 0.0 ) - ( areaCap "Poly1" 6e-05 ) - ( areaCap "P1Con" 0.0 ) - ( areaCap "ActX" 0.0 ) - ( areaCap "Metal1" 2.6e-05 ) - ( areaCap "Via" 0.0 ) - ( areaCap "Metal2" 1.6e-05 ) - ( edgeCapacitance "P2Con" 0.0 ) - ( edgeCapacitance "Poly2" 0.0 ) - ( edgeCapacitance "Active" 0.0 ) - ( edgeCapacitance "Poly1" 0.0 ) - ( edgeCapacitance "P1Con" 0.0 ) - ( edgeCapacitance "ActX" 0.0 ) - ( edgeCapacitance "Metal1" 0.0 ) - ( edgeCapacitance "Via" 0.0 ) - ( edgeCapacitance "Metal2" 0.0 ) - ( sheetRes "P2Con" 0.0 ) - ( sheetRes "Poly2" 0.0 ) - ( sheetRes "Active" 0.0 ) - ( sheetRes "Poly1" 23.0 ) - ( sheetRes "P1Con" 0.0 ) - ( sheetRes "ActX" 0.0 ) - ( sheetRes "Metal1" 0.04 ) - ( sheetRes "Via" 0.0 ) - ( sheetRes "Metal2" 0.07 ) - ( currentDensity "P2Con" 1.0 ) - ( currentDensity "Poly2" 1.0 ) - ( currentDensity "Active" 1.0 ) - ( currentDensity "Poly1" 1.0 ) - ( currentDensity "P1Con" 1.0 ) - ( currentDensity "ActX" 1.0 ) - ( currentDensity "Metal1" 1.0 ) - ( currentDensity "Via" 1.0 ) - ( currentDensity "Metal2" 1.0 ) - ) ;characterizationRules - -) ;electricalRules - - -;******************************** -; LAYOUT EDITOR RULES -;******************************** -; specifies the ordering of the layers in the LSW - -leRules( - leLswLayers( - ;( layer purpose ) - ; ----- ------- ) - ( Nwell drawing ) - ( Pselect drawing ) - ( Nselect drawing ) - ( Active drawing ) - ( ActX drawing ) - ( Poly1 drawing ) - ( P1Con drawing ) - ( Metal1 drawing ) - ( Via drawing ) - ( Metal2 drawing ) - ( Via2 drawing ) - ( Metal3 drawing ) - ( Poly1 pin ) - ( Metal1 pin ) - ( Metal2 pin ) - ( Metal3 pin ) - ( Poly2 drawing ) - ( P2Con drawing ) - ( instance drawing ) - ( text drawing ) - ( CapWell drawing ) - ( SiBlock drawing ) - ( HR drawing ) - ( Pbase drawing ) - ( Resistor drawing ) - ( Capacitor drawing ) - ( Diode drawing ) - ( Glass drawing ) - ( XP drawing ) - - ) ;leLswLayers -) ;leRules - - -;******************************** -; VIRTUOSO XL RULES -;******************************** -; specifies the ordering of the layers in the LSW - -lxRules( - lxExtractLayers( - (Metal1 Metal2 Metal3) - ) ;lxExtractLayers -) ;lxRules - From a231ab96445bb3328a36e321d7b1fbc3511e9da3 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 15 Mar 2019 03:26:33 -0700 Subject: [PATCH 023/324] Remove FreePDK from rules provided --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c567ee70..ad21c63c 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ You may also wish to add OPENRAM\_HOME to your PYTHONPATH: export PYTHONPATH="$PYTHONPATH:$OPENRAM_HOME" ``` -We include the tech files necessary for [FreePDK45] and [SCMOS] +We include the tech files necessary for [SCMOS] SCN4M_SUBM. The [SCMOS] spice models, however, are generic and should be replaced with foundry models. If you are using [FreePDK45], you should also have that set up and have the environment variable point From 8b1787a733e18df8e4c6781fbf7658733653d7d8 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 15 Mar 2019 03:39:51 -0700 Subject: [PATCH 024/324] Add SVRF EULA to FreePDK45 tech dir --- technology/freepdk45/tf/SVRF_EULA_06Feb09.txt | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 technology/freepdk45/tf/SVRF_EULA_06Feb09.txt diff --git a/technology/freepdk45/tf/SVRF_EULA_06Feb09.txt b/technology/freepdk45/tf/SVRF_EULA_06Feb09.txt new file mode 100644 index 00000000..637a7627 --- /dev/null +++ b/technology/freepdk45/tf/SVRF_EULA_06Feb09.txt @@ -0,0 +1,84 @@ + SVRF(TM) TECHNOLOGY LICENSE AGREEMENT + February 6, 2009 + +This license is a legal "Agreement" concerning the use of SVRF +Technology between you, the end user, either individually or as an +authorized representative of the school or company acquiring the +license ("You"), and Mentor Graphics Corporation and Mentor Graphics +(Ireland) Limited acting directly or through their subsidiaries or +authorized distributors (collectively "Mentor Graphics"). "SVRF +Technology" shall mean Mentor Graphics' syntax for expressing process +rules and controlling physical verification, principally the syntax +expressed in Mentor Graphics. SVRF User Manual. USE OF SVRF TECHNOLOGY +INDICATES YOUR COMPLETE AND UNCONDITIONAL ACCEPTANCE OF THE TERMS AND +CONDITIONS SET FORTH IN THIS AGREEMENT. If you do not agree to these +terms and conditions, promptly certify destruction of the SVRF +Technology and all accompanying items within five days after receipt +of SVRF Technology. + +1. GRANT OF LICENSE. This file includes SVRF Technology under license + by Mentor Graphics Corporation. Mentor Graphics grants to You a + nontransferable, nonexclusive license to use SVRF Technology solely + for use with Mentor Graphics' Calibre(R) tools and either: (a) in an + educational classroom or laboratory environment; or (b) for your + internal business purpose as allowed by an existing license + agreement between You and Mentor Graphics. + +2. RESTRICTIONS ON USE. All SVRF Technology constitutes or contains + trade secrets and confidential information of Mentor Graphics or + its licensors. You shall not make SVRF Technology available in any + form to any person other those persons whose performance requires + such access and who are under obligations of confidentiality. You + shall take appropriate action to protect the confidentiality of + SVRF Technology and ensure that persons permitted access to SVRF + Technology do not disclose it or use it except as permitted by this + Agreement. The provisions of this Section 2 shall survive the + termination or expiration of this Agreement. + +3. NO WARRANTY. Mentor Graphics expressly disclaims any warranty for + SVRF Technology. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, + SVRF TECHNOLOGY AND ANY RELATED DOCUMENTATION ARE PROVIDED "AS IS" + AND WITH ALL FAULTS AND WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, THE + IMPLIED WARRANTIES OR CONDITIONS OF MERCHANTABILITY, FITNESS FOR A + PARTICULAR PURPOSE, OR NONINFRINGEMENT. THE ENTIRE RISK ARISING OUT + OF USE OR PERFORMANCE OF SVRF TECHNOLOGY REMAINS WITH YOU. + +4. LIMITATION OF LIABILITY. EXCEPT WHERE THIS EXCLUSION OR RESTRICTION + OF LIABILITY WOULD BE VOID OR INEFFECTIVE UNDER APPLICABLE LAW, IN + NO EVENT WILL MENTOR GRAPHICS OR ITS LICENSORS BE LIABLE FOR + INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES (INCLUDING + LOST PROFITS OR SAVINGS) WHETHER BASED ON CONTRACT, TORT OR ANY + OTHER LEGAL THEORY, EVEN IF MENTOR GRAPHICS OR ITS LICENSORS HAVE + BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +5. TERM. This Agreement remains effective until termination. This + Agreement will immediately terminate upon notice if you exceed the + scope of license granted or otherwise fail to comply with the + provisions of Sections 1 or 2. For any other material breach under + this Agreement, Mentor Graphics may terminate this Agreement upon + 30 days written notice if you are in material breach and fail to + cure such breach within the 30-day notice period. Upon any + termination, you agree to cease all use of SVRF Technology and + certify destruction of SVRF Technology, including all copies, to + Mentor Graphics. reasonable satisfaction. + +6. GOVERNING LAW. This License shall be governed by and construed + under the laws of the State of Oregon, USA, if You are located in + North or South America, and the laws of Ireland if You are located + outside of North or South America. + +7. SEVERABILITY. If any provision of this Agreement is held by a court + of competent jurisdiction to be void, invalid, unenforceable or + illegal, such provision shall be severed from this Agreement and + the remaining provisions will remain in full force and effect. + +8. MISCELLANEOUS. This Agreement contains the parties' entire + understanding relating to its subject matter and supersedes all + prior or contemporaneous agreements, except valid license + agreements related to the subject matter of this Agreement (which + are physically signed by you and an authorized agent of Mentor + Graphics). This Agreement may only be modified in writing by + authorized representatives of the parties. Waiver of terms or + excuse of breach must be in writing and shall not constitute + subsequent consent, waiver or excuse. From 50d3b4cb8d304e86c579345b5c84cf964ddc8792 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Tue, 19 Mar 2019 15:03:57 -0700 Subject: [PATCH 025/324] Added some bitline measures to the model_checker --- compiler/characterizer/model_check.py | 42 ++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/compiler/characterizer/model_check.py b/compiler/characterizer/model_check.py index 12bc5d58..f9c8a296 100644 --- a/compiler/characterizer/model_check.py +++ b/compiler/characterizer/model_check.py @@ -27,6 +27,7 @@ class model_check(delay): self.wl_meas_name, self.wl_model_name = "wl_measures", "wl_model" self.sae_meas_name, self.sae_model_name = "sae_measures", "sae_model" self.wl_slew_name, self.sae_slew_name = "wl_slews", "sae_slews" + self.bl_meas_name, self.bl_slew_name = "bl_measures", "bl_slews" def create_measurement_names(self): """Create measurement names. The names themselves currently define the type of measurement""" @@ -49,6 +50,8 @@ class model_check(delay): self.rbl_slew_meas_names = ["slew_rbl_gated_clk_bar","slew_gated_clk_nand", "slew_delay_chain_in"]+dc_slew_names self.sae_slew_meas_names = ["slew_replica_bl0", "slew_pre_sen"]+sen_driver_slew_names+["slew_sen"] + self.bitline_meas_names = ["delay_wl_to_bl", "delay_bl_to_dout"] + def create_signal_names(self): """Creates list of the signal names used in the spice file along the wl and sen paths. Names are re-harded coded here; i.e. the names are hardcoded in most of OpenRAM and are @@ -73,14 +76,20 @@ class model_check(delay): self.sae_signal_names = ["Xsram.Xcontrol0.Xreplica_bitline.bl0_0", "Xsram.Xcontrol0.pre_s_en"]+\ sen_driver_signals+\ ["Xsram.s_en0"] + + dout_name = "{0}{1}_{2}".format(self.dout_name,"{}",self.probe_data) #Empty values are the port and probe data bit + self.bl_signal_names = ["Xsram.Xbank0.wl_{}".format(self.wordline_row),\ + "Xsram.Xbank0.bl_{}".format(self.bitline_column),\ + dout_name] def create_measurement_objects(self): """Create the measurements used for read and write ports""" - self.create_wordline_measurement_objects() - self.create_sae_measurement_objects() - self.all_measures = self.wl_meas_objs+self.sae_meas_objs + self.create_wordline_meas_objs() + self.create_sae_meas_objs() + self.create_bl_meas_objs() + self.all_measures = self.wl_meas_objs+self.sae_meas_objs+self.bl_meas_objs - def create_wordline_measurement_objects(self): + def create_wordline_meas_objs(self): """Create the measurements to measure the wordline path from the gated_clk_bar signal""" self.wl_meas_objs = [] trig_dir = "RISE" @@ -102,7 +111,19 @@ class model_check(delay): targ_dir = temp_dir self.wl_meas_objs.append(slew_measure(self.wl_slew_meas_names[-1], self.wl_signal_names[-1], trig_dir, measure_scale=1e9)) - def create_sae_measurement_objects(self): + def create_bl_meas_objs(self): + """Create the measurements to measure the bitline to dout, static stages""" + #Bitline has slightly different measurements, objects appends hardcoded. + self.bl_meas_objs = [] + trig_dir, targ_dir = "RISE", "FALL" #Only check read 0 + self.bl_meas_objs.append(delay_measure(self.bitline_meas_names[0], + self.bl_signal_names[0], + self.bl_signal_names[-1], + trig_dir, + targ_dir, + measure_scale=1e9)) + + def create_sae_meas_objs(self): """Create the measurements to measure the sense amp enable path from the gated_clk_bar signal. The RBL splits this path into two.""" self.sae_meas_objs = [] @@ -213,6 +234,8 @@ class model_check(delay): wl_slew_result = [[] for i in self.all_ports] sae_delay_result = [[] for i in self.all_ports] sae_slew_result = [[] for i in self.all_ports] + bl_delay_result = [[] for i in self.all_ports] + bl_slew_result = [[] for i in self.all_ports] # Checking from not data_value to data_value self.write_delay_stimulus() @@ -223,7 +246,8 @@ class model_check(delay): #Parse and check the voltage measurements wl_delay_result[port], wl_slew_result[port] = self.get_measurement_values(self.wl_meas_objs, port) sae_delay_result[port], sae_slew_result[port] = self.get_measurement_values(self.sae_meas_objs, port) - return (True,wl_delay_result, sae_delay_result, wl_slew_result, sae_slew_result) + bl_delay_result[port], bl_slew_result[port] = self.get_measurement_values(self.bl_meas_objs, port) + return (True,wl_delay_result, sae_delay_result, wl_slew_result, sae_slew_result, bl_delay_result, bl_slew_result) def get_model_delays(self, port): """Get model delays based on port. Currently assumes single RW port.""" @@ -306,7 +330,7 @@ class model_check(delay): self.targ_read_ports = [read_port] self.targ_write_ports = [self.write_ports[0]] debug.info(1,"Model test: corner {}".format(self.corner)) - (success, wl_delays, sae_delays, wl_slews, sae_slews)=self.run_delay_simulation() + (success, wl_delays, sae_delays, wl_slews, sae_slews, bl_delays, bl_slews)=self.run_delay_simulation() debug.check(success, "Model measurements Failed: period={}".format(self.period)) wl_model_delays, sae_model_delays = self.get_model_delays(read_port) @@ -316,6 +340,7 @@ class model_check(delay): debug.info(1,"Measured SAE delays (ns):\n\t {}".format(sae_delays[read_port])) debug.info(1,"SAE model delays:\n\t {}".format(sae_model_delays)) debug.info(1,"Measured SAE slews:\n\t {}".format(sae_slews[read_port])) + debug.info(1,"Measured Bitline delays (ns):\n\t {}".format(bl_delays[read_port])) data_dict[self.wl_meas_name] = wl_delays[read_port] data_dict[self.wl_model_name] = wl_model_delays @@ -323,6 +348,7 @@ class model_check(delay): data_dict[self.sae_model_name] = sae_model_delays data_dict[self.wl_slew_name] = wl_slews[read_port] data_dict[self.sae_slew_name] = sae_slews[read_port] + data_dict[self.bl_meas_name] = bl_delays[read_port] #Some evaluations of the model and measured values # debug.info(1, "Comparing wordline measurements and model.") @@ -342,6 +368,8 @@ class model_check(delay): name_dict[self.sae_model_name] = name_dict["sae_measures"] name_dict[self.wl_slew_name] = self.wl_slew_meas_names name_dict[self.sae_slew_name] = self.rbl_slew_meas_names+self.sae_slew_meas_names + name_dict[self.bl_meas_name] = self.bitline_meas_names[0:1] + #name_dict[self.wl_slew_name] = self.wl_slew_meas_names return name_dict From d366ecd90990a347b846fa9fffc7f0bafc30adc6 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Wed, 20 Mar 2019 09:04:29 -0700 Subject: [PATCH 026/324] Remove old presentation --- OpenRAM_ICCAD_2016_presentation.pdf | Bin 6646425 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 OpenRAM_ICCAD_2016_presentation.pdf diff --git a/OpenRAM_ICCAD_2016_presentation.pdf b/OpenRAM_ICCAD_2016_presentation.pdf deleted file mode 100644 index 0575e52b100c648adabe3ece275c582f93e42448..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6646425 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

    D@QE8*(y{T{nXN*^e3w0QBb;e;hNjP(uH&Y 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 Aa{vGU diff --git a/technology/freepdk45/lib/sram/inv_col/layout/master.tag b/technology/freepdk45/lib/sram/inv_col/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/inv_col/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/inv_dec/layout/layout.oa b/technology/freepdk45/lib/sram/inv_dec/layout/layout.oa deleted file mode 100755 index 3ec1f587f0e55d02f654caae887b44c9dd6a43ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27812 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 diff --git a/technology/freepdk45/lib/sram/inv_dec/layout/master.tag b/technology/freepdk45/lib/sram/inv_dec/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/inv_dec/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/inv_nor/layout/layout.oa b/technology/freepdk45/lib/sram/inv_nor/layout/layout.oa deleted file mode 100755 index 6c23bc4e8e6c4cc59d12179a7d7e7905f79deefe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22812 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 RywP=3t6qpOApbA&{{m*y_&)#u diff --git a/technology/freepdk45/lib/sram/inv_nor/layout/master.tag b/technology/freepdk45/lib/sram/inv_nor/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/inv_nor/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/mux_a/layout/layout.oa b/technology/freepdk45/lib/sram/mux_a/layout/layout.oa deleted file mode 100755 index 16e1369b3d2aeb46bf0c0ff8fc9671fba47199c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27948 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 diff --git a/technology/freepdk45/lib/sram/mux_a/layout/master.tag b/technology/freepdk45/lib/sram/mux_a/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/mux_a/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/mux_abar/layout/layout.oa b/technology/freepdk45/lib/sram/mux_abar/layout/layout.oa deleted file mode 100755 index 126897ec6e6125b8ac85cd29839d29a7a9f2e64a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27716 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 CWsCp- diff --git a/technology/freepdk45/lib/sram/mux_abar/layout/master.tag b/technology/freepdk45/lib/sram/mux_abar/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/mux_abar/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/nor_1/layout/layout.oa b/technology/freepdk45/lib/sram/nor_1/layout/layout.oa deleted file mode 100755 index b0d79792c10f8d39efbc8dfe7179df10e173d75f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31068 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 diff --git a/technology/freepdk45/lib/sram/nor_1_mx/layout/master.tag b/technology/freepdk45/lib/sram/nor_1_mx/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/nor_1_mx/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/ntap/layout/layout.oa b/technology/freepdk45/lib/sram/ntap/layout/layout.oa deleted file mode 100755 index aa2cdc195eda229d58ceefd82294bf2f91e3f1ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13668 zcmeI3KWtUk9mlVYG5<_}gd`+^!~_#a0*-B*gd`-fgK3i1Nv&d~R6+vV?-ib8{4Dcu z6A7tSh13igP(>?-3>g?0I(A@uLsezSP^krjTAnV}GPlHuZ%?u#>FMe0>h0|6ImjEw-yl9-nmG6AiK)}Y@dI5a zPK}NAc6XmR(9<4ICwe=(J2_oO<~XS7$o98G+kd8_x8R5IJQC8T#0VQRB#*#Na5LNj zAB7x)ldZ%#4ksLklWn9oaqet}t6&RU4O`(FxE8L1>){4i@4m2!_nYAs_$Yh~ZiSD- zC*YHC8+-~r4WEJA;STsL^nInB_)hpd)NM<__nF3BC;X!Tqokz5=^o zH_YFgdP(>F={4f7L*EzPApRzN3m$@RLybv~x-Q7xbU)BlLia-51$AFp7ovNgu4uA5 z*_`Z6wkA81jmf@bTe2(Jl|H{`{TmqK(E+ZVDwMAxxbLb^hmgc)T6=GXycKdN@qcAk$ONaS+=d<^7d=Z z)Wi3X8T{T1-!o?1PF8yMuj}!B-u~Er*WUx$Dbfc|Ld}DM>sgGh-}&0p(%JgaqvIt1 z-$V1woTm0Ih1e#T;|1ydhNX2dFMmWl&r0WgRrOKlOgyG>=kq&}IlJq7z1#6wYMpm| z@AB@G40{GsUBokuy%4jTc7y&sEAtN2ZI1KbcLP zDi=PAV#TSmNj&zCmrhNbDNa<*CWX;omZpkF3Z+VUs(*5_JTg2oS)4i?ZgILaRXJBa zTOKI>dgR=AB~4GpisR#-l#0I@D12C`MFvZwX}mBxG(Iv`RK@R4l?unoQ>9a-iD+V8 z@~`fmeC%kYIJqEin)vZ>|4=ek82v?Yx^%Wwo{%1-1P!uqxO{FR#w8_r-CWO9md@vz zc(y8W1L+<(H@`F3X6!dy&kgFk32(vM@SpGwbU*6R_LE=l6kh=4_Za5dWhAHet6&RU4O`(FxE8L1>){6Ij`*C}M!NgkM+XPs2XGJ$ z!;|ndoP-tlDLfBn;05?O`~qHtm*8c1lm1z+^_ZVe$IW`>9yEP`33d6H;$;bUvok7A z?TlutPJ=VS#UwpLs=QR|drUm0LHlXC7HA;94s9>>?jvcXs)_lkXTQETxqaWOybjYd zMpWb9KRkar8!OPgd~?~$@A0qa{aZSuHLfw#>!0&4w$AhG*A-g-Zto5a{X5rS3+tv0 zZioAz*SXj8SEOHowSJ<@eBATl^H)6%=gNB=B>!lk@$25E;C&#AW&6N}mbTTXvZ|@s zs*q(!<4p>4Ua zd7WE^i0$_q6rek??#~RjrWbFI&cE0?&F{zFU%j7hq{2;bGu#5VLU+V^c0d14f3L$E z@Fu(szlA;*xZV!x?}YwjS&{`V(7FZPNr(E{)aF{LYkmIE$tE=lkF^SLTni7Ylsa z!Dv(Rb!3%9Sdb@6PLhk!m_&KfcBwPp2cHeK7wes}txYb*-`Svd>0X`H=P@MreV)Wn z^6S{^yxw~D;k;4*r*BpYtr=WxZ5^?^YIDqR$^FB_>&(AnX+7$k?|x!Wc0aXo)jRjP zpwFqU*S~}L_pUw~7=VMh1~=32R_K1#qy5ldP-$vg@$CHAHg6k;+Oux*>-P8YPNJaS zt^N=hB>MjSkD$`$hCf9_;_$n8km%cn)FM$E53Am&z8W$wNPlYAWAsanJGFV{%WHk9 z>-Is{o7=x%dj4%+`i^A1sxFVu>(u${*|)#5rpk%(wsY4%gkFZ>F?bvn;5a-F@vF%t z;hJxw*Zg+~|1RL)1Kg19 zIsdzW`<3_0+vu3TA9fJ$f_-oh4#8n~3?7FkVFCKwdhr3zsa_X8XIjrorT_hi^LsuT zo%hAc-)o(z5A>rt=UG+Gjn70pFZWz`EBDOM*qk8Udfx4qWlz!*`p>(YTK;3k+n=MZ@AYx9^@01SejUA% zM5v~Jq1=hSc`Kg;HO15Xp!rUH2pJmPk8B`$J6P<#(&+x>dGqKzUhgONlm7RK{&$J` XU3xi!+i_iP-*MCF`TVEi|5yDN7DA%K diff --git a/technology/freepdk45/lib/sram/ntap/layout/master.tag b/technology/freepdk45/lib/sram/ntap/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/ntap/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/out_inv_16/layout/layout.oa b/technology/freepdk45/lib/sram/out_inv_16/layout/layout.oa deleted file mode 100755 index 00d0b24e06f87eea1569881d8613849093efe063..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32740 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 diff --git a/technology/freepdk45/lib/sram/out_inv_16/layout/layout.oa- b/technology/freepdk45/lib/sram/out_inv_16/layout/layout.oa- deleted file mode 100755 index 211c52e77328a86003e72536116c3907756bd415..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32420 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 diff --git a/technology/freepdk45/lib/sram/out_inv_2/layout/master.tag b/technology/freepdk45/lib/sram/out_inv_2/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/out_inv_2/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/out_inv_2/schematic/data.dm b/technology/freepdk45/lib/sram/out_inv_2/schematic/data.dm deleted file mode 100755 index 7cfdc2da270c380994016bfe6c144f760f0c014a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3556 zcmeH~OKTHR6vuB~t&jSuQChV)#HuN1m`o!mZVE<=8e^bZ+zojQX&|N{vB5%@T?+bv zTm*69qKhsR3c7IF58zVJb29(`G^7R<1iQ$A$?x8C?&I8Z@0>fS-n|rxnTVleq;O20 z5EK`{888aQz-e#{ybO+m7r`Uo1egTBb3oKNUmf)(_yXJje?T@-H(|eEVd4V#RTm>N z3p>Xz_-e!H$wSbSsG1D~WEKh=e1(OxKiiKuiohrW2R#B#%DLXO?X*_o8>+=PYoTd3D-jkT946F$sI@Dw-+o(ALK8SpGP1)c*Hn#wdCYS!1hrMXg3S8K~9rSVkR!oYfOs=vHXIUjFawvVy_3?VQK zM%V%EBH$$SQIPX)W1^4X4)_J!1;2s(1em}$ac~N}21hps?z_N$U9<@6JU7G0`<3nE zSkE)~L%l!h==Xm`K(~WOMBg2$c6(dp?^mxJ@;BKp_vvxyyXw2<7R_O5*72qnn5m>9 zqPE^QqTki<+=2=d*_+oyVU8jLktID0TqcW_oOQS G?|uSopVYhn diff --git a/technology/freepdk45/lib/sram/out_inv_2/schematic/master.tag b/technology/freepdk45/lib/sram/out_inv_2/schematic/master.tag deleted file mode 100755 index 26be1bef..00000000 --- a/technology/freepdk45/lib/sram/out_inv_2/schematic/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -sch.oa diff --git a/technology/freepdk45/lib/sram/out_inv_2/schematic/sch.oa b/technology/freepdk45/lib/sram/out_inv_2/schematic/sch.oa deleted file mode 100755 index 1f45ca4a33b1f9e0ebf87005d613c465ddbf002d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30132 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 MKc1e>4aD!2kdN diff --git a/technology/freepdk45/lib/sram/out_inv_4/layout/layout.oa b/technology/freepdk45/lib/sram/out_inv_4/layout/layout.oa deleted file mode 100755 index e0690088d787dee9a4cb6d7bd69d0ef64a99ccf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26940 zcmeHQYiwOrc0TuE`}&c@2~J`l5SticAQ;^w}I5QqtZ33VLb8|Mx;w(H!O zWG2ISGNB-ZREAQCc19|tk;th0pe+^C(M)xVXo*x>MNz7Ws{B9|(o7|$gHqH+6&}`^s$uf# zXNLTs@)3^`KV>*hzM6_SPCUwvUcAcB@Jh9h?^98ysE}vt{P>f%`MCcMA4l#cf1i)9 zwE1}Ieji&O^6{f?A79?q*W*j;x^LsLUjL4{tz_Gruh=Q+27y!!BeJM6FwJx0NO z_gog7N30~yCoUjzd+Sw^Ur1a;AyiB}V^Azn*dLcET6J#i_qhFD9yfr!%I_$37iL z0-Ou6wZ}04M*^JtaP)%RVXF^&gRQ~NU}LZ^*cR*xHU)cHYy^A45$YPFYmIQO!I|`W zBOIw}jB1T;Fj{6*XLO?x&V9>`>WywTy2a>LqZLLtdNml`Zq#UmNz-h!(x}B~l@X3* zcN(oW!dzTqgd^HoqkD|*HNsJ?)o7j3dZRX@cB2hO8;v#@Z8n-|K%Zt3RDQY$p8@Bw z#i-M0tI;;22aIsO)Y&-94wN2-R)w<@AjTO1V~ubhDz%{VCdL&3V~enk>FbG;$r|^I zd37*Y3$QcyNPxUEW{YEW&aRP<$I$#aT7E6ca`by6Px={0zE4y;sG~4Q4jz;9{#brj z=l2>GY9;O=VjK`u&t!;shoF2lj`QaaZpAbD|2<&%w3fkcp%B>w$Jp6@VLZotT)fI5 zF9Pe!A)aX?cI$ZAgVJDLTni^m$9P_M#2MR!=_;>2V4}S!Be1dv>HcA_JGpnbZMd`N zV74oLAhjdgb6}8hqkMAjxA(_q&46Pd+9O&ul8B7henO7W64`mMx92{s*?dv&|$+~#2H5sCd&*I=O3LDBYLtwjgJY`#B2q1`7wdo9!mG^A0w2D2-M|g zDyS--siQeW2MvP()rt3RHv?%KID}3d^agq!?jK4W%nqe{v#F#F&!(Y)LxUSLJ$+_K zsot#Du`;ZItH2jYgR{AI$dj_okM49gSW`OIRgTyT+F+#yK_A zD4)-bzhX}dLddTJkqHB`l9)c#6qyZ9igyv}>4{ARp&h)O3r3!k$FF!w<)6PiHI?UAC9Xv{YnH&^~3 zdOEr@UhM6(0qXY$$FT0kV%kQiGmznQJ#8-$X zh_4fWLd+3Q5zi9O6W=GUr5w-!g8ChXnitZqcwsPJ_3UPQBScf@v;vB&3dn10jukmS z^-X`GCqsYyzb}0x*b3THNT`oVQbv|eZGxbl>iOfoRm%qY1yc|L8 zgw>^VwXby^{?%=v>TOLGh(+n+^e5T1J)WzKJ62+PsQF0=?G!^);=}3eumkt z{8R}CPT!T3k}o5c6Dx>wi4sWuPxI_5rY|HeBC0==?R!692R|a}dmAlYlCzTaYF}JU zehF~}F}P2b-)v|4W@0-h+zBj*7BF^&LE{pJ8c*4o_%IBsNA|9A!F<8^PiPo>sIROH z#qY+KeuexXh)2lr}vvRMG6~snj3(?MVF03WC65ENJiIV55iWGAk z1nmsI-7<|#m(>4GR*XF-_G)S;%&v5P(E6+L+gY%SxQnR$_kQwfHwbKVST8qW|aF%i9kum58v_EpI4KlEz2r){G6N`wdkHSW1l2 zamI*oViB>Jm>{~B{Aiy7Yh5W}y86|~4otRx+0A?z;!)!B#2*n~C;p819&tPSahCW2 z@nfR;Q$_jeh$ne4`3do7MD3YaTxuSNvQPOf`Lj#KQC~a(v7}X{kG1I6e}K z*_Oe5wdDAOQ>4?X<0~sGjfq3uj-Pk^ZR_o8hR4DG=6^r^^hFa6&qVP3P42fo|8u*4 z+GGl*|Fz{kVzk8yKVyXZpBmwQqY>^AhkL{Y^B2~C9h6{ATK4aP?0y6UGyi9k7|;3t z&J-9-f78;Ru(bP4#v_&w-^QTK2ID(z)Act@2aoh%dF1_DBh=qvWWm=Xp5Gc>5+5tb z&sQfXk4hrms>nj`UHj(e&%K}9*CQs5SH*xK+H4UQEl#0%{h2w(T3#J~vBg!i=GE>C zYbJ`jPaj?F()8;Pv1TwnQ6%Cy~k~d-=4EH4resTZo ze_75YW`hX9^-k+y*t+M88s+HsgX`T)&n4zGT;TGd=JM->KQ(-PAtUU!Fz7o>`Eh-p zS(xXmbkAY%GB5xO*t^^4J=`xhnXe5rj&a9p)-3687wFKSTx56Lq~0kXuy#G}OH z#FvPAo}=eBA2R-9qMqM;LSFLgTvWjUmR`b8YnaAa=MVl;IUTWds^UHo9|eku*L$5ZB6^O>FU=uUZ;$|VE9i&16Nn9 zeBQ#vOK&sQgKA37l+Nh~_Yzn0!0Eu^H4pTB2H$Za=-UeIv;ElVU)4UwW}-0N>7@Ry zWd)EMeNsEBSM4jm&UI3Z{9^F?jNp44oxi90oJNAkU&?Pu-c}0OPTWlFBz6(^5cd-& z^S2|+C%^kF`R9o*5ao|wCV!ra%Ik@P73AeFgU<~VAIv{fzMTWAdM2`=>BOO0*^2G8 z$Gl%GNXxNq;fV2*QGR`fYV{q0-MWBz=yb=%KdkRK_7i$;t_n3@)!s!mr1vIrtZ^!)f>=XrA!+g5IxDon%TEZC1$4oRoE8@jv^+ZZwa2ggZ!J8_b)B)kFCaew(kk1UvBU?yT0-htDC+gg!bCUKIHLPFHe>aogO&la1CvK*K zDtJymP5gkU-=&Zq!%*vfn17mT{5u@xAga9DU#kI}o>^S6r6%=<<r2 z_j~@;I_~?vg2+paiui|P2Yj(eYV=0?7ii7Hk>3LCN81iHN-5}tqdO!t6yQLbtQ-=s56z*`*ocI6h8&k z&Sv=*G#$(@$-xm9Olj9lV7aL)2B`m(i@*23VCG72R!mDqsZv~bbc_WsT4_C_b4GByY z4%9UL^CHBo+U3i!w~&M5X%4R91%o6w`YG9><6SnH)xJc=D`1c{0C?< zhq#oHg`E4&$727(GT=P~;`n|m=Q!i>-3@G3^%d*IA~T>pSCsmbJ~a-^CRsTB6&sGy zkDedlIXw0b>{GrTHXFL`j+2KKXx-I%Ec*yPzm^?Ij!GI{6|tJQgsA7rI$yp)0jt>| zt;;$`>hHqNb7Gz2z@NlZ8w=7y81DD8<^OI_yiny%vENIG=UMI(W;jh=`N@7|;Bk`# zgg>cU?@Q%uITE!8SkZW_C|+DtQk*#Qt;G+2d*{(dzO(D8N5A{n$ovJdIakfCnzyiW z(fq{=st2|WE?rsEQoHJgJC@y9w|dUp$h^vE`kMJxrAAkJm z-}$}nXZAeHb}+PCBM(F#j651iM~+6GkNipGFCzaCIT!hLqF3g}KxI9`G*vJ(#=QZ^8Uy>~!p3V*a(=e)(mitxTJ}4*R{7E%sX}TkUsJ z8YYp=b;8$G!P(YsqhkZUKq?5OrKRzLV4qPKXOa1k7#j-4#KTAEMa3nF(z5c3Idi?r z`3tV9TDWL&_0`v0yW~1=X-(}7%j#~tX?gw4x7@m7Tf^;*P0cG?R^4&u>but5?cH;) z*SgMYYu~VO)8>x*w{&jx9@zfiLp!=2-ucL`M<4sfZfghMeVj6aDPwG^>|dq*s!!E~ z)Wy`UK&sDwc3E%av;N_4Hy0S;8kX;~TQ}huv~QAwyX13Mi2t4Lc}sH19|YXKlBbOF z({w-ia;pCXW6%zcD#}N7~wZ{xh$5hX=ya#qr7k&&ST&>;58>y~OQ>%k0TQh5a=l@}h4D zUv~f6C5SK1xGUBG(0(J0d)Y7kZ1A44x9jri@p5dB4BmSM|@w*QTtO zv3i`W{@3oCZv7L>r}o0eaWq}+3YFsHRLj2`kYBY-wftL`sr*|UpD(`svGeCr+kZDO z|1P!sFJ@SN`t8HzeA#|)D&H^dF*!k-jpX~V{ykW=A^)GTE=_J!e}9AHi=G1^PuMy> z+51Fo1aw|g{W^c^`Qt8b7<3*_lFty25?>&`M3mfNn1JvWgy=tl&gCjs$@=`%nO{+z zs+8_oYc7CfyXH5thk$tZl7Nj|@_thl2KJrP-EZ<)p_2_4^*tXk!yAdK z@zQx7&lT{Ev)WTW?N^mQ%ue+@NzXg-!r09i!x$>^Van1#Kj@5<7|8 ziCx59M160whkTOwJUjdXG2d_MJ;-Z5@NtE+Cu9{L%s&}l&jC8Q> zNXr%6Ll(#1=u0(X5TwtXceC%;e8uSs-D=$5;b7qJ5MWDW^ZqMzUeb=;U+!2r{Z2+q z@oIn-YW}G`Js*3I>8FWjiRX#GB3>jWSihbJ){xiyRI_0iHjlKQLuVR2& zsG9tqfpX@cnkRkz^w}I5QqtZ33VLb8|Mx;w(H!O zWG2ISGNB-ZREAQCc19|tk;th0pe+^C(M)xVXo*x>MNz7Ws{B9|(o7|$gHqH+6&}`^s$uf# zXNLTs@)3^`KV>*hzM6_SPCUwvUcAcB@Jh9h?^98ysE}vt{P>f%`MCcMA4l#cf1i)9 zwE1}Ieji&O^6{f?A79?q*W*j;x^LsLUjL4{tz_Gruh=Q+27y!!BeJM6FwJx0NO z_gog7N30~yCoUjzd+Sw^Ur1a;AyiB}V^Azn*dLcET6J#i_qhFD9yfr!%I_$37iL z0-Ou6wZ}04M*^JtaP)%RVXF^&gRQ~NU}LZ^*cR*xHU)cHYy^A45$YPFYmIQO!I|`W zBOIw}jB1T;Fj{6*XLO?x&V9>`>WywTy2a>LqZLLtdNml`Zq#UmNz-h!(x}B~l@X3* zcN(oW!dzTqgd^HoqkD|*HNsJ?)o7j3dZRX@cB2hO8;v#@Z8n-|K%Zt3RDQY$p8@Bw z#i-M0tI;;22aIsO)Y&-94wN2-R)w<@AjTO1V~ubhDz%{VCdL&3V~enk>FbG;$r|^I zd37*Y3$QcyNPxUEW{YEW&aRP<$I$#aT7E6ca`by6Px={0zE4y;sG~4Q4jz;9{#brj z=l2>GY9;O=VjK`u&t!;shoF2lj`QaaZpAbD|2<&%w3fkcp%B>w$Jp6@VLZotT)fI5 zF9Pe!A)aX?cI$ZAgVJDLTni^m$9P_M#2MR!=_;>2V4}S!Be1dv>HcA_JGpnbZMd`N zV74oLAhjdgb6}8hqkMAjxA(_q&46Pd+9O&ul8B7henO7W64`mMx92{s*?dv&|$+~#2H5sCd&*I=O3LDBYLtwjgJY`#B2q1`7wdo9!mG^A0w2D2-M|g zDyS--siQeW2MvP()rt3RHv?%KID}3d^agq!?jK4W%nqe{v#F#F&!(Y)LxUSLJ$+_K zsot#Du`;ZItH2jYgR{AI$dj_okM49gSW`OIRgTyT+F+#yK_A zD4)-bzhX}dLddTJkqHB`l9)c#6qyZ9igyv}>4{ARp&h)O3r3!k$FF!w<)6PiHI?UAC9Xv{YnH&^~3 zdOEr@UhM6(0qXY$$FT0kV%kQiGmznQJ#8-$X zh_4fWLd+3Q5zi9O6W=GUr5w-!g8ChXnitZqcwsPJ_3UPQBScf@v;vB&3dn10jukmS z^-X`GCqsYyzb}0x*b3THNT`oVQbv|eZGxbl>iOfoRm%qY1yc|L8 zgw>^VwXby^{?%=v>TOLGh(+n+^e5T1J)WzKJ62+PsQF0=?G!^);=}3eumkt z{8R}CPT!T3k}o5c6Dx>wi4sWuPxI_5rY|HeBC0==?R!692R|a}dmAlYlCzTaYF}JU zehF~}F}P2b-)v|4W@0-h+zBj*7BF^&LE{pJ8c*4o_%IBsNA|9A!F<8^PiPo>sIROH z#qY+KeuexXh)2lr}vvRMG6~snj3(?MVF03WC65ENJiIV55iWGAk z1nmsI-7<|#m(>4GR*XF-_G)S;%&v5P(E6+L+gY%SxQnR$_kQwfHwbKVST8qW|aF%i9kum58v_EpI4KlEz2r){G6N`wdkHSW1l2 zamI*oViB>Jm>{~B{Aiy7Yh5W}y86|~4otRx+0A?z;!)!B#2*n~C;p819&tPSahCW2 z@nfR;Q$_jeh$ne4`3do7MD3YaTxuSNvQPOf`Lj#KQC~a(v7}X{kG1I6e}K z*_Oe5wdDAOQ>4?X<0~sGjfq3uj-Pk^ZR_o8hR4DG=6^r^^hFa6&qVP3P42fo|8u*4 z+GGl*|Fz{kVzk8yKVyXZpBmwQqY>^AhkL{Y^B2~C9h6{ATK4aP?0y6UGyi9k7|;3t z&J-9-f78;Ru(bP4#v_&w-^QTK2ID(z)Act@2aoh%dF1_DBh=qvWWm=Xp5Gc>5+5tb z&sQfXk4hrms>nj`UHj(e&%K}9*CQs5SH*xK+H4UQEl#0%{h2w(T3#J~vBg!i=GE>C zYbJ`jPaj?F()8;Pv1TwnQ6%Cy~k~d-=4EH4resTZo ze_75YW`hX9^-k+y*t+M88s+HsgX`T)&n4zGT;TGd=JM->KQ(-PAtUU!Fz7o>`Eh-p zS(xXmbkAY%GB5xO*t^^4J=`xhnXe5rj&a9p)-3687wFKSTx56Lq~0kXuy#G}OH z#FvPAo}=eBA2R-9qMqM;LSFLgTvWjUmR`b8YnaAa=MVl;IUTWds^UHo9|eku*L$5ZB6^O>FU=uUZ;$|VE9i&16Nn9 zeBQ#vOK&sQgKA37l+Nh~_Yzn0!0Eu^H4pTB2H$Za=-UeIv;ElVU)4UwW}-0N>7@Ry zWd)EMeNsEBSM4jm&UI3Z{9^F?jNp44oxi90oJNAkU&?Pu-c}0OPTWlFBz6(^5cd-& z^S2|+C%^kF`R9o*5ao|wCV!ra%Ik@P73AeFgU<~VAIv{fzMTWAdM2`=>BOO0*^2G8 z$Gl%GNXxNq;fV2*QGR`fYV{q0-MWBz=yb=%KdkRK_7i$;t_n3@)!s!mr1vIrtZ^!)f>=XrA!+g5IxDon%TEZC1$4oRoE8@jv^+ZZwa2ggZ!J8_b)B)kFCaew(kk1UvBU?yT0-htDC+gg!bCUKIHLPFHe>aogO&la1CvK*K zDtJymP5gkU-=&Zq!%*vfn17mT{5u@xAga9DU#kI}o>^S6r6%=<<r2 z_j~@;I_~?vg2+paiui|P2Yj(eYV=0?7ii7Hk>3LCN81iHN-5}tqdO!t6yQLbtQ-=s56z*`*ocI6h8&k z&Sv=*G#$(@$-xm9Olj9lV7aL)2B`m(i@*23VCG72R!mDqsZv~bbc_WsT4_C_b4GByY z4%9UL^CHBo+U3i!w~&M5X%4R91%o6w`YG9><6SnH)xJc=D`1c{0C?< zhq#oHg`E4&$727(GT=P~;`n|m=Q!i>-3@G3^%d*IA~T>pSCsmbJ~a-^CRsTB6&sGy zkDedlIXw0b>{GrTHXFL`j+2KKXx-I%Ec*yPzm^?Ij!GI{6|tJQgsA7rI$yp)0jt>| zt;;$`>hHqNb7Gz2z@NlZ8w=7y81DD8<^OI_yiny%vENIG=UMI(W;jh=`N@7|;Bk`# zgg>cU?@Q%uITE!8SkZW_C|+DtQk*#Qt;G+2d*{(dzO(D8N5A{n$ovJdIakfCnzyiW z(fq{=st2|WE?rsEQoHJgJC@y9w|dUp$h^vE`kMJxrAAkJm z-}$}nXZAeHb}+PCBM(F#j651iM~+6GkNipGFCzaCIT!hLqF3g}KxI9`G*vJ(#=QZ^8Uy>~!p3V*a(=e)(mitxTJ}4*R{7E%sX}TkUsJ z8YYp=b;8$G!P(YsqhkZUKq?5OrKRzLV4qPKXOa1k7#j-4#KTAEMa3nF(z5c3Idi?r z`3tV9TDWL&_0`v0yW~1=X-(}7%j#~tX?gw4x7@m7Tf^;*P0cG?R^4&u>but5?cH;) z*SgMYYu~VO)8>x*w{&jx9@zfiLp!=2-ucL`M<4sfZfghMeVj6aDPwG^>|dq*s!!E~ z)Wy`UK&sDwc3E%av;N_4Hy0S;8kX;~TQ}huv~QAwyX13Mi2t4Lc}sH19|YXKlBbOF z({w-ia;pCXW6%zcD#}N7~wZ{xh$5hX=ya#qr7k&&ST&>;58>y~OQ>%k0TQh5a=l@}h4D zUv~f6C5SK1xGUBG(0(J0d)Y7kZ1A44x9jri@p5dB4BmSM|@w*QTtO zv3i`W{@3oCZv7L>r}o0eaWq}+3YFsHRLj2`kYBY-wftL`sr*|UpD(`svGeCr+kZDO z|1P!sFJ@SN`t8HzeA#|)D&H^dF*!k-jpX~V{ykW=A^)GTE=_J!e}9AHi=G1^PuMy> z+51Fo1aw|g{W^c^`Qt8b7<3*_lFty25?>&`M3mfNn1JvWgy=tl&gCjs$@=`%nO{+z zs+8_oYc7CfyXH5thk$tZl7Nj|@_thl2KJrP-EZ<)p_2_4^*tXk!yAdK z@zQx7&lT{Ev)WTW?N^mQ%ue+@NzXg-!r09i!x$>^Van1#Kj@5<7|8 ziCx59M160whkTOwJUjdXG2d_MJ;-Z5@NtE+Cu9{L%s&}l&jC8Q> zNXr%6Ll(#1=u0(X5TwtXceC%;e8uSs-D=$5;b7qJ5MWDW^ZqMzUeb=;U+!2r{Z2+q z@oIn-YW}G`Js*3I>8FWjiRX#GB3>jWSihbJ){xiyRI_0iHjlKQLuVR2& zsG9tqfpX@cnkRkzjYKyXNKm*5-X_DJ|8QDn0ya7n;PXqe*Q3!*@OnG=qP z0I$!NaFv5Q7ddD(I=Jth4i2n!aKp_GK7Ff$8#^70-{qjn)hL2){E(!7)WLnj4n{ud z;Fmw;;F`xB?0&+*fzLVEDD_aitZ||(wI4;b3q>Kb+C(p^&(}Rpisl;@{# z3&B*0?-IJbqThXDc&~_o9uv9^lJ9AWpE23t`>Ylyg3SM`0&uMS&?7+bVn=GTHx=54>17e-uHx^Xe%OEAXq3kNw7#zmaCR*8?31kulpyD z>|=Bv<(07Rr?Mri`zpVL1A;-pT*0yST@j(nwErrS^vQx#1TPbuDtNh|?$@SEc!uCi z!7BuHKUXZ_62VeI?sn;Pzc)+5vjyh}RtU}&yh?DM;C#Uaf|Y_-3swn61>O6~T8Y>F z);o{*Tb_PvhOX1e+T>$_@(gIz%PSugkKKd z1iu2l8Ga@FweZ)$uY#YbW1Z;!P?2L62eIqnIf&f=zZ(8Vc<%4@4B@Rph+yoTNIRvY ztbE8*1y>8e2Eiv2{S= zQsJ)7<=cn)*LCcOt++WAJJ{cK1G2>iw^_Jd-rKXKZ)>b?Xq(m5`L3S9*vhV+q5i?; z0|WgXZ5;!#!4(+Zck~PnZSUXK-yGZAvAuW5#9NzUy}dX0#O`YDYUxS_T6;Q8xT|wb zZ^xz>8DBTp)3u?0uxCq8ABs37`j#_CZ&)`J8#s;DL|zS%SM+c1GvfDmtnV9)Z5tZw z*)$aELWb)G`?n8V+uN}PRf}yJvRb0n>J{tOx3|SMbwjfDYX@VoHO<%8)>Zax?cdhE zV`xidZ^zyJ+lMRxjn0tGy36XdHuv;xq4K(VHg8_h-#65;X{a@}dB`1J(Z9pm(lHcE zCvk;IlE!5Pl!cZ(Eyl%3$kKQ@F)nUvd$x3+B9w`6@p6dLSS5*i`nC;q^lgfjSuIr= zv{5k|%9kJ;AvPGbpir2&6RNhh#)dk2qcGL&L$T%_B(J`4 z^~z+h+PbT!YpC1mj+yFqbal0o3EF>qZ){r(3UEvoxT9y2X^hxT7)D(t(FQi5NmVct zuy(HK8?x@^Ma*@RX((xj3Xb^8s`_8mPPmGJ059ab{NYFTKt)LShLnPf;(t}vNX z!7(#5otmM^YFUI%Pz4{gHg$Ebg%Y;)^!IV3;LyRLLAw)Z&}vaMTeKFw4jy7gA!oD! zev!3puw!dwPu~tz4sJ~xS{nsaN8!Ps8Vstzpc)LS!Jrxpu*++yh9EVds{vgN&7;PQ z8D_9(sX>MsWT-)g8f2(Jh8kq3MTS~rs6~ca8WiYiL01d9TF}*kt`>B4psNF29q8&n zR|mSfIxE&^_3m6Z)U)Zmcdv#iwA3M69kSISTiqgbv_3QivM!8TO|4ebT5C&Rm$jp- zE2Elg+R+whOHp$&2o@-LAxd6|k{3e4g(zwvidu-G7DB>$6jKig>p@o!x_Z#ngRUNQ z_4Q*GD2AW~u0SR*t_S0WDyz9=wY6j0HcDQ?n-Xhv+wwKm8eUAJ4Y7l3vzdSsk1o}Y zR&1}=tu>4p zT3iId7D0=Pz;+SXE&|&{V7mxx7lG{}C?#42!e|vJqg5b{R)IEJ1>$HGsH0UNk5+*` zT7?YJD&}xH33HfkVETdS2&N~Pu3-9t=?v%%=q)URW*?>9M``#`T7HzKAEoU_Y5Y-I zf0X7Qh5fH+y}rG(W01%Q=4Nk*qC4Qi-0TNYc7!NV zcN%60)M9rx(9>6j4PF;pk!94FTPM7|uXFom<|21?pD6oJlpQF_9u#F4ilPsh!N$6Q zI;Sm_)pTI5*xtUPxoLU(n&oR(u5Megs-?BL{l?X;x3pik_Qv&VST4KQP}i!CZ7a5K z8|vTM^S)S9Q~ypx5nB82iVbc^58NVw^#fR7Xo?BkVhwa)IA7U(-OBc;1Jw@HI8cji z>q2W&?|ZRrZLqqqY0WSI%T(U0CaK{}^fGxR={0O&7+-T^>n+YgOxNWv%DRl}yc~F4 zJL>kty$?|WTL^VuqI_NwelH8YB6v*j3CTBK7^@ta@UZ0DBl(n0qECb85JOLwT=&`+ zv2&`DV0(D1&7NmG&wGC0dDYwOyV-ZUuhVzP_i*-4vUldhbB1#s$=RQCBB#y&9{+%U zr$6C;-v5ICCI2h_d^qq>;E}+g zz_WqFfg^zz11|@T1%45DEpRg64Tge6!5P8w;QU~1a7nN^*cxmL-X81G;gjL)NF*{X zQX5$lxi7LW@<`-hdC@DN|XIYvq-BqiXY!i*pd{0RJCk3AtJS3>) zWJ0#h*&Op}UbP3(KMb$Bqs&S(EEV85K;4g3pRvY4+7O*j6)6nWE_A)2Ip#($w* z(UXmcp1>`g>B~O*kNo<_I8z)Zqa5dq&IxB*Sy@g;Fkxr) zI_2Y*W2`W%!Md<-I#o)IK^j&bq``fH@sbwTu+~%4h$ZkU-!92O`=aa;)ZyYZdl_q- zbK9>n)c&C5#igJ?UQzj!OF2-{ z1#z5n=xNtdMgq5V2^Qrsv3{MK5=?+IX=`pS%*wVdUs=G7t;9`Fx>TG8!57nudft+OM>ICQ15a!6|}TpRx8= z$E1R~ztVDxgpcm8$|YPOsOKJ45?&*?LGX6Lje^~Ry@GpWB0A>Sv>Ep}uBl7vnT-JF z4rl7e8t+DTehn8J?x}UO#w#ix4Nnz)Z4}h;P1wBUpyLeX6%i96lo?C7AM$1A_yeZ1 z%eu)2Qd?_iCFwPvU>vAELEZstJIwGq)~Bq$x3<~e*0BpIhE6e#n*;-e7?T=-Gy&#k zpEUh4-j5vpmi{4k97$(&?4#zLu=5?SL^(R)jkh0be|7g`?ce7+?ztW@8$D4G(rqlS zXvMvblWvsUrRsd9@5vQQzKKGnada%cD!-dfY(i_8C}hm)Q7GMRZ-(@ zPi;4Mdulto$K^Z`T;`8zjV6ZEHSS#2dxJ0l~ zuvu`Gpvv?6iX!G|;I=c)3m}T0uh;sw3S;i&xChd5GTD{x-*x`h{A(m*o8Sh)+XV*% zwcJdo_Mr9xkuC~%rg?@{4v0pb=_NUrB>QQvD4Oq9@;F-5lyRKXb=Fw@+TBi>`m>%J zYr*dIl*%_Cat;aZ6x=1aNAOX>Cj}1)9u_o6kAlA5YZD1|2@_%7FI3WQ}s&lHrtz(5lDY9?OUvx~|vxOzkt{xsnJwR{t39 ze&j-}U)=M%d!1s|aL|E{gSuYP_xkxR_Jwe&Cgn9&Sm`pM_8(pUQ(xxHUfWSJYB_E_ zX!}mI-L!m_Q{~eBf1%eO%KvwTS}!+>nv>Dzx;{|3b^lrd4xEdWU#9lbdB{9XVyVJN zw@n@idj)-h*@8KOe!+mCM+Ox+r%nzsK8ep3)bG8`#|tc91lI8(N9eR(x-Zx7#T&!` zmk2fsZWJ66+$;E~;M0PK1z!^UgxS$@o~eQN z`d;?caZxR2l)e(5<4lxu*6>{abI(2d?6c23n--U)E-lW+6PE1kY};Yyw7d(fowr^QzJ5uM#Qpnk-gx677}h~lfZrYc0{1jSzO&GZ%DwnoC;d63 z%|!bp&JykcjhkOOJ=4>}Kjuu17a z|L|e$a2)Xr|1%WAFvp{>frjay#$wyekM!S08tIvC=uw99yAyetuKAIaplG)3@px^I zSIl^Pao#iKm3NlF8_w9wonZdB=RwaF&mEq7J%8l+Q-oP|kzM3CQldkB4)M2(AdISR zI-0k;_P~yZY6~ll=8Y~s(0*d^nc`BZyzBhHf%d@`guQ#p?kNvVN!<+w zPDDmZMhcIXr0z~cOkBy)lB0g!?JhW4aw2lnzq??ht)G_UguO&bTlkYb!FHpMt~ zmtvf{OQojnjJk}V=FU{|sQ;k?PucE*!m^Yo4;4@pPuW8Ssd7`Y*!G?w+w-yEAv;Bv z;*u&Yb!U5mrN^2!Rv)wXAFHsNHojJ2+xriG)6=x^&^J9PcHl=@JY|I_S?^M6Ny(R% zB`xyoyi=M<-6iEZmd3Ggcl7W}o~F?kU-GPlyg&5p?s)Bo9^OOZ-5roPDcL~4k*-6>a8DUVI#Iv$=rh^Tsd1gAQO>07!P&G%&$~}7z7ytlQ|TRpH{nG{0-aXKtef9XzNal;U4oPI}~PV@V8ul3S%2d+gayVgtV zsr6QRU5~o=54z5Dx2vv0-R-LDQ7ur{lPb@-o`dLl$4(LORl(O)V6hk7MC*DsB=Nd_ z)ZY)%Y?%;KmvN1PheTmJC9LU+WAV{+t%tCA+X25Xrsuh`?5z{Hr88qyw0u^fJ=5pA zIw#xf4@|qVI(L4-qy^r9FX+qiObJ&M70<4-vLZG9%dWbjWOC)4c~xaOrH+yl-RQJl z81Dz6%+WcP^)WC#R%}`K1OE9}jMoAM-r`J_+Ejk$(>8N3l6)ct66L zk87?R&=G%K=ExBRE#-U~{7iWW6IuQ)@eB$vzW07? z47jfOPsINX%B=xE>R|-5fB7G8yg|KC?r-9Q-ELqIa#0Vg-*+(xh9Luya!&)ldqMX( zU^hPWWj&t4K?%{1gOYpG=g_T~0Wr2Q*m=VAt$hmGh0eB)4q*Z=RZJM39@ zk3H93V6U|6@qPTe>~~n#+w1IQ_Hz3c`!;*2wZ)!fZMBo9ISErb$`_0S)4lac)b}_d zA!^ctBJB@~G9l~~IC!O{=sjaIrIF@rxi(tAyFXMh=`Ps(4%;x!>wtSc7;B!_c|_+2 zJ+GMP{4U~%a8BDYpyKMheXi$%)YpY@T0U&zjE;7AK2GbqL>RCK@XSEVQNCKf(r23A z-S63t_gvTgJW~bHc|RnAsJx9LAjb^4Rf4U8ZGsyGy9LKuH^hZ*kKkUx`vvz24hudk z__D~C)RQBY{LOkUG12ivbtC4H97nVszbn*se@z5pAE*8@$*1&V^>g?82+C0V ztCsh=6m-&6pjQ+V5-b|C70IgCtvc3v>o zJW@Gd z5W!v)d`a+S!DE6a1(lyZztZtX-y_xMQ};{x2L<$o~80PYS>dV6MLnP1XjAs0k6V%i} zYHGYpOEOwKFM3~2Nr7kbo?)5H%3bPP(^0QLP3{{j3S(4Ed_BkM6n=pORJ$j7l{19*Q@6v_8ibkA7|Io^ds z(0@YtKL-9A@LxbXfO3BYd<5y6@yud2;t!SKTRem-fP9~uVZQJ9BTU-A1@gCxKLNS! zg1@;0@BHyEP9Qi6RxlO}n@hix$d)T8W^Jmao8|o28J@zBtC^lJN zN8GVlPJRCc@zlpVVTi1Mdf0=F!vf^F8u$|+_teeEOa1;BaXeRP0Ka|Ue;D{PgntdX z?cj4C+J(<_Ix)81g7jlR*6)Y7XZ_Y9Kjr&2^hf#fP#;r&)Pd;FfpH={QpKi|O{LV1(ndH-j?UqP0_V%P>~{=FQ(ZwuLf4%!!h5tMTW z_<2h3o)l>LOpU|;mALmKp7~iXwhi0=lR(nX13%W2^mN}u8r%O}s1Muwi^#|JHZNfz zUC$h@#eFT}*W*W)e+>L*JliAvkC2!2tS_IR72uxr;=58C!Hemmz!#DJA@H~ca}(R| zPhdxEuj!D3?e{*QJIrTewBP%Iv{UjeL0;t_Uk9>o zJo8}P?m=2U;*Vlz8U#K7`{p}kly@2GQ4Sg25BXN3odbyH843C1fky%IKM4F3!mq$C z80NFZXA#HrYb3l9>E8mM5W;-7(mV@=T}?;$E5P00&vs}1@1BnUT>2Rc>$4AKvp$ry z7YH?3JhS;C@MG{^#D5j>yC4VkaXCEo5rC)sx1xQ>|1-0l{=)WSxCwHxe}54AdJ4$? z&3djYwyci;_keyK^srX?Kl=sG2@Zmu&p4Mt-zdUb3_O7N?*P?aK8}QX$Wf1U%Fc0V z7G(YmJj<^Ek58k%>|5kTd*kz9_Oo>u$N2oK73I<1hoS#(K%OaRPp0#p>5qesXJG#w z{9glI6?n70>FtG}m4$X8f1Z&o1wF^fzr`Z&7?AD3e!>1g-Bm)l3FJW$&Y4!+iie7Q z{M{Cy#n)bwp1(NJUEGaW^UD))3xD09B?V)gKZl+)^iF=iL8ddzKgRIhp>pE%N^V-V z#t~V%!=1T8#Yqm3T^&r~qIfQ#@_OY4H8Kv(azPx-<`l>FO?O%@$7?!{n=rT3!KTD( zKA5|4%2)I2I$wY9;!|i;xcKJL9E@WRU9AJja%JdBh9&u&f$c52GQW*J4Pn)_=+4Bm-Wo5uJS|>y zds@8c`m}iEr@~^0Fy~w>t63r=RL7$-BGNdP17q%Dq(%+nAt)v|@&-cK)3iuHO zwj%OT+{0zeLpyso=VuY0ccyg>#;>txe`R&rxA^|r|DT5R?0lnmA@woum#puDFJ+_C z=UW)clkbr;K9jxczR!IQkR=^M_ruE9PldpR1ogR6k%SurZx^Jp>GlgI<#eJ`a!a^8 z0~SmCLE$68(*R2Z^PBu^FWHzRm?ajAeehIw*_4k?y?l~Y^ilFKG-(H$?%Q*wA>mnE zg6;5A>lN!CF#AunEAanQ)Zzb{Xu_L7LHj$_Z8+DTZTDG2hQ+_7F*<^K)+0n0H2*?D zU?^xKCmkkPFz5dt@|m=Jom;(|?7^)gt3B)2#zs~jICP?B#xdOKp39=SPm!+ji&F!#8;*c}j;jc?O?qdZyHWVsFTOeV%X|6dVQTx>Kob$-JoG0n|k-OjM`H+6ktl!D1;d32Cr{6Paf7J5hV()td_X^%G zsNabmmhcOLFAM7Tr24#?`v^MyU5yF}YrQj}&JVCM<1!(~RJu$kktGOuIm?%0(=2Lsp zb<3FkEdp!7XNbXl&*LvHU!t%@61(mC3bf@jcd7n<(*9o2fRrd#Ceo026 zmZZJRkO<0aWYY|)Kgp@l%2(yqexv)2hnab9H{!_rTOnwfu<4Q6#AI=nM%z zDmW|+TqG437JOL4GFc3W!M2Kl7m2}Zy)z+|MEAM_R@{Y}Psh)fC0*YKd0xUwC&Ax) z*a->g>2#k*8}nt`c8lwMXgwS3lW-{o_rRZO2dpearPXCM<+XJS zb7s}gZkV&EV)5K}T(xBBHU4?a<~J@_UfFc@imGN5ZN~9E_I>tVd!N1E{(}8A`+N3r z`!{yjQ|_trw0Lgyy!}#HZ|dEwdr}wq09nDTlu{QyfJt-m#hrp#x}`3GQ=NXZEU4w1 zADni6U@aG|Zbb?TC!x77n|k@Q=`&_pR~DC)mZ5>?RLs3<-h8X_>MHy{6=>4>hDD3t zVJ*F8S>y7i70oNJy>3;@JFV6mR^PbhrnT$Z*5CZD4Yydg-G0Zr+c$P}Zo+?|v!&a5 z&wG2f_Vo|kIk;_T`;NPA#(;VfLQn_n@kw^?oYzwy@NdM5wo zrJ~Blah^3p7Zm|F?sbBUlkWB9`K}8bDN^gW^fkGrjR$p}mg*(5>bQAOVpxvuTNowN zfG(et>jaI^d{0RJCk3AtJS3>)WWsWx%LH6TI7^9B$4k~HlV@26h2dLPFIAw(aVBU+ zBt7NTx!_E6>2bmDKR&QD_}9xG`BS>TSmva?dd~R!k^dWSvHTZr`Lq?fgAQ14m3@!3 zKdFLz^mJ<5?8i41t-Q&*JQj4vMF5@W-1EBbr_OhN zcklaM#U<@T>wLbLu9GwIP&?A!r{uW>w{Ds*qg;}pADg)QmF`3J{7m(z<*bnc+~-rb zOZ>3lLBS^l^*rrm39F%KJu+c~RGxN0r)vrAcjZpBIa}iGSm(P!ei~3M^b{}Mo*7|8 zMhA~0P0xXFYn*MD&-IjL)y_rcE+;DCK=P_#MJ6Pi<6_<>`-~GvT@&UO9RN#xt2-5+ zyi4yx$w;}Oo+fhstK+rd0bVjJCX3N#R7@tM-B6F(u1Cb~@Ja^u6Jy({&JS72K+yfX zLJ!-0lCHmdk?DJ8_wShK@2zRa(RoMZ<@+jhV|~}6{bs5tPT$9ElyIA1x8N?peVQ)v z>+fOA7sWRUwh8h*J35zIP77;4DK^xpb7!5W&J_OBPN-_62?@zKIaA`al#JtZKRAMk!>58- zIPmcM`Qs51XZ|0F931&N=XOGeLBl!qNYVv@xgjerKaBGU69?Jvp+_K2&v)ABpGSb6 zY4l8^=Q~$J@Yf=6KRoa0c~6hqd+2c+ryq;o7eRbC{PiII5IpnJGcP^MV>-)YI`8Ru zPY;(s@E&^H$LX(!Mp-V`8LXx|o$q#aqLKLSUI!-3$8rBE;`mM;-_3N>lV3}Y^L{4Z z{cxv$0S(Ia>5&Zi!P>m5#&=Ko?${E9`99hS@Or_S0G#&9vONLYW9QfbE-#X8s0UYP ziaUu(p&SXcDcYSMza-_yuNvMfcMR=ANFC=2dXs@5#;E81I_~K^(byhNB*j(n z9jdqfs&dwfV5~RmrgE|^>10|+)=TF@P0)3%X4Ljmz74`~iD08(v!Jf$;-b)fg2RF; zXC~Bksg;H>wgtJB{Qqp|_ zcl7FZ-X($zi(E%oh#pqQNP*;&ZS>u zvfm(>q>m2_)6-ojzWAx#WWSgw-{0YQmY}Tay0Dh2LV&t5^KaZb^-l@UfSiwV7|+ZE z!E;?#o$oo6Q`-2iIzQ|D&vPTS6LK5x`a{o;wEnsdQT}6{7j=ogdIfh0?i1AWB$Yc8 z>Uu;`*CV=L)qD}*JATcbIS1J(OPM1QLg_|{wi5j2ME5EDCWwyml8@@2adeC~eO3w? zuYDyM%7RkYjpu83x(+wO;i7fd@I+DTukEGpz3{yoZke<^r90PkvcCVS_NwQ=dTyiV zo%*~%3sQS_|G#}Imp)&}^gd3x2&&H=8YSE+xJIx|aD(9Of*S?91oih&^xR1GlnJ#z zaBQX1excz^`7*^_w%} z3)Sz`{w{R?6Z1e7-#kZEXuIpUOnai9L{0ADCP|-Z|LQ(RP)6GCw48^ffJX)Q3mz1F zQt&0g*F+&F1+|~+dv#imOsM^4zNmAC@YQ%l&9CEukpIr15ha$vQ_Ny`xP-X^8RrXm zJU(Bp&zIx8*5t*f8@Y5q#OGSh4>KpO#(?^380XiJ=ermrPD({5WjoLAm_CC0nehBZ zlWXgZPy*kD=WjPKeku%t^o--Ts0{P_<=a5_All;%@ZXB`$HAZ9x2{D#hJS%{EmzCa z{4AGzCd&k*{6EFY!4X*=`BVO4&{Iz4bON3( z!Aso?@CDMm=qW}4uK52cfCb5GG2$VO8D~i0q>(Cu_of(%CgZF)!{c-8e`ZXl0B{o> zr?kVm`{h{YdlMbcpz>3kR7a1yM1Rzv3bYqzZ6S(x^B^8 zGocI*$@5!XUno)sbc)L76%+gWccGd@Ri~XZQZkfeEaeF_CrUCiC?#@EVKVVo{zH5 diff --git a/technology/freepdk45/lib/sram/output_latch/layout/layout.oa- b/technology/freepdk45/lib/sram/output_latch/layout/layout.oa- deleted file mode 100755 index 6b39e8202d1d7c0a95f878e92e84cfbc47f5d2e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34996 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 RKfYW)qzb2|V4 diff --git a/technology/freepdk45/lib/sram/output_latch/layout/master.tag b/technology/freepdk45/lib/sram/output_latch/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/output_latch/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/precharge/layout/layout.oa b/technology/freepdk45/lib/sram/precharge/layout/layout.oa deleted file mode 100755 index 8e1768fce403821e7d46a7e25f76397332db93a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23228 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 YK08}7@_y&l{XV~-!(>pe{om^U2TUiP$^ZZW diff --git a/technology/freepdk45/lib/sram/precharge/layout/master.tag b/technology/freepdk45/lib/sram/precharge/layout/master.tag deleted file mode 100755 index 431d8f04..00000000 --- a/technology/freepdk45/lib/sram/precharge/layout/master.tag +++ /dev/null @@ -1,2 +0,0 @@ --- Master.tag File, Rev:1.0 -layout.oa diff --git a/technology/freepdk45/lib/sram/ptap/layout/layout.oa b/technology/freepdk45/lib/sram/ptap/layout/layout.oa deleted file mode 100755 index f55a28cd8776bdffed82901a60c7f841fcbdd9c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13668 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 diff --git a/technology/freepdk45/lib/sram/sense_amp/layout/layout.oa b/technology/freepdk45/lib/sram/sense_amp/layout/layout.oa deleted file mode 100755 index 33c3ce0ee965b9fc085945fefb2dc3f6f751a066..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48100 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 Ps(s*XD%}1JOCtXt-djFC diff --git a/technology/freepdk45/lib/sram/sense_amp/layout/layout.oa- b/technology/freepdk45/lib/sram/sense_amp/layout/layout.oa- deleted file mode 100755 index b69654d67809f0d8c6e3779f31d254828cd9ce10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46460 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