工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> VHDL

Tclベースのインタラクティブテストベンチでハードウェア検証を強化

インタラクティブテストベンチとは、シミュレーション実行中にオペレータがデバイス・アンダー・テスト(DUT)へ入力を与えるシミュレータセットアップです。通常、シミュレータコンソールでコマンドを入力し、DUTに刺激を与えます。

自己検証型テストベンチを常に作成すべきですが、インタラクティブテストベンチは有用な補完となります。アドホックなテストをインタラクティブテストベンチで行う方が、自己検証テストベンチのコードを修正するより容易です。

ラボで発見した問題をテストベンチで再現したい場合、観察された入力シーケンスをシミュレータにタイプするだけで、望ましくない動作を再現できます。

TclとVHDLの連携

ほとんどのVHDLシミュレータはコンソール言語としてTclを採用しています。シミュレータ固有のコマンド群がありますが、それらは他のTclコマンドと同様に扱えます。Tclを用いて、VHDLテストベンチの管理・支援のための複雑で移植性の高いスクリプトを作成できます。

TclからVHDL信号を変更する

VHDLと対話するには、信号値を変更するコマンドを見つける必要があります。ModelSimではforceコマンドです。コマンドリファレンスによると、シンタックスは以下の通り。

force {<object_name> <value> [[@]<time_info>][, <value> [@]<time_info>]... [-deposit | -drive | -freeze] [-cancel [@]<time_info>] [-repeat [@]<time_info>]

使用すべきスイッチは-depositフラグです。これによりVHDL信号の値を即座に変更し、後で別のVHDLまたはTclドライバが別の値に変更できるようにします。

未使用オプションを省略した簡略シンタックス:

force -deposit <signal_name> <value>

VHDLトリガー

TclからVHDL信号を制御する方法が分かったので、VHDLテストベンチ側に受信プロセスを作成します。以下は最小限のテストベンチ例です。

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity interactive is
end interactive;
architecture sim of interactive is
  -- Tclで制御される信号
  signal trigger : std_logic := '0';
begin
  process is
  begin
    wait until trigger = '1';
    report "Triggered!";
  end process;
end architecture;

このプロセスはtrigger信号が'1'に変化するとウェイクアップし、コンソールに「Triggered!」と出力します。これによりTclからVHDLプロセスを制御する概念をテストできます。

ModelSimコンソールで実行したコマンドと出力は以下の通り。

VSIM 1> run 10 ns;
VSIM 2> force -deposit /trigger '1'
VSIM 3> run 0 ns;
# ** Note: Triggered!
# Time: 10 ns Iteration: 0 Instance: /interactive
VSIM 4> force -deposit /trigger '0'
VSIM 5> run 10 ns;

シミュレーション開始後10ns実行。triggerを'1'にフォース。次にrun 0 nsでデルタサイクルを発生させ、シミュレーション時間を進めずにプロセスをトリガー。最後にtriggerを'0'に戻して継続。プロセスがウェイクアップし「Triggered!」が出力されたことが確認できます。

TclでVHDL信号値を読み取る

ModelSimで信号値を読むにはexamineコマンドを使用。例えばtrigger信号:

VSIM 6> examine /trigger
# 0

スクリプトで使用する場合はTcl変数に代入:

VSIM 7> set triggerVal [examine /trigger]
# 0

変数を出力:

VSIM 8> puts "triggerVal: $triggerVal"
# triggerVal: 0

各テスト後にシミュレータを停止

DUTが反応するまで十分な時間シミュレーションを実行する最も簡単な方法は、固定時間でrunコマンドを実行することです。例えばDUTが2クロックサイクル後に反応し、クロック周期が10nsならrun 20 nsとします。

DUTの反応時間が固定でない場合、VHDLアサーションでシミュレーションを停止し、Tclコールバック関数に制御を渡せます。ModelSimではTclスクリプトからwhenコマンドでブレークポイントを設定:

when [[-fast] [-id <id#>] [-label <label>] {<when_condition_expression>} {<command>}]

また、ブレークポイントヒット時に実行されるonBreakコールバック関数をTclで定義する必要があります(ModelSimコマンドリファレンスに仕様あり)。

Tcl駆動テストの欠点

Tclスクリプトに大きく依存するテストベンチには欠点があります。最も顕著なのは速度と移植性の問題です。

新しいVHDLとFPGAコース

* テストベンチを深く掘り下げた新しいVHDLとFPGAコースを作成中です。FPGA設計をゼロから作成し、自己検証テストベンチの作成方法、コード再利用によるインタラクティブテストベンチ作成を学べます。

* 2020年10月12日更新: コースを完了しました。下記画像をクリックで詳細。

作成する製品はドットマトリクスLEDコントローラモジュール。$49のLattice iCEstick開発ボードを使用。最終的にはブレッドボード上で実装。PCキーボードでタイプした文字がFPGA制御のドットマトリクスLED画面に表示されます。

Tclベースのインタラクティブテストベンチでハードウェア検証を強化

ドットマトリクスVHDL/FPGAコースの詳細はこちら!

開講:

未定。

VHDL

  1. ZigbeeセンサーとGravioエッジプラットフォームでインタラクティブレーザープロジェクターを構築
  2. フライス盤を旋盤に転用:金属加工者のための簡単ステップ
  3. C# usingステートメント完全ガイド:名前空間インポート、エイリアス、静的ディレクティブ
  4. VHDL入門:最初のANDゲートを作る
  5. VHDL型変換完全ガイド:Numeric_StdとStd_Logic_Arithパッケージ活用
  6. VHDLプロシージャ例:std_logic_vectorのインクリメント
  7. VHDLレコードでクリーンかつ再利用可能なFIFOインターフェースを実現
  8. VHDLにおけるSignedとUnsigned型の使い分け:実践的洞察
  9. VHDL変数の解説:実践例と信頼性設計のためのルール
  10. VHDLで文字列リストを作成する: ベスト・プラクティスと実装例
  11. VHDLで自己検証テストベンチを構築する実践ガイド