mirror of https://github.com/VLSIDA/OpenRAM.git
support multi cell wide precharge cells
This commit is contained in:
parent
e976c4043b
commit
4ea0fcd068
|
|
@ -176,7 +176,7 @@ class cell_properties():
|
||||||
self.names["col_cap_bitcell_2port"] = "col_cap_cell_2rw"
|
self.names["col_cap_bitcell_2port"] = "col_cap_cell_2rw"
|
||||||
self.names["row_cap_bitcell_1port"] = "row_cap_cell_1rw"
|
self.names["row_cap_bitcell_1port"] = "row_cap_cell_1rw"
|
||||||
self.names["row_cap_bitcell_2port"] = "row_cap_cell_2rw"
|
self.names["row_cap_bitcell_2port"] = "row_cap_cell_2rw"
|
||||||
|
self.use_strap = False
|
||||||
self._ptx = _ptx(model_is_subckt=False,
|
self._ptx = _ptx(model_is_subckt=False,
|
||||||
bin_spice_models=False)
|
bin_spice_models=False)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ from sram_factory import factory
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from vector import vector
|
from vector import vector
|
||||||
from globals import OPTS
|
from globals import OPTS
|
||||||
|
from tech import cell_properties
|
||||||
from tech import layer_properties as layer_props
|
from tech import layer_properties as layer_props
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -39,9 +40,12 @@ class port_data(design.design):
|
||||||
|
|
||||||
if not bit_offsets:
|
if not bit_offsets:
|
||||||
bitcell = factory.create(module_type=OPTS.bitcell)
|
bitcell = factory.create(module_type=OPTS.bitcell)
|
||||||
|
if(cell_properties.use_strap):
|
||||||
|
strap = factory.create(module_type=cell_properties.strap_module, version=cell_properties.strap_version)
|
||||||
|
precharge_width = bitcell.width + strap.width
|
||||||
self.bit_offsets = []
|
self.bit_offsets = []
|
||||||
for i in range(self.num_cols + self.num_spare_cols):
|
for i in range(self.num_cols + self.num_spare_cols):
|
||||||
self.bit_offsets.append(i * bitcell.width)
|
self.bit_offsets.append(i * precharge_width)
|
||||||
else:
|
else:
|
||||||
self.bit_offsets = bit_offsets
|
self.bit_offsets = bit_offsets
|
||||||
|
|
||||||
|
|
@ -196,14 +200,18 @@ class port_data(design.design):
|
||||||
# and mirroring happens correctly
|
# and mirroring happens correctly
|
||||||
|
|
||||||
# Used for names/dimensions only
|
# Used for names/dimensions only
|
||||||
self.cell = factory.create(module_type=OPTS.bitcell)
|
cell = factory.create(module_type=OPTS.bitcell)
|
||||||
|
if(cell_properties.use_strap):
|
||||||
|
strap = factory.create(module_type=cell_properties.strap_module, version=cell_properties.strap_version)
|
||||||
|
precharge_width = cell.width + strap.width
|
||||||
|
|
||||||
if self.port == 0:
|
if self.port == 0:
|
||||||
# Append an offset on the left
|
# Append an offset on the left
|
||||||
precharge_bit_offsets = [self.bit_offsets[0] - self.cell.width] + self.bit_offsets
|
precharge_bit_offsets = [self.bit_offsets[0] - precharge_width] + self.bit_offsets
|
||||||
else:
|
else:
|
||||||
# Append an offset on the right
|
# Append an offset on the right
|
||||||
precharge_bit_offsets = self.bit_offsets + [self.bit_offsets[-1] + self.cell.width]
|
precharge_bit_offsets = self.bit_offsets + [self.bit_offsets[-1] + precharge_width]
|
||||||
|
|
||||||
self.precharge_array = factory.create(module_type="precharge_array",
|
self.precharge_array = factory.create(module_type="precharge_array",
|
||||||
columns=self.num_cols + self.num_spare_cols + 1,
|
columns=self.num_cols + self.num_spare_cols + 1,
|
||||||
offsets=precharge_bit_offsets,
|
offsets=precharge_bit_offsets,
|
||||||
|
|
|
||||||
|
|
@ -76,8 +76,8 @@ class precharge_array(design.design):
|
||||||
size=self.size,
|
size=self.size,
|
||||||
bitcell_bl=self.bitcell_bl,
|
bitcell_bl=self.bitcell_bl,
|
||||||
bitcell_br=self.bitcell_br)
|
bitcell_br=self.bitcell_br)
|
||||||
|
|
||||||
self.add_mod(self.pc_cell)
|
self.add_mod(self.pc_cell)
|
||||||
|
|
||||||
self.cell = factory.create(module_type=OPTS.bitcell)
|
self.cell = factory.create(module_type=OPTS.bitcell)
|
||||||
|
|
||||||
def add_layout_pins(self):
|
def add_layout_pins(self):
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
import debug
|
import debug
|
||||||
from bitcell_base_array import bitcell_base_array
|
from bitcell_base_array import bitcell_base_array
|
||||||
from tech import drc, spice
|
from tech import drc, spice, cell_properties
|
||||||
from vector import vector
|
from vector import vector
|
||||||
from globals import OPTS
|
from globals import OPTS
|
||||||
from sram_factory import factory
|
from sram_factory import factory
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,9 @@ class options(optparse.Values):
|
||||||
# This is the temp directory where all intermediate results are stored.
|
# This is the temp directory where all intermediate results are stored.
|
||||||
try:
|
try:
|
||||||
# If user defined the temporary location in their environment, use it
|
# If user defined the temporary location in their environment, use it
|
||||||
|
|
||||||
openram_temp = os.path.abspath(os.environ.get("OPENRAM_TMP"))
|
openram_temp = os.path.abspath(os.environ.get("OPENRAM_TMP"))
|
||||||
|
|
||||||
except:
|
except:
|
||||||
openram_temp = "/tmp"
|
openram_temp = "/tmp"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,11 @@ class precharge(design.design):
|
||||||
self.beta = parameter["beta"]
|
self.beta = parameter["beta"]
|
||||||
self.ptx_width = self.beta * parameter["min_tx_size"]
|
self.ptx_width = self.beta * parameter["min_tx_size"]
|
||||||
self.ptx_mults = 1
|
self.ptx_mults = 1
|
||||||
self.width = self.bitcell.width
|
if(cell_props.use_strap):
|
||||||
|
strap = factory.create(module_type=cell_props.strap_module, version=cell_props.strap_version)
|
||||||
|
self.width = self.bitcell.width + strap.width
|
||||||
|
else:
|
||||||
|
self.width = self.bitcell.width
|
||||||
self.bitcell_bl = bitcell_bl
|
self.bitcell_bl = bitcell_bl
|
||||||
self.bitcell_br = bitcell_br
|
self.bitcell_br = bitcell_br
|
||||||
self.bitcell_bl_pin =self.bitcell.get_pin(self.bitcell_bl)
|
self.bitcell_bl_pin =self.bitcell.get_pin(self.bitcell_bl)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue