mirror of https://github.com/VLSIDA/OpenRAM.git
Added an exclusion for unused column mux paths to prevent multiple outputs paths in graph.
This commit is contained in:
parent
4d22201055
commit
7df36a916b
|
|
@ -532,7 +532,11 @@ class simulation():
|
|||
|
||||
self.sram.clear_exclude_bits() # Removes previous bit exclusions
|
||||
self.sram.graph_exclude_bits(self.wordline_row, self.bitline_column)
|
||||
|
||||
port=0 #FIXME, port_data requires a port specification, assuming single port for now
|
||||
if self.words_per_row > 1:
|
||||
self.sram.graph_exclude_column_mux(self.bitline_column, port)
|
||||
|
||||
debug.info(0, "self.bitline_column={}".format(self.bitline_column))
|
||||
# Generate new graph every analysis as edges might change depending on test bit
|
||||
self.graph = graph_util.timing_graph()
|
||||
self.sram_instance_name = "X{}".format(self.sram.name)
|
||||
|
|
@ -554,6 +558,7 @@ class simulation():
|
|||
"""
|
||||
net_found = False
|
||||
for path in paths:
|
||||
debug.info(0, "path={}".format(path))
|
||||
aliases = self.sram.find_aliases(self.sram_instance_name, self.pins, path, internal_net, mod, exclusion_set)
|
||||
if net_found and len(aliases) >= 1:
|
||||
debug.error('Found multiple paths with {} net.'.format(internal_net), 1)
|
||||
|
|
|
|||
|
|
@ -1105,3 +1105,8 @@ class bank(design.design):
|
|||
"""
|
||||
self.bitcell_array.clear_exclude_bits()
|
||||
|
||||
def graph_exclude_column_mux(self, column_include_num, port):
|
||||
"""
|
||||
Excludes all columns muxes unrelated to the target bit being simulated.
|
||||
"""
|
||||
self.port_data[port].graph_exclude_column_mux(column_include_num)
|
||||
|
|
|
|||
|
|
@ -230,3 +230,16 @@ class column_mux_array(design.design):
|
|||
to_layer=self.sel_layer,
|
||||
offset=br_out_offset_begin,
|
||||
directions=self.via_directions)
|
||||
|
||||
def graph_exclude_columns(self, column_include_num):
|
||||
"""
|
||||
Excludes all columns muxes unrelated to the target bit being simulated.
|
||||
Each mux in mux_inst corresponds to respective column in bitcell array.
|
||||
"""
|
||||
#stop = 34
|
||||
for i in range(len(self.mux_inst)):
|
||||
if i != column_include_num:
|
||||
self.graph_inst_exclude.add(self.mux_inst[i])
|
||||
debug.info(0, "Excluded mux {}".format(i))
|
||||
#if i == stop:
|
||||
# break
|
||||
|
|
@ -856,3 +856,10 @@ class port_data(design.design):
|
|||
"""Precharge adds a loop between bitlines, can be excluded to reduce complexity"""
|
||||
if self.precharge_array_inst:
|
||||
self.graph_inst_exclude.add(self.precharge_array_inst)
|
||||
|
||||
def graph_exclude_column_mux(self, column_include_num):
|
||||
"""
|
||||
Excludes all columns muxes unrelated to the target bit being simulated.
|
||||
"""
|
||||
if self.column_mux_array:
|
||||
self.column_mux_array.graph_exclude_columns(column_include_num)
|
||||
|
|
@ -637,7 +637,7 @@ class sram_1bank(sram_base):
|
|||
# Insts located in control logic, exclusion function called here
|
||||
for inst in self.control_logic_insts:
|
||||
inst.mod.graph_exclude_dffs()
|
||||
|
||||
|
||||
def get_cell_name(self, inst_name, row, col):
|
||||
"""
|
||||
Gets the spice name of the target bitcell.
|
||||
|
|
|
|||
|
|
@ -773,3 +773,10 @@ class sram_base(design, verilog, lef):
|
|||
Clears the bit exclusions
|
||||
"""
|
||||
self.bank.clear_exclude_bits()
|
||||
|
||||
def graph_exclude_column_mux(self, column_include_num, port):
|
||||
"""
|
||||
Excludes all columns muxes unrelated to the target bit being simulated.
|
||||
"""
|
||||
self.bank.graph_exclude_column_mux(column_include_num, port)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue