diff --git a/compiler/modules/dff.py b/compiler/modules/dff.py index 2db12281..62e424cb 100644 --- a/compiler/modules/dff.py +++ b/compiler/modules/dff.py @@ -10,7 +10,7 @@ class dff(design.design): Memory address flip-flop """ - pin_names = ["d", "q", "clk", "vdd", "gnd"] + pin_names = ["D", "Q", "clk", "vdd", "gnd"] (width,height) = utils.get_libcell_size("dff", GDS["unit"], layer["boundary"]) pin_map = utils.get_libcell_pins(pin_names, "dff", GDS["unit"], layer["boundary"]) diff --git a/compiler/modules/dff_buf.py b/compiler/modules/dff_buf.py new file mode 100644 index 00000000..bcd03f16 --- /dev/null +++ b/compiler/modules/dff_buf.py @@ -0,0 +1,146 @@ +import debug +import design +from tech import drc +from math import log +from vector import vector +from globals import OPTS +from pinv import pinv + +class dff_buf(design.design): + """ + This is a simple buffered DFF. The output is buffered + with two inverters, of variable size, to provide q + and qbar. This is to enable driving large fanout loads. + """ + + def __init__(self, inv1_size, inv2_size, name=""): + + if name=="": + name = "dff_buf_{0}_{1}".format(inv1_size, inv2_size) + design.design.__init__(self, name) + debug.info(1, "Creating {}".format(self.name)) + + c = reload(__import__(OPTS.dff)) + self.mod_dff = getattr(c, OPTS.dff) + self.dff = self.mod_dff("dff") + self.add_mod(self.dff) + + self.inv1 = pinv(size=inv1_size,height=self.dff.height) + self.add_mod(self.inv1) + + self.inv2 = pinv(size=inv2_size,height=self.dff.height) + self.add_mod(self.inv2) + + self.width = self.dff.width + self.inv1.width + self.inv2.width + self.height = self.dff.height + + self.create_layout() + + def create_layout(self): + self.add_pins() + self.add_insts() + self.add_wires() + self.add_layout_pins() + self.DRC_LVS() + + def add_pins(self): + self.add_pin("D") + self.add_pin("Q") + self.add_pin("Qb") + self.add_pin("clk") + self.add_pin("vdd") + self.add_pin("gnd") + + def add_insts(self): + # Add the DFF + self.dff_inst=self.add_inst(name="dff_buf_dff", + mod=self.dff, + offset=vector(0,0)) + self.connect_inst(["D", "qint", "clk", "vdd", "gnd"]) + + # Add INV1 to the right + self.inv1_inst=self.add_inst(name="dff_buf_inv1", + mod=self.inv1, + offset=vector(self.dff_inst.rx(),0)) + self.connect_inst(["qint", "Qb", "vdd", "gnd"]) + + # Add INV2 to the right + self.inv2_inst=self.add_inst(name="dff_buf_inv2", + mod=self.inv2, + offset=vector(self.inv1_inst.rx(),0)) + self.connect_inst(["Qb", "Q", "vdd", "gnd"]) + + def add_wires(self): + # Route dff q to inv1 a + q_pin = self.dff_inst.get_pin("Q") + a1_pin = self.inv1_inst.get_pin("A") + mid_point = vector(a1_pin.cx(), q_pin.cy()) + self.add_wire(("metal3","via2","metal2"), + [q_pin.center(), mid_point, a1_pin.center()]) + self.add_via_center(("metal2","via2","metal3"), + q_pin.center()) + self.add_via_center(("metal1","via1","metal2"), + a1_pin.center()) + + # Route inv1 z to inv2 a + z1_pin = self.inv1_inst.get_pin("Z") + a2_pin = self.inv2_inst.get_pin("A") + mid_point = vector(z1_pin.cx(), a2_pin.cy()) + self.add_wire(("metal1","via1","metal2"), + [z1_pin.center(), mid_point, a2_pin.center()]) + + def add_layout_pins(self): + + # Continous vdd rail along with label. + vdd_pin=self.dff_inst.get_pin("vdd") + self.add_layout_pin(text="vdd", + layer="metal1", + offset=vdd_pin.ll(), + width=self.width, + height=vdd_pin.height()) + + # Continous gnd rail along with label. + gnd_pin=self.dff_inst.get_pin("gnd") + self.add_layout_pin(text="gnd", + layer="metal1", + offset=gnd_pin.ll(), + width=self.width, + height=vdd_pin.height()) + + clk_pin = self.dff_inst.get_pin("clk") + self.add_layout_pin(text="clk", + layer=clk_pin.layer, + offset=clk_pin.ll(), + width=clk_pin.width(), + height=clk_pin.height()) + + din_pin = self.dff_inst.get_pin("D") + self.add_layout_pin(text="D", + layer=din_pin.layer, + offset=din_pin.ll(), + width=din_pin.width(), + height=din_pin.height()) + + dout_pin = self.inv2_inst.get_pin("Z") + self.add_layout_pin(text="Q", + layer=dout_pin.layer, + offset=dout_pin.ll(), + width=dout_pin.width(), + height=dout_pin.height()) + + dout_pin = self.inv1_inst.get_pin("Z") + self.add_layout_pin(text="Qb", + layer=dout_pin.layer, + offset=dout_pin.ll(), + width=dout_pin.width(), + height=dout_pin.height()) + + + + def analytical_delay(self, slew, load=0.0): + """ Calculate the analytical delay of DFF-> INV -> INV """ + dff_delay=self.dff.analytical_delay(slew=slew, load=self.inv1.input_load()) + inv1_delay = self.inv1.analytical_delay(slew=dff_delay.slew, load=self.inv2.input_load()) + inv2_delay = self.inv2.analytical_delay(slew=inv1_delay.slew, load=load) + return dff_delay + inv1_delay + inv2_delay + diff --git a/compiler/tests/11_dff_buf_test.py b/compiler/tests/11_dff_buf_test.py new file mode 100644 index 00000000..3827647e --- /dev/null +++ b/compiler/tests/11_dff_buf_test.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python2.7 +""" +Run a regresion test on a dff_buf. +""" + +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 + +class dff_buf_test(openram_test): + + def runTest(self): + globals.init_openram("config_20_{0}".format(OPTS.tech_name)) + global verify + import verify + OPTS.check_lvsdrc = False + + import dff_buf + + debug.info(2, "Testing dff_buf 4x 8x") + a = dff_buf.dff_buf(4, 8) + self.local_check(a) + + OPTS.check_lvsdrc = True + globals.end_openram() + +# instantiate a copdsay of the class to actually run the test +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/dff.gds b/technology/freepdk45/gds_lib/dff.gds index 57202026..db7d3af3 100644 Binary files a/technology/freepdk45/gds_lib/dff.gds and b/technology/freepdk45/gds_lib/dff.gds differ diff --git a/technology/freepdk45/sp_lib/dff.sp b/technology/freepdk45/sp_lib/dff.sp index 8cc62891..51d99ad1 100644 --- a/technology/freepdk45/sp_lib/dff.sp +++ b/technology/freepdk45/sp_lib/dff.sp @@ -3,11 +3,11 @@ * Program "Calibre xRC" * Version "v2007.2_34.24" * -.subckt dff d q clk vdd gnd +.subckt dff D Q clk vdd gnd * -MM21 q a_66_6# gnd gnd NMOS_VTG L=5e-08 W=5e-07 +MM21 Q a_66_6# gnd gnd NMOS_VTG L=5e-08 W=5e-07 MM19 a_76_6# a_2_6# a_66_6# gnd NMOS_VTG L=5e-08 W=2.5e-07 -MM20 gnd q a_76_6# gnd NMOS_VTG L=5e-08 W=2.5e-07 +MM20 gnd Q a_76_6# gnd NMOS_VTG L=5e-08 W=2.5e-07 MM18 a_66_6# clk a_61_6# gnd NMOS_VTG L=5e-08 W=2.5e-07 MM17 a_61_6# a_34_4# gnd gnd NMOS_VTG L=5e-08 W=2.5e-07 MM10 gnd clk a_2_6# gnd NMOS_VTG L=5e-08 W=5e-07 @@ -15,9 +15,9 @@ MM16 a_34_4# a_22_6# gnd gnd NMOS_VTG L=5e-08 W=2.5e-07 MM15 gnd a_34_4# a_31_6# gnd NMOS_VTG L=5e-08 W=2.5e-07 MM14 a_31_6# clk a_22_6# gnd NMOS_VTG L=5e-08 W=2.5e-07 MM13 a_22_6# a_2_6# a_17_6# gnd NMOS_VTG L=5e-08 W=2.5e-07 -MM12 a_17_6# d gnd gnd NMOS_VTG L=5e-08 W=2.5e-07 -MM11 q a_66_6# vdd vdd PMOS_VTG L=5e-08 W=1e-06 -MM9 vdd q a_76_84# vdd PMOS_VTG L=5e-08 W=2.5e-07 +MM12 a_17_6# D gnd gnd NMOS_VTG L=5e-08 W=2.5e-07 +MM11 Q a_66_6# vdd vdd PMOS_VTG L=5e-08 W=1e-06 +MM9 vdd Q a_76_84# vdd PMOS_VTG L=5e-08 W=2.5e-07 MM8 a_76_84# clk a_66_6# vdd PMOS_VTG L=5e-08 W=2.5e-07 MM7 a_66_6# a_2_6# a_61_74# vdd PMOS_VTG L=5e-08 W=5e-07 MM6 a_61_74# a_34_4# vdd vdd PMOS_VTG L=5e-08 W=5e-07 @@ -26,16 +26,16 @@ MM5 a_34_4# a_22_6# vdd vdd PMOS_VTG L=5e-08 W=5e-07 MM4 vdd a_34_4# a_31_74# vdd PMOS_VTG L=5e-08 W=5e-07 MM3 a_31_74# a_2_6# a_22_6# vdd PMOS_VTG L=5e-08 W=5e-07 MM2 a_22_6# clk a_17_74# vdd PMOS_VTG L=5e-08 W=5e-07 -MM1 a_17_74# d vdd vdd PMOS_VTG L=5e-08 W=5e-07 +MM1 a_17_74# D vdd vdd PMOS_VTG L=5e-08 W=5e-07 * c_9 a_66_6# 0 0.271997f * c_20 clk 0 0.350944f -* c_27 q 0 0.202617f +* c_27 Q 0 0.202617f * c_32 a_76_84# 0 0.0210573f * c_38 a_76_6# 0 0.0204911f * c_45 a_34_4# 0 0.172306f * c_55 a_2_6# 0 0.283119f * c_59 a_22_6# 0 0.157312f -* c_64 d 0 0.0816386f +* c_64 D 0 0.0816386f * c_73 gnd 0 0.254131f * c_81 vdd 0 0.23624f * diff --git a/technology/scn3me_subm/gds_lib/dff.gds b/technology/scn3me_subm/gds_lib/dff.gds index 679792f4..b96235c7 100644 Binary files a/technology/scn3me_subm/gds_lib/dff.gds and b/technology/scn3me_subm/gds_lib/dff.gds differ diff --git a/technology/scn3me_subm/mag_lib/dff.mag b/technology/scn3me_subm/mag_lib/dff.mag index a0f5e0b0..19825153 100644 --- a/technology/scn3me_subm/mag_lib/dff.mag +++ b/technology/scn3me_subm/mag_lib/dff.mag @@ -1,299 +1,279 @@ magic tech scmos -timestamp 1518655545 +timestamp 1518823399 << nwell >> -rect -8 48 104 105 +rect 0 48 109 103 << pwell >> -rect -8 -5 104 48 +rect 0 -3 109 48 << ntransistor >> -rect 7 6 9 26 -rect 15 6 17 16 -rect 20 6 22 16 -rect 29 6 31 16 -rect 34 6 36 16 -rect 43 6 45 16 -rect 59 6 61 16 -rect 64 6 66 16 -rect 74 6 76 16 -rect 79 6 81 16 -rect 87 6 89 26 +rect 11 6 13 26 +rect 19 6 21 16 +rect 24 6 26 16 +rect 33 6 35 16 +rect 38 6 40 16 +rect 47 6 49 16 +rect 63 6 65 16 +rect 68 6 70 16 +rect 78 6 80 16 +rect 83 6 85 16 +rect 91 6 93 26 << ptransistor >> -rect 7 54 9 94 -rect 15 74 17 94 -rect 21 74 23 94 -rect 29 74 31 94 -rect 35 74 37 94 -rect 43 74 45 94 -rect 59 74 61 94 -rect 64 74 66 94 -rect 74 84 76 94 -rect 79 84 81 94 -rect 87 54 89 94 +rect 11 54 13 94 +rect 19 74 21 94 +rect 25 74 27 94 +rect 33 74 35 94 +rect 39 74 41 94 +rect 47 74 49 94 +rect 63 74 65 94 +rect 68 74 70 94 +rect 78 84 80 94 +rect 83 84 85 94 +rect 91 54 93 94 << ndiffusion >> -rect 2 25 7 26 -rect 6 6 7 25 -rect 9 25 14 26 -rect 9 6 10 25 -rect 82 25 87 26 -rect 14 6 15 16 -rect 17 6 20 16 -rect 22 15 29 16 -rect 22 6 24 15 -rect 28 6 29 15 -rect 31 6 34 16 -rect 36 15 43 16 -rect 36 6 37 15 -rect 41 6 43 15 -rect 45 15 50 16 -rect 45 6 46 15 -rect 54 15 59 16 -rect 58 6 59 15 -rect 61 6 64 16 -rect 66 15 74 16 -rect 66 6 68 15 -rect 72 6 74 15 -rect 76 6 79 16 -rect 81 6 82 16 -rect 86 6 87 25 -rect 89 25 94 26 -rect 89 6 90 25 +rect 6 25 11 26 +rect 10 6 11 25 +rect 13 25 18 26 +rect 13 6 14 25 +rect 86 25 91 26 +rect 18 6 19 16 +rect 21 6 24 16 +rect 26 15 33 16 +rect 26 6 28 15 +rect 32 6 33 15 +rect 35 6 38 16 +rect 40 15 47 16 +rect 40 6 41 15 +rect 45 6 47 15 +rect 49 15 54 16 +rect 49 6 50 15 +rect 58 15 63 16 +rect 62 6 63 15 +rect 65 6 68 16 +rect 70 15 78 16 +rect 70 6 72 15 +rect 76 6 78 15 +rect 80 6 83 16 +rect 85 6 86 16 +rect 90 6 91 25 +rect 93 25 98 26 +rect 93 6 94 25 << pdiffusion >> -rect 2 93 7 94 -rect 6 54 7 93 -rect 9 55 10 94 -rect 14 74 15 94 -rect 17 74 21 94 -rect 23 93 29 94 -rect 23 74 24 93 -rect 28 74 29 93 -rect 31 74 35 94 -rect 37 93 43 94 -rect 37 74 38 93 -rect 42 74 43 93 -rect 45 93 50 94 -rect 45 74 46 93 -rect 54 93 59 94 -rect 58 74 59 93 -rect 61 74 64 94 -rect 66 93 74 94 -rect 66 74 68 93 -rect 72 84 74 93 -rect 76 84 79 94 -rect 81 93 87 94 -rect 81 84 82 93 -rect 72 74 73 84 -rect 9 54 14 55 -rect 86 54 87 93 -rect 89 93 94 94 -rect 89 54 90 93 +rect 6 93 11 94 +rect 10 54 11 93 +rect 13 55 14 94 +rect 18 74 19 94 +rect 21 74 25 94 +rect 27 93 33 94 +rect 27 74 28 93 +rect 32 74 33 93 +rect 35 74 39 94 +rect 41 93 47 94 +rect 41 74 42 93 +rect 46 74 47 93 +rect 49 93 54 94 +rect 49 74 50 93 +rect 58 93 63 94 +rect 62 74 63 93 +rect 65 74 68 94 +rect 70 93 78 94 +rect 70 74 72 93 +rect 76 84 78 93 +rect 80 84 83 94 +rect 85 93 91 94 +rect 85 84 86 93 +rect 76 74 77 84 +rect 13 54 18 55 +rect 90 54 91 93 +rect 93 93 98 94 +rect 93 54 94 93 << ndcontact >> -rect 2 6 6 25 -rect 10 6 14 25 -rect 24 6 28 15 -rect 37 6 41 15 -rect 46 6 50 15 -rect 54 6 58 15 -rect 68 6 72 15 -rect 82 6 86 25 -rect 90 6 94 25 +rect 6 6 10 25 +rect 14 6 18 25 +rect 28 6 32 15 +rect 41 6 45 15 +rect 50 6 54 15 +rect 58 6 62 15 +rect 72 6 76 15 +rect 86 6 90 25 +rect 94 6 98 25 << pdcontact >> -rect 2 54 6 93 -rect 10 55 14 94 -rect 24 74 28 93 -rect 38 74 42 93 -rect 46 74 50 93 -rect 54 74 58 93 -rect 68 74 72 93 -rect 82 54 86 93 -rect 90 54 94 93 +rect 6 54 10 93 +rect 14 55 18 94 +rect 28 74 32 93 +rect 42 74 46 93 +rect 50 74 54 93 +rect 58 74 62 93 +rect 72 74 76 93 +rect 86 54 90 93 +rect 94 54 98 93 << psubstratepcontact >> -rect -2 -2 2 2 -rect 14 -2 18 2 -rect 30 -2 34 2 -rect 46 -2 50 2 -rect 62 -2 66 2 -rect 78 -2 82 2 +rect 102 6 106 10 << nsubstratencontact >> -rect -2 98 2 102 -rect 14 98 18 102 -rect 30 98 34 102 -rect 46 98 50 102 -rect 62 98 66 102 -rect 78 98 82 102 +rect 102 89 106 93 << polysilicon >> -rect 7 94 9 96 -rect 15 94 17 96 -rect 21 94 23 96 -rect 29 94 31 96 -rect 35 94 37 96 -rect 43 94 45 96 -rect 59 94 61 96 -rect 64 94 66 96 -rect 74 94 76 96 -rect 79 94 81 96 -rect 87 94 89 96 -rect 7 37 9 54 -rect 15 46 17 74 -rect 7 26 9 33 -rect 15 16 17 42 -rect 21 38 23 74 -rect 29 54 31 74 -rect 29 29 31 50 -rect 20 27 31 29 -rect 35 71 37 74 -rect 20 16 22 27 -rect 35 23 37 67 -rect 43 61 45 74 -rect 59 73 61 74 -rect 50 71 61 73 -rect 30 19 31 23 -rect 29 16 31 19 +rect 11 94 13 96 +rect 19 94 21 96 +rect 25 94 27 96 +rect 33 94 35 96 +rect 39 94 41 96 +rect 47 94 49 96 +rect 63 94 65 96 +rect 68 94 70 96 +rect 78 94 80 96 +rect 83 94 85 96 +rect 91 94 93 96 +rect 11 37 13 54 +rect 19 46 21 74 +rect 11 26 13 33 +rect 19 16 21 42 +rect 25 38 27 74 +rect 33 54 35 74 +rect 33 29 35 50 +rect 24 27 35 29 +rect 39 71 41 74 +rect 24 16 26 27 +rect 39 23 41 67 +rect 47 61 49 74 +rect 63 73 65 74 +rect 54 71 65 73 rect 34 19 35 23 -rect 34 16 36 19 -rect 43 16 45 57 -rect 49 19 51 67 -rect 64 63 66 74 -rect 74 67 76 84 -rect 72 65 76 67 -rect 59 61 66 63 -rect 57 24 59 33 -rect 64 31 66 61 -rect 79 53 81 84 -rect 75 51 81 53 -rect 74 31 76 47 -rect 87 45 89 54 -rect 85 41 89 45 -rect 64 29 71 31 -rect 57 22 66 24 -rect 49 17 61 19 -rect 59 16 61 17 -rect 64 16 66 22 -rect 69 19 71 29 -rect 74 27 75 31 -rect 69 17 76 19 -rect 74 16 76 17 -rect 79 16 81 31 -rect 87 26 89 41 -rect 7 4 9 6 -rect 15 4 17 6 -rect 20 4 22 6 -rect 29 4 31 6 -rect 34 4 36 6 -rect 43 4 45 6 -rect 59 4 61 6 -rect 64 4 66 6 -rect 74 4 76 6 -rect 79 4 81 6 -rect 87 4 89 6 +rect 33 16 35 19 +rect 38 19 39 23 +rect 38 16 40 19 +rect 47 16 49 57 +rect 53 19 55 67 +rect 68 63 70 74 +rect 78 67 80 84 +rect 76 65 80 67 +rect 63 61 70 63 +rect 61 24 63 33 +rect 68 31 70 61 +rect 83 53 85 84 +rect 79 51 85 53 +rect 78 31 80 47 +rect 91 45 93 54 +rect 89 41 93 45 +rect 68 29 75 31 +rect 61 22 70 24 +rect 53 17 65 19 +rect 63 16 65 17 +rect 68 16 70 22 +rect 73 19 75 29 +rect 78 27 79 31 +rect 73 17 80 19 +rect 78 16 80 17 +rect 83 16 85 31 +rect 91 26 93 41 +rect 11 4 13 6 +rect 19 4 21 6 +rect 24 4 26 6 +rect 33 4 35 6 +rect 38 4 40 6 +rect 47 4 49 6 +rect 63 4 65 6 +rect 68 4 70 6 +rect 78 4 80 6 +rect 83 4 85 6 +rect 91 4 93 6 << polycontact >> -rect 13 42 17 46 -rect 6 33 10 37 -rect 27 50 31 54 -rect 21 34 25 38 -rect 35 67 39 71 -rect 41 57 45 61 -rect 26 19 30 23 -rect 35 19 39 23 -rect 49 67 53 71 -rect 55 59 59 63 -rect 70 61 74 65 -rect 55 33 59 37 -rect 73 47 77 51 -rect 81 41 85 45 -rect 75 27 79 31 -<< metal1 >> -rect -2 102 98 103 -rect 2 98 14 102 -rect 18 98 30 102 -rect 34 98 46 102 -rect 50 98 62 102 -rect 66 98 78 102 -rect 82 98 98 102 -rect -2 97 98 98 -rect 10 94 14 97 -rect 2 93 6 94 -rect 24 93 28 94 -rect 18 74 24 77 -rect 38 93 42 97 -rect 46 93 50 94 -rect 54 93 58 97 -rect 67 93 73 94 -rect 67 74 68 93 -rect 72 74 73 93 -rect 82 93 86 97 -rect 46 71 49 74 -rect 39 68 49 71 -rect 22 57 41 60 -rect 48 60 55 63 -rect 48 54 51 60 -rect 67 56 70 65 -rect 6 50 27 52 -rect 31 51 51 54 -rect 58 53 70 56 -rect 90 93 94 94 -rect 2 49 30 50 -rect 17 43 34 46 -rect 14 34 21 37 -rect 58 37 61 53 -rect 90 51 94 54 -rect 77 48 90 51 -rect 70 41 81 44 -rect 25 34 55 37 -rect 2 25 6 26 -rect 10 25 14 26 -rect 27 23 30 34 -rect 59 34 61 37 -rect 90 31 94 47 -rect 79 28 94 31 -rect 90 25 94 28 -rect 39 19 49 22 -rect 46 16 49 19 -rect 18 15 28 16 -rect 18 13 24 15 -rect 37 15 42 16 -rect 41 6 42 15 -rect 46 15 50 16 -rect 54 15 58 16 -rect 66 15 73 16 -rect 66 13 68 15 -rect 67 6 68 13 -rect 72 6 73 15 -rect 10 3 14 6 -rect 37 3 42 6 -rect 54 3 58 6 -rect 82 3 86 6 -rect -2 2 98 3 -rect 2 -2 14 2 -rect 18 -2 30 2 -rect 34 -2 46 2 -rect 50 -2 62 2 -rect 66 -2 78 2 -rect 82 -2 98 2 -rect -2 -3 98 -2 -<< m2contact >> -rect 18 70 22 74 -rect 66 70 70 74 -rect 18 57 22 61 -rect 2 50 6 54 -rect 34 43 38 47 +rect 17 42 21 46 rect 10 33 14 37 -rect 90 47 94 51 -rect 66 40 70 44 -rect 2 26 6 30 -rect 18 16 22 20 -rect 66 16 70 20 +rect 31 50 35 54 +rect 25 34 29 38 +rect 39 67 43 71 +rect 45 57 49 61 +rect 30 19 34 23 +rect 39 19 43 23 +rect 53 67 57 71 +rect 59 59 63 63 +rect 74 61 78 65 +rect 59 33 63 37 +rect 77 47 81 51 +rect 85 41 89 45 +rect 79 27 83 31 +<< metal1 >> +rect 0 97 109 103 +rect 14 94 18 97 +rect 6 93 10 94 +rect 28 93 32 94 +rect 22 74 28 77 +rect 42 93 46 97 +rect 50 93 54 94 +rect 58 93 62 97 +rect 71 93 77 94 +rect 71 74 72 93 +rect 76 74 77 93 +rect 86 93 90 97 +rect 50 71 53 74 +rect 43 68 53 71 +rect 26 57 45 60 +rect 52 60 59 63 +rect 52 54 55 60 +rect 71 56 74 65 +rect 10 50 31 52 +rect 35 51 55 54 +rect 62 53 74 56 +rect 94 93 98 94 +rect 102 93 106 97 +rect 6 49 34 50 +rect 21 43 38 46 +rect 18 34 25 37 +rect 62 37 65 53 +rect 94 51 98 54 +rect 81 48 94 51 +rect 74 41 85 44 +rect 29 34 59 37 +rect 6 25 10 26 +rect 14 25 18 26 +rect 31 23 34 34 +rect 63 34 65 37 +rect 94 31 98 47 +rect 83 28 98 31 +rect 94 25 98 28 +rect 43 19 53 22 +rect 50 16 53 19 +rect 22 15 32 16 +rect 22 13 28 15 +rect 41 15 46 16 +rect 45 6 46 15 +rect 50 15 54 16 +rect 58 15 62 16 +rect 70 15 77 16 +rect 70 13 72 15 +rect 71 6 72 13 +rect 76 6 77 15 +rect 14 3 18 6 +rect 41 3 46 6 +rect 58 3 62 6 +rect 86 3 90 6 +rect 102 3 106 6 +rect 0 -3 109 3 +<< m2contact >> +rect 22 70 26 74 +rect 70 70 74 74 +rect 22 57 26 61 +rect 6 50 10 54 +rect 38 43 42 47 +rect 14 33 18 37 +rect 94 47 98 51 +rect 70 40 74 44 +rect 6 26 10 30 +rect 22 16 26 20 +rect 70 16 74 20 << metal2 >> -rect 18 61 22 70 -rect 2 30 6 50 -rect 18 20 22 57 -rect 66 44 70 70 -rect 66 20 70 40 +rect 22 61 26 70 +rect 6 30 10 50 +rect 22 20 26 57 +rect 70 44 74 70 +rect 70 20 74 40 << m3p >> -rect -2 0 98 100 +rect 0 0 109 100 << labels >> -rlabel metal1 23 100 23 100 5 vdd -rlabel metal1 38 -1 38 -1 1 gnd -rlabel m2contact 11 34 11 34 1 clk -rlabel m2contact 36 45 36 45 1 d -rlabel m2contact 91 49 91 49 1 q +rlabel m2contact 15 34 15 34 4 clk +rlabel m2contact 40 45 40 45 4 D +rlabel m2contact 96 49 96 49 4 Q +rlabel metal1 32 98 32 98 4 vdd +rlabel metal1 44 1 44 1 4 gnd +<< properties >> +string path 0.000 0.000 900.000 0.000 900.000 900.000 0.000 900.000 0.000 0.000 << end >> diff --git a/technology/scn3me_subm/sp_lib/dff.sp b/technology/scn3me_subm/sp_lib/dff.sp index 6d57e652..61515ab6 100644 --- a/technology/scn3me_subm/sp_lib/dff.sp +++ b/technology/scn3me_subm/sp_lib/dff.sp @@ -1,8 +1,8 @@ * Positive edge-triggered FF -.subckt dff d q clk vdd gnd +.subckt dff D Q clk vdd gnd M0 vdd clk a_2_6# vdd p w=12u l=0.6u + ad=0p pd=0u as=0p ps=0u -M1 a_17_74# d vdd vdd p w=6u l=0.6u +M1 a_17_74# D vdd vdd p w=6u l=0.6u + ad=0p pd=0u as=0p ps=0u M2 a_22_6# clk a_17_74# vdd p w=6u l=0.6u + ad=0p pd=0u as=0p ps=0u @@ -18,13 +18,13 @@ M7 a_66_6# a_2_6# a_61_74# vdd p w=6u l=0.6u + ad=0p pd=0u as=0p ps=0u M8 a_76_84# clk a_66_6# vdd p w=3u l=0.6u + ad=0p pd=0u as=0p ps=0u -M9 vdd q a_76_84# vdd p w=3u l=0.6u +M9 vdd Q a_76_84# vdd p w=3u l=0.6u + ad=0p pd=0u as=0p ps=0u M10 gnd clk a_2_6# gnd n w=6u l=0.6u + ad=0p pd=0u as=0p ps=0u -M11 q a_66_6# vdd vdd p w=12u l=0.6u +M11 Q a_66_6# vdd vdd p w=12u l=0.6u + ad=0p pd=0u as=0p ps=0u -M12 a_17_6# d gnd gnd n w=3u l=0.6u +M12 a_17_6# D gnd gnd n w=3u l=0.6u + ad=0p pd=0u as=0p ps=0u M13 a_22_6# a_2_6# a_17_6# gnd n w=3u l=0.6u + ad=0p pd=0u as=0p ps=0u @@ -40,8 +40,8 @@ M18 a_66_6# clk a_61_6# gnd n w=3u l=0.6u + ad=0p pd=0u as=0p ps=0u M19 a_76_6# a_2_6# a_66_6# gnd n w=3u l=0.6u + ad=0p pd=0u as=0p ps=0u -M20 gnd q a_76_6# gnd n w=3u l=0.6u +M20 gnd Q a_76_6# gnd n w=3u l=0.6u + ad=0p pd=0u as=0p ps=0u -M21 q a_66_6# gnd gnd n w=6u l=0.6u +M21 Q a_66_6# gnd gnd n w=6u l=0.6u + ad=0p pd=0u as=0p ps=0u .ends dff