Main Content

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

writememory

AXI4メモリマップされた下位にデータを書き込む

    説明

    writememory(mem,addr,data) は、addr で指定されたアドレスから開始し、各ワードごとにアドレスを増分しながら、data で指定されたすべてのワードを書き込みます。アドレス addr は、FPGA ボード上の AXI マネージャー IP によって制御される AXI 従属メモリ位置を参照する必要があります。AXI マネージャー オブジェクト mem は、MATLAB® と AXI マネージャー IP 間の接続を管理します。

    writememory(mem,addr,data,Name,Value) は、1 つ以上の名前と値の引数を使用してオプションを指定します。

    すべて折りたたむ

    この例では、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 ホスト マシンに接続された 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);
    

    入力引数

    すべて折りたたむ

    FPGA ボード上の AXI マネージャー IP への接続 (aximanager オブジェクトとして指定)。

    書き込み操作の開始アドレス。4 の非負整数倍または 4 の 16 進数値倍数として指定します。この関数は、32 ビット、40 ビット、64 ビットのアドレス幅をサポートします。この関数は、AXI マネージャーの IP アドレス幅に応じて、アドレスを uint32 または uint64 データ型に変換します。アドレスは、FPGA ボード上の AXI マネージャー IP によって制御される AXI 従属メモリ位置を参照する必要があります。

    メモリマッピングガイドライン

    • AXI マネージャー IP のデータ幅が 32 ビットの場合、メモリは 4 バイト境界に配置され、アドレスは 4 バイト単位で増分されます (0x00x40x8)。この場合、0x1 は不正なアドレスであり、エラーが発生します。

    • AXI マネージャー IP のデータ幅が 64 ビットの場合、メモリは 8 バイト境界に配置され、アドレスは 8 バイト単位で増分されます (0x00x80x10)。この場合、0x10x4 は不正であり、エラーが発生します。

    • 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

    書き込むデータ ワード。スカラーまたはベクトルとして指定します。デフォルトでは、関数はデータを連続したアドレス ブロックに書き込み、各操作のアドレスを増分します。アドレスの増分を無効にして各データ値を同じ場所に書き込むには、'BurstType' 引数を 'Fixed' に設定します。

    書き込み要求を FPGA に送信する前に、関数は入力データを uint32int32uint64、または int64 データ型に型変換します。型変換は次の規則に従います。

    • 入力データが double の場合、データは AXI マネージャー IP データ幅に応じて int32 または int64 に型変換されます。

    • 入力データが single の場合、データは AXI マネージャー IP データ幅に応じて uint32 または uint64 に型変換されます。

    • 入力データが half の場合、データは uint16 に型変換され、AXI マネージャー IP データ幅に応じて uint32 または uint64 にパックされます。

    • 入力データ型のビット幅が AXI マネージャー IP データ幅より小さい場合、データは AXI マネージャー IP データ幅まで符号拡張されます。

    • 入力データ型のビット幅が AXI マネージャー IP データ幅より大きい場合、データは int32uint32int64uint64 に型変換されます。データは、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 マネージャーにすべてのデータを同じアドレスに書き込むように指示します。

    AXI4 バースト タイプ。次のいずれかのオプションとして指定します。

    • 'Increment' — AXI マネージャーは、指定されたアドレスから始まる連続したメモリ空間にデータのベクトルを書き込みます。

    • 'Fixed' — AXI マネージャーはすべてのデータを同じアドレスに書き込みます。

    メモ

    'Fixed' バースト タイプは PCI Express® インターフェイスではサポートされていません。代わりに'Increment'バーストタイプを使用してください。

    バージョン履歴

    R2017a で導入

    すべて展開する