Main Content

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

AXI Manager を使用した FPGA 外部メモリへのアクセス

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

要件

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

  • インテル Arrow® DECA MAX® 10 FPGA 開発キット

  • インテル FPGA ボード用HDL Verifier™サポート パッケージ

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

  • イーサネットケーブル

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

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

手順 2: MATLABでサンプルを準備する

インテル Quartus Prime ツールパスを設定します。コマンドを実行するときは、独自の インテル 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 の「Start Compilation」ボタンをクリックします。

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

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

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

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

手順 2: MATLABでサンプルを準備する

インテル Quartus Prime ツールパスを設定します。コマンドを実行するときは、独自の インテル 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: Ethernet AXI マネージャーを使用するように Quartus Prime プロジェクトを設定する

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

setupAXIManagerForQuartus('eth_aximaster_deca.qpf')

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

system('quartus eth_aximaster_deca.qpf &')

手順 4: Qsys デザインでのイーサネット 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 の「Start Compilation」ボタンをクリックします。

プログラミング ファイルを生成した後、次のコマンドを使用して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')

イーサネット AXI マネージャーを使用する場合:

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

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

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

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

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

参考

| |

関連するトピック