2011年3月15日 星期二

針對 test fixture 的再進化

我們剛剛寫好的 test fixture 有什麼缺點 ?

缺點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 要為同一個

沒有留言:

張貼留言