modelSimの使い方とmodule化

こんにちはKeymaleです。
今回はmodelSimの使い方とverilogにおけるモデュール構造の
使い方について説明します。

Module化

サブモジュールには前回記事で作ったカウンタ回路を使います。counter.vという名前でファイルを保存しておいてください。
トップモジュールには下記の内容を記載してください。


module keymale(
input clk
);
wire out = 0;
counter counter1(
    .clk    (clk),
    .reset  (0),
    .out    (out)
);
endmodule

トップモジュール名はkeymaleです。入力としてclkを用意してます。
先ほど作成した下位モジュール(カウンタ回路)は下記のコードで上位モジュールに呼び込めます。

“下位モジュール名” ”上位モジュールでの名前”(
.”下位モジュールでの入出力名” (“上位モジュールで接続する端子名”),
・・・
.”下位モジュールでの入出力名” (“上位モジュールで接続する端子名”)
);

下位モジュール名はここではcounter、上位モジュールでの名前はcounter1とします。上位モジュールでは複数下位モジュールを呼び出すかもしれないので、かぶらない名前にしてください。
下位モジュールでの入出力名ははここでは、clk、reset、outです。これに接続する上位モジュールでの接続する端子名はclk、0、outです。ここで、resetに0を入れている通り、入力端子には直接バイナリ値を入れることができます。

modelSim

modelSimで動かすための検証用ファイルを作成します。具体的には、今のverilogファイルだけではclkに何か入らないと何も動かない回路になっているため、clkを生成するファイルを作成します。今回はclkのみですが、それ以外にも自由に信号を作成できます。
まずFile>NewからUniversity Program VWFを選択してください。

すると↓のようなウィンドウが立ち上がります。左の空白タブの部分をダブルクリックすると、Insert Node or Busというウィンドウが立ち上がりますので、Node Finderをクリックしてください。

するとNode Finderのウィンドウが立ち上がります。真ん中らへんにある、…をクリックしてください。するとverilogファイルを選ぶ画面になるので、トップファイルであるkeymaleを選んでください。その後listをクリックすると、トップファイル内のinput、outputが羅列されます。今回はinput clkしかないので、これだけ出てきます。この後、作成したい信号を選びます。今回はclkを選んで>ボタンを押してください。その後OKを押して、ウィンドウを閉じてください。

すると空白だった左のタブにclkが追加されます。このclk左クリックすると、右側の信号部分が青くハイライトされるので、この状態でハイライトされた部分を右クリックしてください。その後、Value>Overwrite Clockを選択してください。

するとclockというウィンドウが立ち上がりますので、クロックのパラメータを修正してください。デフォルトでは100MHzのクロックになっていますので、periodを20nsecにして50MHzにしてみます。その後OKを押すとクロック波形が出てきます。

この後はこの作成したclkを出力します。simulation>Generate ModelSim Testbench and Scriptを選択してください。Waveformを保存する場所を聞かれるので、適当な場所に保存してください。OKを押します。

ファイルのコンパイルが開始されます。成功すると↓の画面のようにCompleteと出ます。その後生成されたファイルを移動しときます。keymale(プロジェクトのフォルダ)>simulation>modelsimにWaveform.vwf.vtというファイルが出来ています。これをkeymale(プロジェクトのフォルダ)にコピーしてください。さらに拡張子を.vwf.vtから.vに変更してください。

次にModelSimを起動してください。↓のような画面が開きます。

作成したverilogファイルをコンパイルします。Compile>compile…を選択してください。その後作成したプロジェクトファイル(今回はkeymale)のフォルダの下にあるverilogファイルを選択してください。今回はkeymale.v, counter.v, Waveform.vを選択して、Compileを押しましょう。エラーがなければerror 0 Warning 0 と出ます。

次にSimulation>Start Simulationを選択してください。↓図のようなウィンドウが立ち上がります。まずDesignタブのworkからkeymale_vlg_vec_testを選択してください。

つぎにLibraryのタブを選択し、Add>▼を選択し、
・altera_lnsim_ver
・altera_mf_ver
・altera_ver
・lpm_ver
を選択してください。

その後OKを2回押すと↓図のような画面に切り替わります。Waveのタブが出ない場合があるので、その場合はView>Waveで追加してください。Objectsにclkという信号が出ていますので、これをドラッグ&ドロップでWaveに移してください。他の信号もモニタしたいので、左のタブのInstanceからi1を選び、counter1というInstanceが出てきます。これをクリックすると、Objectsにclk, reset, out, cntが出ますので、これらもドラッグ&ドロップでWaveに移してください。

この状態で、Simulate>Run>Run Allを押してください。すると↓図のように波形が現れます。なんか5クロックおきにoutが切り替わっているのがわかります。

細かいところはまだまだありますが、以上で最低限のModelSimによるverilogの波形確認は終わりです。
最後まで読んで下さりありがとうございました。