我被问到如下问题。
内存中有错误。该错误描述如下:
通过在第4个位置书写,该值会在第4个位置以及第6个位置更新。但是在 6th 位置写作正常工作。
因此,当我们从第6个位置读取时,会出现覆盖值。
您如何找到此错误?
我的方法如下所述:
'hFF
写下所有位置。read - write - read
(初始read
必须提供'hFF
,此后write
每个位置都有自己的地址,然后再次read
位置,从位置0
开始。 找到这个错误有更好的解决方案吗?
答案 0 :(得分:0)
据推测,您正在寻找检查交易/数据的有效性。这就是我要做的事情:为内存的每个位置编写断言,以检查事务在SystemVerilog中是否有效,并进行简单的步行测试来运用它:
(这是AMBA4 AHB总线协议的一个极其简化的例子):
(它使用具有NUM_MEMORY_LOCATION个内存位置的内存检查整个内存)
generator
genvar i;
for(i=0;i<NUM_MEMORY_LOCATION; i++)
begin
assert property (if(u_memory.HADDR!=i) u_memory.data[i]==$past(u_memory.data[i]) )
end
endgenerate
上述断言描述:对于NUM_MEMORY_LOCATION个内存位置,如果当前事务的地址不是指定数据的位置,则断言/检查数据是否未更改。如果它改变了,那么就这个断言/检查给出一个错误。
您可以通过R / W直接浏览每个内存位置来运行测试。当测试尝试写入第4个位置时,因为此错误触发第6个位置的断言/检查,第6个位置检查并在应该更改时发现其值已更改。它报告错误。让我知道任何不清楚的事情。