Main Content

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

イーサネットベースの AXI Manager を使用して FPGA 外部 DDR メモリで大規模行列乗算を実行

この例では、イーサネット ベースの AXI マネージャーを使用して、FPGA に接続された外部メモリにアクセスする方法を示します。この例では、次の方法も示します。

  1. インターフェイスを備えた HDL IP コアを生成します。

  2. イーサネット ベースの AXI マネージャー インターフェイスを使用して、Xilinx® Kintex®-7 KC705 ボード上の外部 DDR3 メモリから大規模なマトリックスにアクセスします。

  3. HDL IP コアで行列ベクトルの乗算を実行し、イーサネット ベースの AXI マネージャー インターフェイスを使用して出力結果を DDR3 メモリに書き込みます。

要件

この例を実行するには、このソフトウェアとハ​​ードウェアをインストールしてセットアップする必要があります。

  • Xilinx Vivado® Design Suite (サポートされているバージョンはサポートされている EDA ツールとハードウェアにリストされています)

  • ザイリンクス Kintex-7 KC705 評価キット

  • KC705 FPGA に接続するための JTAG ケーブルとイーサネット ケーブル

  • HDL Coder™ Support Package for Xilinx FPGA Boards

  • HDL Verifier™ Support Package for Xilinx FPGA Boards

はじめに

この例では、行列ベクトル乗算アルゴリズムをモデル化し、そのアルゴリズムをザイリンクス Kintex-7 KC705 ボードに実装します。大きな行列は、FPGA ファブリック上のブロック RAM に効率的にマッピングされない可能性があります。代わりに、FPGA ボード上の外部 DDR3 メモリに行列を保存します。イーサネット ベースの AXI マネージャー インターフェイスは、DDR3 メモリとインターフェイスするベンダー提供のメモリ インターフェイス IP コアと通信することにより、データにアクセスできます。この機能を使用すると、行列演算やコンピューター ビジョン アルゴリズムなど、大規模なデータ処理を伴い、高スループットの DDR アクセスを必要とするアルゴリズムをモデル化できます。

行列ベクトル乗算モジュールは、2 ~ 4000 の範囲で構成可能な行列サイズを持つ固定小数点行列ベクトル乗算をサポートします。マトリックスのサイズは、AXI4 のアクセス可能なレジスタを通じて実行時に設定できます。

MATLAB®コマンド プロンプトで次のコマンドを入力してモデルを開きます。

modelname = 'hdlcoder_external_memory_axi_master';
open_system(modelname);

モデルアルゴリズム

このサンプル モデルには、FPGA 実装可能なテスト対象設計 (DUT) ブロック、 DDR機能動作ブロック、および入力を駆動し、予想される出力を検証するためのテスト環境が含まれています。

DUTサブシステムには、AXI4 マスター読み取りおよび書き込みコントローラーと行列ベクトル乗算モジュールが含まれています。AXI4 マスター インターフェイスを使用して、 DUTサブシステムは外部 DDR3 メモリからデータを読み取り、そのデータをMatrix_Vector_Multiplicationモジュールに送り、出力データを外部メモリに書き込みます。イーサネットベースの AXI マネージャー インターフェイスを使用する DDR3 メモリ。DUTモジュールには、いくつかのパラメーターポートがあります。これらのポートは AXI4 アクセス可能なレジスタにマップされるため、デザインを FPGA にインプリメントした後でも、 MATLABからこれらのパラメーターを調整できます。

matrix_mul_onポートは、Matrix_Vector_Multiplicationモジュールを実行するかどうかを制御します。matrix_mul_onへの入力が true の場合、この例で前述したように、 DUTサブシステムは行列ベクトル乗算を実行します。matrix_mul_onへの入力が false の場合、 DUTサブシステムはデータ ループ バック モードを実行します。このモードでは、 DUTサブシステムは外部 DDR3 メモリからデータを読み取り、それをInternal_Memoryモジュールに書き込み、同じデータを外部 DDR3 メモリに書き込みます。 。データ ループ バック モードは、AXI4 マスターの外部 DDR3 メモリ アクセスの機能を検証する方法です。

また、 DUTサブシステム内で、 Matrix_Vector_Multiplicationモジュールは積和ブロックを使用して、行列ベクトル乗算の内積のストリーミング ドット積計算を実装します。

A がサイズ N 行 N 列の行列で、B がサイズ N 行 1 のベクトルである場合、行列ベクトル乗算の出力は、サイズ N 行 1 の Z = A x B になります。

DDR の最初の N 値は N 行 1 列のサイズのベクトルとして処理され、その後に N 行 N 列のサイズの行列データが続きます。最初の N 値 (ベクトル データ) は RAM に保存されます。N+1 値以降、データは行列データとして直接ストリーミングされます。ベクトルデータはVector_RAMから並列に読み込まれます。行列入力とベクトル入力は両方ともMatrix_mul_topサブシステムに供給されます。最初のマトリックス出力は N クロック サイクル後に利用可能になり、出力 RAM に保存されます。再度、ベクトル RAM 読み取りアドレスが 0 に再初期化され、新しいマトリックス ストリームに対応する同じベクトル データの読み取りが開始されます。この操作は行列のすべての行に対して繰り返されます。

この図は、 Matrix_Vector_Multiplicationモジュールのアーキテクチャを示しています。

イーサネットベースの AXI Manager を使用して HDL IP コアを生成

HDL ワークフロー アドバイザーを開始し、IP コア生成ワークフローを使用して、このデザインをザイリンクス Kintex-7 ハードウェアに展開します。

1. MATLABコマンド プロンプトで次のコマンドを入力して、Xilinx Vivado 合成ツールのパスを設定します。コマンドを実行するときに独自の Vivado インストール パスを使用します。

hdlsetuptoolpath('ToolName','Xilinx Vivado', ...
                 'ToolPath','C:\Xilinx\Vivado\2020.2\bin\vivado.bat')

2.DUT サブシステムhdlcoder_external_memory_axi_master/DUTから HDL ワークフロー アドバイザーを開始します。ターゲット インターフェイスの設定はモデルに保存されます。ステップ 1.1 では、ターゲット ワークフローは IP コア生成ワークフローで、ターゲット プラットフォームはザイリンクス Kintex-7 KC705 開発ボードです。

3.ステップ 1.2 で、リファレンス デザイン としてExternal DDR3 Memory Access with Ethernet based AXI Managerを選択します。

4.ターゲット プラットフォームのインターフェイス テーブルの設定を確認します。

この例では、matrix_mul_onmatrix_sizeburst_lenburst_from_ddrburst start などの入力パラメーターポートがAXI4インターフェイスにマッピングされています。HDL Coder製品は、これらのポートに対して AXI4 インターフェイスでアクセス可能なレジスタを生成します。FPGA ボード上でデザインを実行しているときに、 MATLABを使用して実行時にこれらのパラメーターを調整できます。

イーサネット ベースの AXI マネージャー インターフェイスには、個別の読み取りチャネルと書き込みチャネルがあります。axim_rd_dataaxim_rd_s2maxim_rd_m2s などの読み取りチャネルポートは、 AXI4 Master Readインターフェイスにマップされます。axim_wr_dataaxim_wr_s2maxim_wr_m2s などの書き込みチャネルポートは、 AXI4 Master Writeインターフェイスにマップされます。

5.ステップ 3.2「RTL コードと IP コアの生成」を右クリックし、「選択したタスクまで実行」を選択して IP コアを生成します。生成された IP コア レポート内の IP コアについては、レジスタ アドレス マッピングおよびその他のドキュメントを参照してください。

6.ステップ 4.1 の「Create Project」を右クリックし、「Run This Task」を選択して Vivado プロジェクトを生成します。プロジェクトの作成中に、生成された DUT IP コアは、イーサネット ベースの AXI Manager リファレンス デザインを使用して外部 DDR3 メモリ アクセスに統合されます。このリファレンス デザインは、KC705 プラットフォーム上のオンボード外部 DDR3 メモリと通信するためのザイリンクス メモリ インターフェイス ジェネレーター (MIG) IP で構成されています。AXI Manager IP も追加され、 MATLAB がDUT IP を制御し、DDR メモリの内容を初期化および検証できるようになります。

結果ウィンドウでプロジェクト リンクをクリックすると、生成された Vivado プロジェクトを表示し、デザインを検査できます。

イーサネット ベースの AXI マネージャー IP のデフォルトのターゲット IP アドレスは 192.168.0.2 で、デフォルトの UDP ポート値は 50101 です。これらの値を変更するには、Vivado ブロック デザインでethernet_mac_hub IP をダブルクリックします。

7.ステップ 4.3、Program Target Device を右クリックし、Run to Selected Task を選択してビットストリームを生成し、デバイスをプログラムします。

Kintex-7 ハードウェアで FPGA 実装を実行する

MATLABでこのスクリプトを実行して、FPGA 実装を実行し、ハードウェアの結果を検証します。

hdlcoder_external_memory_axi_master_hw_run

このスクリプトは、まずMatrix_Sizeを 500 に初期化します。これは、500 行 500 列の行列を意味します。Matrix_Size は最大 4000 まで調整できます。

次に、スクリプトは AXI4 マスターの読み取りおよび書き込みチャネルのベース アドレスを構成します。これらのアドレスは、DUT が外部 DDR メモリに対して読み書きするベース アドレスを定義します。このスクリプトでは、DUT はベース アドレス「40000000」から読み取り、ベース アドレス「50000000」に書き込みます。

AXI マネージャー機能は、入力ベクトルおよび行列データで外部 DDR3 メモリを初期化し、出力 DDR メモリの場所をクリアするために使用されます。

DUT の計算は、AXI4 のアクセス可能なレジスタを制御することによって開始されます。DUT IP コアは、DDR メモリから入力データを読み取り、行列ベクトル乗算を実行し、結果を DDR メモリに書き込みます。

最後に、出力結果がMATLABに読み戻され、期待値と比較されます。このようにして、ハードウェアの結果がMATLABで検証されます。

関連するトピック