nutshell-cache-verification/tests/test_directed.py

42 lines
1.5 KiB
Python

from base_test import *
from generator.crv import CacheCRVGenerator
from utils.common import mmio_addr
@toffee_test.testcase
async def test_mask_and_conflict_directed(start_func):
env = await start_func(mem_latency=(0, 3))
gen = CacheCRVGenerator(seed=0xD1)
for scenario in [gen.mask_corners(), gen.same_set_conflict(index=9, tags=7)]:
await env.run_txns(scenario.txns)
env.scoreboard.assert_drained()
@toffee_test.testcase
async def test_mmio_decode_windows(start_func):
env = await start_func(mmio_latency=(1, 3))
scenario = CacheCRVGenerator(seed=0xD2).mmio_window()
await env.run_txns(scenario.txns)
env.scoreboard.assert_drained()
@toffee_test.testcase
async def test_mmio_second_window_is_uncached(start_func):
env = await start_func(mmio_latency=(0, 1))
gen = CacheCRVGenerator(seed=0xD3)
addr = mmio_addr("b", 0x118)
first = 0x1111_2222_3333_4444
second = 0xAAAA_BBBB_CCCC_DDDD
env.shared_mmio.write_word(addr, first, 0xFF)
env.scoreboard.oracle.mmio.write_word(addr, first, 0xFF)
await env.run_txns([gen.read(addr)])
# External device-side mutation between reads. Correct MMIO behavior must
# observe this new value; an erroneous cached 0x4...-0x7... decode returns
# the stale first value and is killed by the scoreboard.
env.shared_mmio.write_word(addr, second, 0xFF)
env.scoreboard.oracle.mmio.write_word(addr, second, 0xFF)
await env.run_txns([gen.read(addr)])
env.scoreboard.assert_drained()