Main Content

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

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

この例では、 MATLAB®関数を HDL テストベンチのコンポーネントとして組み込む方法を示します。システムレベルの動作を表すMATLAB関数を利用することにより、RTL 設計の検証に必要な時間を短縮できます。この例には 2 つのMATLAB関数が含まれています。1 つは刺激を生成するためのもので、もう 1 つはトップレベルの HDL テスト ベンチ内で予測子モデルを作成するためのものです。テストベンチを実行し、HDL シミュレーター内で結果を観察します。この例では、HDL シミュレーターを使用したテストベンチの開発に携わる HDL 開発者の視点をとります。HDL シミュレーター環境内からMATLAB を直接呼び出す機能など、HDL シミュレーター環境内での開発および実行のためのコマンド ラインの使用法が強調されています。

設計タスク

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

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

テストベンチの構造

この例では、Verilog® のローパス フィルターを DUT として使用し、刺激と予測子として 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® を起動します。これにより、 MATLABおよびSimulink®で使用できるように ModelSim が構成されます。

vsim

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

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

matlab -nodesktop

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

xterm -e "matlab -nodesktop " &

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

RTL を徹底的に検証するには、通常、特定の機能をテストしたり、特定の RTL コードをカバーしたりするためのさまざまな有向テストが必要です。これは、Verilog スタブ ファイルにポートを追加し、 tb_topファイル内のパラメーターを使用してその値を設定することによって実現されます。その後、HDL シミュレーターから各テスト ケースのMATLABスティミュラス関数の引数を設定できます。STIM_TYPE_VALSTIM_LENGTH、およびCHIRP_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エンティティを読み込み、 MATLABとの通信リンクを確立できるように ModelSim をセットアップします。これは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

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

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

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

  • テストベンチのクロック、リセット、および clk_enable スティミュラスをセットアップします。

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

シミュレーション結果

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

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

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

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 をテストするテスト ケースを定義します。MATLAB関数を HDL テスト ベンチに組み込むことにより、ローパス フィルターおよびスティミュラス関数のシステム レベル モデルを使用して、フル機能の HDL テスト ベンチの作成に必要な時間を短縮できます。

参考

| |