mirror of https://github.com/VLSIDA/OpenRAM.git
no wl for col end
This commit is contained in:
parent
4a1a7e637e
commit
d40c3588ed
|
|
@ -45,8 +45,7 @@ class _bitcell:
|
|||
|
||||
cell_s8_6t = _cell({'bl' : 'bl0',
|
||||
'br' : 'bl1',
|
||||
'wl0': 'wl0',
|
||||
'wl1': 'wl1'})
|
||||
'wl': 'wl'})
|
||||
|
||||
cell_6t = _cell({'bl' : 'bl',
|
||||
'br' : 'br',
|
||||
|
|
@ -181,4 +180,4 @@ class cell_properties():
|
|||
if ports == "{}R_{}W_{}RW".format(OPTS.num_r_ports, OPTS.num_w_ports, OPTS.num_rw_ports):
|
||||
use_custom_arrangement = True
|
||||
break
|
||||
return use_custom_arrangement
|
||||
return use_custom_arrangement
|
||||
|
|
|
|||
|
|
@ -27,11 +27,11 @@ class s8_bitcell(bitcell_base.bitcell_base):
|
|||
pin_names = ["bl0", "bl1", "wl0", "wl1", "vpwr", "vgnd"]
|
||||
type_list = ["OUTPUT", "OUTPUT", "INPUT", "INPUT", "POWER", "GROUND"]
|
||||
else:
|
||||
pin_names = [props.bitcell.cell_6t.pin.bl,
|
||||
props.bitcell.cell_6t.pin.br,
|
||||
props.bitcell.cell_6t.pin.wl,
|
||||
props.bitcell.cell_6t.pin.vdd,
|
||||
props.bitcell.cell_6t.pin.gnd]
|
||||
pin_names = [props.bitcell.cell_s8_6t.pin.bl,
|
||||
props.bitcell.cell_s8_6t.pin.br,
|
||||
props.bitcell.cell_s8_6t.pin.wl,
|
||||
"vpwr",
|
||||
"vgnd"]
|
||||
type_list = ["OUTPUT", "OUTPUT", "INPUT", "POWER", "GROUND"]
|
||||
storage_nets = ['Q', 'Q_bar']
|
||||
|
||||
|
|
@ -61,15 +61,12 @@ class s8_bitcell(bitcell_base.bitcell_base):
|
|||
layer["mem"],
|
||||
"s8sram_cell\x00")
|
||||
|
||||
|
||||
#debug.check(OPTS.tech_name != "sky130", "sky130 does not yet support single port cells")
|
||||
|
||||
def get_all_wl_names(self):
|
||||
""" Creates a list of all wordline pin names """
|
||||
if props.compare_ports(props.bitcell.split_wl):
|
||||
row_pins = ["wl0", "wl1"]
|
||||
else:
|
||||
row_pins = [props.bitcell.s8_sp.pin.wl]
|
||||
row_pins = [props.bitcell.cell_s8_6t.pin.wl]
|
||||
return row_pins
|
||||
|
||||
def get_all_bitline_names(self):
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ class s8_col_cap_array(design.design):
|
|||
self.column_offset = column_offset
|
||||
self.mirror = mirror
|
||||
self.no_instances = True
|
||||
self.all_wordline_names = []
|
||||
self.create_netlist()
|
||||
if not OPTS.netlist_only:
|
||||
self.create_layout()
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@ class s8_col_end(design.design):
|
|||
type_list = []
|
||||
|
||||
if version == "colend":
|
||||
self.name = "s8sram16x16_colenda"
|
||||
structure = "s8sram16x16_colenda\x00"
|
||||
self.name = "s8sram16x16_colend"
|
||||
structure = "s8sram16x16_colend"
|
||||
elif version == "colend_p_cent":
|
||||
self.name = "s8sram16x16_colend_p_cent"
|
||||
structure = "s8sram16x16_colend_p_cent\x00"
|
||||
|
|
|
|||
|
|
@ -24,11 +24,11 @@ class s8_dummy_bitcell(bitcell_base.bitcell_base):
|
|||
pin_names = ["bl", "br", "wl0", "wl1", "vdd", "gnd"]
|
||||
type_list = ["OUTPUT", "OUTPUT", "INPUT", "INPUT" , "POWER", "GROUND"]
|
||||
else:
|
||||
pin_names = [props.bitcell.cell_6t.pin.bl,
|
||||
props.bitcell.cell_6t.pin.br,
|
||||
props.bitcell.cell_6t.pin.wl,
|
||||
props.bitcell.cell_6t.pin.vdd,
|
||||
props.bitcell.cell_6t.pin.gnd]
|
||||
pin_names = [props.bitcell.cell_s8_6t.pin.bl,
|
||||
props.bitcell.cell_s8_6t.pin.br,
|
||||
props.bitcell.cell_s8_6t.pin.wl,
|
||||
"vpwr",
|
||||
"vgnd"]
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -130,10 +130,9 @@ class s8_row_cap_array(design.design):
|
|||
|
||||
|
||||
def add_pins(self):
|
||||
for row in range(self.rows):
|
||||
for row in range(self.rows - 2):
|
||||
for port in self.all_ports:
|
||||
self.add_pin("wl0_{}_{}".format(port, row), "OUTPUT")
|
||||
self.add_pin("wl1_{}_{}".format(port, row), "OUTPUT")
|
||||
self.add_pin("wl_{}_{}".format(port, row), "OUTPUT")
|
||||
self.add_pin("vpwr", "POWER")
|
||||
self.add_pin("vgnd", "GROUND")
|
||||
|
||||
|
|
|
|||
|
|
@ -56,31 +56,29 @@ class bitcell_base_array(design.design):
|
|||
# def get_all_wordline_names(self, prefix=""):
|
||||
# return [prefix + x for x in self.all_wordline_names]
|
||||
|
||||
def create_all_wordline_names(self):
|
||||
for row in range(self.row_size):
|
||||
def create_all_wordline_names(self, remove_wordline = 0):
|
||||
for row in range(self.row_size - remove_wordline):
|
||||
for port in self.all_ports:
|
||||
if not cell_properties.compare_ports(cell_properties.bitcell.split_wl):
|
||||
self.wordline_names[port].append("wl_{0}_{1}".format(port, row))
|
||||
else:
|
||||
self.wordline_names[port].append("wl0_{0}_{1}".format(port, row))
|
||||
self.wordline_names[port].append("wl1_{0}_{1}".format(port, row))
|
||||
|
||||
self.all_wordline_names = [x for sl in zip(*self.wordline_names) for x in sl]
|
||||
|
||||
|
||||
def add_pins(self):
|
||||
for bl_name in self.get_bitline_names():
|
||||
self.add_pin(bl_name, "INOUT")
|
||||
for wl_name in self.get_wordline_names():
|
||||
self.add_pin(wl_name, "INPUT")
|
||||
if not cell_properties.compare_ports(cell_properties.bitcell_array.use_custom_cell_arrangement):
|
||||
for bl_name in self.get_bitline_names():
|
||||
self.add_pin(bl_name, "INOUT")
|
||||
for wl_name in self.get_wordline_names():
|
||||
self.add_pin(wl_name, "INPUT")
|
||||
self.add_pin("vdd", "POWER")
|
||||
self.add_pin("gnd", "GROUND")
|
||||
else:
|
||||
for bl_name in self.get_bitline_names():
|
||||
self.add_pin(bl_name, "INOUT")
|
||||
for wl_name in self.get_wordline_names():
|
||||
self.add_pin(wl_name, "INPUT")
|
||||
self.add_pin("vpwr", "POWER")
|
||||
self.add_pin("vgnd", "GROUND")
|
||||
|
||||
def get_bitcell_pins(self, row, col):
|
||||
""" Creates a list of connections in the bitcell,
|
||||
indexed by column and row, for instance use in bitcell_array """
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ class dummy_array(bitcell_base_array):
|
|||
height=self.height)
|
||||
|
||||
wl_names = self.cell.get_all_wl_names()
|
||||
if not props.compare_ports(props.bitcell_array.use_custom_cell_arrangement):
|
||||
if not props.compare_ports(props.bitcell.split_wl):
|
||||
for row in range(self.row_size):
|
||||
for port in self.all_ports:
|
||||
wl_pin = self.cell_inst[row, 0].get_pin(wl_names[port])
|
||||
|
|
|
|||
|
|
@ -267,96 +267,74 @@ class replica_bitcell_array(bitcell_base_array.bitcell_base_array):
|
|||
|
||||
for port in self.all_ports:
|
||||
for bit in self.all_ports:
|
||||
if not cell_properties.compare_ports(cell_properties.bitcell.split_wl):
|
||||
#if not cell_properties.compare_ports(cell_properties.bitcell.split_wl):
|
||||
self.rbl_wordline_names[port].append("rbl_wl_{0}_{1}".format(port, bit))
|
||||
if bit != port:
|
||||
self.gnd_wordline_names.append("rbl_wl_{0}_{1}".format(port, bit))
|
||||
else:
|
||||
self.rbl_wordline_names[port].append("rbl_wl0_{0}_{1}".format(port, bit))
|
||||
self.rbl_wordline_names[port].append("rbl_wl1_{0}_{1}".format(port, bit))
|
||||
if bit != port:
|
||||
self.gnd_wordline_names.append("rbl0_wl_{0}_{1}".format(port, bit))
|
||||
self.gnd_wordline_names.append("rbl1_wl_{0}_{1}".format(port, bit))
|
||||
#else:
|
||||
# self.rbl_wordline_names[port].append("rbl_wl0_{0}_{1}".format(port, bit))
|
||||
# self.rbl_wordline_names[port].append("rbl_wl1_{0}_{1}".format(port, bit))
|
||||
# if bit != port:
|
||||
# self.gnd_wordline_names.append("rbl0_wl_{0}_{1}".format(port, bit))
|
||||
# self.gnd_wordline_names.append("rbl1_wl_{0}_{1}".format(port, bit))
|
||||
|
||||
self.all_rbl_wordline_names = [x for sl in self.rbl_wordline_names for x in sl]
|
||||
|
||||
self.wordline_names = self.bitcell_array.wordline_names
|
||||
self.all_wordline_names = self.bitcell_array.all_wordline_names
|
||||
|
||||
|
||||
# All wordlines including dummy and RBL
|
||||
self.replica_array_wordline_names = []
|
||||
if not cell_properties.compare_ports(cell_properties.bitcell_array.use_custom_cell_arrangement):
|
||||
|
||||
# All wordlines including dummy and RBL
|
||||
self.replica_array_wordline_names = []
|
||||
self.replica_array_wordline_names.extend(["gnd"] * len(self.col_cap.get_wordline_names()))
|
||||
for bit in range(self.rbl[0]):
|
||||
self.replica_array_wordline_names.extend([x if x not in self.gnd_wordline_names else "gnd" for x in self.rbl_wordline_names[bit]])
|
||||
self.replica_array_wordline_names.extend(self.all_wordline_names)
|
||||
for bit in range(self.rbl[1]):
|
||||
self.replica_array_wordline_names.extend([x if x not in self.gnd_wordline_names else "gnd" for x in self.rbl_wordline_names[self.rbl[0] + bit]])
|
||||
for bit in range(self.rbl[0]):
|
||||
self.replica_array_wordline_names.extend([x if x not in self.gnd_wordline_names else "gnd" for x in self.rbl_wordline_names[bit]])
|
||||
self.replica_array_wordline_names.extend(self.all_wordline_names)
|
||||
for bit in range(self.rbl[1]):
|
||||
self.replica_array_wordline_names.extend([x if x not in self.gnd_wordline_names else "gnd" for x in self.rbl_wordline_names[self.rbl[0] + bit]])
|
||||
if not cell_properties.compare_ports(cell_properties.bitcell_array.use_custom_cell_arrangement):
|
||||
self.replica_array_wordline_names.extend(["gnd"] * len(self.col_cap.get_wordline_names()))
|
||||
|
||||
for port in range(self.rbl[0]):
|
||||
self.add_pin(self.rbl_wordline_names[port][port], "INPUT")
|
||||
self.add_pin_list(self.all_wordline_names, "INPUT")
|
||||
for port in range(self.rbl[0], self.rbl[0] + self.rbl[1]):
|
||||
self.add_pin(self.rbl_wordline_names[port][port], "INPUT")
|
||||
else:
|
||||
# All wordlines including dummy and RBL
|
||||
self.replica_array_wordline_names = []
|
||||
self.replica_array_wordline_names.extend(["gnd"] * 2)
|
||||
for bit in range(self.rbl[0]):
|
||||
self.replica_array_wordline_names.extend([x if x not in self.gnd_wordline_names else "gnd" for x in self.rbl_wordline_names[bit]])
|
||||
self.replica_array_wordline_names.extend(self.all_wordline_names)
|
||||
for bit in range(self.rbl[1]):
|
||||
self.replica_array_wordline_names.extend([x if x not in self.gnd_wordline_names else "gnd" for x in self.rbl_wordline_names[self.rbl[0] + bit]])
|
||||
self.replica_array_wordline_names.extend(["gnd"] *2)
|
||||
|
||||
for port in range(self.rbl[0]):
|
||||
self.add_pin(self.rbl_wordline_names[port][port], "INPUT")
|
||||
self.add_pin_list(self.all_wordline_names, "INPUT")
|
||||
for port in range(self.rbl[0], self.rbl[0] + self.rbl[1]):
|
||||
self.add_pin(self.rbl_wordline_names[port][port], "INPUT")
|
||||
for port in range(self.rbl[0]):
|
||||
self.add_pin(self.rbl_wordline_names[port][port], "INPUT")
|
||||
self.add_pin_list(self.all_wordline_names, "INPUT")
|
||||
for port in range(self.rbl[0], self.rbl[0] + self.rbl[1]):
|
||||
self.add_pin(self.rbl_wordline_names[port][port], "INPUT")
|
||||
|
||||
def create_instances(self):
|
||||
""" Create the module instances used in this design """
|
||||
|
||||
if not cell_properties.compare_ports(cell_properties.bitcell_array.use_custom_cell_arrangement):
|
||||
self.supplies = ["vdd", "gnd"]
|
||||
else:
|
||||
self.supplies = ["vpwr", "vgnd"]
|
||||
|
||||
# Used for names/dimensions only
|
||||
if not cell_properties.compare_ports(cell_properties.bitcell_array.use_custom_cell_arrangement):
|
||||
self.cell = factory.create(module_type="bitcell")
|
||||
else:
|
||||
self.cell = factory.create(module_type="s8_bitcell", version = "opt1")
|
||||
|
||||
# Main array
|
||||
self.bitcell_array_inst=self.add_inst(name="bitcell_array",
|
||||
mod=self.bitcell_array)
|
||||
self.connect_inst(self.all_bitline_names + self.all_wordline_names + self.supplies)
|
||||
|
||||
# Replica columns
|
||||
self.replica_col_insts = []
|
||||
for port in self.all_ports:
|
||||
if port in self.rbls:
|
||||
self.replica_col_insts.append(self.add_inst(name="replica_col_{}".format(port),
|
||||
mod=self.replica_columns[port]))
|
||||
self.connect_inst(self.rbl_bitline_names[port] + self.replica_array_wordline_names + self.supplies)
|
||||
else:
|
||||
self.replica_col_insts.append(None)
|
||||
|
||||
# Dummy rows under the bitcell array (connected with with the replica cell wl)
|
||||
self.dummy_row_replica_insts = []
|
||||
# Note, this is the number of left and right even if we aren't adding the columns to this bitcell array!
|
||||
for port in self.all_ports:
|
||||
self.dummy_row_replica_insts.append(self.add_inst(name="dummy_row_{}".format(port),
|
||||
mod=self.dummy_row))
|
||||
self.connect_inst([x if x not in self.gnd_wordline_names else "gnd" for x in self.rbl_wordline_names[port]] + self.supplies)
|
||||
|
||||
# Top/bottom dummy rows or col caps
|
||||
if not cell_properties.compare_ports(cell_properties.bitcell_array.use_custom_cell_arrangement):
|
||||
|
||||
self.supplies = ["vdd", "gnd"]
|
||||
|
||||
# Used for names/dimensions only
|
||||
self.cell = factory.create(module_type="bitcell")
|
||||
|
||||
# Main array
|
||||
self.bitcell_array_inst=self.add_inst(name="bitcell_array",
|
||||
mod=self.bitcell_array)
|
||||
self.connect_inst(self.all_bitline_names + self.all_wordline_names + self.supplies)
|
||||
|
||||
# Replica columns
|
||||
self.replica_col_insts = []
|
||||
for port in self.all_ports:
|
||||
if port in self.rbls:
|
||||
self.replica_col_insts.append(self.add_inst(name="replica_col_{}".format(port),
|
||||
mod=self.replica_columns[port]))
|
||||
self.connect_inst(self.rbl_bitline_names[port] + self.replica_array_wordline_names + self.supplies)
|
||||
else:
|
||||
self.replica_col_insts.append(None)
|
||||
|
||||
# Dummy rows under the bitcell array (connected with with the replica cell wl)
|
||||
self.dummy_row_replica_insts = []
|
||||
# Note, this is the number of left and right even if we aren't adding the columns to this bitcell array!
|
||||
for port in self.all_ports:
|
||||
self.dummy_row_replica_insts.append(self.add_inst(name="dummy_row_{}".format(port),
|
||||
mod=self.dummy_row))
|
||||
self.connect_inst([x if x not in self.gnd_wordline_names else "gnd" for x in self.rbl_wordline_names[port]] + self.supplies)
|
||||
|
||||
# Top/bottom dummy rows or col caps
|
||||
self.dummy_row_insts = []
|
||||
self.dummy_row_insts.append(self.add_inst(name="dummy_row_bot",
|
||||
mod=self.col_cap))
|
||||
|
|
@ -374,22 +352,9 @@ class replica_bitcell_array(bitcell_base_array.bitcell_base_array):
|
|||
mod=self.row_cap_right))
|
||||
self.connect_inst(self.replica_array_wordline_names + self.supplies)
|
||||
else:
|
||||
self.dummy_row_insts = []
|
||||
self.dummy_row_insts.append(self.add_inst(name="dummy_row_bot",
|
||||
mod=self.col_cap_bottom))
|
||||
self.connect_inst(self.all_bitline_names + self.supplies)
|
||||
self.dummy_row_insts.append(self.add_inst(name="dummy_row_top",
|
||||
mod=self.col_cap_top))
|
||||
self.connect_inst(self.all_bitline_names + self.supplies)
|
||||
from tech import custom_replica_bitcell_array_arrangement
|
||||
custom_replica_bitcell_array_arrangement(self)
|
||||
|
||||
# Left/right Dummy columns
|
||||
self.dummy_col_insts = []
|
||||
self.dummy_col_insts.append(self.add_inst(name="dummy_col_left",
|
||||
mod=self.row_cap_left))
|
||||
self.connect_inst(self.replica_array_wordline_names + self.supplies)
|
||||
self.dummy_col_insts.append(self.add_inst(name="dummy_col_right",
|
||||
mod=self.row_cap_right))
|
||||
self.connect_inst(self.replica_array_wordline_names + self.supplies)
|
||||
def create_layout(self):
|
||||
|
||||
# We will need unused wordlines grounded, so we need to know their layer
|
||||
|
|
|
|||
|
|
@ -62,7 +62,11 @@ class replica_column(bitcell_base_array):
|
|||
def add_pins(self):
|
||||
|
||||
self.create_all_bitline_names()
|
||||
self.create_all_wordline_names()
|
||||
#remove 2 wordlines to account for top/bot
|
||||
if not cell_properties.bitcell.end_caps:
|
||||
self.create_all_wordline_names()
|
||||
else:
|
||||
self.create_all_wordline_names(2)
|
||||
self.add_pin_list(self.all_bitline_names, "OUTPUT")
|
||||
self.add_pin_list(self.all_wordline_names, "INPUT")
|
||||
|
||||
|
|
|
|||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
BIN
missing_pin.gds
BIN
missing_pin.gds
Binary file not shown.
|
|
@ -6,13 +6,15 @@
|
|||
[globals/import_tech]: Importing technology: sky130
|
||||
[globals/import_tech]: Adding technology path: /home/jesse/openram/technology
|
||||
[globals/init_paths]: Creating temp directory: /home/jesse/output/
|
||||
[verify/<module>]: Initializing verify...
|
||||
[verify/<module>]: LVS/DRC/PEX disabled.
|
||||
[characterizer/<module>]: Initializing characterizer...
|
||||
[characterizer/<module>]: Finding spice simulator.
|
||||
[verify/<module>]: Initializing verify...
|
||||
[verify/<module>]: LVS/DRC/PEX disabled.
|
||||
WARNING: file __init__.py: line 79: Did not find Magic.
|
||||
|
||||
[globals/setup_bitcell]: Using bitcell: bitcell_1rw_1r
|
||||
|==============================================================================|
|
||||
|========= OpenRAM v1.1.5 =========|
|
||||
|========= OpenRAM v1.1.6 =========|
|
||||
|========= =========|
|
||||
|========= VLSI Design and Automation Lab =========|
|
||||
|========= Computer Science and Engineering Department =========|
|
||||
|
|
@ -23,7 +25,7 @@
|
|||
|========= Temp dir: /home/jesse/output/ =========|
|
||||
|========= See LICENSE for license info =========|
|
||||
|==============================================================================|
|
||||
** Start: 07/01/2020 04:43:37
|
||||
** Start: 10/07/2020 13:40:02
|
||||
Technology: sky130
|
||||
Total size: 256 bits
|
||||
Word size: 16
|
||||
|
|
@ -42,6 +44,7 @@ Performing simulation-based characterization with ngspice
|
|||
[sram_config/recompute_sizes]: Row addr size: 4 Col addr size: 0 Bank addr size: 4
|
||||
Words per row: 1
|
||||
Output files are:
|
||||
/home/jesse/openram/sram_0.05/sram_16_16_sky130_0.05.lvs
|
||||
/home/jesse/openram/sram_0.05/sram_16_16_sky130_0.05.sp
|
||||
/home/jesse/openram/sram_0.05/sram_16_16_sky130_0.05.v
|
||||
/home/jesse/openram/sram_0.05/sram_16_16_sky130_0.05.lib
|
||||
|
|
@ -55,198 +58,11 @@ Output files are:
|
|||
[dff_array/__init__]: Creating data_dff rows=1 cols=16
|
||||
[dff_array/__init__]: Creating wmask_dff rows=1 cols=2
|
||||
[bank/__init__]: create sram of size 16 with 16 words
|
||||
[port_data/__init__]: create data port of size 16 with 1 words per row
|
||||
[precharge/__init__]: creating precharge cell precharge
|
||||
[pgate/bin_width]: binning pmos tx, target: 0.44999999999999996, found 0.55 x 1 = 0.55
|
||||
[pgate/bin_width]: binning pmos tx, target: 0.55, found 0.55 x 1 = 0.55
|
||||
[precharge_array/__init__]: Creating precharge_array
|
||||
[precharge/__init__]: creating precharge cell precharge_0
|
||||
[pgate/bin_width]: binning pmos tx, target: 0.44999999999999996, found 0.55 x 1 = 0.55
|
||||
[sense_amp_array/__init__]: Creating sense_amp_array
|
||||
[sense_amp/__init__]: Create sense_amp
|
||||
[write_driver_array/__init__]: Creating write_driver_array
|
||||
[write_driver/__init__]: Create write_driver
|
||||
[write_mask_and_array/__init__]: Creating write_mask_and_array
|
||||
[pand2/__init__]: Creating pand2 pand2
|
||||
[pnand2/__init__]: creating pnand2 structure pnand2 with size of 1
|
||||
[pgate/bin_width]: binning nmos tx, target: 0.72, found 0.74 x 1 = 0.74
|
||||
[pgate/bin_width]: binning pmos tx, target: 1.08, found 1.12 x 1 = 1.12
|
||||
[pgate/bin_width]: binning nmos tx, target: 0.74, found 0.74 x 1 = 0.74
|
||||
[pgate/bin_width]: binning nmos tx, target: 0.74, found 0.74 x 1 = 0.74
|
||||
[pgate/bin_width]: binning pmos tx, target: 1.12, found 1.12 x 1 = 1.12
|
||||
[pdriver/__init__]: creating pdriver pdriver
|
||||
[pinv/__init__]: creating pinv structure pinv with size of 2.0
|
||||
[pgate/bin_width]: binning nmos tx, target: 0.36, found 0.36 x 1 = 0.36
|
||||
[pgate/bin_width]: binning pmos tx, target: 0.36, found 0.42 x 1 = 0.42
|
||||
[pinv/determine_tx_mults]: Height avail 4.6100 PMOS 2.2000 NMOS 2.2000
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 2.16, found 1.12 x 2 = 2.24
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 0.72, found 0.74 x 1 = 0.74
|
||||
[pinv/determine_tx_mults]: pinv bin count: 2 pinv bin error: 0.06481481481481488 percent error 0.03240740740740744
|
||||
[pgate/bin_width]: binning nmos tx, target: 0.74, found 0.74 x 1 = 0.74
|
||||
[pgate/bin_width]: binning pmos tx, target: 1.12, found 1.12 x 1 = 1.12
|
||||
[port_data/__init__]: create data port of size 16 with 1 words per row
|
||||
[precharge_array/__init__]: Creating precharge_array_0
|
||||
[precharge/__init__]: creating precharge cell precharge_1
|
||||
[pgate/bin_width]: binning pmos tx, target: 0.44999999999999996, found 0.55 x 1 = 0.55
|
||||
[port_address/__init__]: create data port of cols 16 rows 16
|
||||
[and2_dec/__init__]: Creating and2_dec and2_dec
|
||||
[pinv_dec/__init__]: creating pinv_dec structure pinv_dec with size of 1
|
||||
[pinv/__init__]: creating pinv structure pinv_dec with size of 1
|
||||
[pgate/bin_width]: binning nmos tx, target: 0.36, found 0.36 x 1 = 0.36
|
||||
[pgate/bin_width]: binning pmos tx, target: 1.08, found 1.12 x 1 = 1.12
|
||||
[pgate/bin_width]: binning nmos tx, target: 0.36, found 0.36 x 1 = 0.36
|
||||
[pgate/bin_width]: binning pmos tx, target: 1.12, found 1.12 x 1 = 1.12
|
||||
[pgate/best_bin]: binning nmos tx, target: 0.36, found 1 x 0.36 = 0.36
|
||||
[pgate/best_bin]: binning pmos tx, target: 1.12, found 1 x 1.12 = 1.12
|
||||
[and3_dec/__init__]: Creating and3_dec and3_dec
|
||||
[wordline_driver_array/__init__]: Creating wordline_driver_array
|
||||
[wordline_driver/__init__]: Creating wordline_driver wordline_driver
|
||||
[pinv_dec/__init__]: creating pinv_dec structure pinv_dec_0 with size of 16
|
||||
[pinv/__init__]: creating pinv structure pinv_dec_0 with size of 16
|
||||
[pgate/bin_width]: binning nmos tx, target: 5.76, found 7.0 x 1 = 7.0
|
||||
[pgate/bin_width]: binning pmos tx, target: 17.28, found 7.0 x 3 = 21.0
|
||||
[pgate/bin_width]: binning nmos tx, target: 7.0, found 7.0 x 1 = 7.0
|
||||
[pgate/bin_width]: binning pmos tx, target: 7.0, found 7.0 x 1 = 7.0
|
||||
[replica_bitcell_array/__init__]: Creating replica_bitcell_array 16 x 16
|
||||
[bitcell_base_array/__init__]: Creating bitcell_array 16 x 16
|
||||
[replica_bitcell_1rw_1r/__init__]: Create replica bitcell 1rw+1r object
|
||||
[dummy_bitcell_1rw_1r/__init__]: Create dummy bitcell 1rw+1r object
|
||||
[col_cap_bitcell_1rw_1r/__init__]: Create col_cap bitcell 1rw+1r object
|
||||
[bitcell_base_array/__init__]: Creating dummy_array 1 x 16
|
||||
[bitcell_base_array/__init__]: Creating col_cap_array 1 x 16
|
||||
[bitcell_base_array/__init__]: Creating row_cap_array 20 x 1
|
||||
[row_cap_bitcell_1rw_1r/__init__]: Create row_cap bitcell 1rw+1r object
|
||||
[bitcell_base_array/__init__]: Creating row_cap_array_0 20 x 1
|
||||
[control_logic/__init__]: Creating control_logic_rw
|
||||
[dff_buf/__init__]: Creating dff_buf
|
||||
[pinv/__init__]: creating pinv structure pinv_0 with size of 2
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 2.16, found 1.12 x 2 = 2.24
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 0.72, found 0.74 x 1 = 0.74
|
||||
[pinv/determine_tx_mults]: pinv bin count: 4 pinv bin error: 0.12962962962962976 percent error 0.03240740740740744
|
||||
[pinv/__init__]: creating pinv structure pinv_1 with size of 4
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 4.32, found 1.6499999999999997 x 3 = 4.949999999999999
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 1.44, found 1.68 x 1 = 1.68
|
||||
[pinv/determine_tx_mults]: pinv bin count: 6 pinv bin error: 0.44212962962962954 percent error 0.07368827160493825
|
||||
[pgate/bin_width]: binning nmos tx, target: 1.68, found 1.68 x 1 = 1.68
|
||||
[pgate/bin_width]: binning pmos tx, target: 1.6499999999999997, found 1.65 x 1 = 1.65
|
||||
[dff_buf_array/__init__]: Creating dff_buf_array
|
||||
[dff_buf/__init__]: Creating dff_buf_0
|
||||
[pand2/__init__]: Creating pand2 pand2_0
|
||||
[pnand2/__init__]: creating pnand2 structure pnand2_0 with size of 1
|
||||
[pgate/bin_width]: binning nmos tx, target: 0.72, found 0.74 x 1 = 0.74
|
||||
[pgate/bin_width]: binning pmos tx, target: 1.08, found 1.12 x 1 = 1.12
|
||||
[pdriver/__init__]: creating pdriver pdriver_0
|
||||
[pinv/__init__]: creating pinv structure pinv_2 with size of 12
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 12.959999999999999, found 2.0 x 7 = 14.0
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 4.32, found 1.68 x 3 = 5.04
|
||||
[pinv/determine_tx_mults]: pinv bin count: 8 pinv bin error: 0.6890432098765432 percent error 0.0861304012345679
|
||||
[pgate/bin_width]: binning nmos tx, target: 1.68, found 1.68 x 1 = 1.68
|
||||
[pgate/bin_width]: binning pmos tx, target: 2.0, found 2.0 x 1 = 2.0
|
||||
[pbuf/__init__]: creating pbuf with size of 16
|
||||
[pinv/__init__]: creating pinv structure pinv_3 with size of 16
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 17.28, found 2.0 x 9 = 18.0
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 5.76, found 2.0 x 3 = 6.0
|
||||
[pinv/determine_tx_mults]: pinv bin count: 10 pinv bin error: 0.7723765432098766 percent error 0.07723765432098766
|
||||
[pgate/bin_width]: binning nmos tx, target: 2.0, found 2.0 x 1 = 2.0
|
||||
[pgate/bin_width]: binning pmos tx, target: 2.0, found 2.0 x 1 = 2.0
|
||||
[pdriver/__init__]: creating pdriver pdriver_1
|
||||
[pinv/__init__]: creating pinv structure pinv_4 with size of 1
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 1.08, found 1.12 x 1 = 1.12
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 0.36, found 0.36 x 1 = 0.36
|
||||
[pinv/determine_tx_mults]: pinv bin count: 12 pinv bin error: 0.8094135802469137 percent error 0.0674511316872428
|
||||
[pinv/__init__]: creating pinv structure pinv_5 with size of 1
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 1.08, found 1.12 x 1 = 1.12
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 0.36, found 0.36 x 1 = 0.36
|
||||
[pinv/determine_tx_mults]: pinv bin count: 14 pinv bin error: 0.8464506172839508 percent error 0.06046075837742505
|
||||
[pinv/__init__]: creating pinv structure pinv_6 with size of 4
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 4.32, found 1.6499999999999997 x 3 = 4.949999999999999
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 1.44, found 1.68 x 1 = 1.68
|
||||
[pinv/determine_tx_mults]: pinv bin count: 16 pinv bin error: 1.1589506172839505 percent error 0.07243441358024691
|
||||
[pinv/__init__]: creating pinv structure pinv_7 with size of 13
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 14.04, found 2.0 x 8 = 16.0
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 4.68, found 1.68 x 3 = 5.04
|
||||
[pinv/determine_tx_mults]: pinv bin count: 18 pinv bin error: 1.3754748338081673 percent error 0.07641526854489818
|
||||
[pgate/bin_width]: binning nmos tx, target: 1.68, found 1.68 x 1 = 1.68
|
||||
[pgate/bin_width]: binning pmos tx, target: 2.0, found 2.0 x 1 = 2.0
|
||||
[pinv/__init__]: creating pinv structure pinv_8 with size of 38
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 41.04, found 2.0 x 21 = 42.0
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 13.68, found 2.0 x 7 = 14.0
|
||||
[pinv/determine_tx_mults]: pinv bin count: 20 pinv bin error: 1.4222584595391614 percent error 0.07111292297695807
|
||||
[pgate/bin_width]: binning nmos tx, target: 2.0, found 2.0 x 1 = 2.0
|
||||
[pgate/bin_width]: binning pmos tx, target: 2.0, found 2.0 x 1 = 2.0
|
||||
[pdriver/__init__]: creating pdriver pdriver_2
|
||||
[pinv/__init__]: creating pinv structure pinv_9 with size of 2
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 2.16, found 1.12 x 2 = 2.24
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 0.72, found 0.74 x 1 = 0.74
|
||||
[pinv/determine_tx_mults]: pinv bin count: 22 pinv bin error: 1.4870732743539763 percent error 0.06759423974336255
|
||||
[pinv/__init__]: creating pinv structure pinv_10 with size of 5
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 5.3999999999999995, found 2.0 x 3 = 6.0
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 1.7999999999999998, found 2.0 x 1 = 2.0
|
||||
[pinv/determine_tx_mults]: pinv bin count: 24 pinv bin error: 1.7092954965761986 percent error 0.07122064569067495
|
||||
[pgate/bin_width]: binning nmos tx, target: 2.0, found 2.0 x 1 = 2.0
|
||||
[pgate/bin_width]: binning pmos tx, target: 2.0, found 2.0 x 1 = 2.0
|
||||
[pand3/__init__]: Creating pand3 pand3
|
||||
[pnand3/__init__]: creating pnand3 structure pnand3 with size of 1
|
||||
[pgate/bin_width]: binning nmos tx, target: 0.72, found 0.74 x 1 = 0.74
|
||||
[pgate/bin_width]: binning pmos tx, target: 1.08, found 1.12 x 1 = 1.12
|
||||
[pgate/bin_width]: binning nmos tx, target: 0.74, found 0.74 x 1 = 0.74
|
||||
[pdriver/__init__]: creating pdriver pdriver_3
|
||||
[pinv/__init__]: creating pinv structure pinv_11 with size of 24
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 25.919999999999998, found 2.0 x 13 = 26.0
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 8.64, found 2.0 x 5 = 10.0
|
||||
[pinv/determine_tx_mults]: pinv bin count: 26 pinv bin error: 1.8697893237366925 percent error 0.07191497398987279
|
||||
[pgate/bin_width]: binning nmos tx, target: 2.0, found 2.0 x 1 = 2.0
|
||||
[pgate/bin_width]: binning pmos tx, target: 2.0, found 2.0 x 1 = 2.0
|
||||
[pand3/__init__]: Creating pand3 pand3_0
|
||||
[pdriver/__init__]: creating pdriver pdriver_4
|
||||
[pinv/__init__]: creating pinv structure pinv_12 with size of 16
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 17.28, found 2.0 x 9 = 18.0
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 5.76, found 2.0 x 3 = 6.0
|
||||
[pinv/determine_tx_mults]: pinv bin count: 28 pinv bin error: 1.9531226570700257 percent error 0.06975438060964377
|
||||
[pinv/__init__]: creating pinv structure pinv_13 with size of 1
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 1.08, found 1.12 x 1 = 1.12
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 0.36, found 0.36 x 1 = 0.36
|
||||
[pinv/determine_tx_mults]: pinv bin count: 30 pinv bin error: 1.9901596941070627 percent error 0.06633865647023543
|
||||
[pnand2/__init__]: creating pnand2 structure pnand2_1 with size of 1
|
||||
[pgate/bin_width]: binning nmos tx, target: 0.72, found 0.74 x 1 = 0.74
|
||||
[pgate/bin_width]: binning pmos tx, target: 1.08, found 1.12 x 1 = 1.12
|
||||
[delay_chain/__init__]: creating delay chain [4, 4, 4, 4, 4, 4, 4, 4, 4]
|
||||
[pinv/__init__]: creating pinv structure pinv_14 with size of 1
|
||||
[pinv/determine_tx_mults]: Height avail 4.6100 PMOS 2.2000 NMOS 2.2000
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 1.08, found 1.12 x 1 = 1.12
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 0.36, found 0.36 x 1 = 0.36
|
||||
[pinv/determine_tx_mults]: pinv bin count: 32 pinv bin error: 2.0271967311441 percent error 0.06334989784825312
|
||||
[control_logic/__init__]: Creating control_logic_r
|
||||
[dff_buf_array/__init__]: Creating dff_buf_array_0
|
||||
[pdriver/__init__]: creating pdriver pdriver_5
|
||||
[pinv/__init__]: creating pinv structure pinv_15 with size of 12
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 12.959999999999999, found 2.0 x 7 = 14.0
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 4.32, found 1.68 x 3 = 5.04
|
||||
[pinv/determine_tx_mults]: pinv bin count: 34 pinv bin error: 2.2741103113910133 percent error 0.06688559739385333
|
||||
[pinv/__init__]: creating pinv structure pinv_16 with size of 37
|
||||
[pinv/determine_tx_mults]: Height avail 6.0800 PMOS 2.9350 NMOS 2.9350
|
||||
[pinv/determine_tx_mults]: prebinning pmos tx, target: 39.96, found 2.0 x 20 = 40.0
|
||||
[pinv/determine_tx_mults]: prebinning nmos tx, target: 13.32, found 2.0 x 7 = 14.0
|
||||
[pinv/determine_tx_mults]: pinv bin count: 36 pinv bin error: 2.3261623634430655 percent error 0.06461562120675182
|
||||
[pgate/bin_width]: binning nmos tx, target: 2.0, found 2.0 x 1 = 2.0
|
||||
[pgate/bin_width]: binning pmos tx, target: 2.0, found 2.0 x 1 = 2.0
|
||||
** Submodules: 8.6 seconds
|
||||
** Placement: 0.0 seconds
|
||||
*** Init supply router: 56.2 seconds
|
||||
[supply_hannan_router/route]: Running hannan supply router on vdd and gnd...
|
||||
[supply_hannan_router/retrieve_pins]: Retrieving pins for vdd.
|
||||
[supply_hannan_router/retrieve_pins]: Retrieving pins for gnd.
|
||||
[supply_hannan_router/route]: Building matrix
|
||||
[and4_dec/__init__]: Creating and4_dec and4_dec
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
[globals/get_tool]: Using PEX: /usr/local/bin/magic
|
||||
[globals/get_tool]: Using GDS: /usr/local/bin/magic
|
||||
[bitcell_base_array/__init__]: Creating replica_bitcell_array 4 x 4
|
||||
[replica_bitcell_array/__init__]: Creating replica_bitcell_array 4 x 4
|
||||
[replica_bitcell_array/__init__]: Creating replica_bitcell_array 4 x 4 rbls: [1, 0] left_rbl: None right_rbl: None
|
||||
[bitcell_base_array/__init__]: Creating bitcell_array 4 x 4
|
||||
[bitcell_base_array/__init__]: Creating dummy_array 1 x 4
|
||||
[bitcell_array/__init__]: Creating bitcell_array 4 x 4
|
||||
[bitcell_base_array/__init__]: Creating replica_column 7 x 1
|
||||
|
|
|
|||
Loading…
Reference in New Issue