mirror of https://github.com/VLSIDA/OpenRAM.git
Use custom cells when needed.
This commit is contained in:
parent
87419bd640
commit
1890385be1
|
|
@ -33,7 +33,7 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout):
|
||||||
lvs_dir = OPTS.openram_tech + lvs_subdir + "/"
|
lvs_dir = OPTS.openram_tech + lvs_subdir + "/"
|
||||||
|
|
||||||
if os.path.exists(lvs_dir):
|
if os.path.exists(lvs_dir):
|
||||||
self.lvs_file = lvs_dir + name + ".sp"
|
self.lvs_file = lvs_dir + cell_name + ".sp"
|
||||||
else:
|
else:
|
||||||
self.lvs_file = self.sp_file
|
self.lvs_file = self.sp_file
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ from tech import drc, GDS
|
||||||
from tech import layer as techlayer
|
from tech import layer as techlayer
|
||||||
from tech import layer_indices
|
from tech import layer_indices
|
||||||
from tech import layer_stacks
|
from tech import layer_stacks
|
||||||
|
from tech import preferred_directions
|
||||||
import os
|
import os
|
||||||
from globals import OPTS
|
from globals import OPTS
|
||||||
from vector import vector
|
from vector import vector
|
||||||
|
|
|
||||||
|
|
@ -26,14 +26,14 @@ class dff(design.design):
|
||||||
cell_size_layer = "boundary"
|
cell_size_layer = "boundary"
|
||||||
|
|
||||||
def __init__(self, name="dff"):
|
def __init__(self, name="dff"):
|
||||||
design.design.__init__(self, name)
|
super().__init__(name)
|
||||||
|
|
||||||
(width, height) = utils.get_libcell_size(name,
|
(width, height) = utils.get_libcell_size(self.cell_name,
|
||||||
GDS["unit"],
|
GDS["unit"],
|
||||||
layer[self.cell_size_layer])
|
layer[self.cell_size_layer])
|
||||||
|
|
||||||
pin_map = utils.get_libcell_pins(self.pin_names,
|
pin_map = utils.get_libcell_pins(self.pin_names,
|
||||||
name,
|
self.cell_name,
|
||||||
GDS["unit"])
|
GDS["unit"])
|
||||||
|
|
||||||
self.width = width
|
self.width = width
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import design
|
||||||
from tech import GDS, layer, spice, parameter
|
from tech import GDS, layer, spice, parameter
|
||||||
import logical_effort
|
import logical_effort
|
||||||
import utils
|
import utils
|
||||||
import debug
|
|
||||||
|
|
||||||
|
|
||||||
class inv_dec(design.design):
|
class inv_dec(design.design):
|
||||||
|
|
@ -22,14 +21,14 @@ class inv_dec(design.design):
|
||||||
cell_size_layer = "boundary"
|
cell_size_layer = "boundary"
|
||||||
|
|
||||||
def __init__(self, name="inv_dec", height=None):
|
def __init__(self, name="inv_dec", height=None):
|
||||||
design.design.__init__(self, name)
|
super().__init__(name)
|
||||||
|
|
||||||
(width, height) = utils.get_libcell_size(name,
|
(width, height) = utils.get_libcell_size(self.cell_name,
|
||||||
GDS["unit"],
|
GDS["unit"],
|
||||||
layer[self.cell_size_layer])
|
layer[self.cell_size_layer])
|
||||||
|
|
||||||
pin_map = utils.get_libcell_pins(self.pin_names,
|
pin_map = utils.get_libcell_pins(self.pin_names,
|
||||||
name,
|
self.cell_name,
|
||||||
GDS["unit"])
|
GDS["unit"])
|
||||||
|
|
||||||
self.width = width
|
self.width = width
|
||||||
|
|
|
||||||
|
|
@ -21,14 +21,14 @@ class nand2_dec(design.design):
|
||||||
cell_size_layer = "boundary"
|
cell_size_layer = "boundary"
|
||||||
|
|
||||||
def __init__(self, name="nand2_dec", height=None):
|
def __init__(self, name="nand2_dec", height=None):
|
||||||
design.design.__init__(self, name)
|
super().__init__(name)
|
||||||
|
|
||||||
(width, height) = utils.get_libcell_size(name,
|
(width, height) = utils.get_libcell_size(self.cell_name,
|
||||||
GDS["unit"],
|
GDS["unit"],
|
||||||
layer[self.cell_size_layer])
|
layer[self.cell_size_layer])
|
||||||
|
|
||||||
pin_map = utils.get_libcell_pins(self.pin_names,
|
pin_map = utils.get_libcell_pins(self.pin_names,
|
||||||
name,
|
self.cell_name,
|
||||||
GDS["unit"])
|
GDS["unit"])
|
||||||
|
|
||||||
self.width = width
|
self.width = width
|
||||||
|
|
|
||||||
|
|
@ -21,14 +21,14 @@ class nand3_dec(design.design):
|
||||||
cell_size_layer = "boundary"
|
cell_size_layer = "boundary"
|
||||||
|
|
||||||
def __init__(self, name="nand3_dec", height=None):
|
def __init__(self, name="nand3_dec", height=None):
|
||||||
design.design.__init__(self, name)
|
super().__init__(name)
|
||||||
|
|
||||||
(width, height) = utils.get_libcell_size(name,
|
(width, height) = utils.get_libcell_size(self.cell_name,
|
||||||
GDS["unit"],
|
GDS["unit"],
|
||||||
layer[self.cell_size_layer])
|
layer[self.cell_size_layer])
|
||||||
|
|
||||||
pin_map = utils.get_libcell_pins(self.pin_names,
|
pin_map = utils.get_libcell_pins(self.pin_names,
|
||||||
name,
|
self.cell_name,
|
||||||
GDS["unit"])
|
GDS["unit"])
|
||||||
|
|
||||||
self.width = width
|
self.width = width
|
||||||
|
|
|
||||||
|
|
@ -21,14 +21,14 @@ class nand4_dec(design.design):
|
||||||
cell_size_layer = "boundary"
|
cell_size_layer = "boundary"
|
||||||
|
|
||||||
def __init__(self, name="nand4_dec", height=None):
|
def __init__(self, name="nand4_dec", height=None):
|
||||||
design.design.__init__(self, name)
|
super().__init__(name)
|
||||||
|
|
||||||
(width, height) = utils.get_libcell_size(name,
|
(width, height) = utils.get_libcell_size(self.cell_name,
|
||||||
GDS["unit"],
|
GDS["unit"],
|
||||||
layer[self.cell_size_layer])
|
layer[self.cell_size_layer])
|
||||||
|
|
||||||
pin_map = utils.get_libcell_pins(self.pin_names,
|
pin_map = utils.get_libcell_pins(self.pin_names,
|
||||||
name,
|
self.cell_name,
|
||||||
GDS["unit"])
|
GDS["unit"])
|
||||||
|
|
||||||
self.width = width
|
self.width = width
|
||||||
|
|
|
||||||
|
|
@ -33,12 +33,12 @@ class sense_amp(design.design):
|
||||||
super().__init__(name)
|
super().__init__(name)
|
||||||
debug.info(2, "Create sense_amp")
|
debug.info(2, "Create sense_amp")
|
||||||
|
|
||||||
(width, height) = utils.get_libcell_size(name,
|
(width, height) = utils.get_libcell_size(self.cell_name,
|
||||||
GDS["unit"],
|
GDS["unit"],
|
||||||
layer[self.cell_size_layer])
|
layer[self.cell_size_layer])
|
||||||
|
|
||||||
pin_map = utils.get_libcell_pins(self.pin_names,
|
pin_map = utils.get_libcell_pins(self.pin_names,
|
||||||
name,
|
self.cell_name,
|
||||||
GDS["unit"])
|
GDS["unit"])
|
||||||
|
|
||||||
self.width = width
|
self.width = width
|
||||||
|
|
@ -28,15 +28,15 @@ class tri_gate(design.design):
|
||||||
if name=="":
|
if name=="":
|
||||||
name = "tri{0}".format(tri_gate.unique_id)
|
name = "tri{0}".format(tri_gate.unique_id)
|
||||||
tri_gate.unique_id += 1
|
tri_gate.unique_id += 1
|
||||||
design.design.__init__(self, name)
|
super().__init__(self, name)
|
||||||
debug.info(2, "Create tri_gate")
|
debug.info(2, "Create tri_gate")
|
||||||
|
|
||||||
(width, height) = utils.get_libcell_size(name,
|
(width, height) = utils.get_libcell_size(self.cell_name,
|
||||||
GDS["unit"],
|
GDS["unit"],
|
||||||
layer[self.cell_size_layer])
|
layer[self.cell_size_layer])
|
||||||
|
|
||||||
pin_map = utils.get_libcell_pins(self.pin_names,
|
pin_map = utils.get_libcell_pins(self.pin_names,
|
||||||
name,
|
self.cell_name,
|
||||||
GDS["unit"])
|
GDS["unit"])
|
||||||
|
|
||||||
self.width = width
|
self.width = width
|
||||||
|
|
|
||||||
|
|
@ -31,15 +31,15 @@ class write_driver(design.design):
|
||||||
cell_size_layer = "boundary"
|
cell_size_layer = "boundary"
|
||||||
|
|
||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
design.design.__init__(self, name)
|
super().__init__(name)
|
||||||
debug.info(2, "Create write_driver")
|
debug.info(2, "Create write_driver")
|
||||||
|
|
||||||
(width, height) = utils.get_libcell_size(name,
|
(width, height) = utils.get_libcell_size(self.cell_name,
|
||||||
GDS["unit"],
|
GDS["unit"],
|
||||||
layer[self.cell_size_layer])
|
layer[self.cell_size_layer])
|
||||||
|
|
||||||
pin_map = utils.get_libcell_pins(self.pin_names,
|
pin_map = utils.get_libcell_pins(self.pin_names,
|
||||||
name,
|
self.cell_name,
|
||||||
GDS["unit"])
|
GDS["unit"])
|
||||||
|
|
||||||
self.width = width
|
self.width = width
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue