mirror of https://github.com/VLSIDA/OpenRAM.git
colend fixes in progress
This commit is contained in:
parent
69bb6826dc
commit
98fe4c74a4
|
|
@ -107,6 +107,7 @@ class sky130_bitcell_base_array(bitcell_base_array):
|
||||||
strap_pins.extend(["top_gate"])
|
strap_pins.extend(["top_gate"])
|
||||||
else:
|
else:
|
||||||
strap_pins.extend(["bot_gate"])
|
strap_pins.extend(["bot_gate"])
|
||||||
|
strap_pins.extend(["vdd", "gnd"])
|
||||||
return strap_pins
|
return strap_pins
|
||||||
|
|
||||||
def get_row_cap_pins(self, row, col):
|
def get_row_cap_pins(self, row, col):
|
||||||
|
|
@ -131,7 +132,7 @@ class sky130_bitcell_base_array(bitcell_base_array):
|
||||||
self.copy_layout_pin(inst, pin_name)
|
self.copy_layout_pin(inst, pin_name)
|
||||||
if row == 2: #add only 1 label per col
|
if row == 2: #add only 1 label per col
|
||||||
|
|
||||||
if 'VPB' in self.cell_inst[row, col].mod.pins:
|
if 'VPB' or 'vpb' in self.cell_inst[row, col].mod.pins:
|
||||||
pin = inst.get_pin("vpb")
|
pin = inst.get_pin("vpb")
|
||||||
self.objs.append(geometry.rectangle(layer["nwell"],
|
self.objs.append(geometry.rectangle(layer["nwell"],
|
||||||
pin.ll(),
|
pin.ll(),
|
||||||
|
|
@ -139,7 +140,7 @@ class sky130_bitcell_base_array(bitcell_base_array):
|
||||||
pin.height()))
|
pin.height()))
|
||||||
self.objs.append(geometry.label("vdd", layer["nwell"], pin.center()))
|
self.objs.append(geometry.label("vdd", layer["nwell"], pin.center()))
|
||||||
|
|
||||||
if 'VNB' in self.cell_inst[row, col].mod.pins:
|
if 'VNB' or 'vnb'in self.cell_inst[row, col].mod.pins:
|
||||||
try:
|
try:
|
||||||
from tech import layer_override
|
from tech import layer_override
|
||||||
if layer_override['VNB']:
|
if layer_override['VNB']:
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ class sky130_col_cap_array(sky130_bitcell_base_array):
|
||||||
|
|
||||||
self.place_array("dummy_r{0}_c{1}", self.mirror)
|
self.place_array("dummy_r{0}_c{1}", self.mirror)
|
||||||
self.add_layout_pins()
|
self.add_layout_pins()
|
||||||
#self.add_supply_pins()
|
self.add_supply_pins()
|
||||||
self.add_boundary()
|
self.add_boundary()
|
||||||
self.DRC_LVS()
|
self.DRC_LVS()
|
||||||
|
|
||||||
|
|
@ -79,6 +79,8 @@ class sky130_col_cap_array(sky130_bitcell_base_array):
|
||||||
pins.append("gnd")
|
pins.append("gnd")
|
||||||
pins.append("fake_br_{}".format(bitline))
|
pins.append("fake_br_{}".format(bitline))
|
||||||
pins.append("gate")
|
pins.append("gate")
|
||||||
|
pins.append("vdd")
|
||||||
|
pins.append("gnd")
|
||||||
bitline += 1
|
bitline += 1
|
||||||
elif col % 4 == 1:
|
elif col % 4 == 1:
|
||||||
row_layout.append(self.colend2)
|
row_layout.append(self.colend2)
|
||||||
|
|
@ -94,6 +96,8 @@ class sky130_col_cap_array(sky130_bitcell_base_array):
|
||||||
pins.append("gnd")
|
pins.append("gnd")
|
||||||
pins.append("fake_br_{}".format(bitline))
|
pins.append("fake_br_{}".format(bitline))
|
||||||
pins.append("gate")
|
pins.append("gate")
|
||||||
|
pins.append("vdd")
|
||||||
|
pins.append("gnd")
|
||||||
bitline += 1
|
bitline += 1
|
||||||
elif col % 4 ==3:
|
elif col % 4 ==3:
|
||||||
row_layout.append(self.colend2)
|
row_layout.append(self.colend2)
|
||||||
|
|
@ -136,6 +140,7 @@ class sky130_col_cap_array(sky130_bitcell_base_array):
|
||||||
self.add_pin("gnd", "GROUND")
|
self.add_pin("gnd", "GROUND")
|
||||||
self.add_pin("gate", "BIAS")
|
self.add_pin("gate", "BIAS")
|
||||||
|
|
||||||
|
|
||||||
def add_layout_pins(self):
|
def add_layout_pins(self):
|
||||||
""" Add the layout pins """
|
""" Add the layout pins """
|
||||||
# Add vdd/gnd via stacks
|
# Add vdd/gnd via stacks
|
||||||
|
|
@ -208,35 +213,36 @@ class sky130_col_cap_array(sky130_bitcell_base_array):
|
||||||
offset=pin.ll().scale(1, 0),
|
offset=pin.ll().scale(1, 0),
|
||||||
width=pin.width(),
|
width=pin.width(),
|
||||||
height=pin.height())
|
height=pin.height())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def add_supply_pins(self):
|
def add_supply_pins(self):
|
||||||
for col in range(self.cols):
|
for col in range(len(self.insts)):
|
||||||
inst = self.cell_inst[col]
|
inst = self.cell_inst[col]
|
||||||
if 'VPB' in self.cell_inst[col].mod.pins:
|
|
||||||
|
if 'VPB' or 'vnb' in self.cell_inst[col].mod.pins:
|
||||||
pin = inst.get_pin("vpb")
|
pin = inst.get_pin("vpb")
|
||||||
self.objs.append(geometry.rectangle(layer["nwell"],
|
self.objs.append(geometry.rectangle(layer["nwell"],
|
||||||
pin.ll(),
|
pin.ll(),
|
||||||
pin.width(),
|
pin.width(),
|
||||||
pin.height()))
|
pin.height()))
|
||||||
self.objs.append(geometry.label("vdd", layer["nwell"], pin.center()))
|
self.objs.append(geometry.label("vdd", layer["nwell"], pin.center()))
|
||||||
|
|
||||||
if 'VNB' in self.cell_inst[col].mod.pins:
|
|
||||||
|
if 'VNB' or 'vnb' in self.cell_inst[col].mod.pins:
|
||||||
try:
|
try:
|
||||||
from tech import layer_override
|
from tech import layer_override
|
||||||
if layer_override['VNB']:
|
if layer_override['VNB']:
|
||||||
pin = inst.get_pin("vnb")
|
pin = inst.get_pin("vnb")
|
||||||
self.objs.append(geometry.label("gnd", layer["pwellp"], pin.center()))
|
self.objs.append(geometry.label("gnd", layer["pwellp"], pin.center()))
|
||||||
self.objs.append(geometry.rectangle(layer["pwellp"],
|
self.objs.append(geometry.rectangle(layer["pwellp"],
|
||||||
pin.ll(),
|
pin.ll(),
|
||||||
pin.width(),
|
pin.width(),
|
||||||
pin.height()))
|
pin.height()))
|
||||||
except:
|
except:
|
||||||
pin = inst.get_pin("vnb")
|
pin = inst.get_pin("vnb")
|
||||||
|
self.add_label("vdd", pin.layer, pin.center())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def create_all_wordline_names(self, row_size=None):
|
def create_all_wordline_names(self, row_size=None):
|
||||||
if row_size == None:
|
if row_size == None:
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,7 @@ class sky130_dummy_array(sky130_bitcell_base_array):
|
||||||
for row in range(self.row_size):
|
for row in range(self.row_size):
|
||||||
for col in range(self.column_size):
|
for col in range(self.column_size):
|
||||||
inst = self.cell_inst[row, col]
|
inst = self.cell_inst[row, col]
|
||||||
if 'VPB' in self.cell_inst[row, col].mod.pins:
|
if 'VPB' or 'vpb' in self.cell_inst[row, col].mod.pins:
|
||||||
pin = inst.get_pin("vpb")
|
pin = inst.get_pin("vpb")
|
||||||
self.objs.append(geometry.rectangle(layer["nwell"],
|
self.objs.append(geometry.rectangle(layer["nwell"],
|
||||||
pin.ll(),
|
pin.ll(),
|
||||||
|
|
@ -175,7 +175,7 @@ class sky130_dummy_array(sky130_bitcell_base_array):
|
||||||
pin.height()))
|
pin.height()))
|
||||||
self.objs.append(geometry.label("vdd", layer["nwell"], pin.center()))
|
self.objs.append(geometry.label("vdd", layer["nwell"], pin.center()))
|
||||||
|
|
||||||
if 'VNB' in self.cell_inst[row, col].mod.pins:
|
if 'VNB' or 'vnb' in self.cell_inst[row, col].mod.pins:
|
||||||
try:
|
try:
|
||||||
from tech import layer_override
|
from tech import layer_override
|
||||||
if layer_override['VNB']:
|
if layer_override['VNB']:
|
||||||
|
|
|
||||||
|
|
@ -226,7 +226,7 @@ class sky130_replica_column(sky130_bitcell_base_array):
|
||||||
for pin_name in ["vdd", "gnd"]:
|
for pin_name in ["vdd", "gnd"]:
|
||||||
self.copy_layout_pin(inst, pin_name)
|
self.copy_layout_pin(inst, pin_name)
|
||||||
if row == 2:
|
if row == 2:
|
||||||
if 'VPB' in self.cell_inst[row].mod.pins:
|
if 'VPB' or 'vpb' in self.cell_inst[row].mod.pins:
|
||||||
pin = inst.get_pin("vpb")
|
pin = inst.get_pin("vpb")
|
||||||
self.objs.append(geometry.rectangle(layer["nwell"],
|
self.objs.append(geometry.rectangle(layer["nwell"],
|
||||||
pin.ll(),
|
pin.ll(),
|
||||||
|
|
@ -234,7 +234,7 @@ class sky130_replica_column(sky130_bitcell_base_array):
|
||||||
pin.height()))
|
pin.height()))
|
||||||
self.objs.append(geometry.label("vdd", layer["nwell"], pin.center()))
|
self.objs.append(geometry.label("vdd", layer["nwell"], pin.center()))
|
||||||
|
|
||||||
if 'VNB' in self.cell_inst[row].mod.pins:
|
if 'VNB' or 'vnb' in self.cell_inst[row].mod.pins:
|
||||||
try:
|
try:
|
||||||
from tech import layer_override
|
from tech import layer_override
|
||||||
if layer_override['VNB']:
|
if layer_override['VNB']:
|
||||||
|
|
|
||||||
|
|
@ -116,13 +116,15 @@ cell_properties.bitcell_2port.vdd_dir = "H"
|
||||||
cell_properties.bitcell_2port.gnd_layer = "m2"
|
cell_properties.bitcell_2port.gnd_layer = "m2"
|
||||||
cell_properties.bitcell_2port.gnd_dir = "H"
|
cell_properties.bitcell_2port.gnd_dir = "H"
|
||||||
|
|
||||||
cell_properties.col_cap_1port_bitcell = cell(['br', 'vdd', 'gnd', 'bl', 'gate'],
|
cell_properties.col_cap_1port_bitcell = cell(['bl', 'vdd', 'gnd', 'br', 'gate', 'vpb', 'vnb'],
|
||||||
['INPUT', 'POWER', 'GROUND', 'INPUT', 'INPUT'],
|
['INPUT', 'POWER', 'GROUND', 'INPUT', 'INPUT', 'BIAS', 'BIAS'],
|
||||||
{'bl': 'BL0',
|
{'bl': 'bl',
|
||||||
'br': 'BL1',
|
'br': 'br',
|
||||||
'vdd': 'VPWR',
|
'vdd': 'vdd',
|
||||||
'gnd': 'VGND',
|
'gnd': 'gnd',
|
||||||
'gate': 'gate'})
|
'gate': 'gate',
|
||||||
|
'vnb': 'vnb',
|
||||||
|
'vpb': 'vpb'})
|
||||||
cell_properties.col_cap_1port_bitcell.boundary_layer = "mem"
|
cell_properties.col_cap_1port_bitcell.boundary_layer = "mem"
|
||||||
|
|
||||||
cell_properties.col_cap_1port_strap_power = cell(['vdd', 'vpb', 'vnb'],
|
cell_properties.col_cap_1port_strap_power = cell(['vdd', 'vpb', 'vnb'],
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue