2011年3月15日 星期二

RTL level 的程式寫法

請將 half adder 以 rtl 方式撰寫出來

// 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 來針對我們所寫的三個不同語法之半加器進行測試,而且測試後之結果均一模一樣。


沒有留言:

張貼留言