初めてでも使えるVerilog HDL文法ガイド ―― 記述スタイル編

小林 優

3.テストベンチの基本

 回路記述はシミュレーションにより検証します.このためには,検証対象となる回路に信号を与え,状態を観測するための記述が必要です.これがテストベンチです.設計した回路(モジュール)のファイル内にテストベンチを含めることも可能です.しかし,後々論理合成を用いてFPGAやASICに実装するので,図5のようにテストベンチは階層に分けて記述するのが一般的です.逆に言えば,テストベンチは論理合成対象外なので,Verilog HDLの記述力を最大限に利用できます.


図5 シミュレーション時のモジュール構造
検証対象の一つ上の階層でテストベンチを作成する.ここで入力を与えて出力を観測するしくみを作る.

 

 リスト9図4の4ビット・フリップフロップをテストするためのテストベンチを示します.記述のための必要事項を順を追って説明します.

リスト9 4ビット・フリップフロップのテストベンチ
 

1) ポートのないモジュール
 この階層は最上位階層に位置するので,外部とやり取りするポートは不要です.ポートがありませんから,モジュール名の後はセミコロンで終わります.
 
2) 入力を用意する
 検証対象回路に外部から信号を与えるため,変数宣言で信号を定義しておきます.リスト9では,FF4に与えるクロックとD入力を変数宣言しています.一方,出力はwireを使ってネット宣言しておきます.

 また,1クロックの周期もパラメータ宣言を用いて定義しておきましょう.この場合,1ステップ1,000ユニットです.ユニットとは,シミュレーション時の時間の最小単位です.ユニットと実時間の対応は,コンパイラ指示子の`timescaleを使います(文法ガイド編を参照).

3) クロックを作成する
 シミュレーション中つねにクロックを発生させるためには,alwaysを用いて記述します.#は遅延を意味します.

  • CKを'0'にして半周期遅延
  • CKを'1'にして半周期遅延

 これを繰り返すことで,デューティ50%のクロックCKを作成できます.遅延量をくふうすれば,デューティを変えたり,多相クロックを作ることも可能です.

4) 検証対象を接続する
 検証対象に入出力の信号を接続します.あらかじめ宣言しておいた変数やネットを接続します.複数のモジュールを接続することにより,複数ブロックの検証も可能です.

5) 入力を与える
 initialを用いて入力を順次与えます.initialは,alwaysと対称的に,シミュレーション開始後に1回だけ実行します.プログラム言語に近い動作です.ただし,alwaysやinitialはいくつでも記述できますから,並列動作も可能です.

 initialの中でD入力を変化させるたびに1周期の遅延を与えています.遅延を与えることでシミュレーションが進みます.最後にシステム・タスク$stopで停止します.

 システム・タスクは$で始まり,表3~表5に示すようなものが用意されています.ファイル・アクセスが豊富にあるので,シミュレーション結果をすべてファイルに書き出すことや,よそで作成したデータとの自動比較も可能です.

表3 主要システム・タスク

表4 出力フォーマット指定

表5 ファイル入出力システム・タスク

 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日