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

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

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

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

 25、26行目を見てください。中身が何もありません。テストベンチは中身なしでOKです。28行目はarchitecture sim of TB_datasel isとなっていて、テストベンチを意味するsim にしていますが、これは自由です。

 30〜40行目がテスト実施するファイルです。「子」にあたります。このテストベンチは1つのファイルをテストするので、1つのコンポーネントを書いていますが、2個以上でもOKです。しかし、お勧めはしません。テストベンチは製品となる切り口でテストするのが良いからです。2つ以上のコンポーネントをテストすると、テストしていない配線が発生したり、「同じと思い込む」という事が起きます。安定して動作する。という事を考えると、製品に組み込まれる配線やコンポーナントはすべてテストベンチにかけられるよう設計すべきです。

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

 43行目は不要でもあるのですが、後からテストベンチのファイルを開いて、クロックが何MHzだったっけ? と思い出すために、このようにわざと宣言するようにしています。

 46〜52行目はちょっと特殊です。普通のコンポーネントの場合、ここは内部配線や内部DFFを宣言する場所になりますが、テストベンチの場合にはテストするコンポーネントに接続する信号やテストベンチ内で使う内部配線、DFFをまとめて書きます。VHDLはここでも、「コンポーネントへの配線」「内部配線」「内部DFF」の区別がつきませんので、(私の場合)コンポーネントへの配線で入力にはiを頭につけています。出力にはoです。ここに記載はありませんが、内部配線および内部DFFには各々wとrをつけるようにしています。

 46〜51までがコンポーネントへの入力信号。52行目がコンポーネントからの出力信号であることがわかります。

 61〜70行目でコンポーネントに配線を接続しています。=>の向きに注意してください。また、69行目だけ最後の「,」がありません。これも注意が必要です。

 76〜81行目はクロックの宣言をしています。クロックは連続波形になるので、このような記述で独立しています。

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

 95行目に wait for (SYSCLK_PERIOD / 10); という記述があります。waitはテストベンチでしか使わないVHDLの予約語です。文字どおり待ち時間です。このwait命令を使って一定時間の待ち時間後にレジスタを書き換えていく。というのが基本的なテストベンチの書き方です。

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

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

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