From 9fd473ce7031bbab45126a1b5d7da4434993f721 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Fri, 20 Nov 2020 01:11:08 -0800 Subject: [PATCH] Fixed issue with selection of column address when checking bitline names. --- compiler/characterizer/delay.py | 2 +- compiler/characterizer/simulation.py | 13 +++++++++---- compiler/options.py | 2 +- compiler/pgates/ptx.py | 4 ++++ 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/compiler/characterizer/delay.py b/compiler/characterizer/delay.py index 5dffcaf8..867b3cdb 100644 --- a/compiler/characterizer/delay.py +++ b/compiler/characterizer/delay.py @@ -1163,7 +1163,7 @@ class delay(simulation): # The inverse address needs to share the same bitlines as the probe address as the trimming will remove all other bitlines # This is only an issue when there is a column mux and the address maps to different bitlines. - column_addr = self.probe_address[:self.sram.col_addr_size] # do not invert this part + column_addr = self.get_column_addr() # do not invert this part inverse_address = "" for c in self.probe_address[self.sram.col_addr_size:]: # invert everything else if c=="0": diff --git a/compiler/characterizer/simulation.py b/compiler/characterizer/simulation.py index af30df9b..f6ee260d 100644 --- a/compiler/characterizer/simulation.py +++ b/compiler/characterizer/simulation.py @@ -403,6 +403,10 @@ class simulation(): pin_names.append("{0}".format("gnd")) return pin_names + def get_column_addr(self): + """Returns column address of probe bit""" + return self.probe_address[:self.sram.col_addr_size] + def add_graph_exclusions(self): """ Exclude portions of SRAM from timing graph which are not relevant @@ -434,11 +438,12 @@ class simulation(): debug.warning("Error occurred while determining SEN name. Can cause faults in simulation.") debug.info(2, "s_en name = {}".format(self.sen_name)) - + + column_addr = self.get_column_addr() bl_name_port, br_name_port = self.get_bl_name(self.graph.all_paths, port) - port_pos = -1 - len(str(self.probe_data)) - len(str(port)) + port_pos = -1 - len(str(column_addr)) - len(str(port)) - if bl_name_port.endswith(str(port) + "_" + str(self.probe_data)): + if bl_name_port.endswith(str(port) + "_" + str(column_addr)): self.bl_name = bl_name_port[:port_pos] + "{}" + bl_name_port[port_pos + len(str(port)):] elif not bl_name_port[port_pos].isdigit(): # single port SRAM case, bl will not be numbered eg bl_0 self.bl_name = bl_name_port @@ -446,7 +451,7 @@ class simulation(): self.bl_name = bl_name_port debug.warning("Error occurred while determining bitline names. Can cause faults in simulation.") - if br_name_port.endswith(str(port) + "_" + str(self.probe_data)): + if br_name_port.endswith(str(port) + "_" + str(column_addr)): self.br_name = br_name_port[:port_pos] + "{}" + br_name_port[port_pos + len(str(port)):] elif not br_name_port[port_pos].isdigit(): # single port SRAM case, bl will not be numbered eg bl_0 self.br_name = br_name_port diff --git a/compiler/options.py b/compiler/options.py index 75cd7a0a..db78a70e 100644 --- a/compiler/options.py +++ b/compiler/options.py @@ -151,7 +151,7 @@ class options(optparse.Values): bitcell_array = "bitcell_array" bitcell = "bitcell" buf_dec = "pbuf" - column_mux_array = "single_level_column_mux_array" + column_mux_array = "column_mux_array" control_logic = "control_logic" decoder = "hierarchical_decoder" delay_chain = "delay_chain" diff --git a/compiler/pgates/ptx.py b/compiler/pgates/ptx.py index ae32e557..b697b9a3 100644 --- a/compiler/pgates/ptx.py +++ b/compiler/pgates/ptx.py @@ -549,3 +549,7 @@ class ptx(design.design): """ self.add_graph_edges(graph, port_nets) + def is_non_inverting(self): + """Return input to output polarity for module""" + + return True