ModelSim-AlteraでFPGA入門(2)

前回に引き続き,今回は半加算器(half adder)を2つ使って,全加算器(full adder)を作成する.

今回はfaddrというプロジェクトを作成する.
faddrのプロジェクトフォルダに前回作成したhaddr.vをコピーし,[Project]->[Add/Remove Files in Project]からfaddrのプロジェクトにhaddr.vを追加する.
 
[File]->[New]から[Design Files]タブのVerilog HDL Fileを選択,faddr.vとして保存する.
faddr.vの内容は以下のようにする.

module faddr(clk,in_A,in_B,cin,out,cout);
input clk,in_A,in_B,cin;
output reg out,cout;
wire out1,cout1;
wire out2,cout2;
haddr haddr1(clk,in_A,in_B,out1,cout1);
haddr haddr2(clk,out1,cin,out2,cout2);
always @(posedge clk)begin
out<=out2;
cout<=cout1|cout2;
end
endmodule

 
[Processing]->[Start]-[Start Analysis & Synthesis]でコンパイルを行う.
コンパイルが通ったら,[Tools]->[Run Simulation Tools]->[RTL Simulation]でシミュレータを起動.
前回と同様に,入力波形を作成する.
[Library]タブをworkを展開し,faddrを右クリックしてCreate Waveを選択.
[Wave]フォームに各信号が表示されるので,入力関係のみ適当にセット.

今回はこのようにした.
真理値表の全パターンを網羅するために,in_Aの周期を400[ns],in_Bを200[ns],cinを100[ns]とした.
なお,clkは周期短めにして,結果が即時反映されるようにしている.

前回と同様,[File]->[Export]->[Waveform]からVerilog Testbenchを選択し,tb.vとして保存する.
終わったらModelSimを閉じる.
 
[Project]->[Add/Remove Files in Project]からtb.vを追加する.
tb.vを開き,「wire reg 変数名;」を「wire 変数名;」に書き換える.
その後,[Processing]->[Start]-[Start Analysis & Synthesis]でコンパイルを行う.

[Assignments]->[Settings…]を開き,[EDA Tool Settings]->[Simulation]の中にあるNativeLink Settingsを設定する.
詳しくは前回参照.
再びModelSimを起動すると,こうなった.たぶん正しいはず.

ちょくちょく変なふうになってるのは,haddr2の入力はhaddr1の入力なのに同じclkを使ってるからかな.
クロックを細かくしたら変なところの幅が狭まったので,たぶんそうでしょう.

なお,キャリー予測とかは面倒なので行わない.