Main Content

このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。

HDL テストベンチに MATLAB 関数を含める

この例では、MATLAB® 関数を HDL テストベンチのコンポーネントとして含める方法を示します。システムレベルの動作を表す MATLAB 関数を利用することで、RTL 設計の検証に必要な時間を短縮できます。この例には、2 つの MATLAB 関数が含まれています。1 つは刺激を生成するためのもので、もう 1 つは最上位 HDL テスト ベンチ内で予測モデルを作成するためのものです。テストベンチを実行し、HDL シミュレータ内で結果を確認します。

この例では、HDL シミュレータを使用して RTL を検証するためのテストベンチを開発する HDL 検証エンジニアの視点を取り上げます。これは、HDL シミュレータ環境内での開発と実行のためのコマンド ラインの使用に重点を置き、その環境内から MATLAB を直接呼び出す機能も含みます。MATLAB 関数を HDL テストベンチに統合する手順については、MATLAB Test ベンチで HDL モジュールを検証する を参照してください。

設計タスク

テスト対象の RTL 設計 (DUT) の機能を検証するには、テスト ベンチを開発する必要があります。テスト ベンチには、テスト入力を供給する刺激コンポーネントと、予想される DUT 出力を提供する予測コンポーネントが含まれています。HDL シミュレーターでテストベンチを実行し、各クロック サイクルで DUT 出力と予測子の出力を比較して数値の精度を確認します。刺激と予測子を接続し、以下に示すようにトップレベルのテストベンチを構築する必要があります。

さまざまなテスト ケースを使用して RTL を包括的にテストするには、パラメーターに基づいてさまざまなテスト データ セットを提供できる刺激コンポーネントが必要です。予測コンポーネントには、あらゆる刺激に対する期待値を提供するために、DUT の動作モデルが含まれている必要があります。これらのコンポーネントを HDL 言語でモデル化するのは難しい場合があります。ただし、MATLAB 関数を使用すると、RTL 検証の時間が節約され、問題を早期に検出できるようになります。

テストベンチ構造

この例では、DUT として Verilog® のローパス フィルターを使用し、刺激と予測子として 2 つの MATLAB 関数を使用します。この例ではこれらのファイルを使用します。

  • DUT — ローパスフィルタを定義する Verilog ファイル、テスト対象の設計

  • stimulus — 刺激コンポーネントの HDL コードでポート インターフェイスを定義する Verilog ファイル

  • stimulus_fcn — MATLAB 刺激関数を定義する関数

  • predictor — 予測コンポーネントの HDL コードでポート インターフェイスを定義する Verilog ファイル

  • predictor_fcn — MATLAB 関数は、ローパスフィルタの動作をモデル化する予測関数を定義します。

  • tb_top — コンポーネントをインスタンス化し、適切に配線するトップレベルの System Verilog テストベンチ

  • compilehdl_and_run_mq — テストベンチをコンパイルし、HDL シミュレータで実行するための TCL スクリプト ファイル

まず、HDL シミュレータとの通信を確立し、MATLAB 内からシミュレータを起動するなど、いくつかのセットアップ タスクを実行する必要があります。後続のステップは HDL シミュレータ内で直接実行されます。

MATLAB でのセットアップ

MATLAB セッション中の場合は、次の手順を実行できます。

1.MATLAB サーバー の起動

HDL シミュレータと MATLAB 間の通信のために hdldaemon コマンドを実行します。

hdldaemon

2. HDLシミュレータを起動する

MATLAB で vsim コマンドを使用して Mentor Graphics® ModelSim® または Questa® を起動します。これにより、ModelSim が MATLAB および Simulink® で使用するように構成されます。

vsim

あるいは、MATLAB を nodesktop モードで開き、コマンドライン環境で開発することもできます。以下の手順に従って、MATLAB を開き、サンプル フォルダーに移動します。次に、MATLAB でのセットアップに記載されている上記のコマンドを実行します。

  • Windows® システムでは、システムのコマンド プロンプトでこのコマンドを入力します。

matlab -nodesktop

  • Linux® システムでは、システムのコマンド プロンプトでこのコマンドを入力します。

xterm -e "matlab -nodesktop " &

HDLシミュレータでテストベンチを実行する

RTL を徹底的に検証するには、通常、特定の機能をテストしたり、特定の RTL コードをカバーしたりするためのさまざまな指向テストが必要です。これは、Verilog スタブ ファイルにポートを追加し、tb_top ファイル内のパラメーターを使用してその値を設定することによって実現されます。その後、HDL シミュレータから各テスト ケースに対して MATLAB 刺激関数の引数を設定できます。STIM_TYPE_VALSTIM_LENGTHCHIRP_FINAL_FREQ ポートを追加します。

1.テストケース変数を設定する

ModelSim で、長さが 50 サンプルのインパルス刺激に対応するテスト ケース変数を設定します。ModelSim でこれらのコマンドを実行します。

set STIM_TYPE_VAL 0

set STIM_LEN 50

2. HDL ファイルをコンパイルしてテストベンチを実行する

HDL ファイルをコンパイルし、MATLAB コンポーネントを HDL ファイルにバインドしてテスト ケースを実行するには、すべてのコマンドを TCL ファイルに記述し、ModelSim で TCL を実行します。

do compilehdl_and_run_mq.tcl

TCL スクリプト compilehdl_and_run_mq は、次の操作を次の順序で実行します。

  • 階層順序を尊重しながら Verilog モジュールをコンパイルします。

  • 検証のために tb_top エンティティをロードし、ModelSim をセットアップして MATLAB との通信リンクを確立できるようにします。これは vsimmatlab コマンドによって実行されます。

vsimmatlab -t 1ns -voptargs=+acc work.tb_top +STIM_TYPE_VAL=$STIM_TYPE_VAL +STIM_LENGTH=$STIM_LENGTH +CHIRP_FINAL_FREQ=$CHIRP_FINAL_FREQ

テスト ケース変数の値は plus args を使用して渡されます。

  • MATLAB 関数を対応する Verilog モジュールにバインドします。

各 MATLAB 関数には、入力ポートと出力ポートのみを定義し、それ以外は空の Verilog モジュールがあります。matlabcp 関数は、空のスタブ Verilog コンポーネントを、MATLAB と HDL シミュレータ間の通信用のシェルとして使用します。MATLAB 関数は機能を提供します。matlabcp に必要なファイルを作成する方法については、MATLABコンポーネント関数を作成する を参照してください。

HDL シミュレータで Verilog 刺激コンポーネントのインスタンス化 /tb_top/u_stimulus を MATLAB 関数 stimulus_fcn にバインドするには、次のコマンドを使用します。

matlabcp /tb_top/u_stimulus 10 ns -repeat 10 ns -mfunc stimulus_fcn.m -use_instance_obj

同様に、ModelSim コマンド ウィンドウでこのコマンドを使用して、Verilog 予測コンポーネント /tb_top/u_predictor が MATLAB 関数 predictor_fcn にバインドされます。

matlabcp /tb_top/u_predictor 10 ns -repeat 10 ns -mfunc predictor_fcn.m -use_instance_obj

上記のバインディングでは、matlabcp 関数が -use_instance_obj 引数で指定されていることに注意してください。この引数は、-mfunc 引数で指定された MATLAB 関数 stimulus_fcn に、関数に渡された HDL インスタンス オブジェクトを使用するように指示します。テストベンチとコンポーネント機能の記述を参照してください。

  • テストベンチのクロック、リセット、clk_enable 刺激を設定します。

  • シミュレーションを実行します。

シミュレーション結果

シミュレーションを実行すると、これらの波形が生成されます。フィルターのインパルス応答を視覚化できます。

テストベンチは実行の一部としてこれらのログを生成し、RTL の出力が 8191 のしきい値許容範囲内で予想値と一致することを示します。

別のテスト ケースのテスト ベンチを実行するには、STIM_TYPE 変数と対応する必須パラメーターを変更します。たとえば、chirp テスト ケースからテスト ベンチを実行するには、次の手順に従います。

1. ModelSim でこのコマンドを入力して、現在のシミュレーションを終了します。

quit -sim

2. シミュレーターで STIM_TYPE_VAL 変数を設定します。

set STIM_TYPE_VAL 1

3. チャープ最終周波数を設定します。

set CHIRP_FINAL_FREQ 2e3

4. 刺激の長さを 1024 サンプルに設定します。

set STIM_LEN 1024

5. TCL ファイルを実行します。

do compilehdl_and_run_mq.tcl

シミュレーターはテストベンチからこれらの出力を返します。高周波成分の filter_out_actual の振幅は、Verilog で設計したローパス フィルタによって低減されます。

まとめ

この例では、ローパス フィルターの RTL を検証するための HDL テスト ベンチを開発します。テストベンチの刺激コンポーネントと予測コンポーネントには MATLAB コンポーネントを使用します。刺激関数に引数を渡すことで、DUT をテストするためのテスト ケースを定義します。HDL テスト ベンチに MATLAB 関数を組み込むと、ローパス フィルターと刺激関数のシステム レベル モデルを使用して、フル機能の HDL テスト ベンチを作成するために必要な時間を短縮できます。

参考

| |