1. 如何證明我們所寫的半加器工作正確 ?
在 simulation command 的部份,我們需要針對半加器的動作來進行完整測試,請問什麼是半加器的完整測試 ? 要判別一個半加器是否完整動作,最簡單的方法是把真值表上的每一列都模擬一次,如果輸出/入之狀態完全符合真值表,則我們可以確認此電路工作正常。
x y | Sum Cout
-----+-----------
0 0 | 0 0
0 1 | 1 0
1 0 | 1 0
1 1 | 0 1
將全部可能的輸入訊號都跑一次模擬並檢查模擬結果是否正確,若全部正確的話,我們可以假設電路設計是對的。
2. 如何撰寫 test fixture (測試程式)
2.1 什麼是 test fixture ?
當我們寫完 verilog 電路後,我們必須證明它是對的,因此我們要寫 test fixture 來針對我們所寫的 verilog 程式進行測試。
2.2 test fixture 的內容
一個 test fixture 就是一個 verilog module,以半加器 test fixture 為例,其語法大致如下:
module test_ha;
reg definition -> 暫存器定義
wire definition -> 線定義
other definition -> 其它定義
half_adder ha0 () -> 呼叫我們要進行測試的電路
initial begin -> 開始進行波形輸入
$dumpvars; -> 產生 gtkwave 語法
$dumpfile("testha.dmp"); -> 將波形以 VCD 格式存在 testha.dmp 檔中,
testha.dmp 可照自己的需求改名字
simulation command 模擬指令,以下特別說明!!
$dumpall; -> 紀錄所有訊號
$dumpflush; -> 必要
#10 $finish; -> 在 10 個時間單位後結束模擬
end -> 結束 initial begin
endmodule
因此一個完整的半加器 test fixture 如下,我們將其存為 test_ha.v
module test_ha;
reg a, b;
wire sumX, coutX;
half_adder ha0(a, b, sumX, coutX);
initial begin
$dumpvars;
$dumpfile("testha.dmp");
#0 a=0;
b=0;
#10 a=0;
b=1;
#10 a=1;
b=0;
#10 a=1;
b=1;
$dumpall;
$dumpflush;
#10 $finish;
end
endmodule
2.3 進行 verilog 測試模擬
請執行
cver ha_gate.v test_ha.v \Enter
理論上應該輸出如下:
GPLCVER_2.12a of 05/16/07 (Linux-elf).
Copyright (c) 1991-2007 Pragmatic C Software Corp.
All Rights reserved. Licensed under the GNU General Public License (GPL).
See the 'COPYING' file for details. NO WARRANTY provided.
Today is Mon Mar 7 11:25:30 2011.
Compiling source file "ha_gate.v"
Compiling source file "test_ha.v"
Highest level modules:
test_ha
Halted at location **test_ha.v(25) time 40 from call to $finish.
我們會發現沒有 error、沒有 warning,而且會有個檔案叫 testha.dmp,接下來就可以用 GTKwave 觀察波形了。
3. 使用 GTKwave
請執行
gtkwave testha.dmp
來載入模擬波形檔,並觀察我們所寫的變數 (reg, wire .. 之類) 的輸出,若想將目前觀察狀態留待下次載入,請選擇
File -> Write Save File
存檔為 testha.sav,下次載入 gtkwave 時請執行:
gtkwave testha.dmp testha.sav
即可載入前一次觀察狀態。
2.3 進行 verilog 測試模擬
請執行
cver ha_gate.v test_ha.v \Enter
理論上應該輸出如下:
GPLCVER_2.12a of 05/16/07 (Linux-elf).
Copyright (c) 1991-2007 Pragmatic C Software Corp.
All Rights reserved. Licensed under the GNU General Public License (GPL).
See the 'COPYING' file for details. NO WARRANTY provided.
Today is Mon Mar 7 11:25:30 2011.
Compiling source file "ha_gate.v"
Compiling source file "test_ha.v"
Highest level modules:
test_ha
Halted at location **test_ha.v(25) time 40 from call to $finish.
我們會發現沒有 error、沒有 warning,而且會有個檔案叫 testha.dmp,接下來就可以用 GTKwave 觀察波形了。
3. 使用 GTKwave
請執行
gtkwave testha.dmp
來載入模擬波形檔,並觀察我們所寫的變數 (reg, wire .. 之類) 的輸出,若想將目前觀察狀態留待下次載入,請選擇
File -> Write Save File
存檔為 testha.sav,下次載入 gtkwave 時請執行:
gtkwave testha.dmp testha.sav
即可載入前一次觀察狀態。
作業 1. 畫 Full Adder 的電路圖
以 Gate Level 寫 Verilog 程式
撰寫 test fixture,並跑模擬,可存檔檔名為 testfa.dmp
列印波形
沒有留言:
張貼留言