メインコンテンツ

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

協調シミュレーションテストベンチのセットアップ

この記事では、MATLAB® 関数として表される HDL モジュールをコシミュレーションするために MATLAB テスト ベンチを設定する方法について説明します。このワークフローは、Vivado® シミュレータではサポートされていません。

MATLAB 検索パスにテストベンチを配置

テストベンチを見つけるにはMATLAB関数を使用する

HDL コンポーネントに関連付ける MATLAB 関数は、MATLAB 検索パス上にあるか、現在の作業フォルダーに存在する必要があります (MATLAB cd 関数を参照)。関数にアクセスできるかどうかを確認するには、MATLAB which 関数を使用します。次の which の呼び出しは、関数 MyVhdlFunction が MATLAB 検索パス上にあるかどうかを確認します。例:

which MyVhdlFunction
/work/xcelium/MySym/MyVhdlFunction.m

指定された関数が検索パス上にある場合、which は関数への完全なパスを表示します。関数が検索パス上にない場合、which はファイルが見つからなかったことを通知します。

MATLAB 検索パスにテストベンチ機能を追加する

MATLAB 関数を MATLAB 検索パスに追加するには:

  • [ホーム] タブの [環境] セクションで、[パスの設定] をクリックします。

  • 関数 addpath を使用します。

  • 一時的なアクセスの場合は、cd コマンドを使用して、MATLAB 作業フォルダーを目的の場所に変更します。

matlabtb でテストベンチ関数呼び出しをバインドする

MATLAB テストベンチコマンド matlabtb を呼び出す

HDL シミュレーターでコマンドを発行して matlabtb を呼び出します。matlabtb を呼び出すいくつかの例については、matlabtb リファレンス ページの例のセクションを参照してください。

MATLAB テストベンチコシミュレーション用の HDL 信号/ポートとモジュールパスを指定する で説明されているように、matlabtb を呼び出すときは必ず MATLAB テストベンチ セッションのパスの指定に従ってください。

matlabtb コマンドを発行する手順については、MATLAB-HDLコシミュレーションを実行する を参照してください。

MATLAB テストベンチコシミュレーション用の HDL 信号/ポートとモジュールパスを指定する

HDL Verifier™ ソフトウェアには、HDL 設計階層を指定するための特定の要件があり、その構文は次のセクションで説明されています。1 つは最上位レベルの Verilog® 用、もう 1 つは最上位レベルの VHDL® 用です。デザイン階層名の代わりにファイル名階層を使用しないでください。

このセクションで説明するルールは、MATLAB コシミュレーション セッションの信号/ポートおよびモジュール パスの仕様に適用されます。他の仕様も機能する可能性がありますが、HDL Verifier ソフトウェアはそれらを正式に認識もサポートもしません。

次の例では:

matlabtb u_osc_filter -mfunc oscfilter

u_osc_filter は最上位コンポーネントです。サブコンポーネントを指定する場合は、MATLAB コシミュレーション セッションの有効なモジュール パス仕様に従う必要があります。

MATLAB リンクセッションと Verilog トップレベルのパス仕様

  • パスの指定は最上位のモジュール名で始まる必要があります。

  • パス指定には「.」または「/」パス区切り文字を含めることができますが、混合区切り文字を含めることはできません。

  • リーフ モジュールまたは信号は、最上位モジュールの HDL 言語と一致する必要があります。

次の例は、有効な信号とモジュール パスの仕様を示しています。

top.port_or_sig
/top/sub/port_or_sig
top
top/sub
top.sub1.sub2

次の例は、無効な信号およびモジュール パスの指定を示しています。

  • top.sub/port_or_sig

    この仕様が無効である理由:混合区切り文字は使用できません。

  • :sub:port_or_sig

    :

    :sub

    この仕様が無効である理由:VHDL 固有の区切り文字を使用すると、HDL シミュレータ間および VHDL と Verilog 間で移動するときにパスとの相互運用性が制限されます。

MATLAB リンクセッションと VHDL トップレベルのパス仕様

  • パス指定には最上位モジュール名を含めることができますが、含める必要はありません。

  • パス指定には「.」または「/」パス区切り文字を含めることができますが、混合区切り文字を含めることはできません。

  • リーフ モジュールまたは信号は、最上位モジュールの HDL 言語と一致する必要があります。

 ModelSim および Xcelium ユーザーの例

HDL モジュール コンポーネントを MATLAB テスト ベンチ関数にバインドする

デフォルトでは、HDL Verifier ソフトウェアは、MATLAB 関数の名前が、関数が検証する HDL モジュールの名前と一致すると想定します。テスト対象のデザインとは異なる名前を持つテストベンチまたはコンポーネント関数を作成する場合は、matlabtb-mfunc 引数を使用して、デザインを MATLAB 関数に関連付ける必要があります。この引数は、HDL モジュール インスタンスを、HDL インスタンスとは異なる名前を持つ MATLAB 関数に関連付けます。

-mfunc 引数の詳細と matlabtb パラメータの完全なリストについては、matlabtb 関数リファレンスを参照してください。

MATLAB 関数の命名ガイドラインの詳細については、MATLAB ドキュメントのファイルとファイル名に関する「MATLAB プログラミングのヒント」を参照してください。

テストベンチとコンポーネント関数呼び出しの結合の例.  この最初の例では、シミュレーションを設定するときに、-mfunc 引数を指定して関数 matlabtb を呼び出すことによって、inverter_vl コンポーネントと MATLAB テストベンチ関数 inverter_tb の間に関連付けを形成します。

matlabtb inverter_vl -mfunc inverter_tb

matlabtb コマンドは、シミュレーションで inverter_vl が実行されたときに inverter_tb 関数をコールバックするように HDL シミュレータに指示します。

この 2 番目の例では、モデル osc_top.u_osc_filter をコンポーネント関数 oscfilter にバインドします。

matlabcp osc_top.u_osc_filter -mfunc oscfilter

HDL シミュレータが oscfilter コールバックを呼び出すと、関数はモデル osc_top.u_osc_filter で動作することを認識してしまいます。

テストベンチセッションのスケジュールオプション

テストベンチセッションのスケジュールオプションについて

MATLAB 関数の呼び出しをスケジュールする方法は 2 つあります。

  • HDL Verifier関数の引数matlabtbまたはmatlabcpを使用する

  • MATLAB 関数内で tnext パラメータを使用する

2 種類のスケジュールは相互に排他的ではありません。matlabtb または matlabcp タイミング引数と MATLAB 関数の tnext パラメータを組み合わせて、テスト ベンチまたはコンポーネント セッション コールバックをスケジュールできます。

matlabtb 引数を使用してテストベンチセッションをスケジュールする

デフォルトでは、HDL Verifier ソフトウェアは MATLAB テスト ベンチまたはコンポーネント関数を 1 回呼び出します (matlabtb または matlabcp を呼び出すとき)。より詳細な制御を適用し、MATLAB 関数を複数回実行する場合は、コマンド スケジュール オプションを使用します。これらのオプションを使用すると、HDL Verifier ソフトウェアが関連する MATLAB 関数を呼び出すタイミングと頻度を指定できます。該当する場合は、matlabtb または matlabcp 関数を使用して MATLAB テスト ベンチまたはコンポーネント関数セッションを開始するときに、関数を変更するか、タイミング引数を指定します。

次のいずれかの条件下で、コマンド引数を使用して MATLAB テスト ベンチまたはコンポーネント関数を実行するようにスケジュールできます。

  • 離散時間値 - 繰り返し間隔や停止時間も含めた時間指定に基づく

  • 立ち上がりエッジ—指定された信号が立ち上がりエッジを経験するとき

    • VHDL:立ち上がりエッジは{0またはL}から{1またはH}です。

    • Verilog:立ち上がりエッジは、0 から x、z、または 1 への遷移、および x または z から 1 への遷移です。

  • 立ち下がりエッジ—指定された信号が立ち下がりエッジを経験するとき

    • VHDL:立ち下がりエッジは {1 または H} から {0 または L} です。

    • Verilog:立ち下がりエッジは、1 から x、z、または 0 への遷移、および x または z から 0 への遷移です。

  • 信号状態の変更 - -sensitivity 引数から matlabtb 引数を使用したリストに基づいて、指定された信号の状態が変更されたとき。

tnext パラメータを使用してテストベンチ関数をスケジュールする

MATLAB 関数のコールバックのタイミングは、その関数の tnext パラメータを使用して制御できます。このパラメータは HDL シミュレータに時間値を渡し、その値がその関数のシミュレーション スケジュールに追加されます。関数が null 値 ([]) を返す場合、ソフトウェアはスケジュールに新しいエントリを追加しません。

tnext の値を double または int64 型の値に設定できます。コールバック時間を秒単位で表すには、double を指定します。たとえば、1 ns でコールバックをスケジュールするには、次のように指定します。

 tnext = 1e-9

現在の HDL シミュレータの時間分解能制限の整数倍に変換するには、int64 を指定します。たとえば、HDL シミュレータの時間精度が 1 ns の場合、100 ns でコールバックをスケジュールするには、次のように指定します。

tnext=int64(100)

メモ

tnext パラメータは、シミュレーション開始からの時間を表します。したがって、tnext は常に tnow より大きくなければなりません。少ない場合、ソフトウェアはコールバックをスケジュールしません。

tnext および関数プロトタイプの詳細については、MATLAB 関数の構文と関数の引数の定義 を参照してください。

例.  この最初の例では、HDL シミュレータがテスト ベンチ関数 (HDL Verifier 経由) を呼び出すたびに、tnext は現在のシミュレーション時間に対して 1 ns 後に MATLAB 関数への次のコールバックをスケジュールします。

tnext = [];
.
.
.
tnext = tnow+1e-9;

tnext を使用すると、テストベンチの操作に固有の基準に基づいて、コールバックのスケジュールを動的に決定できます。たとえば、データ信号が特定の値になったときにコールバックのスケジュールを停止するように決定できます。

    if qsum == 17,
        qsum = 0;
        disp('done');
        tnext = [];  % suspend callbacks
        testisdone = 1;
        return;
    end

次の例では、tnext を使用してコンポーネント セッションをスケジュールする方法を示します。Oscillator の例では、oscfilter 関数は HDL シミュレータがコールバックを呼び出す時間間隔を計算します。コンポーネント関数は、oscfilter の最初の呼び出し時にこの間隔を計算し、その結果を変数 fastestrate に格納します。変数 fastestrate は、フィルタでサポートされる最速のオーバーサンプリング レートのサンプル期間を表します。この関数は、80 ns の基本サンプリング期間からこのレートを導出します。

次の代入ステートメントは、タイミング パラメーター tnext を設定します。このパラメータは、現在のシミュレーション時間 (tnow) を基準にして、MATLAB コンポーネント関数への次のコールバックをスケジュールします。

tnext = tnow + fastestrate;

この関数は、HDL シミュレータが関数を呼び出すたびに、tnext の新しい値を返します。