Main Content

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

AXI マネージャーを使用して FPGA 外部メモリにアクセスする

この例では、AXI マネージャーを使用して FPGA に接続された外部 DDR メモリにアクセスする方法を示します。FPGA 設計では、DDR メモリにアクセスするための Intel® DDR メモリ コントローラがインスタンス化されます。このメモリ コントローラは、FPGA からの読み取りおよび書き込み操作用のメモリ マップされた従属インターフェイスを提供します。AXI マネージャー機能は、MATLAB® が FPGA 内のメモリマップされた従属 IP にアクセスできるようにする AXI マネージャー IP を提供します。この例では、JTAG AXI マネージャー IP または Ethernet AXI マネージャー IP を Qsys デザインに統合し、MATLAB から DDR メモリを読み書きする方法を示します。

要件

  • サポートされているEDAツールとハードウェア に記載されているサポート対象バージョンの Intel Quartus® Prime ソフトウェア

  • Intel Arrow® DECA MAX® 10 FPGA 開発キット

  • HDL Verifier™ Intel FPGA ボード用サポート パッケージ

  • USB-Blaster II™ ダウンロード ケーブル

  • イーサネットケーブル

JTAG AXI マネージャーを使用するためのセットアップ

手順 1: FPGAボードをセットアップします。DECA ボードが USB JTAG ケーブルを介してホスト コンピューターに接続されていることを確認します。

手順 2: MATLAB で例を準備する

Intel Quartus Prime ツールパスを設定します。コマンドを実行するときは、独自の Intel Quartus Prime インストール パスを使用してください。

hdlsetuptoolpath('ToolName','Altera Quartus II', ...
             'ToolPath','C:\intelFPGA\18.0\quartus\bin64\quartus.exe');

この例では、Quartus プロジェクトを作成します。この tcl スクリプトは Quartus プロジェクトを作成し、デザイン ファイルをプロジェクトに追加します。

system('quartus_sh -t create_project_deca.tcl')

このコマンドが完了するまでに数秒かかります。完了すると、現在のディレクトリに「aximaster_deca.qpf」という名前の Quartus プロジェクトが作成されます。

手順 3: AXIマネージャーを使用するようにQuartus Primeプロジェクトを構成する

次のコマンドを使用して、IP をプロジェクト ディレクトリにコピーします。

setupAXIManagerForQuartus('aximaster_deca.qpf')

生成された Quartus プロジェクトを GUI モードで開きます。ファイル ブラウザーでプロジェクトをダブルクリックするか、MATLAB でこのコマンドを実行できます。

system('quartus aximaster_deca.qpf &')

手順 4: Qsys 設計の JTAG AXI マネージャー IP を検査する (オプション)

Quartus GUI で、Qsys デザイン ファイル system.qsys を開き、AXI Manager IP が DDR コントローラーにどのように接続されているかを調べます。

手順 5: FPGAプログラミングファイルを生成し、FPGAをプログラムする

FPGA プログラミング ファイルを生成するには、Quartus Prime の「コンパイルの開始」ボタンをクリックします。

プログラミング ファイルを生成したら、次のコマンドを使用して MATLAB の FPGA をプログラムします。

filProgramFPGA('Altera','output_files/aximaster_deca.sof',1)

Ethernet AXI Manager を使用するためのセットアップ

手順 1: FPGAボードをセットアップします。DECA ボードが USB Blaster II ダウンロード ケーブルとイーサネット ケーブルの両方を介してホスト コンピューターに接続されていることを確認します。

手順 2: MATLAB で例を準備する

Intel Quartus Prime ツールパスを設定します。コマンドを実行するときは、独自の Intel Quartus Prime インストール パスを使用してください。

hdlsetuptoolpath('ToolName','Altera Quartus II', ...
             'ToolPath','C:\intelFPGA\18.0\quartus\bin64\quartus.exe');

この例では、Quartus プロジェクトを作成します。この tcl スクリプトは Quartus プロジェクトを作成し、作成したデザイン ファイルをプロジェクトに追加します。

system('quartus_sh -t create_project_eth_deca.tcl')

完了すると、現在のディレクトリに「eth_aximaster_deca.qpf」という名前の Quartus プロジェクトが作成されます。

手順 3: イーサネットAXIマネージャーを使用するようにQuartus Primeプロジェクトを構成する

次のコマンドを使用して、IP をプロジェクト ディレクトリにコピーします。

setupAXIManagerForQuartus('eth_aximaster_deca.qpf')

生成された Quartus プロジェクトを GUI モードで開きます。ファイル ブラウザーでプロジェクトをダブルクリックするか、MATLAB でこのコマンドを実行します。

system('quartus eth_aximaster_deca.qpf &')

手順 4: Qsys 設計の Ethernet AXI マネージャー IP を検査する (オプション)

Quartus GUI で、Qsys デザイン ファイル aximaster.qsys を開き、UDP AXI Manager IP が DDR コントローラーにどのように接続されているかを調べます。

イーサネットベースの AXI マネージャー IP には、ターゲット IP アドレス 192.168.1.2 と UDP ポート値 50101 が割り当てられています。これらの値は、Qsys で ethernet_mac_hub_IP をダブルクリックすることで変更できます。

手順 5: FPGAプログラミングファイルを生成し、FPGAをプログラムする

FPGA プログラミング ファイルを生成するには、Quartus Prime の「コンパイルの開始」ボタンをクリックします。

プログラミング ファイルを生成したら、次のコマンドを使用して MATLAB の FPGA をプログラムします。

filProgramFPGA('Altera','output_files/eth_aximaster_deca.sof',1)

FPGAへの読み取りおよび書き込み操作

FPGA をプログラミングした後、AXI マネージャー IP に接続された AXI 下位デバイスに読み取りと書き込みを行うことができます。この例では、データは FPGA に接続された DDR メモリに書き込まれ、MATLAB に取り戻されます。

MATLAB に AXI マネージャー オブジェクトを作成します。

JTAG AXI マネージャーを使用する場合:

h = aximanager('Intel')

Ethernet AXI マネージャーを使用する場合:

h = aximanager('Intel','interface','PLEthernet','deviceAddress','192.168.1.2','port','50101');

これらの 2 つのコマンドを実行して、値 100 の単一ワードを DDR メモリのアドレス 0 に書き込み、AXI マネージャー オブジェクトを使用してそれを読み取ります。

writememory(h,0,100)
readmemory(h,0,1)

また、MATLAB では、単一の読み取り/書き込みコマンドを使用して、DDR メモリに大きなデータ ベクトルを読み書きすることもできます。これらのコマンドは、大量のデータを自動的に小さなバーストに分割し、AXI4 プロトコル経由で転送できるようにします。この関数は、スループット パフォーマンスを最大化するために、各バーストに可能な限り最大のバースト サイズを使用します。次のコマンドは、100000 ワードを DDR メモリに書き込み、それを読み戻します。また、読み戻されたデータが正しいかどうかを確認し、実行時間を報告します。

address = 0;
data = 1:100000;
writememory(h,address,data);
r = readmemory(h,address,100000);
assert(all(r==data));

参考

| |

関連するトピック