このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
軽量データ転送を実行したり、制御レジスタにアクセスしたりするには、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 インターフェイスにマッピングすることはできません。
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
の外側にあるすべてのブロックはソフトウェア実装用です。
金宝app®では、Slider GainブロックまたはManual Switchブロックを使用してハードウェア サブシステムの入力値を調整できます。組み込みソフトウェアでは、AXI インターフェイスのアクセス可能なレジスタに書き込むことで、ARM プロセッサが生成された IP コアを制御します。ハードウェア サブシステムの出力ポートは、LED ハードウェアに接続します。出力端子Read_back
を使用してデータを読み取りプロセッサに戻すことができます。
IP Core Generation
ワークフローを実行するとき、[ターゲット インターフェイスを設定]タスクで、端子Blink_frequency
、Blink_direction
および AXI4-Lite インターフェイスに対するRead_back
マップが表示されます。
この例の詳細については、次を参照してください。
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を参照してください。
DUT インターフェイス端子でバス データ型を使用する場合、インターフェイス端子を AXI4 または AXI4-Lite インターフェイスに直接マッピングできます。
バス データ型をマッピングすると、HDL Coder は一意のアドレスを AXI4 インターフェイスにマッピングする各データ端子に割り当てます。最上位レベルと下位レベルのバスにレジスタ オフセット アドレスはありません。スカラーまたはベクトルの個々のバス要素のアドレス マッピングに連続性はありません。
バス要素をモデル化するには、Bus Creator ブロックを使用するか、Bus Element ブロックを使用してバス端子を作成します。
Bus Creator ブロックを使用してバス要素をモデル化します。
Bus Element ブロックを使用してバス要素をモデル化します。
詳細については、Map Bus Data types to AXI4 Slave Interfacesを参照してください。
IP Core Generation
ワークフローまたはSimulink Real-Time FPGA I/O
ワークフローを実行するときに、AXI4 スレーブ レジスタにマッピングされる入力端子の初期値を指定できます。次のターゲット インターフェイスにマッピングするときの初期値を指定できます。
AXI4
AXI4-Lite
PCIe
既定では、初期値はゼロです。非ゼロの値を指定するには、次を実行します。
ターゲット プラットフォーム インターフェイス テーブルで入力 DUT 端子を AXI4 スレーブ インターフェイスにマッピングするときに、[Options]ボタンが[Interface Options]列に表示されます。
[Options]ボタンをクリックしてから、[RegisterInitialValue]を指定します。
指定された値はDUTInportブロックで[ターゲット仕様]タブの 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 を指定します。以下に例を示します。
MATLAB®ワークスペースで定義されている変数を使用して初期値を指定することもできます。以下に例を示します。
bus1_initialvalue = struct('scalar_in1',1,'scalar_in2',2,'scalar_in3',3,'scalar_in4',4,'vector_in',[1 3])
IP Core Generation
ワークフローの実行時に,AXI4スレーブインターフェイスを使用して,AXI4 スレーブ レジスタに書き込まれる値を読み戻すことができます。たとえば、ARM プロセッサの Linux コンソールでdevmem
コマンドを使用して,AXI4スレーブレジスタに書き込まれる値を読み戻すことができます。高密度脂蛋白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 スレーブ レジスタからデータを読み戻す場合、読み戻しロジックは合成周波数を削減する可能性のある 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 スレーブの端子に特定の数のパイプラインが挿入されることを意味します。この設定を無効にするか、この比率に5
~50
の間の値を選択できます。
このタスクを実行すると、HDL Coder はモデルで設定に指定した値を保存します。DUT サブシステムの HDL ブロック プロパティで、[ターゲット仕様]タブの[IP コア パラメーター]セクションに、パラメーター[AX4SlavePortToPipelineRegisterRatio]が指定した値に設定されていることがわかります。HDL ワークフロー アドバイザー実行をスクリプトにエクスポートする場合、hdlset_param
を使用するとモデルに保存されたこの設定が表示されます。
hdlset_param('hdlcoder_led_vector/DUT',...'AXI4SlavePortToPipelineRegisterRatio','20');