2015-12-09 21 views
-2

我被問及如下問題。查找內存中的錯誤

在內存中有錯誤。該缺陷是,描述如下:

通過在位置寫,該值在位置以及在位置更新。但寫在第6位置是工作正常

所以,當我們從第6個位置讀取位置覆蓋的值出現。

你會如何發現這個錯誤?

我的方法描述如下:

  1. 寫的所有的位置,'hFF
  2. 然後,在每個位置應用的序列read - write - read(初始read必須給'hFF,此後write每個位置與它自己的地址,然後再次read),從位置開始0
  3. 當我們到達第6個位置和讀取命令,我們將得到損壞的值(由位置4更新),我們會發現一個錯誤。

有沒有更好的解決方案來找到這個錯誤?

+1

設計一個能夠捕獲已知錯誤的測試非常簡單。真正的問題在於捕捉一個你不知道的bug。 –

+0

是@ dave_59我同意你的意見。真正的問題是找到未知的錯誤,但這種類型的問題通常在訪談中被要求檢查驗證和邏輯能力以及解決候選人問題的方法。我在這裏提出這個問題'因爲我沒有得到驗證內存的機會,所以只是想知道,有沒有其他方法來解決這種錯誤? –

回答

0

大概,您正在尋找檢查交易/數據的有效性。這是我將要做的:爲每個內存位置編寫斷言,以檢查SystemVerilog中的事務是否有效,並通過簡單的直通測試來執行此操作:

(這是一個非常簡化的AMBA4 AHB示例總線協議):用於NUM_MEMORY_LOCATION存儲器位置,如果當前事務的地址不是的位置:

(它具有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 

上面斷言描述檢查整個存儲器與存儲器指定的數據,斷言/檢查數據是否未更改。如果它改變了,那麼給出關於這個斷言/檢查的錯誤。

您可以運行一個測試,只是通過R/W遍歷每個內存位置。當測試試圖寫入第4個位置時,由於此錯誤觸發了第6個位置的斷言/檢查,所以第6個位置檢查並在應該更改時更改其值。它報告一個錯誤。讓我知道什麼不清楚。

+0

這是一個非常粗略的斷言,我沒有運行模擬來證明它是否會因爲常見的AHB事務而失敗。但你有斷言的意圖。這是非常強大的功能,並不斷檢查事情的行爲方式,不管你是否要檢查。 – TyL