From 9ec663e0b1bb03c49ddad1aa4e32215c1143ece3 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Sat, 7 Sep 2019 20:20:44 -0700 Subject: [PATCH] Write all write ports first cycle. Don't check feedthru. --- compiler/characterizer/functional.py | 45 +++++++--------------------- 1 file changed, 11 insertions(+), 34 deletions(-) diff --git a/compiler/characterizer/functional.py b/compiler/characterizer/functional.py index 50c4813b..50d55d59 100644 --- a/compiler/characterizer/functional.py +++ b/compiler/characterizer/functional.py @@ -107,41 +107,18 @@ class functional(simulation): comment = self.gen_cycle_comment("noop", "0"*self.word_size, "0"*self.addr_size, "0"*self.num_wmasks, 0, self.t_current) self.add_noop_all_ports(comment) - # 1. Write at least once. For multiport, it ensures that - # feedthru reads also work. + # 1. Write all the write ports first to seed a bunch of locations. + for port in self.write_ports: + addr = self.gen_addr() + word = self.gen_data() + comment = self.gen_cycle_comment("write", word, addr, "1"*self.num_wmasks, port, self.t_current) + self.add_write_one_port(comment, addr, word, "1"*self.num_wmasks, port) + self.stored_words[addr] = word - # Port 0 may not be a write port, so find the first write - # port. - first_write_port = self.write_ports[0] - addr = self.gen_addr() - word = self.gen_data() - comment = self.gen_cycle_comment("write", word, addr, "1"*self.num_wmasks, first_write_port, self.t_current) - self.add_write_one_port(comment, addr, word, "1"*self.num_wmasks, first_write_port) - self.stored_words[addr] = word - - # The read port should not be the same as the write port being written. - other_read_ports = copy.copy(self.read_ports) - try: - other_read_ports.remove(first_write_port) - except: - pass - # If we have one, check the feedthru read worked. - if len(other_read_ports)>0: - first_read_port = other_read_ports[0] - comment = self.gen_cycle_comment("read (feedthru)", word, addr, "0"*self.num_wmasks, first_read_port, self.t_current) - self.add_read_one_port(comment, addr, first_read_port) - self.add_read_check(word, first_read_port) - - # All other ports are noops. - other_ports = copy.copy(self.all_ports) - other_ports.remove(first_write_port) - try: - other_ports.remove(first_read_port) - except: - pass - - for port in other_ports: - self.add_noop_one_port(port) + # All other read-only ports are noops. + for port in self.read_ports: + if port not in self.write_ports: + self.add_noop_one_port(port) self.cycle_times.append(self.t_current) self.t_current += self.period self.check_lengths()