Article header library hdl first article header  5

はじめてみよう!テストベンチ ~VHDL 編~

VHDL の書式

テストベンチを作成する時もデザインを作成する時と同じようにパッケージの呼び出しエンティティ部(entity ~)アーキテクチャ部(architecture ~)を記述します。しかし、一般的にテストベンチには入出力ポートが存在しないため、エンティティ部にはポート宣言を記述する必要はありません。従って、各種宣言と回路記述部には検証対象となるデザインへ入力する信号の入力条件を HDL で記述していきます。

Article header tb vhdl fig 1  2

各種宣言(コンポーネント宣言 & 信号の宣言)

Article header tb vhdl fig 2  1

「各種宣言」をもう少し細かくすると、「コンポーネント宣言」と「信号の宣言」に分けることができます。 「回路記述部」で下位階層のデザインを呼び出す記述を書く時は、上位階層のアーキテクチャ部に下位階層のデザインのコンポーネント宣言をします。コンポーネント宣言のコンポーネント名は、下位階層のエンティティ名と同じにした方がわかりやすいです。下位階層のデザインのすべてのポート名を port の後の ( ) 内に記述してください。ポートの記述には入出力の方向やデータ型を記述しますが、これらは下位階層のデザインのエンティティ部と同じにしないと、正しくシミュレーションできません。

Article header tb vhdl fig 3  1

信号の宣言」は、エンティティ部で使用する信号を宣言します。トップ階層への入力信号やトップ階層からの出力信号、テストベンチ内だけで使用する信号を signal 文を使用して信号名とデータ型を記述します。

Article header tb vhdl fig 4  2

回路記述部(下位階層の呼び出し & 入力条件の記述)

Article header tb vhdl fig 5  1

下位階層(デザインのトップ階層)の呼び出し」は、通常の下位階層の呼び出しの記述と同様です。 インスタンス名を “u1” 、デザインの最上位階層のエンティティ名を “top” とした場合、以下のように記述します。

Article header tb vhdl fig 6  1

下位階層(デザインのトップ階層)への入力条件の記述

Article header tb vhdl fig 7  1

ここでは、主に、

  1. 常にレベルが固定している信号の記述
  2. 一定間隔で値がインクリメントする信号の記述
  3. 定期的または非定期的に ‘1’(H レベル)と ‘0’(L レベル)を繰り返す信号の記述

について説明します。これらをマスターすれば、テストベンチを自分で書けるようになります。

なお、ここで紹介した以外の記述方法もありますので、後々勉強して習得してください。

1. 常にレベルが固定している信号の記述

1行で記述できます。なお、数値を記入する際、シングル・ビットの場合は ‘ ’ で囲み、複数ビットの場合は “ ” で囲みます。

Article header tb vhdl fig 8  1

2. 一定間隔で値がインクリメントする信号の記述

process begin の後に初期値を記述します。その後 loop 文を使って一定間隔でインクリメンタルする式を記述します。なお、数値を記入する際、シングル・ビットの場合は ‘ ’ で囲み、複数ビットの場合は “ ” で囲みます。

Article header tb vhdl fig 9  1

3. 定期的または非定期的に ‘1’(H レベル)と ‘0’(L レベル)を繰り返す信号の記述

process begin の後に初期値を記述し、その後 wait for の後に次の値の変化までの時間を記述します。なお、数値を記入する際、シングル・ビットの場合は ‘ ’ で囲み、複数ビットの場合は “ ” で囲みます。この記述では、一番下まで実行したら process 文を抜け、最初に戻って実行し、繰り返します。

Article header tb vhdl fig 10  1

クロックの例では、この記述で 5 ns 毎に ‘0’ (L レベル)と ‘1’ (H レベル)を永遠に繰り返します。つまり、1周期 が 10 ns、100 MHz のクロックとなります。

Article header tb vhdl fig 11  1

サンプル・デザイン

以下のページから、演習データを参考としてダウンロードできます。このサンプルではテストベンチの記述も使われているので、参考にしてください。


Article header coffeebreak 2  5

コーヒー・ブレイク:センシティビティ・リスト

センシティビティ・リストとは、VHDL の process 文の直後の ( ) 内に記述する信号で、この信号が変化した時にこのプロセスがアクティブになって、begin ~ end process 内の処理が実行されます。 シミュレーションの場合は、記入しないケースがあります。センシティビティ・リストを記述しない時は ( ) も不要です。シミュレーション開始と共に実行を始め、一番下まで行くと再び一番上から実行を始め、永久に繰り返します。

Article header coffeebreak 2  6

コーヒー・ブレイク:シミュレーションの停止

VHDL には、シミュレーションを停止する専用の文がありません。従って、先ほど紹介した process 文を使用した記述だけでは、シミュレータでシミュレーションを停止させるか、もしくはシミュレーション時間を指定して実行しないと永遠に終わりません。 そこで、テストベンチにシミュレーションを終わらせるための記述を書きたい時は、wait を使用します。 左の例では、2,700 (100 + 200 + 400 + 2000) ns 経ったら process 文を抜け、最初に戻って実行し、繰り返します。 右の例のように、end process の手前に wait を記述すれば、2,700 ns 後にシミュレーションが停止します。

Article header tb vhdl fig 12  1

おすすめの記事/資料はこちら

関連タグ