From 6cdc870091d07f3e6bd633837087684968f2f678 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Sun, 24 Feb 2019 09:54:45 -0800 Subject: [PATCH] Copy 1rw/1r cell to 1w/1r. --- compiler/bitcells/bitcell_1w_1r.py | 106 ++++++++++++++++++ compiler/bitcells/replica_bitcell_1w_1r.py | 32 ++++++ .../tests/20_sram_1bank_2mux_1w_1r_test.py | 51 +++++++++ technology/freepdk45/gds_lib/cell_1w_1r.gds | Bin 0 -> 16384 bytes .../freepdk45/gds_lib/replica_cell_1w_1r.gds | Bin 0 -> 16384 bytes technology/freepdk45/sp_lib/cell_1w_1r.sp | 14 +++ technology/scn4m_subm/gds_lib/cell_1w_1r.gds | Bin 0 -> 8192 bytes .../scn4m_subm/gds_lib/replica_cell_1w_1r.gds | Bin 0 -> 8192 bytes technology/scn4m_subm/mag_lib/cell_6t.ext | 41 +++++++ technology/scn4m_subm/mag_lib/cell_6t.spice | 15 +++ .../scn4m_subm/mag_lib/replica_cell_6t.ext | 35 ++++++ .../scn4m_subm/mag_lib/replica_cell_6t.spice | 16 +++ technology/scn4m_subm/sp_lib/cell_1w_1r.sp | 14 +++ technology/scn4m_subm/sp_lib/cell_6t.st0 | 38 +++++++ .../scn4m_subm/sp_lib/replica_cell_1w_1r.sp | 14 +++ 15 files changed, 376 insertions(+) create mode 100644 compiler/bitcells/bitcell_1w_1r.py create mode 100644 compiler/bitcells/replica_bitcell_1w_1r.py create mode 100755 compiler/tests/20_sram_1bank_2mux_1w_1r_test.py create mode 100644 technology/freepdk45/gds_lib/cell_1w_1r.gds create mode 100644 technology/freepdk45/gds_lib/replica_cell_1w_1r.gds create mode 100644 technology/freepdk45/sp_lib/cell_1w_1r.sp create mode 100644 technology/scn4m_subm/gds_lib/cell_1w_1r.gds create mode 100644 technology/scn4m_subm/gds_lib/replica_cell_1w_1r.gds create mode 100644 technology/scn4m_subm/mag_lib/cell_6t.ext create mode 100644 technology/scn4m_subm/mag_lib/cell_6t.spice create mode 100644 technology/scn4m_subm/mag_lib/replica_cell_6t.ext create mode 100644 technology/scn4m_subm/mag_lib/replica_cell_6t.spice create mode 100644 technology/scn4m_subm/sp_lib/cell_1w_1r.sp create mode 100644 technology/scn4m_subm/sp_lib/cell_6t.st0 create mode 100644 technology/scn4m_subm/sp_lib/replica_cell_1w_1r.sp diff --git a/compiler/bitcells/bitcell_1w_1r.py b/compiler/bitcells/bitcell_1w_1r.py new file mode 100644 index 00000000..4df9e813 --- /dev/null +++ b/compiler/bitcells/bitcell_1w_1r.py @@ -0,0 +1,106 @@ +import design +import debug +import utils +from tech import GDS,layer,parameter,drc + +class bitcell_1w_1r(design.design): + """ + A single bit cell (6T, 8T, etc.) This module implements the + single memory cell used in the design. It is a hand-made cell, so + the layout and netlist should be available in the technology + library. + """ + + pin_names = ["bl0", "br0", "bl1", "br1", "wl0", "wl1", "vdd", "gnd"] + (width,height) = utils.get_libcell_size("cell_1w_1r", GDS["unit"], layer["boundary"]) + pin_map = utils.get_libcell_pins(pin_names, "cell_1w_1r", GDS["unit"]) + + def __init__(self, name=""): + # Ignore the name argument + design.design.__init__(self, "cell_1w_1r") + debug.info(2, "Create bitcell with 1W and 1R Port") + + self.width = bitcell_1w_1r.width + self.height = bitcell_1w_1r.height + self.pin_map = bitcell_1w_1r.pin_map + + def analytical_delay(self, 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(r = r, c = c_para+load, slew = slew, swing = swing) + return result + + + 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), + "br0_{0}".format(col), + "bl1_{0}".format(col), + "br1_{0}".format(col), + "wl0_{0}".format(row), + "wl1_{0}".format(row), + "vdd", + "gnd"] + return bitcell_pins + + def list_all_wl_names(self): + """ Creates a list of all wordline pin names """ + row_pins = ["wl0", "wl1"] + return row_pins + + def list_all_bitline_names(self): + """ Creates a list of all bitline pin names (both bl and br) """ + column_pins = ["bl0", "br0", "bl1", "br1"] + return column_pins + + def list_all_bl_names(self): + """ Creates a list of all bl pins names """ + column_pins = ["bl0", "bl1"] + return column_pins + + def list_all_br_names(self): + """ Creates a list of all br pins names """ + column_pins = ["br0", "br1"] + return column_pins + + def list_read_bl_names(self): + """ Creates a list of bl pin names associated with read ports """ + column_pins = ["bl0", "bl1"] + return column_pins + + def list_read_br_names(self): + """ Creates a list of br pin names associated with read ports """ + column_pins = ["br0", "br1"] + return column_pins + + def list_write_bl_names(self): + """ Creates a list of bl pin names associated with write ports """ + column_pins = ["bl0"] + return column_pins + + def list_write_br_names(self): + """ Creates a list of br pin names asscociated with write ports""" + column_pins = ["br0"] + return column_pins + + def analytical_power(self, proc, vdd, temp, load): + """Bitcell power in nW. Only characterizes leakage.""" + from tech import spice + leakage = spice["bitcell_leakage"] + dynamic = 0 #temporary + total_power = self.return_power(dynamic, leakage) + return total_power + + def get_wl_cin(self): + """Return the relative capacitance of the access transistor gates""" + #This is a handmade cell so the value must be entered in the tech.py file or estimated. + #Calculated in the tech file by summing the widths of all the related gates and dividing by the minimum width. + #FIXME: sizing is not accurate with the handmade cell. Change once cell widths are fixed. + access_tx_cin = parameter["6T_access_size"]/drc["minwidth_tx"] + return 2*access_tx_cin diff --git a/compiler/bitcells/replica_bitcell_1w_1r.py b/compiler/bitcells/replica_bitcell_1w_1r.py new file mode 100644 index 00000000..6f59adec --- /dev/null +++ b/compiler/bitcells/replica_bitcell_1w_1r.py @@ -0,0 +1,32 @@ +import design +import debug +import utils +from tech import GDS,layer,drc,parameter + +class replica_bitcell_1w_1r(design.design): + """ + A single bit cell which is forced to store a 0. + This module implements the single memory cell used in the design. It + is a hand-made cell, so the layout and netlist should be available in + the technology library. """ + + pin_names = ["bl0", "br0", "bl1", "br1", "wl0", "wl1", "vdd", "gnd"] + (width,height) = utils.get_libcell_size("replica_cell_1w_1r", GDS["unit"], layer["boundary"]) + pin_map = utils.get_libcell_pins(pin_names, "replica_cell_1w_1r", GDS["unit"]) + + def __init__(self, name=""): + # Ignore the name argument + design.design.__init__(self, "replica_cell_1w_1r") + debug.info(2, "Create replica bitcell 1w+1r object") + + self.width = replica_bitcell_1w_1r.width + self.height = replica_bitcell_1w_1r.height + self.pin_map = replica_bitcell_1w_1r.pin_map + + def get_wl_cin(self): + """Return the relative capacitance of the access transistor gates""" + #This is a handmade cell so the value must be entered in the tech.py file or estimated. + #Calculated in the tech file by summing the widths of all the related gates and dividing by the minimum width. + #FIXME: sizing is not accurate with the handmade cell. Change once cell widths are fixed. + access_tx_cin = parameter["6T_access_size"]/drc["minwidth_tx"] + return 2*access_tx_cin diff --git a/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py new file mode 100755 index 00000000..2954ffbc --- /dev/null +++ b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +""" +Run a regression test on a 1 bank SRAM +""" + +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 20_psram_1bank_2mux_1w_1r_test, odd supply routing error") +class psram_1bank_2mux_1w_1r_test(openram_test): + + def runTest(self): + globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + from sram import sram + from sram_config import sram_config + OPTS.bitcell = "bitcell_1w_1r" + OPTS.replica_bitcell="replica_bitcell_1w_1r" + + OPTS.num_rw_ports = 0 + OPTS.num_w_ports = 1 + OPTS.num_r_ports = 1 + + c = sram_config(word_size=4, + num_words=32, + num_banks=1) + c.num_words=32 + c.words_per_row=2 + c.recompute_sizes() + debug.info(1, "Layout test for {}rw,{}r,{}w psram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports, + OPTS.num_r_ports, + OPTS.num_w_ports, + c.word_size, + c.num_words, + c.words_per_row, + c.num_banks)) + a = sram(c, "sram") + self.local_check(a, final_verification=True) + + 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/gds_lib/cell_1w_1r.gds b/technology/freepdk45/gds_lib/cell_1w_1r.gds new file mode 100644 index 0000000000000000000000000000000000000000..674989625186067daa91a78e23be031db41663a8 GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/technology/scn4m_subm/gds_lib/replica_cell_1w_1r.gds b/technology/scn4m_subm/gds_lib/replica_cell_1w_1r.gds new file mode 100644 index 0000000000000000000000000000000000000000..ce6e413b71352cb8fd64512faa68208b349805a4 GIT binary patch literal 8192 zcmeI0J8WD<6o!x2_ImAXoOK?41OuBFF~*6#iA)>{FcL*18cIatgxC`T%ET`TeUfB*6Q0kUp@G~`<>bO(eV#I{^`!AzyJE@-A|5I_ka0f(-y}g z@4U^{>$^LTyWc!~u=Q}K+uiCs+3M`tSi`J-x@OB(pRSqNN^8{r`gP@1;s?*nmeCUkk`^W$8pg*}&JNWUz?8^P`<^FR&nyt6Z;Krue>_JKC&d`7Qo)5&m@Wy9mtw$xL zJ3~KlsR!{BUzA?uUwEGU5Z~f)N&H257@vNVD~$s`J}BK8`X?GG2E=n^sU)$B^3YFQ z#tf-X8=`b)=%;sfT@JC7M z&d@*c!tCPD-UsKR&%??4C8aw<|8y()A^tP_CGi*Kp`SXs@#nX6XXtOgNPdX-^8J$d zi}KJ<-WDw7kNV_Klx#!mi3>CVtk{OOk|e(O<+FG_cYe#S=}NL2Gr{jR#71hW@EnDQA%S@CP}d{o{E<>dObEJ3~MHrk=(@8}u7Wuk!QUsRwyp zJU>x-mH*Ad6c3WO{H7m8dDwr-c}{8vk8bJCNV-b#5Cr91QZeg4KX?{mWpUhw_}^Z|b-&%gP#-sW%m?&q7Aa{!d?%;Uf2Up?sA?bh?; z6Qw&tf4+ZFpLHxUhl=vh&o{2V(+AHV(w(8798nJro*$%F`H9bdt$v)@PwheJ&M-bc z_6xPcn#BjDJ1hO18PpDO@j>a%(9d@ddrt2=$n$`QaYO0O(9e69=LD%QAC&G4{nXLT zbEgeadX=Ak6AMybaiMf)7=OfloVOtLS%;!@XXq#I)Pwl=b{3^q`6qq6>^+dZkmn{! zcZTsfqY)btoBoT^ouQw3uRVx<&mN@yL+Q@Y&lq*%&u{5f<7dC39>mKxpD4Y`&vPeF zQ12~KdR6|2OP(Nk zNAsg|H0$$Xpi&tw~FIw z!6NSsbz#u`h|zonid{@q0jD z{unnohUA{{i_)E8e8x>Zh>!7$(g*yv^ZA#px!!jWYmx6E$W@f*@%#MQn(z783-Cj( zqCE8TjP%_x_RbS&J3~MFC>Nyv?5Co1XXwAS zN3C=wz{mSQlyC?N<#*t^O tKOZ0E^N}&@@_o8DH$>^qUOpzAW0^SocbI`;28J0JW?-0sVFvOH{0)*ea`XTI literal 0 HcmV?d00001 diff --git a/technology/scn4m_subm/mag_lib/cell_6t.ext b/technology/scn4m_subm/mag_lib/cell_6t.ext new file mode 100644 index 00000000..79f3c8b4 --- /dev/null +++ b/technology/scn4m_subm/mag_lib/cell_6t.ext @@ -0,0 +1,41 @@ +timestamp 1536091415 +version 8.2 +tech scmos +style TSMC0.35um(tsmc35)from:t11c +scale 1000 1 5 +resistclasses 3700 2800 1018000 1018000 1 6000 6000 80 70 80 40 +node "comment_0_0#" 0 0 0 0 bb 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +node "br" 6 -1.43219e-14 96 -8 ndc 320 72 0 0 0 0 0 0 0 0 0 0 0 0 512 96 3456 464 0 0 0 0 +node "bl" 6 -8.88178e-16 40 -8 ndc 320 72 0 0 0 0 0 0 0 0 0 0 0 0 512 96 3200 432 0 0 0 0 +node "wl" 115 -2.89546e-13 -8 12 p 0 0 0 0 0 0 0 0 0 0 1536 360 0 0 2496 344 0 0 0 0 0 0 +node "a_36_40#" 140 -3.51719e-13 36 40 ndif 960 144 304 72 0 0 0 0 0 0 1984 424 0 0 2048 288 0 0 0 0 0 0 +node "a_28_32#" 160 -8.06466e-13 28 32 p 960 144 304 72 0 0 0 0 0 0 2000 456 0 0 1920 272 0 0 0 0 0 0 +node "gnd" 41 -27.888 -32 -32 pw 1792 240 512 128 0 0 0 0 29600 696 0 0 0 0 2688 400 6400 864 0 0 0 0 +equiv "gnd" "gnd" +node "vdd" 2340 2596 -32 116 nw 256 64 800 176 17600 576 0 0 0 0 0 0 0 0 3456 464 256 64 0 0 0 0 +cap "wl" "bl" 189.768 +cap "a_36_40#" "br" 17.59 +cap "wl" "br" 189.768 +cap "vdd" "bl" 135.015 +cap "bl" "br" 27.492 +cap "vdd" "br" 117.084 +cap "gnd" "a_28_32#" 880.405 +cap "gnd" "a_36_40#" 401.284 +cap "a_28_32#" "a_36_40#" 272.793 +cap "gnd" "wl" 1198.41 +cap "gnd" "bl" 712.11 +cap "a_28_32#" "wl" 108.364 +cap "vdd" "gnd" 510.12 +cap "gnd" "br" 698.471 +cap "a_36_40#" "wl" 108.364 +cap "a_28_32#" "bl" 104.205 +cap "vdd" "a_28_32#" 430.812 +cap "a_36_40#" "bl" 29.396 +cap "a_28_32#" "br" 308.488 +cap "vdd" "a_36_40#" 709.108 +fet nfet 96 12 97 13 128 48 "gnd" "wl" 16 0 "br" 16 0 "a_28_32#" 16 0 +fet nfet 40 12 41 13 128 48 "gnd" "wl" 16 0 "bl" 16 0 "a_36_40#" 16 0 +fet nfet 116 40 117 41 256 80 "gnd" "a_36_40#" 16 0 "a_28_32#" 32 0 "gnd" 32 0 +fet nfet 28 40 29 41 256 80 "gnd" "a_28_32#" 16 0 "gnd" 32 0 "a_36_40#" 32 0 +fet pfet 108 148 109 149 192 56 "vdd" "a_36_40#" 32 0 "a_28_32#" 12 0 "vdd" 12 0 +fet pfet 28 148 29 149 192 56 "vdd" "a_28_32#" 32 0 "vdd" 12 0 "a_36_40#" 12 0 diff --git a/technology/scn4m_subm/mag_lib/cell_6t.spice b/technology/scn4m_subm/mag_lib/cell_6t.spice new file mode 100644 index 00000000..31eec08a --- /dev/null +++ b/technology/scn4m_subm/mag_lib/cell_6t.spice @@ -0,0 +1,15 @@ +* SPICE3 file created from cell_6t.ext - technology: scmos + +M1000 a_36_40# a_28_32# vdd vdd pfet w=0.6u l=0.8u ++ ad=0.76p pd=3.6u as=2p ps=8.8u +M1001 vdd a_36_40# a_28_32# vdd pfet w=0.6u l=0.8u ++ ad=0p pd=0u as=0.76p ps=3.6u +M1002 a_36_40# a_28_32# gnd gnd nfet w=1.6u l=0.4u ++ ad=2.4p pd=7.2u as=4.48p ps=12u +M1003 gnd a_36_40# a_28_32# gnd nfet w=1.6u l=0.4u ++ ad=0p pd=0u as=2.4p ps=7.2u +M1004 a_36_40# wl bl gnd nfet w=0.8u l=0.4u ++ ad=0p pd=0u as=0.8p ps=3.6u +M1005 a_28_32# wl br gnd nfet w=0.8u l=0.4u ++ ad=0p pd=0u as=0.8p ps=3.6u +C0 vdd 0 2.60fF diff --git a/technology/scn4m_subm/mag_lib/replica_cell_6t.ext b/technology/scn4m_subm/mag_lib/replica_cell_6t.ext new file mode 100644 index 00000000..726cd738 --- /dev/null +++ b/technology/scn4m_subm/mag_lib/replica_cell_6t.ext @@ -0,0 +1,35 @@ +timestamp 1541443051 +version 8.2 +tech scmos +style TSMC0.35um(tsmc35)from:t11c +scale 1000 1 5 +resistclasses 3700 2800 1018000 1018000 1 6000 6000 80 70 80 40 +node "comment_0_0#" 0 0 0 0 bb 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +node "br" 6 1.40998e-14 96 -8 ndc 320 72 0 0 0 0 0 0 0 0 0 0 0 0 512 96 3456 464 0 0 0 0 +node "bl" 6 -8.88178e-16 40 -8 ndc 320 72 0 0 0 0 0 0 0 0 0 0 0 0 512 96 3200 432 0 0 0 0 +node "wl" 115 -2.89546e-13 -8 12 p 0 0 0 0 0 0 0 0 0 0 1536 360 0 0 2496 344 0 0 0 0 0 0 +node "a_36_40#" 140 -3.51719e-13 36 40 ndif 960 144 304 72 0 0 0 0 0 0 1984 424 0 0 2048 288 0 0 0 0 0 0 +node "gnd" 41 -27.888 -32 -32 pw 1792 240 512 128 0 0 0 0 29600 696 0 0 0 0 2688 400 6400 864 0 0 0 0 +equiv "gnd" "gnd" +node "vdd" 2517 2596 -32 116 nw 1216 208 1104 248 17600 576 0 0 0 0 2000 456 0 0 5632 736 256 64 0 0 0 0 +cap "vdd" "br" 442.06 +cap "bl" "wl" 189.768 +cap "gnd" "br" 698.471 +cap "bl" "a_36_40#" 29.396 +cap "wl" "a_36_40#" 108.364 +cap "bl" "vdd" 239.22 +cap "bl" "gnd" 712.11 +cap "wl" "vdd" 108.364 +cap "wl" "gnd" 1198.41 +cap "bl" "br" 27.492 +cap "a_36_40#" "vdd" 981.901 +cap "wl" "br" 189.768 +cap "a_36_40#" "gnd" 401.284 +cap "vdd" "gnd" 1390.52 +cap "a_36_40#" "br" 17.59 +fet nfet 96 12 97 13 128 48 "gnd" "wl" 16 0 "br" 16 0 "vdd" 16 0 +fet nfet 40 12 41 13 128 48 "gnd" "wl" 16 0 "bl" 16 0 "a_36_40#" 16 0 +fet nfet 116 40 117 41 256 80 "gnd" "a_36_40#" 16 0 "vdd" 32 0 "gnd" 32 0 +fet nfet 28 40 29 41 256 80 "gnd" "vdd" 16 0 "gnd" 32 0 "a_36_40#" 32 0 +fet pfet 108 148 109 149 192 56 "vdd" "a_36_40#" 32 0 "vdd" 24 0 +fet pfet 28 148 29 149 192 56 "vdd" "vdd" 32 0 "vdd" 12 0 "a_36_40#" 12 0 diff --git a/technology/scn4m_subm/mag_lib/replica_cell_6t.spice b/technology/scn4m_subm/mag_lib/replica_cell_6t.spice new file mode 100644 index 00000000..bb64476f --- /dev/null +++ b/technology/scn4m_subm/mag_lib/replica_cell_6t.spice @@ -0,0 +1,16 @@ +* SPICE3 file created from replica_cell_6t.ext - technology: scmos + +M1000 a_36_40# vdd vdd vdd pfet w=0.6u l=0.8u ++ ad=0.76p pd=3.6u as=2.76p ps=12.4u +** SOURCE/DRAIN TIED +M1001 vdd a_36_40# vdd vdd pfet w=0.8u l=0.6u ++ ad=0p pd=0u as=0p ps=0u +M1002 a_36_40# vdd gnd gnd nfet w=1.6u l=0.4u ++ ad=2.4p pd=7.2u as=4.48p ps=12u +M1003 gnd a_36_40# vdd gnd nfet w=1.6u l=0.4u ++ ad=0p pd=0u as=3.04p ps=10.4u +M1004 a_36_40# wl bl gnd nfet w=0.8u l=0.4u ++ ad=0p pd=0u as=0.8p ps=3.6u +M1005 vdd wl br gnd nfet w=0.8u l=0.4u ++ ad=0p pd=0u as=0.8p ps=3.6u +C0 vdd 0 2.60fF diff --git a/technology/scn4m_subm/sp_lib/cell_1w_1r.sp b/technology/scn4m_subm/sp_lib/cell_1w_1r.sp new file mode 100644 index 00000000..b40f589a --- /dev/null +++ b/technology/scn4m_subm/sp_lib/cell_1w_1r.sp @@ -0,0 +1,14 @@ + +.SUBCKT cell_1w_1r bl0 br0 bl1 br1 wl0 wl1 vdd gnd +MM9 RA_to_R_right wl1 br1 gnd n w=1.2u l=0.4u +MM8 RA_to_R_right Q gnd gnd n w=1.2u l=0.4u +MM7 RA_to_R_left Q_bar gnd gnd n w=1.2u l=0.4u +MM6 RA_to_R_left wl1 bl1 gnd n w=1.2u l=0.4u +MM5 Q wl0 bl0 gnd n w=0.8u l=0.4u +MM4 Q_bar wl0 br0 gnd n w=0.8u l=0.4u +MM1 Q Q_bar gnd gnd n w=1.6u l=0.4u +MM0 Q_bar Q gnd gnd n w=1.6u l=0.4u +MM3 Q Q_bar vdd vdd p w=0.6u l=0.4u +MM2 Q_bar Q vdd vdd p w=0.6u l=0.4u +.ENDS + diff --git a/technology/scn4m_subm/sp_lib/cell_6t.st0 b/technology/scn4m_subm/sp_lib/cell_6t.st0 new file mode 100644 index 00000000..52729df3 --- /dev/null +++ b/technology/scn4m_subm/sp_lib/cell_6t.st0 @@ -0,0 +1,38 @@ +****** HSPICE -- M-2017.03 linux64 (Feb 20 2017) ****** + Input File: cell_6t.sp + lic: + lic: FLEXlm: SDK_11.6.4 + lic: USER: mrg HOSTNAME: 72fb17cef281 + lic: HOSTID: 0242ac110002 PID: 69 + lic: Using FLEXlm license file: + lic: 27000@license.soe.ucsc.edu + lic: Checkout 1 hspice + lic: License/Maintenance for hspice will expire on 18-dec-2020/2018.09 + lic: 1(in_use)/50(total) FLOATING license(s) on SERVER 27000@license.soe.ucsc.edu + lic: + init: begin read circuit files, cpu clock= 9.60E-01 + option search = /bsoe/software/synopsys/M-2017.03/hspice/parts/a + d + option search = /bsoe/software/synopsys/M-2017.03/hspice/parts/b + ehave + option search = /bsoe/software/synopsys/M-2017.03/hspice/parts/c + omlinear + option search = /bsoe/software/synopsys/M-2017.03/hspice/parts/d + io + option search = /bsoe/software/synopsys/M-2017.03/hspice/parts/f + et + option search = /bsoe/software/synopsys/M-2017.03/hspice/parts/l + in_tech + option search = /bsoe/software/synopsys/M-2017.03/hspice/parts/p + ci + option search = /bsoe/software/synopsys/M-2017.03/hspice/parts/s + ignet + option search = /bsoe/software/synopsys/M-2017.03/hspice/parts/t + i + option search = /bsoe/software/synopsys/M-2017.03/hspice/parts/x + ilinx + option runlvl + init: end read circuit files, cpu clock= 9.60E-01 peak memory= 290 mb + init: begin check errors, cpu clock= 9.60E-01 +>error ***** hspice job aborted + lic: Release hspice token(s) diff --git a/technology/scn4m_subm/sp_lib/replica_cell_1w_1r.sp b/technology/scn4m_subm/sp_lib/replica_cell_1w_1r.sp new file mode 100644 index 00000000..6c2d3c1b --- /dev/null +++ b/technology/scn4m_subm/sp_lib/replica_cell_1w_1r.sp @@ -0,0 +1,14 @@ + +.SUBCKT replica_cell_1w_1r bl0 br0 bl1 br1 wl0 wl1 vdd gnd +MM9 RA_to_R_right wl1 br1 gnd n w=1.2u l=0.4u +MM8 RA_to_R_right Q gnd gnd n w=1.2u l=0.4u +MM7 RA_to_R_left vdd gnd gnd n w=1.2u l=0.4u +MM6 RA_to_R_left wl1 bl1 gnd n w=1.2u l=0.4u +MM5 Q wl0 bl0 gnd n w=0.8u l=0.4u +MM4 vdd wl0 br0 gnd n w=0.8u l=0.4u +MM1 Q vdd gnd gnd n w=1.6u l=0.4u +MM0 vdd Q gnd gnd n w=1.6u l=0.4u +MM3 Q vdd vdd vdd p w=0.6u l=0.4u +MM2 vdd Q vdd vdd p w=0.6u l=0.4u +.ENDS +