このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
TLM ジェネレーターを使ってみる
この例では、 Simulink Coder™ またはEmbedded Coder®の tlmgenerator ターゲットを使用して SystemC™/TLM コンポーネントを生成するようにSimulink®モデルを構成する方法を示します。
この例では、SystemC/TLM 生成の基礎として FIR フィルターのSimulinkモデルを使用します。
この例を実行するための要件:
SystemC 2.3.1 (TLM ライブラリを含む)
コードを検証するには、Linux® のパスに互換性のある GNU コンパイラ gcc を作成するか、Windows® のパスに Visual Studio® コンパイラを作成します。
メモ: この例には、コード生成のビルド手順が含まれています。Simulink、 MATLAB®インストール領域でプログラムをビルドすることはできません。必要に応じて、ビルドを開始する前に、 MATLABインストール領域にない作業ディレクトリに変更します。
1. 事前構成されたモデルを開く
FIR フィルター モデル を開くには、モデルを開く ボタンをクリックします。
2.Simulink Coder のターゲットを TLM ジェネレーターに設定する
a.モデル ウィンドウで [シミュレーション]、[モデル コンフィギュレーションパラメーター] を選択して、[コンフィギュレーションパラメーター] ダイアログ ボックスを開きます。
「b.」 「構成パラメーター」ダイアログ・ボックスの左側のペインで「コード生成」ビューを選択します。
「c.」 「システム ターゲット ファイル」の下で、「参照」をクリックして TLM ジェネレーター ターゲットを選択します。HDL コード生成にSimulink Coder を使用する場合は tlmgenerator_grt.tlc を選択し、HDL コード生成にEmbedded Coderを使用する場合は tlmgenerator_ert.tlc を選択できます。この例では、tlmgenerator_grt.tlc を選択します。
3.TLM ジェネレーター ビューを開く
「Configuration パラメーター」ダイアログボックスの左側のペインで「TLM Generator」ビューを選択します。
「TLM Generator」ビューには 5 つのタブがあります。
TLM マッピング
TLM処理
TLM タイミング
TLM テストベンチ
TLM コンパイル
各ペインで異なるジェネレータ オプションを設定する必要があります。
4.TLM マッピング オプションの選択
「TLM マッピング」タブの「ソケット マッピング」では、入力データ、出力データ、および制御用のソケットの数を選択できます。オプション「入力データ、出力データ、制御用の 3 つの個別の TLM ソケット」を選択します。
TLM ソケット オプションを使用すると、生成された TLM コンポーネントに対して 3 つの異なるメモリ マップを定義できます。
この例では、入力および出力データ ソケットとして次のものを選択します。
入出力データソケット用の自動生成メモリマップ
各データソケットの個別の入力および出力アドレスオフセット。このオプションは、モデル出力ごとに 1 つの読み取りレジスターと、個別のアドレスを持つモデル入力ごとに 1 つの書き込みレジスターを備えた TLM コンポーネントを生成します。各Simulinkモデル入力は対応する書き込みレジスタにバインドされ、各出力は対応する読み取りレジスタにバインドされます。
考慮できる他のメモリ マップ オプションは次のとおりです。
メモリマップなし:このオプションは、アドレスなしで 1 つの読み取りレジスターと 1 つの書き込みレジスターのみを備えた TLM コンポーネントを生成します。Simulinkモデルの入力は書き込みレジスタにバインドされ、出力は読み取りレジスタにバインドされます。
[自動生成されたメモリ マップ] 単一の入力および出力アドレス オフセット:このオプションは、それぞれ 1 つのアドレスを持つ 1 つの読み取りレジスターと 1 つの書き込みレジスターのみを持つ TLM コンポーネントを生成します。Simulinkモデルの入力は書き込みレジスタにバインドされ、出力は読み取りレジスタにバインドされます。
メモリ マップを含むコンポーネントを生成する場合、コマンドおよびステータス レジスタ、テストおよび設定レジスタ、および調整可能なパラメーターレジスタを追加できます。
この例では、制御 TLM ソケットとして次を選択します。
コマンドとステータスレジスタをメモリマップに含めます。コマンドおよびステータス レジスタを使用すると、SystemC シミュレーション中にコマンドを書き込み、ステータスを読み取ることができます。たとえば、手動バッファリングやバッファステータスなど。
「調整可能なパラメーターレジスタをメモリマップに含める」。調整可能なパラメーターレジスタを使用すると、調整可能なパラメーター値の読み取りまたは書き込みが可能になります。
この例では使用されていませんが、SystemC シミュレーション中に複数のイニシエーターがコンポーネントにアクセスするときに、テスト アンド セット レジスタをミューテックスとして使用できます。
5.TLM 処理オプションの選択
「TLM 生成」ペインで、「TLM 処理」タブを選択します。「アルゴリズム処理」および「インターフェース処理」オプションを使用すると、生成された TLM コンポーネントのさまざまなバッファリングおよび処理動作を定義できます。
アルゴリズムの実行オプションは次のとおりです。
SystemC スレッド:ステップ関数アルゴリズムは、独自の独立した SystemC スレッドで実行されます。
コールバック関数:ステップ関数アルゴリズムは、インターフェイスから呼び出されるコールバック関数で実行されます。
定期的な SystemC スレッド:ステップ関数アルゴリズムは、独自の時間周期の独立した SystemC スレッドで実行されます。
ステップ関数のタイミングは、アルゴリズム ステップ関数のタイミング (ns) フィールドの値によって決まります。アルゴリズムのタイミングはスレッド内の wait() でカウントされます。
この例では、SystemC Thread を選択し、Algorithm step functiontiming のフィールドに 100 を入力します。
インターフェイス処理オプション:
生成された TLM コンポーネント上に割り込み要求ポートを作成します:このオプションは、一連の入力が処理されるたびにトリガーされる割り込みポート (タイプ signal、bool>) を作成します。
この例では、次の選択肢を選択または入力します。
「生成された TLM コンポーネントに割り込み要求ポートを作成する」を選択します。
6.TLM タイミング オプションを選択します
「TLM タイミング」タブを選択します。「インターフェイス タイミング」セクションでは、コンポーネントの入出力インターフェイスと処理スレッドのタイミングを定義できます。
この例では、入力遅延と出力遅延はインターフェイスの wait() でカウントされます。「入力データ インターフェース タイミング」、「出力データ インターフェース タイミング」、「制御インターフェース タイミング」の各トランザクションに 5ns の時間値を設定します。
7.TLM テストベンチ ビューを選択します
「TLM テストベンチ」タブを選択します。TLM ジェネレーター ターゲットは、TLM コンポーネントと一緒にスタンドアロンの SystemC/TLM テスト ベンチを生成し、TLM イニシエーターとターゲットのペアのコンテキストで生成されたアルゴリズムを検証できます。TLM テストベンチ ビューでは、テストベンチ コードが生成および実行されるときの実行時オプションが提供されます。
TLM テストベンチ オプションを使用すると、次のことが可能になります。
TLM トランザクションや同期メッセージなど、SystemC/TLM の実行中にコマンド ウィンドウにエコーされる詳細メッセージを表示する場合に選択します。
テストベンチをタイミング注釈の有無にかかわらず実行する必要があることを示します。
イニシエーターがレジスターとバッファー間の入力および出力データセットの移動を制御するか、またはコンポーネントが移動を自動的に実行するかを示します。
この例では、Generate testbench、Run-time Timing ModeにWith Timing、Input Buffer Trigering ModeとOutput Buffer Trigering Modeの両方にAutomaticを選択します。
コンポーネントとテストベンチのコード生成が正常に行われると、Verify TLM Component ボタンが有効になります。 「TLM コンポーネントの検証」は次のことを実行します。
make および生成された makefile を使用して、生成されたコードをビルドします。
Simulinkを実行して、入力刺激と期待される結果をキャプチャします。
Simulinkデータを TLM ベクトルに変換します。
スタンドアロンの SystemC/TLM テストベンチ実行可能ファイルを実行します。
TLM の結果をSimulinkデータに変換し直します。
データ比較を実行します。
データの比較ミスがあった信号の Figure ウィンドウを生成します。
生成されたファイルのコンパイルでは、Linux® のパスに make と互換性のある GNU コンパイラ gcc が存在するか、Windows® のパスに Visual Studio® コンパイラが存在することが前提となります。
8.TLM コンパイル ビューを選択します
「TLM コンパイル」タブを選択します。このペインには、生成されたコードのコンパイルに使用される Makefile の生成を制御するオプションが提供されます。
コンパイラ オプション:
SystemC および TLM インクルード ライブラリ パス オプションを使用すると、メイクファイルが SystemC および TLM インストールを見つける場所を指定できます。デフォルト値では環境変数を使用できるため、SystemC または TLM インストールの更新時にSimulinkモデルを更新する必要がなくなります。MATLAB を呼び出す前に環境をセットアップすることも、 MATLAB setenv コマンドを使用することもできます。
この例では、/tools にある標準 OSCI インストールでテストされた環境変数値を次に示します。
SYSTEMC_INC_PATH=/tools/systemc-2.3.0/include
SYSTEMC_LIB_PATH=/tools/systemc-2.3.0/lib-linux64
SYSTEMC_LIB_NAME=libsystemc.a (Linux) または systemc.lib (Windows)
TLM_INC_PATH=/tools/systemc-2.3.0/include
ツールチェーン:
Windows では、このオプションを使用すると、複数のバージョンの Microsoft Visual Studio が同じマシンにインストールされているときにコンパイラ ツールチェーンを選択できます。Linux では、このオプションは gcc で修正されています。
コンポーネントの命名:
このオプションを使用すると、生成されたコンポーネントの名前に独自のタグを追加できます。生成されるコンポーネント名は、次の場合に従って構築されます。
ユーザータグを指定した場合:modelname_usertag_tlm
ユーザータグフィールドが空の場合:modelname_tlm
この例では、ユーザータグに「intro」と入力します。
9. レポートの選択
左側のペインでレポートを選択します。この例では、コード生成レポートの作成 と レポートを自動的に開く を選択します。これらのオプションは、コンポーネントの生成中に HTML レポートを生成します。コード生成レポートには、生成された各ファイルの内容の詳細が記載されます。
10. TLM ジェネレータ オプションの保存
「OK」をクリックしてこれらの設定を適用し、「構成パラメーター」ダイアログボックスを終了します。
11. モデルのビルド
モデル ウィンドウで DualFilter ブロックを右クリックし、コンテキスト メニューで C/C++ コード > このサブシステムのコードを生成 を選択して、TLM コンポーネントの生成を開始します。
あるいは、 MATLABコマンド ウィンドウで次のコマンドを実行することもできます。
>> slbuild('tlmgdemo_intro/DualFilter');
実行中に、調整可能なパラメーターを選択するように求められます。各係数のドロップダウン リストでは、変数のストレージ クラスを選択できます。ストレージ クラスのオプションは次のとおりです。
Inlined - インライン化パラメーターは調整できません。
SimulinkGlobal - SimulinkGlobal 変数は調整可能です。
ExportedGlobal、IMPORTEDExtern、および IMPORTEDExternPointer は、TLM 生成モデルではサポートされていません。
この例では、Simulink Global オプションが選択されています。「ビルド」をクリックします。MATLABコマンド ウィンドウに次のメッセージが表示されたら、TLM の生成が完了します。
### Starting Simulink Coder build procedure for model: DualFilter ### Successful completion of Simulink Coder build procedure for model: DualFilter Build Summary Top model targets built: Model Action Rebuild Reason =============================================================================== DualFilter Code generated. Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 26.937s
12. 生成されたファイルを開く
生成されたレポートまたはMATLABエディター内のリンクをクリックして、 MATLAB Web ブラウザーで生成されたファイルを開きます (生成されたファイルとレポートは現在の作業ディレクトリにあります)。
DualFilter_VP/DualFilter_intro_tlm_doc/html/DualFilter_codegen_rpt.html
DualFilter_VP/DualFilter_intro_tlm/include/DualFilter_intro_tlm_def.h
DualFilter_VP/DualFilter_intro_tlm/include/DualFilter_intro_tlm.h
DualFilter_VP/DualFilter_intro_tlm/src/DualFilter_intro_tlm.cpp
DualFilter_VP/DualFilter_intro_tlm_tb/src/DualFilter_intro_tlm_tb.h
DualFilter_VP/DualFilter_intro_tlm_tb/src/DualFilter_intro_tlm_tb.cpp
DualFilter_VP/DualFilter_intro_tlm_tb/src/DualFilter_intro_tlm_tb_main.cpp
13.生成されたコードの検証
a.モデル ウィンドウで [シミュレーション] 、 [コンフィギュレーションパラメーター] を選択して、モデル コンフィギュレーションパラメーター ダイアログ ボックスを開きます。
「b.」 「Configuration パラメーター」ダイアログ・ボックスで、「TLM Generator」ビューを選択し、「TLM Testbench」タブを選択します。
「c.」 「TLM テストベンチ」ペインで、「Verify TLM Component」をクリックしてrun the generated testbenchまで進みます。
あるいは、 MATLABコマンド ウィンドウで次のコマンドを実行することもできます。
verifyTlmgDemoModel('intro')
この検証ステップでは、次のアクションが実行されます。
生成されたコードをビルドします。
Simulinkを実行して、入力刺激と期待される結果をキャプチャします。
Simulinkデータを TLM ベクトルに変換します。
スタンドアロンの SystemC/TLM テストベンチ実行可能ファイルを実行します。
TLM の結果をSimulinkデータに変換し直します。
データ比較を実行します。
データの比較ミスがあった信号の Figure ウィンドウを生成します。
14.実行ログを確認する
テストベンチを生成するオプションを使用すると、テストベンチ イニシエーターのスレッドがターゲットとどのように対話し、同期するかを確認できます。ログの最後にある比較結果を探し、データ比較が成功したことを確認します。
### Comparing expected vs. actual results. Data successfully compared for signal tlmg_out1. Data successfully compared for signal tlmg_out2. ### Component verification completed
これで、TLM ジェネレーターの概要の例は終了です。