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

VHDLテストベンチ・シミュレーションを優雅に終了させる方法

VHDLテストベンチが意図した実行の末尾に達したとき、シミュレーターをクリーンに停止し、可能であれば呼び出しスクリプトに制御を返したいはずです。この記事では、主要なVHDLシミュレーターでシミュレーションを停止する最も一般的で信頼性の高い手法を、ModelSim、Vivado、Tclスクリプトのコード例とともに紹介します。

1. finishプロシージャの使用(VHDL-2008)

std.envパッケージのfinishルーチンは、エラーなく完了したテストベンチを終了させる最も直接的な方法です。テストベンチのみをVHDL-2008でコンパイルすればよく、RTLは従来の標準のままでも構いません。

use std.env.finish; ... SEQUENCER_PROC : process begin -- テストベンチ・ロジックをここに挿入 wait until stop_condition; report "Calling 'finish'"; finish; end process;

デフォルトでは、finishはGUIで終了確認を促します。バッチ・モードなどで自動終了を望む場合は、vsimに-onfinish stopスイッチを追加します:

vsim -onfinish stop work.using_finish_tb

バッチ・モード(vsim -c)で実行すると、シミュレーターはクリーンに終了し、制御がシェルに戻ります。これはリグレッション・スクリプトに最適です:

jonas@ubuntu:~/stop_tb$ vsim -c -do 'vsim work.using_finish_tb; run -all' # … # ** Note: Calling 'finish' # Time: 1 ms Iteration: 0 Instance: /using_finish_tb # End time: 22:58:31 on Jun 21,2020, Elapsed time: 0:00:00 # Errors: 0, Warnings: 8 jonas@ubuntu:~/stop_tb$

2つのオーバーロードが存在します: procedure FINISH;とprocedure FINISH (STATUS : INTEGER);。ステータス値はシミュレーター依存なので、終了コードとして頼るのは推奨しません。ModelSimではTclスクリプトでexit -code <value>を使ってシェル終了コードを明示的に設定できます。

2. stopプロシージャの使用(VHDL-2008)

stopルーチンはシミュレーションを一時停止します。手動検査や後で再開する場合に有用です。ブレークポイントのように振る舞います。

use std.env.stop; ... SEQUENCER_PROC : process begin wait until stop_condition; report "Calling 'stop'"; stop; end process;

スクリプト駆動ワークフローでは、stopはTclシェルにドロップするため、手動でexitを発行しない限りスクリプトがハングします。これがfinishが自動実行で一般的に好まれる理由です。

3. アサーション失敗の活用

一部の設計者は、意図的にアサーション失敗を引き起こしてテストベンチを終了させます。この方法はすべてのVHDLバージョンで動作し、追加インポートが不要です:

SEQUENCER_PROC : process begin wait until stop_condition; assert false report "Test: OK" severity failure; end process;

シミュレーターの終了は保証されますが、テストが成功してもコンソールにfailureが報告されるため、失敗をエラーとして扱う自動リグレッション・ツールでは誤解を招く可能性があります。

4. Tclコールバックによる終了制御

信号の検査やクリーンアップなど、より柔軟な制御が必要な場合、VHDL信号をTclコールバックに結びつけることができます。VHDLテストベンチは、すべてのテスト・ケースが完了するとブール信号stop_conditionをアサートします。

signal stop_condition : boolean; begin -- 例: 1ms後にトグル stop_condition <= not stop_condition after 1 ms; SEQUENCER_PROC : process begin -- テストベンチ・ロジック wait; -- プロセスを休眠状態に保つ end process; 

ModelSim

when {stop_condition} { stop echo "Test: OK" } run -all

stop_conditionが真になると、コールバックが実行され、メッセージを出力してシミュレーションを一時停止します。stopをexitに置き換えると即座にシミュレーターを終了できます。

Vivado

set sim_fileset sim_1 launch_simulation -simset [get_filesets $sim_fileset] add_condition -notrace stop_condition { stop puts "Test: OK" } run all

-notraceフラグはコマンド・エコーを抑制し、コンソール出力をクリーンに保ちます。

最終推奨

主要なシミュレーター全体で、VHDL-2008のfinishプロシージャが最もポータブルでスクリプト・フレンドリーな選択肢です。GUIとバッチ環境の両方で、インタラクティブなプロンプトを残さずクリーンにシミュレーションを終了します。

それでも、シミュレーションを一時停止して信号をその場で検査・操作する必要がある場合、Tclコールバックは強力なデバッグ機能を提供します。

サンプル・プロジェクトのダウンロード

ModelSimユーザーは、以下のフォームにメールアドレスを入力することで、4つの説明用テストベンチを含むZIPアーカイブを受け取れます。(Vivadoユーザーは最小限の労力で例を再現可能です。)

VHDL

  1. 錆を撃退する5つの実証済み戦略:金属資産を長持ちさせる保存術
  2. VHDLで文字列リストを作成する: ベスト・プラクティスと実装例
  3. Tcl駆動テストベンチでVHDLコード・ロック・モジュールを検証する
  4. VHDLでPWMコントローラを実装: 設計、シミュレーション、FPGAデモ
  5. VHDLで乱数生成: 一様分布からOSVVMまで
  6. Tclベースのインタラクティブテストベンチでハードウェア検証を強化
  7. VHDLで自己検証テストベンチを構築する実践ガイド
  8. VHDLで保護型とアクセスポインタを用いた動的リンクリスト実装
  9. プロセス内プロシージャでVHDLステートマシンをクリーンに設計
  10. VHDLにおける不純関数の活用:FSMの可読性と保守性向上
  11. VHDL関数マスター:効率的な設計のための実践ガイド