// RTL Levl Code //ha_rtl.v module half_adder(x, y, Sum, Cout); input x, y; output Sum, Cout; reg Sum, Cout; // Circuit Description always @ (x or y) {Cout,Sum} = x+y; endmodule | // Gate Level Code //ha_gate.v module half_adder(x, y, Sum, Cout); input x, y; output Sum, Cout; // Circuit Description xor xor0(Sum, x, y); and and0(Cout, x, y); endmodule |
上面左邊的程式碼是告訴我們以 RTL 方式撰寫出來的 code,現在我們希望能將寫完的程式進行模擬,請執行:
cver ha_rtl.v test_ha.v \Enter
此時我們可以看到
1. $monitor 輸出與之前 ha_gate.v 相同
2. testha.dmp 亦相同
使用 continuous assignment 來撰寫 half adder:
module half_adder(x, y, s, c);
input x, y;
output s, c;
wire x, y;
wire s, c;
assign {c, s} = x + y;
endmodule
上面的例子是使用 assign 語法 (又稱為 continuous assignment) 來進行 half adder 的設計。
小結:在這三個半加器的例子中,我們使用了同一個 test fixture 來針對我們所寫的三個不同語法之半加器進行測試,而且測試後之結果均一模一樣。
沒有留言:
張貼留言