在Memory中找到一个错误

时间:2015-12-09 12:26:11

标签: verilog system-verilog

我被问到如下问题。

内存中有错误。该错误描述如下:

  

通过在第4个位置书写,该值会在第4个位置以及第6个位置更新。但是在 6th 位置写作正常工作

     

因此,当我们从第6个位置读取时,会出现覆盖值。

您如何找到此错误?

我的方法如下所述:

  1. 使用'hFF写下所有位置。
  2. 然后应用序列read - write - read(初始read必须提供'hFF,此后write每个位置都有自己的地址,然后再次read位置,从位置0开始。
  3. 当我们到达第6个位置并且在读取命令期间,我们将获得损坏的值(按位置4更新),我们将发现错误。
  4. 找到这个错误有更好的解决方案吗?

1 个答案:

答案 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个位置检查并在应该更改时发现其值已更改。它报告错误。让我知道任何不清楚的事情。