Write all write ports first cycle. Don't check feedthru.

This commit is contained in:
Matt Guthaus 2019-09-07 20:20:44 -07:00
parent 35a8dd2eec
commit 9ec663e0b1
1 changed files with 11 additions and 34 deletions

View File

@ -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()