FPGA:Verilog HDL 4ビット加算回路のシュミレーション

FPGA:Verilog HDL 4ビット加算回路のFPGAへの実装を進め、実際のFPGAでの動作の確認をしてきた。しかし実際の開発ではいきなりFPGAに書き込む前に、シュミレーションして動作の確認をする。シュミレーションをしてみる。(引き続き、入門Verilog HDL記述―ハードウェア記述言語の速習&実践の書籍の内容をVivadoで実行する手順)

File-Newと進み、適当な名前をつけてプロジェクトを作り、Add SourcesのダイヤログっでAdd or create design sourcesにチェックを入れ、Createを選択して、adder.vを作る。

module adder(a,b,q);
    input [3:0] a;
    input [3:0] b;
    output [3:0] q;
   
    assign q=a+b;
endmodule

ここまでは以前と同じ。
その後、今度は再度、Add Sourcesのダイヤログ

Add or create simulation sourcesを選択しNextを押す。

  ここも、.vを作成したのと同じ要領で、Create Fileのボタンを押し、ファイル名を入れる。名前はなんでもよいが、よくつけるのはテストベットという事で、_tbをつける。この場合Adder_tb。
シュミレーションをするための、モジュールを作成する。

`timescale 1ns / 1ps

module adder_tb;
reg [3:0] a,b;
wire [3:0] q;

//set 1 clock
parameter STEP = 100000;

//call test module 
adder  addr (a,b,q);

//test input
initial begin
            a = 4'b0000; b=4'b0000;
    #STEP   a = 4'b0101; b=4'b1010;
    #STEP   a = 4'b0111; b=4'b1010;
    #STEP   a = 4'b0001; b=4'b1111;
    #STEP   a = 4'b1111; b=4'b1111;
    #STEP   $finish;
end
endmodule

・`timescale 1ns / 1psはデフォルトで入っている。
シュミレーションの単位を決める。1ユニット単位が1nsで/の後ろは丸め精度を設定する。
・モジュールは奇数を設定しない。timescaleはコンパイラ指示子。

・module adder_tb;
シュミレーションもモジュールで定義するが、入力も出力もなしでかっこの無い形とする。

・入力はregで、出力はwireで定義する。

・parameter STEP = 100000;
宣言により変数の定義をする。ここではシュミレーションの時間単位。シュミレーションのユニットが1nsなので100usecになる。

 ・adder  addr (a,b,q);
テストする対象を呼び出す

・initial begin
end
の区間で入力信号を時間的に変化させる。STEP毎に、aとbの値を変化させる。
最後は#STEP $finishで終わる。
$finishのかわりに$stopってのもあるみたいだが違いは調べていない。

その後、$monitorと表示をするコマンドが続くが、Vivadoの場合はいらない。

Run Simulationをクリックする。
各入力が閉じている状態だが>のマークをクリックして展開すると各要素も表示される。
シュミレーションの結果が表示される。
初期値は、 a = 4'b0000; b=4'b0000;
でa,bとも0、そのため出力qも0。
STEPだけ経過(100usec)すると、#STEP   a = 4'b0101; b=4'b1010になる。
加算の結果は1111になる(図中のqの出力4つが全部緑で塗りつぶされている)
以下同様に、時間がSTEP経過すると次の設定に移行し、出力が確認できる。
Valueの欄は、カーソルを合わせた箇所での値が確認する事ができる。






コメント

このブログの人気の投稿

Attiny85とAQM0802A(LCD)のI2C接続

CH9329で日本語キーボード109で正しく表示する方法