このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
readmemory
AXI4メモリマップされた下位からデータを読み取る
説明
は、data
= readmemory(mem
,addr
,size
)addr
で指定されたアドレスから開始し、各ワードごとにアドレスを増分しながら、size
個のデータ位置を読み取ります。この関数は、データを uint32
または uint64
データ型に型変換します (AXI マネージャー IP のデータ サイズによって異なります)。アドレス addr
は、FPGA ボード上の AXI マネージャー IP によって制御される AXI 従属メモリ位置を参照する必要があります。aximanager
オブジェクト、mem
は、MATLAB® と AXI マネージャー IP 間の接続を管理します。
は、1 つ以上の名前と値の引数を使用してオプションを指定します。data
= readmemory(mem
,addr
,size
,Name,Value
)
例
MATLAB から Intel FPGA ボード上のメモリにアクセスする
この例では、MATLAB® から Intel® FPGA ボード上のメモリ位置を読み書きする方法を示します。
この例を使用する前に、MATLAB ホスト マシンに接続された FPGA ボード上でデザインが実行されている必要があります。FPGA 設計には、FPGA ベンダー向けにカスタマイズされた AXI マネージャー IP が含まれている必要があります。サポート パッケージのインストールにはこの IP が含まれます。プロジェクトに IP を含めるには、AXI マネージャーを使用して FPGA 外部メモリにアクセスする の例を参照してください。
AXI マネージャー オブジェクトを作成します。オブジェクトは MATLAB を FPGA ボードに接続し、IP が存在することを確認します。
mem = aximanager('Intel')
mem =
aximanager with properties:
Vendor: 'Intel' JTAGCableName: 'auto'
10 個のアドレスを書き込み、1 つの場所からデータを読み取ります。デフォルトでは、これらの関数はデータの各ワードのアドレスを自動的に増分します。
writememory(mem,140,[10:19]); rd_d = readmemory(mem,140,1)
rd_d =
uint32
10
10 か所からデータを読み取ります。
rd_d = readmemory(mem,140,10)
rd_d =
1x10 uint32 row vector
10 11 12 13 14 15 16 17 18 19
AXI マネージャーが同じアドレスからすべてのデータを読み取るように指定して (自動増分を無効にして)、同じアドレスからデータを 10 回読み取ります。
rd_d = readmemory(mem,140,10,'BurstType','Fixed')
rd_d =
1x10 uint32 row vector
10 10 10 10 10 10 10 10 10 10
同じアドレスにデータを10回書き込みます。この場合、アドレス 140
に格納される最終値は 29
です。
writememory(mem,140,[20:29],'BurstType','Fixed'); rd_d = readmemory(mem,140,10)
rd_d =
1x10 uint32 row vector
29 11 12 13 14 15 16 17 18 19
アドレスを 16 進数値として指定します。読み取ったデータを uint32
以外のデータ型にキャストする関数を指定します。
writememory(mem,0x1c,[0:4:64]);
rd_d = readmemory(mem,0x1c,16,'OutputDataType',numerictype(0,6,4))
rd_d =
Columns 1 through 10 0 0.2500 0.5000 0.7500 1.0000 1.2500 ... 1.5000 1.7500 2.0000 2.2500 Columns 11 through 16 2.5000 2.7500 3.0000 3.2500 3.5000 3.7500
DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 6 FractionLength: 4
ボードにアクセスする必要がなくなったら、JTAG 接続を解放します。
release(mem);
MATLAB からの Xilinx FPGA ボード上のメモリへのアクセス
この例では、MATLAB® から Xilinx® FPGA ボード上のメモリ位置を読み書きする方法を示します。
この例を使用する前に、MATLAB ホスト マシンに接続された FPGA ボード上でデザインが実行されている必要があります。FPGA 設計には、FPGA ベンダー向けにカスタマイズされた AXI マネージャー IP が含まれている必要があります。サポート パッケージのインストールにはこの IP が含まれます。プロジェクトに IP を含めるには、JTAGベースのAXIマネージャを使用してFPGAメモリにアクセスする の例を参照してください。
AXI マネージャー オブジェクトを作成します。オブジェクトは MATLAB を FPGA ボードに接続し、IP が存在することを確認します。
mem = aximanager('Xilinx')
mem =
aximanager with properties:
Vendor: 'Xilinx' JTAGCableName: 'auto'
10 個のアドレスを書き込み、1 つの場所からデータを読み取ります。デフォルトでは、これらの関数はデータの各ワードのアドレスを自動的に増分します。
writememory(mem,140,[10:19]); rd_d = readmemory(mem,140,1)
rd_d =
uint32
10
10 か所からデータを読み取ります。
rd_d = readmemory(mem,140,10)
rd_d =
1x10 uint32 row vector
10 11 12 13 14 15 16 17 18 19
AXI マネージャーが同じアドレスからすべてのデータを読み取るように指定して (自動増分を無効にして)、同じアドレスからデータを 10 回読み取ります。
rd_d = readmemory(mem,140,10,'BurstType','Fixed')
rd_d =
1x10 uint32 row vector
10 10 10 10 10 10 10 10 10 10
同じアドレスにデータを10回書き込みます。この場合、アドレス 140
に格納される最終値は 29
です。
writememory(mem,140,[20:29],'BurstType','Fixed'); rd_d = readmemory(mem,140,10)
rd_d =
1x10 uint32 row vector
29 11 12 13 14 15 16 17 18 19
アドレスを 16 進数値として指定します。読み取ったデータを uint32
以外のデータ型にキャストする関数を指定します。
writememory(mem,0x1c,[0:4:64]);
rd_d = readmemory(mem,0x1c,16,'OutputDataType',numerictype(0,6,4))
rd_d =
Columns 1 through 10 0 0.2500 0.5000 0.7500 1.0000 1.2500 ... 1.5000 1.7500 2.0000 2.2500 Columns 11 through 16 2.5000 2.7500 3.0000 3.2500 3.5000 3.7500
DataTypeMode: Fixed-point: binary point scaling Signedness: Unsigned WordLength: 6 FractionLength: 4
ボードにアクセスする必要がなくなったら、JTAG 接続を解放します。
release(mem);
入力引数
mem
— FPGAボード上のAXIマネージャーIPへの接続
aximanager
オブジェクト
FPGA ボード上の AXI マネージャー IP への接続 (aximanager
オブジェクトとして指定)。
addr
— 読み取り操作の開始アドレス
4の非負整数倍 | 負でない16進数値の4の倍数
読み取り操作の開始アドレス。4 の非負整数倍または 4 の 16 進数値倍数として指定します。この関数は、32 ビット、40 ビット、64 ビットのアドレス幅をサポートします。この関数は、AXI マネージャーの IP アドレス幅に応じて、アドレスを uint32
または uint64
データ型にキャストします。アドレスは、FPGA ボード上の AXI マネージャー IP によって制御される AXI 従属メモリ位置を参照する必要があります。
メモリマッピングガイドライン
AXI マネージャー IP のデータ幅が 32 ビットの場合、メモリは 4 バイト境界に配置され、アドレスは 4 バイト単位で増分されます (
0x0
、0x4
、0x8
)。この場合、0x1
は不正なアドレスであり、エラーが発生します。AXI マネージャー IP のデータ幅が 64 ビットの場合、メモリは 8 バイト境界に配置され、アドレスは 8 バイト単位で増分されます (
0x0
、0x8
、0x10
)。この場合、0x1
と0x4
は不正であり、エラーが発生します。AXI マネージャー IP データ幅が 32 ビットで、
'BurstType'
引数を'Increment'
に設定すると、アドレスは 4 バイトずつ増分されます。AXI マネージャー IP データ幅が 64 ビットで、
'BurstType'
引数を'Increment'
に設定すると、アドレスは 8 バイトずつ増分されます。AXI マネージャー IP データ幅が 32 ビットで、
OutputDataType
引数を'half'
に設定すると、関数は下位 2 バイトを読み取り、上位 2 バイトを無視します。AXI マネージャー IP データ幅が 64 ビットで、
OutputDataType
引数を'half'
に設定すると、関数は下位 2 バイトを読み取り、上位 6 バイトを無視します。32 ビット レジスタへのアクセスには 64 ビット AXI マネージャーを使用しないでください。
例: 0xa4
は、0xa4
の開始アドレスを指定します。
データ型: uint32
| uint64
size
— 読み取るメモリ位置の数
非負の整数
読み取るメモリ位置の数。負でない整数として指定します。デフォルトでは、関数は連続したアドレス ブロックからデータを読み取り、各操作のアドレスを増分します。アドレスの増分を無効にして同じ場所から繰り返し読み取るには、'BurstType'
引数を 'Fixed'
に設定します。
DDR メモリのブロックの読み取りなど、大きな操作サイズを指定すると、関数は、サポートされている最大バースト サイズである 256 ワードを使用して、操作を複数のバーストに自動的に分割します。
例: 5
は 5 つの連続したメモリ位置を指定します。
名前と値の引数
引数のオプションのペアを Name1=Value1,...,NameN=ValueN
として指定します。Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後に表示されなければなりませんが、ペアの順序は重要ではありません。
R2021a より前は、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: 'BurstType','Fixed'
は、AXI マネージャーに同じアドレスからすべてのデータを読み取るように指示します。
BurstType
— AXI4バーストタイプ
'Increment'
(既定値) | 'Fixed'
AXI4 バースト タイプ。次のいずれかのオプションとして指定します。
'Increment'
— AXI マネージャーは、指定されたアドレスから始まる連続したメモリ位置からデータのベクトルを読み取ります。'Fixed'
— AXI マネージャーは同じアドレスからすべてのデータを読み取ります。
メモ
'Fixed'
バースト タイプは PCI Express® インターフェイスではサポートされていません。代わりに'Increment'
バーストタイプを使用してください。
OutputDataType
— 読み取りデータに割り当てられたデータ型
'uint32'
(既定値) | 'uint8'
| 'int8'
| 'uint16'
| 'int16'
| 'half'
| 'int32'
| 'single'
| 'uint64'
| 'int64'
| 'double'
| numerictype
オブジェクト
読み取りデータに割り当てられるデータ型。次のいずれかのオプションとして指定します。
'int8'
'uint8'
'uint16'
'int16'
'half'
'uint32'
'int32'
'single'
'uint64'
'int64'
'double'
numerictype
オブジェクト
この関数は、FPGA から読み出されたデータを指定されたデータ型に型変換します。double
は、64 ビット UDP 接続でのみサポートされます。
出力引数
バージョン履歴
R2017a で導入R2023a: ハーフデータ型のサポート
この関数は、FPGA ボード上のメモリ位置から half
データを読み取ります。読み取り操作のアドレスは、FPGA ボード上の AXI マネージャー IP によって制御される AXI 従属メモリ位置を参照する必要があります。
AXI マネージャー IP のデータ幅が 32 ビットの場合、メモリは 4 バイト境界に配置され、アドレスは 4 バイト単位で増分されます (
0x0
、0x4
、0x8
)。この場合、関数は下位 2 バイトを読み取り、上位 2 バイトを無視します。AXI マネージャー IP のデータ幅が 64 ビットの場合、メモリは 8 バイト境界に配置され、アドレスは 8 バイト単位で増分されます (
0x0
、0x8
、0x10
)。この場合、関数は下位 2 バイトを読み取り、上位 6 バイトを無視します。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)