テストベンチの書き方_Verilog編(2)

テストベンチの書き方_Verilog編(2)

 テストベンチの書き方_Verilog編(1)の続きです。前回はテストベンチの概略を解説しました。

 テストベンチの書き方_VHDL編と内容は同じです。両方を学ばれる方は比較してみてください。

今回はテストベンチのファイル解説をいたします。使うテストベンチはテストベンチの書き方_Verilog編(1)のファイルです。そのファイルを見ながら解説を読んでください。

 22行目を見てください。中身が何もありません。テストベンチは中身なしでOKです。

 24行目に見慣れない parameter が出てきました。parameter定義はテストベンチに限った事ではありません。普通のコンポーネントの中で使用する事もできます。プログラム経験のある方は「定数」と説明するとわかりやすいと思います。Verilogファイルの中でもある数字に意味をもたせたい時にparameterを使用できます。この場合parameter SYSCLK_PERIOD = 20;はSYSCLK_PERIODという定数が20nsecを固定値として宣言しています。

 27〜33行目がテストベンチで扱う信号です。Verilogのテストベンチの場合、テストするモジュールに入力する信号をregで指定し、出力する信号をwireでしていします。

 しかしながら、ModelSimを使っていると入力と出力の違いがわかりにくいので、私は入力信号に「i」を出力信号に「o」を付けるようにしています。偶にテストベンチである事を忘れて「r」や「w」を付ける事がありますが、入力か出力かを区別できれば良いのでどちらでもOKです。

 40行目にはクロックの周期を指定しています。24行目でparameterを使って周期を定数化していますので、その値を利用しています。

 ちょっと飛んで98行目からがテストするモジュール(つまり「子」のモジュール)を宣言しています。Verilogの場合宣言と接続は一気に行います。このテストベンチは1つのファイルをテストするので、1つのモジュールを書いていますが、2個以上でもOKです。しかし、お勧めはしません。テストベンチは製品となる切り口でテストするのが良いからです。2つ以上のモジュールをテストすると、テストしていない配線が発生したり、「同じと思い込む」という事が起きます。安定して動作する。という事を考えると、製品に組み込まれる配線やモジュールはすべてテストベンチにかけられるよう設計すべきです。

 47行目からがテストベンチの信号を生成している行です。各信号の初期値を書くようにしましょう。

 57行目に repeat(50) @(posedge i_clock);という記述があります。repeatは繰り返しですが、クロックを50回繰り返しています。このように一定時間の待ち時間後にレジスタを書き換えていく。というのが基本的なテストベンチの書き方です。

 62行目からいろいろな入力パターンを生成しています。このように入力のパターンをテストベンチにかけて、設計どおりに動作しているのかを確認する作業になります。

 ModelSimでシミュレートした結果を示します。

テストベンチ結果

 左に記載されているのが信号名ですが、入力と出力の区別ができないので、宣言する際には何らかのルールを作って命名するのが良いでしょう。