Get it working more

This commit is contained in:
2026-05-24 17:13:20 -07:00
parent 61ee654b18
commit 151643b2ad
3 changed files with 126 additions and 10 deletions

View File

@@ -122,6 +122,8 @@ async def test_sanity(dut):
cocotb.start_soon(Clock(dut.i_clk, CLK_PERIOD, unit="ns").start())
cocotb.start_soon(handle_cache_arrays(dut))
dut.i_cpu_we.value = 0
dut.i_rst.value = Immediate(1)
for _ in range(10):
await RisingEdge(dut.i_clk)
@@ -158,6 +160,8 @@ async def test_clean_eviction(dut):
cocotb.start_soon(handle_writeback(dut))
cocotb.start_soon(handle_bus_interface(dut))
dut.i_cpu_we.value = 0
dut.i_rst.value = Immediate(1)
for _ in range(10):
await RisingEdge(dut.i_clk)
@@ -198,6 +202,8 @@ async def test_eviction(dut):
cocotb.start_soon(handle_writeback(dut))
cocotb.start_soon(handle_bus_interface(dut))
dut.i_cpu_we.value = 0
dut.i_rst.value = Immediate(1)
for _ in range(10):
await RisingEdge(dut.i_clk)
@@ -238,6 +244,8 @@ async def test_request_ownership(dut):
cocotb.start_soon(handle_writeback(dut))
cocotb.start_soon(handle_bus_interface(dut))
dut.i_cpu_we.value = 0
dut.i_rst.value = Immediate(1)
for _ in range(10):
await RisingEdge(dut.i_clk)
@@ -280,6 +288,7 @@ async def test_way_read_thrash(dut):
cocotb.start_soon(handle_writeback(dut))
cocotb.start_soon(handle_bus_interface(dut))
dut.i_cpu_we.value = 0
dut.i_rst.value = Immediate(1)
for _ in range(10):
await RisingEdge(dut.i_clk)
@@ -297,3 +306,97 @@ async def test_way_read_thrash(dut):
await RisingEdge(dut.i_clk)
await Timer(1, "us")
@cocotb.test
async def test_write_waw(dut):
cocotb.start_soon(Clock(dut.i_clk, CLK_PERIOD, unit="ns").start())
cocotb.start_soon(handle_cache_arrays(dut))
cocotb.start_soon(handle_lru_arrays(dut))
cocotb.start_soon(handle_writeback(dut))
cocotb.start_soon(handle_bus_interface(dut))
dut.i_rst.value = Immediate(1)
for _ in range(10):
await RisingEdge(dut.i_clk)
dut.i_rst.value = 0
await RisingEdge(dut.o_rdy)
INDEX = 7
TAG = 0xabcd
# unused tag
dut.i_cpu_tag.value = 0xffff
dut.i_rdy.value = 1
dut.i_cpu_we.value = 1
dut.i_cpu_index.value = INDEX
dut.i_cpu_offset.value = 1
dut.i_cpu_data.value = 0xaa
await RisingEdge(dut.i_clk)
dut.i_cpu_tag.value = TAG
while not dut.o_rdy.value:
await RisingEdge(dut.i_clk)
dut.i_cpu_we.value = 1
dut.i_cpu_index.value = INDEX
dut.i_cpu_offset.value = 2
dut.i_cpu_data.value = 0x55
await RisingEdge(dut.i_clk)
dut.i_cpu_tag.value = TAG
while not dut.o_rdy.value:
await RisingEdge(dut.i_clk)
dut.i_cpu_we.value = 0
await Timer(1, "us")
@cocotb.test
async def test_write_raw(dut):
cocotb.start_soon(Clock(dut.i_clk, CLK_PERIOD, unit="ns").start())
cocotb.start_soon(handle_cache_arrays(dut))
cocotb.start_soon(handle_lru_arrays(dut))
cocotb.start_soon(handle_writeback(dut))
cocotb.start_soon(handle_bus_interface(dut))
dut.i_rst.value = Immediate(1)
for _ in range(10):
await RisingEdge(dut.i_clk)
dut.i_rst.value = 0
await RisingEdge(dut.o_rdy)
INDEX = 7
TAG = 0xabcd
# unused tag
dut.i_cpu_tag.value = 0xffff
dut.i_rdy.value = 1
dut.i_cpu_we.value = 1
dut.i_cpu_index.value = INDEX
dut.i_cpu_offset.value = 1
dut.i_cpu_data.value = 0x41
await RisingEdge(dut.i_clk)
dut.i_cpu_tag.value = TAG
while not dut.o_rdy.value:
await RisingEdge(dut.i_clk)
dut.i_cpu_we.value = 0
dut.i_cpu_index.value = INDEX
dut.i_cpu_offset.value = 1
await RisingEdge(dut.i_clk)
dut.i_cpu_tag.value = TAG
while not dut.o_rdy.value:
await RisingEdge(dut.i_clk)
dut.i_cpu_we.value = 0
await Timer(1, "us")