Verilog 在内存中查找错误

Verilog 在内存中查找错误,verilog,system-verilog,Verilog,System Verilog,我被问到一个问题如下 内存中有一个bug。错误如下所述: 通过在第四个位置写入,值在第四个位置以及第六个位置更新。但在第六个地点写作效果不错 所以,当我们从第6个位置读取时,会出现覆盖值 你如何找到这个bug 我的方法如下所述: 用“hFF”写入所有位置。 然后应用一个序列读-写-读初始读必须给出“hFF”,然后用自己的地址写入每个位置,然后从位置0开始在每个位置再次读取。 当我们到达第6个位置时,在read命令期间,我们将得到位置4更新的损坏值,我们将发现一个bug。 是否有更好的解决方案来查

我被问到一个问题如下

内存中有一个bug。错误如下所述:

通过在第四个位置写入,值在第四个位置以及第六个位置更新。但在第六个地点写作效果不错

所以,当我们从第6个位置读取时,会出现覆盖值

你如何找到这个bug

我的方法如下所述:

用“hFF”写入所有位置。 然后应用一个序列读-写-读初始读必须给出“hFF”,然后用自己的地址写入每个位置,然后从位置0开始在每个位置再次读取。 当我们到达第6个位置时,在read命令期间,我们将得到位置4更新的损坏值,我们将发现一个bug。
是否有更好的解决方案来查找此错误?

您可能正在寻找检查事务/数据的有效性。这就是我要做的:为每个内存位置编写断言,以检查事务在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 MEMORY locations,如果当前事务的地址不是指定的数据位置,则断言/检查数据是否未更改。如果更改了,则给出有关此断言/检查的错误


您可以通过R/W遍历内存的每个位置来运行测试。当测试尝试写入第四个位置时,因为此错误会触发对第六个位置的断言/检查,所以第六个位置会检查并找出它在应该更改时更改的值。它报告了一个错误。让我知道任何不清楚的地方。

设计一个捕获您已经知道的bug的测试很容易。真正的问题是捕捉到一个你不知道的bug是的@dave_59我同意你的看法。真正的问题是找到未知的bug,但这类问题通常在面试中提出,以检查候选人的验证能力、逻辑能力和解决问题的方法。我在这里提出了这个问题,因为我没有机会验证内存,所以我只想知道,有没有其他方法可以解决这种错误?这是一个非常粗略的断言,我没有运行模拟来证明对于普通AHB事务它是否会失败。但你有主张的意图。这是一个非常强大的功能,无论你是否想检查,它都会按照你想要的方式不断检查。