test/test_axi: split reads/writes generators
This commit is contained in:
parent
95cb7cdba5
commit
c15c47497a
|
@ -25,9 +25,7 @@ class TestAXI(unittest.TestCase):
|
||||||
class Read(Access):
|
class Read(Access):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def writes_generator(axi_port, writes):
|
def writes_cmd_data_generator(axi_port, writes):
|
||||||
self.writes_id_errors = 0
|
|
||||||
yield axi_port.b.ready.eq(1) # always accepting write response
|
|
||||||
for write in writes:
|
for write in writes:
|
||||||
# send command
|
# send command
|
||||||
yield axi_port.aw.valid.eq(1)
|
yield axi_port.aw.valid.eq(1)
|
||||||
|
@ -45,17 +43,19 @@ class TestAXI(unittest.TestCase):
|
||||||
while (yield axi_port.w.ready) == 0:
|
while (yield axi_port.w.ready) == 0:
|
||||||
yield
|
yield
|
||||||
yield axi_port.w.valid.eq(0)
|
yield axi_port.w.valid.eq(0)
|
||||||
# wait response
|
|
||||||
|
def writes_response_generator(axi_port, writes):
|
||||||
|
self.writes_id_errors = 0
|
||||||
|
yield axi_port.b.ready.eq(1) # always accepting write response
|
||||||
|
for write in writes:
|
||||||
|
# wait response
|
||||||
while (yield axi_port.b.valid) == 0:
|
while (yield axi_port.b.valid) == 0:
|
||||||
yield
|
yield
|
||||||
if (yield axi_port.b.id) != write.id:
|
if (yield axi_port.b.id) != write.id:
|
||||||
self.writes_id_errors += 1
|
self.writes_id_errors += 1
|
||||||
yield
|
yield
|
||||||
|
|
||||||
def reads_generator(axi_port, reads):
|
def reads_cmd_generator(axi_port, reads):
|
||||||
self.reads_data_errors = 0
|
|
||||||
self.reads_id_errors = 0
|
|
||||||
yield axi_port.r.ready.eq(1) # always accepting read response
|
|
||||||
for read in reads:
|
for read in reads:
|
||||||
# send command
|
# send command
|
||||||
yield axi_port.ar.valid.eq(1)
|
yield axi_port.ar.valid.eq(1)
|
||||||
|
@ -66,6 +66,12 @@ class TestAXI(unittest.TestCase):
|
||||||
yield
|
yield
|
||||||
yield axi_port.ar.valid.eq(0)
|
yield axi_port.ar.valid.eq(0)
|
||||||
yield
|
yield
|
||||||
|
|
||||||
|
def reads_response_data_generator(axi_port, reads):
|
||||||
|
self.reads_data_errors = 0
|
||||||
|
self.reads_id_errors = 0
|
||||||
|
yield axi_port.r.ready.eq(1) # always accepting read response
|
||||||
|
for read in reads:
|
||||||
# wait data / response
|
# wait data / response
|
||||||
while (yield axi_port.r.valid) == 0:
|
while (yield axi_port.r.valid) == 0:
|
||||||
yield
|
yield
|
||||||
|
@ -85,24 +91,30 @@ class TestAXI(unittest.TestCase):
|
||||||
prng = random.Random(42)
|
prng = random.Random(42)
|
||||||
writes = []
|
writes = []
|
||||||
for i in range(64):
|
for i in range(64):
|
||||||
|
# incrementing addr, random data &id
|
||||||
writes.append(Write(i, prng.randrange(2**32), prng.randrange(2**8)))
|
writes.append(Write(i, prng.randrange(2**32), prng.randrange(2**8)))
|
||||||
|
# incrementing addr, data & id (debug)
|
||||||
|
#writes.append(Write(i, i, i))
|
||||||
reads = []
|
reads = []
|
||||||
for i in range(64): # dummy reads while content not yet written
|
for i in range(64): # dummy reads while content not yet written
|
||||||
reads.append(Read(64, 0x00000000, 0x00))
|
reads.append(Read(64, 0x00000000, 0x00))
|
||||||
for i in range(64):
|
for i in range(64):
|
||||||
reads.append(Read(i, writes[i].data, prng.randrange(2**8)))
|
# incrementing addr, written data, random id
|
||||||
|
reads.append(Read(i, writes[i].data, prng.randrange(2**8)))
|
||||||
|
# incrementing addr, written data, incrementing id (debug)
|
||||||
|
#reads.append(Read(i, writes[i].data, i))
|
||||||
|
|
||||||
# simulation
|
# simulation
|
||||||
generators = [
|
generators = [
|
||||||
writes_generator(axi_port, writes),
|
writes_cmd_data_generator(axi_port, writes),
|
||||||
reads_generator(axi_port, reads),
|
writes_response_generator(axi_port, writes),
|
||||||
|
reads_cmd_generator(axi_port, reads),
|
||||||
|
reads_response_data_generator(axi_port, reads),
|
||||||
mem.read_handler(dram_port),
|
mem.read_handler(dram_port),
|
||||||
mem.write_handler(dram_port)
|
mem.write_handler(dram_port)
|
||||||
]
|
]
|
||||||
run_simulation(dut, generators, vcd_name="axi2native.vcd")
|
run_simulation(dut, generators, vcd_name="axi2native.vcd")
|
||||||
|
#mem.show_content()
|
||||||
mem.show_content()
|
|
||||||
|
|
||||||
self.assertEqual(self.writes_id_errors, 0)
|
self.assertEqual(self.writes_id_errors, 0)
|
||||||
self.assertEqual(self.reads_data_errors, 0)
|
self.assertEqual(self.reads_data_errors, 0)
|
||||||
self.assertEqual(self.reads_id_errors, 0)
|
self.assertEqual(self.reads_id_errors, 0)
|
||||||
|
|
Loading…
Reference in New Issue