Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

AXI4 スレーブ インターフェイスの生成のための設計のモデル化

軽量データ転送を実行したり、制御レジスタにアクセスしたりするには、AXI4 スレーブ インターフェイスを使用します。AXI4 スレーブ インターフェイスには、AXI4 および AXI4-Lite インターフェイスが含まれています。HDL Coder™ ソフトウェアを使用すると、モデルに AXI4 または AXI4-Lite プロトコルを実装する必要はありません。HDL IP コアで AXI4 または AXI4-Lite インターフェイスが生成されます。

設計をモデル化するときに、AXI4 スレーブ インターフェイスにマッピングするデータ端子を指定します。次に、HDL Coder がデータ端子をメモリマップド レジスタにマッピングし、端子のアドレス オフセットを割り当てます。

考慮事項

DUT 端子の AXI4 または AXI4-Lite インターフェイスへのマッピングに関して、以下を考慮してください。

  • 設計内のすべてのスカラー端子、ベクトル端子、またはバス端子を AXI4 または AXI4-Lite インターフェイスのいずれかにマッピングできます。

  • 同じ設計で一部の DUT 端子を AXI4 インターフェイスにマッピングし、その他の DUT 端子を AXI4-Lite インターフェイスにマッピングすることはできません。

AXI4 スレーブ インターフェイスへのスカラー端子のマッピング

DUT インターフェイス端子でスカラー データ型を使用する場合、インターフェイス端子を AXI4 または AXI4-Lite インターフェイスに直接マッピングできます。コード ジェネレーターは AXI4 インターフェイスにマッピングする各データ端子に一意のアドレスを割り当てます。

スカラー端子を AXI4-Lite インターフェイスにマッピングする方法を示す例の場合、モデル hdlcoder_led_blinking を開きます。

open_system('hdlcoder_led_blinking')

このモデルでは、サブシステム led_counter はハードウェア サブシステムです。これは、FPGA ボード上の LED を点滅させるカウンターをモデル化します。2 つの入力端子 Blink_frequency および Blink_direction は LED の点滅頻度および方向を決定する制御端子です。サブシステム led_counter の外側にあるすべてのブロックはソフトウェア実装用です。

Simulink® では、Slider Gain ブロックまたは Manual Switch ブロックを使用してハードウェア サブシステムの入力値を調整できます。組み込みソフトウェアでは、AXI インターフェイスのアクセス可能なレジスタに書き込むことで、ARM プロセッサが生成された IP コアを制御します。ハードウェア サブシステムの出力ポートは、LED ハードウェアに接続します。出力端子 Read_back を使用してデータを読み取りプロセッサに戻すことができます。

IP Core Generation ワークフローを実行するとき、[ターゲット インターフェイスを設定] タスクで、端子 Blink_frequencyBlink_direction および AXI4-Lite インターフェイスに対する Read_back マップが表示されます。

この例の詳細については、次を参照してください。

ベクトル端子の AXI4 スレーブ インターフェイスへのマッピング

DUT インターフェイス端子でベクトル データ型を使用する場合、インターフェイス端子を AXI4 または AXI4-Lite インターフェイスに直接マッピングできます。コード ジェネレーターは一意のアドレスを AXI4 インターフェイスにマッピングする各データ端子に割り当てます。

ベクトル端子をマッピングするとき、HDL Coder は各端子のストローブ レジスタを使用して、IP コア アルゴリズム ロジックとの同期を保持します。入力端子について、ストローブ レジスタは一連のシャドー レジスタのイネーブル信号を制御します。これにより、IP コア アルゴリズム ロジックは更新されたベクトル要素を同時に確認できます。出力端子について、ストローブ レジスタは読み取られるベクトル データが同期的に取得されていることを確認します。

ベクトル端子を AXI4-Lite インターフェイスにマッピングする方法を示す例の場合、モデル hdlcoder_led_vector を開きます。

open_system('hdlcoder_led_vector')

このモデルでは、サブシステム DUT が LED の点滅アルゴリズムを実装し、このサブシステムにはベクトルの出力端子があります。IP Core Generation ワークフローを実行するとき、[ターゲット インターフェイスを設定] タスクに、入力端子と出力端子の AXI4-Lite インターフェイスへのマップが表示されます。

詳細については、IP Core Generation Workflow with a MicroBlaze processor: Xilinx Kintex-7 KC705を参照してください。

AXI4 スレーブ インターフェイスへのバス データ型のマッピング

DUT インターフェイス端子でバス データ型を使用する場合、インターフェイス端子を AXI4 または AXI4-Lite インターフェイスに直接マッピングできます。

バス データ型をマッピングすると、HDL Coder は一意のアドレスを AXI4 インターフェイスにマッピングする各データ端子に割り当てます。最上位レベルと下位レベルのバスにレジスタ オフセット アドレスはありません。スカラーまたはベクトルの個々のバス要素のアドレス マッピングに連続性はありません。

バス要素のモデル化

バス要素をモデル化するには、Bus Creator ブロックを使用するか、Bus Element ブロックを使用してバス端子を作成します。

Bus Creator ブロックを使用してバス要素をモデル化します。

Different data types connected to a bus creator block with the bus creator block parameters window open

Bus Element ブロックを使用してバス要素をモデル化します。Different data types connected to a bus element block with the bus element block parameters winddow open

詳細については、Map Bus Data types to AXI4 Slave Interfacesを参照してください。

AXI4 スレーブ レジスタの初期値の指定

IP Core Generation ワークフローまたは Simulink Real-Time FPGA I/O ワークフローを実行するときに、AXI4 スレーブ レジスタにマッピングされる入力端子の初期値を指定できます。次のターゲット インターフェイスにマッピングするときの初期値を指定できます。

  • AXI4

  • AXI4-Lite

  • PCIe

既定では、初期値はゼロです。非ゼロの値を指定するには、次を実行します。

  1. ターゲット プラットフォーム インターフェイス テーブルで入力 DUT 端子を AXI4 スレーブ インターフェイスにマッピングするときに、[Options] ボタンが [Interface Options] 列に表示されます。

  2. [Options] ボタンをクリックしてから、[RegisterInitialValue] を指定します。

指定された値は、DUT Inport ブロックで [ターゲット仕様] タブの HDL ブロック プロパティ [IOInterfaceOptions] として保存されます。たとえば、DUT 入力端子を AXI4-Lite インターフェイスにマッピングし、[RegisterInitialValue]5 に設定してから、[ターゲット インターフェイスを設定] タスクを実行すると、入力端子の [IOInterfaceOptions] プロパティには値 {'RegisterInitialValue','5'} が保存されます。

IOInterfaceOptions の値を表示するには、DUT 端子への絶対パスが hdlcoder_led_blinking/led_counter/LED である場合、次を入力します。

hdlget_param('hdlcoder_led_blinking/led_counter/LED',...
             'IOInterfaceOptions')

スカラー端子の初期値を指定します。

hdlset_param('hdlcoder_led_blinking/led_counter/LED', ...
     'IOInterfaceOptions', {'RegisterInitialValue','5'});

バスの初期値を設定するには、フィールド名がバス要素名に一致する struct を指定します。以下に例を示します。bus data type initial values

MATLAB® ワークスペースで定義されている変数を使用して初期値を指定することもできます。以下に例を示します。

bus1_initialvalue = struct('scalar_in1',1,'scalar_in2',2,'scalar_in3',3,'scalar_in4',4,'vector_in',[1 3])
bus initial value variable as bus data type initial value

AXI4 スレーブ インターフェイスの値の読み戻し

IP Core Generation ワークフローの実行時に、AXI4 スレーブ インターフェイスを使用して、AXI4 スレーブ レジスタに書き込まれる値を読み戻すことができます。たとえば、ARM プロセッサの Linux コンソールで devmem コマンドを使用して、AXI4 スレーブ レジスタに書き込まれる値を読み戻すことができます。HDL Verifier™ がインストールされている場合、MATLAB を AXI Master IP として使用して値を読み戻すことができます。

この機能を使用するには、IP Core Generation ワークフローの [RTL コードと IP コアの生成] タスクで、[AXI4 スレーブ書き込みレジスタで再読み取りを有効にする] チェック ボックスをオンにして、[RTL コードと IP コアの生成] タスクを実行します。

このタスクを実行すると、HDL Coder はモデルで有効にした読み戻し設定を保存します。DUT サブシステムの HDL ブロック プロパティの [ターゲット仕様] タブの [IP コア パラメーター] セクションに、パラメーター [AXI4RegisterReadback]on に設定されていることがわかります。HDL ワークフロー アドバイザー実行をスクリプトにエクスポートする場合、hdlset_param を使用するとモデルに保存されたこの設定が表示されます。

hdlset_param('hdlcoder_led_vector/DUT', 'AXI4RegisterReadback', 'on');

これらの例では、PuTTy™ などのプログラムを使用する Linux コンソールで devmem コマンドを使用することで、読み戻しの値を使用する方法を示します。

スカラー端子を AXI4 インターフェイスにマッピングする際に値を読み戻すには、最初に値を AXI4 レジスタに書き込んでから値を読み戻します。IP コア生成レポートで AXI4 レジスタのメモリ アドレスを確認できます。

ベクトル端子を AXI4 インターフェイスにマッピングする際に値を読み戻すには、最初に AXI4 レジスタに書き込み、ストローブ レジスタ アドレスに 0x1 を書き込んでから値を読み戻します。IP コア生成レポートで AXI4 レジスタおよびストローブ レジスタのメモリ アドレスを確認できます。

AXI4 スレーブ読み取りロジックの最適化

モデルに複数の出力レジスタが含まれていて、複数の AXI4 スレーブ レジスタからデータを読み戻す場合、読み戻しロジックは合成周波数を削減する可能性のある Mux の長いチェーンとなります。[AXI4 スレーブ書き込みレジスタで再読み取りを有効にする] 設定を [RTL コードと IP コアの生成] タスクで選択すると、HDL Coder によってアドレス デコーダー ロジックで各 AXI4 レジスタの Mux が追加されます。AXI4 スレーブ レジスタの数が増えると Mux のチェーンが長くなり、それによって合成周波数がさらに削減されます。

読み戻しロジックを最適化し、必要なターゲット周波数を達成できます。IP Core Generation ワークフローを実行すると、[RTL コードと IP コアの生成] タスクで、設定 [AX4 スレーブの端子とパイプライン レジスタの比率] が表示されます。この設定の既定値は auto です。この設定は、パイプライン レジスタが挿入される AXI4 スレーブ レジスタの数を示しています。たとえば、[AX4 スレーブの端子とパイプライン レジスタの比率]20 の場合、1 つのパイプライン レジスタがすべての 20 AXI スレーブ レジスタに挿入されることを意味します。auto 設定は、指定する端子の数と合成ツールに応じて、コード ジェネレーターにより AXI4 スレーブの端子に特定の数のパイプラインが挿入されることを意味します。この設定を無効にするか、この比率に 550 の間の値を選択できます。

このタスクを実行すると、HDL Coder はモデルで設定に指定した値を保存します。DUT サブシステムの HDL ブロック プロパティで、[ターゲット仕様] タブの [IP コア パラメーター] セクションに、パラメーター [AX4SlavePortToPipelineRegisterRatio] が指定した値に設定されていることがわかります。HDL ワークフロー アドバイザー実行をスクリプトにエクスポートする場合、hdlset_param を使用するとモデルに保存されたこの設定が表示されます。

hdlset_param('hdlcoder_led_vector/DUT', ... 
                    'AXI4SlavePortToPipelineRegisterRatio', '20');

関連するトピック