急がば回れのシミュレーション。

ひとつひとつ、ちゃんと確認しながら進んでいくのは大事よね。というのもあるし、Diamondってどうやって使うのというのにも慣れなくてはいけないので、シミュレーションをしてみます。

まず元のソースclk1000hz.vの7行目、CNT = 25000; を CNT = 10; くらいにしておきます。半周期で25000クロックも刻まれても困るので。

そうしたら、テストベンチファイルの作成です。
左ペインのFile Listタブを選択し、Input Filesで右クリック、Add → New File...でclk1000hz_test.vというファイルを作成します。



// vim: set fenc=utf-8 filetype=verilog expandtab ts=4 sts=0 sw=4:
//
// testbench for clk1000hz.
//
//

`timescale 1ns/1ns

module CLK_TEST;
reg clk, reset;
wire out;

parameter CYCLE = 20; // 20ns (50MHz)
CLK1000HZ c1k(
  .clk(clk),
  .reset(reset),
  .clk1m(out));

always #5 clk = ~clk;

initial begin
  $monitor("%t: clk=%b, reset=%b, out=%b", $time, clk, reset, out);

                clk = 0; reset = 1;
        #10     reset = 0;
        #10     reset = 1;
  #1000 
  $finish;
end
endmodule
そうしたら上記のようなソースを入力します。
いろいろ細かい作法やら考え方、キーワードなどはその手の本を見てもらうとして、テストベンチでは入力はreg、出力はwireだそうです。そして実行する内容はinitialブロックに記述、と。
ここでは初期化としてclk=0とreset=1を、10サイクル後にリセットをおろし、その10サイクル後にリセットを解除。そのまま1000サイクルまでシミュレーションしておしまい、ということにしておきます。

次にツールバーから波形と鉛筆のアイコンをクリックします。


Simulation Wizardというウィザードです。最初に説明ダイアログが出ますから、これはそのままNextをクリックします。
次に、Simulation Project Nameを入力するように求められます。


ここではSimulatorが選べるようになって…いません。無償版ですからね。Active-HDLしか選べません。なので、asimulなどという名前を適当につけてみました。すると、そんなプロジェクトはないけれど作りますかというメッセージが出るので、Yesをクリックします。

次にProcess Stageを選択するようになっていますが、ここも選択できるのはひとつだけなのでそのままNext。するとソースファイルを指定するように出てきますので、これもそのままNextです。


次はParse HDL files for simulationというダイアログ。ここではトップモジュールを指定できるようになっていますが、現在は一つしか選べません。ここもNext。


最後に諸設定を確認するダイアログが出ます。


左下のチェックボックスはすべてチェックした状態でFinishしてみます。
するとActive-HDL 9.2というのが立ち上がり、シミュレーションをして…


なにも波形が出てきません。左ペインの信号のところもステートが不明になっていたりします。それはそうです、テストベンチのコンパイルをしてないですから。

Active-HDLのDesignからCompile Allをクリックして再度シミュレータを走らせると、ちゃんと出ました。


波形も出ています。が、よくよく数えてみるとclkが11個でoutが切り替わっています。どうやらなにか間違っているようです。

よくよくソースを見てみれば、if (count < CNT)ではダメですね。ここはCNT-1でないと。
ソースを修正してコンパイルし、再度シミュレーションしてみました。


どうやらよさそうですね。やっぱり急がば回れは重要です。

0 件のコメント:

コメントを投稿

Vimの補完プラグインをインストール。その4

Vimの補完プラグインをインストール。その3 で、 ddc-tabnine が使えそうです、などと書いたのですが、早速やってみました。 まず、tabnineのバイナリを用意しないといけません。がどうにもTabNineのサイトがわかりにくいので、 tabnine-nvim にあるダ...