缺點1. 我們所測試出來的波形,系統無法自行判斷是正確或是錯誤的波形,得要由人類的眼睛來判斷。
缺點2. 輸入波形無法自動產生
針對缺點1之解決方式
我們使用行為模式(behavior model)來撰寫 testfixture,其目的是讓 testfixture 能自動產生 x+y 的半加器輸出,如下圖所示:
我們的目的是希望在 testfixture 中撰寫一個 behavior 模式之 Half Adder,此 Half Adder 將產生 coutY 及 sumY 之輸出,程式碼如下:
reg sumY, coutY; // test result
// self calculate coutY, sumY
always @ ( a or b)
begin
{coutY, sumY} = a+b;
end
並以此輸出來與原始 ha_gate/ha_rtl/ha_cont.v 中電路所產生之輸出作比對。
reg testok; // 0 == error, 1 == testok;
// compare
always @ ( coutX or sumX )
begin
if ( coutX == coutY && sumX == sumY)
testok=1;
else
testok=0;
end
我們可以觀察 testok 的波形,當 testok == 1 時,我們的電路輸出與自動產生之電路輸出是一致的,如下圖所示。
萬一 testok == 0 時,兩者不一致,運算有錯,必須進行除錯。下圖是一個「故意寫錯」的例子,我們可以發現 {coutY, sumY} = b;,此時 testok 的值會有出現 0 的狀態,這表示它有問題了。
練習:將你之前所完成之 full adder testfixture 加上自我測試程式以自動偵測結果是否正確。
針對缺點2之解決方式
a. 定義一個 clock 訊號源
b. 利用 clock 訊號源來產生訊號
作業2:請使用
a. gate level 之寫法
b. always 之寫法
來撰寫 4 位加/減法器電路,電路圖在 ftp://163.26.229.6/VLSI/addsub.pdf
請注意:所使用的 test fixture 要為同一個
沒有留言:
張貼留言