mirror of
https://github.com/VLSIDA/OpenRAM.git
synced 2026-09-07 03:20:39 +02:00
Remove add_mod and add module whenever calling add_inst.
This commit is contained in:
@@ -77,7 +77,6 @@ class column_mux(pgate.pgate):
|
||||
self.ptx_width = self.tx_size * drc("minwidth_tx")
|
||||
self.nmos = factory.create(module_type="ptx",
|
||||
width=self.ptx_width)
|
||||
self.add_mod(self.nmos)
|
||||
|
||||
# Space it in the center
|
||||
self.nmos_lower = self.add_inst(name="mux_tx1",
|
||||
|
||||
@@ -39,9 +39,6 @@ class pand2(pgate.pgate):
|
||||
height=self.height,
|
||||
add_wells=self.add_wells)
|
||||
|
||||
self.add_mod(self.nand)
|
||||
self.add_mod(self.inv)
|
||||
|
||||
def create_layout(self):
|
||||
if self.vertical:
|
||||
self.height = 2 * self.nand.height
|
||||
@@ -146,8 +143,8 @@ class pand2(pgate.pgate):
|
||||
offset=pin.center(),
|
||||
width=pin.width(),
|
||||
height=pin.height())
|
||||
|
||||
|
||||
def is_non_inverting(self):
|
||||
"""Return input to output polarity for module"""
|
||||
|
||||
return True
|
||||
|
||||
return True
|
||||
|
||||
@@ -43,9 +43,6 @@ class pand3(pgate.pgate):
|
||||
height=self.height,
|
||||
add_wells=self.add_wells)
|
||||
|
||||
self.add_mod(self.nand)
|
||||
self.add_mod(self.inv)
|
||||
|
||||
def create_layout(self):
|
||||
if self.vertical:
|
||||
self.height = 2 * self.nand.height
|
||||
|
||||
@@ -43,9 +43,6 @@ class pand4(pgate.pgate):
|
||||
height=self.height,
|
||||
add_wells=self.add_wells)
|
||||
|
||||
self.add_mod(self.nand)
|
||||
self.add_mod(self.inv)
|
||||
|
||||
def create_layout(self):
|
||||
if self.vertical:
|
||||
self.height = 2 * self.nand.height
|
||||
@@ -162,4 +159,3 @@ class pand4(pgate.pgate):
|
||||
slew=nand_delay.slew,
|
||||
load=load)
|
||||
return nand_delay + inv_delay
|
||||
|
||||
|
||||
@@ -52,13 +52,11 @@ class pbuf(pgate.pgate):
|
||||
self.inv1 = factory.create(module_type="pinv",
|
||||
size=input_size,
|
||||
height=self.height)
|
||||
self.add_mod(self.inv1)
|
||||
|
||||
self.inv2 = factory.create(module_type="pinv",
|
||||
size=self.size,
|
||||
height=self.height,
|
||||
add_wells=False)
|
||||
self.add_mod(self.inv2)
|
||||
|
||||
def create_insts(self):
|
||||
self.inv1_inst = self.add_inst(name="buf_inv1",
|
||||
@@ -96,4 +94,3 @@ class pbuf(pgate.pgate):
|
||||
offset=a_pin.center(),
|
||||
width=a_pin.width(),
|
||||
height=a_pin.height())
|
||||
|
||||
|
||||
@@ -52,12 +52,10 @@ class pbuf_dec(pgate.pgate):
|
||||
self.inv1 = factory.create(module_type="pinv_dec",
|
||||
size=input_size,
|
||||
height=self.height)
|
||||
self.add_mod(self.inv1)
|
||||
|
||||
self.inv2 = factory.create(module_type="pinv_dec",
|
||||
size=self.size,
|
||||
height=self.height)
|
||||
self.add_mod(self.inv2)
|
||||
|
||||
def create_insts(self):
|
||||
self.inv1_inst = self.add_inst(name="buf_inv1",
|
||||
|
||||
@@ -93,7 +93,6 @@ class pdriver(pgate.pgate):
|
||||
height=self.height,
|
||||
add_wells=self.add_wells)
|
||||
self.inv_list.append(temp_inv)
|
||||
self.add_mod(temp_inv)
|
||||
|
||||
def create_insts(self):
|
||||
self.inv_inst_list = []
|
||||
|
||||
+9
-12
@@ -207,7 +207,6 @@ class pinv(pgate.pgate):
|
||||
add_drain_contact=self.route_layer,
|
||||
connect_poly=True,
|
||||
connect_drain_active=True)
|
||||
self.add_mod(self.nmos)
|
||||
|
||||
self.pmos = factory.create(module_type="ptx",
|
||||
width=self.pmos_width,
|
||||
@@ -217,7 +216,6 @@ class pinv(pgate.pgate):
|
||||
add_drain_contact=self.route_layer,
|
||||
connect_poly=True,
|
||||
connect_drain_active=True)
|
||||
self.add_mod(self.pmos)
|
||||
|
||||
def create_ptx(self):
|
||||
"""
|
||||
@@ -337,30 +335,29 @@ class pinv(pgate.pgate):
|
||||
Overrides base class function.
|
||||
"""
|
||||
self.add_graph_edges(graph, port_nets)
|
||||
|
||||
|
||||
def is_non_inverting(self):
|
||||
"""Return input to output polarity for module"""
|
||||
|
||||
return False
|
||||
return False
|
||||
|
||||
def get_on_resistance(self):
|
||||
"""On resistance of pinv, defined by single nmos"""
|
||||
is_nchannel = True
|
||||
stack = 1
|
||||
is_cell = False
|
||||
return self.tr_r_on(self.nmos_width, is_nchannel, stack, is_cell)
|
||||
return self.tr_r_on(self.nmos_width, is_nchannel, stack, is_cell)
|
||||
|
||||
def get_input_capacitance(self):
|
||||
"""Input cap of input, passes width of gates to gate cap function"""
|
||||
return self.gate_c(self.nmos_width+self.pmos_width)
|
||||
|
||||
return self.gate_c(self.nmos_width+self.pmos_width)
|
||||
|
||||
def get_intrinsic_capacitance(self):
|
||||
"""Get the drain capacitances of the TXs in the gate."""
|
||||
nmos_stack = 1
|
||||
nmos_drain_c = self.drain_c_(self.nmos_width*self.tx_mults,
|
||||
nmos_drain_c = self.drain_c_(self.nmos_width*self.tx_mults,
|
||||
nmos_stack,
|
||||
self.tx_mults)
|
||||
pmos_drain_c = self.drain_c_(self.pmos_width*self.tx_mults,
|
||||
pmos_drain_c = self.drain_c_(self.pmos_width*self.tx_mults,
|
||||
1,
|
||||
self.tx_mults)
|
||||
return nmos_drain_c + pmos_drain_c
|
||||
self.tx_mults)
|
||||
return nmos_drain_c + pmos_drain_c
|
||||
|
||||
@@ -65,17 +65,14 @@ class pinvbuf(pgate.pgate):
|
||||
self.inv = factory.create(module_type="pinv",
|
||||
size=input_size,
|
||||
height=self.row_height)
|
||||
self.add_mod(self.inv)
|
||||
|
||||
self.inv1 = factory.create(module_type="pinv",
|
||||
size=self.predriver_size,
|
||||
height=self.row_height)
|
||||
self.add_mod(self.inv1)
|
||||
|
||||
self.inv2 = factory.create(module_type="pinv",
|
||||
size=self.size,
|
||||
height=self.row_height)
|
||||
self.add_mod(self.inv2)
|
||||
|
||||
def create_insts(self):
|
||||
# Create INV1 (capacitance shield)
|
||||
|
||||
@@ -79,7 +79,6 @@ class pnand2(pgate.pgate):
|
||||
tx_type="nmos",
|
||||
add_source_contact=self.route_layer,
|
||||
add_drain_contact="active")
|
||||
self.add_mod(self.nmos_left)
|
||||
|
||||
self.nmos_right = factory.create(module_type="ptx",
|
||||
width=self.nmos_width,
|
||||
@@ -87,7 +86,6 @@ class pnand2(pgate.pgate):
|
||||
tx_type="nmos",
|
||||
add_source_contact="active",
|
||||
add_drain_contact=self.route_layer)
|
||||
self.add_mod(self.nmos_right)
|
||||
|
||||
self.pmos_left = factory.create(module_type="ptx",
|
||||
width=self.pmos_width,
|
||||
@@ -95,7 +93,6 @@ class pnand2(pgate.pgate):
|
||||
tx_type="pmos",
|
||||
add_source_contact=self.route_layer,
|
||||
add_drain_contact=self.route_layer)
|
||||
self.add_mod(self.pmos_left)
|
||||
|
||||
self.pmos_right = factory.create(module_type="ptx",
|
||||
width=self.pmos_width,
|
||||
@@ -103,7 +100,6 @@ class pnand2(pgate.pgate):
|
||||
tx_type="pmos",
|
||||
add_source_contact=self.route_layer,
|
||||
add_drain_contact=self.route_layer)
|
||||
self.add_mod(self.pmos_right)
|
||||
|
||||
def setup_layout_constants(self):
|
||||
""" Pre-compute some handy layout parameters. """
|
||||
@@ -317,28 +313,26 @@ class pnand2(pgate.pgate):
|
||||
|
||||
def is_non_inverting(self):
|
||||
"""Return input to output polarity for module"""
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def get_on_resistance(self):
|
||||
"""On resistance of pnand, defined by stacked NMOS"""
|
||||
is_nchannel = True
|
||||
stack = 2
|
||||
is_cell = False
|
||||
return self.tr_r_on(self.nmos_width, is_nchannel, stack, is_cell)
|
||||
|
||||
return self.tr_r_on(self.nmos_width, is_nchannel, stack, is_cell)
|
||||
|
||||
def get_input_capacitance(self):
|
||||
"""Input cap of input, passes width of gates to gate cap function"""
|
||||
return self.gate_c(self.nmos_width+self.pmos_width)
|
||||
return self.gate_c(self.nmos_width+self.pmos_width)
|
||||
|
||||
def get_intrinsic_capacitance(self):
|
||||
"""Get the drain capacitances of the TXs in the gate."""
|
||||
nmos_stack = 2
|
||||
nmos_drain_c = self.drain_c_(self.nmos_width*self.tx_mults,
|
||||
nmos_drain_c = self.drain_c_(self.nmos_width*self.tx_mults,
|
||||
nmos_stack,
|
||||
self.tx_mults)
|
||||
pmos_drain_c = self.drain_c_(self.pmos_width*self.tx_mults,
|
||||
pmos_drain_c = self.drain_c_(self.pmos_width*self.tx_mults,
|
||||
1,
|
||||
self.tx_mults)
|
||||
return nmos_drain_c + pmos_drain_c
|
||||
|
||||
self.tx_mults)
|
||||
return nmos_drain_c + pmos_drain_c
|
||||
|
||||
@@ -82,7 +82,6 @@ class pnand3(pgate.pgate):
|
||||
tx_type="nmos",
|
||||
add_source_contact="active",
|
||||
add_drain_contact="active")
|
||||
self.add_mod(self.nmos_center)
|
||||
|
||||
self.nmos_right = factory.create(module_type="ptx",
|
||||
width=self.nmos_width,
|
||||
@@ -90,7 +89,6 @@ class pnand3(pgate.pgate):
|
||||
tx_type="nmos",
|
||||
add_source_contact="active",
|
||||
add_drain_contact=self.route_layer)
|
||||
self.add_mod(self.nmos_right)
|
||||
|
||||
self.nmos_left = factory.create(module_type="ptx",
|
||||
width=self.nmos_width,
|
||||
@@ -98,7 +96,6 @@ class pnand3(pgate.pgate):
|
||||
tx_type="nmos",
|
||||
add_source_contact=self.route_layer,
|
||||
add_drain_contact="active")
|
||||
self.add_mod(self.nmos_left)
|
||||
|
||||
self.pmos_left = factory.create(module_type="ptx",
|
||||
width=self.pmos_width,
|
||||
@@ -106,7 +103,6 @@ class pnand3(pgate.pgate):
|
||||
tx_type="pmos",
|
||||
add_source_contact=self.route_layer,
|
||||
add_drain_contact=self.route_layer)
|
||||
self.add_mod(self.pmos_left)
|
||||
|
||||
self.pmos_center = factory.create(module_type="ptx",
|
||||
width=self.pmos_width,
|
||||
@@ -114,7 +110,6 @@ class pnand3(pgate.pgate):
|
||||
tx_type="pmos",
|
||||
add_source_contact=self.route_layer,
|
||||
add_drain_contact=self.route_layer)
|
||||
self.add_mod(self.pmos_center)
|
||||
|
||||
self.pmos_right = factory.create(module_type="ptx",
|
||||
width=self.pmos_width,
|
||||
@@ -122,7 +117,6 @@ class pnand3(pgate.pgate):
|
||||
tx_type="pmos",
|
||||
add_source_contact=self.route_layer,
|
||||
add_drain_contact=self.route_layer)
|
||||
self.add_mod(self.pmos_right)
|
||||
|
||||
def setup_layout_constants(self):
|
||||
""" Pre-compute some handy layout parameters. """
|
||||
@@ -350,27 +344,26 @@ class pnand3(pgate.pgate):
|
||||
|
||||
def is_non_inverting(self):
|
||||
"""Return input to output polarity for module"""
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def get_on_resistance(self):
|
||||
"""On resistance of pnand, defined by stacked NMOS"""
|
||||
is_nchannel = True
|
||||
stack = 3
|
||||
is_cell = False
|
||||
return self.tr_r_on(self.nmos_width, is_nchannel, stack, is_cell)
|
||||
|
||||
return self.tr_r_on(self.nmos_width, is_nchannel, stack, is_cell)
|
||||
|
||||
def get_input_capacitance(self):
|
||||
"""Input cap of input, passes width of gates to gate cap function"""
|
||||
return self.gate_c(self.nmos_width+self.pmos_width)
|
||||
|
||||
return self.gate_c(self.nmos_width+self.pmos_width)
|
||||
|
||||
def get_intrinsic_capacitance(self):
|
||||
"""Get the drain capacitances of the TXs in the gate."""
|
||||
nmos_stack = 3
|
||||
nmos_drain_c = self.drain_c_(self.nmos_width*self.tx_mults,
|
||||
nmos_drain_c = self.drain_c_(self.nmos_width*self.tx_mults,
|
||||
nmos_stack,
|
||||
self.tx_mults)
|
||||
pmos_drain_c = self.drain_c_(self.pmos_width*self.tx_mults,
|
||||
pmos_drain_c = self.drain_c_(self.pmos_width*self.tx_mults,
|
||||
1,
|
||||
self.tx_mults)
|
||||
return nmos_drain_c + pmos_drain_c
|
||||
self.tx_mults)
|
||||
return nmos_drain_c + pmos_drain_c
|
||||
|
||||
@@ -82,7 +82,6 @@ class pnand4(pgate.pgate):
|
||||
tx_type="nmos",
|
||||
add_source_contact="active",
|
||||
add_drain_contact="active")
|
||||
self.add_mod(self.nmos_center)
|
||||
|
||||
self.nmos_right = factory.create(module_type="ptx",
|
||||
width=self.nmos_width,
|
||||
@@ -90,7 +89,6 @@ class pnand4(pgate.pgate):
|
||||
tx_type="nmos",
|
||||
add_source_contact="active",
|
||||
add_drain_contact=self.route_layer)
|
||||
self.add_mod(self.nmos_right)
|
||||
|
||||
self.nmos_left = factory.create(module_type="ptx",
|
||||
width=self.nmos_width,
|
||||
@@ -98,7 +96,6 @@ class pnand4(pgate.pgate):
|
||||
tx_type="nmos",
|
||||
add_source_contact=self.route_layer,
|
||||
add_drain_contact="active")
|
||||
self.add_mod(self.nmos_left)
|
||||
|
||||
self.pmos_left = factory.create(module_type="ptx",
|
||||
width=self.pmos_width,
|
||||
@@ -106,7 +103,6 @@ class pnand4(pgate.pgate):
|
||||
tx_type="pmos",
|
||||
add_source_contact=self.route_layer,
|
||||
add_drain_contact=self.route_layer)
|
||||
self.add_mod(self.pmos_left)
|
||||
|
||||
self.pmos_center = factory.create(module_type="ptx",
|
||||
width=self.pmos_width,
|
||||
@@ -114,7 +110,6 @@ class pnand4(pgate.pgate):
|
||||
tx_type="pmos",
|
||||
add_source_contact=self.route_layer,
|
||||
add_drain_contact=self.route_layer)
|
||||
self.add_mod(self.pmos_center)
|
||||
|
||||
self.pmos_right = factory.create(module_type="ptx",
|
||||
width=self.pmos_width,
|
||||
@@ -122,7 +117,6 @@ class pnand4(pgate.pgate):
|
||||
tx_type="pmos",
|
||||
add_source_contact=self.route_layer,
|
||||
add_drain_contact=self.route_layer)
|
||||
self.add_mod(self.pmos_right)
|
||||
|
||||
def setup_layout_constants(self):
|
||||
""" Pre-compute some handy layout parameters. """
|
||||
|
||||
@@ -77,7 +77,6 @@ class pnor2(pgate.pgate):
|
||||
tx_type="nmos",
|
||||
add_source_contact=self.route_layer,
|
||||
add_drain_contact=self.route_layer)
|
||||
self.add_mod(self.nmos_left)
|
||||
|
||||
self.nmos_right = factory.create(module_type="ptx",
|
||||
width=self.nmos_width,
|
||||
@@ -85,7 +84,6 @@ class pnor2(pgate.pgate):
|
||||
tx_type="nmos",
|
||||
add_source_contact=self.route_layer,
|
||||
add_drain_contact=self.route_layer)
|
||||
self.add_mod(self.nmos_right)
|
||||
|
||||
self.pmos_left = factory.create(module_type="ptx",
|
||||
width=self.pmos_width,
|
||||
@@ -93,7 +91,6 @@ class pnor2(pgate.pgate):
|
||||
tx_type="pmos",
|
||||
add_source_contact=self.route_layer,
|
||||
add_drain_contact="active")
|
||||
self.add_mod(self.pmos_left)
|
||||
|
||||
self.pmos_right = factory.create(module_type="ptx",
|
||||
width=self.pmos_width,
|
||||
@@ -101,7 +98,6 @@ class pnor2(pgate.pgate):
|
||||
tx_type="pmos",
|
||||
add_source_contact="active",
|
||||
add_drain_contact=self.route_layer)
|
||||
self.add_mod(self.pmos_right)
|
||||
|
||||
def setup_layout_constants(self):
|
||||
""" Pre-compute some handy layout parameters. """
|
||||
|
||||
@@ -90,7 +90,6 @@ class precharge(design.design):
|
||||
width=self.ptx_width,
|
||||
mults=self.ptx_mults,
|
||||
tx_type="pmos")
|
||||
self.add_mod(self.pmos)
|
||||
|
||||
def route_vdd_rail(self):
|
||||
"""
|
||||
@@ -305,4 +304,3 @@ class precharge(design.design):
|
||||
self.add_path(self.bitline_layer,
|
||||
[left_pos, right_pos],
|
||||
width=pmos_pin.height())
|
||||
|
||||
|
||||
@@ -85,13 +85,11 @@ class ptristate_inv(pgate.pgate):
|
||||
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. """
|
||||
|
||||
@@ -66,19 +66,16 @@ class pwrite_driver(design.design):
|
||||
|
||||
# Tristate inverter
|
||||
self.tri = factory.create(module_type="ptristate_inv", height="min")
|
||||
self.add_mod(self.tri)
|
||||
debug.check(self.tri.width<self.width,
|
||||
"Could not create tristate inverter to match bitcell width")
|
||||
|
||||
#self.tbuf = factory.create(module_type="ptristate_buf",
|
||||
#height="min")
|
||||
#self.add_mod(self.tbuf)
|
||||
#debug.check(self.tbuf.width<self.width,
|
||||
#"Could not create tristate buffer to match bitcell width")
|
||||
|
||||
# Inverter for din and en
|
||||
self.inv = factory.create(module_type="pinv", under_rail_vias=True)
|
||||
self.add_mod(self.inv)
|
||||
|
||||
def create_insts(self):
|
||||
# Enable inverter
|
||||
|
||||
@@ -62,9 +62,6 @@ class wordline_driver(design.design):
|
||||
size=driver_size,
|
||||
height=self.nand.height)
|
||||
|
||||
self.add_mod(self.nand)
|
||||
self.add_mod(self.driver)
|
||||
|
||||
def create_layout(self):
|
||||
self.width = self.nand.width + self.driver.width
|
||||
if "li" in layer:
|
||||
|
||||
Reference in New Issue
Block a user