このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
writememory
AXI4メモリマップされた下位にデータを書き込む
説明
例
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 ビットで、入力データが
half
の場合、関数は下位 2 バイトにデータを書き込み、上位 2 バイトにゼロを埋め込みます。AXI マネージャー IP データ幅が 64 ビットで、入力データが
half
の場合、関数は下位 2 バイトにデータを書き込み、上位 6 バイトをゼロで埋めます。32 ビット レジスタへのアクセスには 64 ビット AXI マネージャーを使用しないでください。
例: 64
は、64
の開始アドレスを指定します。
データ型: uint32
| uint64
data
— 書き込むデータワード
スカラー | ベクトル
書き込むデータ ワード。スカラーまたはベクトルとして指定します。デフォルトでは、関数はデータを連続したアドレス ブロックに書き込み、各操作のアドレスを増分します。アドレスの増分を無効にして各データ値を同じ場所に書き込むには、'BurstType'
引数を 'Fixed'
に設定します。
書き込み要求を FPGA に送信する前に、関数は入力データを uint32
、int32
、uint64
、または int64
データ型に型変換します。型変換は次の規則に従います。
入力データが
double
の場合、データは AXI マネージャー IP データ幅に応じてint32
またはint64
に型変換されます。入力データが
single
の場合、データは AXI マネージャー IP データ幅に応じてuint32
またはuint64
に型変換されます。入力データが
half
の場合、データはuint16
に型変換され、AXI マネージャー IP データ幅に応じてuint32
またはuint64
にパックされます。入力データ型のビット幅が AXI マネージャー IP データ幅より小さい場合、データは AXI マネージャー IP データ幅まで符号拡張されます。
入力データ型のビット幅が AXI マネージャー IP データ幅より大きい場合、データは
int32
、uint32
、int64
、uint64
に型変換されます。データは、AXI マネージャー IP データ幅と元のデータ型の符号と一致するように型変換されます。入力データが固定小数点データ型の場合、関数はデータの格納された整数値を書き込みます。
DDR メモリのブロックの書き込みなど、大きな操作サイズを指定すると、関数は、サポートされている最大バースト サイズである 256 ワードを使用して、操作を複数のバーストに自動的に分割します。
例: [1:100]
は 100 個の連続したメモリ位置を指定します。
データ型: uint8
| int8
| uint16
| int16
| half
| uint32
| int32
| single
| uint64
| int64
| double
| fi
名前と値の引数
引数のオプションのペアを Name1=Value1,...,NameN=ValueN
として指定します。Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後に表示されなければなりませんが、ペアの順序は重要ではありません。
R2021a より前は、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: 'BurstType','Fixed'
は、AXI マネージャーにすべてのデータを同じアドレスに書き込むように指示します。
BurstType
— AXI4バーストタイプ
'Increment'
(既定値) | 'Fixed'
AXI4 バースト タイプ。次のいずれかのオプションとして指定します。
'Increment'
— AXI マネージャーは、指定されたアドレスから始まる連続したメモリ空間にデータのベクトルを書き込みます。'Fixed'
— AXI マネージャーはすべてのデータを同じアドレスに書き込みます。
メモ
'Fixed'
バースト タイプは PCI Express® インターフェイスではサポートされていません。代わりに'Increment'
バーストタイプを使用してください。
バージョン履歴
R2017a で導入R2023a: ハーフデータ型のサポート
この関数は、FPGA ボード上のメモリ位置に half
データを書き込みます。書き込み要求を FPGA に送信する前に、関数は half
入力データを uint16
に型変換し、AXI マネージャー IP データ幅に応じてデータを uint32
または uint64
にパックします。
書き込み操作のアドレスは、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)