このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
協調シミュレーションテストベンチのセットアップ
この記事では、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 言語と一致する必要があります。
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
の新しい値を返します。