From 27d05e9b36a5453b6cddb3b5a03c73abd29f17d7 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 22 Feb 2019 14:51:21 -0800 Subject: [PATCH 01/37] 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 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 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 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 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 zcmeHPe{5XUm3}jxvFC^FIKc@?NP-O}F(DXxW*kCr!HFG+!AVWx(i9;%W6#7MI`O#U zvE!_$n02!%WvR-hVN2UcZ6hktia$`5N(i;pD2i0tWu?f9w9zW9*lr{cTP>8 zd%pX=Gc$Sd)QN3&f%=;JzIV<&_uPBWJ@@ClFu3bhmt_rD8ji}#T8Y9mVI6Tj(L?kS z*AUBzw-GCdHxqrt`=~fTI!LS}RuR3Fs~}bqtBBRaWyBCMOx#F4jl_%=L|WUGBt4>X z#3zX}497^XX2XvWpJc->-(U+|ph0ps+4M{GHV&~uuijtk_DD5uw;QH3w$yy5NZnDInvzR zQkP2CMf+3Z@q9BqvV+@Xt+zsDt@npEUZ*X8B($dlw z4%Nw9U!h zlf*`ew@chC@eYYwB;F~pNg|G9%@Q$aLK4FgBNA~$+bZ#Hi5Q0%d)p=6E3r-DrzGOo zcE7}Si900jl-MD$Q{pa(4@i7a;%t5TlYh$gmxnO6#;#Vu!H=a#JTF~v9nnXa99cOGx()(U?BAn z@@)7vg67wG%}qU=_p(Q9!R(iaT8^E&@KilKCgmTnJ?~aaUdJ~7^`!mtQBjgq6SpSZ( zOlp60Jl^qWftyan_DHsPdeoBF9m&Mt@ZtDyX4H!He>Rbh?}{Zdsq~JKkyNxdIucKJ z$gDV?NN2`Uqp8mLq3BpLWBArUJehnn5kJxy>x$)x?nJ+#WBonJ=s+BbA514=2U6+8 zU}9K`xPtw;+1Us7XW}DQ$r@%?i?z37|7ZGo;{!udR^J2Zc)X|c;Ye%K@Zr>G-*{%Q zDH%PQ8p~J&WtYfi9kG(up~UbY%n?f*I@FOG&O`??-SI;iC*6@6w+5q`c(I6shDec? z4rzWoeKp6SiDE^%Y>q?QzQo|r6_qj!hb~*FNL5~_D^$V;O(PD|DQ(>)4$_etLnB75 zRP-~$>G)_Sofyc(W70hjrc+}h4-r zC5A^c(cyvktyWjF)fFkFgl58!@rjHz5bNJ3jL}4D7()$X z4`WL$WX6DT{t_NKG9bRC)i;DS(J`E{j^e?QFkn1}4pBl+-gF(tng!D8YAt0v6fGv| z7|U0nz_A|O+gWcVC-!F&1D`*-SK9xWH8>oz#$z$rDkZgyZ>vDLNB>bl43YLR|#X^|L`7?v23*eY?W#JeSmSc}MoL@p$9 zA(0D-Tu9_XA{P?5kjTj?tScmPVUY`qTv+77A{Q39u*ii)E-Z3kkqe7lMC2kO7ZJHg z*cweo4>!eRcGXV8yWvW*sECM)$ku{b-{Fa3Ng*X&)JH^pMAWy6`c_fjD(YLM8m*$E zRdlpUHCnM*m7weUd7Cu*stS46HHh04vsW*cR{`g_P4!%$zKg^+iI<3aZn(&Tv>v6f zm-${KsvOCyAS)c~IT7;fr)x2TQJsT*+}34RxBD@7(mm`s<7xIzdY|#0_P*w=EPtkA zgD>KH)_2Nx*7v&aobQ5fwLj#a^#7y(r2mxvhyEY=U-O^w|I$C@|5yKS{O|au{qOtT zfk0qIU~S-*z~(?GusyId@K9i1;ITk|;E6yw@Hc_Uz%zm4fo}y)1%4PfANY0P?ZEE> zmjjK#ZNc{7?qE;wK=5F2C^!tv!1`z0bKUp!g3SK zh^k1>?d9YzBYKEh{yEm;Jn;hYBJsCG%~#9(4a5j>8?l!ST*tl2n?!AQDb)S5?%kAj zqUP80{Od5PgtIo}?MreAK4c4EjzUDg&;@d45A1fi%c>2>jLomR&$+!Kf%}DFyAy3W zm$%YmU)~tnZQUe6gt)IZ%7wt47|vGE4VSFJ4MdiILTiA(;LgGb0ywbr+^6HB)IF9q z!a2V5ehp(40e2w?dOp(uZps$Eo(GJOJnSahcPz@A57Nf@tU7O~{uh}7J7ef+I)||~ zFJB*JXug-2|7GGU#M4AArxfaVrTA5V`fD3>J%AAIY0$^2SL^ft)eh}f)NQtacET4B zwH>hWj9f0k=Gu-E>;RRYt3T$N=XDEcwPb7RR!uRWR8l=JoSVuFhz^ z{s)?mw!nwgW=>SC>gPzOOjcfVc-MAn8n9lX)^7_P0zBO3BORfXy>ixI_<|agR59i99ydvb#)EVofXS=+7&YSgqk3NAkn8z#O z{`=)2?-C5pv!B6wUl!AQYB-M> zo~(Oc^-XV|jW=C0 z<(pi7rvCWyY1g!Ca@FLjVi4;(s*bI6O-4_wbQQl_R*d}x^BcW*$ot=l4>k*;9}!LWWG(ZDhy5lA64ViF z%6{S=#C)^CepN@){frLylIK`;Adjujx&G?0W)CNN>HC%p zD-&3Z#p>qIh}sOAfztMO2OxA`rr*2d1wLXg+O8xUguN8%uIXmD6T!(2V*Cvl2$hx^(`sw-UnHkXVSacRQy+LSobv-a^r||XM;r!ka->4zz?+rFJ|EHF(^SM*ge5V_2 zZyOb$-e{ASqk6S`l`pk!IDap4-XrO~A@uZRiTboE$=c5`jewT4-HdEtRqHDvraK9BStFEZTQOS(i+M=L5J$v#>!pH?G z%Uxw&cZJ6n#IftDyA&z!DMU%jB7WHPX({BN{!{jNvX|?Z1KahMHzYpQAUfcpbT@e` z1a;j4$3A13Gba-lIu9*$zA3KTV!Z2kdV>bR_axZ+s4dh^9FB!`N(GouYJS!Ifv)$u zzE?4yepgaMdO5L{s1?!qM(cTw6+2IKes^+-{L4fww~l)Cz8>cYgvW^^#AC$WG*Bfk z7|szd5%u3ms~t<>wa!ze<}c-+wX2)|UPWn5*Yex6e<=Ug0&~rWfuOtkEpJ&xxu+68 zubO#I=RRJ&EtuyH2IW7W{O88!9M`Pxdgrr`nmpS2QLEGS*5{Mb1`L1rx`2ers=3xa zTdwfL{u{rU>-@XWb=x(;TPyLIW20P3P4uTo>v^KkVZypUEZHNj-n)x~K|t zebeu9w47!t)b&cglWZfulQ=6zVz^q5Txk(!iQezXwu!kd(*o0 zYc||mSAWZ`4Y%FixMlOkP3E6`=H8XT*)M+k1&O~9NByD{_kG#7;Sys|en0{plL$I3 zvbZ*G7Cy%4PXt3EJIM3K$@lEL;g>|$4@5R4`c6we>>qK5d|nXw@i{*7Lk{`BBfmG} zyt0|;_-z>JKVmtM$8W=shrXPowTr&@Waj`m{Vf^txTA*Lj|EXaWKll&DE|XNwD*fr z9@_gA;i0{_%SL-a$D|CX@l(9jDS_3Zgw*HhaBY5KFA~g2W$`WAssZ*LF0SYnCOt~ z_IWjHnLnAMi%=<>XJvizO_r0VX(dqfYxua_yJ>wre333RLELyzf|&k_fIgTlX!+d~ zz@Y-0ew7zjGC}pJ{9N~LszCPzs=tSddx-~#j}v3WB=Je&bHo$Gd_7n{C$0McMg3i* z)*-*x_h_gdtBCs@4AmTqbRyYS&iRcF5>Q|0QTv0306zLh3t6mv?PBj|QN_gw+J5a{ zy@$o`S@`BbZLMZkfU59Ta{Qr{Kp??76R`m>+;^!FgGR}CvtOI%G{M{FQA6WfX1 z#2#WV@c>cpmk*MT5uar}o+GNAN}-Miy>r!Zp>(NyrTF^){m^vn58J9A-V^0$S;lY@| zy-fL902S)^)AID+XS~7mbHww+i^R8y`a6%0`gNSvk=F64#g@WSla3^pH5fbijDNt!Jf`(a*UY{xtd zNU37cbT^HnE=uW&b|W>VsWz)dRobS?cGaz(BGgbdT_H+U{-6@7B5m5HN`%r1Rq4|6 zoBR7+KVSRu{6P|u^_aQ8IrDku%$YMY_v6vMere3}Iz73g7P!^CMLM^bxP+J>77}kF z77=eJ786kyT+#>cAyzzt^h{zYaTYPge1*hfVkvPJaW-)daX#@@Vl}aWxPrKncn907 zA!fu7Y4yK{bieWupC?|Wdy#Yn1@t2E1O-r5?q|4C;bZg7KGszF_))cwUagN!_xZSO z4e4ed`&)fH`KXU|+kM>i>pp(UA$_Tv>CgCh<^c0O=i{D?k0;5W`n%1K_B7r?jiZp+ zyc5hIIh7UoDJu6N1Dh!Kk0_Tc<10%1{7pp3??cwp#C$bWtP?C>Lxnj>`Xuwe8Tae^ zJ<`XCNuu}?|I;`vfoTa$OJG_8(-N4Lz_bLuSP3-LHr&%+S65%zH&EHJw{I{NG?%a) z*D`O3*U(T~*H~NE(8Ltc_ml2P_Z~X3dtiU6XGPua?#|A}`ug1~8Y(TcyRo*uwmzpq zZ_xH!%l`M}M-cb(*NfbavCYCA=EM8$*~nyWjt^cLaV~KlaXyjTS#JU9g+y*|J?-P; z-1ij_6GZLri%4sqpCnyEoI#vP%y$kbW4^h>c|@HL%1JLEE+j4@RuFF@-b}oOxR|(v z_${K&9hIc3h_?}O+Je)$HCOH#QTY>i4PFh5FaF>PY7b$jV(6z*VvNdT!<|@&I{Pub_!yjv zW!K`Yhjwr1u%B`0H;HNoRp&bKq4TutvFxtSo@qlCbhPwDX;8bvex@-rL%;^YPv7sm}e@*6s}hsnoXCM;lkx_8#avxO*_u zUE9-fwC_;HBPcqen0MIg@%E*AyCIIQ^uB#9eZ85E&dlc2zD$^I=^OOAJ2I)b$nbs7feyjW0=zb84X8voTBCw%t(;-hou6qo>~V`%os; znzrPvk8NEakPY79bXR7-w?E}1+R@du8I@Q!4)vrCrcB1Zo*NFPJKcDvj%2*fuDv@f z;$XV37gG&$4|7Wra&y2be}snicbaaAeMfjlT6#0yQCv6^I-SN)AtLGtMAzb^IZS$O zE2D&mrcFdGhXMwMW4w)9TdTaDBRezc&S#Hqwf;Zlb@z68gI!&=h3Zi^*B{9YpbB3f zEdQ4FEneFyZ)^M7ZQeFq+U|>LKHzaA$6gz@an8xaohJ>uT5O*7HgdgJhVZ#Y^;}?m z7m1gM9};!$X=X#>BMK{74*N|w<@2f0SL~a#cM8^#Sd??+vseS--j&$q_*3zocyHpp zL|x&r!j}u*Dg0?+Y0=BY-%2(nUrC-yo=%=go=sjzR+Kc994q+&w(|i$A8`MJJvsLD z`Q#`$xWfYS`}-s>PAnj*BApwH7(a)YAgcYdTi~0$*v|eEHq@ z+4vI){CQrlKS+MQSYc_xzggkvxOa;=$F!qeF{UCQ1vUu0Fq4u4~3n#s#jQq$+Tsh5xlI&hk z{~JufeFU_nbWUS+FUYS5m3x!r-y*(Ee21uhM4{#@vyTGsuRh4$A`^@w##r@=pRcMP zI`@IMu^eOz54oxzkTveD0M(BZ9017Wdf0i{;X(D=YIpN;Grpg?~F4t*XqEO>0Jrf;;QT0gQRW6(_9RE2LV-MxjFGcaY@s(e} zKRno?sIwM?bMpYZRfG{?F6*wNameE3UAa4NU&gF19^oJz#LvxFn@5`v4cdqAbALe@ zi}4-in0r=8`AMH;$E4?x``3`3PIMk>zDd6|4>dn0yUsYMSxY ze$_GcL-SttMRr2tqVv1f#Y$FyIRIDVgL|HcU>)g3ViR!7)x`)@s`(lT=~Uc*zWqZe|@i5_u*lO*vG5| z;j)Ok>b;g&ZGj)g|GnUks1rzodKSuA*qnIqfAHMpECaji$fT32%~&BfA*Jtdq1x)L&Z|&k_c$J*0=rW7<7q@yPSv zw!na{u(F^(u`=d-xyS6zZ$V7Q?Fq*f6pkwEKa6or_&Ng-Eb!j9>z{f*^H#?2t_$MI zW99f)?&g&7w8J7xkwDk5?%b?nji&}*ZFE(xKDGPu>apT3mz_%IO8~ddG&DIa9b|qN`yi|AH(%sE^~dXI#*@)Y<=0f zakfElRY2r;hZ6G#ssWF#Ww{sP)z< zILdLo39qwLJqM}3HkF)XGalL1-owcb86dx0r}s+B7^(M7bMxFtVfCxWw-s*B1m4vz zMhE>?e(jr-p!1Iwfbh6#zZ4!b^l2Bi9TlhXGGmE z`kb`**Ey`z>?T~$PoEq`YoDTV*11Ug2Biz5>Im$7#0EKZ$Dol7D<+G2Pf0|c1k4)7rk{vP^ zjGd-Wa33h&`}BA}6;Agfd}{Jni3?*hmZOf1m2}NG^;hq^f^W=iwWE5~zVb)e#qj$e zQ@!6VMr1E#x5RHV8EhqPB5o$O6Za7J6Z6^IA?B0aeTnod#N$NSQc!`MDE%-k zd#L+ZqJ`o7Q>9xupsMGZN-=>%R4ZMvJ^P5~nK@}$Rw*1ZI-ei$d{gf|SUKmg9y!^u z@h|E=^;GSNWJC1`>zg>6~BH6P#z-uSDT#j)eNH?~xe&wFQi^Y|L2mvvgKsMp1D=;VsSa7b~5SC`lF<6&B3I=w$!L8i0JU2H;F@a8ePR~c9{3$Do^0i~M_pI?zZS|vrR5uG< z+rbXGXGUT2&xrF6JTI+t4eHw54Y1S7;l@}jtG=R+is{(oL;mr7qUlbM;7bRxnQI@lZ{!OLe z*3y*Y;xlL3zoh+(<8{q(*O$+}-RSA)>y6H1KK{NbeZcfDHC;C_H+xo(U8~I_o+i>l z(GKe#HVm!+fc8Z13&T<3NRaOz?6KJ8O2TXNvOF84jeuyxZp zniqXeqvT1WiExC2499Y6U-uXA{u|a7<=48P`jkIxmjh)~MphuZEPJi@n!@kB>AWL8 z%Ghu@v4XgmsQZpOf9O4y3NpBusB^{@KFB+7dJVUYhyF_U5kUUuJp27(!FOz;g_4WD z$0%q2FS6Y8%y5>p@{_z_;5)_%JU;Q_9>cdSc59;`o+v0x6crX1B|G+(w{*64txs*( zx3PQE{<-rCX3d{nK4(GM!nup)RrGD`zjZ}rW7W#rRxQ1+x@p$z*qpL>`k4i7&py)g z=z-0>Tb>(O_}Ia1neB&m4DLMKe#Gy67DKxw_E>Ct?8#U<_I&J>*dNCJJob073$g!- z{W3N$zBE49eotk--G5(TzoW9qo*mp|--g~|-<>V7-%Y8{Q`WDc!F~;;(S8YKmAzrn zWWRv2+J5~6&+Pu8;B3J^7x>pG9-`v?nq4P`?eOrSC_d8Jdoa1Kq@*N~*^a;G_G8AU(@}oAMhT0$ZKBfwY09^uyIq{Bad$0;yt!)`;MLMk3aG4T~9vs zYfoD{e`)@Vd9;PGDYw5elRe}=+IvIS`nz`7c2{Fmd3;Ma&pfWG$1gF=M>}~N9gjT2 z4(o$kPdPs)yf3GH3){QN?#IQM?1A1lQ2azOWPXFkl08Zti5PEejhu=qn$MX!^F1Y6<;PH#_;8Fehs^n2^Jmhnb1w584E`QEe zUM#q1kAVxlBHJ}2?JnyK+xC^(S8d2E`G3{@J1vDWp2l*p{qVcYYrJRt%OCeYIOE-i z|KRuGe*Cas?$dGO*S);o-{`CQ=i`sYEtipU%vb-99-eIdWAmr>qQ-GJUF`~$;^TPB zzaQdXwT!p?yVt4wyBwb{zx|Q(XQJ)DADVyTFAv-ERok5kv3m_{w={U{|73fxKiFQr zp8tF+iZnmud3t`b#PVTZk#GIfIZ5y9$S{ZB=Lx?Lr}yNd-s1_s_o(j(#E{Ni;&;5y zdp_d=^EpxHHa-8*_mkDM>$<8+4P%_&7~EXqPez)3Rq>tWWk%`OdQ3^#atZx@~$~H8RV(v){7- zJlqEJm_P8iSNl(XUL*zX2Nr^tJ7xiRoU_p#cqe&H}miM)A1_ z{cv-Y`Z3Y_7L&CTxjalHEZx$)z-?CP1M1onM>}c@YnG8&mdWO%<%W^$=;eOKA%n2L=DeGJPsA6T zu8_0FU3MAzG@18BWQW50YYnpIo!U9c!GDeTI`IwSTg0CbKOmkbUL;;3svl7po;O-Y z6fabHwJ%wH*$DGM6ESKXLYMhF30ZxcrEj$?DQg}siwpkW1>B=ieH0gxMmUVSvn9+h z(S1+AY{-Cz^&#JRYpUy*#!sD7f5n#UrM?r@_fz^#O64YtYDeYOzG$K1!}-PkX=cFp zt+4INFP%_1*I~+AQp;d)cl2L4*T-ShIk)EqYjEPt2#kLE=p577Uk~S 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 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
    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 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 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 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 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 02/37] 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 03/37] 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 50d3b4cb8d304e86c579345b5c84cf964ddc8792 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Tue, 19 Mar 2019 15:03:57 -0700 Subject: [PATCH 04/37] 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 97777475b4fb5a40ec12d5fd0a2398d5f61c9fc8 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Thu, 28 Mar 2019 17:16:23 -0700 Subject: [PATCH 05/37] Added additions to account for custom delay chains. --- compiler/characterizer/model_check.py | 99 ++++++++++++++++++++------- compiler/pgates/pdriver.py | 2 +- 2 files changed, 77 insertions(+), 24 deletions(-) diff --git a/compiler/characterizer/model_check.py b/compiler/characterizer/model_check.py index f9c8a296..ff8bbdfa 100644 --- a/compiler/characterizer/model_check.py +++ b/compiler/characterizer/model_check.py @@ -18,16 +18,18 @@ class model_check(delay): """ - def __init__(self, sram, spfile, corner): + def __init__(self, sram, spfile, corner, custom_delaychain=False): delay.__init__(self,sram,spfile,corner) self.period = tech.spice["feasible_period"] self.create_data_names() + self.custom_delaychain=custom_delaychain def create_data_names(self): 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" + self.power_name = "total_power" def create_measurement_names(self): """Create measurement names. The names themselves currently define the type of measurement""" @@ -35,22 +37,32 @@ class model_check(delay): wl_en_driver_delay_names = ["delay_wl_en_dvr_{}".format(stage) for stage in range(1,self.get_num_wl_en_driver_stages())] wl_driver_delay_names = ["delay_wl_dvr_{}".format(stage) for stage in range(1,self.get_num_wl_driver_stages())] sen_driver_delay_names = ["delay_sen_dvr_{}".format(stage) for stage in range(1,self.get_num_sen_driver_stages())] - dc_delay_names = ["delay_delay_chain_stage_{}".format(stage) for stage in range(1,self.get_num_delay_stages()+1)] + if self.custom_delaychain: + dc_delay_names = ['delay_dc_out_final'] + else: + dc_delay_names = ["delay_delay_chain_stage_{}".format(stage) for stage in range(1,self.get_num_delay_stages()+1)] self.wl_delay_meas_names = wl_en_driver_delay_names+["delay_wl_en", "delay_wl_bar"]+wl_driver_delay_names+["delay_wl"] self.rbl_delay_meas_names = ["delay_gated_clk_nand", "delay_delay_chain_in"]+dc_delay_names self.sae_delay_meas_names = ["delay_pre_sen"]+sen_driver_delay_names+["delay_sen"] + # if self.custom_delaychain: + # self.delay_chain_indices = (len(self.rbl_delay_meas_names), len(self.rbl_delay_meas_names)+1) + # else: self.delay_chain_indices = (len(self.rbl_delay_meas_names)-len(dc_delay_names), len(self.rbl_delay_meas_names)) #Create slew measurement names wl_en_driver_slew_names = ["slew_wl_en_dvr_{}".format(stage) for stage in range(1,self.get_num_wl_en_driver_stages())] wl_driver_slew_names = ["slew_wl_dvr_{}".format(stage) for stage in range(1,self.get_num_wl_driver_stages())] sen_driver_slew_names = ["slew_sen_dvr_{}".format(stage) for stage in range(1,self.get_num_sen_driver_stages())] - dc_slew_names = ["slew_delay_chain_stage_{}".format(stage) for stage in range(1,self.get_num_delay_stages()+1)] + if self.custom_delaychain: + dc_slew_names = ['slew_dc_out_final'] + else: + dc_slew_names = ["slew_delay_chain_stage_{}".format(stage) for stage in range(1,self.get_num_delay_stages()+1)] self.wl_slew_meas_names = ["slew_wl_gated_clk_bar"]+wl_en_driver_slew_names+["slew_wl_en", "slew_wl_bar"]+wl_driver_slew_names+["slew_wl"] 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"] + self.power_meas_names = ['read0_power'] def create_signal_names(self): """Creates list of the signal names used in the spice file along the wl and sen paths. @@ -62,7 +74,10 @@ class model_check(delay): wl_en_driver_signals = ["Xsram.Xcontrol0.Xbuf_wl_en.Zb{}_int".format(stage) for stage in range(1,self.get_num_wl_en_driver_stages())] wl_driver_signals = ["Xsram.Xbank0.Xwordline_driver0.Xwl_driver_inv{}.Zb{}_int".format(self.wordline_row, stage) for stage in range(1,self.get_num_wl_driver_stages())] sen_driver_signals = ["Xsram.Xcontrol0.Xbuf_s_en.Zb{}_int".format(stage) for stage in range(1,self.get_num_sen_driver_stages())] - delay_chain_signal_names = ["Xsram.Xcontrol0.Xreplica_bitline.Xdelay_chain.dout_{}".format(stage) for stage in range(1,self.get_num_delay_stages())] + if self.custom_delaychain: + delay_chain_signal_names = [] + else: + delay_chain_signal_names = ["Xsram.Xcontrol0.Xreplica_bitline.Xdelay_chain.dout_{}".format(stage) for stage in range(1,self.get_num_delay_stages())] self.wl_signal_names = ["Xsram.Xcontrol0.gated_clk_bar"]+\ wl_en_driver_signals+\ @@ -73,6 +88,8 @@ class model_check(delay): self.rbl_en_signal_names = pre_delay_chain_names+\ delay_chain_signal_names+\ ["Xsram.Xcontrol0.Xreplica_bitline.delayed_en"] + + self.sae_signal_names = ["Xsram.Xcontrol0.Xreplica_bitline.bl0_0", "Xsram.Xcontrol0.pre_s_en"]+\ sen_driver_signals+\ ["Xsram.s_en0"] @@ -87,7 +104,13 @@ class model_check(delay): 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 + self.create_power_meas_objs() + self.all_measures = self.wl_meas_objs+self.sae_meas_objs+self.bl_meas_objs+self.power_meas_objs + + def create_power_meas_objs(self): + """Create power measurement object. Only one.""" + self.power_meas_objs = [] + self.power_meas_objs.append(power_measure(self.power_meas_names[0], "FALL", measure_scale=1e3)) def create_wordline_meas_objs(self): """Create the measurements to measure the wordline path from the gated_clk_bar signal""" @@ -144,6 +167,13 @@ class model_check(delay): temp_dir = trig_dir trig_dir = targ_dir targ_dir = temp_dir + if self.custom_delaychain: #Hack for custom delay chains + self.sae_meas_objs[-2] = delay_measure(self.rbl_delay_meas_names[-1], + self.rbl_en_signal_names[-2], + self.rbl_en_signal_names[-1], + "RISE", + "RISE", + measure_scale=1e9) self.sae_meas_objs.append(slew_measure(self.rbl_slew_meas_names[-1], self.rbl_en_signal_names[-1], trig_dir, @@ -152,7 +182,6 @@ class model_check(delay): #Add measurements from rbl_out to sae. Trigger directions do not invert from previous stage due to RBL. trig_dir = "FALL" targ_dir = "RISE" - #Add measurements from gated_clk_bar to RBL for i in range(1, len(self.sae_signal_names)): self.sae_meas_objs.append(delay_measure(self.sae_delay_meas_names[i-1], self.sae_signal_names[i-1], @@ -190,10 +219,22 @@ class model_check(delay): or port to port (time delays)""" #Return value is intended to match the delay measure format: trig_td, targ_td, vdd, port #Assuming only read 0 for now - if not (type(measure_obj) is delay_measure or type(measure_obj) is slew_measure): + debug.info(3,"Power measurement={}".format(measure_obj)) + if (type(measure_obj) is delay_measure or type(measure_obj) is slew_measure): + meas_cycle_delay = self.cycle_times[self.measure_cycles[port]["read0"]] + self.period/2 + return (meas_cycle_delay, meas_cycle_delay, self.vdd_voltage, port) + elif type(measure_obj) is power_measure: + return self.get_power_measure_variants(port, measure_obj, "read") + else: debug.error("Measurement not recognized by the model checker.",1) - meas_cycle_delay = self.cycle_times[self.measure_cycles[port]["read0"]] + self.period/2 - return (meas_cycle_delay, meas_cycle_delay, self.vdd_voltage, port) + + def get_power_measure_variants(self, port, power_obj, operation): + """Get the measurement values that can either vary port to port (time delays)""" + #Return value is intended to match the power measure format: t_initial, t_final, port + t_initial = self.cycle_times[self.measure_cycles[port]["read0"]] + t_final = self.cycle_times[self.measure_cycles[port]["read0"]+1] + + return (t_initial, t_final, port) def write_measures_read_port(self, port): """ @@ -207,7 +248,8 @@ class model_check(delay): def get_measurement_values(self, meas_objs, port): """Gets the delays and slews from a specified port from the spice output file and returns them as lists.""" delay_meas_list = [] - slew_meas_list = [] + slew_meas_list = [] + power_meas_list=[] for measure in meas_objs: measure_value = measure.retrieve_measure(port=port) if type(measure_value) != float: @@ -216,9 +258,11 @@ class model_check(delay): delay_meas_list.append(measure_value) elif type(measure)is slew_measure: slew_meas_list.append(measure_value) + elif type(measure)is power_measure: + power_meas_list.append(measure_value) else: debug.error("Measurement object not recognized.",1) - return delay_meas_list, slew_meas_list + return delay_meas_list, slew_meas_list,power_meas_list def run_delay_simulation(self): """ @@ -236,6 +280,7 @@ class model_check(delay): 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] + power_result = [[] for i in self.all_ports] # Checking from not data_value to data_value self.write_delay_stimulus() @@ -244,10 +289,11 @@ class model_check(delay): #Retrieve the results from the output file for port in self.targ_read_ports: #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) - 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) + 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) + bl_delay_result[port], bl_slew_result[port],_ = self.get_measurement_values(self.bl_meas_objs, port) + _,__,power_result[port] = self.get_measurement_values(self.power_meas_objs, port) + return (True,wl_delay_result, sae_delay_result, wl_slew_result, sae_slew_result, bl_delay_result, bl_slew_result, power_result) def get_model_delays(self, port): """Get model delays based on port. Currently assumes single RW port.""" @@ -330,25 +376,28 @@ 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, bl_delays, bl_slews)=self.run_delay_simulation() + (success, wl_delays, sae_delays, wl_slews, sae_slews, bl_delays, bl_slews, powers)=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) debug.info(1,"Measured Wordline delays (ns):\n\t {}".format(wl_delays[read_port])) - debug.info(1,"Wordline model delays:\n\t {}".format(wl_model_delays)) debug.info(1,"Measured Wordline slews:\n\t {}".format(wl_slews[read_port])) 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 data_dict[self.sae_meas_name] = sae_delays[read_port] - 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] + data_dict[self.power_name] = powers[read_port] + + if not OPTS.use_tech_delay_chain_size: #Model is not used in this case + wl_model_delays, sae_model_delays = self.get_model_delays(read_port) + debug.info(1,"Wordline model delays:\n\t {}".format(wl_model_delays)) + debug.info(1,"SAE model delays:\n\t {}".format(sae_model_delays)) + data_dict[self.wl_model_name] = wl_model_delays + data_dict[self.sae_model_name] = sae_model_delays #Some evaluations of the model and measured values # debug.info(1, "Comparing wordline measurements and model.") @@ -363,13 +412,17 @@ class model_check(delay): name_dict = {} #Signal names are more descriptive than the measurement names, first value trimmed to match size of measurements names. name_dict[self.wl_meas_name] = self.wl_signal_names[1:] - name_dict[self.wl_model_name] = name_dict["wl_measures"] #model uses same names as measured. name_dict[self.sae_meas_name] = self.rbl_en_signal_names[1:]+self.sae_signal_names[1:] - 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.power_name] = self.power_meas_names #name_dict[self.wl_slew_name] = self.wl_slew_meas_names + + if not OPTS.use_tech_delay_chain_size: + name_dict[self.wl_model_name] = name_dict["wl_measures"] #model uses same names as measured. + name_dict[self.sae_model_name] = name_dict["sae_measures"] + return name_dict diff --git a/compiler/pgates/pdriver.py b/compiler/pgates/pdriver.py index daf4d334..5b4a6c9a 100644 --- a/compiler/pgates/pdriver.py +++ b/compiler/pgates/pdriver.py @@ -11,7 +11,7 @@ class pdriver(pgate.pgate): """ This instantiates an even or odd number of inverters sized for driving a load. """ - def __init__(self, name, neg_polarity=False, fanout=0, size_list=None, height=None): + def __init__(self, name, neg_polarity=False, fanout=1, size_list=None, height=None): self.stage_effort = 3 self.height = height From f6eefc1728042747ee658db591c9195a7af468f7 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Tue, 2 Apr 2019 01:09:31 -0700 Subject: [PATCH 06/37] Added updated analytical characterization with combined models --- compiler/bitcells/bitcell.py | 28 ++++--- compiler/characterizer/logical_effort.py | 33 +++++--- compiler/modules/bank.py | 74 +++++++++++------ compiler/modules/bitcell_array.py | 42 ++++++---- compiler/modules/control_logic.py | 79 +++++++++++++++---- compiler/modules/sense_amp.py | 14 ++-- compiler/modules/sense_amp_array.py | 4 +- .../modules/single_level_column_mux_array.py | 7 ++ compiler/pgates/pand2.py | 5 ++ compiler/pgates/single_level_column_mux.py | 6 +- compiler/sram_base.py | 33 +++++++- compiler/tests/23_lib_sram_model_test.py | 2 +- technology/freepdk45/tech/tech.py | 3 + technology/scn4m_subm/tech/tech.py | 3 + 14 files changed, 240 insertions(+), 93 deletions(-) diff --git a/compiler/bitcells/bitcell.py b/compiler/bitcells/bitcell.py index ed1647a8..d5712d7f 100644 --- a/compiler/bitcells/bitcell.py +++ b/compiler/bitcells/bitcell.py @@ -2,6 +2,7 @@ import design import debug import utils from tech import GDS,layer,parameter,drc +import logical_effort class bitcell(design.design): """ @@ -24,18 +25,23 @@ class bitcell(design.design): self.height = bitcell.height self.pin_map = bitcell.pin_map - def analytical_delay(self, corner, slew, load=0, swing = 0.5): - # delay of bit cell is not like a driver(from WL) - # so the slew used should be 0 - # it should not be slew dependent? - # because the value is there - # the delay is only over half transsmission gate - from tech import spice - r = spice["min_tx_r"]*3 - c_para = spice["min_tx_drain_c"] - result = self.cal_delay_with_rc(corner, r = r, c = c_para+load, slew = slew, swing = swing) - return result + # def analytical_delay(self, corner, slew, load=0, swing = 0.5): + # # delay of bit cell is not like a driver(from WL) + # # so the slew used should be 0 + # # it should not be slew dependent? + # # because the value is there + # # the delay is only over half transsmission gate + # from tech import spice + # r = spice["min_tx_r"]*3 + # c_para = spice["min_tx_drain_c"] + # result = self.cal_delay_with_rc(corner, r = r, c = c_para+load, slew = slew, swing = swing) + # return result + def analytical_delay(self, corner, slew, load=0, swing = 0.5): + parasitic_delay = 1 + size = 0.5 #This accounts for bitline being drained thought the access TX and internal node + cin = 3 #Assumes always a minimum sizes inverter. Could be specified in the tech.py file. + return logical_effort.logical_effort('bitline', size, cin, load, parasitic_delay, False) def list_bitcell_pins(self, col, row): """ Creates a list of connections in the bitcell, indexed by column and row, for instance use in bitcell_array """ diff --git a/compiler/characterizer/logical_effort.py b/compiler/characterizer/logical_effort.py index c80e69a2..97c10d51 100644 --- a/compiler/characterizer/logical_effort.py +++ b/compiler/characterizer/logical_effort.py @@ -9,6 +9,7 @@ class logical_effort(): beta = parameter["beta"] min_inv_cin = 1+beta pinv=parameter["min_inv_para_delay"] + tau = parameter['le_tau'] def __init__(self, name, size, cin, cout, parasitic, out_is_rise=True): self.name = name @@ -30,30 +31,40 @@ class logical_effort(): def get_stage_effort(self): return self.logical_effort*self.eletrical_effort - def get_parasitic_delay(self, pinv): - return pinv * self.parasitic_scale + def get_parasitic_delay(self): + return logical_effort.pinv * self.parasitic_scale - def get_stage_delay(self, pinv): - return self.get_stage_effort()+self.get_parasitic_delay(pinv) + def get_stage_delay(self): + return self.get_stage_effort()+self.get_parasitic_delay() -def calculate_delays(stage_effort_list, pinv): + def get_absolute_delay(self): + return logical_effort.tau*self.get_stage_delay() + +def calculate_delays(stage_effort_list): """Convert stage effort objects to list of delay values""" - return [stage.get_stage_delay(pinv) for stage in stage_effort_list] + return [stage.get_stage_delay() for stage in stage_effort_list] -def calculate_relative_delay(stage_effort_list, pinv=parameter["min_inv_para_delay"]): +def calculate_relative_delay(stage_effort_list): """Calculates the total delay of a given delay path made of a list of logical effort objects.""" - total_rise_delay, total_fall_delay = calculate_relative_rise_fall_delays(stage_effort_list, pinv) + total_rise_delay, total_fall_delay = calculate_relative_rise_fall_delays(stage_effort_list) return total_rise_delay + total_fall_delay + +def calculate_absolute_delay(stage_effort_list): + """Calculates the total delay of a given delay path made of a list of logical effort objects.""" + total_delay = 0 + for stage in stage_effort_list: + total_delay+=stage.get_absolute_delay() + return total_delay -def calculate_relative_rise_fall_delays(stage_effort_list, pinv=parameter["min_inv_para_delay"]): +def calculate_relative_rise_fall_delays(stage_effort_list): """Calculates the rise/fall delays of a given delay path made of a list of logical effort objects.""" debug.info(2, "Calculating rise/fall relative delays") total_rise_delay, total_fall_delay = 0,0 for stage in stage_effort_list: debug.info(2, stage) if stage.is_rise: - total_rise_delay += stage.get_stage_delay(pinv) + total_rise_delay += stage.get_stage_delay() else: - total_fall_delay += stage.get_stage_delay(pinv) + total_fall_delay += stage.get_stage_delay() return total_rise_delay, total_fall_delay \ No newline at end of file diff --git a/compiler/modules/bank.py b/compiler/modules/bank.py index 7eddc3bb..e6d18e0b 100644 --- a/compiler/modules/bank.py +++ b/compiler/modules/bank.py @@ -1216,36 +1216,62 @@ class bank(design.design): rotate=90) - def analytical_delay(self, corner, slew, load): - """ return analytical delay of the bank""" - results = [] + # def analytical_delay(self, corner, slew, load): + # """ return analytical delay of the bank""" + # results = [] - decoder_delay = self.row_decoder.analytical_delay(corner, slew, self.wordline_driver.input_load()) + # decoder_delay = self.row_decoder.analytical_delay(corner, slew, self.wordline_driver.input_load()) - word_driver_delay = self.wordline_driver.analytical_delay(corner, - decoder_delay.slew, - self.bitcell_array.input_load()) + # word_driver_delay = self.wordline_driver.analytical_delay(corner, + # decoder_delay.slew, + # self.bitcell_array.input_load()) + + # #FIXME: Array delay is the same for every port. + # bitcell_array_delay = self.bitcell_array.analytical_delay(corner, word_driver_delay.slew) + + # #This also essentially creates the same delay for each port. Good structure, no substance + # for port in self.all_ports: + # if self.words_per_row > 1: + # column_mux_delay = self.column_mux_array[port].analytical_delay(corner, + # bitcell_array_delay.slew, + # self.sense_amp_array.input_load()) + # else: + # column_mux_delay = self.return_delay(delay = 0.0, slew=word_driver_delay.slew) + + # bl_t_data_out_delay = self.sense_amp_array.analytical_delay(corner, + # column_mux_delay.slew, + # self.bitcell_array.output_load()) + # # output load of bitcell_array is set to be only small part of bl for sense amp. + # results.append(decoder_delay + word_driver_delay + bitcell_array_delay + column_mux_delay + bl_t_data_out_delay) + + # return results + + def analytical_delay(self, corner, slew, load): + """ return analytical delay of the bank. This will track the clock to output path""" + #FIXME: This delay is determined in the control logic. Should be moved here. + # word_driver_delay = self.wordline_driver.analytical_delay(corner, + # slew, + # self.bitcell_array.input_load()) #FIXME: Array delay is the same for every port. - bitcell_array_delay = self.bitcell_array.analytical_delay(corner, word_driver_delay.slew) + word_driver_slew = 0 + bitcell_array_delay = self.bitcell_array.analytical_delay(corner, word_driver_slew) #This also essentially creates the same delay for each port. Good structure, no substance - for port in self.all_ports: - if self.words_per_row > 1: - column_mux_delay = self.column_mux_array[port].analytical_delay(corner, - bitcell_array_delay.slew, - self.sense_amp_array.input_load()) - else: - column_mux_delay = self.return_delay(delay = 0.0, slew=word_driver_delay.slew) - - bl_t_data_out_delay = self.sense_amp_array.analytical_delay(corner, - column_mux_delay.slew, - self.bitcell_array.output_load()) - # output load of bitcell_array is set to be only small part of bl for sense amp. - results.append(decoder_delay + word_driver_delay + bitcell_array_delay + column_mux_delay + bl_t_data_out_delay) - - return results - + if self.words_per_row > 1: + column_mux_delay = self.column_mux_array[port].analytical_delay(corner, + bitcell_array_delay.slew, + self.sense_amp_array.input_load()) + else: + column_mux_delay = [] + + column_mux_slew = 0 + sense_amp_delay = self.sense_amp_array.analytical_delay(corner, + column_mux_slew, + self.bitcell_array.output_load()) + # output load of bitcell_array is set to be only small part of bl for sense amp. + return bitcell_array_delay + column_mux_delay + sense_amp_delay + def determine_wordline_stage_efforts(self, external_cout, inp_is_rise=True): """Get the all the stage efforts for each stage in the path within the bank clk_buf to a wordline""" #Decoder is assumed to have settled before the negative edge of the clock. Delay model relies on this assumption diff --git a/compiler/modules/bitcell_array.py b/compiler/modules/bitcell_array.py index ea8fc3f2..6aecfd6b 100644 --- a/compiler/modules/bitcell_array.py +++ b/compiler/modules/bitcell_array.py @@ -4,6 +4,7 @@ from tech import drc, spice from vector import vector from globals import OPTS from sram_factory import factory +import logical_effort class bitcell_array(design.design): """ @@ -130,23 +131,32 @@ class bitcell_array(design.design): self.add_power_pin(pin_name, pin.center(), 0, pin.layer) + # def analytical_delay(self, corner, slew, load=0): + # from tech import drc + # wl_wire = self.gen_wl_wire() + # wl_wire.return_delay_over_wire(slew) + + # wl_to_cell_delay = wl_wire.return_delay_over_wire(slew) + # # hypothetical delay from cell to bl end without sense amp + # bl_wire = self.gen_bl_wire() + # cell_load = 2 * bl_wire.return_input_cap() # we ingore the wire r + # # hence just use the whole c + # bl_swing = 0.1 + # cell_delay = self.cell.analytical_delay(corner, wl_to_cell_delay.slew, cell_load, swing = bl_swing) + + # #we do not consider the delay over the wire for now + # return self.return_delay(cell_delay.delay+wl_to_cell_delay.delay, + # wl_to_cell_delay.slew) + def analytical_delay(self, corner, slew, load=0): - from tech import drc - wl_wire = self.gen_wl_wire() - wl_wire.return_delay_over_wire(slew) - - wl_to_cell_delay = wl_wire.return_delay_over_wire(slew) - # hypothetical delay from cell to bl end without sense amp - bl_wire = self.gen_bl_wire() - cell_load = 2 * bl_wire.return_input_cap() # we ingore the wire r - # hence just use the whole c - bl_swing = 0.1 - cell_delay = self.cell.analytical_delay(corner, wl_to_cell_delay.slew, cell_load, swing = bl_swing) - - #we do not consider the delay over the wire for now - return self.return_delay(cell_delay.delay+wl_to_cell_delay.delay, - wl_to_cell_delay.slew) - + """Returns relative delay of the bitline in the bitcell array""" + #The load being driven/drained is mostly the bitline but could include the sense amp or the column mux. + #The load from the bitlines is due to the drain capacitances from all the other bitlines and wire parasitics. + drain_parasitics = .5 #each bitcell adds half a parasitic to the delay + wire_parasitics = .05 * drain_parasitics #Wires add 5% to this. + bitline_load = (drain_parasitics+wire_parasitics)*self.row_size * logical_effort.logical_effort.pinv + return [self.cell.analytical_delay(corner, slew, load+bitline_load)] + def analytical_power(self, corner, load): """Power of Bitcell array and bitline in nW.""" from tech import drc, parameter diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index b8532ee9..a9b4a56b 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -33,10 +33,10 @@ class control_logic(design.design): self.num_words = num_rows*words_per_row self.enable_delay_chain_resizing = True + self.inv_parasitic_delay = logical_effort.logical_effort.pinv #Determines how much larger the sen delay should be. Accounts for possible error in model. self.wl_timing_tolerance = 1 - self.parasitic_inv_delay = parameter["min_inv_para_delay"] self.wl_stage_efforts = None self.sen_stage_efforts = None @@ -219,7 +219,7 @@ class control_logic(design.design): def get_dynamic_delay_chain_size(self, previous_stages, previous_fanout): """Determine the size of the delay chain used for the Sense Amp Enable using path delays""" from math import ceil - previous_delay_chain_delay = (previous_fanout+1+self.parasitic_inv_delay)*previous_stages + previous_delay_chain_delay = (previous_fanout+1+self.inv_parasitic_delay)*previous_stages debug.info(2, "Previous delay chain produced {} delay units".format(previous_delay_chain_delay)) delay_fanout = 3 # This can be anything >=2 @@ -227,7 +227,7 @@ class control_logic(design.design): #inverter adds 1 unit of delay (due to minimum size). This also depends on the pinv value required_delay = self.wl_delay*self.wl_timing_tolerance - (self.sen_delay-previous_delay_chain_delay) debug.check(required_delay > 0, "Cannot size delay chain to have negative delay") - delay_stages = ceil(required_delay/(delay_fanout+1+self.parasitic_inv_delay)) + delay_stages = ceil(required_delay/(delay_fanout+1+self.inv_parasitic_delay)) if delay_stages%2 == 1: #force an even number of stages. delay_stages+=1 #Fanout can be varied as well but is a little more complicated but potentially optimal. @@ -237,7 +237,7 @@ class control_logic(design.design): def get_dynamic_delay_fanout_list(self, previous_stages, previous_fanout): """Determine the size of the delay chain used for the Sense Amp Enable using path delays""" - previous_delay_chain_delay = (previous_fanout+1+self.parasitic_inv_delay)*previous_stages + previous_delay_chain_delay = (previous_fanout+1+self.inv_parasitic_delay)*previous_stages debug.info(2, "Previous delay chain produced {} delay units".format(previous_delay_chain_delay)) fanout_rise = fanout_fall = 2 # This can be anything >=2 @@ -284,9 +284,9 @@ class control_logic(design.design): def calculate_stages_with_fixed_fanout(self, required_delay, fanout): from math import ceil #Delay being negative is not an error. It implies that any amount of stages would have a negative effect on the overall delay - if required_delay <= 3+self.parasitic_inv_delay: #3 is the minimum delay per stage (with pinv=0). + if required_delay <= 3+self.inv_parasitic_delay: #3 is the minimum delay per stage (with pinv=0). return 1 - delay_stages = ceil(required_delay/(fanout+1+self.parasitic_inv_delay)) + delay_stages = ceil(required_delay/(fanout+1+self.inv_parasitic_delay)) return delay_stages def calculate_stage_list(self, total_stages, fanout_rise, fanout_fall): @@ -850,14 +850,14 @@ class control_logic(design.design): def get_delays_to_wl(self): """Get the delay (in delay units) of the clk to a wordline in the bitcell array""" debug.check(self.sram.all_mods_except_control_done, "Cannot calculate sense amp enable delay unless all module have been added.") - self.wl_stage_efforts = self.determine_wordline_stage_efforts() - clk_to_wl_rise,clk_to_wl_fall = logical_effort.calculate_relative_rise_fall_delays(self.wl_stage_efforts, self.parasitic_inv_delay) + self.wl_stage_efforts = self.get_wordline_stage_efforts() + clk_to_wl_rise,clk_to_wl_fall = logical_effort.calculate_relative_rise_fall_delays(self.wl_stage_efforts) total_delay = clk_to_wl_rise + clk_to_wl_fall debug.info(1, "Clock to wl delay is rise={:.3f}, fall={:.3f}, total={:.3f} in delay units".format(clk_to_wl_rise, clk_to_wl_fall,total_delay)) return clk_to_wl_rise,clk_to_wl_fall - def determine_wordline_stage_efforts(self): + def get_wordline_stage_efforts(self): """Follows the gated_clk_bar -> wl_en -> wordline signal for the total path efforts""" stage_effort_list = [] @@ -871,7 +871,7 @@ class control_logic(design.design): last_stage_is_rise = stage_effort_list[-1].is_rise #Then ask the sram for the other path delays (from the bank) - stage_effort_list += self.sram.determine_wordline_stage_efforts(last_stage_is_rise) + stage_effort_list += self.sram.get_wordline_stage_efforts(last_stage_is_rise) return stage_effort_list @@ -880,17 +880,15 @@ class control_logic(design.design): This does not incorporate the delay of the replica bitline. """ debug.check(self.sram.all_mods_except_control_done, "Cannot calculate sense amp enable delay unless all module have been added.") - self.sen_stage_efforts = self.determine_sa_enable_stage_efforts() - clk_to_sen_rise, clk_to_sen_fall = logical_effort.calculate_relative_rise_fall_delays(self.sen_stage_efforts, self.parasitic_inv_delay) + self.sen_stage_efforts = self.get_sa_enable_stage_efforts() + clk_to_sen_rise, clk_to_sen_fall = logical_effort.calculate_relative_rise_fall_delays(self.sen_stage_efforts) total_delay = clk_to_sen_rise + clk_to_sen_fall debug.info(1, "Clock to s_en delay is rise={:.3f}, fall={:.3f}, total={:.3f} in delay units".format(clk_to_sen_rise, clk_to_sen_fall,total_delay)) return clk_to_sen_rise, clk_to_sen_fall - def determine_sa_enable_stage_efforts(self): + def get_sa_enable_stage_efforts(self): """Follows the gated_clk_bar signal to the sense amp enable signal adding each stages stage effort to a list""" stage_effort_list = [] - #Calculate the load on clk_buf_bar - ext_clk_buf_cout = self.sram.get_clk_bar_cin() #Initial direction of clock signal for this path last_stage_rise = True @@ -917,7 +915,54 @@ class control_logic(design.design): """Gets a list of the stages and delays in order of their path.""" if self.sen_stage_efforts == None or self.wl_stage_efforts == None: debug.error("Model delays not calculated for SRAM.", 1) - wl_delays = logical_effort.calculate_delays(self.wl_stage_efforts, self.parasitic_inv_delay) - sen_delays = logical_effort.calculate_delays(self.sen_stage_efforts, self.parasitic_inv_delay) + wl_delays = logical_effort.calculate_delays(self.wl_stage_efforts) + sen_delays = logical_effort.calculate_delays(self.sen_stage_efforts) return wl_delays, sen_delays + def analytical_delay(self, corner, slew, load): + """Gets the analytical delay from clk input to wl_en output""" + stage_effort_list = [] + #Calculate the load on clk_buf_bar + ext_clk_buf_cout = self.sram.get_clk_bar_cin() + + #Operations logic starts on negative edge + last_stage_rise = False + + #First stage(s), clk -(pdriver)-> clk_buf. + clk_buf_cout = self.replica_bitline.get_en_cin() + stage_effort_list += self.clk_buf_driver.get_stage_efforts(clk_buf_cout, last_stage_rise) + last_stage_rise = stage_effort_list[-1].is_rise + + #Second stage, clk_buf -(inv)-> clk_bar + clk_bar_cout = self.and2.get_cin() + stage_effort_list += self.and2.get_stage_efforts(clk_bar_cout, last_stage_rise) + last_stage_rise = stage_effort_list[-1].is_rise + + #Third stage clk_bar -(and)-> gated_clk_bar + gated_clk_bar_cin = self.get_gated_clk_bar_cin() + stage_effort_list.append(self.inv.get_stage_effort(gated_clk_bar_cin, last_stage_rise)) + last_stage_rise = stage_effort_list[-1].is_rise + + #Stages from gated_clk_bar -------> wordline + stage_effort_list += self.get_wordline_stage_efforts() + return stage_effort_list + + def get_clk_buf_cin(self): + """Get the loads that are connected to the buffered clock. + Includes all the DFFs and some logic.""" + + #Control logic internal load + int_clk_buf_cap = self.inv.get_cin() + self.ctrl_dff_array.get_clk_cin() + self.and2.get_cin() + + #Control logic external load (in the other parts of the SRAM) + ext_clk_buf_cap = self.sram.get_clk_bar_cin() + + return int_clk_buf_cap + ext_clk_buf_cap + + def get_gated_clk_bar_cin(self): + """Get intermediates net gated_clk_bar's capacitance""" + total_cin = 0 + total_cin += self.wl_en_driver.get_cin() + if self.port_type == 'rw': + total_cin +=self.and2.get_cin() + return total_cin \ No newline at end of file diff --git a/compiler/modules/sense_amp.py b/compiler/modules/sense_amp.py index 0c959685..8d739041 100644 --- a/compiler/modules/sense_amp.py +++ b/compiler/modules/sense_amp.py @@ -2,6 +2,7 @@ import design import debug import utils from tech import GDS,layer, parameter,drc +import logical_effort class sense_amp(design.design): """ @@ -31,12 +32,13 @@ class sense_amp(design.design): bitline_pmos_size = 8 #FIXME: This should be set somewhere and referenced. Probably in tech file. return spice["min_tx_drain_c"]*(bitline_pmos_size/parameter["min_tx_size"])#ff - def analytical_delay(self, corner, slew, load=0.0): - from tech import spice - r = spice["min_tx_r"]/(10) - c_para = spice["min_tx_drain_c"] - result = self.cal_delay_with_rc(corner, r = r, c = c_para+load, slew = slew) - return self.return_delay(result.delay, result.slew) + def analytical_delay(self, corner, slew, load): + #Delay of the sense amp will depend on the size of the amp and the output load. + parasitic_delay = 1 + cin = (parameter["sa_inv_pmos_size"] + parameter["sa_inv_nmos_size"])/drc("minwidth_tx") + sa_size = parameter["sa_inv_nmos_size"]/drc("minwidth_tx") + cc_inv_cin = cin + return logical_effort.logical_effort('column_mux', sa_size, cin, load+cc_inv_cin, parasitic_delay, False) def analytical_power(self, corner, load): """Returns dynamic and leakage power. Results in nW""" diff --git a/compiler/modules/sense_amp_array.py b/compiler/modules/sense_amp_array.py index 47969fd1..83e3d34a 100644 --- a/compiler/modules/sense_amp_array.py +++ b/compiler/modules/sense_amp_array.py @@ -136,8 +136,8 @@ class sense_amp_array(design.design): def input_load(self): return self.amp.input_load() - def analytical_delay(self, corner, slew, load=0.0): - return self.amp.analytical_delay(corner, slew=slew, load=load) + def analytical_delay(self, corner, slew, load): + return [self.amp.analytical_delay(corner, slew=slew, load=load)] def get_en_cin(self): """Get the relative capacitance of all the sense amp enable connections in the array""" diff --git a/compiler/modules/single_level_column_mux_array.py b/compiler/modules/single_level_column_mux_array.py index 57d2cd54..c2414653 100644 --- a/compiler/modules/single_level_column_mux_array.py +++ b/compiler/modules/single_level_column_mux_array.py @@ -227,3 +227,10 @@ class single_level_column_mux_array(design.design): result = self.cal_delay_with_rc(corner, r = r, c = c_para+load, slew = slew, swing = volt_swing) return self.return_delay(result.delay, result.slew) + + def analytical_delay(self, corner, slew, load): + """Returns relative delay that the column mux adds""" + #Single level column mux will add parasitic loads from other mux pass transistors and the sense amp. + drain_parasitics = .5 #Assumed parasitics from unused TXs + array_load = drain_parasitics*self.words_per_row*logical_effort.pinv + return [self.mux.analytical_delay(corner, slew, load+array_load)] \ No newline at end of file diff --git a/compiler/pgates/pand2.py b/compiler/pgates/pand2.py index 54787282..c2165b20 100644 --- a/compiler/pgates/pand2.py +++ b/compiler/pgates/pand2.py @@ -125,3 +125,8 @@ class pand2(pgate.pgate): stage_effort_list.append(stage2) return stage_effort_list + + def get_cin(self): + """Return the relative input capacitance of a single input""" + return self.nand.get_cin() + \ No newline at end of file diff --git a/compiler/pgates/single_level_column_mux.py b/compiler/pgates/single_level_column_mux.py index f03a22e8..d4ff9561 100644 --- a/compiler/pgates/single_level_column_mux.py +++ b/compiler/pgates/single_level_column_mux.py @@ -180,5 +180,9 @@ class single_level_column_mux(design.design): width=self.bitcell.width, height=self.height) - + def analytical_delay(self, corner, slew, load): + """Returns relative delay that the column mux. Difficult to convert to LE model.""" + parasitic_delay = 1 + cin = 2*self.tx_size #This is not CMOS, so using this may be incorrect. + return logical_effort.logical_effort('column_mux', self.tx_size, cin, load, parasitic_delay, False) diff --git a/compiler/sram_base.py b/compiler/sram_base.py index 611900e4..ad9c2373 100644 --- a/compiler/sram_base.py +++ b/compiler/sram_base.py @@ -11,6 +11,7 @@ from design import design from verilog import verilog from lef import lef from sram_factory import factory +import logical_effort class sram_base(design, verilog, lef): """ @@ -500,10 +501,26 @@ class sram_base(design, verilog, lef): def analytical_delay(self, corner, slew,load): - """ LH and HL are the same in analytical model. """ - return self.bank.analytical_delay(corner,slew,load) + """ Estimates the delay from clk -> DOUT + LH and HL are the same in analytical model. """ + delays = {} + for port in self.all_ports: + if port in self.readonly_ports: + control_logic = self.control_logic_r + elif port in self.readwrite_ports: + control_logic = self.control_logic_rw + else: + continue + clk_to_wlen_delays = control_logic.analytical_delay(corner, slew, load) + wlen_to_dout_delays = self.bank.analytical_delay(corner,slew,load) #port should probably be specified... + all_delays = clk_to_wlen_delays+wlen_to_dout_delays + total_delay = logical_effort.calculate_absolute_delay(all_delays) + last_slew = .1*all_delays[-1].get_absolute_delay() #slew approximated as 10% of delay + delays[port] = self.return_delay(delay=total_delay, slew=last_slew) + + return delays - def determine_wordline_stage_efforts(self, inp_is_rise=True): + def get_wordline_stage_efforts(self, inp_is_rise=True): """Get the all the stage efforts for each stage in the path from clk_buf to a wordline""" stage_effort_list = [] @@ -541,4 +558,12 @@ class sram_base(design, verilog, lef): return self.bank.get_sen_cin() - + def get_dff_clk_buf_cin(self): + """Get the relative capacitance of the clk_buf signal. + Does not get the control logic loading but everything else""" + total_cin = 0 + total_cin += self.row_addr_dff.get_clk_cin() + total_cin += self.data_dff.get_clk_cin() + if self.col_addr_size > 0: + total_cin += self.col_addr_dff.get_clk_cin() + return total_cin \ No newline at end of file diff --git a/compiler/tests/23_lib_sram_model_test.py b/compiler/tests/23_lib_sram_model_test.py index 8a996cb4..d6d4269a 100755 --- a/compiler/tests/23_lib_sram_model_test.py +++ b/compiler/tests/23_lib_sram_model_test.py @@ -15,7 +15,7 @@ class lib_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - + OPTS.netlist_only = True from characterizer import lib from sram import sram from sram_config import sram_config diff --git a/technology/freepdk45/tech/tech.py b/technology/freepdk45/tech/tech.py index 760d2a5a..738bc0ef 100644 --- a/technology/freepdk45/tech/tech.py +++ b/technology/freepdk45/tech/tech.py @@ -336,6 +336,7 @@ spice["nand3_transition_prob"] = .1094 # Transition probability of 3-input na spice["nor2_transition_prob"] = .1875 # Transition probability of 2-input nor. #Parameters related to sense amp enable timing and delay chain/RBL sizing +parameter['le_tau'] = 8 #In pico-seconds. FIXME:This is an assumed value, not measured. parameter["static_delay_stages"] = 4 parameter["static_fanout_per_stage"] = 3 parameter["static_fanout_list"] = parameter["static_delay_stages"]*[parameter["static_fanout_per_stage"]] @@ -344,6 +345,8 @@ parameter["6tcell_wl_cin"] = 3 #relative capacitance parameter["min_inv_para_delay"] = 2.4 #Tau delay units parameter["sa_en_pmos_size"] = .72 #micro-meters parameter["sa_en_nmos_size"] = .27 #micro-meters +parameter["sa_inv_pmos_size"] = .54 #micro-meters +parameter["sa_inv_nmos_size"] = .27 #micro-meters parameter["rbl_height_percentage"] = .5 #Height of RBL compared to bitcell array ################################################### diff --git a/technology/scn4m_subm/tech/tech.py b/technology/scn4m_subm/tech/tech.py index 78222fd6..e127b1a7 100755 --- a/technology/scn4m_subm/tech/tech.py +++ b/technology/scn4m_subm/tech/tech.py @@ -302,6 +302,7 @@ spice["nand3_transition_prob"] = .1094 # Transition probability of 3-input na spice["nor2_transition_prob"] = .1875 # Transition probability of 2-input nor. #Logical Effort relative values for the Handmade cells +parameter['le_tau'] = 40 #In pico-seconds. FIXME:This is an assumed value, not measured. parameter["static_delay_stages"] = 4 parameter["static_fanout_per_stage"] = 3 parameter["static_fanout_list"] = parameter["static_delay_stages"]*[parameter["static_fanout_per_stage"]] @@ -310,6 +311,8 @@ parameter["6tcell_wl_cin"] = 2 parameter["min_inv_para_delay"] = .5 parameter["sa_en_pmos_size"] = 24*_lambda_ parameter["sa_en_nmos_size"] = 9*_lambda_ +parameter["sa_inv_pmos_size"] = 18*_lambda_ +parameter["sa_inv_nmos_size"] = 9*_lambda_ parameter["rbl_height_percentage"] = .5 #Height of RBL compared to bitcell array ################################################### From cc5b347f42c1ddbf0ca8910dcd4f7c8081d76958 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Wed, 3 Apr 2019 16:19:49 -0700 Subject: [PATCH 07/37] Added analyical model test which compares measured delay to model delay. --- compiler/bitcells/bitcell.py | 14 +--- compiler/characterizer/delay.py | 4 +- compiler/characterizer/logical_effort.py | 4 + compiler/modules/bank.py | 48 +++-------- compiler/modules/bitcell_array.py | 22 +---- compiler/modules/sense_amp_array.py | 7 ++ .../modules/single_level_column_mux_array.py | 11 ++- ...y_model_test.py => 21_model_delay_test.py} | 38 ++++++--- compiler/tests/27_worst_case_delay_test.py | 81 ------------------- technology/freepdk45/tech/tech.py | 3 +- technology/scn4m_subm/tech/tech.py | 9 ++- 11 files changed, 71 insertions(+), 170 deletions(-) rename compiler/tests/{28_delay_model_test.py => 21_model_delay_test.py} (57%) delete mode 100755 compiler/tests/27_worst_case_delay_test.py diff --git a/compiler/bitcells/bitcell.py b/compiler/bitcells/bitcell.py index d5712d7f..3f1d02d3 100644 --- a/compiler/bitcells/bitcell.py +++ b/compiler/bitcells/bitcell.py @@ -24,19 +24,7 @@ class bitcell(design.design): self.width = bitcell.width self.height = bitcell.height self.pin_map = bitcell.pin_map - - # def analytical_delay(self, corner, slew, load=0, swing = 0.5): - # # delay of bit cell is not like a driver(from WL) - # # so the slew used should be 0 - # # it should not be slew dependent? - # # because the value is there - # # the delay is only over half transsmission gate - # from tech import spice - # r = spice["min_tx_r"]*3 - # c_para = spice["min_tx_drain_c"] - # result = self.cal_delay_with_rc(corner, r = r, c = c_para+load, slew = slew, swing = swing) - # return result - + def analytical_delay(self, corner, slew, load=0, swing = 0.5): parasitic_delay = 1 size = 0.5 #This accounts for bitline being drained thought the access TX and internal node diff --git a/compiler/characterizer/delay.py b/compiler/characterizer/delay.py index 9c15cd2a..a80fc4dc 100644 --- a/compiler/characterizer/delay.py +++ b/compiler/characterizer/delay.py @@ -9,6 +9,7 @@ import utils from globals import OPTS from .simulation import simulation from .measurements import * +import logical_effort class delay(simulation): """Functions to measure the delay and power of an SRAM at a given address and @@ -904,8 +905,9 @@ class delay(simulation): self.create_measurement_names() power = self.analytical_power(slews, loads) port_data = self.get_empty_measure_data_dict() + relative_loads = [logical_effort.convert_farad_to_relative_c(c_farad) for c_farad in loads] for slew in slews: - for load in loads: + for load in relative_loads: self.set_load_slew(load,slew) bank_delay = self.sram.analytical_delay(self.corner, self.slew,self.load) for port in self.all_ports: diff --git a/compiler/characterizer/logical_effort.py b/compiler/characterizer/logical_effort.py index 97c10d51..860ae68f 100644 --- a/compiler/characterizer/logical_effort.py +++ b/compiler/characterizer/logical_effort.py @@ -67,4 +67,8 @@ def calculate_relative_rise_fall_delays(stage_effort_list): else: total_fall_delay += stage.get_stage_delay() return total_rise_delay, total_fall_delay + +def convert_farad_to_relative_c(c_farad): + """Converts capacitance in Femto-Farads to relative capacitance.""" + return c_farad*parameter['cap_relative_per_ff'] \ No newline at end of file diff --git a/compiler/modules/bank.py b/compiler/modules/bank.py index e6d18e0b..36cfaf97 100644 --- a/compiler/modules/bank.py +++ b/compiler/modules/bank.py @@ -1215,37 +1215,6 @@ class bank(design.design): offset=control_pos, rotate=90) - - # def analytical_delay(self, corner, slew, load): - # """ return analytical delay of the bank""" - # results = [] - - # decoder_delay = self.row_decoder.analytical_delay(corner, slew, self.wordline_driver.input_load()) - - # word_driver_delay = self.wordline_driver.analytical_delay(corner, - # decoder_delay.slew, - # self.bitcell_array.input_load()) - - # #FIXME: Array delay is the same for every port. - # bitcell_array_delay = self.bitcell_array.analytical_delay(corner, word_driver_delay.slew) - - # #This also essentially creates the same delay for each port. Good structure, no substance - # for port in self.all_ports: - # if self.words_per_row > 1: - # column_mux_delay = self.column_mux_array[port].analytical_delay(corner, - # bitcell_array_delay.slew, - # self.sense_amp_array.input_load()) - # else: - # column_mux_delay = self.return_delay(delay = 0.0, slew=word_driver_delay.slew) - - # bl_t_data_out_delay = self.sense_amp_array.analytical_delay(corner, - # column_mux_delay.slew, - # self.bitcell_array.output_load()) - # # output load of bitcell_array is set to be only small part of bl for sense amp. - # results.append(decoder_delay + word_driver_delay + bitcell_array_delay + column_mux_delay + bl_t_data_out_delay) - - # return results - def analytical_delay(self, corner, slew, load): """ return analytical delay of the bank. This will track the clock to output path""" #FIXME: This delay is determined in the control logic. Should be moved here. @@ -1255,20 +1224,27 @@ class bank(design.design): #FIXME: Array delay is the same for every port. word_driver_slew = 0 - bitcell_array_delay = self.bitcell_array.analytical_delay(corner, word_driver_slew) + if self.words_per_row > 1: + bitline_ext_load = self.column_mux_array[port].get_drain_cin() + else: + bitline_ext_load = self.sense_amp_array.get_drain_cin() + + bitcell_array_delay = self.bitcell_array.analytical_delay(corner, word_driver_slew, bitline_ext_load) + bitcell_array_slew = 0 #This also essentially creates the same delay for each port. Good structure, no substance if self.words_per_row > 1: + sa_load = self.sense_amp_array.get_drain_load() column_mux_delay = self.column_mux_array[port].analytical_delay(corner, - bitcell_array_delay.slew, - self.sense_amp_array.input_load()) + bitcell_array_slew, + sa_load) else: column_mux_delay = [] column_mux_slew = 0 sense_amp_delay = self.sense_amp_array.analytical_delay(corner, - column_mux_slew, - self.bitcell_array.output_load()) + column_mux_slew, + load) # output load of bitcell_array is set to be only small part of bl for sense amp. return bitcell_array_delay + column_mux_delay + sense_amp_delay diff --git a/compiler/modules/bitcell_array.py b/compiler/modules/bitcell_array.py index 6aecfd6b..e2e98b5b 100644 --- a/compiler/modules/bitcell_array.py +++ b/compiler/modules/bitcell_array.py @@ -128,27 +128,9 @@ class bitcell_array(design.design): inst = self.cell_inst[row,col] for pin_name in ["vdd", "gnd"]: for pin in inst.get_pins(pin_name): - self.add_power_pin(pin_name, pin.center(), 0, pin.layer) - - - # def analytical_delay(self, corner, slew, load=0): - # from tech import drc - # wl_wire = self.gen_wl_wire() - # wl_wire.return_delay_over_wire(slew) - - # wl_to_cell_delay = wl_wire.return_delay_over_wire(slew) - # # hypothetical delay from cell to bl end without sense amp - # bl_wire = self.gen_bl_wire() - # cell_load = 2 * bl_wire.return_input_cap() # we ingore the wire r - # # hence just use the whole c - # bl_swing = 0.1 - # cell_delay = self.cell.analytical_delay(corner, wl_to_cell_delay.slew, cell_load, swing = bl_swing) - - # #we do not consider the delay over the wire for now - # return self.return_delay(cell_delay.delay+wl_to_cell_delay.delay, - # wl_to_cell_delay.slew) + self.add_power_pin(pin_name, pin.center(), 0, pin.layer) - def analytical_delay(self, corner, slew, load=0): + def analytical_delay(self, corner, slew, load): """Returns relative delay of the bitline in the bitcell array""" #The load being driven/drained is mostly the bitline but could include the sense amp or the column mux. #The load from the bitlines is due to the drain capacitances from all the other bitlines and wire parasitics. diff --git a/compiler/modules/sense_amp_array.py b/compiler/modules/sense_amp_array.py index 83e3d34a..9ba72025 100644 --- a/compiler/modules/sense_amp_array.py +++ b/compiler/modules/sense_amp_array.py @@ -4,6 +4,7 @@ from vector import vector from sram_factory import factory import debug from globals import OPTS +import logical_effort class sense_amp_array(design.design): """ @@ -143,3 +144,9 @@ class sense_amp_array(design.design): """Get the relative capacitance of all the sense amp enable connections in the array""" sense_amp_en_cin = self.amp.get_en_cin() return sense_amp_en_cin * self.word_size + + def get_drain_cin(self): + """Get the relative capacitance of the drain of the PMOS isolation TX""" + #Estimated as half a parasitic delay. + drain_parasitics = .5 + return drain_parasitics * logical_effort.logical_effort.pinv diff --git a/compiler/modules/single_level_column_mux_array.py b/compiler/modules/single_level_column_mux_array.py index c2414653..3247592e 100644 --- a/compiler/modules/single_level_column_mux_array.py +++ b/compiler/modules/single_level_column_mux_array.py @@ -7,6 +7,7 @@ import math from vector import vector from sram_factory import factory from globals import OPTS +import logical_effort class single_level_column_mux_array(design.design): """ @@ -232,5 +233,11 @@ class single_level_column_mux_array(design.design): """Returns relative delay that the column mux adds""" #Single level column mux will add parasitic loads from other mux pass transistors and the sense amp. drain_parasitics = .5 #Assumed parasitics from unused TXs - array_load = drain_parasitics*self.words_per_row*logical_effort.pinv - return [self.mux.analytical_delay(corner, slew, load+array_load)] \ No newline at end of file + array_load = drain_parasitics*self.words_per_row*logical_effort.logical_effort.pinv + return [self.mux.analytical_delay(corner, slew, load+array_load)] + + def get_drain_cin(self): + """Get the relative capacitance of the drain of the NMOS pass TX""" + #Estimated as half a parasitic delay. + drain_parasitics = .5 + return drain_parasitics * logical_effort.logical_effort.pinv \ No newline at end of file diff --git a/compiler/tests/28_delay_model_test.py b/compiler/tests/21_model_delay_test.py similarity index 57% rename from compiler/tests/28_delay_model_test.py rename to compiler/tests/21_model_delay_test.py index a02a42e9..7e9c00e4 100755 --- a/compiler/tests/28_delay_model_test.py +++ b/compiler/tests/21_model_delay_test.py @@ -11,25 +11,22 @@ import globals from globals import OPTS import debug -class delay_model_test(openram_test): +class model_delay_sram_test(openram_test): def runTest(self): globals.init_openram("config_20_{0}".format(OPTS.tech_name)) - OPTS.spice_name="hspice" + #OPTS.spice_name="hspice" OPTS.analytical_delay = False OPTS.netlist_only = True - OPTS.trim_netlist = False - debug.info(1, "Trimming disabled for this test. Simulation could be slow.") # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer reload(characterizer) - - from characterizer import model_check + from characterizer import delay from sram import sram from sram_config import sram_config - c = sram_config(word_size=4, + c = sram_config(word_size=1, num_words=16, num_banks=1) c.words_per_row=1 @@ -45,15 +42,32 @@ class delay_model_test(openram_test): debug.info(1, "Probe address {0} probe data bit {1}".format(probe_address, probe_data)) corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - mc = model_check(s.s, tempspice, corner) + d = delay(s.s, tempspice, corner) import tech loads = [tech.spice["msflop_in_cap"]*4] slews = [tech.spice["rise_time"]*2] - sram_data = mc.analyze(probe_address, probe_data, slews, loads) - #Combine info about port into all data - - #debug.info(1,"Data:\n{}".format(wl_data)) + spice_data, port_data = d.analyze(probe_address, probe_data, slews, loads) + spice_data.update(port_data[0]) + + model_data, port_data = d.analytical_delay(slews, loads) + model_data.update(port_data[0]) + + #Only compare the delays + spice_delays = {key:value for key, value in spice_data.items() if 'delay' in key} + model_delays = {key:value for key, value in model_data.items() if 'delay' in key} + debug.info(1,"Spice Delays={}".format(spice_delays)) + debug.info(1,"Model Delays={}".format(model_delays)) + if OPTS.tech_name == "freepdk45": + error_tolerance = .25 + elif OPTS.tech_name == "scn4m_subm": + error_tolerance = .25 + else: + self.assertTrue(False) # other techs fail + # Check if no too many or too few results + self.assertTrue(len(spice_delays.keys())==len(model_delays.keys())) + self.assertTrue(self.check_golden_data(spice_delays,model_delays,error_tolerance)) + globals.end_openram() # run the test from the command line diff --git a/compiler/tests/27_worst_case_delay_test.py b/compiler/tests/27_worst_case_delay_test.py deleted file mode 100755 index 834c6b69..00000000 --- a/compiler/tests/27_worst_case_delay_test.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env python3 -""" -Run a regression test on various srams -""" - -import unittest -from testutils import header,openram_test -import sys,os -sys.path.append(os.path.join(sys.path[0],"..")) -import globals -from globals import OPTS -import debug - -@unittest.skip("SKIPPING 27_worst_case_delay_test") -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)) - OPTS.spice_name="hspice" - OPTS.analytical_delay = False - OPTS.netlist_only = True - OPTS.trim_netlist = False - OPTS.check_lvsdrc = True - - - # This is a hack to reload the characterizer __init__ with the spice version - from importlib import reload - import characterizer - reload(characterizer) - from characterizer import worst_case - if not OPTS.spice_exe: - 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, - num_banks=num_banks) - c.words_per_row=1 - 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") - - sp_netlist_file = OPTS.openram_temp + "temp.sp" - s.sp_write(sp_netlist_file) - - if OPTS.use_pex: - gdsname = OPTS.output_path + s.name + ".gds" - s.gds_write(gdsname) - - import verify - reload(verify) - # Output the extracted design if requested - sp_pex_file = OPTS.output_path + s.name + "_pex.sp" - verify.run_pex(s.name, gdsname, sp_netlist_file, output=sp_pex_file) - sp_sim_file = sp_pex_file - debug.info(1, "Performing spice simulations with backannotated spice file.") - else: - sp_sim_file = sp_netlist_file - debug.info(1, "Performing spice simulations with spice netlist.") - - corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - wc = worst_case(s.s, sp_sim_file, corner) - import tech - loads = [tech.spice["msflop_in_cap"]*4] - slews = [tech.spice["rise_time"]*2] - probe_address = "1" * s.s.addr_size - probe_data = s.s.word_size - 1 - wc.analyze(probe_address, probe_data, slews, loads) - - globals.end_openram() - -# run the test from the command line -if __name__ == "__main__": - (OPTS, args) = globals.parse_args() - del sys.argv[1:] - header(__file__, OPTS.tech_name) - unittest.main() diff --git a/technology/freepdk45/tech/tech.py b/technology/freepdk45/tech/tech.py index 738bc0ef..93f55637 100644 --- a/technology/freepdk45/tech/tech.py +++ b/technology/freepdk45/tech/tech.py @@ -336,7 +336,8 @@ spice["nand3_transition_prob"] = .1094 # Transition probability of 3-input na spice["nor2_transition_prob"] = .1875 # Transition probability of 2-input nor. #Parameters related to sense amp enable timing and delay chain/RBL sizing -parameter['le_tau'] = 8 #In pico-seconds. FIXME:This is an assumed value, not measured. +parameter['le_tau'] = 2.25 #In pico-seconds. +parameter['cap_relative_per_ff'] = 7.5 #Units of Relative Capacitance/ Femto-Farad parameter["static_delay_stages"] = 4 parameter["static_fanout_per_stage"] = 3 parameter["static_fanout_list"] = parameter["static_delay_stages"]*[parameter["static_fanout_per_stage"]] diff --git a/technology/scn4m_subm/tech/tech.py b/technology/scn4m_subm/tech/tech.py index e127b1a7..53a3a255 100755 --- a/technology/scn4m_subm/tech/tech.py +++ b/technology/scn4m_subm/tech/tech.py @@ -302,13 +302,14 @@ spice["nand3_transition_prob"] = .1094 # Transition probability of 3-input na spice["nor2_transition_prob"] = .1875 # Transition probability of 2-input nor. #Logical Effort relative values for the Handmade cells -parameter['le_tau'] = 40 #In pico-seconds. FIXME:This is an assumed value, not measured. +parameter['le_tau'] = 23 #In pico-seconds. +parameter["min_inv_para_delay"] = .73 #In relative delay units +parameter['cap_relative_per_ff'] = .91 #Units of Relative Capacitance/ Femto-Farad parameter["static_delay_stages"] = 4 parameter["static_fanout_per_stage"] = 3 parameter["static_fanout_list"] = parameter["static_delay_stages"]*[parameter["static_fanout_per_stage"]] -parameter["dff_clk_cin"] = 27.5 -parameter["6tcell_wl_cin"] = 2 -parameter["min_inv_para_delay"] = .5 +parameter["dff_clk_cin"] = 27.5 #In relative capacitance units +parameter["6tcell_wl_cin"] = 2 #In relative capacitance units parameter["sa_en_pmos_size"] = 24*_lambda_ parameter["sa_en_nmos_size"] = 9*_lambda_ parameter["sa_inv_pmos_size"] = 18*_lambda_ From 14385194950e201faa2561146342b6eda392615a Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Wed, 3 Apr 2019 17:53:28 -0700 Subject: [PATCH 08/37] Added check to pdriver for 0 fanout which can break compute_sizes. --- compiler/pgates/pdriver.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/compiler/pgates/pdriver.py b/compiler/pgates/pdriver.py index 5b4a6c9a..02e4355c 100644 --- a/compiler/pgates/pdriver.py +++ b/compiler/pgates/pdriver.py @@ -11,7 +11,7 @@ class pdriver(pgate.pgate): """ This instantiates an even or odd number of inverters sized for driving a load. """ - def __init__(self, name, neg_polarity=False, fanout=1, size_list=None, height=None): + def __init__(self, name, neg_polarity=False, fanout=0, size_list=None, height=None): self.stage_effort = 3 self.height = height @@ -19,6 +19,8 @@ class pdriver(pgate.pgate): self.size_list = size_list self.fanout = fanout + if size_list == None and self.fanout == 0: + debug.error("Either fanout or size list must be specified.", -1) if self.size_list and self.fanout != 0: debug.error("Cannot specify both size_list and fanout.", -1) if self.size_list and self.neg_polarity: From 25c034f85de57ee9aabec5be1bfe1b7a81813b10 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Tue, 9 Apr 2019 01:56:32 -0700 Subject: [PATCH 09/37] Added more accurate bitline delay capacitance estimations --- compiler/modules/bank.py | 3 ++- compiler/modules/bitcell_array.py | 7 ++--- compiler/modules/sense_amp_array.py | 7 ++--- .../modules/single_level_column_mux_array.py | 26 ++++++------------- compiler/pgates/single_level_column_mux.py | 1 + technology/freepdk45/tech/tech.py | 1 + technology/scn4m_subm/tech/tech.py | 1 + 7 files changed, 21 insertions(+), 25 deletions(-) diff --git a/compiler/modules/bank.py b/compiler/modules/bank.py index 36cfaf97..5df8ee87 100644 --- a/compiler/modules/bank.py +++ b/compiler/modules/bank.py @@ -1224,6 +1224,7 @@ class bank(design.design): #FIXME: Array delay is the same for every port. word_driver_slew = 0 + port = 0 if self.words_per_row > 1: bitline_ext_load = self.column_mux_array[port].get_drain_cin() else: @@ -1234,7 +1235,7 @@ class bank(design.design): bitcell_array_slew = 0 #This also essentially creates the same delay for each port. Good structure, no substance if self.words_per_row > 1: - sa_load = self.sense_amp_array.get_drain_load() + sa_load = self.sense_amp_array.get_drain_cin() column_mux_delay = self.column_mux_array[port].analytical_delay(corner, bitcell_array_slew, sa_load) diff --git a/compiler/modules/bitcell_array.py b/compiler/modules/bitcell_array.py index e2e98b5b..79c68241 100644 --- a/compiler/modules/bitcell_array.py +++ b/compiler/modules/bitcell_array.py @@ -132,11 +132,12 @@ class bitcell_array(design.design): def analytical_delay(self, corner, slew, load): """Returns relative delay of the bitline in the bitcell array""" + from tech import parameter #The load being driven/drained is mostly the bitline but could include the sense amp or the column mux. #The load from the bitlines is due to the drain capacitances from all the other bitlines and wire parasitics. - drain_parasitics = .5 #each bitcell adds half a parasitic to the delay - wire_parasitics = .05 * drain_parasitics #Wires add 5% to this. - bitline_load = (drain_parasitics+wire_parasitics)*self.row_size * logical_effort.logical_effort.pinv + drain_load = logical_effort.convert_farad_to_relative_c(parameter['bitcell_drain_cap']) + wire_unit_load = .05 * drain_load #Wires add 5% to this. + bitline_load = (drain_load+wire_unit_load)*self.row_size return [self.cell.analytical_delay(corner, slew, load+bitline_load)] def analytical_power(self, corner, load): diff --git a/compiler/modules/sense_amp_array.py b/compiler/modules/sense_amp_array.py index 9ba72025..c9722e50 100644 --- a/compiler/modules/sense_amp_array.py +++ b/compiler/modules/sense_amp_array.py @@ -147,6 +147,7 @@ class sense_amp_array(design.design): def get_drain_cin(self): """Get the relative capacitance of the drain of the PMOS isolation TX""" - #Estimated as half a parasitic delay. - drain_parasitics = .5 - return drain_parasitics * logical_effort.logical_effort.pinv + from tech import parameter + #Bitcell drain load being used to estimate PMOS drain load + drain_load = logical_effort.convert_farad_to_relative_c(parameter['bitcell_drain_cap']) + return drain_load diff --git a/compiler/modules/single_level_column_mux_array.py b/compiler/modules/single_level_column_mux_array.py index 3247592e..d7829900 100644 --- a/compiler/modules/single_level_column_mux_array.py +++ b/compiler/modules/single_level_column_mux_array.py @@ -216,28 +216,18 @@ class single_level_column_mux_array(design.design): self.add_via(layers=("metal1", "via1", "metal2"), offset= br_out_offset, rotate=90) - - def analytical_delay(self, corner, vdd, slew, load=0.0): - from tech import spice, parameter - proc,vdd,temp = corner - r = spice["min_tx_r"]/(self.mux.ptx_width/parameter["min_tx_size"]) - #Drains of mux transistors make up capacitance. - c_para = spice["min_tx_drain_c"]*(self.mux.ptx_width/parameter["min_tx_size"])*self.words_per_row#ff - volt_swing = spice["v_threshold_typical"]/vdd - - result = self.cal_delay_with_rc(corner, r = r, c = c_para+load, slew = slew, swing = volt_swing) - return self.return_delay(result.delay, result.slew) - - + def analytical_delay(self, corner, slew, load): + from tech import parameter """Returns relative delay that the column mux adds""" #Single level column mux will add parasitic loads from other mux pass transistors and the sense amp. - drain_parasitics = .5 #Assumed parasitics from unused TXs - array_load = drain_parasitics*self.words_per_row*logical_effort.logical_effort.pinv + drain_load = logical_effort.convert_farad_to_relative_c(parameter['bitcell_drain_cap']) + array_load = drain_load*self.words_per_row return [self.mux.analytical_delay(corner, slew, load+array_load)] def get_drain_cin(self): """Get the relative capacitance of the drain of the NMOS pass TX""" - #Estimated as half a parasitic delay. - drain_parasitics = .5 - return drain_parasitics * logical_effort.logical_effort.pinv \ No newline at end of file + from tech import parameter + #Bitcell drain load being used to estimate mux NMOS drain load + drain_load = logical_effort.convert_farad_to_relative_c(parameter['bitcell_drain_cap']) + return drain_load \ No newline at end of file diff --git a/compiler/pgates/single_level_column_mux.py b/compiler/pgates/single_level_column_mux.py index d4ff9561..2bdf5bef 100644 --- a/compiler/pgates/single_level_column_mux.py +++ b/compiler/pgates/single_level_column_mux.py @@ -5,6 +5,7 @@ from vector import vector import contact from globals import OPTS from sram_factory import factory +import logical_effort class single_level_column_mux(design.design): """ diff --git a/technology/freepdk45/tech/tech.py b/technology/freepdk45/tech/tech.py index 93f55637..1bf1c0e7 100644 --- a/technology/freepdk45/tech/tech.py +++ b/technology/freepdk45/tech/tech.py @@ -349,6 +349,7 @@ parameter["sa_en_nmos_size"] = .27 #micro-meters parameter["sa_inv_pmos_size"] = .54 #micro-meters parameter["sa_inv_nmos_size"] = .27 #micro-meters parameter["rbl_height_percentage"] = .5 #Height of RBL compared to bitcell array +parameter['bitcell_drain_cap'] = 0.1 #In Femto-Farad, approximation of drain capacitance ################################################### ##END Spice Simulation Parameters diff --git a/technology/scn4m_subm/tech/tech.py b/technology/scn4m_subm/tech/tech.py index 53a3a255..23901b0d 100755 --- a/technology/scn4m_subm/tech/tech.py +++ b/technology/scn4m_subm/tech/tech.py @@ -315,6 +315,7 @@ parameter["sa_en_nmos_size"] = 9*_lambda_ parameter["sa_inv_pmos_size"] = 18*_lambda_ parameter["sa_inv_nmos_size"] = 9*_lambda_ parameter["rbl_height_percentage"] = .5 #Height of RBL compared to bitcell array +parameter['bitcell_drain_cap'] = 0.2 #In Femto-Farad, approximation of drain capacitance ################################################### ##END Spice Simulation Parameters From a500d7ee3dffcf53efba6eaec7637cc82880492b Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Tue, 9 Apr 2019 02:49:52 -0700 Subject: [PATCH 10/37] Adjusted bitcell analytical delays for multiport cells. --- compiler/bitcells/bitcell_1rw_1r.py | 17 ++++++----------- compiler/bitcells/bitcell_1w_1r.py | 17 ++++++----------- compiler/bitcells/pbitcell.py | 17 +++++++++++------ compiler/modules/bank.py | 3 +-- compiler/sram_base.py | 2 +- 5 files changed, 25 insertions(+), 31 deletions(-) diff --git a/compiler/bitcells/bitcell_1rw_1r.py b/compiler/bitcells/bitcell_1rw_1r.py index a96dcff0..e597167f 100644 --- a/compiler/bitcells/bitcell_1rw_1r.py +++ b/compiler/bitcells/bitcell_1rw_1r.py @@ -2,6 +2,7 @@ import design import debug import utils from tech import GDS,layer,parameter,drc +import logical_effort class bitcell_1rw_1r(design.design): """ @@ -25,18 +26,12 @@ class bitcell_1rw_1r(design.design): self.pin_map = bitcell_1rw_1r.pin_map def analytical_delay(self, corner, slew, load=0, swing = 0.5): - # delay of bit cell is not like a driver(from WL) - # so the slew used should be 0 - # it should not be slew dependent? - # because the value is there - # the delay is only over half transsmission gate - from tech import spice - r = spice["min_tx_r"]*3 - c_para = spice["min_tx_drain_c"] - result = self.cal_delay_with_rc(corner, r = r, c = c_para+load, slew = slew, swing = swing) - return result + parasitic_delay = 1 + size = 0.5 #This accounts for bitline being drained thought the access TX and internal node + cin = 3 #Assumes always a minimum sizes inverter. Could be specified in the tech.py file. + read_port_load = 0.5 #min size NMOS gate load + return logical_effort.logical_effort('bitline', size, cin, load+read_port_load, parasitic_delay, False) - def list_bitcell_pins(self, col, row): """ Creates a list of connections in the bitcell, indexed by column and row, for instance use in bitcell_array """ bitcell_pins = ["bl0_{0}".format(col), diff --git a/compiler/bitcells/bitcell_1w_1r.py b/compiler/bitcells/bitcell_1w_1r.py index e2cc662b..cf487fba 100644 --- a/compiler/bitcells/bitcell_1w_1r.py +++ b/compiler/bitcells/bitcell_1w_1r.py @@ -2,6 +2,7 @@ import design import debug import utils from tech import GDS,layer,parameter,drc +import logical_effort class bitcell_1w_1r(design.design): """ @@ -25,18 +26,12 @@ class bitcell_1w_1r(design.design): self.pin_map = bitcell_1w_1r.pin_map def analytical_delay(self, corner, slew, load=0, swing = 0.5): - # delay of bit cell is not like a driver(from WL) - # so the slew used should be 0 - # it should not be slew dependent? - # because the value is there - # the delay is only over half transsmission gate - from tech import spice - r = spice["min_tx_r"]*3 - c_para = spice["min_tx_drain_c"] - result = self.cal_delay_with_rc(corner, r = r, c = c_para+load, slew = slew, swing = swing) - return result + parasitic_delay = 1 + size = 0.5 #This accounts for bitline being drained thought the access TX and internal node + cin = 3 #Assumes always a minimum sizes inverter. Could be specified in the tech.py file. + read_port_load = 0.5 #min size NMOS gate load + return logical_effort.logical_effort('bitline', size, cin, load+read_port_load, parasitic_delay, False) - def list_bitcell_pins(self, col, row): """ Creates a list of connections in the bitcell, indexed by column and row, for instance use in bitcell_array """ bitcell_pins = ["bl0_{0}".format(col), diff --git a/compiler/bitcells/pbitcell.py b/compiler/bitcells/pbitcell.py index 55712e44..94c294db 100644 --- a/compiler/bitcells/pbitcell.py +++ b/compiler/bitcells/pbitcell.py @@ -5,6 +5,7 @@ from tech import drc, parameter, spice from vector import vector from ptx import ptx from globals import OPTS +import logical_effort class pbitcell(design.design): """ @@ -867,12 +868,16 @@ class pbitcell(design.design): self.add_path("metal1", [Q_bar_pos, vdd_pos]) def analytical_delay(self, corner, slew, load=0, swing = 0.5): - #FIXME: Delay copied exactly over from bitcell - from tech import spice - r = spice["min_tx_r"]*3 - c_para = spice["min_tx_drain_c"] - result = self.cal_delay_with_rc(corner, r = r, c = c_para+load, slew = slew, swing = swing) - return result + parasitic_delay = 1 + size = 0.5 #This accounts for bitline being drained thought the access TX and internal node + cin = 3 #Assumes always a minimum sizes inverter. Could be specified in the tech.py file. + + #Internal loads due to port configs are halved. This is to account for the size already being halved + #for stacked TXs, but internal loads do not see this size estimation. + write_port_load = self.num_w_ports*logical_effort.convert_farad_to_relative_c(parameter['bitcell_drain_cap'])/2 + read_port_load = self.num_r_ports/2 #min size NMOS gate load + total_load = load+read_port_load+write_port_load + return logical_effort.logical_effort('bitline', size, cin, load+read_port_load, parasitic_delay, False) def analytical_power(self, corner, load): """Bitcell power in nW. Only characterizes leakage.""" diff --git a/compiler/modules/bank.py b/compiler/modules/bank.py index 5df8ee87..5b556660 100644 --- a/compiler/modules/bank.py +++ b/compiler/modules/bank.py @@ -1215,7 +1215,7 @@ class bank(design.design): offset=control_pos, rotate=90) - def analytical_delay(self, corner, slew, load): + def analytical_delay(self, corner, slew, load, port): """ return analytical delay of the bank. This will track the clock to output path""" #FIXME: This delay is determined in the control logic. Should be moved here. # word_driver_delay = self.wordline_driver.analytical_delay(corner, @@ -1224,7 +1224,6 @@ class bank(design.design): #FIXME: Array delay is the same for every port. word_driver_slew = 0 - port = 0 if self.words_per_row > 1: bitline_ext_load = self.column_mux_array[port].get_drain_cin() else: diff --git a/compiler/sram_base.py b/compiler/sram_base.py index a7f0e965..6d859358 100644 --- a/compiler/sram_base.py +++ b/compiler/sram_base.py @@ -517,7 +517,7 @@ class sram_base(design, verilog, lef): else: continue clk_to_wlen_delays = control_logic.analytical_delay(corner, slew, load) - wlen_to_dout_delays = self.bank.analytical_delay(corner,slew,load) #port should probably be specified... + wlen_to_dout_delays = self.bank.analytical_delay(corner,slew,load,port) #port should probably be specified... all_delays = clk_to_wlen_delays+wlen_to_dout_delays total_delay = logical_effort.calculate_absolute_delay(all_delays) last_slew = .1*all_delays[-1].get_absolute_delay() #slew approximated as 10% of delay From c1411f422776bd5ea3de2b2cbb73898fa665a858 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Tue, 9 Apr 2019 12:26:54 -0700 Subject: [PATCH 11/37] Applied quick corner estimation to analytical delay. --- compiler/base/hierarchy_spice.py | 16 ++++++++++------ compiler/sram_base.py | 2 ++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/compiler/base/hierarchy_spice.py b/compiler/base/hierarchy_spice.py index 5f3245a8..cb2799f3 100644 --- a/compiler/base/hierarchy_spice.py +++ b/compiler/base/hierarchy_spice.py @@ -235,13 +235,8 @@ class spice(): modeling it as a resistance driving a capacitance """ swing_factor = abs(math.log(1-swing)) # time constant based on swing - proc,vdd,temp = corner - #FIXME: type of delay is needed to know which process to use. - proc_mult = max(self.get_process_delay_factor(proc)) - volt_mult = self.get_voltage_delay_factor(vdd) - temp_mult = self.get_temp_delay_factor(temp) delay = swing_factor * r * c #c is in ff and delay is in fs - delay = delay * proc_mult * volt_mult * temp_mult + delay = self.apply_corners_analytically(delay, corner) delay = delay * 0.001 #make the unit to ps # Output slew should be linear to input slew which is described @@ -254,6 +249,15 @@ class spice(): slew = delay * 0.6 * 2 + 0.005 * slew return delay_data(delay = delay, slew = slew) + def apply_corners_analytically(self, delay, corner): + """Multiply delay by corner factors""" + proc,vdd,temp = corner + #FIXME: type of delay is needed to know which process to use. + proc_mult = max(self.get_process_delay_factor(proc)) + volt_mult = self.get_voltage_delay_factor(vdd) + temp_mult = self.get_temp_delay_factor(temp) + return delay * proc_mult * volt_mult * temp_mult + def get_process_delay_factor(self, proc): """Returns delay increase estimate based off process Currently does +/-10 for fast/slow corners.""" diff --git a/compiler/sram_base.py b/compiler/sram_base.py index 6d859358..177f34c6 100644 --- a/compiler/sram_base.py +++ b/compiler/sram_base.py @@ -520,7 +520,9 @@ class sram_base(design, verilog, lef): wlen_to_dout_delays = self.bank.analytical_delay(corner,slew,load,port) #port should probably be specified... all_delays = clk_to_wlen_delays+wlen_to_dout_delays total_delay = logical_effort.calculate_absolute_delay(all_delays) + total_delay = self.apply_corners_analytically(total_delay, corner) last_slew = .1*all_delays[-1].get_absolute_delay() #slew approximated as 10% of delay + last_slew = self.apply_corners_analytically(last_slew, corner) delays[port] = self.return_delay(delay=total_delay, slew=last_slew) return delays From be20408fb26922ccab1ee0c4038c3f6ff2b104b6 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Mon, 1 Apr 2019 14:23:47 -0700 Subject: [PATCH 12/37] Rewrite add_contact to use layer directions. --- compiler/base/contact.py | 101 ++++++---- compiler/base/hierarchy_layout.py | 82 ++++---- compiler/base/route.py | 2 +- compiler/base/wire.py | 15 +- compiler/bitcells/pbitcell.py | 131 ++++++------ compiler/modules/bank.py | 15 +- compiler/modules/bank_select.py | 12 +- compiler/modules/bitcell_array.py | 2 +- compiler/modules/control_logic.py | 9 +- compiler/modules/hierarchical_decoder.py | 15 +- compiler/modules/hierarchical_predecode.py | 16 +- compiler/modules/replica_bitline.py | 186 ++++++++---------- .../modules/single_level_column_mux_array.py | 80 ++++---- compiler/modules/wordline_driver.py | 19 +- compiler/pgates/pgate.py | 33 ++-- compiler/pgates/pinv.py | 6 +- compiler/pgates/pnand2.py | 16 +- compiler/pgates/pnand3.py | 16 +- compiler/pgates/pnor2.py | 15 +- compiler/pgates/precharge.py | 36 ++-- compiler/pgates/ptx.py | 22 ++- compiler/pgates/single_level_column_mux.py | 13 +- compiler/sram_1bank.py | 9 +- compiler/sram_base.py | 3 +- compiler/sram_factory.py | 8 +- compiler/tests/03_contact_test.py | 28 ++- 26 files changed, 430 insertions(+), 460 deletions(-) diff --git a/compiler/base/contact.py b/compiler/base/contact.py index 39cb7b52..f4b14d79 100644 --- a/compiler/base/contact.py +++ b/compiler/base/contact.py @@ -9,44 +9,36 @@ class contact(hierarchy_design.hierarchy_design): """ Object for a contact shape with its conductor enclosures. Creates a contact array minimum active or poly enclosure and metal1 enclosure. - This class has enclosure on multiple sides of the contact whereas a via may - have extension on two or four sides. + This class has enclosure on two or four sides of the contact. + The direction specifies whether the first and second layer have asymmetric extension in the H or V direction. + The well/implant_type is an option to add a select/implant layer enclosing the contact. This is necessary to import layouts into Magic which requires the select to be in the same GDS hierarchy as the contact. """ - def __init__(self, layer_stack, dimensions=[1,1], implant_type=None, well_type=None, name=""): + def __init__(self, layer_stack, dimensions=(1,1), directions=("V","V"), implant_type=None, well_type=None, name=""): # This will ignore the name parameter since we can guarantee a unique name here - if implant_type or well_type: - name = "{0}_{1}_{2}_{3}x{4}_{5}{6}".format(layer_stack[0], - layer_stack[1], - layer_stack[2], - dimensions[0], - dimensions[1], - implant_type, - well_type) - - else: - name = "{0}_{1}_{2}_{3}x{4}".format(layer_stack[0], - layer_stack[1], - layer_stack[2], - dimensions[0], - dimensions[1]) - hierarchy_design.hierarchy_design.__init__(self, name) debug.info(4, "create contact object {0}".format(name)) - + self.add_comment("layers: {0}".format(layer_stack)) + self.add_comment("dimensions: {0}".format(dimensions)) + if implant_type or well_type: + self.add_comment("implant type: {0}\nwell_type: {1}".format(implant_type,well_type)) + self.layer_stack = layer_stack self.dimensions = dimensions + self.directions = directions self.offset = vector(0,0) self.implant_type = implant_type self.well_type = well_type - self.pins = [] # used for matching parm lengths + # Module does not have pins, but has empty pin list. + self.pins = [] self.create_layout() def create_layout(self): + self.setup_layers() self.setup_layout_constants() self.create_contact_array() @@ -63,6 +55,8 @@ class contact(hierarchy_design.hierarchy_design): debug.error(-1,"Must define both implant and well type or none at all.") def setup_layers(self): + """ Locally assign the layer names. """ + (first_layer, via_layer, second_layer) = self.layer_stack self.first_layer_name = first_layer self.via_layer_name = via_layer @@ -75,37 +69,58 @@ class contact(hierarchy_design.hierarchy_design): self.second_layer_name = second_layer def setup_layout_constants(self): + """ Determine the design rules for the enclosure layers """ + self.contact_width = drc("minwidth_{0}". format(self.via_layer_name)) contact_to_contact = drc("{0}_to_{0}".format(self.via_layer_name)) self.contact_pitch = self.contact_width + contact_to_contact + self.contact_array_width = self.contact_width + (self.dimensions[0] - 1) * self.contact_pitch self.contact_array_height = self.contact_width + (self.dimensions[1] - 1) * self.contact_pitch # DRC rules + # The extend rule applies to asymmetric enclosures in one direction. + # The enclosure rule applies to symmetric enclosure component. + first_layer_minwidth = drc("minwidth_{0}".format(self.first_layer_name)) - first_layer_minarea = drc("minarea_{0}".format(self.first_layer_name)) first_layer_enclosure = drc("{0}_enclosure_{1}".format(self.first_layer_name, self.via_layer_name)) first_layer_extend = drc("{0}_extend_{1}".format(self.first_layer_name, self.via_layer_name)) + second_layer_minwidth = drc("minwidth_{0}".format(self.second_layer_name)) - second_layer_minarea = drc("minarea_{0}".format(self.second_layer_name)) second_layer_enclosure = drc("{0}_enclosure_{1}".format(self.second_layer_name, self.via_layer_name)) second_layer_extend = drc("{0}_extend_{1}".format(self.second_layer_name, self.via_layer_name)) - self.first_layer_horizontal_enclosure = max((first_layer_minwidth - self.contact_array_width) / 2, - first_layer_enclosure) - self.first_layer_vertical_enclosure = max(utils.ceil((first_layer_minarea - / (self.contact_array_width + 2*self.first_layer_horizontal_enclosure) - - self.contact_array_height)/2), - (first_layer_minwidth - self.contact_array_height)/2, - first_layer_extend) - self.second_layer_horizontal_enclosure = max((second_layer_minwidth - self.contact_array_width)/2, - second_layer_enclosure) - self.second_layer_vertical_enclosure = max(utils.ceil((second_layer_minarea - / (self.contact_array_width + 2*self.second_layer_horizontal_enclosure) - - self.contact_array_height)/2), - (second_layer_minwidth - self.contact_array_height)/2, - second_layer_extend) + # In some technologies, the minimum width may be larger than the overlap requirement around the via, so + # check this for each dimension. + if self.directions[0] == "V": + self.first_layer_horizontal_enclosure = max(first_layer_enclosure, + (first_layer_minwidth - self.contact_array_width)/2) + self.first_layer_vertical_enclosure = max(first_layer_extend, + (first_layer_minwidth - self.contact_array_height)/2) + elif self.directions[0] == "H": + self.first_layer_horizontal_enclosure = max(first_layer_extend, + (first_layer_minwidth - self.contact_array_width)/2) + self.first_layer_vertical_enclosure = max(first_layer_enclosure, + (first_layer_minwidth - self.contact_array_height)/2) + else: + debug.error("Invalid first layer direction.", -1) + + # In some technologies, the minimum width may be larger than the overlap requirement around the via, so + # check this for each dimension. + if self.directions[1] == "V": + self.second_layer_horizontal_enclosure = max(second_layer_enclosure, + (second_layer_minwidth - self.contact_array_width)/2) + self.second_layer_vertical_enclosure = max(second_layer_extend, + (second_layer_minwidth - self.contact_array_height)/2) + elif self.directions[1] == "H": + self.second_layer_horizontal_enclosure = max(second_layer_extend, + (second_layer_minwidth - self.contact_array_height)/2) + self.second_layer_vertical_enclosure = max(second_layer_enclosure, + (second_layer_minwidth - self.contact_array_width)/2) + else: + debug.error("Invalid second layer direction.", -1) + def create_contact_array(self): """ Create the contact array at the origin""" @@ -169,10 +184,10 @@ class contact(hierarchy_design.hierarchy_design): from sram_factory import factory # This is not instantiated and used for calculations only. # These are static 1x1 contacts to reuse in all the design modules. -well = factory.create(module_type="contact", layer_stack=("active", "contact", "metal1")) -active = factory.create(module_type="contact", layer_stack=("active", "contact", "poly")) -poly = factory.create(module_type="contact", layer_stack=("poly", "contact", "metal1")) -m1m2 = factory.create(module_type="contact", layer_stack=("metal1", "via1", "metal2")) -m2m3 = factory.create(module_type="contact", layer_stack=("metal2", "via2", "metal3")) -m3m4 = factory.create(module_type="contact", layer_stack=("metal3", "via3", "metal4")) +well = factory.create(module_type="contact", layer_stack=("active", "contact", "metal1"), directions=("H","V")) +active = factory.create(module_type="contact", layer_stack=("active", "contact", "poly"), directions=("H","V")) +poly = factory.create(module_type="contact", layer_stack=("poly", "contact", "metal1"), directions=("V","H")) +m1m2 = factory.create(module_type="contact", layer_stack=("metal1", "via1", "metal2"), directions=("H","V")) +m2m3 = factory.create(module_type="contact", layer_stack=("metal2", "via2", "metal3"), directions=("V","H")) +m3m4 = factory.create(module_type="contact", layer_stack=("metal3", "via3", "metal4"), directions=("H","V")) diff --git a/compiler/base/hierarchy_layout.py b/compiler/base/hierarchy_layout.py index 26fc6de9..cd1f2765 100644 --- a/compiler/base/hierarchy_layout.py +++ b/compiler/base/hierarchy_layout.py @@ -355,75 +355,59 @@ class layout(): layer_stack=layers, position_list=coordinates) - def add_contact(self, layers, offset, size=[1,1], mirror="R0", rotate=0, implant_type=None, well_type=None): - """ This is just an alias for a via.""" - return self.add_via(layers=layers, - offset=offset, - size=size, - mirror=mirror, - rotate=rotate, - implant_type=implant_type, - well_type=well_type) + def get_preferred_direction(self, layer): + """ Return the preferred routing directions """ + if layer in ["metal1", "metal3", "metal5"]: + return "H" + elif layer in ["active", "poly", "metal2", "metal4"]: + return "V" + else: + return "N" - def add_contact_center(self, layers, offset, size=[1,1], mirror="R0", rotate=0, implant_type=None, well_type=None): - """ This is just an alias for a via.""" - return self.add_via_center(layers=layers, - offset=offset, - size=size, - mirror=mirror, - rotate=rotate, - implant_type=implant_type, - well_type=well_type) - - def add_via(self, layers, offset, size=[1,1], mirror="R0", rotate=0, implant_type=None, well_type=None): + + def add_via(self, layers, offset, size=[1,1], directions=None, implant_type=None, well_type=None): """ Add a three layer via structure. """ + + if directions==None: + directions = (self.get_preferred_direction(layers[0]), self.get_preferred_direction(layers[2])) + from sram_factory import factory via = factory.create(module_type="contact", layer_stack=layers, dimensions=size, + directions=directions, implant_type=implant_type, well_type=well_type) self.add_mod(via) inst=self.add_inst(name=via.name, mod=via, - offset=offset, - mirror=mirror, - rotate=rotate) + offset=offset) # We don't model the logical connectivity of wires/paths self.connect_inst([]) return inst - def add_via_center(self, layers, offset, size=[1,1], mirror="R0", rotate=0, implant_type=None, well_type=None): + def add_via_center(self, layers, offset, directions=None, size=[1,1], implant_type=None, well_type=None): """ Add a three layer via structure by the center coordinate accounting for mirroring and rotation. """ + + if directions==None: + directions = (self.get_preferred_direction(layers[0]), self.get_preferred_direction(layers[2])) + from sram_factory import factory via = factory.create(module_type="contact", layer_stack=layers, dimensions=size, + directions=directions, implant_type=implant_type, well_type=well_type) height = via.height width = via.width - debug.check(mirror=="R0","Use rotate to rotate vias instead of mirror.") - if rotate==0: - corrected_offset = offset + vector(-0.5*width,-0.5*height) - elif rotate==90: - corrected_offset = offset + vector(0.5*height,-0.5*width) - elif rotate==180: - corrected_offset = offset + vector(0.5*width,0.5*height) - elif rotate==270: - corrected_offset = offset + vector(-0.5*height,0.5*width) - else: - debug.error("Invalid rotation argument.",-1) - + corrected_offset = offset + vector(-0.5*width,-0.5*height) - #print(rotate,offset,"->",corrected_offset) self.add_mod(via) inst=self.add_inst(name=via.name, mod=via, - offset=corrected_offset, - mirror=mirror, - rotate=rotate) + offset=corrected_offset) # We don't model the logical connectivity of wires/paths self.connect_inst([]) return inst @@ -748,8 +732,7 @@ class layout(): mid = vector(trunk_offset.x, pin.center().y) self.add_path(layer_stack[0], [pin.center(), mid]) self.add_via_center(layers=layer_stack, - offset=mid, - rotate=90) + offset=mid) def create_channel_route(self, netlist, @@ -926,20 +909,27 @@ class layout(): - def add_power_pin(self, name, loc, rotate=90, start_layer="metal1"): + def add_power_pin(self, name, loc, vertical=False, start_layer="metal1"): """ Add a single power pin from M3 down to M1 at the given center location. The starting layer is specified to determine which vias are needed. """ - + if vertical: + direction=("V","V") + else: + direction=("H","H") + if start_layer=="metal1": self.add_via_center(layers=("metal1", "via1", "metal2"), offset=loc, - rotate=float(rotate)) + directions=direction) + + if start_layer=="metal1" or start_layer=="metal2": via=self.add_via_center(layers=("metal2", "via2", "metal3"), offset=loc, - rotate=float(rotate)) + directions=direction) + if start_layer=="metal3": self.add_layout_pin_rect_center(text=name, layer="metal3", diff --git a/compiler/base/route.py b/compiler/base/route.py index c6ce906b..86669acd 100644 --- a/compiler/base/route.py +++ b/compiler/base/route.py @@ -65,7 +65,7 @@ class route(design): for p0,p1 in plist: if p0.z != p1.z: # via via_size = [self.num_vias]*2 - self.obj.add_via_center(self.layer_stack,vector(p0.x,p0.y),size=via_size,rotate=90) + self.obj.add_via_center(self.layer_stack,vector(p0.x,p0.y),size=via_size) elif p0.x != p1.x and p0.y != p1.y: # diagonal! debug.error("Diagonal route! {}".format(self.path),-3) else: diff --git a/compiler/base/wire.py b/compiler/base/wire.py index 8bc250fa..12b493a1 100644 --- a/compiler/base/wire.py +++ b/compiler/base/wire.py @@ -62,18 +62,15 @@ class wire(wire_path): continue if a[1] == c[1]: continue - via_offset = [offset[0] + 0.5*c_height, - offset[1] - 0.5*c_width] - self.obj.add_via(layers=self.layer_stack, - offset=via_offset, - rotate=90) - corner_offset = [offset[0] - 0.5*(c_height + self.vert_layer_width), - offset[1] + 0.5*(c_width - self.horiz_layer_width)] + self.obj.add_via_center(layers=self.layer_stack, + offset=offset) def create_rectangles(self): - """ Create the actual rectangles on teh appropriate layers - using the position list of the corners. """ + """ + Create the actual rectangles on the appropriate layers + using the position list of the corners. + """ pl = self.position_list # position list for index in range(len(pl) - 1): if pl[index][0] != pl[index + 1][0]: diff --git a/compiler/bitcells/pbitcell.py b/compiler/bitcells/pbitcell.py index 94c294db..552042f5 100644 --- a/compiler/bitcells/pbitcell.py +++ b/compiler/bitcells/pbitcell.py @@ -198,7 +198,7 @@ class pbitcell(design.design): self.read_port_spacing = self.bitline_offset + self.m2_space # spacing between cross coupled inverters - self.inverter_to_inverter_spacing = contact.poly.height + self.m1_space + self.inverter_to_inverter_spacing = contact.poly.width + self.m1_space # calculations related to inverter connections inverter_pmos_contact_extension = 0.5*(self.inverter_pmos.active_contact.height - self.inverter_pmos.active_height) @@ -292,19 +292,20 @@ class pbitcell(design.design): self.add_path("poly", [self.inverter_nmos_right.get_pin("G").uc(), self.inverter_pmos_right.get_pin("G").bc()]) # connect output (drain/source) of inverters - self.add_path("metal1", [self.inverter_nmos_left.get_pin("D").uc(), self.inverter_pmos_left.get_pin("D").bc()], width=contact.well.second_layer_width) - self.add_path("metal1", [self.inverter_nmos_right.get_pin("S").uc(), self.inverter_pmos_right.get_pin("S").bc()], width=contact.well.second_layer_width) + self.add_path("metal1", [self.inverter_nmos_left.get_pin("D").uc(), self.inverter_pmos_left.get_pin("D").bc()]) + self.add_path("metal1", [self.inverter_nmos_right.get_pin("S").uc(), self.inverter_pmos_right.get_pin("S").bc()]) # add contacts to connect gate poly to drain/source metal1 (to connect Q to Q_bar) contact_offset_left = vector(self.inverter_nmos_left.get_pin("D").rc().x + 0.5*contact.poly.height, self.cross_couple_upper_ypos) - self.add_contact_center(layers=("poly", "contact", "metal1"), - offset=contact_offset_left, - rotate=90) + self.add_via_center(layers=("poly", "contact", "metal1"), + offset=contact_offset_left, + directions=("H","H")) + contact_offset_right = vector(self.inverter_nmos_right.get_pin("S").lc().x - 0.5*contact.poly.height, self.cross_couple_lower_ypos) - self.add_contact_center(layers=("poly", "contact", "metal1"), - offset=contact_offset_right, - rotate=90) + self.add_via_center(layers=("poly", "contact", "metal1"), + offset=contact_offset_right, + directions=("H","H")) # connect contacts to gate poly (cross couple connections) gate_offset_right = vector(self.inverter_nmos_right.get_pin("G").lc().x, contact_offset_left.y) @@ -395,7 +396,6 @@ class pbitcell(design.design): self.add_layout_pin_rect_center(text=self.rw_bl_names[k], layer="metal2", offset=self.rwbl_positions[k], - width=drc["minwidth_metal2"], height=self.height) rwbr_xpos = right_readwrite_transistor_xpos + self.readwrite_nmos.active_width + self.bitline_offset - 0.5*self.m2_width @@ -403,7 +403,6 @@ class pbitcell(design.design): self.add_layout_pin_rect_center(text=self.rw_br_names[k], layer="metal2", offset=self.rwbr_positions[k], - width=drc["minwidth_metal2"], height=self.height) # update furthest left and right transistor edges @@ -472,7 +471,6 @@ class pbitcell(design.design): self.add_layout_pin_rect_center(text=self.w_bl_names[k], layer="metal2", offset=self.wbl_positions[k], - width=drc["minwidth_metal2"], height=self.height) wbr_xpos = right_write_transistor_xpos + self.write_nmos.active_width + self.bitline_offset - 0.5*self.m2_width @@ -480,7 +478,6 @@ class pbitcell(design.design): self.add_layout_pin_rect_center(text=self.w_br_names[k], layer="metal2", offset=self.wbr_positions[k], - width=drc["minwidth_metal2"], height=self.height) # update furthest left and right transistor edges @@ -571,7 +568,6 @@ class pbitcell(design.design): self.add_layout_pin_rect_center(text=self.r_bl_names[k], layer="metal2", offset=self.rbl_positions[k], - width=drc["minwidth_metal2"], height=self.height) rbr_xpos = right_read_transistor_xpos + self.read_port_width + self.bitline_offset - 0.5*self.m2_width @@ -579,7 +575,6 @@ class pbitcell(design.design): self.add_layout_pin_rect_center(text=self.r_br_names[k], layer="metal2", offset=self.rbr_positions[k], - width=drc["minwidth_metal2"], height=self.height) def route_wordlines(self): @@ -613,21 +608,21 @@ class pbitcell(design.design): # first transistor on either side of the cross coupled inverters does not need to route to wordline on metal2 if (k == 0) or (k == 1): - self.add_contact_center(layers=("poly", "contact", "metal1"), - offset=port_contact_offset) + self.add_via_center(layers=("poly", "contact", "metal1"), + offset=port_contact_offset) self.add_path("poly", [gate_offset, port_contact_offset]) self.add_path("metal1", [port_contact_offset, wl_contact_offset]) else: - self.add_contact_center(layers=("poly", "contact", "metal1"), - offset=port_contact_offset) - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=port_contact_offset) + self.add_via_center(layers=("poly", "contact", "metal1"), + offset=port_contact_offset) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=port_contact_offset) - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=wl_contact_offset, - rotate=90) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=wl_contact_offset, + directions=("H","H")) self.add_path("poly", [gate_offset, port_contact_offset]) self.add_path("metal2", [port_contact_offset, wl_contact_offset]) @@ -662,8 +657,8 @@ class pbitcell(design.design): port_contact_offest = left_port_transistors[k].get_pin("S").center() bl_offset = vector(bl_positions[k].x, port_contact_offest.y) - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=port_contact_offest) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=port_contact_offest) self.add_path("metal2", [port_contact_offest, bl_offset], width=contact.m1m2.height) @@ -671,8 +666,8 @@ class pbitcell(design.design): port_contact_offest = right_port_transistors[k].get_pin("D").center() br_offset = vector(br_positions[k].x, port_contact_offest.y) - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=port_contact_offest) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=port_contact_offest) self.add_path("metal2", [port_contact_offest, br_offset], width=contact.m1m2.height) @@ -687,17 +682,17 @@ class pbitcell(design.design): nmos_contact_positions.append(self.read_access_nmos_right[k].get_pin("S").center()) for position in nmos_contact_positions: - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=position) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=position) if position.x > 0: contact_correct = 0.5*contact.m1m2.height else: contact_correct = -0.5*contact.m1m2.height supply_offset = vector(position.x + contact_correct, self.gnd_position.y) - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=supply_offset, - rotate=90) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=supply_offset, + directions=("H","H")) self.add_path("metal2", [position, supply_offset]) @@ -713,39 +708,35 @@ class pbitcell(design.design): for k in range(self.num_rw_ports): mid = vector(self.readwrite_nmos_left[k].get_pin("D").uc().x, self.cross_couple_lower_ypos) Q_pos = vector(self.inverter_nmos_left.get_pin("D").lx(), self.cross_couple_lower_ypos) - self.add_path("metal1", [self.readwrite_nmos_left[k].get_pin("D").uc(), mid+vector(0,0.5*self.m1_width)], width=contact.poly.second_layer_width) - self.add_path("metal1", [mid, Q_pos]) + self.add_path("metal1", [self.readwrite_nmos_left[k].get_pin("D").uc(), mid, Q_pos]) mid = vector(self.readwrite_nmos_right[k].get_pin("S").uc().x, self.cross_couple_lower_ypos) Q_bar_pos = vector(self.inverter_nmos_right.get_pin("S").rx(), self.cross_couple_lower_ypos) - self.add_path("metal1", [self.readwrite_nmos_right[k].get_pin("S").uc(), mid+vector(0,0.5*self.m1_width)], width=contact.poly.second_layer_width) - self.add_path("metal1", [mid, Q_bar_pos]) + self.add_path("metal1", [self.readwrite_nmos_right[k].get_pin("S").uc(), mid, Q_bar_pos]) def route_write_access(self): """ Routes read/write transistors to the storage component of the bitcell """ for k in range(self.num_w_ports): mid = vector(self.write_nmos_left[k].get_pin("D").uc().x, self.cross_couple_lower_ypos) Q_pos = vector(self.inverter_nmos_left.get_pin("D").lx(), self.cross_couple_lower_ypos) - self.add_path("metal1", [self.write_nmos_left[k].get_pin("D").uc(), mid+vector(0,0.5*self.m1_width)], width=contact.poly.second_layer_width) - self.add_path("metal1", [mid, Q_pos]) + self.add_path("metal1", [self.write_nmos_left[k].get_pin("D").uc(), mid, Q_pos]) mid = vector(self.write_nmos_right[k].get_pin("S").uc().x, self.cross_couple_lower_ypos) Q_bar_pos = vector(self.inverter_nmos_right.get_pin("S").rx(), self.cross_couple_lower_ypos) - self.add_path("metal1", [self.write_nmos_right[k].get_pin("S").uc(), mid+vector(0,0.5*self.m1_width)], width=contact.poly.second_layer_width) - self.add_path("metal1", [mid, Q_bar_pos]) + self.add_path("metal1", [self.write_nmos_right[k].get_pin("S").uc(), mid, Q_bar_pos]) def route_read_access(self): """ Routes read access transistors to the storage component of the bitcell """ # add poly to metal1 contacts for gates of the inverters - left_storage_contact = vector(self.inverter_nmos_left.get_pin("G").lc().x - drc["poly_to_polycontact"] - 0.5*contact.poly.width, self.cross_couple_upper_ypos) - self.add_contact_center(layers=("poly", "contact", "metal1"), - offset=left_storage_contact, - rotate=90) + left_storage_contact = vector(self.inverter_nmos_left.get_pin("G").lc().x - self.poly_to_polycontact - 0.5*contact.poly.width, self.cross_couple_upper_ypos) + self.add_via_center(layers=("poly", "contact", "metal1"), + offset=left_storage_contact, + directions=("H","H")) - right_storage_contact = vector(self.inverter_nmos_right.get_pin("G").rc().x + drc["poly_to_polycontact"] + 0.5*contact.poly.width, self.cross_couple_upper_ypos) - self.add_contact_center(layers=("poly", "contact", "metal1"), - offset=right_storage_contact, - rotate=90) + right_storage_contact = vector(self.inverter_nmos_right.get_pin("G").rc().x + self.poly_to_polycontact + 0.5*contact.poly.width, self.cross_couple_upper_ypos) + self.add_via_center(layers=("poly", "contact", "metal1"), + offset=right_storage_contact, + directions=("H","H")) inverter_gate_offset_left = vector(self.inverter_nmos_left.get_pin("G").lc().x, self.cross_couple_upper_ypos) self.add_path("poly", [left_storage_contact, inverter_gate_offset_left]) @@ -758,25 +749,23 @@ class pbitcell(design.design): for k in range(self.num_r_ports): port_contact_offset = self.read_access_nmos_left[k].get_pin("G").uc() + vector(0, self.gate_contact_yoffset - self.poly_extend_active) - self.add_contact_center(layers=("poly", "contact", "metal1"), - offset=port_contact_offset) + self.add_via_center(layers=("poly", "contact", "metal1"), + offset=port_contact_offset) self.add_path("poly", [self.read_access_nmos_left[k].get_pin("G").uc(), port_contact_offset]) mid = vector(self.read_access_nmos_left[k].get_pin("G").uc().x, self.cross_couple_upper_ypos) - self.add_path("metal1", [port_contact_offset, mid+vector(0,0.5*self.m1_width)], width=contact.poly.second_layer_width) - self.add_path("metal1", [mid, left_storage_contact]) + self.add_path("metal1", [port_contact_offset, mid, left_storage_contact]) port_contact_offset = self.read_access_nmos_right[k].get_pin("G").uc() + vector(0, self.gate_contact_yoffset - self.poly_extend_active) - self.add_contact_center(layers=("poly", "contact", "metal1"), - offset=port_contact_offset) + self.add_via_center(layers=("poly", "contact", "metal1"), + offset=port_contact_offset) self.add_path("poly", [self.read_access_nmos_right[k].get_pin("G").uc(), port_contact_offset]) mid = vector(self.read_access_nmos_right[k].get_pin("G").uc().x, self.cross_couple_upper_ypos) - self.add_path("metal1", [port_contact_offset, mid+vector(0,0.5*self.m1_width)], width=contact.poly.second_layer_width) - self.add_path("metal1", [mid, right_storage_contact]) + self.add_path("metal1", [port_contact_offset, mid, right_storage_contact]) def extend_well(self): """ @@ -795,13 +784,13 @@ class pbitcell(design.design): # extend nwell to encompass inverter_pmos # calculate offset of the left pmos well - inverter_well_xpos = -(self.inverter_nmos.active_width + 0.5*self.inverter_to_inverter_spacing) - drc["well_enclosure_active"] - inverter_well_ypos = self.inverter_nmos_ypos + self.inverter_nmos.active_height + self.inverter_gap - drc["well_enclosure_active"] + inverter_well_xpos = -(self.inverter_nmos.active_width + 0.5*self.inverter_to_inverter_spacing) - self.well_enclose_active + inverter_well_ypos = self.inverter_nmos_ypos + self.inverter_nmos.active_height + self.inverter_gap - self.well_enclose_active # calculate width of the two combined nwells # calculate height to encompass nimplant connected to vdd - well_width = 2*(self.inverter_nmos.active_width + 0.5*self.inverter_to_inverter_spacing) + 2*drc["well_enclosure_active"] - well_height = self.vdd_position.y - inverter_well_ypos + drc["well_enclosure_active"] + drc["minwidth_tx"] + well_width = 2*(self.inverter_nmos.active_width + 0.5*self.inverter_to_inverter_spacing) + 2*self.well_enclose_active + well_height = self.vdd_position.y - inverter_well_ypos + self.well_enclose_active + drc["minwidth_tx"] offset = [inverter_well_xpos,inverter_well_ypos] self.add_rect(layer="nwell", @@ -812,19 +801,19 @@ class pbitcell(design.design): # add well contacts # connect pimplants to gnd offset = vector(0, self.gnd_position.y) - self.add_contact_center(layers=("active", "contact", "metal1"), - offset=offset, - rotate=90, - implant_type="p", - well_type="p") + self.add_via_center(layers=("active", "contact", "metal1"), + offset=offset, + directions=("H","H"), + implant_type="p", + well_type="p") # connect nimplants to vdd offset = vector(0, self.vdd_position.y) - self.add_contact_center(layers=("active", "contact", "metal1"), - offset=offset, - rotate=90, - implant_type="n", - well_type="n") + self.add_via_center(layers=("active", "contact", "metal1"), + offset=offset, + directions=("H","H"), + implant_type="n", + well_type="n") def list_bitcell_pins(self, col, row): """ Creates a list of connections in the bitcell, indexed by column and row, for instance use in bitcell_array """ diff --git a/compiler/modules/bank.py b/compiler/modules/bank.py index 5b556660..e6ca09bc 100644 --- a/compiler/modules/bank.py +++ b/compiler/modules/bank.py @@ -800,14 +800,11 @@ class bank(design.design): bus_pos = vector(self.bus_xoffset[port][name].x, out_pos.y) self.add_path("metal3",[out_pos, bus_pos]) self.add_via_center(layers=("metal2", "via2", "metal3"), - offset=bus_pos, - rotate=90) + offset=bus_pos) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=out_pos, - rotate=90) + offset=out_pos) self.add_via_center(layers=("metal2", "via2", "metal3"), - offset=out_pos, - rotate=90) + offset=out_pos) def setup_routing_constraints(self): @@ -1197,8 +1194,7 @@ class bank(design.design): control_pos = vector(self.bus_xoffset[port][control_signal].x ,pin_pos.y) self.add_path("metal1", [control_pos, pin_pos]) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=control_pos, - rotate=90) + offset=control_pos) # clk to wordline_driver control_signal = self.prefix+"wl_en{}".format(port) @@ -1212,8 +1208,7 @@ class bank(design.design): control_pos = vector(control_x_offset, mid_pos.y) self.add_wire(("metal1","via1","metal2"),[pin_pos, mid_pos, control_pos]) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=control_pos, - rotate=90) + offset=control_pos) def analytical_delay(self, corner, slew, load, port): """ return analytical delay of the bank. This will track the clock to output path""" diff --git a/compiler/modules/bank_select.py b/compiler/modules/bank_select.py index 8e44dfa2..8d1d3da5 100644 --- a/compiler/modules/bank_select.py +++ b/compiler/modules/bank_select.py @@ -213,7 +213,7 @@ class bank_select(design.design): end=bank_sel_pin_end) self.add_via_center(layers=("metal2","via2","metal3"), offset=bank_sel_pin_end, - rotate=90) + directions=("H","H")) # bank_sel_bar is vertical wire bank_sel_bar_pin = self.bank_sel_inv.get_pin("Z") @@ -252,7 +252,7 @@ class bank_select(design.design): self.add_path("metal2",[logic_pos, input_pos]) self.add_via_center(layers=("metal1", "via1", "metal2"), offset=logic_pos, - rotate=90) + directions=("H","H")) # Connect the logic A input to the input pin @@ -260,10 +260,10 @@ class bank_select(design.design): input_pos = vector(0,logic_pos.y) self.add_via_center(layers=("metal1", "via1", "metal2"), offset=logic_pos, - rotate=90) + directions=("H","H")) self.add_via_center(layers=("metal2", "via2", "metal3"), offset=logic_pos, - rotate=90) + directions=("H","H")) self.add_layout_pin_segment_center(text=input_name, layer="metal3", start=input_pos, @@ -295,10 +295,10 @@ class bank_select(design.design): pin_pos = vector(xoffset, supply_pin.cy()) self.add_via_center(layers=("metal1", "via1", "metal2"), offset=pin_pos, - rotate=90) + directions=("H","H")) self.add_via_center(layers=("metal2", "via2", "metal3"), offset=pin_pos, - rotate=90) + directions=("H","H")) self.add_layout_pin_rect_center(text=n, layer="metal3", offset=pin_pos) diff --git a/compiler/modules/bitcell_array.py b/compiler/modules/bitcell_array.py index 79c68241..e53b72bb 100644 --- a/compiler/modules/bitcell_array.py +++ b/compiler/modules/bitcell_array.py @@ -128,7 +128,7 @@ class bitcell_array(design.design): inst = self.cell_inst[row,col] for pin_name in ["vdd", "gnd"]: for pin in inst.get_pins(pin_name): - self.add_power_pin(pin_name, pin.center(), 0, pin.layer) + self.add_power_pin(name=pin_name, loc=pin.center(), vertical=True, start_layer=pin.layer) def analytical_delay(self, corner, slew, load): """Returns relative delay of the bitline in the bitcell array""" diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index 4f654c5f..c976e5dc 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -615,11 +615,9 @@ class control_logic(design.design): mid1 = vector(in_pos.x,out_pos.y) self.add_wire(("metal3","via2","metal2"),[out_pos, mid1, in_pos]) self.add_via_center(layers=("metal1","via1","metal2"), - offset=out_pos, - rotate=90) + offset=out_pos) self.add_via_center(layers=("metal2","via2","metal3"), - offset=out_pos, - rotate=90) + offset=out_pos) def create_pen_row(self): if self.port_type == "rw": @@ -759,8 +757,7 @@ class control_logic(design.design): rail_pos = vector(self.rail_offsets["clk_buf"].x, mid_pos.y) self.add_wire(("metal1","via1","metal2"),[in_pos, mid_pos, rail_pos]) self.add_via_center(layers=("metal1","via1","metal2"), - offset=rail_pos, - rotate=90) + offset=rail_pos) self.copy_layout_pin(self.ctrl_dff_inst, "din_0", "csb") if (self.port_type == "rw"): diff --git a/compiler/modules/hierarchical_decoder.py b/compiler/modules/hierarchical_decoder.py index bd17b37e..5fcf27f0 100644 --- a/compiler/modules/hierarchical_decoder.py +++ b/compiler/modules/hierarchical_decoder.py @@ -213,11 +213,9 @@ class hierarchical_decoder(design.design): """ Route a vertical M2 coordinate to another vertical M2 coordinate to the predecode inputs """ self.add_via_center(layers=("metal2", "via2", "metal3"), - offset=input_offset, - rotate=90) + offset=input_offset) self.add_via_center(layers=("metal2", "via2", "metal3"), - offset=output_offset, - rotate=90) + offset=output_offset) self.add_path(("metal3"), [input_offset, output_offset]) @@ -575,8 +573,7 @@ class hierarchical_decoder(design.design): rail_pos = vector(self.predecode_rails[rail_name].x,pin.lc().y) self.add_path("metal1", [rail_pos, pin.lc()]) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=rail_pos, - rotate=90) + offset=rail_pos) def route_predecode_rail_m3(self, rail_name, pin): @@ -586,12 +583,10 @@ class hierarchical_decoder(design.design): mid_point = vector(pin.cx(), pin.cy()+self.inv.height/2) rail_pos = vector(self.predecode_rails[rail_name].x,mid_point.y) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=pin.center(), - rotate=90) + offset=pin.center()) self.add_wire(("metal3","via2","metal2"), [rail_pos, mid_point, pin.uc()]) self.add_via_center(layers=("metal2", "via2", "metal3"), - offset=rail_pos, - rotate=90) + offset=rail_pos) def analytical_delay(self, corner, slew, load = 0.0): diff --git a/compiler/modules/hierarchical_predecode.py b/compiler/modules/hierarchical_predecode.py index 147c3018..a13afd85 100644 --- a/compiler/modules/hierarchical_predecode.py +++ b/compiler/modules/hierarchical_predecode.py @@ -178,11 +178,9 @@ class hierarchical_predecode(design.design): a_pos = vector(self.decode_rails[a_pin].x,y_offset) self.add_path("metal1",[in_pos, a_pos]) self.add_via_center(layers = ("metal1", "via1", "metal2"), - offset=[self.input_rails[in_pin].x, y_offset], - rotate=90) + offset=[self.input_rails[in_pin].x, y_offset]) self.add_via_center(layers = ("metal1", "via1", "metal2"), - offset=[self.decode_rails[a_pin].x, y_offset], - rotate=90) + offset=[self.decode_rails[a_pin].x, y_offset]) def route_output_inverters(self): """ @@ -223,8 +221,7 @@ class hierarchical_predecode(design.design): rail_pos = vector(self.decode_rails[out_pin].x,y_offset) self.add_path("metal1", [inv_out_pos, right_pos, vector(right_pos.x, y_offset), rail_pos]) self.add_via_center(layers = ("metal1", "via1", "metal2"), - offset=rail_pos, - rotate=90) + offset=rail_pos) #route input @@ -232,8 +229,7 @@ class hierarchical_predecode(design.design): in_pos = vector(self.input_rails[in_pin].x,inv_in_pos.y) self.add_path("metal1", [in_pos, inv_in_pos]) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=in_pos, - rotate=90) + offset=in_pos) def route_nand_to_rails(self): @@ -254,8 +250,8 @@ class hierarchical_predecode(design.design): rail_pos = vector(self.decode_rails[rail_pin].x, pin_pos.y) self.add_path("metal1", [rail_pos, pin_pos]) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=rail_pos, - rotate=90) + offset=rail_pos) + diff --git a/compiler/modules/replica_bitline.py b/compiler/modules/replica_bitline.py index 8d93b257..c68ebc8f 100644 --- a/compiler/modules/replica_bitline.py +++ b/compiler/modules/replica_bitline.py @@ -39,8 +39,8 @@ class replica_bitline(design.design): #self.add_lvs_correspondence_points() # Extra pitch on top and right - self.width = self.rbl_inst.rx() - self.dc_inst.lx() + self.m2_pitch - self.height = max(self.rbl_inst.uy(), self.dc_inst.uy()) + self.m3_pitch + self.width = self.replica_column_inst.rx() - self.delay_chain_inst.lx() + self.m2_pitch + self.height = max(self.replica_column_inst.uy(), self.delay_chain_inst.uy()) + self.m3_pitch self.DRC_LVS() @@ -111,12 +111,12 @@ class replica_bitline(design.design): self.connect_inst(["vdd", "delayed_en", "bl0_0", "vdd"]) # add the well and poly contact - self.dc_inst=self.add_inst(name="delay_chain", - mod=self.delay_chain) + self.delay_chain_inst=self.add_inst(name="delay_chain", + mod=self.delay_chain) self.connect_inst(["en", "delayed_en", "vdd", "gnd"]) - self.rbc_inst=self.add_inst(name="bitcell", - mod=self.replica_bitcell) + self.replica_cell_inst=self.add_inst(name="bitcell", + mod=self.replica_bitcell) temp = [] for port in self.all_ports: temp.append("bl{}_0".format(port)) @@ -127,8 +127,8 @@ class replica_bitline(design.design): temp.append("gnd") self.connect_inst(temp) - self.rbl_inst=self.add_inst(name="load", - mod=self.rbl) + self.replica_column_inst=self.add_inst(name="load", + mod=self.rbl) temp = [] for port in self.all_ports: @@ -153,12 +153,12 @@ class replica_bitline(design.design): self.tx_inst.place(self.access_tx_offset) - self.dc_inst.place(self.delay_chain_offset) + self.delay_chain_inst.place(self.delay_chain_offset) - self.rbc_inst.place(offset=self.bitcell_offset, + self.replica_cell_inst.place(offset=self.bitcell_offset, mirror="MX") - self.rbl_inst.place(self.rbl_offset) + self.replica_column_inst.place(self.rbl_offset) def route(self): @@ -172,7 +172,7 @@ class replica_bitline(design.design): # Connect the WL and gnd pins directly to the center and right gnd rails for row in range(self.bitcell_loads): wl = self.wl_list[0]+"_{}".format(row) - pin = self.rbl_inst.get_pin(wl) + pin = self.replica_column_inst.get_pin(wl) # Route the connection to the right so that it doesn't interfere with the cells # Wordlines may be close to each other when tiled, so gnd connections are routed in opposite directions @@ -188,7 +188,7 @@ class replica_bitline(design.design): # for multiport, need to short wordlines to each other so they all connect to gnd. wl_last = self.wl_list[-1]+"_{}".format(row) - pin_last = self.rbl_inst.get_pin(wl_last) + pin_last = self.replica_column_inst.get_pin(wl_last) self.short_wordlines(pin, pin_last, "right", False, row, vector(self.m3_pitch,0)) def short_wordlines(self, wl_pin_a, wl_pin_b, pin_side, is_replica_cell, cell_row=0, offset_x_vec=None): @@ -229,10 +229,10 @@ class replica_bitline(design.design): for port in self.all_ports: if is_replica_cell: wl = self.wl_list[port] - pin = self.rbc_inst.get_pin(wl) + pin = self.replica_cell_inst.get_pin(wl) else: wl = self.wl_list[port]+"_{}".format(cell_row) - pin = self.rbl_inst.get_pin(wl) + pin = self.replica_column_inst.get_pin(wl) if pin_side == "left": self.add_path("metal1", [pin.lc()-correct_x, pin.lc()]) @@ -245,8 +245,8 @@ class replica_bitline(design.design): """ Propagate all vdd/gnd pins up to this level for all modules """ # These are the instances that every bank has - top_instances = [self.rbl_inst, - self.dc_inst] + top_instances = [self.replica_column_inst, + self.delay_chain_inst] for inst in top_instances: self.copy_layout_pin(inst, "vdd") self.copy_layout_pin(inst, "gnd") @@ -257,11 +257,11 @@ class replica_bitline(design.design): pin = self.rbl_inv_inst.get_pin("vdd") self.add_power_pin("vdd", pin.lc()) - pin=self.rbc_inst.get_pin("vdd") - self.add_power_pin("vdd", pin.center(), 0, pin.layer) + for pin in self.replica_cell_inst.get_pins("vdd"): + self.add_power_pin(name="vdd", loc=pin.center(), vertical=True, start_layer=pin.layer) - for pin in self.rbc_inst.get_pins("gnd"): - self.add_power_pin("gnd", pin.center()) + for pin in self.replica_cell_inst.get_pins("gnd"): + self.add_power_pin("gnd", pin.center(), vertical=True, start_layer=pin.layer) @@ -275,10 +275,10 @@ class replica_bitline(design.design): poly_offset = poly_pin.uc() # This centers the contact above the poly by one pitch contact_offset = poly_offset + vector(0,self.m2_pitch) - self.add_contact_center(layers=("poly", "contact", "metal1"), - offset=contact_offset) - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=contact_offset) + self.add_via_center(layers=("poly", "contact", "metal1"), + offset=contact_offset) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=contact_offset) self.add_segment_center(layer="poly", start=poly_offset, end=contact_offset) @@ -289,12 +289,12 @@ class replica_bitline(design.design): # height=self.delay_chain_offset.y-nwell_offset.y) # 2. Route delay chain output to access tx gate - delay_en_offset = self.dc_inst.get_pin("out").bc() + delay_en_offset = self.delay_chain_inst.get_pin("out").bc() self.add_path("metal2", [delay_en_offset,contact_offset]) # 3. Route the contact of previous route to the bitcell WL # route bend of previous net to bitcell WL - wl_offset = self.rbc_inst.get_pin(self.wl_list[0]).lc() + wl_offset = self.replica_cell_inst.get_pin(self.wl_list[0]).lc() wl_mid1 = wl_offset - vector(1.5*drc("minwidth_metal1"), 0) wl_mid2 = vector(wl_mid1.x, contact_offset.y) #xmid_point= 0.5*(wl_offset.x+contact_offset.x) @@ -305,8 +305,8 @@ class replica_bitline(design.design): # 4. Short wodlines if multiport wl = self.wl_list[0] wl_last = self.wl_list[-1] - pin = self.rbc_inst.get_pin(wl) - pin_last = self.rbc_inst.get_pin(wl_last) + pin = self.replica_cell_inst.get_pin(wl) + pin_last = self.replica_cell_inst.get_pin(wl_last) x_offset = self.short_wordlines(pin, pin_last, "left", True) #correct = vector(0.5*drc("minwidth_metal1"), 0) @@ -315,7 +315,7 @@ class replica_bitline(design.design): # DRAIN ROUTE # Route the drain to the vdd rail drain_offset = self.tx_inst.get_pin("D").center() - self.add_power_pin("vdd", drain_offset, rotate=0) + self.add_power_pin("vdd", drain_offset, vertical=True) # SOURCE ROUTE # Route the drain to the RBL inverter input @@ -325,7 +325,7 @@ class replica_bitline(design.design): # Route the connection of the source route to the RBL bitline (left) # Via will go halfway down from the bitcell - bl_offset = self.rbc_inst.get_pin(self.bl_list[0]).bc() + bl_offset = self.replica_cell_inst.get_pin(self.bl_list[0]).bc() # Route down a pitch so we can use M2 routing bl_down_offset = bl_offset - vector(0, self.m2_pitch) self.add_path("metal2",[source_offset, bl_down_offset, bl_offset]) @@ -344,12 +344,12 @@ class replica_bitline(design.design): def route_vdd(self): """ Route all signals connected to vdd """ - self.copy_layout_pin(self.dc_inst,"vdd") - self.copy_layout_pin(self.rbc_inst,"vdd") + self.copy_layout_pin(self.delay_chain_inst,"vdd") + self.copy_layout_pin(self.replica_cell_inst,"vdd") # Connect the WL and vdd pins directly to the center and right vdd rails # Connect RBL vdd pins to center and right rails - rbl_vdd_pins = self.rbl_inst.get_pins("vdd") + rbl_vdd_pins = self.replica_column_inst.get_pins("vdd") for pin in rbl_vdd_pins: if pin.layer != "metal1": continue @@ -360,11 +360,9 @@ class replica_bitline(design.design): start=start, end=end) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=start, - rotate=90) + offset=start) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=end, - rotate=90) + offset=end) # Add via for the inverter pin = self.rbl_inv_inst.get_pin("vdd") @@ -374,38 +372,34 @@ class replica_bitline(design.design): start=start, end=end) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=start, - rotate=90) + offset=start) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=end, - rotate=90) + offset=end) # Add via for the RBC - pin = self.rbc_inst.get_pin("vdd") + pin = self.replica_cell_inst.get_pin("vdd") start = pin.lc() end = vector(self.right_vdd_pin.cx(),pin.cy()) self.add_segment_center(layer="metal1", start=start, end=end) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=end, - rotate=90) + offset=end) # Create the RBL rails too - rbl_pins = self.rbl_inst.get_pins("vdd") + rbl_pins = self.replica_column_inst.get_pins("vdd") for pin in rbl_pins: if pin.layer != "metal1": continue # If above the delay line, route the full width left = vector(self.left_vdd_pin.cx(),pin.cy()) center = vector(self.center_vdd_pin.cx(),pin.cy()) - if pin.cy() > self.dc_inst.uy() + self.m1_pitch: + if pin.cy() > self.delay_chain_inst.uy() + self.m1_pitch: start = left self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=left, - rotate=90) + offset=left) else: start = center end = vector(self.right_vdd_pin.cx()+0.5*self.m1_width,pin.cy()) @@ -425,22 +419,22 @@ class replica_bitline(design.design): # Route the gnd lines from left to right # Add via for the delay chain - left_gnd_start = self.dc_inst.ll().scale(1,0) - vector(2*self.m2_pitch,0) - left_gnd_end = vector(left_gnd_start.x, self.rbl_inst.uy()+self.m2_pitch) + left_gnd_start = self.delay_chain_inst.ll().scale(1,0) - vector(2*self.m2_pitch,0) + left_gnd_end = vector(left_gnd_start.x, self.replica_column_inst.uy()+self.m2_pitch) self.left_gnd_pin=self.add_segment_center(layer="metal2", start=left_gnd_start, end=left_gnd_end) # Gnd line to the left of the replica bitline - center_gnd_start = self.rbc_inst.ll().scale(1,0) - vector(2*self.m2_pitch,0) - center_gnd_end = vector(center_gnd_start.x, self.rbl_inst.uy()+self.m2_pitch) + center_gnd_start = self.replica_cell_inst.ll().scale(1,0) - vector(2*self.m2_pitch,0) + center_gnd_end = vector(center_gnd_start.x, self.replica_column_inst.uy()+self.m2_pitch) self.center_gnd_pin=self.add_segment_center(layer="metal2", start=center_gnd_start, end=center_gnd_end) # Gnd line to the right of the replica bitline - right_gnd_start = self.rbc_inst.lr().scale(1,0) + vector(self.m2_pitch,0) - right_gnd_end = vector(right_gnd_start.x, self.rbl_inst.uy()+self.m2_pitch) + right_gnd_start = self.replica_cell_inst.lr().scale(1,0) + vector(self.m2_pitch,0) + right_gnd_end = vector(right_gnd_start.x, self.replica_column_inst.uy()+self.m2_pitch) self.right_gnd_pin=self.add_segment_center(layer="metal2", start=right_gnd_start, end=right_gnd_end) @@ -450,13 +444,13 @@ class replica_bitline(design.design): # Connect the WL and gnd pins directly to the center and right gnd rails for row in range(self.bitcell_loads): wl = self.wl_list[0]+"_{}".format(row) - pin = self.rbl_inst.get_pin(wl) + pin = self.replica_column_inst.get_pin(wl) if pin.layer != "metal1": continue # If above the delay line, route the full width left = vector(self.left_gnd_pin.cx(),pin.cy()) center = vector(self.center_gnd_pin.cx(),pin.cy()) - if pin.cy() > self.dc_inst.uy() + self.m1_pitch: + if pin.cy() > self.delay_chain_inst.uy() + self.m1_pitch: start = left else: start = center @@ -467,47 +461,41 @@ class replica_bitline(design.design): end=end) if start == left: self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=left, - rotate=90) + offset=left) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=center, - rotate=90) + offset=center) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=end, - rotate=90) + offset=end) - rbl_gnd_pins = self.rbl_inst.get_pins("gnd") - # Add L shapes to each vertical gnd rail - for pin in rbl_gnd_pins: - if pin.layer != "metal1": - continue - # If above the delay line, route the full width - left = vector(self.left_gnd_pin.cx(),pin.cy()) - center = vector(self.center_gnd_pin.cx(),pin.cy()) - if pin.cy() > self.dc_inst.uy() + self.m1_pitch: - start = left - else: - start = center - end = vector(self.right_gnd_pin.cx(),pin.cy()) - self.add_segment_center(layer="metal1", - start=start, - end=end) - if start == left: - self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=left, - rotate=90) - self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=center, - rotate=90) - self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=end, - rotate=90) + # rbl_gnd_pins = self.replica_column_inst.get_pins("gnd") + # # Add L shapes to each vertical gnd rail + # for pin in rbl_gnd_pins: + # if pin.layer != "metal1": + # continue + # # If above the delay line, route the full width + # left = vector(self.left_gnd_pin.cx(),pin.cy()) + # center = vector(self.center_gnd_pin.cx(),pin.cy()) + # if pin.cy() > self.delay_chain_inst.uy() + self.m1_pitch: + # start = left + # else: + # start = center + # end = vector(self.right_gnd_pin.cx(),pin.cy()) + # self.add_segment_center(layer="metal1", + # start=start, + # end=end) + # if start == left: + # self.add_via_center(layers=("metal1", "via1", "metal2"), + # offset=left) + # self.add_via_center(layers=("metal1", "via1", "metal2"), + # offset=center) + # self.add_via_center(layers=("metal1", "via1", "metal2"), + # offset=end) # Connect the gnd pins of the delay chain to the left rails - dc_gnd_pins = self.dc_inst.get_pins("gnd") + dc_gnd_pins = self.delay_chain_inst.get_pins("gnd") for pin in dc_gnd_pins: if pin.layer != "metal1": continue @@ -520,12 +508,10 @@ class replica_bitline(design.design): start=start, end=end) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=start, - rotate=90) + offset=start) # self.add_via_center(layers=("metal1", "via1", "metal2"), - # offset=end, - #rotate=90) + # offset=end) # Add via for the inverter @@ -536,16 +522,14 @@ class replica_bitline(design.design): # start=start, # end=end) # self.add_via_center(layers=("metal1", "via1", "metal2"), - # offset=start, - #rotate=90) + # offset=start) # self.add_via_center(layers=("metal1", "via1", "metal2"), - # offset=end, - #rotate=90) + # offset=end) # Create RBL rails too - rbl_pins = self.rbl_inst.get_pins("gnd") + rbl_pins = self.replica_column_inst.get_pins("gnd") for pin in rbl_pins: if pin.layer != "metal2": continue @@ -560,7 +544,7 @@ class replica_bitline(design.design): def add_layout_pins(self): """ Route the input and output signal """ - en_offset = self.dc_inst.get_pin("in").bc() + en_offset = self.delay_chain_inst.get_pin("in").bc() self.add_layout_pin_segment_center(text="en", layer="metal2", start=en_offset, @@ -587,7 +571,7 @@ class replica_bitline(design.design): height=pin.height(), width=pin.width()) - pin = self.dc_inst.get_pin("out") + pin = self.delay_chain_inst.get_pin("out") self.add_label_pin(text="delayed_en", layer=pin.layer, offset=pin.ll(), diff --git a/compiler/modules/single_level_column_mux_array.py b/compiler/modules/single_level_column_mux_array.py index d7829900..576d6ad7 100644 --- a/compiler/modules/single_level_column_mux_array.py +++ b/compiler/modules/single_level_column_mux_array.py @@ -131,8 +131,7 @@ class single_level_column_mux_array(design.design): self.add_layout_pin(text="sel_{}".format(j), layer="metal1", offset=offset, - width=self.mux.width * self.columns, - height=contact.m1m2.width) + width=self.mux.width * self.columns) def add_vertical_poly_rail(self): """ Connect the poly to the address rails """ @@ -149,73 +148,60 @@ class single_level_column_mux_array(design.design): offset = vector(gate_offset.x,self.get_pin("sel_{}".format(sel_index)).cy()) # Add the poly contact with a shift to account for the rotation self.add_via_center(layers=("metal1", "contact", "poly"), - offset=offset, - rotate=90) + offset=offset) self.add_path("poly", [offset, gate_offset]) def route_bitlines(self): """ Connect the output bit-lines to form the appropriate width mux """ for j in range(self.columns): - bl_offset = self.mux_inst[j].get_pin("bl_out").ll() - br_offset = self.mux_inst[j].get_pin("br_out").ll() + bl_offset = self.mux_inst[j].get_pin("bl_out").bc() + br_offset = self.mux_inst[j].get_pin("br_out").bc() bl_out_offset = bl_offset - vector(0,(self.words_per_row+1)*self.m1_pitch) br_out_offset = br_offset - vector(0,(self.words_per_row+2)*self.m1_pitch) + bl_out_offset_end = bl_out_offset + vector(0,self.route_height) + br_out_offset_end = br_out_offset + vector(0,self.route_height) + if (j % self.words_per_row) == 0: # Create the metal1 to connect the n-way mux output from the pass gate # These will be located below the select lines. Yes, these are M2 width # to ensure vias are enclosed and M1 min width rules. - width = contact.m1m2.width + self.mux.width * (self.words_per_row - 1) - self.add_rect(layer="metal1", - offset=bl_out_offset, - width=width, - height=drc("minwidth_metal2")) - self.add_rect(layer="metal1", - offset=br_out_offset, - width=width, - height=drc("minwidth_metal2")) - + width = self.m2_width + self.mux.width * (self.words_per_row - 1) + self.add_path("metal1", [bl_out_offset, bl_out_offset+vector(width,0)]) + self.add_path("metal1", [br_out_offset, br_out_offset+vector(width,0)]) # Extend the bitline output rails and gnd downward on the first bit of each n-way mux - self.add_layout_pin(text="bl_out_{}".format(int(j/self.words_per_row)), - layer="metal2", - offset=bl_out_offset.scale(1,0), - width=drc('minwidth_metal2'), - height=self.route_height) - self.add_layout_pin(text="br_out_{}".format(int(j/self.words_per_row)), - layer="metal2", - offset=br_out_offset.scale(1,0), - width=drc('minwidth_metal2'), - height=self.route_height) + self.add_layout_pin_segment_center(text="bl_out_{}".format(int(j/self.words_per_row)), + layer="metal2", + start=bl_out_offset, + end=bl_out_offset_end) + self.add_layout_pin_segment_center(text="br_out_{}".format(int(j/self.words_per_row)), + layer="metal2", + start=br_out_offset, + end=br_out_offset_end) + # This via is on the right of the wire - self.add_via(layers=("metal1", "via1", "metal2"), - offset=bl_out_offset + vector(contact.m1m2.height,0), - rotate=90) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=bl_out_offset) + # This via is on the left of the wire - self.add_via(layers=("metal1", "via1", "metal2"), - offset= br_out_offset, - rotate=90) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=br_out_offset) else: - self.add_rect(layer="metal2", - offset=bl_out_offset, - width=drc('minwidth_metal2'), - height=self.route_height-bl_out_offset.y) + self.add_path("metal2", [ bl_out_offset, bl_out_offset_end]) + self.add_path("metal2", [ br_out_offset, br_out_offset_end]) + # This via is on the right of the wire - self.add_via(layers=("metal1", "via1", "metal2"), - offset=bl_out_offset + vector(contact.m1m2.height,0), - rotate=90) - self.add_rect(layer="metal2", - offset=br_out_offset, - width=drc('minwidth_metal2'), - height=self.route_height-br_out_offset.y) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=bl_out_offset) # This via is on the left of the wire - self.add_via(layers=("metal1", "via1", "metal2"), - offset= br_out_offset, - rotate=90) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=br_out_offset) + def analytical_delay(self, corner, slew, load): from tech import parameter @@ -230,4 +216,4 @@ class single_level_column_mux_array(design.design): from tech import parameter #Bitcell drain load being used to estimate mux NMOS drain load drain_load = logical_effort.convert_farad_to_relative_c(parameter['bitcell_drain_cap']) - return drain_load \ No newline at end of file + return drain_load diff --git a/compiler/modules/wordline_driver.py b/compiler/modules/wordline_driver.py index 6ddba9de..977c8789 100644 --- a/compiler/modules/wordline_driver.py +++ b/compiler/modules/wordline_driver.py @@ -81,21 +81,13 @@ class wordline_driver(design.design): (gate_offset, y_dir) = self.get_gate_offset(0, self.inv.height, num) # Route both supplies - for n in ["vdd", "gnd"]: - supply_pin = self.inv2_inst[num].get_pin(n) + for name in ["vdd", "gnd"]: + supply_pin = self.inv2_inst[num].get_pin(name) # Add pins in two locations for xoffset in [a_xoffset, b_xoffset]: pin_pos = vector(xoffset, supply_pin.cy()) - self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=pin_pos, - rotate=90) - self.add_via_center(layers=("metal2", "via2", "metal3"), - offset=pin_pos, - rotate=90) - self.add_layout_pin_rect_center(text=n, - layer="metal3", - offset=pin_pos) + self.add_power_pin(name, pin_pos) @@ -193,13 +185,14 @@ class wordline_driver(design.design): start=input_offset, end=mid_via_offset) self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=mid_via_offset) + offset=mid_via_offset, + directions=("V","V")) # now connect to the nand2 B self.add_path("metal2", [mid_via_offset, b_pos]) self.add_via_center(layers=("metal1", "via1", "metal2"), offset=b_pos - vector(0.5*contact.m1m2.height,0), - rotate=90) + directions=("H","H")) # output each WL on the right diff --git a/compiler/pgates/pgate.py b/compiler/pgates/pgate.py index 2f641da9..25ea591f 100644 --- a/compiler/pgates/pgate.py +++ b/compiler/pgates/pgate.py @@ -42,7 +42,7 @@ class pgate(design.design): height=height, width=source_pin.width()) - def route_input_gate(self, pmos_inst, nmos_inst, ypos, name, position="left", rotate=90): + def route_input_gate(self, pmos_inst, nmos_inst, ypos, name, position="left", rotate=False): """ Route the input gate to the left side of the cell for access. Position specifies to place the contact the left, center, or right of gate. """ @@ -61,14 +61,16 @@ class pgate(design.design): left_gate_offset = vector(nmos_gate_pin.lx(),ypos) # Center is completely symmetric. - if rotate==90: + if rotate: contact_width = contact.poly.height contact_m1_width = contact.poly.second_layer_height contact_m1_height = contact.poly.second_layer_width + directions = ("H","V") else: contact_width = contact.poly.width contact_m1_width = contact.poly.second_layer_width contact_m1_height = contact.poly.second_layer_height + directions = ("V","H") if position=="center": contact_offset = left_gate_offset + vector(0.5*self.poly_width, 0) @@ -79,9 +81,12 @@ class pgate(design.design): else: debug.error("Invalid contact placement option.", -1) - self.add_contact_center(layers=("poly", "contact", "metal1"), - offset=contact_offset, - rotate=rotate) + # Non-preferred direction via + + self.add_via_center(layers=("poly", "contact", "metal1"), + offset=contact_offset, + directions=directions) + # self.add_layout_pin_segment_center(text=name, # layer="metal1", # start=left_gate_offset.scale(0,1), @@ -145,10 +150,11 @@ class pgate(design.design): # Offset by half a contact in x and y contact_offset += vector(0.5*pmos.active_contact.first_layer_width, 0.5*pmos.active_contact.first_layer_height) - self.nwell_contact=self.add_contact_center(layers=layer_stack, - offset=contact_offset, - implant_type="n", - well_type="n") + self.nwell_contact=self.add_via_center(layers=layer_stack, + offset=contact_offset, + directions=("H","V"), + implant_type="n", + well_type="n") self.add_rect_center(layer="metal1", offset=contact_offset + vector(0,0.5*(self.height-contact_offset.y)), width=self.nwell_contact.mod.second_layer_width, @@ -191,10 +197,11 @@ class pgate(design.design): # Offset by half a contact contact_offset += vector(0.5*nmos.active_contact.first_layer_width, 0.5*nmos.active_contact.first_layer_height) - self.pwell_contact=self.add_contact_center(layers=layer_stack, - offset=contact_offset, - implant_type="p", - well_type="p") + self.pwell_contact=self.add_via_center(layers=layer_stack, + offset=contact_offset, + directions=("H","V"), + implant_type="p", + well_type="p") self.add_rect_center(layer="metal1", offset=contact_offset.scale(1,0.5), width=self.pwell_contact.mod.second_layer_width, diff --git a/compiler/pgates/pinv.py b/compiler/pgates/pinv.py index f00e9af7..5f61d200 100644 --- a/compiler/pgates/pinv.py +++ b/compiler/pgates/pinv.py @@ -58,7 +58,7 @@ class pinv(pgate.pgate): self.add_well_contacts() self.extend_wells(self.well_pos) self.connect_rails() - self.route_input_gate(self.pmos_inst, self.nmos_inst, self.output_pos.y, "A", rotate=0) + self.route_input_gate(self.pmos_inst, self.nmos_inst, self.output_pos.y, "A") self.route_outputs() def add_pins(self): @@ -222,8 +222,8 @@ class pinv(pgate.pgate): pmos_drain_pin = self.pmos_inst.get_pin("D") # Pick point at right most of NMOS and connect down to PMOS - nmos_drain_pos = nmos_drain_pin.lr() - vector(0.5*self.m1_width,0) - pmos_drain_pos = vector(nmos_drain_pos.x, pmos_drain_pin.bc().y) + nmos_drain_pos = nmos_drain_pin.lr() + pmos_drain_pos = vector(nmos_drain_pos.x, pmos_drain_pin.uc().y) self.add_path("metal1",[nmos_drain_pos,pmos_drain_pos]) # Remember the mid for the output diff --git a/compiler/pgates/pnand2.py b/compiler/pgates/pnand2.py index 95a9bc28..168bfaf2 100644 --- a/compiler/pgates/pnand2.py +++ b/compiler/pgates/pnand2.py @@ -203,13 +203,15 @@ class pnand2(pgate.pgate): mid1_offset = vector(out_offset.x, top_pin_offset.y) mid2_offset = vector(out_offset.x, bottom_pin_offset.y) - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=pmos_pin.center()) - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=nmos_pin.center()) - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=out_offset, - rotate=90) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=pmos_pin.center(), + directions=("V","H")) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=nmos_pin.center(), + directions=("V","H")) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=out_offset) + # PMOS1 to mid-drain to NMOS2 drain self.add_path("metal2",[top_pin_offset, mid1_offset, out_offset, mid2_offset, bottom_pin_offset]) diff --git a/compiler/pgates/pnand3.py b/compiler/pgates/pnand3.py index d0c37b55..95d02f29 100644 --- a/compiler/pgates/pnand3.py +++ b/compiler/pgates/pnand3.py @@ -213,12 +213,12 @@ class pnand3(pgate.pgate): nmos3_pin = self.nmos3_inst.get_pin("D") # Go up to metal2 for ease on all output pins - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=pmos1_pin.center()) - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=pmos3_pin.center()) - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=nmos3_pin.center()) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=pmos1_pin.center()) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=pmos3_pin.center()) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=nmos3_pin.center()) # PMOS3 and NMOS3 are drain aligned self.add_path("metal2",[pmos3_pin.bc(), nmos3_pin.uc()]) @@ -227,8 +227,8 @@ class pnand3(pgate.pgate): self.add_path("metal2",[pmos1_pin.bc(), mid_offset, nmos3_pin.uc()]) # This extends the output to the edge of the cell - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=mid_offset) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=mid_offset) self.add_layout_pin_rect_center(text="Z", layer="metal1", offset=mid_offset, diff --git a/compiler/pgates/pnor2.py b/compiler/pgates/pnor2.py index 8a5c80d4..125261d1 100644 --- a/compiler/pgates/pnor2.py +++ b/compiler/pgates/pnor2.py @@ -184,11 +184,11 @@ class pnor2(pgate.pgate): nmos2_pin = self.nmos2_inst.get_pin("D") # Go up to metal2 for ease on all output pins - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=pmos_pin.center()) - m1m2_contact=self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=nmos_pin.center(), - rotate=90) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=pmos_pin.center()) + m1m2_contact=self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=nmos_pin.center()) + mid1_offset = vector(pmos_pin.center().x,nmos2_pin.center().y) mid2_offset = vector(pmos_pin.center().x,self.inputA_yoffset) @@ -198,9 +198,8 @@ class pnor2(pgate.pgate): self.add_path("metal2",[pmos_pin.bc(), mid2_offset, mid3_offset]) self.add_path("metal2",[nmos_pin.rc(), mid1_offset, mid2_offset]) # This extends the output to the edge of the cell - self.add_contact_center(layers=("metal1", "via1", "metal2"), - offset=mid3_offset, - rotate=90) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=mid3_offset) self.add_layout_pin_rect_center(text="Z", layer="metal1", offset=mid3_offset, diff --git a/compiler/pgates/precharge.py b/compiler/pgates/precharge.py index cea9c845..5a7672d6 100644 --- a/compiler/pgates/precharge.py +++ b/compiler/pgates/precharge.py @@ -75,7 +75,7 @@ class precharge(pgate.pgate): self.add_path("metal1", [pmos_pin.uc(), pmos_vdd_pos]) # Add vdd pin above the transistor - self.add_power_pin("vdd", pmos_pin.center(), rotate=0) + self.add_power_pin("vdd", pmos_pin.center(), vertical=True) def create_ptx(self): @@ -149,9 +149,9 @@ class precharge(pgate.pgate): # adds the en contact to connect the gates to the en rail on metal1 offset = self.lower_pmos_inst.get_pin("G").ul() + vector(0,0.5*self.poly_space) - self.add_contact_center(layers=("poly", "contact", "metal1"), - offset=offset, - rotate=90) + self.add_via_center(layers=("poly", "contact", "metal1"), + offset=offset) + # adds the en rail on metal1 self.add_layout_pin_segment_center(text="en_bar", @@ -168,10 +168,10 @@ class precharge(pgate.pgate): # adds the contact from active to metal1 well_contact_pos = self.upper_pmos1_inst.get_pin("D").center().scale(1,0) \ + vector(0, self.upper_pmos1_inst.uy() + contact.well.height/2 + drc("well_extend_active")) - self.add_contact_center(layers=("active", "contact", "metal1"), - offset=well_contact_pos, - implant_type="n", - well_type="n") + self.add_via_center(layers=("active", "contact", "metal1"), + offset=well_contact_pos, + implant_type="n", + well_type="n") # leave an extra pitch for the height self.height = well_contact_pos.y + contact.well.height + self.m1_pitch @@ -225,16 +225,20 @@ class precharge(pgate.pgate): lower_pin = self.lower_pmos_inst.get_pin("S") # BL goes up to M2 at the transistor - self.bl_contact=self.add_contact_center(layers=stack, - offset=upper_pin.center()) - self.add_contact_center(layers=stack, - offset=lower_pin.center()) + self.bl_contact=self.add_via_center(layers=stack, + offset=upper_pin.center(), + directions=("V","V")) + self.add_via_center(layers=stack, + offset=lower_pin.center(), + directions=("V","V")) # BR routes over on M1 first - self.add_contact_center(layers=stack, - offset = vector(self.br_pin.cx(), upper_pin.cy())) - self.add_contact_center(layers=stack, - offset = vector(self.br_pin.cx(), lower_pin.cy())) + self.add_via_center(layers=stack, + offset = vector(self.br_pin.cx(), upper_pin.cy()), + directions=("V","V")) + self.add_via_center(layers=stack, + offset = vector(self.br_pin.cx(), lower_pin.cy()), + directions=("V","V")) def connect_pmos_m1(self, pmos_pin, bit_pin): """ diff --git a/compiler/pgates/ptx.py b/compiler/pgates/ptx.py index 3a127454..36fda7a0 100644 --- a/compiler/pgates/ptx.py +++ b/compiler/pgates/ptx.py @@ -326,11 +326,12 @@ class ptx(design.design): [source_positions,drain_positions] = self.get_contact_positions() for pos in source_positions: - contact=self.add_contact_center(layers=("active", "contact", "metal1"), - offset=pos, - size=(1, self.num_contacts), - implant_type=self.implant_type, - well_type=self.well_type) + contact=self.add_via_center(layers=("active", "contact", "metal1"), + offset=pos, + size=(1, self.num_contacts), + directions=("H","V"), + implant_type=self.implant_type, + well_type=self.well_type) self.add_layout_pin_rect_center(text="S", layer="metal1", offset=pos, @@ -339,11 +340,12 @@ class ptx(design.design): for pos in drain_positions: - contact=self.add_contact_center(layers=("active", "contact", "metal1"), - offset=pos, - size=(1, self.num_contacts), - implant_type=self.implant_type, - well_type=self.well_type) + contact=self.add_via_center(layers=("active", "contact", "metal1"), + offset=pos, + size=(1, self.num_contacts), + directions=("H","V"), + implant_type=self.implant_type, + well_type=self.well_type) self.add_layout_pin_rect_center(text="D", layer="metal1", offset=pos, diff --git a/compiler/pgates/single_level_column_mux.py b/compiler/pgates/single_level_column_mux.py index 2bdf5bef..d652fa9f 100644 --- a/compiler/pgates/single_level_column_mux.py +++ b/compiler/pgates/single_level_column_mux.py @@ -127,13 +127,18 @@ class single_level_column_mux(design.design): # Add vias to bl, br_out, nmos_upper/S, nmos_lower/D self.add_via_center(layers=("metal1","via1","metal2"), - offset=bl_pin.bc()) + offset=bl_pin.bc(), + directions=("V","V")) self.add_via_center(layers=("metal1","via1","metal2"), - offset=br_out_pin.uc()) + offset=br_out_pin.uc(), + directions=("V","V")) self.add_via_center(layers=("metal1","via1","metal2"), - offset=nmos_upper_s_pin.center()) + offset=nmos_upper_s_pin.center(), + directions=("V","V")) self.add_via_center(layers=("metal1","via1","metal2"), - offset=nmos_lower_d_pin.center()) + offset=nmos_lower_d_pin.center(), + directions=("V","V")) + # bl -> nmos_upper/D on metal1 # bl_out -> nmos_upper/S on metal2 diff --git a/compiler/sram_1bank.py b/compiler/sram_1bank.py index cbfec653..5f334cc7 100644 --- a/compiler/sram_1bank.py +++ b/compiler/sram_1bank.py @@ -200,8 +200,7 @@ class sram_1bank(sram_base): clk_steiner_pos = vector(mid1_pos.x, control_clk_buf_pos.y) self.add_path("metal1", [control_clk_buf_pos, clk_steiner_pos]) self.add_via_center(layers=("metal1","via1","metal2"), - offset=clk_steiner_pos, - rotate=90) + offset=clk_steiner_pos) # Note, the via to the control logic is taken care of above self.add_wire(("metal3","via2","metal2"),[row_addr_clk_pos, mid1_pos, clk_steiner_pos]) @@ -233,8 +232,7 @@ class sram_1bank(sram_base): dest_pin = self.bank_inst.get_pin(signal+"{}".format(port)) self.connect_rail_from_left_m2m3(src_pin, dest_pin) self.add_via_center(layers=("metal1","via1","metal2"), - offset=src_pin.rc(), - rotate=90) + offset=src_pin.rc()) def route_row_addr_dff(self): @@ -250,8 +248,7 @@ class sram_1bank(sram_base): mid_pos = vector(bank_pos.x,flop_pos.y) self.add_wire(("metal3","via2","metal2"),[flop_pos, mid_pos,bank_pos]) self.add_via_center(layers=("metal2","via2","metal3"), - offset=flop_pos, - rotate=90) + offset=flop_pos) def route_col_addr_dff(self): """ Connect the output of the row flops to the bank pins """ diff --git a/compiler/sram_base.py b/compiler/sram_base.py index 177f34c6..90d9771a 100644 --- a/compiler/sram_base.py +++ b/compiler/sram_base.py @@ -469,8 +469,7 @@ class sram_base(design, verilog, lef): out_pos = dest_pin.center() self.add_wire(("metal3","via2","metal2"),[in_pos, vector(out_pos.x,in_pos.y),out_pos]) self.add_via_center(layers=("metal2","via2","metal3"), - offset=src_pin.rc(), - rotate=90) + offset=src_pin.rc()) def connect_rail_from_left_m2m1(self, src_pin, dest_pin): diff --git a/compiler/sram_factory.py b/compiler/sram_factory.py index 1b4041d4..fcb985ff 100644 --- a/compiler/sram_factory.py +++ b/compiler/sram_factory.py @@ -54,12 +54,15 @@ class sram_factory: self.objects[module_type] = [] # Either retreive a previous object or create a new one + #print("new",kwargs) for obj in self.objects[module_type]: (obj_kwargs, obj_item) = obj # Must have the same dictionary exactly (conservative) if obj_kwargs == kwargs: - debug.info(3, "Existing module: type={0} name={1} kwargs={2}".format(module_type, obj_item.name, str(kwargs))) + #debug.info(0, "Existing module: type={0} name={1} kwargs={2}".format(module_type, obj_item.name, str(kwargs))) return obj_item + #else: + # print("obj",obj_kwargs) # Use the default name if there are default arguments # This is especially for library cells so that the spice and gds files can be found. @@ -67,7 +70,8 @@ class sram_factory: # Create a unique name and increment the index module_name = "{0}_{1}".format(module_name, self.module_indices[module_type]) self.module_indices[module_type] += 1 - #debug.info(1, "New module: type={0} name={1} kwargs={2}".format(module_type,module_name,str(kwargs))) + + #debug.info(0, "New module: type={0} name={1} kwargs={2}".format(module_type,module_name,str(kwargs))) obj = mod(name=module_name,**kwargs) self.objects[module_type].append((kwargs,obj)) return obj diff --git a/compiler/tests/03_contact_test.py b/compiler/tests/03_contact_test.py index 29d7ca0e..cbd309dc 100755 --- a/compiler/tests/03_contact_test.py +++ b/compiler/tests/03_contact_test.py @@ -7,36 +7,50 @@ 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 contact_test(openram_test): def runTest(self): globals.init_openram("config_{0}".format(OPTS.tech_name)) - import contact - - for layer_stack in [("poly", "contact", "metal1"), ("metal1", "via1", "metal2")]: + for layer_stack in [("metal1", "via1", "metal2"), ("poly", "contact", "metal1")]: stack_name = ":".join(map(str, layer_stack)) # Check single 1 x 1 contact" debug.info(2, "1 x 1 {} test".format(stack_name)) - c = contact.contact(layer_stack, (1, 1)) + c = factory.create(module_type="contact", layer_stack=layer_stack, dimensions=(1, 1)) + self.local_drc_check(c) + + # Check single 1 x 1 contact" + debug.info(2, "1 x 1 {} test".format(stack_name)) + c = factory.create(module_type="contact", layer_stack=layer_stack, dimensions=(1, 1), directions=("H","V")) self.local_drc_check(c) + # Check single x 1 contact" + debug.info(2, "1 x 1 {} test".format(stack_name)) + c = factory.create(module_type="contact", layer_stack=layer_stack, dimensions=(1, 1), directions=("H","H")) + self.local_drc_check(c) + + # Check single 1 x 1 contact" + debug.info(2, "1 x 1 {} test".format(stack_name)) + c = factory.create(module_type="contact", layer_stack=layer_stack, dimensions=(1, 1), directions=("V","V")) + self.local_drc_check(c) + # check vertical array with one in the middle and two ends debug.info(2, "1 x 3 {} test".format(stack_name)) - c = contact.contact(layer_stack, (1, 3)) + c = factory.create(module_type="contact", layer_stack=layer_stack, dimensions=(1, 3)) self.local_drc_check(c) # check horizontal array with one in the middle and two ends debug.info(2, "3 x 1 {} test".format(stack_name)) - c = contact.contact(layer_stack, (3, 1)) + c = factory.create(module_type="contact", layer_stack=layer_stack, dimensions=(3, 1)) self.local_drc_check(c) # check 3x3 array for all possible neighbors debug.info(2, "3 x 3 {} test".format(stack_name)) - c = contact.contact(layer_stack, (3, 3)) + c = factory.create(module_type="contact", layer_stack=layer_stack, dimensions=(3, 3)) self.local_drc_check(c) globals.end_openram() From a35bf29bdd1a474bee4f1c801ffd772334e79042 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Wed, 17 Apr 2019 13:41:17 -0700 Subject: [PATCH 13/37] Improve print output for debugging layout objects. --- compiler/base/design.py | 10 ---------- compiler/base/geometry.py | 4 ++-- compiler/base/hierarchy_design.py | 9 ++++++++- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/compiler/base/design.py b/compiler/base/design.py index 4e76b40a..aace6170 100644 --- a/compiler/base/design.py +++ b/compiler/base/design.py @@ -95,13 +95,3 @@ class design(hierarchy_design): total_module_power += inst.mod.analytical_power(corner, load) return total_module_power - def __str__(self): - """ override print function output """ - pins = ",".join(self.pins) - insts = [" {}".format(x) for x in self.insts] - objs = [" {}".format(x) for x in self.objs] - s = "********** design {0} **********\n".format(self.name) - s += "\n pins ({0})={1}\n".format(len(self.pins), pins) - s += "\n objs ({0})=\n{1}".format(len(self.objs), "\n".join(objs)) - s += "\n insts ({0})=\n{1}\n".format(len(self.insts), "\n".join(insts)) - return s diff --git a/compiler/base/geometry.py b/compiler/base/geometry.py index 838828df..1402fd5a 100644 --- a/compiler/base/geometry.py +++ b/compiler/base/geometry.py @@ -371,8 +371,8 @@ class rectangle(geometry): def __str__(self): """ override print function output """ - return "rect: @" + str(self.offset) + " " + str(self.width) + "x" + str(self.height) + " layer=" +str(self.layerNumber) + return self.__repr__() def __repr__(self): """ override print function output """ - return "( rect: @" + str(self.offset) + " " + str(self.width) + "x" + str(self.height) + " layer=" + str(self.layerNumber) + " )" + return "( rect: @" + str(self.offset) + " WxH=" + str(self.width) + "x" + str(self.height) + " layer=" + str(self.layerNumber) + " )" diff --git a/compiler/base/hierarchy_design.py b/compiler/base/hierarchy_design.py index 6a6003a2..4f72d8f6 100644 --- a/compiler/base/hierarchy_design.py +++ b/compiler/base/hierarchy_design.py @@ -100,7 +100,14 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): def __str__(self): """ override print function output """ - return "design: " + self.name + pins = ",".join(self.pins) + insts = [" {}".format(x) for x in self.insts] + objs = [" {}".format(x) for x in self.objs] + s = "********** design {0} **********".format(self.name) + s += "\n pins ({0})={1}\n".format(len(self.pins), pins) + s += "\n objs ({0})=\n{1}\n".format(len(self.objs), "\n".join(objs)) + s += "\n insts ({0})=\n{1}\n".format(len(self.insts), "\n".join(insts)) + return s def __repr__(self): """ override print function output """ From 25bc3a66edc671098fa5a2a8de3f10fe575abedc Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Wed, 17 Apr 2019 13:41:35 -0700 Subject: [PATCH 14/37] Add far left option for contact placement in pgates. --- compiler/base/contact.py | 2 +- compiler/bitcells/pbitcell.py | 8 ++++++-- compiler/bitcells/replica_pbitcell.py | 3 +-- compiler/pgates/pgate.py | 2 ++ compiler/pgates/pinv.py | 4 ++-- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/compiler/base/contact.py b/compiler/base/contact.py index f4b14d79..e7365ed9 100644 --- a/compiler/base/contact.py +++ b/compiler/base/contact.py @@ -185,7 +185,7 @@ from sram_factory import factory # This is not instantiated and used for calculations only. # These are static 1x1 contacts to reuse in all the design modules. well = factory.create(module_type="contact", layer_stack=("active", "contact", "metal1"), directions=("H","V")) -active = factory.create(module_type="contact", layer_stack=("active", "contact", "poly"), directions=("H","V")) +active = factory.create(module_type="contact", layer_stack=("active", "contact", "metal1"), directions=("H","V")) poly = factory.create(module_type="contact", layer_stack=("poly", "contact", "metal1"), directions=("V","H")) m1m2 = factory.create(module_type="contact", layer_stack=("metal1", "via1", "metal2"), directions=("H","V")) m2m3 = factory.create(module_type="contact", layer_stack=("metal2", "via2", "metal3"), directions=("V","H")) diff --git a/compiler/bitcells/pbitcell.py b/compiler/bitcells/pbitcell.py index 552042f5..77ef295a 100644 --- a/compiler/bitcells/pbitcell.py +++ b/compiler/bitcells/pbitcell.py @@ -292,8 +292,12 @@ class pbitcell(design.design): self.add_path("poly", [self.inverter_nmos_right.get_pin("G").uc(), self.inverter_pmos_right.get_pin("G").bc()]) # connect output (drain/source) of inverters - self.add_path("metal1", [self.inverter_nmos_left.get_pin("D").uc(), self.inverter_pmos_left.get_pin("D").bc()]) - self.add_path("metal1", [self.inverter_nmos_right.get_pin("S").uc(), self.inverter_pmos_right.get_pin("S").bc()]) + self.add_path("metal1", + [self.inverter_nmos_left.get_pin("D").uc(), self.inverter_pmos_left.get_pin("D").bc()], + width=contact.active.second_layer_width) + self.add_path("metal1", + [self.inverter_nmos_right.get_pin("S").uc(), self.inverter_pmos_right.get_pin("S").bc()], + width=contact.active.second_layer_width) # add contacts to connect gate poly to drain/source metal1 (to connect Q to Q_bar) contact_offset_left = vector(self.inverter_nmos_left.get_pin("D").rc().x + 0.5*contact.poly.height, self.cross_couple_upper_ypos) diff --git a/compiler/bitcells/replica_pbitcell.py b/compiler/bitcells/replica_pbitcell.py index 4d2ecd70..76687944 100644 --- a/compiler/bitcells/replica_pbitcell.py +++ b/compiler/bitcells/replica_pbitcell.py @@ -67,8 +67,7 @@ class replica_pbitcell(design.design): self.connect_inst(temp) def place_pbitcell(self): - offset = [0,0] - self.prbc_inst.place(offset=offset) + self.prbc_inst.place(offset=vector(0,0)) def route_rbc_connections(self): for port in range(self.total_ports): diff --git a/compiler/pgates/pgate.py b/compiler/pgates/pgate.py index 25ea591f..073efa0c 100644 --- a/compiler/pgates/pgate.py +++ b/compiler/pgates/pgate.py @@ -74,6 +74,8 @@ class pgate(design.design): if position=="center": contact_offset = left_gate_offset + vector(0.5*self.poly_width, 0) + elif position=="farleft": + contact_offset = left_gate_offset - vector(0.5*contact.poly.width, 0) elif position=="left": contact_offset = left_gate_offset - vector(0.5*contact_width - 0.5*self.poly_width, 0) elif position=="right": diff --git a/compiler/pgates/pinv.py b/compiler/pgates/pinv.py index 5f61d200..b488013d 100644 --- a/compiler/pgates/pinv.py +++ b/compiler/pgates/pinv.py @@ -58,7 +58,7 @@ class pinv(pgate.pgate): self.add_well_contacts() self.extend_wells(self.well_pos) self.connect_rails() - self.route_input_gate(self.pmos_inst, self.nmos_inst, self.output_pos.y, "A") + self.route_input_gate(self.pmos_inst, self.nmos_inst, self.output_pos.y, "A", position="farleft") self.route_outputs() def add_pins(self): @@ -222,7 +222,7 @@ class pinv(pgate.pgate): pmos_drain_pin = self.pmos_inst.get_pin("D") # Pick point at right most of NMOS and connect down to PMOS - nmos_drain_pos = nmos_drain_pin.lr() + nmos_drain_pos = nmos_drain_pin.bc() pmos_drain_pos = vector(nmos_drain_pos.x, pmos_drain_pin.uc().y) self.add_path("metal1",[nmos_drain_pos,pmos_drain_pos]) From 77423ac0693c64d2e1b18b9f23a5d28a4455b56e Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Wed, 17 Apr 2019 14:25:39 -0700 Subject: [PATCH 15/37] Remove private token from badges. --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ad21c63c..805d870b 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,13 @@ [![License: BSD 3-clause](./images/license_badge.svg)](./LICENSE) Master: -[![Pipeline Status](https://scone.soe.ucsc.edu:8888/mrg/PrivateRAM/badges/master/pipeline.svg?private_token=ynB6rSFLzvKUseoBPcwV)](https://github.com/VLSIDA/PrivateRAM/commits/master) -![Coverage](https://scone.soe.ucsc.edu:8888/mrg/PrivateRAM/badges/master/coverage.svg?private_token=ynB6rSFLzvKUseoBPcwV) +[![Pipeline Status](https://scone.soe.ucsc.edu:8888/mrg/PrivateRAM/badges/master/pipeline.svg)](https://github.com/VLSIDA/PrivateRAM/commits/master) +![Coverage](https://scone.soe.ucsc.edu:8888/mrg/PrivateRAM/badges/master/coverage.svg) [![Download](./images/download-stable-blue.svg)](https://github.com/VLSIDA/PrivateRAM/archive/master.zip) Dev: -[![Pipeline Status](https://scone.soe.ucsc.edu:8888/mrg/PrivateRAM/badges/dev/pipeline.svg?private_token=ynB6rSFLzvKUseoBPcwV)](https://github.com/VLSIDA/PrivateRAM/commits/dev) -![Coverage](https://scone.soe.ucsc.edu:8888/mrg/PrivateRAM/badges/dev/coverage.svg?private_token=ynB6rSFLzvKUseoBPcwV) +[![Pipeline Status](https://scone.soe.ucsc.edu:8888/mrg/PrivateRAM/badges/dev/pipeline.svg)](https://github.com/VLSIDA/PrivateRAM/commits/dev) +![Coverage](https://scone.soe.ucsc.edu:8888/mrg/PrivateRAM/badges/dev/coverage.svg) [![Download](./images/download-unstable-blue.svg)](https://github.com/VLSIDA/PrivateRAM/archive/dev.zip) An open-source static random access memory (SRAM) compiler. From 49e5f97eb4e536c78e8ae332ef4c60c0159cd519 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Wed, 17 Apr 2019 15:02:10 -0700 Subject: [PATCH 16/37] fixed bug where log would fail to generate if output folder did not exist --- compiler/debug.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/compiler/debug.py b/compiler/debug.py index 9ce1bf3f..c697425d 100644 --- a/compiler/debug.py +++ b/compiler/debug.py @@ -58,6 +58,8 @@ def log(str): # in another log file if the path or name changes. if not globals.OPTS.output_path.endswith('/'): globals.OPTS.output_path += "/" + if not os.path.isdir(globals.OPTS.output_path): + os.mkdir(globals.OPTS.output_path) compile_log = open(globals.OPTS.output_path + globals.OPTS.output_name + '.log', "w+") log.create_file = 0 From 5b828f32cb12fc1b6e7cac5555ab0e292ed49fa6 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Mon, 22 Apr 2019 15:12:59 -0700 Subject: [PATCH 17/37] Create auxiliary run_drc.sh and run_lvs.sh with arguments for calibre --- compiler/verify/calibre.py | 157 +++++++++++++++++++++++-------------- 1 file changed, 96 insertions(+), 61 deletions(-) diff --git a/compiler/verify/calibre.py b/compiler/verify/calibre.py index 5f8d2c73..9b1c974e 100644 --- a/compiler/verify/calibre.py +++ b/compiler/verify/calibre.py @@ -70,13 +70,8 @@ num_drc_runs = 0 num_lvs_runs = 0 num_pex_runs = 0 -def run_drc(cell_name, gds_name, extract=False, final_verification=False): - """Run DRC check on a given top-level name which is - implemented in gds_name.""" - - global num_drc_runs - num_drc_runs += 1 - +def write_calibre_drc_script(cell_name, gds_name, extract, final_verification): + """ Write a Calibre runset file and script to run DRC """ # the runset file contains all the options to run calibre from tech import drc drc_rules = drc["drc_rules"] @@ -100,58 +95,21 @@ def run_drc(cell_name, gds_name, extract=False, final_verification=False): f.write("*{0}: {1}\n".format(k, drc_runset[k])) f.close() - # run drc - cwd = os.getcwd() - os.chdir(OPTS.openram_temp) - errfile = "{0}{1}.drc.err".format(OPTS.openram_temp, cell_name) - outfile = "{0}{1}.drc.out".format(OPTS.openram_temp, cell_name) - - cmd = "{0} -gui -drc {1}drc_runset -batch 2> {2} 1> {3}".format(OPTS.drc_exe[1], - OPTS.openram_temp, - errfile, - outfile) - debug.info(2, cmd) - os.system(cmd) - os.chdir(cwd) - - # check the result for these lines in the summary: - # TOTAL Original Layer Geometries: 106 (157) - # TOTAL DRC RuleChecks Executed: 156 - # TOTAL DRC Results Generated: 0 (0) - try: - f = open(drc_runset['drcSummaryFile'], "r") - except: - debug.error("Unable to retrieve DRC results file. Is calibre set up?",1) - results = f.readlines() + # Create an auxiliary script to run calibre with the runset + run_file = OPTS.openram_temp + "run_drc.sh" + f = open(run_file, "w") + f.write("#!/bin/sh\n") + cmd = "{0} -gui -drc {1}drc_runset -batch".format(OPTS.drc_exe[1], + OPTS.openram_temp) + f.write(cmd) + f.write("\n") f.close() - # those lines should be the last 3 - results = results[-3:] - geometries = int(re.split(r'\W+', results[0])[5]) - rulechecks = int(re.split(r'\W+', results[1])[4]) - errors = int(re.split(r'\W+', results[2])[5]) + os.system("chmod u+x {}".format(run_file)) + return drc_runset - # always display this summary - if errors > 0: - debug.error("{0}\tGeometries: {1}\tChecks: {2}\tErrors: {3}".format(cell_name, - geometries, - rulechecks, - errors)) - else: - debug.info(1, "{0}\tGeometries: {1}\tChecks: {2}\tErrors: {3}".format(cell_name, - geometries, - rulechecks, - errors)) - return errors +def write_calibre_lvs_script(cell_name, gds_name, sp_name, final_verification): + """ Write a Calibre runset file and script to run LVS """ - -def run_lvs(cell_name, gds_name, sp_name, final_verification=False): - """Run LVS check on a given top-level name which is - implemented in gds_name and sp_name. Final verification will - ensure that there are no remaining virtual conections. """ - - global num_lvs_runs - num_lvs_runs += 1 - from tech import drc lvs_rules = drc["lvs_rules"] lvs_runset = { @@ -197,16 +155,93 @@ def run_lvs(cell_name, gds_name, sp_name, final_verification=False): f.write("*{0}: {1}\n".format(k, lvs_runset[k])) f.close() - # run LVS + # Create an auxiliary script to run calibre with the runset + run_file = OPTS.openram_temp + "run_lvs.sh" + f = open(run_file, "w") + f.write("#!/bin/sh\n") + PDK_DIR=os.environ.get("PDK_DIR") + f.write("export PDK_DIR={}\n".format(PDK_DIR)) + cmd = "{0} -gui -lvs {1}lvs_runset -batch".format(OPTS.lvs_exe[1], + OPTS.openram_temp) + f.write(cmd) + f.write("\n") + f.close() + os.system("chmod u+x {}".format(run_file)) + + return lvs_runset + + +def run_drc(cell_name, gds_name, extract=False, final_verification=False): + """Run DRC check on a given top-level name which is + implemented in gds_name.""" + + global num_drc_runs + num_drc_runs += 1 + + drc_runset = write_calibre_drc_script(cell_name, gds_name, extract, final_verification) + + # run drc + cwd = os.getcwd() + os.chdir(OPTS.openram_temp) + errfile = "{0}{1}.drc.err".format(OPTS.openram_temp, cell_name) + outfile = "{0}{1}.drc.out".format(OPTS.openram_temp, cell_name) + + cmd = "{0}run_drc.sh 2> {1} 1> {2}".format(OPTS.openram_temp, + errfile, + outfile) + debug.info(2, cmd) + os.system(cmd) + os.chdir(cwd) + + # check the result for these lines in the summary: + # TOTAL Original Layer Geometries: 106 (157) + # TOTAL DRC RuleChecks Executed: 156 + # TOTAL DRC Results Generated: 0 (0) + try: + f = open(drc_runset['drcSummaryFile'], "r") + except: + debug.error("Unable to retrieve DRC results file. Is calibre set up?",1) + results = f.readlines() + f.close() + # those lines should be the last 3 + results = results[-3:] + geometries = int(re.split(r'\W+', results[0])[5]) + rulechecks = int(re.split(r'\W+', results[1])[4]) + errors = int(re.split(r'\W+', results[2])[5]) + + # always display this summary + if errors > 0: + debug.error("{0}\tGeometries: {1}\tChecks: {2}\tErrors: {3}".format(cell_name, + geometries, + rulechecks, + errors)) + else: + debug.info(1, "{0}\tGeometries: {1}\tChecks: {2}\tErrors: {3}".format(cell_name, + geometries, + rulechecks, + errors)) + return errors + + +def run_lvs(cell_name, gds_name, sp_name, final_verification=False): + """Run LVS check on a given top-level name which is + implemented in gds_name and sp_name. Final verification will + ensure that there are no remaining virtual conections. """ + + global num_lvs_runs + num_lvs_runs += 1 + + lvs_runset = write_calibre_lvs_script(cell_name, gds_name, sp_name, final_verification) + + # run lvs cwd = os.getcwd() os.chdir(OPTS.openram_temp) errfile = "{0}{1}.lvs.err".format(OPTS.openram_temp, cell_name) outfile = "{0}{1}.lvs.out".format(OPTS.openram_temp, cell_name) - cmd = "{0} -gui -lvs {1}lvs_runset -batch 2> {2} 1> {3}".format(OPTS.lvs_exe[1], - OPTS.openram_temp, - errfile, - outfile) + cmd = "{0}run_lvs.sh 2> {1} 1> {2}".format(OPTS.openram_temp, + errfile, + outfile) debug.info(2, cmd) os.system(cmd) os.chdir(cwd) From 66c703d93221da9f7d2af2e6474340b5b6db56a9 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Mon, 22 Apr 2019 15:30:35 -0700 Subject: [PATCH 18/37] Simplify router code to clean it up a bit. --- compiler/router/supply_grid.py | 2 +- compiler/router/supply_router.py | 29 ++++------------------------- 2 files changed, 5 insertions(+), 26 deletions(-) diff --git a/compiler/router/supply_grid.py b/compiler/router/supply_grid.py index 88b436af..dfc78f22 100644 --- a/compiler/router/supply_grid.py +++ b/compiler/router/supply_grid.py @@ -27,7 +27,7 @@ class supply_grid(signal_grid): p.reset() - def find_start_wave(self, wave, width, direct): + def find_start_wave(self, wave, direct): """ Finds the first loc starting at loc and up that is open. Returns None if it reaches max size first. diff --git a/compiler/router/supply_router.py b/compiler/router/supply_router.py index 9f2ddf57..239bc866 100644 --- a/compiler/router/supply_router.py +++ b/compiler/router/supply_router.py @@ -146,12 +146,6 @@ class supply_router(router): # We need to move this rail to the other layer for the z indices to match # during the intersection. This also makes a copy. new_r1 = {vector3d(i.x,i.y,1) for i in r1} - - # If horizontal, subtract off the left/right track to prevent end of rail via - #ll = grid_utils.get_lower_left(new_r1) - #ur = grid_utils.get_upper_right(new_r1) - grid_utils.remove_border(new_r1, direction.EAST) - grid_utils.remove_border(new_r1, direction.WEST) for i2,r2 in enumerate(all_rails): # Never compare to yourself @@ -163,16 +157,11 @@ class supply_router(router): if e.z==0: continue - # Need to maek a copy to consider via overlaps to ignore the end-caps - new_r2 = r2.copy() - grid_utils.remove_border(new_r2, direction.NORTH) - grid_utils.remove_border(new_r2, direction.SOUTH) - - # Determine if we hhave sufficient overlap and, if so, + # Determine if we have sufficient overlap and, if so, # remember: # the indices to determine a rail is connected to another # the overlap area for placement of a via - overlap = new_r1 & new_r2 + overlap = new_r1 & r2 if len(overlap) >= 1: debug.info(3,"Via overlap {0} {1}".format(len(overlap),overlap)) connections.update([i1,i2]) @@ -270,7 +259,8 @@ class supply_router(router): Find a start location, probe in the direction, and see if the rail is big enough to contain a via, and, if so, add it. """ - start_wave = self.find_supply_rail_start(name, seed_wave, direct) + # Sweep to find an initial unblocked valid wave + start_wave = self.rg.find_start_wave(seed_wave, direct) # This means there were no more unblocked grids in the row/col if not start_wave: @@ -284,17 +274,6 @@ class supply_router(router): # as it will be used to find the next start location return wave_path - def find_supply_rail_start(self, name, seed_wave, direct): - """ - This finds the first valid starting location and routes a supply rail - in the given direction. - It returns the space after the end of the rail to seed another call for multiple - supply rails in the same "track" when there is a blockage. - """ - # Sweep to find an initial unblocked valid wave - start_wave = self.rg.find_start_wave(seed_wave, len(seed_wave), direct) - - return start_wave def probe_supply_rail(self, name, start_wave, direct): """ From 7f5e6dd6f8d3a7536a179c3d865e2d50f8ebb437 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Wed, 24 Apr 2019 10:54:22 -0700 Subject: [PATCH 19/37] Fix unconnected supply pin bug in supply router. Simplified some of the supply router pin groups so that it assumes each group is fully connected. When computing enclosures of the pins on the routing grid, it will remove disconnected enclosure shapes to keep things connected. --- compiler/router/pin_group.py | 224 ++++++++++++------------------- compiler/router/router.py | 142 ++++++++------------ compiler/router/supply_router.py | 24 +++- 3 files changed, 161 insertions(+), 229 deletions(-) diff --git a/compiler/router/pin_group.py b/compiler/router/pin_group.py index 13368d12..0600561b 100644 --- a/compiler/router/pin_group.py +++ b/compiler/router/pin_group.py @@ -25,7 +25,7 @@ class pin_group: # This is a list because we can have a pin group of disconnected sets of pins # and these are represented by separate lists - self.pins = [set(irredundant_pin_set)] + self.pins = set(irredundant_pin_set) self.router = router # These are the corresponding pin grids for each pin group. @@ -55,7 +55,7 @@ class pin_group: total_string += grids_string if self.enclosed: - enlosure_string = "\n enclose={}".format(self.enclosures) + enclosure_string = "\n enclose={}".format(self.enclosures) total_string += enclosure_string total_string += ")" @@ -74,25 +74,6 @@ class pin_group: def is_routed(self): return self.routed - def pins_enclosed(self): - """ - Check if all of the pin shapes are enclosed. - Does not check if the DRC is correct, but just touching. - """ - for pin_list in self.pins: - pin_is_enclosed=False - for pin in pin_list: - if pin_is_enclosed: - break - for encosure in self.enclosures: - if pin.overlaps(enclosure): - pin_is_enclosed=True - break - else: - return False - - return True - def remove_redundant_shapes(self, pin_list): """ Remove any pin layout that is contained within another. @@ -135,7 +116,6 @@ class pin_group: return new_pin_list - # FIXME: This relies on some technology parameters from router which is not clean. def compute_enclosures(self): """ Find the minimum rectangle enclosures of the given tracks. @@ -406,8 +386,8 @@ class pin_group: def enclose_pin_grids(self, ll, dir1=direction.NORTH, dir2=direction.EAST): """ This encloses a single pin component with a rectangle - starting with the seed and expanding right until blocked - and then up until blocked. + starting with the seed and expanding dir1 until blocked + and then dir2 until blocked. dir1 and dir2 should be two orthogonal directions. """ @@ -458,61 +438,86 @@ class pin_group: # Compute the enclosure pin_layout list of the set of tracks self.enclosures = self.compute_enclosures() - for pin_list in self.pins: - for pin in pin_list: + # Find a connector to every pin and add it to the enclosures + for pin in self.pins: - # If it is contained, it won't need a connector - if pin.contained_by_any(self.enclosures): - continue + # If it is contained, it won't need a connector + if pin.contained_by_any(self.enclosures): + continue - # Find a connector in the cardinal directions - # If there is overlap, but it isn't contained, these could all be None - # These could also be none if the pin is diagonal from the enclosure - left_connector = self.find_left_connector(pin, self.enclosures) - right_connector = self.find_right_connector(pin, self.enclosures) - above_connector = self.find_above_connector(pin, self.enclosures) - below_connector = self.find_below_connector(pin, self.enclosures) - connector_list = [left_connector, right_connector, above_connector, below_connector] - filtered_list = list(filter(lambda x: x!=None, connector_list)) - if (len(filtered_list)>0): - import copy - bbox_connector = copy.copy(pin) - bbox_connector.bbox(filtered_list) - self.enclosures.append(bbox_connector) + # Find a connector in the cardinal directions + # If there is overlap, but it isn't contained, these could all be None + # These could also be none if the pin is diagonal from the enclosure + left_connector = self.find_left_connector(pin, self.enclosures) + right_connector = self.find_right_connector(pin, self.enclosures) + above_connector = self.find_above_connector(pin, self.enclosures) + below_connector = self.find_below_connector(pin, self.enclosures) + connector_list = [left_connector, right_connector, above_connector, below_connector] + filtered_list = list(filter(lambda x: x!=None, connector_list)) + if (len(filtered_list)>0): + import copy + bbox_connector = copy.copy(pin) + bbox_connector.bbox(filtered_list) + self.enclosures.append(bbox_connector) # Now, make sure each pin touches an enclosure. If not, add another (diagonal) connector. # This could only happen when there was no enclosure in any cardinal direction from a pin - for pin_list in self.pins: - if not self.overlap_any_shape(pin_list, self.enclosures): - connector = self.find_smallest_connector(pin_list, self.enclosures) - if connector==None: - debug.error("Could not find a connector for {} with {}".format(pin_list, self.enclosures)) - self.router.write_debug_gds("no_connector.gds") - self.enclosures.append(connector) - + if not self.overlap_any_shape(self.pins, self.enclosures): + connector = self.find_smallest_connector(pin_list, self.enclosures) + if connector==None: + debug.error("Could not find a connector for {} with {}".format(pin_list, self.enclosures)) + self.router.write_debug_gds("no_connector.gds") + self.enclosures.append(connector) + + # At this point, the pins are overlapping, but there might be more than one! + overlap_set = set() + for pin in self.pins: + overlap_set.update(self.transitive_overlap(pin, self.enclosures)) + # Use the new enclosures and recompute the grids that correspond to them + if len(overlap_set) len(old_connected_set): + old_connected_set = connected_set + connected_set = set([shape]) + for old_shape in old_connected_set: + for cur_shape in augmented_shape_list: + if old_shape.overlaps(cur_shape): + connected_set.add(cur_shape) + + + # Remove the original shape + connected_set.remove(shape) + + # if len(connected_set) {0}\n {1}".format(combined.pins,combined.grids)) + # new_pin_groups.append(combined) + + # # Add the pin groups that weren't added to the new set + # for index in all_indices: + # new_pin_groups.append(self.pin_groups[pin_name][index]) + + # old_size = len(self.pin_groups[pin_name]) + # # Use the new pin group! + # self.pin_groups[pin_name] = new_pin_groups + # removed_pairs = old_size - len(new_pin_groups) + # debug.info(1, "Combined {0} pin groups for {1}".format(removed_pairs,pin_name)) - # Now reconstruct the new groups - new_pin_groups = [] - for index1,index2_set in adjacent_pins.items(): - # Remove the indices if they are added to the new set - all_indices.discard(index1) - all_indices.difference_update(index2_set) - - # Create the combined group starting with the first item - combined = self.pin_groups[pin_name][index1] - # Add all of the other items that overlapped - for index2 in index2_set: - pg = self.pin_groups[pin_name][index2] - combined.add_group(pg) - debug.info(3,"Combining {0} {1}:".format(pin_name, index2)) - debug.info(3, " {0}\n {1}".format(combined.pins, pg.pins)) - debug.info(3," --> {0}\n {1}".format(combined.pins,combined.grids)) - new_pin_groups.append(combined) - - # Add the pin groups that weren't added to the new set - for index in all_indices: - new_pin_groups.append(self.pin_groups[pin_name][index]) - - old_size = len(self.pin_groups[pin_name]) - # Use the new pin group! - self.pin_groups[pin_name] = new_pin_groups - removed_pairs = old_size - len(new_pin_groups) - debug.info(1, "Combined {0} pin groups for {1}".format(removed_pairs,pin_name)) - - return removed_pairs + # return removed_pairs def separate_adjacent_pins(self, separation): @@ -748,44 +752,10 @@ class router(router_tech): if gid not in group_map: group_map[gid] = pin_group(name=pin_name, pin_set=[], router=self) # We always add it to the first set since they are touching - group_map[gid].pins[0].add(pin) + group_map[gid].pins.add(pin) self.pin_groups[pin_name] = list(group_map.values()) - # This is the old O(n^2) implementation - # def analyze_pins(self, pin_name): - # """ - # Analyze the shapes of a pin and combine them into pin_groups which are connected. - # """ - # debug.info(2,"Analyzing pin groups for {}.".format(pin_name)) - - # pin_set = self.pins[pin_name] - - # # Put each pin in an equivalence class of it's own - # equiv_classes = [set([x]) for x in pin_set] - # def combine_classes(equiv_classes): - # for class1 in equiv_classes: - # for class2 in equiv_classes: - # if class1 == class2: - # continue - # # Compare each pin in each class, - # # and if any overlap, update equiv_classes to include the combined the class - # for p1 in class1: - # for p2 in class2: - # if p1.overlaps(p2): - # combined_class = class1 | class2 - # equiv_classes.remove(class1) - # equiv_classes.remove(class2) - # equiv_classes.append(combined_class) - # return(equiv_classes) - # return(equiv_classes) - - # old_length = math.inf - # while (len(equiv_classes){2} {3}".format(name,ll,ur,pin)) + debug.info(3,"Adding supply rail {0} {1}->{2} {3}".format(name,ll,ur,pin)) self.cell.add_layout_pin(text=name, layer=pin.layer, offset=pin.ll(), @@ -379,7 +392,10 @@ class supply_router(router): # Actually run the A* router if not self.run_router(detour_scale=5): - self.write_debug_gds() + self.write_debug_gds("debug_route.gds",False) + + #if index==3 and pin_name=="vdd": + # self.write_debug_gds("route.gds",False) def add_supply_rail_target(self, pin_name): From 59d2e4574447bf3d856cc6ac95cd3e5a47c1a7ec Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Wed, 24 Apr 2019 11:30:38 -0700 Subject: [PATCH 20/37] Move characterization on/off feedback to report_status. --- compiler/globals.py | 11 ++++++++++- compiler/sram.py | 7 ------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/compiler/globals.py b/compiler/globals.py index 3d4b2129..a524c3c2 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -477,11 +477,20 @@ def report_status(): debug.print_raw("Netlist only mode (no physical design is being done, netlist_only=False to disable).") if not OPTS.route_supplies: - debug.print_raw("Design supply routing skipped for run-time (incomplete GDS will not be saved, route_supplies=True to enable).") + debug.print_raw("Design supply routing skipped for run-time (incomplete GDS will not be saved) (route_supplies=True to enable).") if not OPTS.inline_lvsdrc: debug.print_raw("DRC/LVS/PEX is only run on the top-level design to save run-time (inline_lvsdrc=True to enable).") if not OPTS.check_lvsdrc: debug.print_raw("DRC/LVS/PEX is disabled (check_lvsdrc=True to enable).") + + if OPTS.analytical_delay: + debug.print_raw("Characterization is disabled (using analytical delay models) (analytical_delay=False to enable).") + else: + if OPTS.spice_name!="": + debug.print_raw("Performing simulation-based characterization with {}".format(OPTS.spice_name)) + if OPTS.trim_netlist: + debug.print_raw("Trimming netlist to speed up characterization (trim_netlist=False to disable).") + diff --git a/compiler/sram.py b/compiler/sram.py index d2234d92..274c1bf1 100644 --- a/compiler/sram.py +++ b/compiler/sram.py @@ -102,13 +102,6 @@ class sram(): start_time = datetime.datetime.now() from characterizer import lib debug.print_raw("LIB: Characterizing... ") - if OPTS.analytical_delay: - debug.print_raw("Using analytical delay models (no characterization)") - else: - if OPTS.spice_name!="": - debug.print_raw("Performing simulation-based characterization with {}".format(OPTS.spice_name)) - if OPTS.trim_netlist: - debug.print_raw("Trimming netlist to speed up characterization.") lib(out_dir=OPTS.output_path, sram=self.s, sp_file=sp_file) print_time("Characterization", datetime.datetime.now(), start_time) From 2c01daae8d848637ecea83ff50c10324a45084d8 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 22 Feb 2019 14:51:21 -0800 Subject: [PATCH 21/37] 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~ zmnD6^WUyP>VPd1>e@ruWq`61*xk>mW*t{y?N@q%Z3cE&sfFIPr2Q~0P4SY}oAJo7H zHSkwk1C0%hlQzcViCA|}tYc;O7Fn#JK7#mnf*E5P8yn)y4e>@<_6^h1q|Vl@*|2%* z@}AXQ>zd-rFJ85(Igwc2)EL9v^5%v_Lt?mUgC=(EwZ?qv#P+!idnsqB#dC1q0Uu!? zT}*7be1&^dyK zTkq#fy3}=lp@bI+77LaLmI{^$jutEztPrde93xmISS=V6tP!jgiz2I2Eae^lZ zju$*paDw1Tf)fQN2{s6xEEpF|2&O*oG)wqo!6|}M1zQBC37#UD?m3BNViGQgxdi6= zmrH6cx48u8@;eKj%XU6O(e7w-e9oh-(avaNv@hBg?TR)W(>Xtz81a?z8-!oJRhS@fFBQkBK!pSli(-9PlD&;)yeR2cy<~t|C`{O;U~jS zfu9P`e#pLe3jC??)8S8pKOLTrVy*Bq;FIt(;b+0034a#++3>UBkJYhEe+sAhq$0Jga}b#a&&SX6;Q73#&yerM4wQ!o5!OzKY-c*QHQgB$3fC&gcBNz6(#??Yq~PIn z4LUaSyriei(Jrk46D3?=I9MLPCT7fDorEbBuA{TFXZb}J zndO};x6Ir!w_{W9!Zqu=&hPD5zfr>W)1514Z0_wozhg_+%*Fddd%8R4fvu}&lfmtb zb!#r(u)b?U?fLm9Pxt1HX8z3c z7cHOFwPnq!u1(9&>gnoQFzejr$qn=8op=87#S7;)Y`Sdy%I$}sJiS|#jL?SlT0zI)?I=*54UmCiHUFCWHWE7FpSXM z@SdrfOlSAzUd)c?V`fWYrdzXNQ}67qj?S*0b8uJ3GzmO$g;Vd}eOgQ0eIN^*q z;jB2}%sAofIN=OA;Ve1fOgZ6fIpK^s;jB5~%sJugIpGXC;Ve4gOuEsTbR$ffLs8t? zOQW;hMrXT?&UPDNyS?i-o{wq2W8H$D?v3WGb=@7kYc^aQ181xjm&wy=V;#M*@rj1` zl*Y*uW7wX6JF#Inr8&QSra8ZR9cF=8XLoO`dqZqhPxq!xG3;(&lLM@=DGiO2<8kGU zfq5oVFo9Wbmmf1%cWk)0Yi9T64ZUVn_l6B!t9sXLS<`zN*EEYZc6M-nUWfbhSFP?^ z4+U49xwW^a1BqNmJ-e%WeOGVKWh47;=ca~>*JDSdnLSw(jFh*kb7ebLAGWh&1;r>X zk29w_>`ZVy`Ya~&VF=;yjVXwlDge$b+y>;CaZ*Z+Z{pBn){i+*kl04@5tQ2?~) z=f;6}qZ@wCLxCiFl(MCxD`#8!14Ger~J) zE&9390<`Go#*2898!&)Qza}?ifOh&dxj_T8)33=*d7zzsQYwx%!r}6Fsa@VKrOVfq z!u6rJ^dad&(u1S}N&k`VBfUpDkM(z)71AlB zPe_-L9w8k<`h#=_=?&5uq%TNUke(nNLHdDo1L+0Q38W857mywx9YE|~%wMcuj9+YD zOkXTt3}5VC%wDWsj9zSBOkONr3|{PA%w4Qqj9qM9)_ZX-_-L;Qv2|J7fp)elt2>yd zq*DV`3snUrBu$dBJX*@7X)7xtd|YoyOsb1Tx;oHOagdYkIhMx*Q8-6+bX84_O zW@b@lEOTOJOXjT11)0k-S7-KS_GRwMye0Fl%=`+coPHj#+=k%PpIZJa^=WNN@o->fMJLelYkL5g> z^K8y5IdA3ok^D$iWMbr$$n41CNN1!c(igcda(m?7$Rm*-MxKeh7;^&HAE8bU}T~b~$q2!d3IVDR=)|Ome zva{sYl6y-YEqSu!xsumP_LXFpmX}T_J*9L`>C)1*rI(lPEWNe#-qJ@)pDcZ@^tIA` zrP*cWWfRIyDVtNav}|qJfAl+P|-T;5sUQ{Gp8UHR?h z_m)3W{=@QT%3myhv;6nvk&5z)@fA}lW>vITtf<&fv8`ff#Vr+gS3FcPRPl7h&nsT9 z*jJHRSyEYF*;v_HIlppQ<=V=vmDg0>Sb1mV{gvOXe5&%f%2z9YTNxZvFeWypVa)U~ zbH*$gbJ3XIG5uq181uz3_l>>= zF_w(A$5zIAV*Rm!*qyNlV?(h$u@_@|V}4CRO>IqMO|quFW@SxJO@GZm&7Cz5)(q9` zsd=$xZ;fADP+MEuSevYEuU%Q&Q`=uVP-N_9^#%2{^^Nt(`u6&j^*#0d^#k>H)<0O^GIsXZC1Y2Q z-8y#1*w2lnChdf7i4|V?B4&Hw*|Ex z(qX4#H;)M_or=moC>8jYq+clX<3ejXAwPiQR0DmGvlO1yeE~e2Z3@p11T#Y6%&hF3 zNHjMue^fzXQE^FWnK!z;qH+v6cdRB*TUU=XW5=B^{=^9UMH`WdY=k~3$WdDhvp!{<0b-W;BjVIDNge6Pf-^p5=cPY0yE+Rq1fiMJoG_VwPy z9Lco=GF69>_iyeI>6_u5hW5$fBs;a84u8zfGH8nLD#V8H+ zZI?#-^C(Q?j0+zHuznP;hjloYL}$hC&m&;`kjcn0nGutdXL1Y7sA5x8W=b!pG!@mR zYEhl3Z9l<`Yg>5!Br`E?PHr;Tti_&8%XD+<8Rqn)nQ`V!911%7+;eb*W}ZDlgF`fn zKePnK#PfQC$cpvF_HM>$ruz4A%|9S*T&VpR$7!ecD%0ifxJKUd2`D!FkLSDWh|>qP zt>ZZs`>6&C1DE>TrQ>zFbAai_ea;DNtX^-e_Dt7yvcKU z)Q{)xc;=3ENWU7MXXWU5UW#Y)=xML?)Is(BbCvgY=x{hU2MOruw9G8;uS}U&!XQS%j*pAy(`#*~zW9Fa;w`+}B zFa1BH8>CvE9}H!V!g43SASwm2;UVK^V|ET_=H!MV2d)9^jO{KqH=7=U4oH6~zG)m! z`S8?lEJo0S|Cv71w|^8@yRuB=m3m7(fBs(Q8-315wYOuPhqPJMe6_u`MDjR+k{p}U ze9}qLc+G#C1h9PU`x-CiuG7?Tzdl?)O|3r_sQpy)>ywPO3+@oyC8+)QA)y}=d`qxM z6x4p%BD9t(9csUfNd+m*bKi6^d)<#JXS(Do(Z>uN2k80uD91bpaZ5L7vkIUKgzZs! z_W@P1iM<%+>Pj~Tx(EAR(TZvvJUVD{gk0DoX8OO zk28UDf2r%mRJ&Jw-z%mwm!JsJeF^T5&<-?xYW|vD`(3(yk<{@@=fkiJIQqSEmeARP zIfA->k}I?-r2SUM*FuRe7Az6e@*HlTyV*NLDNQg8Wc zAfm^g9Z;S-pu}h3X~%Gb_A28{x_uJ2O@dt#Y?2(w4#_!l&Ye4N{&@@9+RtCOh>y=p zFI@KFk1Su&v2s;s*F_hvUbFU+b?Y~DZ@jc;Q}5<2AKiM{zV7-PJ~Qyy8*lpD&9{91*4u9X!WXHzjJKjRRuh~@WCN9PukZBTd>`#`I=bJnNvHPywK zMHZpAeG^B;19)mrm^yspb1J^E%ER|n|9~0m9Gp0x2b($zniFjX2L|i?K5O5WXfm$y{h~ zI^TQ*dn(IK2M*9Tn%m6H<|1>s*^UCP#fJ!2m`hNG9&@$XU^e3EdA0eN*<_Ys{_QhY znlD1`I=_S1P800z9;q=@G?r3X(a|HL4tWgqZoN!0{+@|xN9TLGW znEIY5-FisZJ*n#|>bZ|3_a_IU?+dH*gWQ{ZY&0$Og)C-OmoG7ScMYGT?g1TSZD)cPD*@CLiUn+{4 z2Z3#GZFIzPg$?LCTCe5Tbu;@T`;KOj&aQNyP@jX8e}OPA6kH;>OfV<{HQ#i24|JeY zdvVnJ;EHmluGekRPrrEjqM&IB*aDrAH^UU4GizSiS?8HCr_HUd8MUBp?Bs>!#A!<| zn26V*i4U(>xvJ^f%cf*a-Em6Bsb{wO`8OtuW|owm{n<~?sXVu8ehjb0>d)_9JpMxy zPP%Yw??>XxJ31T9%@n6=#)l|K--yiRFkjnp4p_VHZrJ9F>k93`)dQX%FseuH}K`Jj@ zd+GcWPyvFTpf4B{%n%F-h6OVP^@XwSRRv^_3JPWjh6FPO?O{BYS`^lKD=hI^uDF!1 zS+GTLy5KCqC4#F3_4he<2z`U#ErPoR?-A7Vb_=9jD+D(R_6gn~xLZ)mqrb0ODf(B+ z03pdtI#m1CaYM(GRMd3oa3SjwPBE1~9lhGI4Uc20r!HV(690Y&HjA2G>io&R@;!5& z_jzxuzu0vgJAVd)`T0_BmJWpSiYr}3Slah<^=EhnUGPDBj>F-PA=973Z$rXb_*D9F z#JvK~*8}uV2#s4y6B*CvHhG0G_|WhE@P`Qqi(@i>3*n@<{oc{D(663F+zQZJ5y$n; zorvFsun597AnY#i%>h0SBn@ZF6^#Z0GJYHpjbn5={o3^VkH`w)bUiu+jQfq8mA{lnmV2y>pDiui>9_t`+}&e zk0aXcZJkL{3;Gj4I*yDupExqvU(7w*97jCu&vT!4#*CS%w3b_+k2rU-OiV{7_CH)N znqKEmjnL;eoflKvUFXfzcGvk+Gt~J{*UhTekv_NSbK2uFpB0J1t%9=!=L+gPw@~P1 zf-3}{5knF3u=AJhGZje%E^yUofA@~JI&Y?w~(Ill+;+&Sk8#y^Atd`_?t_%Q5^vS_c5 zLQWClw?kGokiYS`9r3lmdNlkiNJn}Pkb^hnF#NaRBTadY;CmAM#QPDx6LMLmx1lHJ zGtyTIy%q?TK?K>eA9?7(h1jt!#Y(saZ|2U!yRRm^pPPpFZD->>-npg?VQqMywg~Ui zF2I|#58HQW7n?4#KDY)_th4PgzCKo2R+JxM2>a@SxxAY_t95!yb9~~mB@0)OHiP!+ zrn5fWt2dh#8N5H+KL=6AwiTDQdaa}2z19S;G5Lpk(}#PDkb!@a!lu5owQU9C_-}T|`h&U>PcQwmqM1D&d? z^VyL;zq7uMhtvGgH4f=i&qGGOOQ4ol_nEm*ZQm71Mw*|>S3Q(ZpXasxj6~>jVQM>S zKB|(+(ed1NAVg|C$0T9BAjcZIi4O3V+BubTI8?dm(#2Ec33uS-(F&lv{bx}?I6kfB;cv0IUqsv2{L{6Uu19pgSPfg(B|&Lm zegB{fb$$P&8R+^$&tK^`;jNPKEWz1=a|IU)J|x(7QK&k7DP6=nd(g`_S zAE~t3)oRupoZ=IX9HvwGQfV!Ru)XhL1xi3q$9e<|@*d94XSBILrq_HT1(8Y7g6O13 zTO>R#9Lb5cMZ=MCk%Dn;(VXbGXu+hm$hb-2=(ya5Xjg7|q$}DL^}5QDzANJ4W95df zhRCEyd88rgMROxwBp3YUkvkx*Em9u6BihD%Xlhv)$*(s5f)gu+7~cv(&oC!?S(xcN zaDF9Wrg?P;uS57WT+hWipa#g(sV;n!`999!jKXOd--eF@*1+@MiIB$?L=HU91M!-L zlQ%Vxb%BJRfs;MdAq%H>&Owe>KvoXU%P{QY;6KT8{8>ovn+j;=n@hYaaCJIpeffA4 z{bPFM)2F`UT4SC9!7+t(xcYtm4@DSu9B=JfK?Y1uQ0Frp-_oALm+>og{5;b09LKs& z(SoF?F+2`(E}_FR+&X=p7xJh<=a=^?K*v*^Cpcg6*+S)|D~HZkM_bQ2e;w|eg({-$ zezf!23Mt5H!NWa|_enZ^pSnZnU4l0V@@yQPzHfbA=1Z;Dbg1*6uB((*OviV$;j^Sc zmEUQ7>{p6aTRG%><+2!*oD};&AI{sQ7G<-FbKyrijuW=-B=bMkIB~4wf!2+fiFTKf zMfsE5Yr7AB?;`b=PCre5xPG46f7KYYziNJOOGfXcWEhl+i3r97bv#-kH1{Q})BdF> z!NdBd(Au9krqRj1|1fI!jV^k4oYuc1BEj!l;5kA)OL(aM`Nk{1di9Mr-gxDgu7rcE z=3K7`a{&KgEr*ROsUsWbp@H}R3z-_%o`VE@e2-l&PhS}hBEPHX5!FZk$ELrEy`_!V zbNU4)SME1*Pi!-2?s;*q?1?SL#GnXuRdd4aAsxpTTW?GZcdX;fv5q57i{p3I{_>Pm z1iu^N-iZ`!mv{nJ0qv+|wwbi!?(~M8^@;^J&rd8Np`-pBH>t z@GU`oZdSSaT&wS)XGwkw1v>>F5sXMhtq@!-sNd0OJ*Gn)e`rs1M~e#``|x{VrB%M> zuYbQslK<5J*VVeV#yE4(bMqUo{%UxPqiG%VZj%A7w%k~D7EL-*K^($kCzvGR3a zxR+u7upGOBZ{u&qRpD#Fn5n_r-#Sx|x02)VZQgjB(~0(bK7I4SzYo`dHy< z%4WQ|oMIlwcZt*R)!?c4PVqE+uXu)O#ZG4uyNs(TNNw@*u?rp@kgwEk_4&nR6&G@?Tqxe$sGJKbK1->f$7`{Bb%JiA5 z4Zk?thi?t9!FQ26uz$M~-xlt|myg$h{V^-zdVFvA8GL_8_gQ=+c@y3g-;B4ZpU0Po zx7n``zld)Kvb-;uJI$Bz3qW5ncbl);FQLB%j
    K{f)WLeBFG*{H?j)JYXI)e`g-T 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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 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 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#
  • )v7yC(B;y#``w)j&0aKHa@&>;CK4FyNB;L5@5^lm-BOZAmo>QDfJ;8- zuf9&+SIYZZd0#E>>*amLysw$}Rr9`XtFPM{+Vgc=ece`Hx7F8e^>tgjoLT0baA=Q%4wFCy9Wvge|<|%ESWn1WjXW8aiwt1Fqo@JXCr_I-G^L5*O-F9EM-Pdgo z3h;H?ecg6nx82um_jTKSU9&AyMu)H4;p=wzx*fi5M~55VH?qTKZ13Q<(cuxdZD1(7 zq9CvZH7#xfilD@_RXaLcJ60QuwtQ;`YVPwM zXT#p!p?mu`4DTNrcYB71hWhu658O8}{s7$A?IV4?FtkCt-?3+J|2`9c&&K=5M|-VM z7^z$Ohxhf5k3KMU@cPDD?%ijbopubR3QXmOA`@!h& zgVEs!BiG?aBiHGNBiHH2BiHE%B-iOjB-iPOB-iQ3GuP>PE?t33 zSK!hWxO4?BU4cti;L;VibOkP5fyF3i1Ln0z^#eUQiY zvmSyhZ9(iXv2tN%<-*j;g}IdrlPecyS1wGiT$o?EFu`(RhUMBr@53C+g-MnRvn&^; zSuV`8T$pINFw=5js^!95%Z167v)KkYgLUN0BjnfE^Tm_8;D~SSAD`v{QhJ*40dkAW zx8_?qhPD#zxzOr1-{3a4xy|ivpu=spf58NT>&cn#*_>N%<<_5ju5Zp)p6lmy4x4Yd z&GvIo2CzJ(VN*Y_M|QA+@xwjy{4R^r47xNVtch6Va*Yr%_L0 zQ({YETjKW;k0mA&hZ1il>XR#z+md%C`;tS+uP6UF`DF6P$-hnhEcw%__o~vV_S8+O z?Wwy{pHGdXekb)v>i1KJQh$Lau?Oz%z) zrteRGJN>=%i|HSxUroQ2em9+to8m?Bs<<=mj&F^BGyZ%$8b1_&HU4`1C-Jx9XXEe3 zC*q&Pe;fZSK2q~^&2u#`)cmmKwVI#SxJ-SfIkPIWCUbLUXXc*FNamr;W0^n9Jem1- znd6xgnNyj!GVf(-YUkH3tIgG}t=&|+vvzmwVD0_2kJL`o9cSl`c-Dq8*?)U4SsQb5d&(wXt?quDob*JloURPVcpnhe2XMIoo z_WIrRL-h~Vf3^Nl{Wt25)*q{Xss1PRZ`M~e3^n|5!#5h9YWQ};GY#KsINtDL!^;h? zH@wwwRELeGbJ^JsI1z9Lg!7~6=7-K3wSkXl=Lup`6N-#zD9=ga z%fwfRs=u4{4ibyR)5N!lTf(`4>%jqTvrE}e!rEbw>^Fx^{vWu7ab6k9Xai`Is7fh#iqb@T`4!DdMQnL6&|(H#WhMO^7tN;TQN68|I2fxAIl%BTBM_e$kOP`xKv|0&|r#G^#@ zqY|!Txk>;%B0?UmA0Q{>1r2;Em|m|pQqjYXi=o=m*Yj2`f_~QeK!U@T(>3bQkVJKAD;fo?tM?rae>{*_B77= z&JuKu+v6;Rd5bxvI?xS*>|N!jd;aTro>E0J)V$X^K)>6<$qWV<{%jaErTJupTKJ9F` zl3p*Ap0x^17BTLWp=h@VMKqN#k8uv0D58J`UuM?EnwvAXq*JwtsG%xp3(P5ba~Ap! z)^b_lwavYp6$x#_C(oJ^ZDtqh;HPv*F37Uk1h8z@`aW7^|4;1a^>{H)YopJ z)*oc^D~Hu40pfCteAX517NH26wtel?ZLK+-IdkV-cKQ4(7A$POa?w?`>L!yFt!(1QdhLx-a4wYFGlCu ztX^qr@vDtjKALCmGA*~gO36c`ErbGN(a`;#?NyE&qQj8E>(9^?hEdXgChsa!&MbLm zjgTS@yuBCqH2nr$yJXOc~eR$p5^XX)ZA-STVd z+}!yqFSlpcyer&7sK02@2kB>!1A%vRv5%k{EBZmLU#FY*<>OdszUzA#HC(<Dv#K(z;iTeHDQKp|G7Kz7+FA#q~EMNZ~rNX4QN+`RM|B*iuy*yosPbK;( z4v_Z6VKhJdSGaFId+1w=l)8v6wRPdGY#)3&oA4SePNmrz6iLwvc7H}3{9^F$7(ztw zUD~*`F=?z$pFVA=$$;m9-#1gAzwGr)rTH*Z>lo=;c2vGz;rBUbty^&3j==AzLgEsx zoK7VU)1^xVE8M6*I!}VW{F+bW$a-q0Tn{s~Zc+OZQ*xEhbNK3NeB17bu>5UYqOVwxBeb-pl*=>!+_Nn#Z-MNAW` ziT+D0^qKV$q~|@B4*hS{r>(4(|S%F zXZj@ZHR5i{J3<^6p6B}svTxb3?7JLQt`d$zmllNO^(&p8`&%0vLzwz~uZ!ZNT z=ZC}kB8V1>{(264&L;OyEJEi?ES9JLr{%q85%aj!;?L~@Gy9eqYV0_q}2Zz`|n zwlZ|yr{{6GUFdmTZWnrPt3f??wO*H8=es}D-=}$xf@dkXp4WO#uOq#OxQV!pxRW?Y z11j}9sH0?0qU$-RbzmRMEhCDqa;jI3<@tIK;jjjT{64CHd4)YPy2E#@igt@o1PyLB z#%pXTKZA?!nP1159PADFwE1^D6YxBGl{iE?5We?&77_p{K~Oa!$Ln><&Loaf4WKbrchb5ER``gy>H)SmcD4%O5C zR^zAf)IO@1U3+QQ`y!q_6(r|c4gk(cVB^z`i=Kx%7nK3)xmd-4)Va6LhxEON z8qo8vmgObKI?B^S+(g_$+(~?pc!a3)&bOIi^GeZ9>J7s%|wCW$FK$!ze@d(AG=sR%dbuMy{`n( zxL>Tl+s%&bB~G_bD6rfk#7Bvb5f2jeJ(Knmuh1V$ua!`KQO`Z4g_Y`EEWL*Vs`?ja zWoOp{TiFVp2bL_dRPbXVQKB)gU^rd$z5u+TYJawGr~p6Vb;rg(C_izj{y@5+xoEnm z8^1KvxW7$-Fvp?4O7f}vbo0D?{)(aItJ-^q4ZT;^U=QdYlOa+3a013XqV37CXUAS04yT;| zA6WiTqx-*gW@VnR0yu-lnZTPC-@VhhtmQ)|G%LG1BNUW^{=D8$*utgynM?I2L5i8X zYQAXwkN20chh}$6`r%`(w2qn1FO>fdpwfF>4P>nMKV~yMR}E4S`4h?c5(n-i@nzyG z#Mg-0&uG0TzRSp8=Y2g)>pZWI>1T*~A9*(wwwE|alpZUg{1EI3;bL)Ts9ySAu+rkM z_H!CQmj87Dtgp4kwyA#BdgQG){*JD0@*I(>3cd{PEhy`}((~*${4}*`%bPgAi)ic% zh?kl+9y9K1KPaBY*Z-|WoV!84)EUTU1k8&w&bc@kGqwMlDgR5cD)!@yPF+Gm^LaJ> z&|>3-wQza+%&zF4wf~hL6a)EH=~wUF$`5OQtoEmSuR#LHKfc5c9O0LpPZE!C<5S>( z^zeo0SNOt_`dtZ+Q>S~&@FXX{>S?{H=fZL3Yrm#)Wb-k6#5M3alOGZ5m`$NCMfjR8 zyC1sWb`QG$hNKxtH8`-G6j{=Khs?zDs(Ip+Sg z;h)=v_TL-UxW(=Zh70U>AI-*pp8ay<3HRUJUmEQp_n+-8!Y^38qwbjdn#bvd- z?ti#vZ54gJ`!6*{=k^B>e`M)K_nbT7 zUUrAv)BZ2B?s5OYxLYXt`M%2jUh0Zw`y04+<`=JOZeG#6$|2&<;;vY+!evXRNvl?Y z3TL_^jvGzh6^-@bI`B)(#xwxP4_Df96KJiQ~2L4v%)3HEULUbsW!&kc?O9Sz}91!2#0q`BkiD(D)ruG^42%<^9lIx#Y`RgqIUl?{7-fj`;T^5l>yV4i2y&o*;8%{&C-jPT)E;=E|By%hN4eK60-Qp%>^Mh&s|AaH=0dS@{pyEBqMz z8SD#KKK|wH!_K~9d>%0Tmxk&W>SJDvjoN#Ch9+KE6Bm|Ymt$9afVvM9T}4G%+)t)a z!dA7Ojw|j#Lm8wdQB+WHk34;9v-qfP$QQ4WQc0BYT&)L_q0w$@kwnJ;M6H*#e!kT2 zqhKEh^#N>k5Q1;pZut(3A4lX=hiskcF%`Z~M1sp)ezjf7zUUj%&KZGfDAB5Tr}yE} zAKwRU^rSzQ6Ipy!UwYNwW9RvB;qp+Su#A`|-b7TpC4qP&zS5WUiE%~1GZbNU0IeC_ z2-63N&k!FZitltdzpQ*S(`q+cmR`p6g#yN#y7J#AFR--6h`RH1^jmc5@+>-adlsF# zK8r4XlG$7W{B=<}23`8J+k%xZV%#g_`#g;ocyGM<76(25h51ybI;VAq~n?H(6v8l!~04DkN zMk^aNHEfT3gI=KR^Gr@FF|R2V9f$!|#6wzA_?8!1J*#jaZffXGAFH-hcREqyiY2Zf+U^2MAU~b;Zv`)bK z1ZypufIi4ip0yq!q5S(Sor~(dA-&Jy9~R(CN3QoR9r>tzJOmLQA(sFBt0zf+nyBCT z7MXs5c#?RE_$E=`w^w?eh_3aBp0|}y>!wQhMCeY%E4nY;>e+<78}`oFvjMSJ!yd{) z(TSraC{b_9|duwMmm9P3+*v_3q(OLYw0qWCO$Ua%Qh%x@hWR%(v z)?h_6C3^!2`JQIV1SV|r0byRMl8cn1I8hAK#ZtSqwl%5F3-wEuiGbfh4@Q`^S9 z>d7u;uj)6>UJ$eo6sq3EV&HoIS9G6!@pcEfK%-hpjA;7>BPjYj$*K87)ACc2yAo>LgyrL=dX41kl`#VsuoKI2e?#`g zvSy0-4J&@*isz;D3VFdt`d1y$F+OT!ru>F~vKrevE~^iq!O$UF^PKfnTvkz^TcFtKdQ4}ok17GNd@S+=faHL@h+Yhe=- z1Va+SkkrGF44t7FLY&rVNEU6~Hcgq8J1%YM3e2J|ZRlFGbqBi2AGBdHOv_rONx$Dd zzu&pnTRL3507JaxeSiD$?Qehk+uwekbFce0EJ_5y?m+IF7Fc555}lh*yqH)*EG1q* zEF)e~N ziI)-=6Pt<4i7SYgQ_cqB`)UZ|(%%5%!^AA{0pf4z9%1}-D!7e`U0oSwtUNcw4=xFD zEFI!A=rnUjmlCfDaqkTwzPmQW&09h|*cIY4+e3VGM~Lt4WcuC^U)>*~jCcen`Wv zA>SP3Yhe5-%JCHW9%cS_7(Yy`AbRYjhBJ6Z17|dFMgwOwa7F`XG;l@(XEZRO2AY>O zUp?H|*pwa`N%!m;8qGvhB|(Xue=ZK1o0m1VENg6D$sEO3F+R{gc;I07$llDr^2YAI z-Md?wn!1-ar!CaovaD%YQvt(ZzirkYTKb!Ir0qC%a|aNSd(GD%V$MJJoE;_yb;LQu zxx{mb^~8BZ9uI=^8Q1wK$$hWRQ6-G)JXOZH&Q%qR>wHzkcr~%ud8>|e#m-&xNT>7H zd5oV=ynv{4*+q=cCtggvgs5{{n(+n1g+!co;dHLMjPc8fONb4`D~MMTuOcobUQJv^ zyoT6FY$E#S#}=mR9Cjf>q4|r<LqiUmh44P*1%gwi#Ut#`Q^VgZjIKUm~S<|*8Dp2>&>^B-(Y^D`Az0Go1dveo8Ufe45j$wKQU+BWd3IJ zn8dc2-)jCA^Ej{Tj^NWm6T#Uz5OxX&TZLPL!C|hI2)l%XZNjZ(`Z{8Oq-8Cpmb%5v?a$H*}wp zW}#N%P9pjdPJD_X<_$Q}rClr>{|GA1Ky3VodM%bBmKSGherDQ`UkCwQv#%%HzdLAe3bwA_ zc6)bMX7^rW)4g#dlj&@`xn;$&;eA8&a#cNxV2n3b?E{4QH(3dA?za$BASGyz*oPWpC^6 z+k1*oF2Um!5*4tDh}xTj_T@2ZST^WsPw}9=C1_s}v|nrb+@FQD_HH>BJf6X`lMoC(%- z*j{DR*0u$~ogKDQ8O&sxRt4LFYs~)11J=K3Waz-~#(|zb8yK10*`WQpxTb7r?%vYW zJ=)*1ewlsP@aPHhNkRYM{%p_S?#!Z~y)kHC8OLOJx7mSA$wh*L>j$&JA$)LP>~_7& z&TC&4v=0nq`g#V^cV>FNlr|$7G&xNx>0O!ZeVNQ)T2-f)w69uH)ic;zn9{stSygaH z|ImP$xs@5(lfDmZOboJF7TnRXEn+*`pFI=|WUPSwb81v%Z8kd+=4|ZmYYIbMnUQ@> zZX`LX&i+B<-JCfTG&ZelY;0cD*rZR3=gTzvWtve&HEkFf*?M4~4M|gEQ|!2mbidAZ zM?PwW%p#kXn>QP4G9zoc)_n1PJ(W*f4{llBZFO1ihvbS`4J*yB3Wj^Kdu_u#+&{P| zSa+LkyDhXeleN8f-(c?o+kTJs_S(M%wh4D|N1IvbEyLE2);(sV=_Pk|EQ$KICvC;k zd;0qhjAYUcJ!#lz&tTs`2GlkcWk#+ZJ}@#ov_F#`wiz(JWM3xRGtivw9qGBxW}hWj zpvP^l*w;U37UWpNK&H%gcxd2I9MerpP)UImE?=^2T#J@r0NSBrL))ee-Ay4hhp;?^ zmQ%~Do3R#_#|aG9)6#-XPyM5rIJVn-J*@EcU=@$o%*Wr?MUCc^-dz@K?ONLzbmF7E zxe->nXn9Z2-MzkT-P-QXwYP29+O>Xjdq-RMEn7S8>fUtQEw^_Dqx<)R$PSd+zrGf3 zUEH~$+``&paXYT9SVS)Z|6WCWUMIgdh$o3}5p}Qe04tIlafov;TyF?@IT-f==V^Gj zXn&ZPigQJCXn!*J*U1Z04XNu>t4r6Fez){!=}$|Kl@64Rl#P~+m3_VJv9j-$yrGm(!Ez1(`$%xi6unI@hatcjrcn8 z4dS~*@kz6M3vn~CgE+trUX4o`b0xT#F;@?xGZ)wYO0N&eqO*kJK8ij~1-{C1FA;Sw zCpspdfmzZ3?$_YqqVb1FBAH5<=lce3e4U-RG_fMFDe<3^m5IL8k3PvTvPGQ3{eY8`cH+-x z8ZV{H_wR?}#vR5k+*u(+_u9HQaCan@Cmnf5$Y>mJn2^iVfx|8;$YwfTcdL^jbQI>y>_&o6#5n6|fL*37ZRO3G(lXM_Ex`WI#=Ak?BKSCCtR(oJiALY;= z>JzmGx^6VXyUUcXcDz6)m=@8N$@Yupf0fUX&x^#Dh%XbhPOIKHl-;(lTpU17$y(UH z#bKj!$_Jutt>(D|SSWN23%4{bv`g|{i;9=zdXfpyGsc$k{h|dvUAihL=jd+sy4)I;0)=B6NPVJ6E%^R{i^-~;*&kojij2LQu z>Yv~zo{-m~IdXAxdu3uv>T4BWgP1u~WfM2ZU6>`qbj;~WxAoymMuqW>MD*=ttyi>O z7R?0Va~k)okn+#gysiC`Zx=J2&nad!_N6n;ZT=XrCQr+$p18uwSN$zafW5f2NCS!K zqF1tpiOOqy=-&RykYMaCqWJsrsJ!e~_9{EpU2&QP7ZWxAsC+RLU!P8V$#&8JJ)n)S zb?HWkHcynUd{qJ(3p=}~UdJpB@6x0bltVsnfq6K!L+2*gCEBPu;`*uBJm}lK7-}9= zePgWX5#po7$B9o8{Mmjtrpd^wgMGn99<=UsI1f-QI5{>6fP1S1+mdQEXyW6|AE4b%cZ zf(lw4WZXma7gZh^x%baE*@c7t>_0nAkvEN^B%z%)qS-!M&G-U@PNo#LYy>bGjnM90$Igan2eu z!fE-a{bY>g#Emr>)D-PZ=a2-;Yuz`tr#RIcXAe4mw6c`wCyTPLG|THfN=7Gy7~Q(L zoAXKz&63QZ$9xLJID>5On1_Q7L5DmzsnZ|V#m1%hy&JL#-Y0%Q{E%3|it35lcNf!_ z^dwZhw3}@?Z2&S$?!ta35HP2(^f17V!`>b5+EPui`j5sjJ0@;l;P+G9 z`cbD2X2sfYTi2Agi|dD0S#*j@W-`4<_5B$Zmc(Z_CAZ-F}g_#N1<-rpn5bPNTU(TDz7k zD=l%{ls;zpr}&I1u)z}1eeh7%qVTWIp>@Q&p|hO4!@k3Pr-AyF9cuq1`~0}}&2i&o zw)V>!Zn7`+iR`l2_c-wG{cJc6tB6&xctjWzPK_nVOH9e7c|q%|^sRYfy8B)6|D;gu@{wwek|(<#mE5`ySzsKda*vb}17d>co^BW~ zcbR8c%Jec~IkAFRNlbEsmm=!>_@#`O5i5x9ihT4GyW3sB=G}c9p!(E_%qi3D)DW}%Lg3i6B~&oJXp^srim?lKu)&N`Pz@m zz86Cm=48)P#n-~(fpD_r^wtZ-d){W~ucK({p2SeX)YaLD1QhT&d*{``&A&Hyo?UHy>#I!v_5b_rZ=bLR;`s%> zi}uQI!uX$CxZk{=f5>RzzhUL!efrl5%3o}X`X{8nne=`fynar88;vICmCsrp{Nt7f zUziX1{5VLA{6TmNkHI%t-~4a$3v3a7#m1qZk9u9ZY%G4yXntw^h_?L;Q|&$0hLu(p zag@hadv{PcUb;b%foNhAio-A zEe?9f3wp?F&h@vw6qHIP6Q$)z1D8Cr^h%#k;p>9rk9rb8YjR%j<>XDtuH+vF-!k*L zJ9&4aFL|$Jn&?4&p+h;79p{7;g+x;Gx)Zezw>&%gM9bWU6SaSJ{j=TgT|X|Z|Gn$O z+=UN@p z>qe{XMi*LVp>67ZD3x8{?a$bClE=R&UGPS5#}Yh>a? z?O*H~`gesz3&^0nh4((ua(%wt@71|>FF0YXd}2;=QF77TMfqxt9ZTe^ohUb|)>Rft zf?!^{Fch)NGd?90%04Y7lPQ`PJs*mc?fNO!Qu2E0g&}e*nc+HN?efH|H3-()=W0Wk zEIjP`(crN8G5Z7_w$L9sf7tTM3!TN~urAKZ^8k|v&fjNg9~QUY($m-k*CKzPHPiEr zO=r%9(^CFjHHxckz0)BGp~ph!&U}`jeR=dka3RrY6o&k=heZ~4ahrXCi!Qw&+NbIM z1bb?*+(4OQs|uSp^q@0CMsQY#rPMq+twew))!ZqKIT{$`;NacUca${3`9N{FWLJ?k5%o-@i5l{Yfi#+&szye`)E!SBbA!ne#0Co;sBC za%xTOoO9;gc*A8)t5&RCUww7^&CBm}6=>eJ8Ag4}bU=>bF~dS1v>EYEON1H7+teQ< z((V(X=x=SX*2XU4;pa{(Ihj9W9l2SX|4oO^v9bPqP;4F0JfitQ=kA%#|Gw^_Q#gsM zd400?TRKOET&Dl2`pv{9bdqzz%#TP^do^FiM`T(E3=z4w4+LthkN1nb<+>BJLz=T|LOSo{K!n_~XRG#3zZ+8JzSG zhkpO7|9p%quk^!Gtm*jk;Lt9$4SKX_j_t~!si~xUlHkILl(QNaP9~EuvoKs}r0C7H>>H4dCF`av7 zYdxlTlipW^dYSsC=69`Q3ycNc$MNge@+o?My;l2m-WLO{v-VnD`{u&nLM+E}rE3UTLb%$496LwR_l8jP4zkPc~=ZbE*OCi?lbg zx!B!{!X#uC`DWXQupgzccrMJ7h1mBj&35tLKw0<(xy!FkR@c;2RFvVP)`GRwwYAme zQ2r`AFf>~koKt>DyDvOPp-!Ara4y-SHt%#j(4^G%y|9WQ0K0HWO*2;c-E@GTJ{e1)}`r#$V8@94IxBZR9ml*xGEsl4_K>wztf&Nb|p0oHX7Qf5lYb*}_kZGgUceTZFF6^-Q zI*a4~7r;9!=ts-4^IL`8Tvwd(*I@7U+kLiu8YcG|O=Yk*U6Y2lB9Z&7+*?UtYr1nZ zi|9KK%AYQpYEN8B$5xa;x ziF!|7>&4?tH#2hXNygQ#I1IP)yxX)k>p3KsGqbMH2^lrp3mx<--J)WP=3uj}sefL2 zZJ6Qan@lEy0=aM57{WW*cwgW~6Y6D?^NXQyxsvcDm>dYrml;G=HhyF*YpD9yQ-QN4gh0 zMO3gsx_9rTVqRba)y_DSy=gC`d8>_zRKCh@XZ=E@7t_0+5Az94C~udf$)QQRtM9A+ zX7wLe|G4^(YPW?iJ?2n#;dkt8%5(PM(o^;`7!{RH?e^>%&V}dH)}ED`TQLvMLqUh1 z)p5?k=5qMxw?;G=qF#8=oqfumC3x<$y8cV&>SwQ6Q;upJ(hQ^W&>@`cV?GnG5k|i` zMFW{GdhroomDl*u`#^slZe+&97pw}M%E^8;f2!S@e`WVVm76XW$}pKQ+Re7OJp$xH zn)D$aoV&*?F7L7=r^f$0OT}EK@^Shs5djtL&tqbs`Ahc!n!ohEke(ZA-jf`4thk<_vY_){MnXg zwtoMXXFC@xT=?LkvBeKv_VDGuzvPjI=kEDQ_fL0TaN&YO7u`Sq%NIXz$yYA@YWmjO z8h)_tNY@W<|9f}*{X36tpEEbT|D0_7fqA3n-gn+Xjf{>x-b^NWDEV0Ozogzwy`2g_$5W0^DJ*-9{a;y4_JjS)?e~gS*iY48XTQC& z%Kl%h8{8T2qsxADZecASO*xZX*Lh*zo%*oBzDZG0Q4y|j_K9!66*$}M7rMf))LGcJ z`h_lJQgy1UJ=N8m>I!TMi?RFhsmiMA8hcn=Hzzo!KCs`hyWql$=3g9KnqIJQ(c;T4 zU(#^Jl~*kdmR-}>)V#c9#kJS1Ty^~o!Hr*7)4F!u`nC-lH*IdeDd^a;^_I?CZ`;;& z`yF>~zw44O?zsD&?x1Ja?%vFvzPq`Us27}>yNA_nAjNW(f(EVS2;48s{V-G$2 z`;UC>>)&|vn~(j$<0jW%m_gxpRABG0t$O>bv)^>CpU~Tv{p=g{;b%yBdjaJ~mkq`~ z>QCIdtlsgy%SlyOS12JUC21HADMKF00fxDfFpT+SC(gZ{Wy4OyC)PuE8PEA{%J=9o z>qmGb$iK6|X*xQ`@H#iF+hou>4VmCHzvfS-Vfs`*DW0>5!m{Fjgo&sJOAgf#ZBJBQ z^g2(f+)L)Q1z=H4BuGw&({3O-+}wl8p|^G?xgYKDIZD^ zFGoH0^ddOz-$pQ`@yN-{LhC^>TueP{T^C>7dr4mP$7FG$^@e40XtM5GLHC#C zZ)4faA$+Xt1)PLkxVxkq;y8N#o=nc-?pYk3;o(^wp0T-Sbr#0=6U{mL`$xjPLnY49 zR^gbzz2@Z->%O0C7`Z3$?Am0*y2ObE$^PT*&6f+4i%wJ|FWI#ukGEZsyyUMo9d8RU z0rH2F$J-J}O{{w&j6Ix2q2p~r%iXmkas1veH)P48y(Y-D);gFv^ntdg?N1KrZZC;U zb5q{0f*~9?cK*GGZ}-#P$MTvYtjj(ruFP502Q%H@Mis;a)Ldo5aNt@f5XOPq|BFz1 zbyWGi5!DsVHyZD{kNa0)L&k=}3dY2rY$8zo{&>{Xrsrg7mgpol5>>t!YJ7`M<;9om zCJj&z+vxruZ{5?ey)F%HP(KS*f#!CkQofl_ozKaB#VnDjn`j2+c#C}be&dE-7Z|y%{R(&6k{zIY$jK1HZdu`og zH?l)ohB5luv-^qWN#zi@7c)Blui<2cBUI!K5;7VhX& zE>z>(z{p5nm*}N_>NecSzyhAxf`tsBt3uQ`|>?J@eyjVYT*ux`)osS6p)F zeJqlH?f~snTebeNk#5gFTrpg6!2T>Pr*t3PJYoM)6lf4mh8)BB!=5239gpo0wt60f zx9}MJN{hh1WD$7e!6Oge&$qO3JTR^|*r5K7)%G83ZT5LwV=Y*2iNCOk?_V0Nxllg) zFI=N=p{y4Ef=R2f4WbJBZ8`Wt2YYljiB_7M_Bs#Epgd8(*Q@y=ZeGyu$jx*gz}FoD z&5N2RDUOy;ZA&%1ghHPNpOUkM{eW?dHIC6pZcaCW=ru2^f!b%Opyp5UT}g(kiLJyo zqV^ZhbKZ1=$mDoY^C)!{)$heI(BOK>PxGDVUk$To?Gt>(+lI$)Et(_q+&3%$54X`g zet#Aozn%B*Lt11-?zg|d=rH5j z_e<_L)HoGtoTC5WRIZME!_=97f}L1mELk*1u0Aq3%*Wb?@Bd(JgoC``BmE-{4(T&` zFGCDD(P}=OuHB70r#LBR??d9Mzw{m0U?`X}$4( z&q#9V9w_ep#>Es=_d~6WcMv;?UBvCg9mJi)UgG0y@L{6#6o(oQ+DB_#C>~cXE*F_ihp^o$9wBd|M6-6qdBAhWdjq94?Q1##pr5n&G|ppfd4zedW9Dz@LsO?QC;IIN58wd zgak7kA2KZ89*Ui}W;%}4e`=uGt93>5rS6jT`>gmL$!s{)BVMXsaiP+EdddGH3Gh4N znA=4!n@~B?N8^zM(Y-C>`acNNA7ZF+srp`GMH+9qpY_L`-skv$^tz|jx|wFZS}!9x zsQ^E&@uzi6{UlVnP~}gO-{}TWi~7tTzfcYT|L2@1_qaHC@U9?-Fxq{gdFTak@KQY% 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 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 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 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
    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 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 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 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 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 17:10:23 -0800 Subject: [PATCH 22/37] 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 5c5a65da..e441b9dc 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 222b07ad7ae11bd37a41333fa7661c540d18f807 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 26 Apr 2019 10:17:38 -0700 Subject: [PATCH 23/37] Well contact cleanup for SCMOS TSMC 0.35 --- .../scn4m_subm/gds_lib/write_driver.gds | Bin 11804 -> 11484 bytes .../scn4m_subm/mag_lib/write_driver.mag | 104 +++++++++--------- technology/scn4m_subm/tech/SCN4M_SUBM.20.tech | 16 +-- 3 files changed, 61 insertions(+), 59 deletions(-) diff --git a/technology/scn4m_subm/gds_lib/write_driver.gds b/technology/scn4m_subm/gds_lib/write_driver.gds index 44dabaf15053ee00c0423e6f735b73240698d467..1f9274ac7ef3ec3b246ba7fcd29ea8c597cf71ce 100644 GIT binary patch delta 1926 zcmZ{lJ!}(a7{~u-U(e1Fz&55y)aa5sP?CPc%2avifT$3is*J8w^#c_IiyK7(G(WLx+qVP!)AZGa##D7DS)FUq7NMY9#CD-1EEVc|RY2 z_wmz@B6vt4jd3T1t8g)bVN4?&d_N+wk!JMf^#6pA^SrBzmoA_G^ozwySI#dsfBw;L zw_dz>{upSt%mwE{bhic+=KWKC%tEWbMr&HRu*Z`{nKQBe0gVB_U9n+hp~EJ}u%O}SD|;^9Bs z=(LQTCsO&oINV<4X*Y@UffKbVz=-Ur^5MRmx-6hG*~sR6U#rgnW0FBh-G(jebEYTRZpnC9 zRLSD*wjBg{tJT+To&r4iD5=}9<;_#3S`4Dvq}7zvd8w4ONfV2F?M}=qh)$YXY8+3cwqmn57=0@+oY@?n0S05lw`a?Oh)pArRBS_wx9IIKXIZ5 z4O>+CP{zsKQ9fvxY7j*C%k~^Ax4QN`EAPvh3BGqidF=l!n>8Sh0IMpuq)|);5xWc5 zQAwSea&y7NqOmDaQ)*LEvN;X3;hNP*hS^_~qLo6Mt?=Y!tK*E1{s1UNtBTe?DKZ{q zbN-bR6NeMw4!~OMfLfbvfI}tMc1$lU6?DgypFcLS)VRJaIY$8{v)H#RuW$D!rhQcT zb;C|fDg88#{@qW_Ui5Ciy|U#eh6vyA}uCsr#Cb}l=nxwP4)3C+})1`-!Lk>%AsmC5Il-7hs43t46BqpNS zq+3};(~+Mw24dS&@K6R}a}av*=%I%_6%Qdu57yJtV=pCr-+A+52#p}0ncw@)`~LpD zx6i+L@})~QB`8VftpweoETt$<@6*ZXxtE_W(&bfmc<3!5>a*?JGdFHt|N5Jm8@H~{ zm=8xT6*fB*{V9o7LuYk4$Zd9BzWjHKXtQIg)}-6oAv*mzk@CmOL{>ngZ0(rPa@++T zdWXMKe!oGKyGW#52u#=V3J9k=A_MOn7~eWu%{Tb5C>dVyfG8SQ7LAwq$sMf`onfi+ zGk#8t6Ddb)CQNuagfYyohlxWMN!3J?ioeX~PSJ$P53;O^MvLY!`Daya26>~95By|T z?3J)fi5+$ccB!ZC(il;Jl}fWklq?e|m&Q!kQ>t)2c+AIaW{6Jg5Gm)$bbB24E`JP} z67uYXd)PpBFjYd9bKLveM5kDy{H{*a`zw+1{z4aqC^@vlUsCa(`;{;(^@qR*tdf2sV9{^iHAd_!a)vZ4hk z(dJ@VVfVNjV#TL^k(Gli>#{7mDI8M%&yDfQrAkIRc{3)ah;39hGsZ7_1wC=)RbE)x zaT`ZcNlIkF*UH9`!NRoFD(Cm&mKzf-xAJ<+HItQ(%=6)r`K@v_hXtT4SEkxkcPRbl z(cl*szcNZb8h=>!{PkTz7`vlf8f%Bci M7> rect -3 101 37 138 rect -3 0 37 51 << pwell >> -rect -3 138 37 202 +rect -3 138 37 203 rect -3 51 37 101 << ntransistor >> -rect 9 177 11 189 -rect 17 177 19 189 -rect 15 162 27 164 +rect 9 178 11 190 +rect 17 178 19 190 +rect 15 163 27 165 rect 9 144 11 148 rect 17 144 19 148 rect 10 82 12 89 @@ -27,14 +27,14 @@ 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 178 9 190 +rect 11 178 12 190 +rect 16 178 17 190 +rect 19 178 20 190 +rect 15 165 27 166 +rect 15 162 27 163 +rect 12 158 15 161 +rect 12 156 16 158 rect 8 144 9 148 rect 11 144 12 148 rect 16 144 17 148 @@ -43,7 +43,7 @@ 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 25 82 26 89 rect 7 57 8 64 rect 10 57 11 64 rect 15 57 16 64 @@ -68,11 +68,11 @@ 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 178 8 190 +rect 12 178 16 190 +rect 20 178 24 190 +rect 15 166 27 170 +rect 15 158 27 162 rect 4 144 8 148 rect 12 144 16 148 rect 20 144 24 148 @@ -96,21 +96,21 @@ rect 19 38 23 45 rect 27 38 31 45 << psubstratepcontact >> rect 12 152 16 156 -rect 26 82 30 86 +rect 26 82 30 89 << 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 195 30 197 +rect 9 190 11 195 +rect 17 190 19 192 +rect 28 186 30 195 +rect 9 176 11 178 +rect 17 173 19 178 +rect 6 171 19 173 +rect 6 168 8 171 +rect 13 163 15 165 +rect 27 163 33 165 rect 9 148 11 150 rect 17 148 19 150 rect 9 132 11 144 @@ -136,7 +136,7 @@ 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 31 71 33 163 rect 11 69 33 71 rect 11 67 13 69 rect 8 65 13 67 @@ -153,26 +153,27 @@ 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 28 182 32 186 +rect 4 164 8 168 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 5 193 10 197 +rect 5 190 8 193 +rect 32 182 33 186 +rect 13 170 16 178 +rect 13 166 15 170 +rect 4 148 8 164 +rect 12 158 15 162 +rect 12 156 16 158 +rect 23 157 27 158 rect 12 148 16 152 rect 4 132 8 144 rect 20 142 24 144 -rect 30 142 33 181 +rect 30 142 33 182 rect 20 138 33 142 rect 20 132 24 138 rect 12 122 16 125 @@ -196,29 +197,30 @@ 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 10 193 14 197 +rect 20 190 24 194 rect 23 153 27 157 rect 16 118 20 122 -rect 26 86 30 90 +rect 26 89 30 90 +rect 26 86 30 89 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 10 197 14 203 +rect 20 194 24 203 +rect 20 178 24 190 rect 15 0 19 6 << bb >> -rect 0 0 34 202 +rect 0 0 34 203 << 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 +rlabel metal2 12 201 12 201 5 bl +rlabel metal2 22 201 22 201 5 br << end >> diff --git a/technology/scn4m_subm/tech/SCN4M_SUBM.20.tech b/technology/scn4m_subm/tech/SCN4M_SUBM.20.tech index f39aa84f..deaae865 100644 --- a/technology/scn4m_subm/tech/SCN4M_SUBM.20.tech +++ b/technology/scn4m_subm/tech/SCN4M_SUBM.20.tech @@ -636,8 +636,8 @@ style lambda=0.20(p) #CRE/CRM layer CRM rm1,prm1,rm2,prm2,rm3,prm3,rm4,prm4 #CRE/CRM calma 70 0 - layer CX comment - labels comment + layer CX comment,bb + labels comment,bb calma 63 0 layer XP pad,xp @@ -1075,8 +1075,8 @@ style lambda=0.20(cp) #CRE/CRM layer CRM rm1,prm1,rm2,prm2,rm3,prm3,rm4,prm4 #CRE/CRM calma 70 0 - layer CX comment - labels comment + layer CX comment,bb + labels comment,bb calma 63 0 layer XP pad,xp @@ -1412,8 +1412,8 @@ style lambda=0.20(c) #CRE/CRM layer CRM rm1,prm1,rm2,prm2,rm3,prm3,rm4,prm4 #CRE/CRM calma 70 0 - layer CX comment - labels comment + layer CX comment,bb + labels comment,bb calma 63 0 layer XP pad,xp @@ -1749,8 +1749,8 @@ style lambda=0.20() #CRE/CRM layer CRM rm1,prm1,rm2,prm2,rm3,prm3,rm4,prm4 #CRE/CRM calma 70 0 - layer CX comment - labels comment + layer CX comment,bb + labels comment,bb calma 63 0 layer XP pad,xp From 05ad4285af3f21de35023a6b34e244057a0b7a4f Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 26 Apr 2019 11:57:29 -0700 Subject: [PATCH 24/37] Cleanup pgate code. Moved create_netlist and create_layout to the pgate class from which everything is derived. Modified all pgates to have consistent debug output and order of init function. --- compiler/base/hierarchy_design.py | 2 +- compiler/base/hierarchy_spice.py | 12 +- compiler/pgates/pand2.py | 16 +- compiler/pgates/pbuf.py | 10 +- compiler/pgates/pdriver.py | 14 +- compiler/pgates/pgate.py | 13 ++ compiler/pgates/pinv.py | 20 +- compiler/pgates/pinvbuf.py | 17 +- compiler/pgates/pnand2.py | 9 +- compiler/pgates/pnand3.py | 9 +- compiler/pgates/pnor2.py | 14 +- compiler/pgates/precharge.py | 14 +- compiler/pgates/ptristate_inv.py | 220 +++++++++++++++++++++ compiler/pgates/ptx.py | 7 +- compiler/pgates/single_level_column_mux.py | 14 +- 15 files changed, 301 insertions(+), 90 deletions(-) create mode 100644 compiler/pgates/ptristate_inv.py diff --git a/compiler/base/hierarchy_design.py b/compiler/base/hierarchy_design.py index 4f72d8f6..29624af0 100644 --- a/compiler/base/hierarchy_design.py +++ b/compiler/base/hierarchy_design.py @@ -21,8 +21,8 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): self.sp_file = OPTS.openram_tech + "sp_lib/" + name + ".sp" self.name = name - hierarchy_layout.layout.__init__(self, name) hierarchy_spice.spice.__init__(self, name) + hierarchy_layout.layout.__init__(self, name) def get_layout_pins(self,inst): diff --git a/compiler/base/hierarchy_spice.py b/compiler/base/hierarchy_spice.py index cb2799f3..93c1c041 100644 --- a/compiler/base/hierarchy_spice.py +++ b/compiler/base/hierarchy_spice.py @@ -28,7 +28,10 @@ class spice(): # Spice format) self.conns = [] # Keep track of any comments to add the the spice - self.comments = [] + try: + self.commments + except: + self.comments = [] self.sp_read() @@ -38,7 +41,12 @@ class spice(): def add_comment(self, comment): """ Add a comment to the spice file """ - self.comments.append(comment) + try: + self.commments + except: + self.comments = [] + else: + self.comments.append(comment) def add_pin(self, name, pin_type="INOUT"): """ Adds a pin to the pins list. Default type is INOUT signal. """ diff --git a/compiler/pgates/pand2.py b/compiler/pgates/pand2.py index c2165b20..f46c0d04 100644 --- a/compiler/pgates/pand2.py +++ b/compiler/pgates/pand2.py @@ -11,16 +11,13 @@ class pand2(pgate.pgate): This is a simple buffer used for driving loads. """ def __init__(self, name, size=1, height=None): - self.size = size - - pgate.pgate.__init__(self, name, height) - debug.info(1, "Creating {}".format(self.name)) + debug.info(1, "reating pnand2 {}".format(name)) self.add_comment("size: {}".format(size)) - self.create_netlist() - if not OPTS.netlist_only: - self.create_layout() - + self.size = size + + # Creates the netlist and layout + pgate.pgate.__init__(self, name, height) def create_netlist(self): self.add_pins() @@ -40,6 +37,7 @@ class pand2(pgate.pgate): self.place_insts() self.add_wires() self.add_layout_pins() + self.DRC_LVS() def add_pins(self): self.add_pin("A") @@ -129,4 +127,4 @@ class pand2(pgate.pgate): def get_cin(self): """Return the relative input capacitance of a single input""" return self.nand.get_cin() - \ No newline at end of file + diff --git a/compiler/pgates/pbuf.py b/compiler/pgates/pbuf.py index 9d73c004..02137ead 100644 --- a/compiler/pgates/pbuf.py +++ b/compiler/pgates/pbuf.py @@ -12,17 +12,15 @@ class pbuf(pgate.pgate): """ def __init__(self, name, size=4, height=None): + debug.info(1, "creating {0} with size of {1}".format(name,size)) + self.add_comment("size: {}".format(size)) + self.stage_effort = 4 self.size = size self.height = height + # Creates the netlist and layout pgate.pgate.__init__(self, name, height) - debug.info(1, "creating {0} with size of {1}".format(self.name,self.size)) - self.add_comment("size: {}".format(size)) - - self.create_netlist() - if not OPTS.netlist_only: - self.create_layout() def create_netlist(self): diff --git a/compiler/pgates/pdriver.py b/compiler/pgates/pdriver.py index 02e4355c..7a60309f 100644 --- a/compiler/pgates/pdriver.py +++ b/compiler/pgates/pdriver.py @@ -13,6 +13,8 @@ class pdriver(pgate.pgate): """ def __init__(self, name, neg_polarity=False, fanout=0, size_list=None, height=None): + debug.info(1, "creating pdriver {}".format(name)) + self.stage_effort = 3 self.height = height self.neg_polarity = neg_polarity @@ -26,16 +28,9 @@ class pdriver(pgate.pgate): if self.size_list and self.neg_polarity: debug.error("Cannot specify both size_list and neg_polarity.", -1) + # Creates the netlist and layout pgate.pgate.__init__(self, name, height) - debug.info(1, "Creating {}".format(self.name)) - self.compute_sizes() - - self.add_comment("sizes: {}".format(str(self.size_list))) - - self.create_netlist() - if not OPTS.netlist_only: - self.create_layout() def compute_sizes(self): # size_list specified @@ -63,6 +58,8 @@ class pdriver(pgate.pgate): def create_netlist(self): + self.compute_sizes() + self.add_comment("sizes: {}".format(str(self.size_list))) self.add_pins() self.add_modules() self.create_insts() @@ -75,7 +72,6 @@ class pdriver(pgate.pgate): self.width = self.inv_inst_list[-1].rx() self.height = self.inv_inst_list[0].height - self.DRC_LVS() def add_pins(self): self.add_pin("A") diff --git a/compiler/pgates/pgate.py b/compiler/pgates/pgate.py index 073efa0c..dcc474d0 100644 --- a/compiler/pgates/pgate.py +++ b/compiler/pgates/pgate.py @@ -21,7 +21,20 @@ class pgate(design.design): b = factory.create(module_type="bitcell") self.height = b.height + self.create_netlist() + if not OPTS.netlist_only: + self.create_layout() + self.DRC_LVS() + + def create_netlist(): + """ Pure virtual function """ + debug.error("Must over-ride create_netlist.",-1) + + def create_layout(): + """ Pure virtual function """ + debug.error("Must over-ride create_layout.",-1) + def connect_pin_to_rail(self,inst,pin,supply): """ Connects a ptx pin to a supply rail. """ source_pin = inst.get_pin(pin) diff --git a/compiler/pgates/pinv.py b/compiler/pgates/pinv.py index b488013d..e3ff4a37 100644 --- a/compiler/pgates/pinv.py +++ b/compiler/pgates/pinv.py @@ -20,28 +20,18 @@ class pinv(pgate.pgate): """ def __init__(self, name, size=1, beta=parameter["beta"], height=None, route_output=True): - # We need to keep unique names because outputting to GDSII - # will use the last record with a given name. I.e., you will - # over-write a design in GDS if one has and the other doesn't - # have poly connected, for example. - pgate.pgate.__init__(self, name, height) - debug.info(2, "create pinv structure {0} with size of {1}".format(name, size)) + + debug.info(2, "creating pinv structure {0} with size of {1}".format(name, size)) self.add_comment("size: {}".format(size)) - + self.size = size self.nmos_size = size self.pmos_size = beta*size self.beta = beta self.route_output = False - - self.create_netlist() - if not OPTS.netlist_only: - self.create_layout() - - # for run-time, we won't check every transitor DRC/LVS independently - # but this may be uncommented for debug purposes - #self.DRC_LVS() + # Creates the netlist and layout + pgate.pgate.__init__(self, name, height) def create_netlist(self): """ Calls all functions related to the generation of the netlist """ diff --git a/compiler/pgates/pinvbuf.py b/compiler/pgates/pinvbuf.py index 06936895..446d8918 100644 --- a/compiler/pgates/pinvbuf.py +++ b/compiler/pgates/pinvbuf.py @@ -1,18 +1,21 @@ import debug -import design +import pgate from tech import drc from math import log from vector import vector from globals import OPTS from sram_factory import factory -class pinvbuf(design.design): +class pinvbuf(pgate.pgate): """ This is a simple inverter/buffer used for driving loads. It is used in the column decoder for 1:2 decoding and as the clock buffer. """ def __init__(self, name, size=4, height=None): + debug.info(1, "creating pinvbuf {}".format(name)) + self.add_comment("size: {}".format(size)) + self.stage_effort = 4 self.row_height = height # FIXME: Change the number of stages to support high drives. @@ -23,13 +26,8 @@ class pinvbuf(design.design): self.size = size self.predriver_size = max(int(self.size/(self.stage_effort/2)),1) - design.design.__init__(self, name) - debug.info(1, "Creating {}".format(self.name)) - self.add_comment("size: {}".format(size)) - - self.create_netlist() - if not OPTS.netlist_only: - self.create_layout() + # Creates the netlist and layout + pgate.pgate.__init__(self, name) def create_netlist(self): @@ -48,7 +46,6 @@ class pinvbuf(design.design): self.offset_all_coordinates() - self.DRC_LVS() def add_pins(self): self.add_pin("A") diff --git a/compiler/pgates/pnand2.py b/compiler/pgates/pnand2.py index 168bfaf2..f6441f41 100644 --- a/compiler/pgates/pnand2.py +++ b/compiler/pgates/pnand2.py @@ -14,8 +14,8 @@ class pnand2(pgate.pgate): """ def __init__(self, name, size=1, height=None): """ Creates a cell for a simple 2 input nand """ - pgate.pgate.__init__(self, name, height) - debug.info(2, "create pnand2 structure {0} with size of {1}".format(name, size)) + + debug.info(2, "creating pnand2 structure {0} with size of {1}".format(name, size)) self.add_comment("size: {}".format(size)) self.size = size @@ -28,9 +28,8 @@ class pnand2(pgate.pgate): debug.check(size==1,"Size 1 pnand2 is only supported now.") self.tx_mults = 1 - self.create_netlist() - if not OPTS.netlist_only: - self.create_layout() + # Creates the netlist and layout + pgate.pgate.__init__(self, name, height) def create_netlist(self): diff --git a/compiler/pgates/pnand3.py b/compiler/pgates/pnand3.py index 95d02f29..80a92f66 100644 --- a/compiler/pgates/pnand3.py +++ b/compiler/pgates/pnand3.py @@ -14,8 +14,8 @@ class pnand3(pgate.pgate): """ def __init__(self, name, size=1, height=None): """ Creates a cell for a simple 3 input nand """ - pgate.pgate.__init__(self, name, height) - debug.info(2, "create pnand3 structure {0} with size of {1}".format(name, size)) + + debug.info(2, "creating pnand3 structure {0} with size of {1}".format(name, size)) self.add_comment("size: {}".format(size)) # We have trouble pitch matching a 3x sizes to the bitcell... @@ -30,9 +30,8 @@ class pnand3(pgate.pgate): debug.check(size==1,"Size 1 pnand3 is only supported now.") self.tx_mults = 1 - self.create_netlist() - if not OPTS.netlist_only: - self.create_layout() + # Creates the netlist and layout + pgate.pgate.__init__(self, name, height) def add_pins(self): diff --git a/compiler/pgates/pnor2.py b/compiler/pgates/pnor2.py index 125261d1..49206333 100644 --- a/compiler/pgates/pnor2.py +++ b/compiler/pgates/pnor2.py @@ -13,8 +13,8 @@ class pnor2(pgate.pgate): """ def __init__(self, name, size=1, height=None): """ Creates a cell for a simple 2 input nor """ - pgate.pgate.__init__(self, name, height) - debug.info(2, "create pnor2 structure {0} with size of {1}".format(name, size)) + + debug.info(2, "creating pnor2 structure {0} with size of {1}".format(name, size)) self.add_comment("size: {}".format(size)) self.nmos_size = size @@ -27,9 +27,8 @@ class pnor2(pgate.pgate): debug.check(size==1,"Size 1 pnor2 is only supported now.") self.tx_mults = 1 - self.create_netlist() - self.create_layout() - #self.DRC_LVS() + # Creates the netlist and layout + pgate.pgate.__init__(self, name, height) def add_pins(self): @@ -38,12 +37,11 @@ class pnor2(pgate.pgate): def create_netlist(self): self.add_pins() + self.create_ptx() + self.setup_layout_constants() def create_layout(self): """ Calls all functions related to the generation of the layout """ - - self.create_ptx() - self.setup_layout_constants() self.add_supply_rails() self.add_ptx() self.connect_rails() diff --git a/compiler/pgates/precharge.py b/compiler/pgates/precharge.py index 5a7672d6..c2860ec6 100644 --- a/compiler/pgates/precharge.py +++ b/compiler/pgates/precharge.py @@ -12,20 +12,19 @@ class precharge(pgate.pgate): This module implements the precharge bitline cell used in the design. """ def __init__(self, name, size=1, bitcell_bl="bl", bitcell_br="br"): - pgate.pgate.__init__(self, name) - debug.info(2, "create single precharge cell: {0}".format(name)) + + debug.info(2, "creating precharge cell {0}".format(name)) self.bitcell = factory.create(module_type="bitcell") - self.beta = parameter["beta"] self.ptx_width = self.beta*parameter["min_tx_size"] self.width = self.bitcell.width self.bitcell_bl = bitcell_bl self.bitcell_br = bitcell_br - - self.create_netlist() - if not OPTS.netlist_only: - self.create_layout() + + # Creates the netlist and layout + pgate.pgate.__init__(self, name) + def create_netlist(self): self.add_pins() @@ -40,7 +39,6 @@ class precharge(pgate.pgate): self.route_vdd_rail() self.route_bitlines() self.connect_to_bitlines() - self.DRC_LVS() def add_pins(self): self.add_pin_list(["bl", "br", "en_bar", "vdd"]) diff --git a/compiler/pgates/ptristate_inv.py b/compiler/pgates/ptristate_inv.py new file mode 100644 index 00000000..14c1f7d8 --- /dev/null +++ b/compiler/pgates/ptristate_inv.py @@ -0,0 +1,220 @@ +import contact +import pgate +import debug +from tech import drc, parameter, spice +from vector import vector +from math import ceil +from globals import OPTS +from utils import round_to_grid +import logical_effort +from sram_factory import factory + +class ptristate_inv(pgate.pgate): + """ + ptristate generates gds of a parametrically sized tristate inverter. + + There is some flexibility in the size, but we do not allow multiple fingers + to fit in the cell height. + + """ + + def __init__(self, name, size=1, height=None): + + debug.info(2, "creating ptristate inv {0} with size of {1}".format(name, size)) + self.add_comment("size: {}".format(size)) + + # We are 2x since there are two series devices + self.size = 2*size + self.nmos_size = size + self.beta = parameter["beta"] + self.pmos_size = self.beta*size + + self.nmos_width = self.nmos_size * drc("minwidth_tx") + self.pmos_width = self.pmos_size * drc("minwidth_tx") + + # Creates the netlist and layout + pgate.pgate.__init__(self, name, height) + + def create_netlist(self): + """ Calls all functions related to the generation of the netlist """ + self.add_pins() + self.add_ptx() + self.create_ptx() + + def create_layout(self): + """ Calls all functions related to the generation of the layout """ + self.setup_layout_constants() + self.route_supply_rails() + self.place_ptx() + self.add_well_contacts() + self.extend_wells(self.well_pos) + self.connect_rails() + self.route_inputs() + self.route_outputs() + + def add_pins(self): + """ Adds pins for spice netlist """ + self.add_pin_list(["in", "out", "en", "en_bar", "vdd", "gnd"]) + + + def setup_layout_constants(self): + """ + Pre-compute some handy layout parameters. + """ + + # Compute the other pmos2 location, but determining offset to overlap the + # source and drain pins + self.overlap_offset = self.pmos.get_pin("D").ll() - self.pmos.get_pin("S").ll() + + # Two PMOS devices and a well contact. Separation between each. + # Enclosure space on the sides. + self.well_width = 2*self.pmos.active_width + drc("well_enclosure_active") + + # Add an extra space because we route the output on the right of the S/D + self.width = self.well_width + 0.5*self.m1_space + # Height is an input parameter, so it is not recomputed. + + # Make sure we can put a well above and below + self.top_bottom_space = max(contact.well.width, contact.well.height) + + + def add_ptx(self): + """ Create the PMOS and NMOS transistors. """ + self.nmos = factory.create(module_type="ptx", + width=self.nmos_width, + mults=1, + tx_type="nmos") + self.add_mod(self.nmos) + + self.pmos = factory.create(module_type="ptx", + width=self.pmos_width, + mults=1, + tx_type="pmos") + + self.add_mod(self.pmos) + + def route_supply_rails(self): + """ Add vdd/gnd rails to the top and bottom. """ + self.add_layout_pin_rect_center(text="gnd", + layer="metal1", + offset=vector(0.5*self.width,0), + width=self.width) + + self.add_layout_pin_rect_center(text="vdd", + layer="metal1", + offset=vector(0.5*self.width,self.height), + width=self.width) + + + def create_ptx(self): + """ + Create the PMOS and NMOS netlist. + """ + + # These are the inverter PMOS/NMOS + self.pmos1_inst=self.add_inst(name="ptri_pmos1", mod=self.pmos) + self.connect_inst(["vdd", "in", "n1", "vdd"]) + self.nmos1_inst=self.add_inst(name="ptri_nmos1", mod=self.nmos) + self.connect_inst(["gnd", "in", "n2", "gnd"]) + + + # These are the tristate PMOS/NMOS + self.pmos2_inst = self.add_inst(name="ptri_pmos2", mod=self.pmos) + self.connect_inst(["out", "en_bar", "n1", "vdd"]) + self.nmos2_inst=self.add_inst(name="ptri_nmos2", mod=self.nmos) + self.connect_inst(["out", "en", "n2", "gnd"]) + + + + def place_ptx(self): + """ + Place PMOS and NMOS to the layout at the upper-most and lowest position + to provide maximum routing in channel + """ + + pmos_yoff = self.height - self.pmos.active_height - self.top_bottom_space - 0.5*contact.well.height + nmos_yoff = self.top_bottom_space + 0.5*contact.well.height + + # Tristate transistors + pmos1_pos = vector(self.pmos.active_offset.x, pmos_yoff) + self.pmos1_inst.place(pmos1_pos) + nmos1_pos = vector(self.pmos.active_offset.x, nmos_yoff) + self.nmos1_inst.place(nmos1_pos) + + # Inverter transistors + self.pmos2_pos = pmos1_pos + self.overlap_offset + self.pmos2_inst.place(self.pmos2_pos) + self.nmos2_pos = nmos1_pos + self.overlap_offset + self.nmos2_inst.place(self.nmos2_pos) + + # Output position will be in between the PMOS and NMOS + self.output_pos = vector(0, 0.5*(pmos_yoff + nmos_yoff + self.nmos.height)) + + # This will help with the wells + self.well_pos = vector(0,self.nmos1_inst.uy()) + + + def route_inputs(self): + """ Route the gates """ + + self.route_input_gate(self.pmos1_inst, self.nmos1_inst, self.output_pos.y, "in", position="farleft") + self.route_single_gate(self.pmos2_inst, "en_bar", position="left") + self.route_single_gate(self.nmos2_inst, "en", position="left") + + + def route_outputs(self): + """ Route the output (drains) together. """ + + nmos_drain_pin = self.nmos2_inst.get_pin("D") + pmos_drain_pin = self.pmos2_inst.get_pin("D") + + nmos_drain_pos = nmos_drain_pin.lr() + pmos_drain_pos = pmos_drain_pin.ur() + + self.add_layout_pin(text="out", + layer="metal1", + offset=nmos_drain_pos, + height=pmos_drain_pos.y-nmos_drain_pos.y) + + + def add_well_contacts(self): + """ Add n/p well taps to the layout and connect to supplies AFTER the wells are created """ + + layer_stack = ("active", "contact", "metal1") + + drain_pos = self.nmos1_inst.get_pin("S").center() + vdd_pos = self.get_pin("vdd").center() + self.nwell_contact=self.add_via_center(layers=layer_stack, + offset=vector(drain_pos.x,vdd_pos.y), + implant_type="n", + well_type="n") + + gnd_pos = self.get_pin("gnd").center() + self.pwell_contact=self.add_via_center(layers=layer_stack, + offset=vector(drain_pos.x,gnd_pos.y), + implant_type="p", + well_type="p") + + + + def connect_rails(self): + """ Connect the nmos and pmos to its respective power rails """ + + self.connect_pin_to_rail(self.nmos1_inst,"S","gnd") + self.connect_pin_to_rail(self.pmos1_inst,"S","vdd") + + + def analytical_delay(self, corner, slew, load=0.0): + from tech import spice + r = spice["min_tx_r"] + c_para = spice["min_tx_drain_c"] + return self.cal_delay_with_rc(corner, r = r, c = c_para+load, slew = slew) + + def analytical_power(self, corner, load): + """Returns dynamic and leakage power. Results in nW""" + #Power in this module currently not defined. Returns 0 nW (leakage and dynamic). + total_power = self.return_power() + return total_power + + def input_load(self): + return 9*spice["min_tx_gate_c"] diff --git a/compiler/pgates/ptx.py b/compiler/pgates/ptx.py index 36fda7a0..c0686bbb 100644 --- a/compiler/pgates/ptx.py +++ b/compiler/pgates/ptx.py @@ -28,9 +28,7 @@ class ptx(design.design): name += "_c{}".format(num_contacts) # replace periods with underscore for newer spice compatibility name=name.replace('.','_') - - design.design.__init__(self, name) - debug.info(3, "create ptx2 structure {0}".format(name)) + debug.info(3, "creating ptx {0}".format(name)) self.tx_type = tx_type self.mults = mults @@ -39,6 +37,9 @@ class ptx(design.design): self.connect_poly = connect_poly self.num_contacts = num_contacts + # Do NOT create the netlist and layout (not a pgate) + design.design.__init__(self, name) + self.create_netlist() # We must always create ptx layout for pbitcell # some transistor sizes in other netlist depend on pbitcell diff --git a/compiler/pgates/single_level_column_mux.py b/compiler/pgates/single_level_column_mux.py index d652fa9f..70579cf5 100644 --- a/compiler/pgates/single_level_column_mux.py +++ b/compiler/pgates/single_level_column_mux.py @@ -1,4 +1,4 @@ -import design +import pgate import debug from tech import drc from vector import vector @@ -7,7 +7,7 @@ from globals import OPTS from sram_factory import factory import logical_effort -class single_level_column_mux(design.design): +class single_level_column_mux(pgate.gate): """ This module implements the columnmux bitline cell used in the design. Creates a single columnmux cell with the given integer size relative @@ -15,18 +15,14 @@ class single_level_column_mux(design.design): Column-mux transistors driven by the decoder must be sized for optimal speed """ def __init__(self, name, tx_size=8, bitcell_bl="bl", bitcell_br="br"): + + debug.info(2, "creating single column mux cell: {0}".format(name)) self.tx_size = int(tx_size) - - design.design.__init__(self, name) - debug.info(2, "create single column mux cell: {0}".format(name)) - self.bitcell_bl = bitcell_bl self.bitcell_br = bitcell_br - self.create_netlist() - if not OPTS.netlist_only: - self.create_layout() + pgate.pgate.__init__(self, name) def create_netlist(self): self.add_modules() From 0439b129bb2298ec23f08bd4489d0873d97970dc Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 26 Apr 2019 12:15:05 -0700 Subject: [PATCH 25/37] Some pgates are designs since not a fixed height --- compiler/pgates/precharge.py | 14 +++++++++----- compiler/pgates/ptx.py | 4 ++-- compiler/pgates/single_level_column_mux.py | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/compiler/pgates/precharge.py b/compiler/pgates/precharge.py index c2860ec6..d5f9eedb 100644 --- a/compiler/pgates/precharge.py +++ b/compiler/pgates/precharge.py @@ -1,12 +1,12 @@ import contact -import pgate +import design import debug from tech import drc, parameter from vector import vector from globals import OPTS from sram_factory import factory -class precharge(pgate.pgate): +class precharge(design.design): """ Creates a single precharge cell This module implements the precharge bitline cell used in the design. @@ -14,6 +14,7 @@ class precharge(pgate.pgate): def __init__(self, name, size=1, bitcell_bl="bl", bitcell_br="br"): debug.info(2, "creating precharge cell {0}".format(name)) + design.design.__init__(self, name) self.bitcell = factory.create(module_type="bitcell") self.beta = parameter["beta"] @@ -22,9 +23,13 @@ class precharge(pgate.pgate): self.bitcell_bl = bitcell_bl self.bitcell_br = bitcell_br - # Creates the netlist and layout - pgate.pgate.__init__(self, name) + # Creates the netlist and layout + # Since it has variable height, it is not a pgate. + self.create_netlist() + if not OPTS.netlist_only: + self.create_layout() + self.DRC_LVS() def create_netlist(self): self.add_pins() @@ -150,7 +155,6 @@ class precharge(pgate.pgate): self.add_via_center(layers=("poly", "contact", "metal1"), offset=offset) - # adds the en rail on metal1 self.add_layout_pin_segment_center(text="en_bar", layer="metal1", diff --git a/compiler/pgates/ptx.py b/compiler/pgates/ptx.py index c0686bbb..c2124d63 100644 --- a/compiler/pgates/ptx.py +++ b/compiler/pgates/ptx.py @@ -29,6 +29,7 @@ class ptx(design.design): # replace periods with underscore for newer spice compatibility name=name.replace('.','_') debug.info(3, "creating ptx {0}".format(name)) + design.design.__init__(self, name) self.tx_type = tx_type self.mults = mults @@ -38,8 +39,7 @@ class ptx(design.design): self.num_contacts = num_contacts # Do NOT create the netlist and layout (not a pgate) - design.design.__init__(self, name) - + # Since it has variable height, it is not a pgate. self.create_netlist() # We must always create ptx layout for pbitcell # some transistor sizes in other netlist depend on pbitcell diff --git a/compiler/pgates/single_level_column_mux.py b/compiler/pgates/single_level_column_mux.py index 70579cf5..88e76e07 100644 --- a/compiler/pgates/single_level_column_mux.py +++ b/compiler/pgates/single_level_column_mux.py @@ -7,7 +7,7 @@ from globals import OPTS from sram_factory import factory import logical_effort -class single_level_column_mux(pgate.gate): +class single_level_column_mux(pgate.pgate): """ This module implements the columnmux bitline cell used in the design. Creates a single columnmux cell with the given integer size relative From 3f9a987e513c19b522f2288d19334acba3068f24 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 26 Apr 2019 12:21:50 -0700 Subject: [PATCH 26/37] Update copyright. Add header to all OpenRAM files. --- LICENSE | 2 +- compiler/base/contact.py | 7 +++++++ compiler/base/design.py | 7 +++++++ compiler/base/geometry.py | 7 +++++++ compiler/base/hierarchy_design.py | 7 +++++++ compiler/base/hierarchy_layout.py | 7 +++++++ compiler/base/hierarchy_spice.py | 7 +++++++ compiler/base/lef.py | 7 +++++++ compiler/base/pin_layout.py | 7 +++++++ compiler/base/route.py | 7 +++++++ compiler/base/utils.py | 7 +++++++ compiler/base/vector.py | 7 +++++++ compiler/base/verilog.py | 7 +++++++ compiler/base/wire.py | 7 +++++++ compiler/base/wire_path.py | 7 +++++++ compiler/bitcells/bitcell.py | 7 +++++++ compiler/bitcells/bitcell_1rw_1r.py | 7 +++++++ compiler/bitcells/bitcell_1w_1r.py | 7 +++++++ compiler/bitcells/pbitcell.py | 7 +++++++ compiler/bitcells/replica_bitcell.py | 7 +++++++ compiler/bitcells/replica_bitcell_1rw_1r.py | 7 +++++++ compiler/bitcells/replica_bitcell_1w_1r.py | 7 +++++++ compiler/bitcells/replica_pbitcell.py | 7 +++++++ compiler/characterizer/__init__.py | 7 +++++++ compiler/characterizer/bitline_delay.py | 7 +++++++ compiler/characterizer/charutils.py | 7 +++++++ compiler/characterizer/delay.py | 7 +++++++ compiler/characterizer/functional.py | 7 +++++++ compiler/characterizer/lib.py | 7 +++++++ compiler/characterizer/logical_effort.py | 7 +++++++ compiler/characterizer/measurements.py | 7 +++++++ compiler/characterizer/model_check.py | 7 +++++++ compiler/characterizer/setup_hold.py | 7 +++++++ compiler/characterizer/simulation.py | 7 +++++++ compiler/characterizer/stimuli.py | 7 +++++++ compiler/characterizer/trim_spice.py | 7 +++++++ compiler/characterizer/worst_case.py | 7 +++++++ compiler/datasheet/add_db.py | 7 +++++++ compiler/datasheet/datasheet.py | 7 +++++++ compiler/datasheet/datasheet_gen.py | 7 +++++++ compiler/datasheet/table_gen.py | 7 +++++++ compiler/debug.py | 7 +++++++ compiler/drc/design_rules.py | 7 +++++++ compiler/drc/drc_lut.py | 7 +++++++ compiler/drc/drc_value.py | 7 +++++++ compiler/gen_stimulus.py | 7 +++++++ compiler/globals.py | 7 +++++++ compiler/modules/bank.py | 7 +++++++ compiler/modules/bank_select.py | 7 +++++++ compiler/modules/bitcell_array.py | 7 +++++++ compiler/modules/control_logic.py | 7 +++++++ compiler/modules/delay_chain.py | 7 +++++++ compiler/modules/dff.py | 7 +++++++ compiler/modules/dff_array.py | 7 +++++++ compiler/modules/dff_buf.py | 7 +++++++ compiler/modules/dff_buf_array.py | 7 +++++++ compiler/modules/dff_inv.py | 7 +++++++ compiler/modules/dff_inv_array.py | 7 +++++++ compiler/modules/hierarchical_decoder.py | 7 +++++++ compiler/modules/hierarchical_predecode.py | 7 +++++++ compiler/modules/hierarchical_predecode2x4.py | 7 +++++++ compiler/modules/hierarchical_predecode3x8.py | 7 +++++++ compiler/modules/multibank.py | 7 +++++++ compiler/modules/precharge_array.py | 7 +++++++ compiler/modules/replica_bitline.py | 7 +++++++ compiler/modules/sense_amp.py | 7 +++++++ compiler/modules/sense_amp_array.py | 7 +++++++ compiler/modules/single_level_column_mux_array.py | 7 +++++++ compiler/modules/tri_gate.py | 7 +++++++ compiler/modules/tri_gate_array.py | 7 +++++++ compiler/modules/wordline_driver.py | 7 +++++++ compiler/modules/write_driver.py | 7 +++++++ compiler/modules/write_driver_array.py | 7 +++++++ compiler/openram.py | 7 +++++++ compiler/options.py | 7 +++++++ compiler/pgates/pand2.py | 7 +++++++ compiler/pgates/pbuf.py | 7 +++++++ compiler/pgates/pdriver.py | 7 +++++++ compiler/pgates/pgate.py | 7 +++++++ compiler/pgates/pinv.py | 7 +++++++ compiler/pgates/pinvbuf.py | 7 +++++++ compiler/pgates/pnand2.py | 7 +++++++ compiler/pgates/pnand3.py | 7 +++++++ compiler/pgates/pnor2.py | 7 +++++++ compiler/pgates/precharge.py | 7 +++++++ compiler/pgates/ptristate_inv.py | 7 +++++++ compiler/pgates/ptx.py | 7 +++++++ compiler/pgates/single_level_column_mux.py | 7 +++++++ compiler/router/direction.py | 7 +++++++ compiler/router/grid.py | 7 +++++++ compiler/router/grid_cell.py | 7 +++++++ compiler/router/grid_path.py | 7 +++++++ compiler/router/grid_utils.py | 7 +++++++ compiler/router/pin_group.py | 7 +++++++ compiler/router/router.py | 7 +++++++ compiler/router/router_tech.py | 7 +++++++ compiler/router/signal_grid.py | 7 +++++++ compiler/router/signal_router.py | 7 +++++++ compiler/router/supply_grid.py | 7 +++++++ compiler/router/supply_router.py | 7 +++++++ compiler/router/tests/01_no_blockages_test.py | 7 +++++++ compiler/router/tests/02_blockages_test.py | 7 +++++++ compiler/router/tests/03_same_layer_pins_test.py | 7 +++++++ compiler/router/tests/04_diff_layer_pins_test.py | 7 +++++++ compiler/router/tests/05_two_nets_test.py | 7 +++++++ compiler/router/tests/06_pin_location_test.py | 7 +++++++ compiler/router/tests/07_big_test.py | 7 +++++++ compiler/router/tests/08_expand_region_test.py | 7 +++++++ compiler/router/tests/10_supply_grid_test.py | 7 +++++++ compiler/router/tests/config_freepdk45.py | 7 +++++++ compiler/router/tests/config_scn4m_subm.py | 7 +++++++ compiler/router/tests/gds_cell.py | 7 +++++++ compiler/router/tests/regress.py | 7 +++++++ compiler/router/tests/testutils.py | 7 +++++++ compiler/router/vector3d.py | 7 +++++++ compiler/sram.py | 7 +++++++ compiler/sram_1bank.py | 7 +++++++ compiler/sram_2bank.py | 7 +++++++ compiler/sram_base.py | 7 +++++++ compiler/sram_config.py | 7 +++++++ compiler/sram_factory.py | 7 +++++++ compiler/tests/00_code_format_check_test.py | 7 +++++++ compiler/tests/01_library_drc_test.py | 7 +++++++ compiler/tests/02_library_lvs_test.py | 7 +++++++ compiler/tests/03_contact_test.py | 7 +++++++ compiler/tests/03_path_test.py | 7 +++++++ compiler/tests/03_ptx_1finger_nmos_test.py | 7 +++++++ compiler/tests/03_ptx_1finger_pmos_test.py | 7 +++++++ compiler/tests/03_ptx_3finger_nmos_test.py | 7 +++++++ compiler/tests/03_ptx_3finger_pmos_test.py | 7 +++++++ compiler/tests/03_ptx_4finger_nmos_test.py | 7 +++++++ compiler/tests/03_ptx_4finger_pmos_test.py | 7 +++++++ compiler/tests/03_wire_test.py | 7 +++++++ compiler/tests/04_pand2_test.py | 7 +++++++ compiler/tests/04_pbitcell_test.py | 7 +++++++ compiler/tests/04_pbuf_test.py | 7 +++++++ compiler/tests/04_pdriver_test.py | 7 +++++++ compiler/tests/04_pinv_10x_test.py | 7 +++++++ compiler/tests/04_pinv_1x_beta_test.py | 7 +++++++ compiler/tests/04_pinv_1x_test.py | 7 +++++++ compiler/tests/04_pinv_2x_test.py | 7 +++++++ compiler/tests/04_pinvbuf_test.py | 7 +++++++ compiler/tests/04_pnand2_test.py | 7 +++++++ compiler/tests/04_pnand3_test.py | 7 +++++++ compiler/tests/04_pnor2_test.py | 7 +++++++ compiler/tests/04_precharge_test.py | 7 +++++++ compiler/tests/04_replica_pbitcell_test.py | 7 +++++++ compiler/tests/04_single_level_column_mux_test.py | 7 +++++++ compiler/tests/05_bitcell_1rw_1r_array_test.py | 7 +++++++ compiler/tests/05_bitcell_array_test.py | 7 +++++++ compiler/tests/05_pbitcell_array_test.py | 7 +++++++ compiler/tests/06_hierarchical_decoder_test.py | 7 +++++++ compiler/tests/06_hierarchical_predecode2x4_test.py | 7 +++++++ compiler/tests/06_hierarchical_predecode3x8_test.py | 7 +++++++ compiler/tests/07_single_level_column_mux_array_test.py | 7 +++++++ compiler/tests/08_precharge_array_test.py | 7 +++++++ compiler/tests/08_wordline_driver_test.py | 7 +++++++ compiler/tests/09_sense_amp_array_test.py | 7 +++++++ compiler/tests/10_write_driver_array_test.py | 7 +++++++ compiler/tests/11_dff_array_test.py | 7 +++++++ compiler/tests/11_dff_buf_array_test.py | 7 +++++++ compiler/tests/11_dff_buf_test.py | 7 +++++++ compiler/tests/12_tri_gate_array_test.py | 7 +++++++ compiler/tests/13_delay_chain_test.py | 7 +++++++ compiler/tests/14_replica_bitline_multiport_test.py | 7 +++++++ compiler/tests/14_replica_bitline_test.py | 7 +++++++ compiler/tests/16_control_logic_test.py | 7 +++++++ compiler/tests/19_bank_select_test.py | 7 +++++++ compiler/tests/19_multi_bank_test.py | 7 +++++++ compiler/tests/19_pmulti_bank_test.py | 7 +++++++ compiler/tests/19_psingle_bank_test.py | 7 +++++++ compiler/tests/19_single_bank_1rw_1r_test.py | 7 +++++++ compiler/tests/19_single_bank_test.py | 7 +++++++ compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py | 7 +++++++ compiler/tests/20_psram_1bank_2mux_1w_1r_test.py | 7 +++++++ compiler/tests/20_psram_1bank_2mux_test.py | 7 +++++++ compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py | 7 +++++++ compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py | 7 +++++++ compiler/tests/20_sram_1bank_2mux_1w_1r_test.py | 7 +++++++ compiler/tests/20_sram_1bank_2mux_test.py | 7 +++++++ compiler/tests/20_sram_1bank_4mux_test.py | 7 +++++++ compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py | 7 +++++++ compiler/tests/20_sram_1bank_8mux_test.py | 7 +++++++ compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py | 7 +++++++ compiler/tests/20_sram_1bank_nomux_test.py | 7 +++++++ compiler/tests/20_sram_2bank_test.py | 7 +++++++ compiler/tests/21_hspice_delay_test.py | 7 +++++++ compiler/tests/21_hspice_setuphold_test.py | 7 +++++++ compiler/tests/21_model_delay_test.py | 7 +++++++ compiler/tests/21_ngspice_delay_test.py | 7 +++++++ compiler/tests/21_ngspice_setuphold_test.py | 7 +++++++ compiler/tests/22_psram_1bank_2mux_func_test.py | 7 +++++++ compiler/tests/22_psram_1bank_4mux_func_test.py | 7 +++++++ compiler/tests/22_psram_1bank_8mux_func_test.py | 7 +++++++ compiler/tests/22_psram_1bank_nomux_func_test.py | 7 +++++++ compiler/tests/22_sram_1bank_2mux_func_test.py | 7 +++++++ compiler/tests/22_sram_1bank_4mux_func_test.py | 7 +++++++ compiler/tests/22_sram_1bank_8mux_func_test.py | 7 +++++++ compiler/tests/22_sram_1bank_nomux_func_test.py | 7 +++++++ compiler/tests/22_sram_1rw_1r_1bank_nomux_func_test.py | 7 +++++++ compiler/tests/23_lib_sram_model_corners_test.py | 7 +++++++ compiler/tests/23_lib_sram_model_test.py | 7 +++++++ compiler/tests/23_lib_sram_prune_test.py | 7 +++++++ compiler/tests/23_lib_sram_test.py | 7 +++++++ compiler/tests/24_lef_sram_test.py | 7 +++++++ compiler/tests/25_verilog_sram_test.py | 7 +++++++ compiler/tests/26_pex_test.py | 7 +++++++ compiler/tests/30_openram_test.py | 7 +++++++ compiler/tests/config_freepdk45.py | 7 +++++++ compiler/tests/config_freepdk45_front_end.py | 7 +++++++ compiler/tests/config_scn4m_subm.py | 7 +++++++ compiler/tests/config_scn4m_subm_front_end.py | 7 +++++++ compiler/tests/regress.py | 7 +++++++ compiler/tests/testutils.py | 7 +++++++ compiler/verify/__init__.py | 7 +++++++ compiler/verify/assura.py | 7 +++++++ compiler/verify/calibre.py | 7 +++++++ compiler/verify/magic.py | 7 +++++++ compiler/verify/none.py | 7 +++++++ compiler/view_profile.py | 7 +++++++ technology/freepdk45/__init__.py | 7 +++++++ technology/freepdk45/tech/__init__.py | 7 +++++++ technology/freepdk45/tech/tech.py | 7 +++++++ technology/scn4m_subm/__init__.py | 7 +++++++ technology/scn4m_subm/tech/__init__.py | 7 +++++++ technology/scn4m_subm/tech/tech.py | 7 +++++++ 226 files changed, 1576 insertions(+), 1 deletion(-) mode change 100755 => 100644 compiler/router/tests/01_no_blockages_test.py mode change 100755 => 100644 compiler/router/tests/02_blockages_test.py mode change 100755 => 100644 compiler/router/tests/03_same_layer_pins_test.py mode change 100755 => 100644 compiler/router/tests/04_diff_layer_pins_test.py mode change 100755 => 100644 compiler/router/tests/05_two_nets_test.py mode change 100755 => 100644 compiler/router/tests/06_pin_location_test.py mode change 100755 => 100644 compiler/router/tests/07_big_test.py mode change 100755 => 100644 compiler/router/tests/08_expand_region_test.py mode change 100755 => 100644 compiler/router/tests/10_supply_grid_test.py mode change 100755 => 100644 compiler/router/tests/config_freepdk45.py mode change 100755 => 100644 compiler/router/tests/config_scn4m_subm.py mode change 100755 => 100644 compiler/router/tests/regress.py mode change 100755 => 100644 compiler/router/tests/testutils.py mode change 100755 => 100644 compiler/tests/config_freepdk45.py mode change 100755 => 100644 compiler/tests/config_freepdk45_front_end.py mode change 100755 => 100644 compiler/tests/config_scn4m_subm.py mode change 100755 => 100644 compiler/tests/config_scn4m_subm_front_end.py mode change 100755 => 100644 compiler/tests/testutils.py mode change 100755 => 100644 technology/scn4m_subm/tech/__init__.py mode change 100755 => 100644 technology/scn4m_subm/tech/tech.py diff --git a/LICENSE b/LICENSE index 75c009a8..761f6e8b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2018-2019 Regents of the University of California and The Board +Copyright (c) 2019 Regents of the University of California and The Board of Regents for the Oklahoma Agricultural and Mechanical College (acting for and on behalf of Oklahoma State University) All rights reserved. diff --git a/compiler/base/contact.py b/compiler/base/contact.py index e7365ed9..fc5e630e 100644 --- a/compiler/base/contact.py +++ b/compiler/base/contact.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import hierarchy_design import debug import utils diff --git a/compiler/base/design.py b/compiler/base/design.py index aace6170..5ad29ff3 100644 --- a/compiler/base/design.py +++ b/compiler/base/design.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from hierarchy_design import hierarchy_design import contact import globals diff --git a/compiler/base/geometry.py b/compiler/base/geometry.py index 1402fd5a..0b0455c8 100644 --- a/compiler/base/geometry.py +++ b/compiler/base/geometry.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ This provides a set of useful generic types for the gdsMill interface. """ diff --git a/compiler/base/hierarchy_design.py b/compiler/base/hierarchy_design.py index 29624af0..84f86378 100644 --- a/compiler/base/hierarchy_design.py +++ b/compiler/base/hierarchy_design.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import hierarchy_layout import hierarchy_spice import globals diff --git a/compiler/base/hierarchy_layout.py b/compiler/base/hierarchy_layout.py index cd1f2765..4a3d0790 100644 --- a/compiler/base/hierarchy_layout.py +++ b/compiler/base/hierarchy_layout.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import itertools import geometry import gdsMill diff --git a/compiler/base/hierarchy_spice.py b/compiler/base/hierarchy_spice.py index 93c1c041..99249fcd 100644 --- a/compiler/base/hierarchy_spice.py +++ b/compiler/base/hierarchy_spice.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import re import os diff --git a/compiler/base/lef.py b/compiler/base/lef.py index 270057cb..f0bc3a36 100644 --- a/compiler/base/lef.py +++ b/compiler/base/lef.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import gdsMill import tech import globals diff --git a/compiler/base/pin_layout.py b/compiler/base/pin_layout.py index 44b005f6..35f4b156 100644 --- a/compiler/base/pin_layout.py +++ b/compiler/base/pin_layout.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug from tech import GDS, drc from vector import vector diff --git a/compiler/base/route.py b/compiler/base/route.py index 86669acd..e8918bdd 100644 --- a/compiler/base/route.py +++ b/compiler/base/route.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from tech import drc import debug from design import design diff --git a/compiler/base/utils.py b/compiler/base/utils.py index 8ca22fa9..6dd82b6f 100644 --- a/compiler/base/utils.py +++ b/compiler/base/utils.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import os import gdsMill import tech diff --git a/compiler/base/vector.py b/compiler/base/vector.py index 6069a1ab..bbc12290 100644 --- a/compiler/base/vector.py +++ b/compiler/base/vector.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import math import tech diff --git a/compiler/base/verilog.py b/compiler/base/verilog.py index a2ddcadf..951236dd 100644 --- a/compiler/base/verilog.py +++ b/compiler/base/verilog.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug class verilog: diff --git a/compiler/base/wire.py b/compiler/base/wire.py index 12b493a1..9aa1bf00 100644 --- a/compiler/base/wire.py +++ b/compiler/base/wire.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from tech import drc import debug from wire_path import wire_path diff --git a/compiler/base/wire_path.py b/compiler/base/wire_path.py index ec5d01bf..4e37d450 100644 --- a/compiler/base/wire_path.py +++ b/compiler/base/wire_path.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from tech import drc from tech import layer as techlayer import debug diff --git a/compiler/bitcells/bitcell.py b/compiler/bitcells/bitcell.py index 3f1d02d3..c6cf7796 100644 --- a/compiler/bitcells/bitcell.py +++ b/compiler/bitcells/bitcell.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import design import debug import utils diff --git a/compiler/bitcells/bitcell_1rw_1r.py b/compiler/bitcells/bitcell_1rw_1r.py index e597167f..82a5c1ae 100644 --- a/compiler/bitcells/bitcell_1rw_1r.py +++ b/compiler/bitcells/bitcell_1rw_1r.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import design import debug import utils diff --git a/compiler/bitcells/bitcell_1w_1r.py b/compiler/bitcells/bitcell_1w_1r.py index cf487fba..a6e2f04d 100644 --- a/compiler/bitcells/bitcell_1w_1r.py +++ b/compiler/bitcells/bitcell_1w_1r.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import design import debug import utils diff --git a/compiler/bitcells/pbitcell.py b/compiler/bitcells/pbitcell.py index 77ef295a..aa03e7cc 100644 --- a/compiler/bitcells/pbitcell.py +++ b/compiler/bitcells/pbitcell.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import contact import design import debug diff --git a/compiler/bitcells/replica_bitcell.py b/compiler/bitcells/replica_bitcell.py index d8b8b76e..ea7cb2ac 100644 --- a/compiler/bitcells/replica_bitcell.py +++ b/compiler/bitcells/replica_bitcell.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import design import debug import utils diff --git a/compiler/bitcells/replica_bitcell_1rw_1r.py b/compiler/bitcells/replica_bitcell_1rw_1r.py index 8f7b3b38..d076b70e 100644 --- a/compiler/bitcells/replica_bitcell_1rw_1r.py +++ b/compiler/bitcells/replica_bitcell_1rw_1r.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import design import debug import utils diff --git a/compiler/bitcells/replica_bitcell_1w_1r.py b/compiler/bitcells/replica_bitcell_1w_1r.py index 6f59adec..31208b79 100644 --- a/compiler/bitcells/replica_bitcell_1w_1r.py +++ b/compiler/bitcells/replica_bitcell_1w_1r.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import design import debug import utils diff --git a/compiler/bitcells/replica_pbitcell.py b/compiler/bitcells/replica_pbitcell.py index 76687944..02a6597a 100644 --- a/compiler/bitcells/replica_pbitcell.py +++ b/compiler/bitcells/replica_pbitcell.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import design from tech import drc, spice,parameter diff --git a/compiler/characterizer/__init__.py b/compiler/characterizer/__init__.py index fc42a889..4a385f4d 100644 --- a/compiler/characterizer/__init__.py +++ b/compiler/characterizer/__init__.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import os import debug import globals diff --git a/compiler/characterizer/bitline_delay.py b/compiler/characterizer/bitline_delay.py index c85f06bc..8bdde362 100644 --- a/compiler/characterizer/bitline_delay.py +++ b/compiler/characterizer/bitline_delay.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import sys,re,shutil import debug import tech diff --git a/compiler/characterizer/charutils.py b/compiler/characterizer/charutils.py index 061972cf..bedd5559 100644 --- a/compiler/characterizer/charutils.py +++ b/compiler/characterizer/charutils.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import re import debug from globals import OPTS diff --git a/compiler/characterizer/delay.py b/compiler/characterizer/delay.py index a80fc4dc..47be684f 100644 --- a/compiler/characterizer/delay.py +++ b/compiler/characterizer/delay.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import sys,re,shutil import debug import tech diff --git a/compiler/characterizer/functional.py b/compiler/characterizer/functional.py index ca05648a..d6a6f328 100644 --- a/compiler/characterizer/functional.py +++ b/compiler/characterizer/functional.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import sys,re,shutil from design import design import debug diff --git a/compiler/characterizer/lib.py b/compiler/characterizer/lib.py index d24c931d..678d65cc 100644 --- a/compiler/characterizer/lib.py +++ b/compiler/characterizer/lib.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import os,sys,re import debug import math diff --git a/compiler/characterizer/logical_effort.py b/compiler/characterizer/logical_effort.py index 860ae68f..9a532bc8 100644 --- a/compiler/characterizer/logical_effort.py +++ b/compiler/characterizer/logical_effort.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug from tech import drc, parameter, spice diff --git a/compiler/characterizer/measurements.py b/compiler/characterizer/measurements.py index e3d16584..32c01965 100644 --- a/compiler/characterizer/measurements.py +++ b/compiler/characterizer/measurements.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug from tech import drc, parameter, spice from abc import ABC, abstractmethod diff --git a/compiler/characterizer/model_check.py b/compiler/characterizer/model_check.py index ff8bbdfa..2ae5c4fd 100644 --- a/compiler/characterizer/model_check.py +++ b/compiler/characterizer/model_check.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import sys,re,shutil import debug import tech diff --git a/compiler/characterizer/setup_hold.py b/compiler/characterizer/setup_hold.py index 8a515776..ba1a98bc 100644 --- a/compiler/characterizer/setup_hold.py +++ b/compiler/characterizer/setup_hold.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import sys import tech from .stimuli import * diff --git a/compiler/characterizer/simulation.py b/compiler/characterizer/simulation.py index beca0502..54f906f3 100644 --- a/compiler/characterizer/simulation.py +++ b/compiler/characterizer/simulation.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import sys,re,shutil from design import design import debug diff --git a/compiler/characterizer/stimuli.py b/compiler/characterizer/stimuli.py index 3b569b2a..e850b108 100644 --- a/compiler/characterizer/stimuli.py +++ b/compiler/characterizer/stimuli.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ This file generates simple spice cards for simulation. There are various functions that can be be used to generate stimulus for other diff --git a/compiler/characterizer/trim_spice.py b/compiler/characterizer/trim_spice.py index 88195fee..7f5a7d3d 100644 --- a/compiler/characterizer/trim_spice.py +++ b/compiler/characterizer/trim_spice.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug from math import log import re diff --git a/compiler/characterizer/worst_case.py b/compiler/characterizer/worst_case.py index 6dad95d9..b22d1218 100644 --- a/compiler/characterizer/worst_case.py +++ b/compiler/characterizer/worst_case.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import sys,re,shutil import debug import tech diff --git a/compiler/datasheet/add_db.py b/compiler/datasheet/add_db.py index 862c1d8a..194334dc 100644 --- a/compiler/datasheet/add_db.py +++ b/compiler/datasheet/add_db.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from pathlib import Path import glob import os diff --git a/compiler/datasheet/datasheet.py b/compiler/datasheet/datasheet.py index b48d217d..47c242e3 100644 --- a/compiler/datasheet/datasheet.py +++ b/compiler/datasheet/datasheet.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from table_gen import * import os import base64 diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py index e6c728f0..40dac7f3 100644 --- a/compiler/datasheet/datasheet_gen.py +++ b/compiler/datasheet/datasheet_gen.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# #!/usr/bin/env python3 """ This is a script to load data from the characterization and layout processes into diff --git a/compiler/datasheet/table_gen.py b/compiler/datasheet/table_gen.py index 227bb5c4..a97536e7 100644 --- a/compiler/datasheet/table_gen.py +++ b/compiler/datasheet/table_gen.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# class table_gen: """small library of functions to generate the html tables""" diff --git a/compiler/debug.py b/compiler/debug.py index c697425d..d360b47e 100644 --- a/compiler/debug.py +++ b/compiler/debug.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import os import inspect import globals diff --git a/compiler/drc/design_rules.py b/compiler/drc/design_rules.py index 4bc2eaa6..08490a75 100644 --- a/compiler/drc/design_rules.py +++ b/compiler/drc/design_rules.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug from drc_value import * from drc_lut import * diff --git a/compiler/drc/drc_lut.py b/compiler/drc/drc_lut.py index 07e482c8..70c7c457 100644 --- a/compiler/drc/drc_lut.py +++ b/compiler/drc/drc_lut.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug class drc_lut(): diff --git a/compiler/drc/drc_value.py b/compiler/drc/drc_value.py index c4eab3d4..25c30354 100644 --- a/compiler/drc/drc_value.py +++ b/compiler/drc/drc_value.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# class drc_value(): """ diff --git a/compiler/gen_stimulus.py b/compiler/gen_stimulus.py index 07bd1b1c..b66fa033 100755 --- a/compiler/gen_stimulus.py +++ b/compiler/gen_stimulus.py @@ -1,4 +1,11 @@ #!/usr/bin/env python +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ This script will generate a stimulus file for a given period, load, and slew input for the given dimension SRAM. It is useful for debugging after an SRAM has been diff --git a/compiler/globals.py b/compiler/globals.py index a524c3c2..3f2fa777 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ This is called globals.py, but it actually parses all the arguments and performs the global OpenRAM setup as well. diff --git a/compiler/modules/bank.py b/compiler/modules/bank.py index e6ca09bc..fc3ab94f 100644 --- a/compiler/modules/bank.py +++ b/compiler/modules/bank.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import sys from tech import drc, parameter import debug diff --git a/compiler/modules/bank_select.py b/compiler/modules/bank_select.py index 8d1d3da5..fa47311a 100644 --- a/compiler/modules/bank_select.py +++ b/compiler/modules/bank_select.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import sys from tech import drc, parameter import debug diff --git a/compiler/modules/bitcell_array.py b/compiler/modules/bitcell_array.py index e53b72bb..36688940 100644 --- a/compiler/modules/bitcell_array.py +++ b/compiler/modules/bitcell_array.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import design from tech import drc, spice diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index c976e5dc..29b084b7 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from math import log import design from tech import drc, parameter diff --git a/compiler/modules/delay_chain.py b/compiler/modules/delay_chain.py index f3d15ba3..664f00f3 100644 --- a/compiler/modules/delay_chain.py +++ b/compiler/modules/delay_chain.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import design from tech import drc diff --git a/compiler/modules/dff.py b/compiler/modules/dff.py index 753ae41a..ae31028d 100644 --- a/compiler/modules/dff.py +++ b/compiler/modules/dff.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import globals import design from math import log diff --git a/compiler/modules/dff_array.py b/compiler/modules/dff_array.py index 9d11b811..0ca6098d 100644 --- a/compiler/modules/dff_array.py +++ b/compiler/modules/dff_array.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import design from tech import drc diff --git a/compiler/modules/dff_buf.py b/compiler/modules/dff_buf.py index fa3285ba..2af4d9eb 100644 --- a/compiler/modules/dff_buf.py +++ b/compiler/modules/dff_buf.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import design from tech import drc,parameter diff --git a/compiler/modules/dff_buf_array.py b/compiler/modules/dff_buf_array.py index 56b20dfb..84157431 100644 --- a/compiler/modules/dff_buf_array.py +++ b/compiler/modules/dff_buf_array.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import design from tech import drc diff --git a/compiler/modules/dff_inv.py b/compiler/modules/dff_inv.py index 9b901d3b..98904d5e 100644 --- a/compiler/modules/dff_inv.py +++ b/compiler/modules/dff_inv.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import design from tech import drc diff --git a/compiler/modules/dff_inv_array.py b/compiler/modules/dff_inv_array.py index 624e13d0..bb47050b 100644 --- a/compiler/modules/dff_inv_array.py +++ b/compiler/modules/dff_inv_array.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import design from tech import drc diff --git a/compiler/modules/hierarchical_decoder.py b/compiler/modules/hierarchical_decoder.py index 5fcf27f0..28edf6ce 100644 --- a/compiler/modules/hierarchical_decoder.py +++ b/compiler/modules/hierarchical_decoder.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from tech import drc import debug import design diff --git a/compiler/modules/hierarchical_predecode.py b/compiler/modules/hierarchical_predecode.py index a13afd85..88074492 100644 --- a/compiler/modules/hierarchical_predecode.py +++ b/compiler/modules/hierarchical_predecode.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import design import math diff --git a/compiler/modules/hierarchical_predecode2x4.py b/compiler/modules/hierarchical_predecode2x4.py index f50a43c1..25a9dbcc 100644 --- a/compiler/modules/hierarchical_predecode2x4.py +++ b/compiler/modules/hierarchical_predecode2x4.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from tech import drc import debug import design diff --git a/compiler/modules/hierarchical_predecode3x8.py b/compiler/modules/hierarchical_predecode3x8.py index 820427c7..ec2c4618 100644 --- a/compiler/modules/hierarchical_predecode3x8.py +++ b/compiler/modules/hierarchical_predecode3x8.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from tech import drc import debug import design diff --git a/compiler/modules/multibank.py b/compiler/modules/multibank.py index 15882f8b..3b00092a 100644 --- a/compiler/modules/multibank.py +++ b/compiler/modules/multibank.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import sys from tech import drc, parameter import debug diff --git a/compiler/modules/precharge_array.py b/compiler/modules/precharge_array.py index 67581e1a..207312dc 100644 --- a/compiler/modules/precharge_array.py +++ b/compiler/modules/precharge_array.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import design import debug from tech import drc diff --git a/compiler/modules/replica_bitline.py b/compiler/modules/replica_bitline.py index c68ebc8f..5ca793fe 100644 --- a/compiler/modules/replica_bitline.py +++ b/compiler/modules/replica_bitline.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import design from tech import drc diff --git a/compiler/modules/sense_amp.py b/compiler/modules/sense_amp.py index 8d739041..c3704666 100644 --- a/compiler/modules/sense_amp.py +++ b/compiler/modules/sense_amp.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import design import debug import utils diff --git a/compiler/modules/sense_amp_array.py b/compiler/modules/sense_amp_array.py index c9722e50..5d1d551c 100644 --- a/compiler/modules/sense_amp_array.py +++ b/compiler/modules/sense_amp_array.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import design from tech import drc from vector import vector diff --git a/compiler/modules/single_level_column_mux_array.py b/compiler/modules/single_level_column_mux_array.py index 576d6ad7..91713245 100644 --- a/compiler/modules/single_level_column_mux_array.py +++ b/compiler/modules/single_level_column_mux_array.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from math import log import design import contact diff --git a/compiler/modules/tri_gate.py b/compiler/modules/tri_gate.py index 688b3644..d902cdd1 100644 --- a/compiler/modules/tri_gate.py +++ b/compiler/modules/tri_gate.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import design import utils diff --git a/compiler/modules/tri_gate_array.py b/compiler/modules/tri_gate_array.py index 913c6097..8409d650 100644 --- a/compiler/modules/tri_gate_array.py +++ b/compiler/modules/tri_gate_array.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug from tech import drc import design diff --git a/compiler/modules/wordline_driver.py b/compiler/modules/wordline_driver.py index 977c8789..eda7a4a8 100644 --- a/compiler/modules/wordline_driver.py +++ b/compiler/modules/wordline_driver.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from tech import drc, parameter import debug import design diff --git a/compiler/modules/write_driver.py b/compiler/modules/write_driver.py index 34c51245..f61dd6c3 100644 --- a/compiler/modules/write_driver.py +++ b/compiler/modules/write_driver.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import design import utils diff --git a/compiler/modules/write_driver_array.py b/compiler/modules/write_driver_array.py index 3367cc00..28e56cba 100644 --- a/compiler/modules/write_driver_array.py +++ b/compiler/modules/write_driver_array.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from math import log import design from tech import drc diff --git a/compiler/openram.py b/compiler/openram.py index 555f2c8e..c5a576fe 100755 --- a/compiler/openram.py +++ b/compiler/openram.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ SRAM Compiler diff --git a/compiler/options.py b/compiler/options.py index a6e5726a..ac22ecee 100644 --- a/compiler/options.py +++ b/compiler/options.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import optparse import getpass import os diff --git a/compiler/pgates/pand2.py b/compiler/pgates/pand2.py index f46c0d04..cc492de4 100644 --- a/compiler/pgates/pand2.py +++ b/compiler/pgates/pand2.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug from tech import drc from math import log diff --git a/compiler/pgates/pbuf.py b/compiler/pgates/pbuf.py index 02137ead..8880f7a0 100644 --- a/compiler/pgates/pbuf.py +++ b/compiler/pgates/pbuf.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug from tech import drc from math import log diff --git a/compiler/pgates/pdriver.py b/compiler/pgates/pdriver.py index 7a60309f..ebe5b706 100644 --- a/compiler/pgates/pdriver.py +++ b/compiler/pgates/pdriver.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import pgate import math diff --git a/compiler/pgates/pgate.py b/compiler/pgates/pgate.py index dcc474d0..5c4ca888 100644 --- a/compiler/pgates/pgate.py +++ b/compiler/pgates/pgate.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import contact import design import debug diff --git a/compiler/pgates/pinv.py b/compiler/pgates/pinv.py index e3ff4a37..70640fda 100644 --- a/compiler/pgates/pinv.py +++ b/compiler/pgates/pinv.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import contact import pgate import debug diff --git a/compiler/pgates/pinvbuf.py b/compiler/pgates/pinvbuf.py index 446d8918..856a14bb 100644 --- a/compiler/pgates/pinvbuf.py +++ b/compiler/pgates/pinvbuf.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import pgate from tech import drc diff --git a/compiler/pgates/pnand2.py b/compiler/pgates/pnand2.py index f6441f41..d9d8d0ed 100644 --- a/compiler/pgates/pnand2.py +++ b/compiler/pgates/pnand2.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import contact import pgate import debug diff --git a/compiler/pgates/pnand3.py b/compiler/pgates/pnand3.py index 80a92f66..6967bc4b 100644 --- a/compiler/pgates/pnand3.py +++ b/compiler/pgates/pnand3.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import contact import pgate import debug diff --git a/compiler/pgates/pnor2.py b/compiler/pgates/pnor2.py index 49206333..2a1c878e 100644 --- a/compiler/pgates/pnor2.py +++ b/compiler/pgates/pnor2.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import pgate import debug from tech import drc, parameter, spice diff --git a/compiler/pgates/precharge.py b/compiler/pgates/precharge.py index d5f9eedb..a86e5deb 100644 --- a/compiler/pgates/precharge.py +++ b/compiler/pgates/precharge.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import contact import design import debug diff --git a/compiler/pgates/ptristate_inv.py b/compiler/pgates/ptristate_inv.py index 14c1f7d8..8e59e7f4 100644 --- a/compiler/pgates/ptristate_inv.py +++ b/compiler/pgates/ptristate_inv.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import contact import pgate import debug diff --git a/compiler/pgates/ptx.py b/compiler/pgates/ptx.py index c2124d63..f1cb8729 100644 --- a/compiler/pgates/ptx.py +++ b/compiler/pgates/ptx.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import design import debug from tech import drc, spice diff --git a/compiler/pgates/single_level_column_mux.py b/compiler/pgates/single_level_column_mux.py index 88e76e07..572ed9dc 100644 --- a/compiler/pgates/single_level_column_mux.py +++ b/compiler/pgates/single_level_column_mux.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import pgate import debug from tech import drc diff --git a/compiler/router/direction.py b/compiler/router/direction.py index 8a6681a7..fd79d528 100644 --- a/compiler/router/direction.py +++ b/compiler/router/direction.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from enum import Enum from vector3d import vector3d diff --git a/compiler/router/grid.py b/compiler/router/grid.py index 245bcb68..a59ac45b 100644 --- a/compiler/router/grid.py +++ b/compiler/router/grid.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import numpy as np import string import debug diff --git a/compiler/router/grid_cell.py b/compiler/router/grid_cell.py index cb78116c..a9176355 100644 --- a/compiler/router/grid_cell.py +++ b/compiler/router/grid_cell.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# class grid_cell: """ A single cell that can be occupied in a given layer, blocked, diff --git a/compiler/router/grid_path.py b/compiler/router/grid_path.py index cbe739ef..e9f39b91 100644 --- a/compiler/router/grid_path.py +++ b/compiler/router/grid_path.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug from vector3d import vector3d from itertools import tee diff --git a/compiler/router/grid_utils.py b/compiler/router/grid_utils.py index 7ad864aa..39d13bde 100644 --- a/compiler/router/grid_utils.py +++ b/compiler/router/grid_utils.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Some utility functions for sets of grid cells. """ diff --git a/compiler/router/pin_group.py b/compiler/router/pin_group.py index 0600561b..940d20fc 100644 --- a/compiler/router/pin_group.py +++ b/compiler/router/pin_group.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from direction import direction from pin_layout import pin_layout from vector3d import vector3d diff --git a/compiler/router/router.py b/compiler/router/router.py index 0bc3a50a..6ae7941d 100644 --- a/compiler/router/router.py +++ b/compiler/router/router.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import sys import gdsMill from tech import drc,GDS diff --git a/compiler/router/router_tech.py b/compiler/router/router_tech.py index 02b6894f..246a0985 100644 --- a/compiler/router/router_tech.py +++ b/compiler/router/router_tech.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from tech import drc,layer from contact import contact from pin_group import pin_group diff --git a/compiler/router/signal_grid.py b/compiler/router/signal_grid.py index 59d75c7a..1d1ab862 100644 --- a/compiler/router/signal_grid.py +++ b/compiler/router/signal_grid.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from itertools import tee import debug from heapq import heappush,heappop diff --git a/compiler/router/signal_router.py b/compiler/router/signal_router.py index eb706b5b..a7174905 100644 --- a/compiler/router/signal_router.py +++ b/compiler/router/signal_router.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import gdsMill import tech from contact import contact diff --git a/compiler/router/supply_grid.py b/compiler/router/supply_grid.py index dfc78f22..1cd9a5a3 100644 --- a/compiler/router/supply_grid.py +++ b/compiler/router/supply_grid.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug from vector3d import vector3d from grid import grid diff --git a/compiler/router/supply_router.py b/compiler/router/supply_router.py index f540b3a8..f269b136 100644 --- a/compiler/router/supply_router.py +++ b/compiler/router/supply_router.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import gdsMill import tech import math diff --git a/compiler/router/tests/01_no_blockages_test.py b/compiler/router/tests/01_no_blockages_test.py old mode 100755 new mode 100644 index 4197f714..14c1de54 --- a/compiler/router/tests/01_no_blockages_test.py +++ b/compiler/router/tests/01_no_blockages_test.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# #!/usr/bin/env python3 "Run a regresion test the library cells for DRC" diff --git a/compiler/router/tests/02_blockages_test.py b/compiler/router/tests/02_blockages_test.py old mode 100755 new mode 100644 index 6e3bee08..e30bd6a4 --- a/compiler/router/tests/02_blockages_test.py +++ b/compiler/router/tests/02_blockages_test.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# #!/usr/bin/env python3 "Run a regresion test the library cells for DRC" diff --git a/compiler/router/tests/03_same_layer_pins_test.py b/compiler/router/tests/03_same_layer_pins_test.py old mode 100755 new mode 100644 index 726cd02b..d4ae8b49 --- a/compiler/router/tests/03_same_layer_pins_test.py +++ b/compiler/router/tests/03_same_layer_pins_test.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# #!/usr/bin/env python3 "Run a regresion test the library cells for DRC" diff --git a/compiler/router/tests/04_diff_layer_pins_test.py b/compiler/router/tests/04_diff_layer_pins_test.py old mode 100755 new mode 100644 index 2882156f..35be8a6b --- a/compiler/router/tests/04_diff_layer_pins_test.py +++ b/compiler/router/tests/04_diff_layer_pins_test.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# #!/usr/bin/env python3 "Run a regresion test the library cells for DRC" diff --git a/compiler/router/tests/05_two_nets_test.py b/compiler/router/tests/05_two_nets_test.py old mode 100755 new mode 100644 index e71920a8..9ada0b2d --- a/compiler/router/tests/05_two_nets_test.py +++ b/compiler/router/tests/05_two_nets_test.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# #!/usr/bin/env python3 "Run a regresion test the library cells for DRC" diff --git a/compiler/router/tests/06_pin_location_test.py b/compiler/router/tests/06_pin_location_test.py old mode 100755 new mode 100644 index f469d326..ffb5b04f --- a/compiler/router/tests/06_pin_location_test.py +++ b/compiler/router/tests/06_pin_location_test.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# #!/usr/bin/env python3 "Run a regresion test the library cells for DRC" diff --git a/compiler/router/tests/07_big_test.py b/compiler/router/tests/07_big_test.py old mode 100755 new mode 100644 index 8fcf2826..80e62104 --- a/compiler/router/tests/07_big_test.py +++ b/compiler/router/tests/07_big_test.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# #!/usr/bin/env python3 "Run a regresion test the library cells for DRC" diff --git a/compiler/router/tests/08_expand_region_test.py b/compiler/router/tests/08_expand_region_test.py old mode 100755 new mode 100644 index 3e63bd51..f452583c --- a/compiler/router/tests/08_expand_region_test.py +++ b/compiler/router/tests/08_expand_region_test.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# #!/usr/bin/env python3 "Run a regresion test the library cells for DRC" diff --git a/compiler/router/tests/10_supply_grid_test.py b/compiler/router/tests/10_supply_grid_test.py old mode 100755 new mode 100644 index 7258ab40..dc929ad7 --- a/compiler/router/tests/10_supply_grid_test.py +++ b/compiler/router/tests/10_supply_grid_test.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# #!/usr/bin/env python3 "Run a regresion test the library cells for DRC" diff --git a/compiler/router/tests/config_freepdk45.py b/compiler/router/tests/config_freepdk45.py old mode 100755 new mode 100644 index aaaa4c37..fe370ec9 --- a/compiler/router/tests/config_freepdk45.py +++ b/compiler/router/tests/config_freepdk45.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# word_size = 1 num_words = 16 diff --git a/compiler/router/tests/config_scn4m_subm.py b/compiler/router/tests/config_scn4m_subm.py old mode 100755 new mode 100644 index e3aa1498..1a9c8ee9 --- a/compiler/router/tests/config_scn4m_subm.py +++ b/compiler/router/tests/config_scn4m_subm.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# word_size = 1 num_words = 16 diff --git a/compiler/router/tests/gds_cell.py b/compiler/router/tests/gds_cell.py index 5c1e0f91..6903304a 100644 --- a/compiler/router/tests/gds_cell.py +++ b/compiler/router/tests/gds_cell.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# from design import design class gds_cell(design): """ diff --git a/compiler/router/tests/regress.py b/compiler/router/tests/regress.py old mode 100755 new mode 100644 index b40263c7..2963746b --- a/compiler/router/tests/regress.py +++ b/compiler/router/tests/regress.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# #!/usr/bin/env python3 import re diff --git a/compiler/router/tests/testutils.py b/compiler/router/tests/testutils.py old mode 100755 new mode 100644 index 4bea5d15..381187b3 --- a/compiler/router/tests/testutils.py +++ b/compiler/router/tests/testutils.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import unittest,warnings import sys,os,glob,copy sys.path.append(os.path.join(sys.path[0],"../..")) diff --git a/compiler/router/vector3d.py b/compiler/router/vector3d.py index 1d0d083e..1507b891 100644 --- a/compiler/router/vector3d.py +++ b/compiler/router/vector3d.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug import math diff --git a/compiler/sram.py b/compiler/sram.py index 274c1bf1..a7dee88f 100644 --- a/compiler/sram.py +++ b/compiler/sram.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import sys import datetime import getpass diff --git a/compiler/sram_1bank.py b/compiler/sram_1bank.py index 5f334cc7..b6903739 100644 --- a/compiler/sram_1bank.py +++ b/compiler/sram_1bank.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import sys from tech import drc, spice import debug diff --git a/compiler/sram_2bank.py b/compiler/sram_2bank.py index daf02563..01919353 100644 --- a/compiler/sram_2bank.py +++ b/compiler/sram_2bank.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import sys from tech import drc, spice import debug diff --git a/compiler/sram_base.py b/compiler/sram_base.py index 90d9771a..5dbca380 100644 --- a/compiler/sram_base.py +++ b/compiler/sram_base.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import sys import datetime import getpass diff --git a/compiler/sram_config.py b/compiler/sram_config.py index 5edf9282..78f7c7ea 100644 --- a/compiler/sram_config.py +++ b/compiler/sram_config.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug from math import log,sqrt,ceil from importlib import reload diff --git a/compiler/sram_factory.py b/compiler/sram_factory.py index fcb985ff..10134bf1 100644 --- a/compiler/sram_factory.py +++ b/compiler/sram_factory.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import debug from globals import OPTS from importlib import reload diff --git a/compiler/tests/00_code_format_check_test.py b/compiler/tests/00_code_format_check_test.py index 98799ee8..c2536d8f 100755 --- a/compiler/tests/00_code_format_check_test.py +++ b/compiler/tests/00_code_format_check_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import unittest from testutils import header,openram_test diff --git a/compiler/tests/01_library_drc_test.py b/compiler/tests/01_library_drc_test.py index 1f4aa853..ec3f9097 100755 --- a/compiler/tests/01_library_drc_test.py +++ b/compiler/tests/01_library_drc_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# "Run a regression test the library cells for DRC" import unittest diff --git a/compiler/tests/02_library_lvs_test.py b/compiler/tests/02_library_lvs_test.py index f312c298..7cefb73a 100755 --- a/compiler/tests/02_library_lvs_test.py +++ b/compiler/tests/02_library_lvs_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# "Run a regression test the library cells for LVS" import unittest diff --git a/compiler/tests/03_contact_test.py b/compiler/tests/03_contact_test.py index cbd309dc..3e86fe85 100755 --- a/compiler/tests/03_contact_test.py +++ b/compiler/tests/03_contact_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# "Run a regression test for DRC on basic contacts of different array sizes" import unittest diff --git a/compiler/tests/03_path_test.py b/compiler/tests/03_path_test.py index 78abc9e3..b225f92f 100755 --- a/compiler/tests/03_path_test.py +++ b/compiler/tests/03_path_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# "Run a regression test on a basic path" import unittest diff --git a/compiler/tests/03_ptx_1finger_nmos_test.py b/compiler/tests/03_ptx_1finger_nmos_test.py index a5ea028c..a824293a 100755 --- a/compiler/tests/03_ptx_1finger_nmos_test.py +++ b/compiler/tests/03_ptx_1finger_nmos_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# "Run a regression test on a basic parameterized transistors" import unittest diff --git a/compiler/tests/03_ptx_1finger_pmos_test.py b/compiler/tests/03_ptx_1finger_pmos_test.py index f1a4de56..2fb3a582 100755 --- a/compiler/tests/03_ptx_1finger_pmos_test.py +++ b/compiler/tests/03_ptx_1finger_pmos_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# "Run a regression test on a basic parameterized transistors" import unittest diff --git a/compiler/tests/03_ptx_3finger_nmos_test.py b/compiler/tests/03_ptx_3finger_nmos_test.py index 535560e1..03b18eaf 100755 --- a/compiler/tests/03_ptx_3finger_nmos_test.py +++ b/compiler/tests/03_ptx_3finger_nmos_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# "Run a regression test on a basic parameterized transistors" import unittest diff --git a/compiler/tests/03_ptx_3finger_pmos_test.py b/compiler/tests/03_ptx_3finger_pmos_test.py index fd2abc0b..76aaa584 100755 --- a/compiler/tests/03_ptx_3finger_pmos_test.py +++ b/compiler/tests/03_ptx_3finger_pmos_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# "Run a regression test on a basic parameterized transistors" import unittest diff --git a/compiler/tests/03_ptx_4finger_nmos_test.py b/compiler/tests/03_ptx_4finger_nmos_test.py index 56102419..bf15a4d0 100755 --- a/compiler/tests/03_ptx_4finger_nmos_test.py +++ b/compiler/tests/03_ptx_4finger_nmos_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# "Run a regression test on a basic parameterized transistors" import unittest diff --git a/compiler/tests/03_ptx_4finger_pmos_test.py b/compiler/tests/03_ptx_4finger_pmos_test.py index 4d7181b1..14147e9b 100755 --- a/compiler/tests/03_ptx_4finger_pmos_test.py +++ b/compiler/tests/03_ptx_4finger_pmos_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# "Run a regression test on a basic parameterized transistors" import unittest diff --git a/compiler/tests/03_wire_test.py b/compiler/tests/03_wire_test.py index 1cce5f08..d6c895e3 100755 --- a/compiler/tests/03_wire_test.py +++ b/compiler/tests/03_wire_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# "Run a regression test on a basic wire" import unittest diff --git a/compiler/tests/04_pand2_test.py b/compiler/tests/04_pand2_test.py index 8dd900fe..70239c56 100755 --- a/compiler/tests/04_pand2_test.py +++ b/compiler/tests/04_pand2_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a pand2 cell """ diff --git a/compiler/tests/04_pbitcell_test.py b/compiler/tests/04_pbitcell_test.py index b1edb5d7..0d62f5a3 100755 --- a/compiler/tests/04_pbitcell_test.py +++ b/compiler/tests/04_pbitcell_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run regresion tests on a parameterized bitcell """ diff --git a/compiler/tests/04_pbuf_test.py b/compiler/tests/04_pbuf_test.py index 7ee53781..fe894474 100755 --- a/compiler/tests/04_pbuf_test.py +++ b/compiler/tests/04_pbuf_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 2-row buffer cell """ diff --git a/compiler/tests/04_pdriver_test.py b/compiler/tests/04_pdriver_test.py index 65cc3ee3..2978d59b 100755 --- a/compiler/tests/04_pdriver_test.py +++ b/compiler/tests/04_pdriver_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 2-row buffer cell """ diff --git a/compiler/tests/04_pinv_10x_test.py b/compiler/tests/04_pinv_10x_test.py index d24b3ef4..5104b37f 100755 --- a/compiler/tests/04_pinv_10x_test.py +++ b/compiler/tests/04_pinv_10x_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run regression tests on a parameterized inverter """ diff --git a/compiler/tests/04_pinv_1x_beta_test.py b/compiler/tests/04_pinv_1x_beta_test.py index 0786ed80..3caaceaa 100755 --- a/compiler/tests/04_pinv_1x_beta_test.py +++ b/compiler/tests/04_pinv_1x_beta_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run regression tests on a parameterized inverter """ diff --git a/compiler/tests/04_pinv_1x_test.py b/compiler/tests/04_pinv_1x_test.py index a83fc6ee..efb558a6 100755 --- a/compiler/tests/04_pinv_1x_test.py +++ b/compiler/tests/04_pinv_1x_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run regression tests on a parameterized inverter """ diff --git a/compiler/tests/04_pinv_2x_test.py b/compiler/tests/04_pinv_2x_test.py index 517c5b0a..e81baa46 100755 --- a/compiler/tests/04_pinv_2x_test.py +++ b/compiler/tests/04_pinv_2x_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run regression tests on a parameterized inverter """ diff --git a/compiler/tests/04_pinvbuf_test.py b/compiler/tests/04_pinvbuf_test.py index 2febfab3..78f42b51 100755 --- a/compiler/tests/04_pinvbuf_test.py +++ b/compiler/tests/04_pinvbuf_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 2-row buffer cell """ diff --git a/compiler/tests/04_pnand2_test.py b/compiler/tests/04_pnand2_test.py index b8e25d52..47ea8348 100755 --- a/compiler/tests/04_pnand2_test.py +++ b/compiler/tests/04_pnand2_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run regression tests on a parameterized nand 2. This module doesn't generate a multi_finger 2-input nand gate. It generates only a minimum diff --git a/compiler/tests/04_pnand3_test.py b/compiler/tests/04_pnand3_test.py index 9d0d8241..5c2c6b56 100755 --- a/compiler/tests/04_pnand3_test.py +++ b/compiler/tests/04_pnand3_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run regression tests on a parameterized pnand3. This module doesn't generate a multi-finger 3-input nand gate. diff --git a/compiler/tests/04_pnor2_test.py b/compiler/tests/04_pnor2_test.py index bb458b63..43be4e69 100755 --- a/compiler/tests/04_pnor2_test.py +++ b/compiler/tests/04_pnor2_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run regression tests on a parameterized nor 2. This module doesn't generate a multi_finger 2-input nor gate. It generates only a minimum diff --git a/compiler/tests/04_precharge_test.py b/compiler/tests/04_precharge_test.py index ccf05090..8e6781ce 100755 --- a/compiler/tests/04_precharge_test.py +++ b/compiler/tests/04_precharge_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a precharge cell """ diff --git a/compiler/tests/04_replica_pbitcell_test.py b/compiler/tests/04_replica_pbitcell_test.py index 7ce1b9cf..58c2f4f6 100755 --- a/compiler/tests/04_replica_pbitcell_test.py +++ b/compiler/tests/04_replica_pbitcell_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a replica pbitcell """ diff --git a/compiler/tests/04_single_level_column_mux_test.py b/compiler/tests/04_single_level_column_mux_test.py index 58d79ca4..b1613a7a 100755 --- a/compiler/tests/04_single_level_column_mux_test.py +++ b/compiler/tests/04_single_level_column_mux_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a wordline_driver array """ diff --git a/compiler/tests/05_bitcell_1rw_1r_array_test.py b/compiler/tests/05_bitcell_1rw_1r_array_test.py index 9ea0cc32..4b71ddf5 100755 --- a/compiler/tests/05_bitcell_1rw_1r_array_test.py +++ b/compiler/tests/05_bitcell_1rw_1r_array_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a basic array """ diff --git a/compiler/tests/05_bitcell_array_test.py b/compiler/tests/05_bitcell_array_test.py index 82eaf256..ef704573 100755 --- a/compiler/tests/05_bitcell_array_test.py +++ b/compiler/tests/05_bitcell_array_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a basic array """ diff --git a/compiler/tests/05_pbitcell_array_test.py b/compiler/tests/05_pbitcell_array_test.py index 15040649..3a5a859d 100755 --- a/compiler/tests/05_pbitcell_array_test.py +++ b/compiler/tests/05_pbitcell_array_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a basic array """ diff --git a/compiler/tests/06_hierarchical_decoder_test.py b/compiler/tests/06_hierarchical_decoder_test.py index f2277335..dbc2844c 100755 --- a/compiler/tests/06_hierarchical_decoder_test.py +++ b/compiler/tests/06_hierarchical_decoder_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a hierarchical_decoder. """ diff --git a/compiler/tests/06_hierarchical_predecode2x4_test.py b/compiler/tests/06_hierarchical_predecode2x4_test.py index dce5069f..7911ab58 100755 --- a/compiler/tests/06_hierarchical_predecode2x4_test.py +++ b/compiler/tests/06_hierarchical_predecode2x4_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a hierarchical_predecode2x4. """ diff --git a/compiler/tests/06_hierarchical_predecode3x8_test.py b/compiler/tests/06_hierarchical_predecode3x8_test.py index 1710b459..bb65c387 100755 --- a/compiler/tests/06_hierarchical_predecode3x8_test.py +++ b/compiler/tests/06_hierarchical_predecode3x8_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a hierarchical_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 1ff0d65b..39ff3365 100755 --- a/compiler/tests/07_single_level_column_mux_array_test.py +++ b/compiler/tests/07_single_level_column_mux_array_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a single transistor column_mux. """ diff --git a/compiler/tests/08_precharge_array_test.py b/compiler/tests/08_precharge_array_test.py index eb6d75dd..bf786625 100755 --- a/compiler/tests/08_precharge_array_test.py +++ b/compiler/tests/08_precharge_array_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a precharge array """ diff --git a/compiler/tests/08_wordline_driver_test.py b/compiler/tests/08_wordline_driver_test.py index 12edf32e..f110547e 100755 --- a/compiler/tests/08_wordline_driver_test.py +++ b/compiler/tests/08_wordline_driver_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a wordline_driver array """ diff --git a/compiler/tests/09_sense_amp_array_test.py b/compiler/tests/09_sense_amp_array_test.py index 903e5512..c4548079 100755 --- a/compiler/tests/09_sense_amp_array_test.py +++ b/compiler/tests/09_sense_amp_array_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a sense amp array """ diff --git a/compiler/tests/10_write_driver_array_test.py b/compiler/tests/10_write_driver_array_test.py index f3ed3ee6..ae4949ac 100755 --- a/compiler/tests/10_write_driver_array_test.py +++ b/compiler/tests/10_write_driver_array_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a write driver array """ diff --git a/compiler/tests/11_dff_array_test.py b/compiler/tests/11_dff_array_test.py index 5e3ce761..56fea9f5 100755 --- a/compiler/tests/11_dff_array_test.py +++ b/compiler/tests/11_dff_array_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a dff_array. """ diff --git a/compiler/tests/11_dff_buf_array_test.py b/compiler/tests/11_dff_buf_array_test.py index 86d394e6..94964534 100755 --- a/compiler/tests/11_dff_buf_array_test.py +++ b/compiler/tests/11_dff_buf_array_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a dff_array. """ diff --git a/compiler/tests/11_dff_buf_test.py b/compiler/tests/11_dff_buf_test.py index 30b56957..27fbf5c9 100755 --- a/compiler/tests/11_dff_buf_test.py +++ b/compiler/tests/11_dff_buf_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a dff_buf. """ diff --git a/compiler/tests/12_tri_gate_array_test.py b/compiler/tests/12_tri_gate_array_test.py index 04ef1369..b2905ffd 100755 --- a/compiler/tests/12_tri_gate_array_test.py +++ b/compiler/tests/12_tri_gate_array_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a tri_gate_array. """ diff --git a/compiler/tests/13_delay_chain_test.py b/compiler/tests/13_delay_chain_test.py index 1dbfbc67..51866573 100755 --- a/compiler/tests/13_delay_chain_test.py +++ b/compiler/tests/13_delay_chain_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a test on a delay chain """ diff --git a/compiler/tests/14_replica_bitline_multiport_test.py b/compiler/tests/14_replica_bitline_multiport_test.py index 3a83d397..60ba5f00 100755 --- a/compiler/tests/14_replica_bitline_multiport_test.py +++ b/compiler/tests/14_replica_bitline_multiport_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a test on a multiport replica bitline """ diff --git a/compiler/tests/14_replica_bitline_test.py b/compiler/tests/14_replica_bitline_test.py index 8c1c306c..7250bf92 100755 --- a/compiler/tests/14_replica_bitline_test.py +++ b/compiler/tests/14_replica_bitline_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a test on a replica bitline """ diff --git a/compiler/tests/16_control_logic_test.py b/compiler/tests/16_control_logic_test.py index 2b9a8be2..a1c962f3 100755 --- a/compiler/tests/16_control_logic_test.py +++ b/compiler/tests/16_control_logic_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a control_logic """ diff --git a/compiler/tests/19_bank_select_test.py b/compiler/tests/19_bank_select_test.py index 9dcb6039..b2873a93 100755 --- a/compiler/tests/19_bank_select_test.py +++ b/compiler/tests/19_bank_select_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ diff --git a/compiler/tests/19_multi_bank_test.py b/compiler/tests/19_multi_bank_test.py index 57a089aa..3131ba4d 100755 --- a/compiler/tests/19_multi_bank_test.py +++ b/compiler/tests/19_multi_bank_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ diff --git a/compiler/tests/19_pmulti_bank_test.py b/compiler/tests/19_pmulti_bank_test.py index f201c778..ddb088ea 100755 --- a/compiler/tests/19_pmulti_bank_test.py +++ b/compiler/tests/19_pmulti_bank_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ diff --git a/compiler/tests/19_psingle_bank_test.py b/compiler/tests/19_psingle_bank_test.py index c36df8ef..c49bd884 100755 --- a/compiler/tests/19_psingle_bank_test.py +++ b/compiler/tests/19_psingle_bank_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ diff --git a/compiler/tests/19_single_bank_1rw_1r_test.py b/compiler/tests/19_single_bank_1rw_1r_test.py index 96fc2512..f1bdf98c 100755 --- a/compiler/tests/19_single_bank_1rw_1r_test.py +++ b/compiler/tests/19_single_bank_1rw_1r_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on 1rw 1r sram bank """ diff --git a/compiler/tests/19_single_bank_test.py b/compiler/tests/19_single_bank_test.py index 368a7cad..ac9f1686 100755 --- a/compiler/tests/19_single_bank_test.py +++ b/compiler/tests/19_single_bank_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ 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 22b878b9..27bb8d6c 100755 --- a/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py +++ b/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 1 bank SRAM """ 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 61d636d9..5cbabc7c 100755 --- a/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py +++ b/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 1 bank SRAM """ diff --git a/compiler/tests/20_psram_1bank_2mux_test.py b/compiler/tests/20_psram_1bank_2mux_test.py index 7c38da90..7b5a4f39 100755 --- a/compiler/tests/20_psram_1bank_2mux_test.py +++ b/compiler/tests/20_psram_1bank_2mux_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 1 bank SRAM """ 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 f7cb57fc..2a75ad42 100755 --- a/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py +++ b/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 1 bank SRAM """ 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 b13c8020..4cf7447c 100755 --- a/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 1 bank, 2 port SRAM """ 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 a0d75054..0d97fdc4 100755 --- a/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 1 bank SRAM """ diff --git a/compiler/tests/20_sram_1bank_2mux_test.py b/compiler/tests/20_sram_1bank_2mux_test.py index 7f305c0e..9ea5def1 100755 --- a/compiler/tests/20_sram_1bank_2mux_test.py +++ b/compiler/tests/20_sram_1bank_2mux_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 1 bank SRAM """ diff --git a/compiler/tests/20_sram_1bank_4mux_test.py b/compiler/tests/20_sram_1bank_4mux_test.py index 96e8cfda..1cb85cec 100755 --- a/compiler/tests/20_sram_1bank_4mux_test.py +++ b/compiler/tests/20_sram_1bank_4mux_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 1 bank SRAM """ 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 b2cd395f..2e9f9eea 100755 --- a/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 1 bank SRAM """ diff --git a/compiler/tests/20_sram_1bank_8mux_test.py b/compiler/tests/20_sram_1bank_8mux_test.py index f8b43835..c6c8c946 100755 --- a/compiler/tests/20_sram_1bank_8mux_test.py +++ b/compiler/tests/20_sram_1bank_8mux_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 1 bank SRAM """ 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 b33ef2c4..1e2ea8f8 100755 --- a/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 1 bank, 2 port SRAM """ diff --git a/compiler/tests/20_sram_1bank_nomux_test.py b/compiler/tests/20_sram_1bank_nomux_test.py index 004c7604..fa7e1539 100755 --- a/compiler/tests/20_sram_1bank_nomux_test.py +++ b/compiler/tests/20_sram_1bank_nomux_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 1 bank SRAM """ diff --git a/compiler/tests/20_sram_2bank_test.py b/compiler/tests/20_sram_2bank_test.py index b63691ec..547917b4 100755 --- a/compiler/tests/20_sram_2bank_test.py +++ b/compiler/tests/20_sram_2bank_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on a 2 bank SRAM """ diff --git a/compiler/tests/21_hspice_delay_test.py b/compiler/tests/21_hspice_delay_test.py index abe65b02..c47eec3c 100755 --- a/compiler/tests/21_hspice_delay_test.py +++ b/compiler/tests/21_hspice_delay_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ diff --git a/compiler/tests/21_hspice_setuphold_test.py b/compiler/tests/21_hspice_setuphold_test.py index 11020365..0c79aa77 100755 --- a/compiler/tests/21_hspice_setuphold_test.py +++ b/compiler/tests/21_hspice_setuphold_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ diff --git a/compiler/tests/21_model_delay_test.py b/compiler/tests/21_model_delay_test.py index f851b6f1..a496727c 100755 --- a/compiler/tests/21_model_delay_test.py +++ b/compiler/tests/21_model_delay_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ diff --git a/compiler/tests/21_ngspice_delay_test.py b/compiler/tests/21_ngspice_delay_test.py index c0b2c8fe..cb503e6d 100755 --- a/compiler/tests/21_ngspice_delay_test.py +++ b/compiler/tests/21_ngspice_delay_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ diff --git a/compiler/tests/21_ngspice_setuphold_test.py b/compiler/tests/21_ngspice_setuphold_test.py index 774e3e75..64a8972c 100755 --- a/compiler/tests/21_ngspice_setuphold_test.py +++ b/compiler/tests/21_ngspice_setuphold_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ diff --git a/compiler/tests/22_psram_1bank_2mux_func_test.py b/compiler/tests/22_psram_1bank_2mux_func_test.py index 8606fd5f..4c3307b5 100755 --- a/compiler/tests/22_psram_1bank_2mux_func_test.py +++ b/compiler/tests/22_psram_1bank_2mux_func_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ diff --git a/compiler/tests/22_psram_1bank_4mux_func_test.py b/compiler/tests/22_psram_1bank_4mux_func_test.py index 45c4676d..84421e62 100755 --- a/compiler/tests/22_psram_1bank_4mux_func_test.py +++ b/compiler/tests/22_psram_1bank_4mux_func_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ diff --git a/compiler/tests/22_psram_1bank_8mux_func_test.py b/compiler/tests/22_psram_1bank_8mux_func_test.py index 7bc75e2e..afd319bc 100755 --- a/compiler/tests/22_psram_1bank_8mux_func_test.py +++ b/compiler/tests/22_psram_1bank_8mux_func_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ diff --git a/compiler/tests/22_psram_1bank_nomux_func_test.py b/compiler/tests/22_psram_1bank_nomux_func_test.py index 1673c4f7..749e7f0f 100755 --- a/compiler/tests/22_psram_1bank_nomux_func_test.py +++ b/compiler/tests/22_psram_1bank_nomux_func_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a functioal test on 1 bank SRAM """ diff --git a/compiler/tests/22_sram_1bank_2mux_func_test.py b/compiler/tests/22_sram_1bank_2mux_func_test.py index 60e8929d..68be7e0d 100755 --- a/compiler/tests/22_sram_1bank_2mux_func_test.py +++ b/compiler/tests/22_sram_1bank_2mux_func_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ diff --git a/compiler/tests/22_sram_1bank_4mux_func_test.py b/compiler/tests/22_sram_1bank_4mux_func_test.py index b768a7b9..d303f2b7 100755 --- a/compiler/tests/22_sram_1bank_4mux_func_test.py +++ b/compiler/tests/22_sram_1bank_4mux_func_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ diff --git a/compiler/tests/22_sram_1bank_8mux_func_test.py b/compiler/tests/22_sram_1bank_8mux_func_test.py index 45aa2bff..710b1355 100755 --- a/compiler/tests/22_sram_1bank_8mux_func_test.py +++ b/compiler/tests/22_sram_1bank_8mux_func_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on various srams """ diff --git a/compiler/tests/22_sram_1bank_nomux_func_test.py b/compiler/tests/22_sram_1bank_nomux_func_test.py index baf10e9e..dbec45a8 100755 --- a/compiler/tests/22_sram_1bank_nomux_func_test.py +++ b/compiler/tests/22_sram_1bank_nomux_func_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a functioal test on 1 bank SRAM """ 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 df0ad3a6..cdc13f74 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 @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a functioal test on 1 bank SRAM """ diff --git a/compiler/tests/23_lib_sram_model_corners_test.py b/compiler/tests/23_lib_sram_model_corners_test.py index 6cac68b1..ee90497c 100755 --- a/compiler/tests/23_lib_sram_model_corners_test.py +++ b/compiler/tests/23_lib_sram_model_corners_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Check the .lib file for an SRAM """ diff --git a/compiler/tests/23_lib_sram_model_test.py b/compiler/tests/23_lib_sram_model_test.py index 0b4e1efb..c941f7a1 100755 --- a/compiler/tests/23_lib_sram_model_test.py +++ b/compiler/tests/23_lib_sram_model_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Check the .lib file for an SRAM """ diff --git a/compiler/tests/23_lib_sram_prune_test.py b/compiler/tests/23_lib_sram_prune_test.py index 266d3ba3..dc7d7930 100755 --- a/compiler/tests/23_lib_sram_prune_test.py +++ b/compiler/tests/23_lib_sram_prune_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Check the .lib file for an SRAM with pruning """ diff --git a/compiler/tests/23_lib_sram_test.py b/compiler/tests/23_lib_sram_test.py index a81b1479..208813c7 100755 --- a/compiler/tests/23_lib_sram_test.py +++ b/compiler/tests/23_lib_sram_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Check the .lib file for an SRAM """ diff --git a/compiler/tests/24_lef_sram_test.py b/compiler/tests/24_lef_sram_test.py index bd1fdc6a..aa0477a8 100755 --- a/compiler/tests/24_lef_sram_test.py +++ b/compiler/tests/24_lef_sram_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Check the LEF file for an SRMA """ diff --git a/compiler/tests/25_verilog_sram_test.py b/compiler/tests/25_verilog_sram_test.py index 63810357..7c569189 100755 --- a/compiler/tests/25_verilog_sram_test.py +++ b/compiler/tests/25_verilog_sram_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Check the .v file for an SRAM """ diff --git a/compiler/tests/26_pex_test.py b/compiler/tests/26_pex_test.py index cd47a21c..5598e6bf 100755 --- a/compiler/tests/26_pex_test.py +++ b/compiler/tests/26_pex_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Run a regression test on an extracted SRAM to ensure functionality. """ diff --git a/compiler/tests/30_openram_test.py b/compiler/tests/30_openram_test.py index 2681b351..6f1b24fc 100755 --- a/compiler/tests/30_openram_test.py +++ b/compiler/tests/30_openram_test.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ This tests the top-level executable. It checks that it generates the appropriate files: .lef, .lib, .sp, .gds, .v. It DOES NOT, however, diff --git a/compiler/tests/config_freepdk45.py b/compiler/tests/config_freepdk45.py old mode 100755 new mode 100644 index 7a1da315..4665778e --- a/compiler/tests/config_freepdk45.py +++ b/compiler/tests/config_freepdk45.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# word_size = 1 num_words = 16 diff --git a/compiler/tests/config_freepdk45_front_end.py b/compiler/tests/config_freepdk45_front_end.py old mode 100755 new mode 100644 index 81da24e8..983aacae --- a/compiler/tests/config_freepdk45_front_end.py +++ b/compiler/tests/config_freepdk45_front_end.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# word_size = 1 num_words = 16 diff --git a/compiler/tests/config_scn4m_subm.py b/compiler/tests/config_scn4m_subm.py old mode 100755 new mode 100644 index adb1c99d..6733a50c --- a/compiler/tests/config_scn4m_subm.py +++ b/compiler/tests/config_scn4m_subm.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# word_size = 1 num_words = 16 diff --git a/compiler/tests/config_scn4m_subm_front_end.py b/compiler/tests/config_scn4m_subm_front_end.py old mode 100755 new mode 100644 index e847745b..5e9316b3 --- a/compiler/tests/config_scn4m_subm_front_end.py +++ b/compiler/tests/config_scn4m_subm_front_end.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# word_size = 1 num_words = 16 diff --git a/compiler/tests/regress.py b/compiler/tests/regress.py index d97def2b..03ee9fc5 100755 --- a/compiler/tests/regress.py +++ b/compiler/tests/regress.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import re import unittest diff --git a/compiler/tests/testutils.py b/compiler/tests/testutils.py old mode 100755 new mode 100644 index 799c223e..dfdd47c9 --- a/compiler/tests/testutils.py +++ b/compiler/tests/testutils.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import unittest,warnings import sys,os,glob,copy import shutil diff --git a/compiler/verify/__init__.py b/compiler/verify/__init__.py index 1f0ffaab..011e2e8a 100644 --- a/compiler/verify/__init__.py +++ b/compiler/verify/__init__.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ This is a module that will import the correct DRC/LVS/PEX module based on what tools are found. It is a layer of indirection diff --git a/compiler/verify/assura.py b/compiler/verify/assura.py index af034730..88ba2e40 100644 --- a/compiler/verify/assura.py +++ b/compiler/verify/assura.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ This is a DRC/LVS interface for Assura. It implements completely two functions: run_drc and run_lvs, that perform these functions in batch diff --git a/compiler/verify/calibre.py b/compiler/verify/calibre.py index 9b1c974e..8a898a0d 100644 --- a/compiler/verify/calibre.py +++ b/compiler/verify/calibre.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ This is a DRC/LVS interface for calibre. It implements completely independently two functions: run_drc and run_lvs, that perform these diff --git a/compiler/verify/magic.py b/compiler/verify/magic.py index e441b9dc..90b1b35a 100644 --- a/compiler/verify/magic.py +++ b/compiler/verify/magic.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ This is a DRC/LVS/PEX interface file for magic + netgen. diff --git a/compiler/verify/none.py b/compiler/verify/none.py index c69ed93b..c2396ae2 100644 --- a/compiler/verify/none.py +++ b/compiler/verify/none.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ This is a DRC/LVS/PEX interface file the case with no DRC/LVS tools. diff --git a/compiler/view_profile.py b/compiler/view_profile.py index aadcd459..92c60c86 100755 --- a/compiler/view_profile.py +++ b/compiler/view_profile.py @@ -1,4 +1,11 @@ #!/usr/bin/env python3 +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import pstats p = pstats.Stats("profile.dat") p.strip_dirs() diff --git a/technology/freepdk45/__init__.py b/technology/freepdk45/__init__.py index f7f801ea..3c520696 100644 --- a/technology/freepdk45/__init__.py +++ b/technology/freepdk45/__init__.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# #!/usr/bin/python """ This type of setup script should be placed in the setup_scripts directory in diff --git a/technology/freepdk45/tech/__init__.py b/technology/freepdk45/tech/__init__.py index 2573d2c2..cba5ec10 100644 --- a/technology/freepdk45/tech/__init__.py +++ b/technology/freepdk45/tech/__init__.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Import tech specific modules. """ diff --git a/technology/freepdk45/tech/tech.py b/technology/freepdk45/tech/tech.py index 1bf1c0e7..9fc64b36 100644 --- a/technology/freepdk45/tech/tech.py +++ b/technology/freepdk45/tech/tech.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import os from design_rules import * diff --git a/technology/scn4m_subm/__init__.py b/technology/scn4m_subm/__init__.py index d8474497..2e595844 100644 --- a/technology/scn4m_subm/__init__.py +++ b/technology/scn4m_subm/__init__.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# #!/usr/bin/python """ This type of setup script should be placed in the setup_scripts directory in the trunk diff --git a/technology/scn4m_subm/tech/__init__.py b/technology/scn4m_subm/tech/__init__.py old mode 100755 new mode 100644 index 2573d2c2..cba5ec10 --- a/technology/scn4m_subm/tech/__init__.py +++ b/technology/scn4m_subm/tech/__init__.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# """ Import tech specific modules. """ diff --git a/technology/scn4m_subm/tech/tech.py b/technology/scn4m_subm/tech/tech.py old mode 100755 new mode 100644 index 23901b0d..61de6cb9 --- a/technology/scn4m_subm/tech/tech.py +++ b/technology/scn4m_subm/tech/tech.py @@ -1,3 +1,10 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# import os from design_rules import * From 9cead23f22369032f2e886053b9579f824c4e891 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 26 Apr 2019 13:46:34 -0700 Subject: [PATCH 27/37] Add hierarchy to netgen LVS command. --- compiler/verify/magic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/verify/magic.py b/compiler/verify/magic.py index 90b1b35a..1ea03974 100644 --- a/compiler/verify/magic.py +++ b/compiler/verify/magic.py @@ -116,7 +116,7 @@ def write_netgen_script(cell_name, sp_name): # cell_name)) # f.write("property {{{0}{1}.spice pfet}} tolerance {{w 0.1}}\n".format(OPTS.openram_temp, # cell_name)) - f.write("lvs {0}.spice {{{1} {0}}} {2} {0}.lvs.report\n".format(cell_name, sp_name, setup_file)) + f.write("lvs {{{0}.spice {0}}} {{{1} {0}}} {2} {0}.lvs.report\n".format(cell_name, sp_name, setup_file)) f.write("quit\n") f.write("EOF\n") f.close() From d23aa9a1bdeedd99f87590fbb25fb18bab0b8877 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 26 Apr 2019 14:12:51 -0700 Subject: [PATCH 28/37] Use local setup.tcl and flatten bitcell arrays. --- compiler/verify/magic.py | 7 ++++--- technology/scn4m_subm/mag_lib/setup.tcl | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/compiler/verify/magic.py b/compiler/verify/magic.py index 1ea03974..4799ce13 100644 --- a/compiler/verify/magic.py +++ b/compiler/verify/magic.py @@ -97,10 +97,11 @@ def write_netgen_script(cell_name, sp_name): global OPTS - setup_file = OPTS.openram_tech + "mag_lib/setup.tcl" - if os.path.exists(setup_file): + setup_file = "setup.tcl" + full_setup_file = OPTS.openram_tech + "mag_lib/" + setup_file + if os.path.exists(full_setup_file): # Copy setup.tcl file into temp dir - shutil.copy(setup_file, OPTS.openram_temp) + shutil.copy(full_setup_file, OPTS.openram_temp) else: setup_file = 'nosetup' diff --git a/technology/scn4m_subm/mag_lib/setup.tcl b/technology/scn4m_subm/mag_lib/setup.tcl index 1799e910..01639fe2 100644 --- a/technology/scn4m_subm/mag_lib/setup.tcl +++ b/technology/scn4m_subm/mag_lib/setup.tcl @@ -4,8 +4,8 @@ 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 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} From 51a97979b9bdde8f26da15f2c7f472007085312b Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 26 Apr 2019 15:17:19 -0700 Subject: [PATCH 29/37] Add front and back-end test 30. --- ...am_test.py => 30_openram_back_end_test.py} | 6 +- compiler/tests/30_openram_front_end_test.py | 102 ++++++++++++++++++ 2 files changed, 104 insertions(+), 4 deletions(-) rename compiler/tests/{30_openram_test.py => 30_openram_back_end_test.py} (96%) create mode 100755 compiler/tests/30_openram_front_end_test.py diff --git a/compiler/tests/30_openram_test.py b/compiler/tests/30_openram_back_end_test.py similarity index 96% rename from compiler/tests/30_openram_test.py rename to compiler/tests/30_openram_back_end_test.py index 6f1b24fc..414c4a62 100755 --- a/compiler/tests/30_openram_test.py +++ b/compiler/tests/30_openram_back_end_test.py @@ -27,10 +27,9 @@ class openram_test(openram_test): def runTest(self): OPENRAM_HOME = os.path.abspath(os.environ.get("OPENRAM_HOME")) 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.") + + debug.info(1, "Testing top-level back-end openram.py with 2-bit, 16 word SRAM.") out_file = "testsram" - # make a temp directory for output out_path = "/tmp/testsram_{0}_{1}_{2}/".format(OPTS.tech_name,getpass.getuser(),os.getpid()) # make sure we start without the files existing @@ -48,7 +47,6 @@ class openram_test(openram_test): verbosity = "" for i in range(OPTS.debug_level): verbosity += " -v" - # Always perform code coverage if OPTS.coverage == 0: diff --git a/compiler/tests/30_openram_front_end_test.py b/compiler/tests/30_openram_front_end_test.py new file mode 100755 index 00000000..006d1bf3 --- /dev/null +++ b/compiler/tests/30_openram_front_end_test.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 +""" +This tests the top-level executable. It checks that it generates the +appropriate files: .lef, .lib, .sp, .gds, .v. It DOES NOT, however, +check that these files are right. +""" + +import unittest +from testutils import header,openram_test +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 + +class openram_test(openram_test): + + def runTest(self): + OPENRAM_HOME = os.path.abspath(os.environ.get("OPENRAM_HOME")) + globals.init_openram("{0}/tests/config_{1}".format(OPENRAM_HOME,OPTS.tech_name)) + + debug.info(1, "Testing top-level front-end openram.py with 2-bit, 16 word SRAM.") + out_file = "testsram" + out_path = "/tmp/testsram_{0}_{1}_{2}".format(OPTS.tech_name,getpass.getuser(),os.getpid()) + + # make sure we start without the files existing + if os.path.exists(out_path): + shutil.rmtree(out_path, ignore_errors=True) + self.assertEqual(os.path.exists(out_path),False) + + try: + os.makedirs(out_path, 0o0750) + except OSError as e: + if e.errno == 17: # errno.EEXIST + os.chmod(out_path, 0o0750) + + # specify the same verbosity for the system call + verbosity = "" + for i in range(OPTS.debug_level): + verbosity += " -v" + + + # Always perform code coverage + if OPTS.coverage == 0: + debug.warning("Failed to find coverage installation. This can be installed with pip3 install coverage") + exe_name = "{0}/openram.py ".format(OPENRAM_HOME) + else: + exe_name = "coverage run -p {0}/openram.py ".format(OPENRAM_HOME) + config_name = "{0}config_{1}_front_end.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, + verbosity, + config_name, + out_path) + debug.info(1, cmd) + os.system(cmd) + + # assert an error until we actually check a result + for extension in ["v", "lef", "sp"]: + filename = "{0}/{1}.{2}".format(out_path,out_file,extension) + debug.info(1,"Checking for file: " + filename) + self.assertEqual(os.path.exists(filename),True) + # assert an error if we output the incomplete gds! + for extension in ["gds"]: + filename = "{0}/{1}.{2}".format(out_path,out_file,extension) + debug.info(1,"Checking file does NOT exist: " + filename) + self.assertEqual(os.path.exists(filename),False) + + # Make sure there is any .lib file + import glob + files = glob.glob('{0}/*.lib'.format(out_path)) + self.assertTrue(len(files)>0) + + # Make sure there is any .html file + if os.path.exists(out_path): + datasheets = glob.glob('{0}/*html'.format(out_path)) + self.assertTrue(len(datasheets)>0) + + # grep any errors from the output + output_log = open("{0}/output.log".format(out_path),"r") + output = output_log.read() + output_log.close() + self.assertEqual(len(re.findall('ERROR',output)),0) + self.assertEqual(len(re.findall('WARNING',output)),0) + + + # now clean up the directory + if os.path.exists(out_path): + shutil.rmtree(out_path, ignore_errors=True) + self.assertEqual(os.path.exists(out_path),False) + + globals.end_openram() + +# run the test from the command line +if __name__ == "__main__": + (OPTS, args) = globals.parse_args() + del sys.argv[1:] + header(__file__, OPTS.tech_name) + unittest.main() From 946a0aca8633da4b74bb5db53728536ee2ac3624 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 26 Apr 2019 15:17:39 -0700 Subject: [PATCH 30/37] Simplify DRC and LVS run scripts. Modified run scripts to work on local only files in the temp directory. This assumes the files and subckts are named the same as the clel name. Script now copies library files to the temp directory as well. --- compiler/verify/calibre.py | 53 +++++++++++++++++++++----------------- compiler/verify/magic.py | 30 +++++++++++---------- 2 files changed, 47 insertions(+), 36 deletions(-) diff --git a/compiler/verify/calibre.py b/compiler/verify/calibre.py index 8a898a0d..ce6a97ce 100644 --- a/compiler/verify/calibre.py +++ b/compiler/verify/calibre.py @@ -66,6 +66,7 @@ more cell_6t.lvs.report import os +import shutil import re import time import debug @@ -77,7 +78,7 @@ num_drc_runs = 0 num_lvs_runs = 0 num_pex_runs = 0 -def write_calibre_drc_script(cell_name, gds_name, extract, final_verification): +def write_calibre_drc_script(cell_name, extract, final_verification): """ Write a Calibre runset file and script to run DRC """ # the runset file contains all the options to run calibre from tech import drc @@ -86,12 +87,12 @@ def write_calibre_drc_script(cell_name, gds_name, extract, final_verification): drc_runset = { 'drcRulesFile': drc_rules, 'drcRunDir': OPTS.openram_temp, - 'drcLayoutPaths': gds_name, + 'drcLayoutPaths': cell_name + ".gds", 'drcLayoutPrimary': cell_name, 'drcLayoutSystem': 'GDSII', 'drcResultsformat': 'ASCII', - 'drcResultsFile': OPTS.openram_temp + cell_name + ".drc.results", - 'drcSummaryFile': OPTS.openram_temp + cell_name + ".drc.summary", + 'drcResultsFile': cell_name + ".drc.results", + 'drcSummaryFile': cell_name + ".drc.summary", 'cmnFDILayerMapFile': drc["layer_map"], 'cmnFDIUseLayerMap': 1 } @@ -114,7 +115,7 @@ def write_calibre_drc_script(cell_name, gds_name, extract, final_verification): os.system("chmod u+x {}".format(run_file)) return drc_runset -def write_calibre_lvs_script(cell_name, gds_name, sp_name, final_verification): +def write_calibre_lvs_script(cell_name, final_verification): """ Write a Calibre runset file and script to run LVS """ from tech import drc @@ -122,20 +123,20 @@ def write_calibre_lvs_script(cell_name, gds_name, sp_name, final_verification): lvs_runset = { 'lvsRulesFile': lvs_rules, 'lvsRunDir': OPTS.openram_temp, - 'lvsLayoutPaths': gds_name, + 'lvsLayoutPaths': cell_name + ".gds", 'lvsLayoutPrimary': cell_name, - 'lvsSourcePath': sp_name, + 'lvsSourcePath': cell_name + ".sp", 'lvsSourcePrimary': cell_name, 'lvsSourceSystem': 'SPICE', - 'lvsSpiceFile': OPTS.openram_temp + "extracted.sp", + 'lvsSpiceFile': "extracted.sp", 'lvsPowerNames': 'vdd', 'lvsGroundNames': 'gnd', 'lvsIncludeSVRFCmds': 1, 'lvsIgnorePorts': 1, - 'lvsERCDatabase': OPTS.openram_temp + cell_name + ".erc.results", - 'lvsERCSummaryFile': OPTS.openram_temp + cell_name + ".erc.summary", - 'lvsReportFile': OPTS.openram_temp + cell_name + ".lvs.report", - 'lvsMaskDBFile': OPTS.openram_temp + cell_name + ".maskdb", + 'lvsERCDatabase': cell_name + ".erc.results", + 'lvsERCSummaryFile': cell_name + ".erc.summary", + 'lvsReportFile': cell_name + ".lvs.report", + 'lvsMaskDBFile': cell_name + ".maskdb", 'cmnFDILayerMapFile': drc["layer_map"], 'cmnFDIUseLayerMap': 1, 'cmnTranscriptFile': './lvs.log', @@ -185,7 +186,11 @@ def run_drc(cell_name, gds_name, extract=False, final_verification=False): global num_drc_runs num_drc_runs += 1 - drc_runset = write_calibre_drc_script(cell_name, gds_name, extract, final_verification) + # Copy file to local dir if it isn't already + if os.path.dirname(gds_name)!=OPTS.openram_temp.rstrip('/'): + shutil.copy(gds_name, OPTS.openram_temp) + + drc_runset = write_calibre_drc_script(cell_name, extract, final_verification) # run drc cwd = os.getcwd() @@ -193,9 +198,7 @@ def run_drc(cell_name, gds_name, extract=False, final_verification=False): errfile = "{0}{1}.drc.err".format(OPTS.openram_temp, cell_name) outfile = "{0}{1}.drc.out".format(OPTS.openram_temp, cell_name) - cmd = "{0}run_drc.sh 2> {1} 1> {2}".format(OPTS.openram_temp, - errfile, - outfile) + cmd = "run_drc.sh 2> {0} 1> {1}".format(errfile, outfile) debug.info(2, cmd) os.system(cmd) os.chdir(cwd) @@ -205,7 +208,7 @@ def run_drc(cell_name, gds_name, extract=False, final_verification=False): # TOTAL DRC RuleChecks Executed: 156 # TOTAL DRC Results Generated: 0 (0) try: - f = open(drc_runset['drcSummaryFile'], "r") + f = open(OPTS.openram_temp + drc_runset['drcSummaryFile'], "r") except: debug.error("Unable to retrieve DRC results file. Is calibre set up?",1) results = f.readlines() @@ -238,23 +241,27 @@ def run_lvs(cell_name, gds_name, sp_name, final_verification=False): global num_lvs_runs num_lvs_runs += 1 - lvs_runset = write_calibre_lvs_script(cell_name, gds_name, sp_name, final_verification) + lvs_runset = write_calibre_lvs_script(cell_name, final_verification) + # Copy file to local dir if it isn't already + if os.path.dirname(gds_name)!=OPTS.openram_temp.rstrip('/'): + shutil.copy(gds_name, OPTS.openram_temp) + if os.path.dirname(sp_name)!=OPTS.openram_temp.rstrip('/'): + shutil.copy(sp_name, OPTS.openram_temp) + # run lvs cwd = os.getcwd() os.chdir(OPTS.openram_temp) errfile = "{0}{1}.lvs.err".format(OPTS.openram_temp, cell_name) outfile = "{0}{1}.lvs.out".format(OPTS.openram_temp, cell_name) - cmd = "{0}run_lvs.sh 2> {1} 1> {2}".format(OPTS.openram_temp, - errfile, - outfile) + cmd = "run_lvs.sh 2> {0} 1> {1}".format(errfile, outfile) debug.info(2, cmd) os.system(cmd) os.chdir(cwd) # check the result for these lines in the summary: - f = open(lvs_runset['lvsReportFile'], "r") + f = open(OPTS.openram_temp + lvs_runset['lvsReportFile'], "r") results = f.readlines() f.close() @@ -277,7 +284,7 @@ def run_lvs(cell_name, gds_name, sp_name, final_verification=False): summary_errors = len(notcompared) + len(incorrect) + len(errors) # also check the extraction summary file - f = open(lvs_runset['lvsReportFile'] + ".ext", "r") + f = open(OPTS.openram_temp + lvs_runset['lvsReportFile'] + ".ext", "r") results = f.readlines() f.close() diff --git a/compiler/verify/magic.py b/compiler/verify/magic.py index 4799ce13..9f1a066c 100644 --- a/compiler/verify/magic.py +++ b/compiler/verify/magic.py @@ -33,7 +33,7 @@ num_drc_runs = 0 num_lvs_runs = 0 num_pex_runs = 0 -def write_magic_script(cell_name, gds_name, extract=False, final_verification=False): +def write_magic_script(cell_name, extract=False, final_verification=False): """ Write a magic script to perform DRC and optionally extraction. """ global OPTS @@ -44,7 +44,7 @@ def write_magic_script(cell_name, gds_name, extract=False, final_verification=Fa f.write("{} -dnull -noconsole << EOF\n".format(OPTS.drc_exe[1])) f.write("gds polygon subcell true\n") f.write("gds warning default\n") - f.write("gds read {}\n".format(gds_name)) + f.write("gds read {}.gds\n".format(cell_name)) f.write("load {}\n".format(cell_name)) # Flatten the cell to get rid of DRCs spanning multiple layers # (e.g. with routes) @@ -92,7 +92,7 @@ def write_magic_script(cell_name, gds_name, extract=False, final_verification=Fa f.close() os.system("chmod u+x {}".format(run_file)) -def write_netgen_script(cell_name, sp_name): +def write_netgen_script(cell_name): """ Write a netgen script to perform LVS. """ global OPTS @@ -110,14 +110,8 @@ def write_netgen_script(cell_name, sp_name): f.write("#!/bin/sh\n") f.write("{} -noconsole << EOF\n".format(OPTS.lvs_exe[1])) f.write("readnet spice {0}.spice\n".format(cell_name)) - f.write("readnet spice {0}\n".format(sp_name)) - # Allow some flexibility in W size because magic will snap to a lambda grid - # This can also cause disconnects unfortunately! - # f.write("property {{{0}{1}.spice nfet}} tolerance {{w 0.1}}\n".format(OPTS.openram_temp, - # cell_name)) - # f.write("property {{{0}{1}.spice pfet}} tolerance {{w 0.1}}\n".format(OPTS.openram_temp, - # cell_name)) - f.write("lvs {{{0}.spice {0}}} {{{1} {0}}} {2} {0}.lvs.report\n".format(cell_name, sp_name, setup_file)) + f.write("readnet spice {0}.sp\n".format(cell_name)) + f.write("lvs {{{0}.spice {0}}} {{{0}.sp {0}}} {1} {0}.lvs.report\n".format(cell_name, setup_file)) f.write("quit\n") f.write("EOF\n") f.close() @@ -130,6 +124,10 @@ def run_drc(cell_name, gds_name, extract=True, final_verification=False): global num_drc_runs num_drc_runs += 1 + # Copy file to local dir if it isn't already + if os.path.dirname(gds_name)!=OPTS.openram_temp.rstrip('/'): + shutil.copy(gds_name, OPTS.openram_temp) + # Copy .magicrc file into temp dir magic_file = OPTS.openram_tech + "mag_lib/.magicrc" if os.path.exists(magic_file): @@ -137,7 +135,7 @@ def run_drc(cell_name, gds_name, extract=True, final_verification=False): else: debug.warning("Could not locate .magicrc file: {}".format(magic_file)) - write_magic_script(cell_name, gds_name, extract, final_verification) + write_magic_script(cell_name, extract, final_verification) # run drc cwd = os.getcwd() @@ -194,8 +192,14 @@ def run_lvs(cell_name, gds_name, sp_name, final_verification=False): global num_lvs_runs num_lvs_runs += 1 + + # Copy file to local dir if it isn't already + if os.path.dirname(gds_name)!=OPTS.openram_temp.rstrip('/'): + shutil.copy(gds_name, OPTS.openram_temp) + if os.path.dirname(sp_name)!=OPTS.openram_temp.rstrip('/'): + shutil.copy(sp_name, OPTS.openram_temp) - write_netgen_script(cell_name, sp_name) + write_netgen_script(cell_name) # run LVS cwd = os.getcwd() From 978ba9d2f2a344f3fa7594bf378249655bef66e9 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 26 Apr 2019 15:43:46 -0700 Subject: [PATCH 31/37] Refactor run scripts. Run DRC, LVS, and PEX share a run_*.sh script. --- compiler/verify/calibre.py | 166 +++++++++++----------------------- compiler/verify/magic.py | 35 ++----- compiler/verify/run_script.py | 34 +++++++ 3 files changed, 93 insertions(+), 142 deletions(-) create mode 100644 compiler/verify/run_script.py diff --git a/compiler/verify/calibre.py b/compiler/verify/calibre.py index ce6a97ce..95535bee 100644 --- a/compiler/verify/calibre.py +++ b/compiler/verify/calibre.py @@ -7,61 +7,13 @@ # """ This is a DRC/LVS interface for calibre. It implements completely -independently two functions: run_drc and run_lvs, that perform these +independently three functions: run_drc, run_lvs, run_pex, that perform these functions in batch mode and will return true/false if the result passes. All of the setup (the rules, temp dirs, etc.) should be contained in this file. Replacing with another DRC/LVS tool involves rewriting this code to work properly. Porting to a new technology in Calibre means pointing the code to the proper DRC and LVS rule files. -A calibre DRC runset file contains, at the minimum, the following information: - -*drcRulesFile: /mada/software/techfiles/FreePDK45/ncsu_basekit/techfile/calibre/calibreDRC.rul -*drcRunDir: . -*drcLayoutPaths: ./cell_6t.gds -*drcLayoutPrimary: cell_6t -*drcLayoutSystem: GDSII -*drcResultsformat: ASCII -*drcResultsFile: cell_6t.drc.results -*drcSummaryFile: cell_6t.drc.summary -*cmnFDILayerMapFile: ./layer.map -*cmnFDIUseLayerMap: 1 - -This can be executed in "batch" mode with the following command: - -calibre -gui -drc example_drc_runset -batch - -To open the results, you can do this: - -calibredrv cell_6t.gds -Select Verification->Start RVE. -Select the cell_6t.drc.results file. -Click on the errors and they will highlight in the design layout viewer. - -For LVS: - -*lvsRulesFile: /mada/software/techfiles/FreePDK45/ncsu_basekit/techfile/calibre/calibreLVS.rul -*lvsRunDir: . -*lvsLayoutPaths: ./cell_6t.gds -*lvsLayoutPrimary: cell_6t -*lvsSourcePath: ./cell_6t.sp -*lvsSourcePrimary: cell_6t -*lvsSourceSystem: SPICE -*lvsSpiceFile: extracted.sp -*lvsPowerNames: vdd -*lvsGroundNames: vss -*lvsIgnorePorts: 1 -*lvsERCDatabase: cell_6t.erc.results -*lvsERCSummaryFile: cell_6t.erc.summary -*lvsReportFile: cell_6t.lvs.report -*lvsMaskDBFile: cell_6t.maskdb -*cmnFDILayerMapFile: ./layer.map -*cmnFDIUseLayerMap: 1 - -To run and see results: - -calibre -gui -lvs example_lvs_runset -batch -more cell_6t.lvs.report """ @@ -71,7 +23,7 @@ import re import time import debug from globals import OPTS -import subprocess +from run_script import * # Keep track of statistics num_drc_runs = 0 @@ -177,7 +129,52 @@ def write_calibre_lvs_script(cell_name, final_verification): os.system("chmod u+x {}".format(run_file)) return lvs_runset + +def write_calibre_pex_script(cell_name, extract, output, final_verification): + if output == None: + output = name + ".pex.netlist" + + # check if lvs report has been done + # if not run drc and lvs + if not os.path.isfile(cell_name + ".lvs.report"): + run_drc(cell_name, gds_name) + run_lvs(cell_name, gds_name, sp_name) + + pex_rules = drc["xrc_rules"] + pex_runset = { + 'pexRulesFile': pex_rules, + 'pexRunDir': OPTS.openram_temp, + 'pexLayoutPaths': cell_name + ".gds", + 'pexLayoutPrimary': cell_name, + #'pexSourcePath' : OPTS.openram_temp+"extracted.sp", + 'pexSourcePath': cell_name + ".sp", + 'pexSourcePrimary': cell_name, + 'pexReportFile': cell_name + ".lvs.report", + 'pexPexNetlistFile': cell_name + ".pex.netlist", + 'pexPexReportFile': cell_name + ".pex.report", + 'pexMaskDBFile': cell_name + ".maskdb", + 'cmnFDIDEFLayoutPath': cell_name + ".def", + } + + # write the runset file + f = open(OPTS.openram_temp + "pex_runset", "w") + for k in sorted(iter(pex_runset.keys())): + f.write("*{0}: {1}\n".format(k, pex_runset[k])) + f.close() + + # Create an auxiliary script to run calibre with the runset + run_file = OPTS.openram_temp + "run_pex.sh" + f = open(run_file, "w") + f.write("#!/bin/sh\n") + cmd = "{0} -gui -pex {1}pex_runset -batch".format(OPTS.pex_exe[1], + OPTS.openram_temp) + f.write(cmd) + f.write("\n") + f.close() + os.system("chmod u+x {}".format(run_file)) + + return pex_runset def run_drc(cell_name, gds_name, extract=False, final_verification=False): """Run DRC check on a given top-level name which is @@ -191,17 +188,8 @@ def run_drc(cell_name, gds_name, extract=False, final_verification=False): shutil.copy(gds_name, OPTS.openram_temp) drc_runset = write_calibre_drc_script(cell_name, extract, final_verification) - - # run drc - cwd = os.getcwd() - os.chdir(OPTS.openram_temp) - errfile = "{0}{1}.drc.err".format(OPTS.openram_temp, cell_name) - outfile = "{0}{1}.drc.out".format(OPTS.openram_temp, cell_name) - cmd = "run_drc.sh 2> {0} 1> {1}".format(errfile, outfile) - debug.info(2, cmd) - os.system(cmd) - os.chdir(cwd) + (outfile, errfile, resultsfile) = run_script(cell_name, "drc") # check the result for these lines in the summary: # TOTAL Original Layer Geometries: 106 (157) @@ -248,17 +236,8 @@ def run_lvs(cell_name, gds_name, sp_name, final_verification=False): shutil.copy(gds_name, OPTS.openram_temp) if os.path.dirname(sp_name)!=OPTS.openram_temp.rstrip('/'): shutil.copy(sp_name, OPTS.openram_temp) - - # run lvs - cwd = os.getcwd() - os.chdir(OPTS.openram_temp) - errfile = "{0}{1}.lvs.err".format(OPTS.openram_temp, cell_name) - outfile = "{0}{1}.lvs.out".format(OPTS.openram_temp, cell_name) - cmd = "run_lvs.sh 2> {0} 1> {1}".format(errfile, outfile) - debug.info(2, cmd) - os.system(cmd) - os.chdir(cwd) + (outfile, errfile, resultsfile) = run_script(cell_name, "lvs") # check the result for these lines in the summary: f = open(OPTS.openram_temp + lvs_runset['lvsReportFile'], "r") @@ -337,52 +316,11 @@ def run_pex(cell_name, gds_name, sp_name, output=None, final_verification=False) global num_pex_runs num_pex_runs += 1 - - from tech import drc - if output == None: - output = name + ".pex.netlist" - # check if lvs report has been done - # if not run drc and lvs - if not os.path.isfile(cell_name + ".lvs.report"): - run_drc(cell_name, gds_name) - run_lvs(cell_name, gds_name, sp_name) + write_calibre_pex_script() - pex_rules = drc["xrc_rules"] - pex_runset = { - 'pexRulesFile': pex_rules, - 'pexRunDir': OPTS.openram_temp, - 'pexLayoutPaths': gds_name, - 'pexLayoutPrimary': cell_name, - #'pexSourcePath' : OPTS.openram_temp+"extracted.sp", - 'pexSourcePath': sp_name, - 'pexSourcePrimary': cell_name, - 'pexReportFile': cell_name + ".lvs.report", - 'pexPexNetlistFile': output, - 'pexPexReportFile': cell_name + ".pex.report", - 'pexMaskDBFile': cell_name + ".maskdb", - 'cmnFDIDEFLayoutPath': cell_name + ".def", - } - - # write the runset file - f = open(OPTS.openram_temp + "pex_runset", "w") - for k in sorted(iter(pex_runset.keys())): - f.write("*{0}: {1}\n".format(k, pex_runset[k])) - f.close() - - # run pex - cwd = os.getcwd() - os.chdir(OPTS.openram_temp) - errfile = "{0}{1}.pex.err".format(OPTS.openram_temp, cell_name) - outfile = "{0}{1}.pex.out".format(OPTS.openram_temp, cell_name) - - cmd = "{0} -gui -pex {1}pex_runset -batch 2> {2} 1> {3}".format(OPTS.pex_exe[1], - OPTS.openram_temp, - errfile, - outfile) - debug.info(2, cmd) - os.system(cmd) - os.chdir(cwd) + (outfile, errfile, resultsfile) = run_script(cell_name, "pex") + # also check the output file f = open(outfile, "r") diff --git a/compiler/verify/magic.py b/compiler/verify/magic.py index 9f1a066c..bf127ada 100644 --- a/compiler/verify/magic.py +++ b/compiler/verify/magic.py @@ -8,7 +8,7 @@ """ This is a DRC/LVS/PEX interface file for magic + netgen. -We include the tech file for SCN3ME_SUBM in the tech directory, +We include the tech file for SCN4M_SUBM in the tech directory, that is included in OpenRAM during DRC. You can use this interactively by appending the magic system path in your .magicrc file @@ -26,13 +26,14 @@ import time import shutil import debug from globals import OPTS -import subprocess +from run_script import * # Keep track of statistics num_drc_runs = 0 num_lvs_runs = 0 num_pex_runs = 0 + def write_magic_script(cell_name, extract=False, final_verification=False): """ Write a magic script to perform DRC and optionally extraction. """ @@ -92,6 +93,7 @@ def write_magic_script(cell_name, extract=False, final_verification=False): f.close() os.system("chmod u+x {}".format(run_file)) + def write_netgen_script(cell_name): """ Write a netgen script to perform LVS. """ @@ -136,19 +138,8 @@ def run_drc(cell_name, gds_name, extract=True, final_verification=False): debug.warning("Could not locate .magicrc file: {}".format(magic_file)) write_magic_script(cell_name, extract, final_verification) - - # run drc - cwd = os.getcwd() - os.chdir(OPTS.openram_temp) - errfile = "{0}{1}.drc.err".format(OPTS.openram_temp, cell_name) - outfile = "{0}{1}.drc.summary".format(OPTS.openram_temp, cell_name) - cmd = "{0}run_drc.sh 2> {1} 1> {2}".format(OPTS.openram_temp, - errfile, - outfile) - debug.info(2, cmd) - os.system(cmd) - os.chdir(cwd) + (outfile, errfile, resultsfile) = run_script(cell_name, "drc") # Check the result for these lines in the summary: # Total DRC errors found: 0 @@ -200,21 +191,9 @@ def run_lvs(cell_name, gds_name, sp_name, final_verification=False): shutil.copy(sp_name, OPTS.openram_temp) write_netgen_script(cell_name) + + (outfile, errfile, resultsfile) = run_script(cell_name, "lvs") - # run LVS - cwd = os.getcwd() - os.chdir(OPTS.openram_temp) - errfile = "{0}{1}.lvs.err".format(OPTS.openram_temp, cell_name) - outfile = "{0}{1}.lvs.out".format(OPTS.openram_temp, cell_name) - resultsfile = "{0}{1}.lvs.report".format(OPTS.openram_temp, cell_name) - - cmd = "{0}run_lvs.sh lvs 2> {1} 1> {2}".format(OPTS.openram_temp, - errfile, - outfile) - debug.info(2, cmd) - os.system(cmd) - os.chdir(cwd) - total_errors = 0 # check the result for these lines in the summary: diff --git a/compiler/verify/run_script.py b/compiler/verify/run_script.py new file mode 100644 index 00000000..737566c9 --- /dev/null +++ b/compiler/verify/run_script.py @@ -0,0 +1,34 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# +""" +Some baseline functions to run scripts. +""" + +import os +import debug +from globals import OPTS + +def run_script(cell_name, script="lvs"): + """ Run script and create output files. """ + + cwd = os.getcwd() + os.chdir(OPTS.openram_temp) + errfile = "{0}{1}.{2}.err".format(OPTS.openram_temp, cell_name, script) + outfile = "{0}{1}.{2}.out".format(OPTS.openram_temp, cell_name, script) + resultsfile = "{0}{1}.{2}.report".format(OPTS.openram_temp, cell_name, script) + + cmd = "{0}run_{1}.sh 2> {2} 1> {3}".format(OPTS.openram_temp, + script, + errfile, + outfile) + debug.info(2, cmd) + os.system(cmd) + os.chdir(cwd) + + return (outfile,errfile,resultsfile) + From 8d8565bd9c935cdad5eb3ca4807965d8b780ab35 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Mon, 29 Apr 2019 09:15:46 -0700 Subject: [PATCH 32/37] Add inline_drclvs option for improved coverage --- compiler/tests/30_openram_back_end_test.py | 2 +- compiler/tests/config_freepdk45_back_end.py | 20 ++++++++++++++++++ compiler/tests/config_scn4m_subm_back_end.py | 22 ++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 compiler/tests/config_freepdk45_back_end.py create mode 100644 compiler/tests/config_scn4m_subm_back_end.py diff --git a/compiler/tests/30_openram_back_end_test.py b/compiler/tests/30_openram_back_end_test.py index 414c4a62..ca0b49d1 100755 --- a/compiler/tests/30_openram_back_end_test.py +++ b/compiler/tests/30_openram_back_end_test.py @@ -26,7 +26,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_{1}".format(OPENRAM_HOME,OPTS.tech_name)) + globals.init_openram("{0}/tests/config_{1}_back_end".format(OPENRAM_HOME,OPTS.tech_name)) debug.info(1, "Testing top-level back-end openram.py with 2-bit, 16 word SRAM.") out_file = "testsram" diff --git a/compiler/tests/config_freepdk45_back_end.py b/compiler/tests/config_freepdk45_back_end.py new file mode 100644 index 00000000..23df4f1d --- /dev/null +++ b/compiler/tests/config_freepdk45_back_end.py @@ -0,0 +1,20 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# +word_size = 1 +num_words = 16 + +tech_name = "freepdk45" +process_corners = ["TT"] +supply_voltages = [1.0] +temperatures = [25] + +inline_lvsdrc = True +route_supplies = True +check_lvsdrc = True + + diff --git a/compiler/tests/config_scn4m_subm_back_end.py b/compiler/tests/config_scn4m_subm_back_end.py new file mode 100644 index 00000000..fa6b3406 --- /dev/null +++ b/compiler/tests/config_scn4m_subm_back_end.py @@ -0,0 +1,22 @@ +# See LICENSE for licensing information. +# +#Copyright (c) 2019 Regents of the University of California and The Board +#of Regents for the Oklahoma Agricultural and Mechanical College +#(acting for and on behalf of Oklahoma State University) +#All rights reserved. +# +word_size = 1 +num_words = 16 + +tech_name = "scn4m_subm" +process_corners = ["TT"] +supply_voltages = [5.0] +temperatures = [25] + +route_supplies = True +check_lvsdrc = True +inline_lvsdrc = True + +drc_name = "magic" +lvs_name = "netgen" +pex_name = "magic" From 534c6b36dfd08f7b6909ead72b7abf64bd4994d1 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Mon, 29 Apr 2019 10:20:27 -0700 Subject: [PATCH 33/37] Use correct back end config file. --- compiler/tests/30_openram_back_end_test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/tests/30_openram_back_end_test.py b/compiler/tests/30_openram_back_end_test.py index ca0b49d1..9988d68b 100755 --- a/compiler/tests/30_openram_back_end_test.py +++ b/compiler/tests/30_openram_back_end_test.py @@ -26,7 +26,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_{1}_back_end".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 back-end openram.py with 2-bit, 16 word SRAM.") out_file = "testsram" @@ -54,7 +54,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_{1}.py".format(OPENRAM_HOME + "/tests/",OPTS.tech_name) + config_name = "{0}config_{1}_back_end.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, From 3d98f09019c02f72684a839e2a567c495ee56ef8 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Mon, 29 Apr 2019 10:26:39 -0700 Subject: [PATCH 34/37] Add coverage excludes --- .coveragerc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.coveragerc b/.coveragerc index 0df8ae34..df762ed7 100644 --- a/.coveragerc +++ b/.coveragerc @@ -8,6 +8,8 @@ omit = */tests/* # ignore the debug utilities debug.py + # ignore the no DRC/LVS tool options + none.py [paths] source = ../.. @@ -21,6 +23,8 @@ source = exclude_lines = pragma: no cover def __repr__ + def __str__ + class gdsStreamer except Exception raise AssertionError raise NotImplementedError From 8b1cd57867f896ec7ec822e76a99766af1b00714 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Mon, 29 Apr 2019 14:07:46 -0700 Subject: [PATCH 35/37] Change contact display wqfrom black X to green solid. --- technology/freepdk45/tf/display.drf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/technology/freepdk45/tf/display.drf b/technology/freepdk45/tf/display.drf index 7923ae62..86c87a30 100644 --- a/technology/freepdk45/tf/display.drf +++ b/technology/freepdk45/tf/display.drf @@ -1097,7 +1097,7 @@ drDefinePacket( ( display metal1Pin X solid blue blue ) ( display metal1Lbl blank solid blue blue ) ( display metal1Bnd blank solid blue blue ) - ( display contact X solid black lime ) + ( display contact solid solid green green ) ( display contactNe blank solid brown brown ) ( display contactPin X solid black black ) ( display contactLbl blank solid black black ) From e071e5309063cc9c2c9b22244bd8cb57ff5b307d Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Tue, 30 Apr 2019 10:13:13 -0700 Subject: [PATCH 36/37] Add comments on gds units in tech files. --- technology/freepdk45/tech/tech.py | 11 ++++++++++- technology/scn4m_subm/tech/tech.py | 9 +++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/technology/freepdk45/tech/tech.py b/technology/freepdk45/tech/tech.py index 9fc64b36..f71aa340 100644 --- a/technology/freepdk45/tech/tech.py +++ b/technology/freepdk45/tech/tech.py @@ -14,7 +14,16 @@ File containing the process technology parameters for FreePDK 45nm. #GDS file info GDS = {} -# gds units +# gds units +# From http://www.cnf.cornell.edu/cnf_spie9.html: "The first +#is the size of a database unit in user units. The second is the size +#of a database unit in meters. For example, if your library was +#created with the default units (user unit = 1 m and 1000 database +#units per user unit), then the first number would be 0.001 and the +#second number would be 10-9. Typically, the first number is less than +#1, since you use more than 1 database unit per user unit. To +#calculate the size of a user unit in meters, divide the second number +#by the first." GDS["unit"] = (0.0005,1e-9) # default label zoom GDS["zoom"] = 0.05 diff --git a/technology/scn4m_subm/tech/tech.py b/technology/scn4m_subm/tech/tech.py index 61de6cb9..edbd3449 100644 --- a/technology/scn4m_subm/tech/tech.py +++ b/technology/scn4m_subm/tech/tech.py @@ -15,6 +15,15 @@ File containing the process technology parameters for SCMOS 3me, subm, 180nm. #GDS file info GDS={} # gds units +# From http://www.cnf.cornell.edu/cnf_spie9.html: "The first +#is the size of a database unit in user units. The second is the size +#of a database unit in meters. For example, if your library was +#created with the default units (user unit = 1 m and 1000 database +#units per user unit), then the first number would be 0.001 and the +#second number would be 10-9. Typically, the first number is less than +#1, since you use more than 1 database unit per user unit. To +#calculate the size of a user unit in meters, divide the second number +#by the first." GDS["unit"]=(0.001,1e-6) # default label zoom GDS["zoom"] = 0.5 From 0f03553689a41b9250991e19ff60be25e2494029 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Mon, 6 May 2019 06:50:15 -0700 Subject: [PATCH 37/37] Update copyright to correct years. --- compiler/base/contact.py | 2 +- compiler/base/design.py | 2 +- compiler/base/geometry.py | 2 +- compiler/base/hierarchy_design.py | 2 +- compiler/base/hierarchy_layout.py | 2 +- compiler/base/hierarchy_spice.py | 2 +- compiler/base/lef.py | 2 +- compiler/base/pin_layout.py | 2 +- compiler/base/route.py | 2 +- compiler/base/utils.py | 2 +- compiler/base/vector.py | 2 +- compiler/base/verilog.py | 2 +- compiler/base/wire.py | 2 +- compiler/base/wire_path.py | 2 +- compiler/bitcells/bitcell.py | 2 +- compiler/bitcells/bitcell_1rw_1r.py | 2 +- compiler/bitcells/bitcell_1w_1r.py | 2 +- compiler/bitcells/pbitcell.py | 2 +- compiler/bitcells/replica_bitcell.py | 2 +- compiler/bitcells/replica_bitcell_1rw_1r.py | 2 +- compiler/bitcells/replica_bitcell_1w_1r.py | 2 +- compiler/bitcells/replica_pbitcell.py | 2 +- compiler/characterizer/__init__.py | 2 +- compiler/characterizer/bitline_delay.py | 2 +- compiler/characterizer/charutils.py | 2 +- compiler/characterizer/delay.py | 2 +- compiler/characterizer/functional.py | 2 +- compiler/characterizer/lib.py | 2 +- compiler/characterizer/logical_effort.py | 2 +- compiler/characterizer/measurements.py | 2 +- compiler/characterizer/model_check.py | 2 +- compiler/characterizer/setup_hold.py | 2 +- compiler/characterizer/simulation.py | 2 +- compiler/characterizer/stimuli.py | 2 +- compiler/characterizer/trim_spice.py | 2 +- compiler/characterizer/worst_case.py | 2 +- compiler/datasheet/add_db.py | 2 +- compiler/datasheet/datasheet.py | 2 +- compiler/datasheet/datasheet_gen.py | 2 +- compiler/datasheet/table_gen.py | 2 +- compiler/debug.py | 2 +- compiler/drc/design_rules.py | 2 +- compiler/drc/drc_lut.py | 2 +- compiler/drc/drc_value.py | 2 +- compiler/gen_stimulus.py | 2 +- compiler/globals.py | 2 +- compiler/modules/bank.py | 2 +- compiler/modules/bank_select.py | 2 +- compiler/modules/bitcell_array.py | 2 +- compiler/modules/control_logic.py | 2 +- compiler/modules/delay_chain.py | 2 +- compiler/modules/dff.py | 2 +- compiler/modules/dff_array.py | 2 +- compiler/modules/dff_buf.py | 2 +- compiler/modules/dff_buf_array.py | 2 +- compiler/modules/dff_inv.py | 2 +- compiler/modules/dff_inv_array.py | 2 +- compiler/modules/hierarchical_decoder.py | 2 +- compiler/modules/hierarchical_predecode.py | 2 +- compiler/modules/hierarchical_predecode2x4.py | 2 +- compiler/modules/hierarchical_predecode3x8.py | 2 +- compiler/modules/multibank.py | 2 +- compiler/modules/precharge_array.py | 2 +- compiler/modules/replica_bitline.py | 2 +- compiler/modules/sense_amp.py | 2 +- compiler/modules/sense_amp_array.py | 2 +- compiler/modules/single_level_column_mux_array.py | 2 +- compiler/modules/tri_gate.py | 2 +- compiler/modules/tri_gate_array.py | 2 +- compiler/modules/wordline_driver.py | 2 +- compiler/modules/write_driver.py | 2 +- compiler/modules/write_driver_array.py | 2 +- compiler/openram.py | 2 +- compiler/options.py | 2 +- compiler/pgates/pand2.py | 2 +- compiler/pgates/pbuf.py | 2 +- compiler/pgates/pdriver.py | 2 +- compiler/pgates/pgate.py | 2 +- compiler/pgates/pinv.py | 2 +- compiler/pgates/pinvbuf.py | 2 +- compiler/pgates/pnand2.py | 2 +- compiler/pgates/pnand3.py | 2 +- compiler/pgates/pnor2.py | 2 +- compiler/pgates/precharge.py | 2 +- compiler/pgates/ptristate_inv.py | 2 +- compiler/pgates/ptx.py | 2 +- compiler/pgates/single_level_column_mux.py | 2 +- compiler/router/direction.py | 2 +- compiler/router/grid.py | 2 +- compiler/router/grid_cell.py | 2 +- compiler/router/grid_path.py | 2 +- compiler/router/grid_utils.py | 2 +- compiler/router/pin_group.py | 2 +- compiler/router/router.py | 2 +- compiler/router/router_tech.py | 2 +- compiler/router/signal_grid.py | 2 +- compiler/router/signal_router.py | 2 +- compiler/router/supply_grid.py | 2 +- compiler/router/supply_router.py | 2 +- compiler/router/tests/01_no_blockages_test.py | 2 +- compiler/router/tests/02_blockages_test.py | 2 +- compiler/router/tests/03_same_layer_pins_test.py | 2 +- compiler/router/tests/04_diff_layer_pins_test.py | 2 +- compiler/router/tests/05_two_nets_test.py | 2 +- compiler/router/tests/06_pin_location_test.py | 2 +- compiler/router/tests/07_big_test.py | 2 +- compiler/router/tests/08_expand_region_test.py | 2 +- compiler/router/tests/10_supply_grid_test.py | 2 +- compiler/router/tests/config_freepdk45.py | 2 +- compiler/router/tests/config_scn4m_subm.py | 2 +- compiler/router/tests/gds_cell.py | 2 +- compiler/router/tests/regress.py | 2 +- compiler/router/tests/testutils.py | 2 +- compiler/router/vector3d.py | 2 +- compiler/sram.py | 2 +- compiler/sram_1bank.py | 2 +- compiler/sram_2bank.py | 2 +- compiler/sram_base.py | 2 +- compiler/sram_config.py | 2 +- compiler/sram_factory.py | 2 +- compiler/tests/00_code_format_check_test.py | 2 +- 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_model_delay_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/30_openram_back_end_test.py | 2 +- compiler/tests/config_freepdk45.py | 2 +- compiler/tests/config_freepdk45_back_end.py | 2 +- compiler/tests/config_freepdk45_front_end.py | 2 +- compiler/tests/config_scn4m_subm.py | 2 +- compiler/tests/config_scn4m_subm_back_end.py | 2 +- compiler/tests/config_scn4m_subm_front_end.py | 2 +- compiler/tests/regress.py | 2 +- compiler/tests/testutils.py | 2 +- compiler/verify/__init__.py | 2 +- compiler/verify/assura.py | 2 +- compiler/verify/calibre.py | 2 +- compiler/verify/magic.py | 2 +- compiler/verify/none.py | 2 +- compiler/verify/run_script.py | 2 +- compiler/view_profile.py | 2 +- technology/freepdk45/__init__.py | 2 +- technology/freepdk45/tech/__init__.py | 2 +- technology/freepdk45/tech/tech.py | 2 +- technology/scn4m_subm/__init__.py | 2 +- technology/scn4m_subm/tech/__init__.py | 2 +- technology/scn4m_subm/tech/tech.py | 2 +- 228 files changed, 228 insertions(+), 228 deletions(-) diff --git a/compiler/base/contact.py b/compiler/base/contact.py index fc5e630e..de1afec6 100644 --- a/compiler/base/contact.py +++ b/compiler/base/contact.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/base/design.py b/compiler/base/design.py index 5ad29ff3..5a87dd79 100644 --- a/compiler/base/design.py +++ b/compiler/base/design.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/base/geometry.py b/compiler/base/geometry.py index 0b0455c8..144043a2 100644 --- a/compiler/base/geometry.py +++ b/compiler/base/geometry.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/base/hierarchy_design.py b/compiler/base/hierarchy_design.py index 84f86378..dfc275ee 100644 --- a/compiler/base/hierarchy_design.py +++ b/compiler/base/hierarchy_design.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/base/hierarchy_layout.py b/compiler/base/hierarchy_layout.py index 4a3d0790..e8c1b0b9 100644 --- a/compiler/base/hierarchy_layout.py +++ b/compiler/base/hierarchy_layout.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/base/hierarchy_spice.py b/compiler/base/hierarchy_spice.py index 99249fcd..bfa4606c 100644 --- a/compiler/base/hierarchy_spice.py +++ b/compiler/base/hierarchy_spice.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/base/lef.py b/compiler/base/lef.py index f0bc3a36..5932bb67 100644 --- a/compiler/base/lef.py +++ b/compiler/base/lef.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/base/pin_layout.py b/compiler/base/pin_layout.py index 35f4b156..4c3528fe 100644 --- a/compiler/base/pin_layout.py +++ b/compiler/base/pin_layout.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/base/route.py b/compiler/base/route.py index e8918bdd..c0bc1724 100644 --- a/compiler/base/route.py +++ b/compiler/base/route.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/base/utils.py b/compiler/base/utils.py index 6dd82b6f..6642f095 100644 --- a/compiler/base/utils.py +++ b/compiler/base/utils.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/base/vector.py b/compiler/base/vector.py index bbc12290..a845b47c 100644 --- a/compiler/base/vector.py +++ b/compiler/base/vector.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/base/verilog.py b/compiler/base/verilog.py index 951236dd..8596e5bc 100644 --- a/compiler/base/verilog.py +++ b/compiler/base/verilog.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/base/wire.py b/compiler/base/wire.py index 9aa1bf00..2fe36026 100644 --- a/compiler/base/wire.py +++ b/compiler/base/wire.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/base/wire_path.py b/compiler/base/wire_path.py index 4e37d450..71f6af27 100644 --- a/compiler/base/wire_path.py +++ b/compiler/base/wire_path.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/bitcells/bitcell.py b/compiler/bitcells/bitcell.py index c6cf7796..7e2bd2c6 100644 --- a/compiler/bitcells/bitcell.py +++ b/compiler/bitcells/bitcell.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/bitcells/bitcell_1rw_1r.py b/compiler/bitcells/bitcell_1rw_1r.py index 82a5c1ae..2dd9c9fa 100644 --- a/compiler/bitcells/bitcell_1rw_1r.py +++ b/compiler/bitcells/bitcell_1rw_1r.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/bitcells/bitcell_1w_1r.py b/compiler/bitcells/bitcell_1w_1r.py index a6e2f04d..9e920327 100644 --- a/compiler/bitcells/bitcell_1w_1r.py +++ b/compiler/bitcells/bitcell_1w_1r.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/bitcells/pbitcell.py b/compiler/bitcells/pbitcell.py index aa03e7cc..e045b763 100644 --- a/compiler/bitcells/pbitcell.py +++ b/compiler/bitcells/pbitcell.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/bitcells/replica_bitcell.py b/compiler/bitcells/replica_bitcell.py index ea7cb2ac..0a0e4fbf 100644 --- a/compiler/bitcells/replica_bitcell.py +++ b/compiler/bitcells/replica_bitcell.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/bitcells/replica_bitcell_1rw_1r.py b/compiler/bitcells/replica_bitcell_1rw_1r.py index d076b70e..2ada1381 100644 --- a/compiler/bitcells/replica_bitcell_1rw_1r.py +++ b/compiler/bitcells/replica_bitcell_1rw_1r.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/bitcells/replica_bitcell_1w_1r.py b/compiler/bitcells/replica_bitcell_1w_1r.py index 31208b79..c079399a 100644 --- a/compiler/bitcells/replica_bitcell_1w_1r.py +++ b/compiler/bitcells/replica_bitcell_1w_1r.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/bitcells/replica_pbitcell.py b/compiler/bitcells/replica_pbitcell.py index 02a6597a..30898d82 100644 --- a/compiler/bitcells/replica_pbitcell.py +++ b/compiler/bitcells/replica_pbitcell.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/characterizer/__init__.py b/compiler/characterizer/__init__.py index 4a385f4d..4c3cd910 100644 --- a/compiler/characterizer/__init__.py +++ b/compiler/characterizer/__init__.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/characterizer/bitline_delay.py b/compiler/characterizer/bitline_delay.py index 8bdde362..90197619 100644 --- a/compiler/characterizer/bitline_delay.py +++ b/compiler/characterizer/bitline_delay.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/characterizer/charutils.py b/compiler/characterizer/charutils.py index bedd5559..7081ff85 100644 --- a/compiler/characterizer/charutils.py +++ b/compiler/characterizer/charutils.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/characterizer/delay.py b/compiler/characterizer/delay.py index 47be684f..05c8862f 100644 --- a/compiler/characterizer/delay.py +++ b/compiler/characterizer/delay.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/characterizer/functional.py b/compiler/characterizer/functional.py index d6a6f328..c12b6669 100644 --- a/compiler/characterizer/functional.py +++ b/compiler/characterizer/functional.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/characterizer/lib.py b/compiler/characterizer/lib.py index 678d65cc..4f709999 100644 --- a/compiler/characterizer/lib.py +++ b/compiler/characterizer/lib.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/characterizer/logical_effort.py b/compiler/characterizer/logical_effort.py index 9a532bc8..13005695 100644 --- a/compiler/characterizer/logical_effort.py +++ b/compiler/characterizer/logical_effort.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/characterizer/measurements.py b/compiler/characterizer/measurements.py index 32c01965..01c6fa51 100644 --- a/compiler/characterizer/measurements.py +++ b/compiler/characterizer/measurements.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/characterizer/model_check.py b/compiler/characterizer/model_check.py index 2ae5c4fd..c7834602 100644 --- a/compiler/characterizer/model_check.py +++ b/compiler/characterizer/model_check.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/characterizer/setup_hold.py b/compiler/characterizer/setup_hold.py index ba1a98bc..c85a5ad0 100644 --- a/compiler/characterizer/setup_hold.py +++ b/compiler/characterizer/setup_hold.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/characterizer/simulation.py b/compiler/characterizer/simulation.py index 54f906f3..e6204490 100644 --- a/compiler/characterizer/simulation.py +++ b/compiler/characterizer/simulation.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/characterizer/stimuli.py b/compiler/characterizer/stimuli.py index e850b108..ddd1df7e 100644 --- a/compiler/characterizer/stimuli.py +++ b/compiler/characterizer/stimuli.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/characterizer/trim_spice.py b/compiler/characterizer/trim_spice.py index 7f5a7d3d..b8878db3 100644 --- a/compiler/characterizer/trim_spice.py +++ b/compiler/characterizer/trim_spice.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/characterizer/worst_case.py b/compiler/characterizer/worst_case.py index b22d1218..612d6f9f 100644 --- a/compiler/characterizer/worst_case.py +++ b/compiler/characterizer/worst_case.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/datasheet/add_db.py b/compiler/datasheet/add_db.py index 194334dc..a5984969 100644 --- a/compiler/datasheet/add_db.py +++ b/compiler/datasheet/add_db.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/datasheet/datasheet.py b/compiler/datasheet/datasheet.py index 47c242e3..0874cd01 100644 --- a/compiler/datasheet/datasheet.py +++ b/compiler/datasheet/datasheet.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py index 40dac7f3..c7eecd8d 100644 --- a/compiler/datasheet/datasheet_gen.py +++ b/compiler/datasheet/datasheet_gen.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/datasheet/table_gen.py b/compiler/datasheet/table_gen.py index a97536e7..01479d7f 100644 --- a/compiler/datasheet/table_gen.py +++ b/compiler/datasheet/table_gen.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/debug.py b/compiler/debug.py index d360b47e..4fa8b487 100644 --- a/compiler/debug.py +++ b/compiler/debug.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/drc/design_rules.py b/compiler/drc/design_rules.py index 08490a75..09729144 100644 --- a/compiler/drc/design_rules.py +++ b/compiler/drc/design_rules.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/drc/drc_lut.py b/compiler/drc/drc_lut.py index 70c7c457..0a214231 100644 --- a/compiler/drc/drc_lut.py +++ b/compiler/drc/drc_lut.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/drc/drc_value.py b/compiler/drc/drc_value.py index 25c30354..4c85657f 100644 --- a/compiler/drc/drc_value.py +++ b/compiler/drc/drc_value.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/gen_stimulus.py b/compiler/gen_stimulus.py index b66fa033..3b24cff7 100755 --- a/compiler/gen_stimulus.py +++ b/compiler/gen_stimulus.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/globals.py b/compiler/globals.py index 3f2fa777..2fe0ec1b 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/bank.py b/compiler/modules/bank.py index fc3ab94f..a854c40b 100644 --- a/compiler/modules/bank.py +++ b/compiler/modules/bank.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/bank_select.py b/compiler/modules/bank_select.py index fa47311a..ac866456 100644 --- a/compiler/modules/bank_select.py +++ b/compiler/modules/bank_select.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/bitcell_array.py b/compiler/modules/bitcell_array.py index 36688940..f2ab77ac 100644 --- a/compiler/modules/bitcell_array.py +++ b/compiler/modules/bitcell_array.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index 29b084b7..0bf309a6 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/delay_chain.py b/compiler/modules/delay_chain.py index 664f00f3..188efffa 100644 --- a/compiler/modules/delay_chain.py +++ b/compiler/modules/delay_chain.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/dff.py b/compiler/modules/dff.py index ae31028d..e1139e09 100644 --- a/compiler/modules/dff.py +++ b/compiler/modules/dff.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/dff_array.py b/compiler/modules/dff_array.py index 0ca6098d..8b03fe19 100644 --- a/compiler/modules/dff_array.py +++ b/compiler/modules/dff_array.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/dff_buf.py b/compiler/modules/dff_buf.py index 2af4d9eb..42e86bc0 100644 --- a/compiler/modules/dff_buf.py +++ b/compiler/modules/dff_buf.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/dff_buf_array.py b/compiler/modules/dff_buf_array.py index 84157431..dfd38760 100644 --- a/compiler/modules/dff_buf_array.py +++ b/compiler/modules/dff_buf_array.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/dff_inv.py b/compiler/modules/dff_inv.py index 98904d5e..2f831570 100644 --- a/compiler/modules/dff_inv.py +++ b/compiler/modules/dff_inv.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/dff_inv_array.py b/compiler/modules/dff_inv_array.py index bb47050b..3ae50a08 100644 --- a/compiler/modules/dff_inv_array.py +++ b/compiler/modules/dff_inv_array.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/hierarchical_decoder.py b/compiler/modules/hierarchical_decoder.py index 28edf6ce..1eac268d 100644 --- a/compiler/modules/hierarchical_decoder.py +++ b/compiler/modules/hierarchical_decoder.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/hierarchical_predecode.py b/compiler/modules/hierarchical_predecode.py index 88074492..0449280a 100644 --- a/compiler/modules/hierarchical_predecode.py +++ b/compiler/modules/hierarchical_predecode.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/hierarchical_predecode2x4.py b/compiler/modules/hierarchical_predecode2x4.py index 25a9dbcc..938196d3 100644 --- a/compiler/modules/hierarchical_predecode2x4.py +++ b/compiler/modules/hierarchical_predecode2x4.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/hierarchical_predecode3x8.py b/compiler/modules/hierarchical_predecode3x8.py index ec2c4618..77d9ce01 100644 --- a/compiler/modules/hierarchical_predecode3x8.py +++ b/compiler/modules/hierarchical_predecode3x8.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/multibank.py b/compiler/modules/multibank.py index 3b00092a..667c6380 100644 --- a/compiler/modules/multibank.py +++ b/compiler/modules/multibank.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/precharge_array.py b/compiler/modules/precharge_array.py index 207312dc..f88938c8 100644 --- a/compiler/modules/precharge_array.py +++ b/compiler/modules/precharge_array.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/replica_bitline.py b/compiler/modules/replica_bitline.py index 5ca793fe..acd1f5d0 100644 --- a/compiler/modules/replica_bitline.py +++ b/compiler/modules/replica_bitline.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/sense_amp.py b/compiler/modules/sense_amp.py index c3704666..8267f42f 100644 --- a/compiler/modules/sense_amp.py +++ b/compiler/modules/sense_amp.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/sense_amp_array.py b/compiler/modules/sense_amp_array.py index 5d1d551c..4dfa03ad 100644 --- a/compiler/modules/sense_amp_array.py +++ b/compiler/modules/sense_amp_array.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/single_level_column_mux_array.py b/compiler/modules/single_level_column_mux_array.py index 91713245..435f0cbe 100644 --- a/compiler/modules/single_level_column_mux_array.py +++ b/compiler/modules/single_level_column_mux_array.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/tri_gate.py b/compiler/modules/tri_gate.py index d902cdd1..e5951a53 100644 --- a/compiler/modules/tri_gate.py +++ b/compiler/modules/tri_gate.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/tri_gate_array.py b/compiler/modules/tri_gate_array.py index 8409d650..e3eb42cb 100644 --- a/compiler/modules/tri_gate_array.py +++ b/compiler/modules/tri_gate_array.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/wordline_driver.py b/compiler/modules/wordline_driver.py index eda7a4a8..dbef0417 100644 --- a/compiler/modules/wordline_driver.py +++ b/compiler/modules/wordline_driver.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/write_driver.py b/compiler/modules/write_driver.py index f61dd6c3..bbe676c0 100644 --- a/compiler/modules/write_driver.py +++ b/compiler/modules/write_driver.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/modules/write_driver_array.py b/compiler/modules/write_driver_array.py index 28e56cba..27da84b0 100644 --- a/compiler/modules/write_driver_array.py +++ b/compiler/modules/write_driver_array.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/openram.py b/compiler/openram.py index c5a576fe..daef3b9c 100755 --- a/compiler/openram.py +++ b/compiler/openram.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/options.py b/compiler/options.py index ac22ecee..b3ac813a 100644 --- a/compiler/options.py +++ b/compiler/options.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/pgates/pand2.py b/compiler/pgates/pand2.py index cc492de4..add59565 100644 --- a/compiler/pgates/pand2.py +++ b/compiler/pgates/pand2.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/pgates/pbuf.py b/compiler/pgates/pbuf.py index 8880f7a0..f34a1827 100644 --- a/compiler/pgates/pbuf.py +++ b/compiler/pgates/pbuf.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/pgates/pdriver.py b/compiler/pgates/pdriver.py index ebe5b706..39428515 100644 --- a/compiler/pgates/pdriver.py +++ b/compiler/pgates/pdriver.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/pgates/pgate.py b/compiler/pgates/pgate.py index 5c4ca888..57b73a21 100644 --- a/compiler/pgates/pgate.py +++ b/compiler/pgates/pgate.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/pgates/pinv.py b/compiler/pgates/pinv.py index 70640fda..8f05c2b1 100644 --- a/compiler/pgates/pinv.py +++ b/compiler/pgates/pinv.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/pgates/pinvbuf.py b/compiler/pgates/pinvbuf.py index 856a14bb..75c64b08 100644 --- a/compiler/pgates/pinvbuf.py +++ b/compiler/pgates/pinvbuf.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/pgates/pnand2.py b/compiler/pgates/pnand2.py index d9d8d0ed..865e1c60 100644 --- a/compiler/pgates/pnand2.py +++ b/compiler/pgates/pnand2.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/pgates/pnand3.py b/compiler/pgates/pnand3.py index 6967bc4b..6f9d138d 100644 --- a/compiler/pgates/pnand3.py +++ b/compiler/pgates/pnand3.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/pgates/pnor2.py b/compiler/pgates/pnor2.py index 2a1c878e..3cc01f1a 100644 --- a/compiler/pgates/pnor2.py +++ b/compiler/pgates/pnor2.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/pgates/precharge.py b/compiler/pgates/precharge.py index a86e5deb..61785d9d 100644 --- a/compiler/pgates/precharge.py +++ b/compiler/pgates/precharge.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/pgates/ptristate_inv.py b/compiler/pgates/ptristate_inv.py index 8e59e7f4..531ce160 100644 --- a/compiler/pgates/ptristate_inv.py +++ b/compiler/pgates/ptristate_inv.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/pgates/ptx.py b/compiler/pgates/ptx.py index f1cb8729..eade6682 100644 --- a/compiler/pgates/ptx.py +++ b/compiler/pgates/ptx.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/pgates/single_level_column_mux.py b/compiler/pgates/single_level_column_mux.py index 572ed9dc..caf01862 100644 --- a/compiler/pgates/single_level_column_mux.py +++ b/compiler/pgates/single_level_column_mux.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/direction.py b/compiler/router/direction.py index fd79d528..7508823d 100644 --- a/compiler/router/direction.py +++ b/compiler/router/direction.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/grid.py b/compiler/router/grid.py index a59ac45b..4533b8e7 100644 --- a/compiler/router/grid.py +++ b/compiler/router/grid.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/grid_cell.py b/compiler/router/grid_cell.py index a9176355..d2816c28 100644 --- a/compiler/router/grid_cell.py +++ b/compiler/router/grid_cell.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/grid_path.py b/compiler/router/grid_path.py index e9f39b91..f914e477 100644 --- a/compiler/router/grid_path.py +++ b/compiler/router/grid_path.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/grid_utils.py b/compiler/router/grid_utils.py index 39d13bde..6524a9d5 100644 --- a/compiler/router/grid_utils.py +++ b/compiler/router/grid_utils.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/pin_group.py b/compiler/router/pin_group.py index 940d20fc..bef538e3 100644 --- a/compiler/router/pin_group.py +++ b/compiler/router/pin_group.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/router.py b/compiler/router/router.py index 6ae7941d..f4e570a7 100644 --- a/compiler/router/router.py +++ b/compiler/router/router.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/router_tech.py b/compiler/router/router_tech.py index 246a0985..b82d4ac1 100644 --- a/compiler/router/router_tech.py +++ b/compiler/router/router_tech.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/signal_grid.py b/compiler/router/signal_grid.py index 1d1ab862..38d65053 100644 --- a/compiler/router/signal_grid.py +++ b/compiler/router/signal_grid.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/signal_router.py b/compiler/router/signal_router.py index a7174905..da94c4f2 100644 --- a/compiler/router/signal_router.py +++ b/compiler/router/signal_router.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/supply_grid.py b/compiler/router/supply_grid.py index 1cd9a5a3..839fc910 100644 --- a/compiler/router/supply_grid.py +++ b/compiler/router/supply_grid.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/supply_router.py b/compiler/router/supply_router.py index f269b136..060451de 100644 --- a/compiler/router/supply_router.py +++ b/compiler/router/supply_router.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/tests/01_no_blockages_test.py b/compiler/router/tests/01_no_blockages_test.py index 14c1de54..4529864a 100644 --- a/compiler/router/tests/01_no_blockages_test.py +++ b/compiler/router/tests/01_no_blockages_test.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/tests/02_blockages_test.py b/compiler/router/tests/02_blockages_test.py index e30bd6a4..3abe2e7e 100644 --- a/compiler/router/tests/02_blockages_test.py +++ b/compiler/router/tests/02_blockages_test.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/tests/03_same_layer_pins_test.py b/compiler/router/tests/03_same_layer_pins_test.py index d4ae8b49..af3d1ee8 100644 --- a/compiler/router/tests/03_same_layer_pins_test.py +++ b/compiler/router/tests/03_same_layer_pins_test.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/tests/04_diff_layer_pins_test.py b/compiler/router/tests/04_diff_layer_pins_test.py index 35be8a6b..b70cba36 100644 --- a/compiler/router/tests/04_diff_layer_pins_test.py +++ b/compiler/router/tests/04_diff_layer_pins_test.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/tests/05_two_nets_test.py b/compiler/router/tests/05_two_nets_test.py index 9ada0b2d..10c157d7 100644 --- a/compiler/router/tests/05_two_nets_test.py +++ b/compiler/router/tests/05_two_nets_test.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/tests/06_pin_location_test.py b/compiler/router/tests/06_pin_location_test.py index ffb5b04f..7f75e541 100644 --- a/compiler/router/tests/06_pin_location_test.py +++ b/compiler/router/tests/06_pin_location_test.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/tests/07_big_test.py b/compiler/router/tests/07_big_test.py index 80e62104..6692cee0 100644 --- a/compiler/router/tests/07_big_test.py +++ b/compiler/router/tests/07_big_test.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/tests/08_expand_region_test.py b/compiler/router/tests/08_expand_region_test.py index f452583c..46af863d 100644 --- a/compiler/router/tests/08_expand_region_test.py +++ b/compiler/router/tests/08_expand_region_test.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/tests/10_supply_grid_test.py b/compiler/router/tests/10_supply_grid_test.py index dc929ad7..4910797a 100644 --- a/compiler/router/tests/10_supply_grid_test.py +++ b/compiler/router/tests/10_supply_grid_test.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/tests/config_freepdk45.py b/compiler/router/tests/config_freepdk45.py index fe370ec9..a6eb3bcc 100644 --- a/compiler/router/tests/config_freepdk45.py +++ b/compiler/router/tests/config_freepdk45.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/tests/config_scn4m_subm.py b/compiler/router/tests/config_scn4m_subm.py index 1a9c8ee9..fdf7a2c3 100644 --- a/compiler/router/tests/config_scn4m_subm.py +++ b/compiler/router/tests/config_scn4m_subm.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/tests/gds_cell.py b/compiler/router/tests/gds_cell.py index 6903304a..60c0f48e 100644 --- a/compiler/router/tests/gds_cell.py +++ b/compiler/router/tests/gds_cell.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/tests/regress.py b/compiler/router/tests/regress.py index 2963746b..8f6c8938 100644 --- a/compiler/router/tests/regress.py +++ b/compiler/router/tests/regress.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/tests/testutils.py b/compiler/router/tests/testutils.py index 381187b3..447cace6 100644 --- a/compiler/router/tests/testutils.py +++ b/compiler/router/tests/testutils.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/router/vector3d.py b/compiler/router/vector3d.py index 1507b891..cc830faf 100644 --- a/compiler/router/vector3d.py +++ b/compiler/router/vector3d.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/sram.py b/compiler/sram.py index a7dee88f..d080acbc 100644 --- a/compiler/sram.py +++ b/compiler/sram.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/sram_1bank.py b/compiler/sram_1bank.py index b6903739..8edc317e 100644 --- a/compiler/sram_1bank.py +++ b/compiler/sram_1bank.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/sram_2bank.py b/compiler/sram_2bank.py index 01919353..acf0e1a2 100644 --- a/compiler/sram_2bank.py +++ b/compiler/sram_2bank.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/sram_base.py b/compiler/sram_base.py index 5dbca380..192bc669 100644 --- a/compiler/sram_base.py +++ b/compiler/sram_base.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/sram_config.py b/compiler/sram_config.py index 78f7c7ea..671bcf62 100644 --- a/compiler/sram_config.py +++ b/compiler/sram_config.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/sram_factory.py b/compiler/sram_factory.py index 10134bf1..325261a0 100644 --- a/compiler/sram_factory.py +++ b/compiler/sram_factory.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/00_code_format_check_test.py b/compiler/tests/00_code_format_check_test.py index c2536d8f..373b1516 100755 --- a/compiler/tests/00_code_format_check_test.py +++ b/compiler/tests/00_code_format_check_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/01_library_drc_test.py b/compiler/tests/01_library_drc_test.py index ec3f9097..c2052e4e 100755 --- a/compiler/tests/01_library_drc_test.py +++ b/compiler/tests/01_library_drc_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/02_library_lvs_test.py b/compiler/tests/02_library_lvs_test.py index 7cefb73a..6775f41f 100755 --- a/compiler/tests/02_library_lvs_test.py +++ b/compiler/tests/02_library_lvs_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/03_contact_test.py b/compiler/tests/03_contact_test.py index 3e86fe85..2aa79df6 100755 --- a/compiler/tests/03_contact_test.py +++ b/compiler/tests/03_contact_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/03_path_test.py b/compiler/tests/03_path_test.py index b225f92f..4748e18d 100755 --- a/compiler/tests/03_path_test.py +++ b/compiler/tests/03_path_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/03_ptx_1finger_nmos_test.py b/compiler/tests/03_ptx_1finger_nmos_test.py index a824293a..cc6d6ed6 100755 --- a/compiler/tests/03_ptx_1finger_nmos_test.py +++ b/compiler/tests/03_ptx_1finger_nmos_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/03_ptx_1finger_pmos_test.py b/compiler/tests/03_ptx_1finger_pmos_test.py index 2fb3a582..cd2128be 100755 --- a/compiler/tests/03_ptx_1finger_pmos_test.py +++ b/compiler/tests/03_ptx_1finger_pmos_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/03_ptx_3finger_nmos_test.py b/compiler/tests/03_ptx_3finger_nmos_test.py index 03b18eaf..8231f090 100755 --- a/compiler/tests/03_ptx_3finger_nmos_test.py +++ b/compiler/tests/03_ptx_3finger_nmos_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/03_ptx_3finger_pmos_test.py b/compiler/tests/03_ptx_3finger_pmos_test.py index 76aaa584..16e3730b 100755 --- a/compiler/tests/03_ptx_3finger_pmos_test.py +++ b/compiler/tests/03_ptx_3finger_pmos_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/03_ptx_4finger_nmos_test.py b/compiler/tests/03_ptx_4finger_nmos_test.py index bf15a4d0..c0a54d85 100755 --- a/compiler/tests/03_ptx_4finger_nmos_test.py +++ b/compiler/tests/03_ptx_4finger_nmos_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/03_ptx_4finger_pmos_test.py b/compiler/tests/03_ptx_4finger_pmos_test.py index 14147e9b..afb874af 100755 --- a/compiler/tests/03_ptx_4finger_pmos_test.py +++ b/compiler/tests/03_ptx_4finger_pmos_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/03_wire_test.py b/compiler/tests/03_wire_test.py index d6c895e3..3b3388e9 100755 --- a/compiler/tests/03_wire_test.py +++ b/compiler/tests/03_wire_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/04_pand2_test.py b/compiler/tests/04_pand2_test.py index 70239c56..af99f6ec 100755 --- a/compiler/tests/04_pand2_test.py +++ b/compiler/tests/04_pand2_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/04_pbitcell_test.py b/compiler/tests/04_pbitcell_test.py index 0d62f5a3..e8b7cb55 100755 --- a/compiler/tests/04_pbitcell_test.py +++ b/compiler/tests/04_pbitcell_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/04_pbuf_test.py b/compiler/tests/04_pbuf_test.py index fe894474..9eeaaeab 100755 --- a/compiler/tests/04_pbuf_test.py +++ b/compiler/tests/04_pbuf_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/04_pdriver_test.py b/compiler/tests/04_pdriver_test.py index 2978d59b..ecd697c9 100755 --- a/compiler/tests/04_pdriver_test.py +++ b/compiler/tests/04_pdriver_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/04_pinv_10x_test.py b/compiler/tests/04_pinv_10x_test.py index 5104b37f..0548cbf4 100755 --- a/compiler/tests/04_pinv_10x_test.py +++ b/compiler/tests/04_pinv_10x_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/04_pinv_1x_beta_test.py b/compiler/tests/04_pinv_1x_beta_test.py index 3caaceaa..1f8aae26 100755 --- a/compiler/tests/04_pinv_1x_beta_test.py +++ b/compiler/tests/04_pinv_1x_beta_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/04_pinv_1x_test.py b/compiler/tests/04_pinv_1x_test.py index efb558a6..fd70d8dc 100755 --- a/compiler/tests/04_pinv_1x_test.py +++ b/compiler/tests/04_pinv_1x_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/04_pinv_2x_test.py b/compiler/tests/04_pinv_2x_test.py index e81baa46..6b472f9e 100755 --- a/compiler/tests/04_pinv_2x_test.py +++ b/compiler/tests/04_pinv_2x_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/04_pinvbuf_test.py b/compiler/tests/04_pinvbuf_test.py index 78f42b51..ea407d0c 100755 --- a/compiler/tests/04_pinvbuf_test.py +++ b/compiler/tests/04_pinvbuf_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/04_pnand2_test.py b/compiler/tests/04_pnand2_test.py index 47ea8348..527c6204 100755 --- a/compiler/tests/04_pnand2_test.py +++ b/compiler/tests/04_pnand2_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/04_pnand3_test.py b/compiler/tests/04_pnand3_test.py index 5c2c6b56..6dba468a 100755 --- a/compiler/tests/04_pnand3_test.py +++ b/compiler/tests/04_pnand3_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/04_pnor2_test.py b/compiler/tests/04_pnor2_test.py index 43be4e69..8a66324d 100755 --- a/compiler/tests/04_pnor2_test.py +++ b/compiler/tests/04_pnor2_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/04_precharge_test.py b/compiler/tests/04_precharge_test.py index 8e6781ce..162f1091 100755 --- a/compiler/tests/04_precharge_test.py +++ b/compiler/tests/04_precharge_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/04_replica_pbitcell_test.py b/compiler/tests/04_replica_pbitcell_test.py index 58c2f4f6..1e028e40 100755 --- a/compiler/tests/04_replica_pbitcell_test.py +++ b/compiler/tests/04_replica_pbitcell_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/04_single_level_column_mux_test.py b/compiler/tests/04_single_level_column_mux_test.py index b1613a7a..151f2797 100755 --- a/compiler/tests/04_single_level_column_mux_test.py +++ b/compiler/tests/04_single_level_column_mux_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/05_bitcell_1rw_1r_array_test.py b/compiler/tests/05_bitcell_1rw_1r_array_test.py index 4b71ddf5..9df2c8c3 100755 --- a/compiler/tests/05_bitcell_1rw_1r_array_test.py +++ b/compiler/tests/05_bitcell_1rw_1r_array_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/05_bitcell_array_test.py b/compiler/tests/05_bitcell_array_test.py index ef704573..21943a5d 100755 --- a/compiler/tests/05_bitcell_array_test.py +++ b/compiler/tests/05_bitcell_array_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/05_pbitcell_array_test.py b/compiler/tests/05_pbitcell_array_test.py index 3a5a859d..45968266 100755 --- a/compiler/tests/05_pbitcell_array_test.py +++ b/compiler/tests/05_pbitcell_array_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/06_hierarchical_decoder_test.py b/compiler/tests/06_hierarchical_decoder_test.py index dbc2844c..bcc22ce8 100755 --- a/compiler/tests/06_hierarchical_decoder_test.py +++ b/compiler/tests/06_hierarchical_decoder_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/06_hierarchical_predecode2x4_test.py b/compiler/tests/06_hierarchical_predecode2x4_test.py index 7911ab58..e4687d5e 100755 --- a/compiler/tests/06_hierarchical_predecode2x4_test.py +++ b/compiler/tests/06_hierarchical_predecode2x4_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/06_hierarchical_predecode3x8_test.py b/compiler/tests/06_hierarchical_predecode3x8_test.py index bb65c387..12e87d06 100755 --- a/compiler/tests/06_hierarchical_predecode3x8_test.py +++ b/compiler/tests/06_hierarchical_predecode3x8_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. 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 39ff3365..8da5f252 100755 --- a/compiler/tests/07_single_level_column_mux_array_test.py +++ b/compiler/tests/07_single_level_column_mux_array_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/08_precharge_array_test.py b/compiler/tests/08_precharge_array_test.py index bf786625..86f308f4 100755 --- a/compiler/tests/08_precharge_array_test.py +++ b/compiler/tests/08_precharge_array_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/08_wordline_driver_test.py b/compiler/tests/08_wordline_driver_test.py index f110547e..585b85cd 100755 --- a/compiler/tests/08_wordline_driver_test.py +++ b/compiler/tests/08_wordline_driver_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/09_sense_amp_array_test.py b/compiler/tests/09_sense_amp_array_test.py index c4548079..12a20e8f 100755 --- a/compiler/tests/09_sense_amp_array_test.py +++ b/compiler/tests/09_sense_amp_array_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/10_write_driver_array_test.py b/compiler/tests/10_write_driver_array_test.py index ae4949ac..f5d0c23c 100755 --- a/compiler/tests/10_write_driver_array_test.py +++ b/compiler/tests/10_write_driver_array_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/11_dff_array_test.py b/compiler/tests/11_dff_array_test.py index 56fea9f5..fc48adce 100755 --- a/compiler/tests/11_dff_array_test.py +++ b/compiler/tests/11_dff_array_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/11_dff_buf_array_test.py b/compiler/tests/11_dff_buf_array_test.py index 94964534..7d614d1b 100755 --- a/compiler/tests/11_dff_buf_array_test.py +++ b/compiler/tests/11_dff_buf_array_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/11_dff_buf_test.py b/compiler/tests/11_dff_buf_test.py index 27fbf5c9..afb1f73b 100755 --- a/compiler/tests/11_dff_buf_test.py +++ b/compiler/tests/11_dff_buf_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/12_tri_gate_array_test.py b/compiler/tests/12_tri_gate_array_test.py index b2905ffd..203c5f94 100755 --- a/compiler/tests/12_tri_gate_array_test.py +++ b/compiler/tests/12_tri_gate_array_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/13_delay_chain_test.py b/compiler/tests/13_delay_chain_test.py index 51866573..498c1005 100755 --- a/compiler/tests/13_delay_chain_test.py +++ b/compiler/tests/13_delay_chain_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/14_replica_bitline_multiport_test.py b/compiler/tests/14_replica_bitline_multiport_test.py index 60ba5f00..947f9c52 100755 --- a/compiler/tests/14_replica_bitline_multiport_test.py +++ b/compiler/tests/14_replica_bitline_multiport_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/14_replica_bitline_test.py b/compiler/tests/14_replica_bitline_test.py index 7250bf92..b5830d63 100755 --- a/compiler/tests/14_replica_bitline_test.py +++ b/compiler/tests/14_replica_bitline_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/16_control_logic_test.py b/compiler/tests/16_control_logic_test.py index a1c962f3..ed8a0088 100755 --- a/compiler/tests/16_control_logic_test.py +++ b/compiler/tests/16_control_logic_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/19_bank_select_test.py b/compiler/tests/19_bank_select_test.py index b2873a93..5ea16052 100755 --- a/compiler/tests/19_bank_select_test.py +++ b/compiler/tests/19_bank_select_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/19_multi_bank_test.py b/compiler/tests/19_multi_bank_test.py index 3131ba4d..3139b4eb 100755 --- a/compiler/tests/19_multi_bank_test.py +++ b/compiler/tests/19_multi_bank_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/19_pmulti_bank_test.py b/compiler/tests/19_pmulti_bank_test.py index ddb088ea..f31e2608 100755 --- a/compiler/tests/19_pmulti_bank_test.py +++ b/compiler/tests/19_pmulti_bank_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/19_psingle_bank_test.py b/compiler/tests/19_psingle_bank_test.py index c49bd884..22c3da2f 100755 --- a/compiler/tests/19_psingle_bank_test.py +++ b/compiler/tests/19_psingle_bank_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/19_single_bank_1rw_1r_test.py b/compiler/tests/19_single_bank_1rw_1r_test.py index f1bdf98c..fb0e1c66 100755 --- a/compiler/tests/19_single_bank_1rw_1r_test.py +++ b/compiler/tests/19_single_bank_1rw_1r_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/19_single_bank_test.py b/compiler/tests/19_single_bank_test.py index ac9f1686..72e61c0d 100755 --- a/compiler/tests/19_single_bank_test.py +++ b/compiler/tests/19_single_bank_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. 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 27bb8d6c..4bdad91f 100755 --- a/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py +++ b/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. 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 5cbabc7c..a0b2b242 100755 --- a/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py +++ b/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/20_psram_1bank_2mux_test.py b/compiler/tests/20_psram_1bank_2mux_test.py index 7b5a4f39..c718daa3 100755 --- a/compiler/tests/20_psram_1bank_2mux_test.py +++ b/compiler/tests/20_psram_1bank_2mux_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. 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 2a75ad42..f415bd77 100755 --- a/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py +++ b/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. 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 4cf7447c..46725bc5 100755 --- a/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. 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 0d97fdc4..fec42aeb 100755 --- a/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/20_sram_1bank_2mux_test.py b/compiler/tests/20_sram_1bank_2mux_test.py index 9ea5def1..c61ebe4f 100755 --- a/compiler/tests/20_sram_1bank_2mux_test.py +++ b/compiler/tests/20_sram_1bank_2mux_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/20_sram_1bank_4mux_test.py b/compiler/tests/20_sram_1bank_4mux_test.py index 1cb85cec..5d10903c 100755 --- a/compiler/tests/20_sram_1bank_4mux_test.py +++ b/compiler/tests/20_sram_1bank_4mux_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. 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 2e9f9eea..3a2c34e6 100755 --- a/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/20_sram_1bank_8mux_test.py b/compiler/tests/20_sram_1bank_8mux_test.py index c6c8c946..94c073f9 100755 --- a/compiler/tests/20_sram_1bank_8mux_test.py +++ b/compiler/tests/20_sram_1bank_8mux_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. 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 1e2ea8f8..2ce13456 100755 --- a/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/20_sram_1bank_nomux_test.py b/compiler/tests/20_sram_1bank_nomux_test.py index fa7e1539..272d16ee 100755 --- a/compiler/tests/20_sram_1bank_nomux_test.py +++ b/compiler/tests/20_sram_1bank_nomux_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/20_sram_2bank_test.py b/compiler/tests/20_sram_2bank_test.py index 547917b4..b625f9ec 100755 --- a/compiler/tests/20_sram_2bank_test.py +++ b/compiler/tests/20_sram_2bank_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/21_hspice_delay_test.py b/compiler/tests/21_hspice_delay_test.py index c47eec3c..aa6cbf49 100755 --- a/compiler/tests/21_hspice_delay_test.py +++ b/compiler/tests/21_hspice_delay_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/21_hspice_setuphold_test.py b/compiler/tests/21_hspice_setuphold_test.py index 0c79aa77..49c0d2cb 100755 --- a/compiler/tests/21_hspice_setuphold_test.py +++ b/compiler/tests/21_hspice_setuphold_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/21_model_delay_test.py b/compiler/tests/21_model_delay_test.py index a496727c..c54a9118 100755 --- a/compiler/tests/21_model_delay_test.py +++ b/compiler/tests/21_model_delay_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/21_ngspice_delay_test.py b/compiler/tests/21_ngspice_delay_test.py index cb503e6d..c12d3835 100755 --- a/compiler/tests/21_ngspice_delay_test.py +++ b/compiler/tests/21_ngspice_delay_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/21_ngspice_setuphold_test.py b/compiler/tests/21_ngspice_setuphold_test.py index 64a8972c..abf64d33 100755 --- a/compiler/tests/21_ngspice_setuphold_test.py +++ b/compiler/tests/21_ngspice_setuphold_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/22_psram_1bank_2mux_func_test.py b/compiler/tests/22_psram_1bank_2mux_func_test.py index 4c3307b5..4a99f009 100755 --- a/compiler/tests/22_psram_1bank_2mux_func_test.py +++ b/compiler/tests/22_psram_1bank_2mux_func_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/22_psram_1bank_4mux_func_test.py b/compiler/tests/22_psram_1bank_4mux_func_test.py index 84421e62..9eaa2671 100755 --- a/compiler/tests/22_psram_1bank_4mux_func_test.py +++ b/compiler/tests/22_psram_1bank_4mux_func_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/22_psram_1bank_8mux_func_test.py b/compiler/tests/22_psram_1bank_8mux_func_test.py index afd319bc..a0d52d1b 100755 --- a/compiler/tests/22_psram_1bank_8mux_func_test.py +++ b/compiler/tests/22_psram_1bank_8mux_func_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/22_psram_1bank_nomux_func_test.py b/compiler/tests/22_psram_1bank_nomux_func_test.py index 749e7f0f..7b76e0da 100755 --- a/compiler/tests/22_psram_1bank_nomux_func_test.py +++ b/compiler/tests/22_psram_1bank_nomux_func_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/22_sram_1bank_2mux_func_test.py b/compiler/tests/22_sram_1bank_2mux_func_test.py index 68be7e0d..e5fa9280 100755 --- a/compiler/tests/22_sram_1bank_2mux_func_test.py +++ b/compiler/tests/22_sram_1bank_2mux_func_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/22_sram_1bank_4mux_func_test.py b/compiler/tests/22_sram_1bank_4mux_func_test.py index d303f2b7..dc06a882 100755 --- a/compiler/tests/22_sram_1bank_4mux_func_test.py +++ b/compiler/tests/22_sram_1bank_4mux_func_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/22_sram_1bank_8mux_func_test.py b/compiler/tests/22_sram_1bank_8mux_func_test.py index 710b1355..ee3449ab 100755 --- a/compiler/tests/22_sram_1bank_8mux_func_test.py +++ b/compiler/tests/22_sram_1bank_8mux_func_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/22_sram_1bank_nomux_func_test.py b/compiler/tests/22_sram_1bank_nomux_func_test.py index dbec45a8..bc626858 100755 --- a/compiler/tests/22_sram_1bank_nomux_func_test.py +++ b/compiler/tests/22_sram_1bank_nomux_func_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. 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 cdc13f74..0b8bffcc 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 @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/23_lib_sram_model_corners_test.py b/compiler/tests/23_lib_sram_model_corners_test.py index ee90497c..85d96a73 100755 --- a/compiler/tests/23_lib_sram_model_corners_test.py +++ b/compiler/tests/23_lib_sram_model_corners_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/23_lib_sram_model_test.py b/compiler/tests/23_lib_sram_model_test.py index c941f7a1..e1727794 100755 --- a/compiler/tests/23_lib_sram_model_test.py +++ b/compiler/tests/23_lib_sram_model_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/23_lib_sram_prune_test.py b/compiler/tests/23_lib_sram_prune_test.py index dc7d7930..0d33d1af 100755 --- a/compiler/tests/23_lib_sram_prune_test.py +++ b/compiler/tests/23_lib_sram_prune_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/23_lib_sram_test.py b/compiler/tests/23_lib_sram_test.py index 208813c7..6f2bf0b7 100755 --- a/compiler/tests/23_lib_sram_test.py +++ b/compiler/tests/23_lib_sram_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/24_lef_sram_test.py b/compiler/tests/24_lef_sram_test.py index aa0477a8..362495d7 100755 --- a/compiler/tests/24_lef_sram_test.py +++ b/compiler/tests/24_lef_sram_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/25_verilog_sram_test.py b/compiler/tests/25_verilog_sram_test.py index 7c569189..0bbe45b7 100755 --- a/compiler/tests/25_verilog_sram_test.py +++ b/compiler/tests/25_verilog_sram_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/26_pex_test.py b/compiler/tests/26_pex_test.py index 5598e6bf..5d26d26e 100755 --- a/compiler/tests/26_pex_test.py +++ b/compiler/tests/26_pex_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/30_openram_back_end_test.py b/compiler/tests/30_openram_back_end_test.py index 9988d68b..d5cbe0af 100755 --- a/compiler/tests/30_openram_back_end_test.py +++ b/compiler/tests/30_openram_back_end_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/config_freepdk45.py b/compiler/tests/config_freepdk45.py index 4665778e..5a5b2054 100644 --- a/compiler/tests/config_freepdk45.py +++ b/compiler/tests/config_freepdk45.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/config_freepdk45_back_end.py b/compiler/tests/config_freepdk45_back_end.py index 23df4f1d..5fc87ead 100644 --- a/compiler/tests/config_freepdk45_back_end.py +++ b/compiler/tests/config_freepdk45_back_end.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/config_freepdk45_front_end.py b/compiler/tests/config_freepdk45_front_end.py index 983aacae..69d58442 100644 --- a/compiler/tests/config_freepdk45_front_end.py +++ b/compiler/tests/config_freepdk45_front_end.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/config_scn4m_subm.py b/compiler/tests/config_scn4m_subm.py index 6733a50c..61e5cfe9 100644 --- a/compiler/tests/config_scn4m_subm.py +++ b/compiler/tests/config_scn4m_subm.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/config_scn4m_subm_back_end.py b/compiler/tests/config_scn4m_subm_back_end.py index fa6b3406..d966abfa 100644 --- a/compiler/tests/config_scn4m_subm_back_end.py +++ b/compiler/tests/config_scn4m_subm_back_end.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/config_scn4m_subm_front_end.py b/compiler/tests/config_scn4m_subm_front_end.py index 5e9316b3..d0c8de85 100644 --- a/compiler/tests/config_scn4m_subm_front_end.py +++ b/compiler/tests/config_scn4m_subm_front_end.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/regress.py b/compiler/tests/regress.py index 03ee9fc5..c6591cf4 100755 --- a/compiler/tests/regress.py +++ b/compiler/tests/regress.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/tests/testutils.py b/compiler/tests/testutils.py index dfdd47c9..dfe34361 100644 --- a/compiler/tests/testutils.py +++ b/compiler/tests/testutils.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/verify/__init__.py b/compiler/verify/__init__.py index 011e2e8a..04fa9746 100644 --- a/compiler/verify/__init__.py +++ b/compiler/verify/__init__.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/verify/assura.py b/compiler/verify/assura.py index 88ba2e40..f7777fdb 100644 --- a/compiler/verify/assura.py +++ b/compiler/verify/assura.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/verify/calibre.py b/compiler/verify/calibre.py index 95535bee..509e05fd 100644 --- a/compiler/verify/calibre.py +++ b/compiler/verify/calibre.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/verify/magic.py b/compiler/verify/magic.py index bf127ada..2db87ae2 100644 --- a/compiler/verify/magic.py +++ b/compiler/verify/magic.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/verify/none.py b/compiler/verify/none.py index c2396ae2..68246463 100644 --- a/compiler/verify/none.py +++ b/compiler/verify/none.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/verify/run_script.py b/compiler/verify/run_script.py index 737566c9..71f55074 100644 --- a/compiler/verify/run_script.py +++ b/compiler/verify/run_script.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/compiler/view_profile.py b/compiler/view_profile.py index 92c60c86..b292dce2 100755 --- a/compiler/view_profile.py +++ b/compiler/view_profile.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/technology/freepdk45/__init__.py b/technology/freepdk45/__init__.py index 3c520696..0ad8d108 100644 --- a/technology/freepdk45/__init__.py +++ b/technology/freepdk45/__init__.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/technology/freepdk45/tech/__init__.py b/technology/freepdk45/tech/__init__.py index cba5ec10..a516facc 100644 --- a/technology/freepdk45/tech/__init__.py +++ b/technology/freepdk45/tech/__init__.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/technology/freepdk45/tech/tech.py b/technology/freepdk45/tech/tech.py index f71aa340..12c314cf 100644 --- a/technology/freepdk45/tech/tech.py +++ b/technology/freepdk45/tech/tech.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/technology/scn4m_subm/__init__.py b/technology/scn4m_subm/__init__.py index 2e595844..e54e3e33 100644 --- a/technology/scn4m_subm/__init__.py +++ b/technology/scn4m_subm/__init__.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/technology/scn4m_subm/tech/__init__.py b/technology/scn4m_subm/tech/__init__.py index cba5ec10..a516facc 100644 --- a/technology/scn4m_subm/tech/__init__.py +++ b/technology/scn4m_subm/tech/__init__.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved. diff --git a/technology/scn4m_subm/tech/tech.py b/technology/scn4m_subm/tech/tech.py index edbd3449..15278c7b 100644 --- a/technology/scn4m_subm/tech/tech.py +++ b/technology/scn4m_subm/tech/tech.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -#Copyright (c) 2019 Regents of the University of California and The Board +#Copyright (c) 2016-2019 Regents of the University of California and The Board #of Regents for the Oklahoma Agricultural and Mechanical College #(acting for and on behalf of Oklahoma State University) #All rights reserved.

    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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

  • 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 zcmeHQe{57&c7F5bhsVZ%F_5qeECZMgn-FL0n1p1ry9P{v4G;^Q1XgKnQK<@_uUfdL5=7#~McLdn9Gr)7t1=#sQfa>4D!GO+iK#G5@@cDda#{&A? z0p@4_#gFbF+LOEpnavY2n|Fd4#K)6i8zng zOr)9WEg-#+cn^{0t0(*2r`;wyK0#Xce2TQ}`ZQ_T_YI_H5o_7|P0Saz`{y%$0dXPm z9^$>kMZ|9qze!w7TtZw*{1$N;F+*HVTtUQX3$BH@iui5feZ%g81Zpp)Hw-bLKc|AFo9wJ!lZ`T4O1OvI81Y#`*4JU z+~KSTa~rY-IfINrz93tWE65b&>0a}YC!95L99nE1=M0=lzhxe0%#8Wv=2w_sX}-n$ zD)TtM-DiHa`R|y&-~0pS*O-6Me5?6~%xBGG(X^X?*nEfiwdQfGdel7DA=cjG=D%zH z3G?4G|9$f~a&?+tZ+?UMjpn<|Z!-U+`OW6Hn4hl0n7#_9cA+z%M4mFg&HQ%rI95Jw z9_Kxs6{jKxC~H+z&V@Yoy17RD4^XMOP9o+N4s#2)p79%qwfdR}ig_29A9Cl8_7Gq= z#uJ=eBbvv%%DGm0&1X64z0$=XW9bS}?Vyfor+)C5TG7YSyE;#2Sg4cON5nk9sh(Ph zbqA+>8Ak={2SL${{@MfBtGz}tq&edpIJv|?6wf)C6t8p*n)Q_t&$N;S9j*CN8m50~ zz|@qkcm{XPAo z`LT_rwI&9~iU$hgg|7Sy{Rf7MF5Vl+4-Gv#n18V=w>4KGwhiue^!UL3uEFuqq5ebN z{R6+9FOF{>D;ya0wr9N^8+Sd^+m)Xf9LSINJ~@`pcXvJ2v9`5)`_sF6pY7S)+J9i% z#JCqc6&X>;8!qJXL*6b^tQ$%E$EqF?sae7p^64a2S-#B!bnrmLRA{V-j8h0 zFdpCA%Sl`>d ze&?ngJsY=d-PYCn^p0(NdN=QU`k8L8(ErTHSbn@XHaJks=WM%b_g?fK%X&jz$6CYI zY<9##28IK<@r_+iZkp&H>d7B0dKT{LesX({S2SvJS1q!-v(=<^m!vveP42M z&q%^z&ADFW$Go+e3Y&wq=G)c<^MV08ReuCwdkK`mMSq$t=xXQj2n*kS8Sq5KxZz6Uvb|v;+EaSKMtNk^8)<5E( z^)LJH`tSMw<$vn8#Mi_hiRa=Y@l)}i$4@8TNM207m3$}pUh;bKlVl<_C$%WGGxeLP z-%3rSKB-Hko70(eYx;@w57WETFQkj6)hfb&GH`AjGSCpt#-iE#-4^Xc50Vtga9iI^a& zAD7vmE5x^n?+`yF>ODgb%NL0!h$o3xIM7S92~MQ~2J}IA&4~|Dm~pv+a}0u_!>ICl z5B4!Ko4XuqH7MhACL?XiMo-9~xdIzamubEX%)2JV!iF)HtHBllh_m^CMnr z-$7j%7y1Z~zCT2dJ00EY;BE(U0*^4f`fa9`E9wFZM;OnyQhBoi7p#`+(26Y<~i ze~1zKlBQQS5kkY5Rp2GZ7g<4N) zuf&Fq5`RiOM$~#cOZpt~0`YBPcpYh6QK7C6OiR4=8=TFXmhr; zDsSzVOqZ4{y5iJ7SHNOtYJE+29fjqx(&5_-L`|pWTjwa8=dc$mf4F_+PcTE+&I_*x z?K9d}>ZlO(-Bvy62I4HD&UnxFYhUr4-%sPWV~7hVeu5OM>zj@U`uLfl5w zcW~iz%^Eajt0|GE)b+Q1A#w7sz-yfS7h;-^p;m$TG_a zOGeAPa`Wm|&0UtRPo!q~Z7;vn6my2TWinTC&#L^O=UTmeh7c2U0&TnYOJ1p9dEsyT z3Lbs|ZCG`Z%Vv$d1&6hc_rF0S2EkxGy=T*Ui#+d94qS&(4dpw0uM@T}qz|<2!}>sa zVlMh-?sn}E&V5kWo}q4f#%AZj_K3D1><4h#7jcGy%ed$CA7t}wS48$sDyMjjtC0gn zzug$vpxTY%hvt2%^Qn0Y&!^@&tlwv|fn-4 z8Kc&>?6z9#J3L=e>st5mYFPV)`Zdaq6p06khlxjtCy1ws`u_hs>DP&6;sxSG;w56( z-iwkK#YH2jG&>`KKY!vigwY?Ix4rar=|$OH(wkvaz9>9OK@o<_N72VvPU#$8MLG2` z{Z0q)O}wMcR_2)87Wjs@IQCrZC$ZD9*X>}s6tn2`ZZbL7Injw(bD9_4`-2Ul(=nQ<_}wj73RbA|5)1F=5eowdH6RAe`+4`M=LT>$AWDD|f~a^!pYDy~gOjGWvpr|JLxj;h!3wviN^8e9Lf~;Uk7e z4S!^qvOJ)_ZwUHdEdF;57aD!u@Kd7=ye6Yjzd6TOpKhu&-txk!d~DXjW#4Vzv;z?f z=%5VoXQJ-?t0CMg>79uqX@Aix=^LS)vF7BF-FjG%i4c&#(`rq75kg&xUzqNXVuQxDi$Gq1snbA?9hLRI&jwP zx$e(7CefCL^kqcJ%Bm3kQiy)pXil@I^TBk_E!yA1a-;n}EH|F=nQFusKXCO$=>_6EsSSI}(5E>yho)v8D7Y4-ng zSddx&ody`ccwj0Wy1mRXlrcoz2P6KZ>HZ@Y073_s4L`6lz|%%!59v0<9s`S&ir?}6X>i6z0gxP*N|WGf1%qB0`Ql|tTYHW|oTB&I+<)@MJ@ei{22_VIVs zyXr!g)wvnd!`27qC=lUwRZAahJ!+lF-kz==mVB~z6@9DjO5Shvd?fo-^-UGke$;Zo zJWj=Fyt*gDJ)8SRiVdkf)vtc2obGWoe^R_UFNNn(?WnJ+M{5Uy3nxD7zAfWogTMbm za5d>IMAcIZRew~zOsGDRw+!Hy#)3k&WSuTRJl34KQk5@*ugZ@+I1d7Ohfz{L^*#*e zZpb+Dz(viA&a=8-3*W?G+I$>EpvesH?`h6Y0M)pCRG%ibI3nH zVx#4vVf@Na^ZpS#gf$M?i|U{9*IMV{^{WcCUe(^mZ0OTag9$RGk(eP$A9a(?5kDq= zO04vgoD9=iPqG7KM~W7n2$fH(pNzj#0pF$Q+mxHF&ksL*@0ah}<6naTmciCJvBuZ} z+Xe8OZGV_T9+kn8SlnGJ#`*UXL0l{mw?8k@m4DgVc?sUKm*8=}{SyoPk>Ot&hSR4@ zKX3IuY4zT36+LTMeV#sIH2!Umj3N3Thz&w=IOX1O&?}B#jGV4snXdl0(X*KeX?1)J~ zh&tD(-WJxc_hen9dx$yWYs5wlypOn_I7B3PQ7F9wd4iiN_5{VfFsgpFpVb61|E~++ z`Vt<_mj9%4&4=&*vZC9-BB#Av?%+IgyL8&V_oj%IYt=Vhy%sKS-JYad!+CC({<7)> zi}CO1;NA;-BF`-Jd53lJxqBwc@l2ifW=j9ETan}V{HUf*X+5u@9$IcyVGQB+nS4Y4 zC<7DpJ*@PgDv(|kfAyWD^s@A^?u*oqTHhH+j}Ec@qr|Y@yuii!Iu+P;8Ydsopg2lH zUwnu{-KU1}8d+Zsjx zu_U0M8#9d={M|NwaXuUR8v262<+cpwn#{X93$CN-+Q(7%Ml+?iwXS6&%+!4w)tlo9 z9#X%GP`f9X0KPdn)kY}(v4EmgugXhL>)#*yMNqEvA@P5S>7atrLgG=P+E>4Xs$X`b z?xE06IGvL-j;g$~sMw)J#-Aj$ zPzT->fsYw0{~NZ}qw*l{=FRr_f;t|sI`-A5<2n0ysJdTJ44TI?u6olohFE)O6At}{ z3(L78RPJn$&3l!2j(DD^cB1ew^F;yp4KUyEO|@51M9*=^zXd6kJFqLz^3Tw$lSUw~tVLTOP zc!A-Hdle;HD`N@Ei}KY%@j~+=xxf&>+gk11>V2Uq(z#UnOYN1|P?Q`>-<)Q? zSBa9htE44&I?rlcQ5YpxYsfgItNa$WBf1uUZ#Dg9a>=qzPyJc^kI`fq%}dracZvf- z*8%li3I4q&b7efT=5dZzTgVr7kX5&)n0Tky{j&Gb|Cw-FPvWua4D(EKpzoaU0R_%p z%BS+GPx))D8&#n7qWZN@_ppK8#OH}Q;t)~m>o{qxqe?$GurMvT7mBaa)5_n(dc~jV zBC1oB($B23972*_8QM6zh%Lk{v6Hxs*iCenp^b4j>F0@k z#2oP$7v^!I_!Na&53)P7E<{I_i;7>(30L||&wrE*p&hjqUT0Nl<*G2MDuZo%f`TOr zhW!_=ySw-Q#<3~~Hfr9bmmyD(rGUjZ^w;g~ACv4xR;cx-_D(YX6!A3i3{iI0>!dFd zuMn>i-zR=R)VQKh>nOZ_w2p+zr+O-ksp8|85k$Lc^JeQ~*{YXcV!LGwx%zv`WPCP` zbV0m*Yl*OVugOB#Kan5n$bEnBC?n{=4|gq1K2CRknyGzB{hKa|rx!Rr+|S>Zyi;$} z26px?`V?2Z8esjBceN+^y~Om(M9K3zq$STElhz%e_N5Hl(|)98qfl}zxt81u6)#jh zS24J+p#xjUn#wtv-E@1z`hY*>P}e8XsDpR*WrQ*AjCt?{G^zp0fsc-tjGXHFnCiMv 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 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 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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