From 470317eaa404a70f28103140531edb7f7925df6b Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Mon, 21 Jun 2021 17:20:25 -0700 Subject: [PATCH] Changed bitcell exclusion to instead exclude array instances to prevent issues of module exclusion affecting other modules. --- compiler/characterizer/simulation.py | 4 ++-- compiler/modules/global_bitcell_array.py | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/compiler/characterizer/simulation.py b/compiler/characterizer/simulation.py index 6c357c99..258302a7 100644 --- a/compiler/characterizer/simulation.py +++ b/compiler/characterizer/simulation.py @@ -473,7 +473,6 @@ class simulation(): if not OPTS.use_pex or (OPTS.use_pex and OPTS.pex_exe[0] == "calibre"): self.graph.get_all_paths('{}{}'.format("clk", port), '{}{}_{}'.format(self.dout_name, port, self.probe_data)) - sen_with_port = self.get_sen_name(self.graph.all_paths) if sen_with_port.endswith(str(port)): self.sen_name = sen_with_port[:-len(str(port))] @@ -530,9 +529,10 @@ class simulation(): Creates timing graph to generate the timing paths for the SRAM output. """ + #Make exclusions dependent on the bit being tested. 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 + port=self.read_ports[0] #FIXME, port_data requires a port specification, assuming single port for now if self.words_per_row > 1: self.sram.graph_clear_column_mux(port) self.sram.graph_exclude_column_mux(self.bitline_column, port) diff --git a/compiler/modules/global_bitcell_array.py b/compiler/modules/global_bitcell_array.py index dbd56e35..bd1c243b 100644 --- a/compiler/modules/global_bitcell_array.py +++ b/compiler/modules/global_bitcell_array.py @@ -296,12 +296,12 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): # We must also translate the global array column number to the local array column number local_col = targ_col - self.col_offsets[i - 1] - for mod in self.local_mods: + for mod, inst in zip(self.local_mods, self.local_insts): if mod == local_array: mod.graph_exclude_bits(targ_row, local_col) else: - # Otherwise, we exclude ALL of the rows/columns - mod.graph_exclude_bits() + # Otherwise, exclude the local array inst + self.graph_inst_exclude.add(inst) def graph_exclude_replica_col_bits(self): """ @@ -338,6 +338,7 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): """ for mod in self.local_mods: mod.clear_exclude_bits() + self.init_graph_params() def graph_exclude_dffs(self): """Exclude dffs from graph as they do not represent critical path"""