Main Content

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

MATLABコンポーネント関数を作成する

HDL Verifier™ ソフトウェアは、MATLAB® 環境内で HDL コンポーネントを視覚化する手段を提供します。これを行うには、HDL モデルと、HDL モデルとデータを共有できる MATLAB 関数をコーディングします。この章では、HDL シミュレータと通信する MATLAB コンポーネント関数のプログラミング、インターフェイス、およびスケジュール規則について説明します。

メモ

このワークフローは、Vivado® コシミュレーションではサポートされていません。

MATLAB コンポーネント 関数は、HDL モデル内のコンポーネントの動作をシミュレートします。HDL モデル内のスタブ モジュール (ポート定義のみを提供) は、入力信号を MATLAB コンポーネント関数に渡します。MATLAB コンポーネントはこのデータを処理し、結果をスタブ モジュールの出力に返します。MATLAB コンポーネントは通常、HDL コードにまだ実装されていない機能 (フィルターなど) を提供します。

次の図は、HDL シミュレータが MATLAB コンポーネント関数をラップする方法と、コンポーネント シミュレーション セッション中に MATLAB が HDL シミュレータと通信する方法を示しています。

MATLAB とリンクすると、HDL シミュレーターはクライアントとして機能し、MATLAB はサーバーとして機能します。次の図は、TCP/IP ソケット ポート 4449 でサーバーに接続する複数クライアントのシナリオを示しています。

MATLAB サーバーは、複数の同時 HDL シミュレータ セッションと HDL モジュールを処理できます。ただし、サーバーが各モジュールおよびセッションに関連付けられた I/O を追跡できるようにするには、推奨ガイドラインに従う必要があります。提供された関数 hdldaemon を使用して起動する MATLAB サーバーは、同じコンピューターまたは別のコンピューターで実行されている HDL シミュレーターのインスタンスからの接続要求を待機します。サーバーはリクエストを受信すると、HDL 設計内のモジュールに代わってタスクを実行するためにコーディングした指定された MATLAB 関数を実行します。サーバーの起動時に指定するパラメータは、サーバーが共有メモリまたは TCP/IP ソケット通信リンクを確立するかどうかを示します。

有効なマシン構成については、コシミュレーション構成 を参照してください。

メモ

テストベンチ機能とコンポーネント機能のプログラミング、インターフェイス、およびスケジュール規則は実質的に同一です。ほとんどの場合、両方のタイプの機能に同じ手順が適用されます。

HDL シミュレータとのコシミュレーション用の MATLAB コンポーネント関数を作成するには、次のワークフロー手順に従います。

  1. HDL モジュールを作成します。HDL シミュレーターでモデルをコンパイル、詳細化、シミュレートします。MATLAB 可視化のための HDL モジュールの作成を参照してください。

  2. コンポーネント MATLAB 関数を作成します。コンポーネント関数を書くを参照してください。

  3. MATLAB-HDL シミュレータ接続の設定.

  4. コンポーネント関数を MATLAB 検索パスに配置します。コンポーネント関数をMATLAB検索パスに配置するを参照してください。

  5. matlabcp を使用して HDL インスタンスをコンポーネント関数にバインドします。matlabcp でコンポーネント関数呼び出しをバインドするを参照してください。

  6. スケジュールオプションを追加します。コンポーネントセッションのスケジュールオプションを参照してください。

  7. 対話型 HDL デバッグ用のブレークポイントを設定します (オプション)。

  8. HDL シミュレータからコシミュレーションを実行します。MATLAB-HDLコシミュレーションを実行するを参照してください。

MATLAB 可視化のための HDL モジュールの作成

MATLAB による視覚化のための HDL モジュールのコーディング

HDL Verifier インターフェースにおける通信の最も基本的な要素は HDL モジュールです。インターフェースは、HDL シミュレータと MATLAB 間のすべてのデータをポート データとして渡します。HDL Verifier ソフトウェアは、既存の HDL モジュールと連携して動作します。ただし、MATLAB 検証を対象とする HDL モジュールをコーディングする場合は、その名前、2 つの環境間で共有されるデータのタイプ、および方向モードを考慮する必要があります。この章のセクションでは、これらのトピックについて説明します。

MATLAB 視覚化用の HDL モジュールをコーディングするプロセスは次のとおりです。

MATLAB コンポーネント関数で使用する HDL モジュール名を選択

必須ではありませんが、HDL モジュールに名前を付ける場合は、MATLAB 関数名としても使用できる名前を選択することを検討してください。(一般に、VHDL® または Verilog® と MATLAB の命名規則は互換性があります。)デフォルトでは、HDL Verifier ソフトウェアは、HDL モジュールとそのシミュレーション関数が同じ名前を共有していると想定します。matlabtb でテストベンチ関数呼び出しをバインドするを参照してください。

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

コンポーネント関数で使用するために HDL モジュールでポート方向モードを指定する

モジュール ステートメントでは、各ポートの方向モード (入力、出力、または双方向) を指定する必要があります。次の表では、これら 3 つのモードを定義します。

VHDL モードを使用します...Verilog モードを使用します...ポートの場合...
INinputMATLAB関数またはSimulink®テストベンチで駆動できる信号を表す
OUToutputMATLAB関数またはSimulinkテストベンチに渡される信号値を表す
INOUTinoutMATLAB関数またはSimulinkテストベンチによって駆動されるか、または値を渡せる双方向信号を表します。

コンポーネント関数で使用するために HDL モジュールでポート データ型を指定する

VHDL エンティティのポート データ型.  エンティティ ステートメントでは、MATLAB を使用してテストする予定の各ポートを、HDL Verifier ソフトウェアでサポートされている VHDL データ型で定義する必要があります。インターフェイスは、次の VHDL 型のスカラーおよび配列データを同等の MATLAB 型に変換できます。

  • STD_LOGICSTD_ULOGICBITSTD_LOGIC_VECTORSTD_ULOGIC_VECTOR、および BIT_VECTOR

  • INTEGER および NATURAL

  • REAL

  • TIME

  • 列挙型(ユーザー定義の列挙型とCHARACTERを含む)

このインターフェースは、前述の型のすべてのサブタイプと配列もサポートします。

メモ

HDL Verifier ソフトウェアは、次のコンポーネントの VHDL 拡張識別子をサポートしていません。

  • 協調シミュレーションで使用されるポートと信号名

  • コシミュレーションで使用されるポート名と信号名の配列インデックスとして使用される列挙リテラル

ただし、ソフトウェアは VHDL の基本識別子をサポートしています。

Verilog モジュールのポート データ型.  モジュール定義では、MATLAB でテストする予定の各ポートを、HDL Verifier ソフトウェアでサポートされている Verilog ポート データ型で定義する必要があります。インターフェースは、次の Verilog ポート タイプのデータを同等の MATLAB タイプに変換できます。

  • 登録

  • 整数

  • ワイヤー

メモ

HDL Verifier ソフトウェアは、コシミュレーションで使用されるポート名と信号名の Verilog エスケープ識別子をサポートしていません。ただし、Verilog の単純な識別子はサポートされています。

コンポーネント関数で使用するための HDL 設計のコンパイルと詳細化

HDL ソース ファイルを作成または編集した後、HDL シミュレータ コンパイラを使用してコードをコンパイルおよびデバッグします。

 ModelSim のコンピレーション

 Xcelium のコンピレーション

その他の例については、HDL Verifier のチュートリアルとデモを参照してください。HDL コンパイラの使用の詳細については、シミュレータのドキュメントを参照してください。

コンポーネント関数を書く

HDL Verifier コンポーネント関数のコーディングの概要

HDL モジュールまたはコンポーネントを視覚化する MATLAB 関数をコーディングするには、特定のコーディング規則に従う必要があります。また、発生するデータ型変換を理解し、データを操作して HDL シミュレータにデータを返すためのデータ型変換をプログラムする必要もあります。

HDL モジュールまたはコンポーネントを検証する MATLAB 関数をコーディングするには、次の手順を実行します。

  1. MATLAB HDL Verifier コンポーネント関数の構文を学習します。コンポーネント関数の構文を参照してください。

  2. HDL Verifier ソフトウェアが HDL シミュレータからのデータを MATLAB 環境で使用できるように変換する方法を理解します。サポートされているデータ型を参照してください。

  3. MATLAB コンポーネント関数の名前を選択します。MATLAB コンポーネント機能コマンド matlabcp を呼び出すを参照してください。

  4. コンポーネント関数定義行で予想されるパラメータを定義します。MATLAB 関数の構文と関数の引数の定義を参照してください。

  5. 関数に渡されるポート データの種類を決定します。MATLAB 関数の構文と関数の引数の定義を参照してください。

  6. portinfo 構造で受信した情報を抽出し、シミュレーションに適用できる場合は適用します。ポート情報へのアクセスと適用を参照してください。

  7. 必要に応じて、MATLAB 環境で操作できるようにデータを変換します。HDL データを変換して MATLAB または Simulink に送信するを参照してください。

  8. HDL シミュレータに返す必要があるデータを変換します。HDLシミュレータに戻すためのデータの変換を参照してください。

その他のヒントについては、テストベンチとコンポーネント機能の記述 を参照してください。

コンポーネント関数の構文

MATLABコンポーネント関数の構文は

function [iport, tnext] = MyFunctionName(oport, tnow, portinfo)

MATLAB コンポーネント関数の入力/出力引数 iport および oport は、MATLAB テストベンチ関数のポート引数の逆になります。つまり、MATLAB コンポーネント関数は、信号データを 出力 に返し、関連する HDL モジュールの 入力 からデータを受信します。

次の例のように、関数の先頭で関数出力を空の値に初期化します。

tnext = [];
oport = struct();

各関数の引数の説明については、MATLAB 関数の構文と関数の引数の定義 を参照してください。matlabcp を使用したシミュレーション スケジューリングに tnexttnow を使用する方法の詳細については、tnext パラメータを使用してコンポーネント関数をスケジュールする を参照してください。

関連するトピック