Main Content

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

JTAG ベースの AXI Manager を使用した FPGA メモリへのアクセス

JTAG ベースの AXI マネージャーを使用して、FPGA に接続されたメモリにアクセスします。FPGA には、DDR メモリと BRAM にそれぞれアクセスするためのザイリンクス DDR メモリ コントローラーと BRAM コントローラーが存在します。これらのメモリ コントローラーは、FPGA 内の他のコンポーネントによる書き込みおよび読み取り操作のための AXI4 下位インターフェイスを提供します。JTAG ベースの AXI マネージャー機能は、FPGA 内の任意の AXI 下位 IP にアクセスするために使用できる AXI マネージャー コンポーネントを提供します。この例では、AXI Manager IP をザイリンクス Vivado® プロジェクトに統合する方法と、 MATLAB®を使用して DDR メモリと BRAM にデータを読み書きする方法を示します。この例では、Vivado シミュレーターを使用してデザインをシミュレーションし、FPGA をプログラムして、 MATLABコンソールから書き込みおよび読み取り操作を実行します。

要件

設定

1. FPGAボードをセットアップします。USB-JTAG ケーブルを介して Arty ボードをホスト コンピュータに接続します。

2.MATLABで例を準備します。Xilinx Vivado ツール パスを設定します。コマンドを実行するときに独自の Xilinx Vivado インストール パスを使用します。

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

この例では Vivado プロジェクトを作成します。このプロジェクトには、この例の IP インテグレーターのブロック図と制約ファイルが含まれています。

system('vivado -mode batch -source jtagAXIMcreateproject.tcl')

このコマンドの実行には約 1 分かかります。実行が完了すると、 arty.xprという名前の Vivado プロジェクトが現在のディレクトリに表示されます。

3.Vivado IP を使用して Vivado プロジェクトを構成します。Vivado IP インテグレーター内で AXI Manager IP を使用するには、IP を含むフォルダーを Vivado プロジェクトの Vivado IP リポジトリ パス設定に追加します。MATLABで次のコマンドを実行して、プロジェクトにパスを追加します。

setupAXIManagerForVivado arty.xpr

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

system('vivado arty.xpr &')

4.AXI Manager IP を FPGA デザインに追加します。Vivado GUI で、ブロックダイアグラム デザイン ファイルjtagAXIMdesign_1.bdを開きます。デザイン ファイルはソース ファイル サブウィンドウにあります。

mig_7series_0 (DDR コントローラ) のアドレスを0x0000_0000に設定し、 axi_bram_ctrl_0 (BRAM コントローラ) のアドレスを0xc000_0000に設定します。この図に示すように、アドレス エディターで$を入力します。

または、Vivado で Tcl コマンドを実行してこれらの手順を完了することもできます。

source ./jtagAXIMmodifydesign.tcl

シミュレーションでの書き込みおよび読み取り操作

Vivado ウィンドウで [Run Simulation] をクリックしてシミュレーションを開始します。

シミュレーションが開始されると、DDR3 のキャリブレーション プロセスをシミュレートするために最初の数分が必要になります。

キャリブレーション後、 jtagAXIMtestbench.svファイル内のこれらの行は、インクリメント モードを使用してアドレス 0 から 256 連続ワード (32 ビット) のデータの書き込みと読み取りを行います。

wdata = new[256];
for(integer i =0;i<256;i=i+1)
wdata[i] = i+1;
wrapper.jtagAXIMdesign_1_i.hdlverifier_axi_mana_0.inst.writememory ...
 (0,wdata,hdlverifier::HDLV_AXI_BURST_TYPE_INCR);
wrapper.jtagAXIMdesign_1_i.hdlverifier_axi_mana_0.inst.readmemory ...
 (0,256,hdlverifier::HDLV_AXI_BURST_TYPE_INCR,rdata);

これらのコマンドは、インクリメント モードを使用して、アドレス 0xc000_0000 から連続 256 ワードのデータを書き込みおよび読み取ります。

wdata = new[256];
for(integer i =0;i<256;i=i+1)
wdata[i] = i+1;
wrapper.jtagAXIMdesign_1_i.hdlverifier_axi_mana_0.inst.writememory ...
 (3221225472,wdata,hdlverifier::HDLV_AXI_BURST_TYPE_INCR);
wrapper.jtagAXIMdesign_1_i.hdlverifier_axi_mana_0.inst.readmemory ...
 (3221225472,256,hdlverifier::HDLV_AXI_BURST_TYPE_INCR,rdata);

同様に、これらの行は、値 100 の単一ワードをメモリのアドレス 0 に書き込み、それを読み取る方法を示しています。

wdata = new[1];
wdata[0] = 100;
wrapper.jtagAXIMdesign_1_i.hdlverifier_axi_mana_0.inst.writememory ...
 (0,wdata,hdlverifier::HDLV_AXI_BURST_TYPE_FIXED);
wrapper.jtagAXIMdesign_1_i.hdlverifier_axi_mana_0.inst.readmemory ...
 (0,1,hdlverifier::HDLV_AXI_BURST_TYPE_FIXED,rdata);

FPGAビットストリームの生成とFPGAのプログラム

Vivado ウィンドウで [Generate Bitstream] をクリックして、FPGA プログラミング ファイルを生成します。Vivado では、次の手順に進む前にプロジェクトの保存を求めるメッセージが表示される場合があります。Vivado によるビットストリーム ファイルの生成には、約 5 ~ 10 分かかります。

Vivado がビットストリームを生成した後、 MATLABでこのコマンドを実行して FPGA をプログラムします。

filProgramFPGA('Xilinx Vivado','arty.runs\impl_1\design_1.bit',1)

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

FPGA をプログラミングした後は、AXI Manager IP に接続された AXI 下位デバイスからの書き込みと読み取りが可能になります。この例では、FPGA および BRAM に接続された DDR メモリにデータを書き込み、 MATLABにデータを取得します。

MATLABで AXI マネージャー オブジェクトを作成し、DDR メモリへの書き込みと読み取りを行います。単一の場所に書き込み、同じ場所からデータを読み取ります。この場合、読み出したデータは100となります。

h = aximanager('Xilinx');
writememory(h,'00000000',100);
readmemory(h,'00000000',1);

BRAM への書き込みおよび BRAM からの読み取りには、c000_0000 ~ c000_1FFF の範囲内の任意のアドレスを使用します。単一の場所に書き込み、同じ場所からデータを読み取ります。この場合、読み出したデータは 1000 です。

writememory(h,'c0000000',1000);
readmemory(h,'c0000000',1);

参考

| |

関連するトピック