このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
フレームベースの HDL コシミュレーション
フレームベースの処理では、一度に複数のサンプルを処理するため、Simulink® モデルの計算時間が改善されます。フレームベースの信号を使用すると、フレームベースのシステムの動作をより現実的にシミュレートすることもできます。HDL Cosimulation ブロックを使用すると、フレームベースのコシミュレーションを通じてフレームベースの処理を活用するコシミュレーション モデルを構築できます。
HDLコシミュレーションによるフレームベース処理
フレームベースの処理では、データの フレーム は、単一のチャネルまたは複数のチャネルからの連続したサンプルの集合です。単一チャネル信号の 1 フレームは M 行 1 列のベクトルで表され、N チャネル信号の 1 フレームは M 行 N 列の行列で表されます。ここで、M はフレームあたりのサンプル数です。信号がモデルを通じて一度に 1 フレームずつ伝播される場合、その信号はフレームベースです。
フレームベースのコシミュレーションは Simulink でのみサポートされます。HDL Cosimulation でフレームベースの処理を使用する Simulink モデルの場合、HDL シミュレータでのシミュレーション中に HDL コードの動作は変化しません。Simulink は、HDL シミュレータの処理がサンプルベースであると想定しています。フレーム モードでは、HDL Cosimulation ブロックはフレームベースの入力データを Simulink から HDL シミュレータに送信し、HDL シミュレータは信号を 1 サンプルずつ解凍して処理します。次に、HDL Cosimulation ブロックは、HDL シミュレータからのサンプルベースの出力を、Simulink 処理に必要なフレームに組み立てます。
この画像は、フレームベース モードで HDL Cosimulation が Simulink からのデータ フレームをどのように解釈するかを示しています。

Simulink のデータ フレームは、左側に 3 x 2 のマトリックスとして表示されます。ここで、2 は Simulink 信号チャネルの数、3 はチャネルあたりのサンプル数です。HDL Cosimulation は、マトリックスの各サンプル (行) を、単一の HDL 要素を持つ HDL サンプルとして表します。
HDL Cosimulation でフレームベースの処理を使用するには、1 つ以上のフレームベースの信号を HDL Cosimulation ブロックの 1 つ以上の入力ポートに接続します。HDL Cosimulation ブロックは、入力と同じフレーム サイズでフレーム ベース信号の出力を構成します。HDL デザインの HDL ワード長 に応じて、HDL Cosimulation は HDL ポートのフレームベースのデータを次のように表します。
HDL ワード長 は 128 ビット以下です:
入力ポート – 入力ポートの信号データ型と次元は駆動信号から継承されます。単一の信号チャネルを使用して、フレーム モードで駆動信号を構成します。入力信号の各フレームは M 行 1 列のベクトルです。ここで、M はフレームあたりのサンプル数、1 は信号チャネルの数です。
出力ポート – HDL Cosimulation は、サイズが M バイ 1 のフレーム データの出力ポートを作成します。ここで、M は 1 つの信号チャネルのフレームあたりのサンプル数です。すべての HDL ワードは Simulink ワードとして表されます。
HDL ワード長 が 128 ビットより大きい:
入力ポート – 入力ポートの信号データ型と次元は駆動信号から継承されます。複数の信号チャネルを使用してフレーム モードで駆動信号を構成します。入力信号の各フレームは M 行 N 列の行列です。ここで、M はフレームあたりのサンプル数、N は信号チャネル数です。信号チャネルの数は、Simulink 駆動信号のデータ型と HDL 設計によって決まります。次に例を示します。
HDL ワード長 = 150 かつ Simulink ワード長 = 50 の場合、HDL Verifier はデータ幅 50 ビット、信号チャネル数 N = 3 の Simulink ポートを許可します。
HDL ワード長 = 140 かつ Simulink ワード長 = 50 の場合、HDL Verifier はデータ幅 50 ビット、信号チャネル数 N = 3 の Simulink ポートを許可します。HDL Verifier は 150 ビットの Simulink を 140 ビットの HDL にパックします。HDL Verifier は最後の Simulink ワードの上位 10 ビット (MSB) を無視します。
出力ポート – HDL Verifier は、サイズが M-by-N' のフレーム データを処理するために Simulink ポートのベクトルを作成します。ここで、M はフレームあたりのサンプル数、N' は信号チャネルの数です。N' は HDL 設計によって決まります。次に例を示します。
HDL ワード長 = 150 かつ Simulink ワード長 = 50 の場合、HDL Verifier はデータ幅 50 ビット、チャネル数 N' = 3 の Simulink ポートを作成します。
HDL ワード長 = 150、Simulink ワード長 = 60 の場合、HDL Verifier はデータ幅が 60 ビットでチャネル数 N' = 3 の Simulink ポートを作成します。HDL ワードには 150 ビットしかありませんが、Simulink ポートには 180 ビットが必要なので、最後の Simulink ワードの 30 ビットは拡張された Sign に従って拡張されます。
フレームベースの処理要件と制限
フレームベースの信号を HDL Cosimulation ブロックに接続する場合は、次の制限と要件に従ってください。
フレームベースとサンプルベースの混合信号を同じ HDL Cosimulation ブロックに接続することはサポートされていません。
HDL Cosimulation ブロックに接続されたすべてのフレームベース信号は、同じフレーム サイズを持つ必要があります。
Simulink モデルのフレームベースの処理は、HDL シミュレータでのシミュレーション中の HDL モデルの動作に対して透過的です。HDL モデルはサンプルベースであると想定されます。次の制約は HDL モデルにも適用されます。
HDL 信号をベクトルや配列ではなく、スカラー値またはビット ベクトルとして指定します。HDL ビット ベクトルは、HDL Cosimulation ブロックによって固定小数点のスカラー データ型に変換されます。
フレームベースのコシミュレーションの例
この例では、HDL コシミュレーション ブロックを使用して、単純なローパス フィルターの VHDL 実装をコシミュレーションする方法を示します。この例では、フレームベースとサンプルベースの信号を使用してシミュレーションのパフォーマンスを比較します。
このチュートリアルは ModelSim® ユーザー専用です。ただし、Xcelium™ ユーザーの場合もプロセスの大部分は同じです。
デザインファイル
この例のモデル内のフィルターはフィルター デザイナーで設計され、コードは Filter Design HDL Coder™ を使用して生成されました。この例では、データ ファイル mtlb.mat を入力信号として使用します。このファイルには音声信号が含まれています。サンプル データは double データ型で、8 kHz のレートでサンプリングされます。モデルを読み込んで表示するには、MATLAB コマンド プロンプトで次のコマンドを入力します。
open_system("frame_filter_cosim.slx")

Audio Source Signal From Workspace ブロックは、ワークスペース変数 mtlb からの入力信号を提供します。この図に示すように、ブロックは 8 kHz のサンプル レートとフレーム サイズ 80 に設定されています。

入力信号のサンプル レートとフレーム サイズはモデル全体に伝播します。
VHDL コード ファイル lp_fir_8k.vhd は、カットオフ周波数が 1500 Hz の単純なローパス FIR フィルターを実装します。HDL コシミュレーション ブロックは、この HDL モジュールをシミュレートします。HDL コシミュレーション ブロック ポートとクロック信号は、VHDL エンティティ上の対応する信号と一致するように構成されます。
ModelSim シミュレーションが目的の動作を実行するには、lp_fir_8k エンティティの clk_enable 信号を強制的にハイにする必要があります。信号を強制するために、HDL コシミュレーション ブロックは事前シミュレーション コマンドを送信します。このコマンドは、次の図に示すように、HDL コシミュレーション ブロックのシミュレーション ペインにあります (ModelSim での使用例を示します)。

HDL コシミュレーション ブロックは、Filtered Signal To Workspace ブロックを介してワークスペース変数 audiobuff1 に出力を返します。
協調シミュレーションを実行する
モデルを開いたら、次の手順を実行します。
1. 後でフィルタリングするソース音声信号を MATLAB ワークスペースに読み込みます。
load mtlb
互換性のあるサウンド カードをお持ちの場合は、MATLAB コマンド プロンプトで次のコマンドを入力してソース信号を再生できます。
a = audioplayer(mtlb,8000); play(a);
2. パスに ModelSim があることを確認し、MATLAB コマンド プロンプトで次のコマンドを入力してシミュレータを起動します。
vsim
ModelSim ウィンドウが開きます。
3. ModelSim プロンプトで、次のコマンドを入力して設計ライブラリを作成し、ソース ファイル lp_fir_8k.vhd から VHDL フィルター コードをコンパイルします。
vlib work vcom lp_fir_8k.vhd
4. VHDL エンティティ lp_fir_8k はローパス フィルターを定義します。ModelSim プロンプトで、コシミュレーション用にインスタンス化されたエンティティ lp_fir_8k をロードします。
vsimulink lp_fir_8k
ModelSim はコシミュレーション用に設定されました。
5. MATLAB で、次のようにシミュレーションを実行し、経過時間を測定します。
tic; sim(gcs); toc
このコード抜粋のタイミングは、シミュレーション停止時間が 1 秒、フレーム サイズが 80 サンプルの場合のこのモデルの実行の典型的なタイミングです。タイミングはシステムに依存し、シミュレーションの実行ごとに若干異なります。
取得したタイミングをメモします。次のシミュレーション実行では、モデルをサンプルベースの操作に設定し、比較タイミングを取得します。
6. MATLAB は、ModelSim から返されたフィルタリングされたオーディオ信号をワークスペース変数 audiobuff1 に格納します。互換性のあるサウンド カードをお持ちの場合は、フィルターされた信号を再生して、ローパス フィルターの効果を聞くことができます。MATLAB コマンド プロンプトで次のコマンドを入力して信号を再生します。
b = audioplayer(audiobuff1,8000); play(b);
7. Audio Source Signal From Workspace ブロックのブロック マスクを開き、次の図に示すように、Samples per frame パラメータを 1 に設定します。[OK] をクリックします。

8.Simulink ウィンドウを選択します。モデリング タブの コンパイル セクションで、モデルの更新 をクリックします。
これで、ソース信号 (およびそれを継承するすべての信号) はスカラーになります。
9. ModelSimを再開します。ModelSim プロンプトで次のように入力します。
restart
10. MATLAB で、次のようにシミュレーションを実行し、経過時間を測定します。
tic; sim(gcs); toc
サンプルベースの入力信号では経過時間が大幅に増加していることがわかります。このコード抜粋のタイミングは、シミュレーション停止時間が 1 秒の場合のこのモデルのサンプルベースの実行の典型的なタイミングです。タイミングはシステムに依存し、シミュレーションの実行ごとに若干異なります。
シミュレーションを順番に閉じます。ModelSim で、[シミュレート] > [シミュレーションの終了] を選択してシミュレーションを停止します。次に、Simulink モデル ウィンドウを閉じます。