メインコンテンツ

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

readmemory

R2024a

AXI4メモリマップされた下位からデータを読み取る

    説明

    data = readmemory(mem,addr,size) は、addr で指定されたアドレスから開始し、各ワードごとにアドレスを増分しながら、size 個のデータ位置を読み取ります。この関数は、データを uint32 または uint64 データ型に型変換します (AXI マネージャー IP のデータ サイズによって異なります)。アドレス addr は、FPGA ボード上の AXI マネージャー IP によって制御される AXI 従属メモリ位置を参照する必要があります。aximanager オブジェクト、mem は、MATLAB® と AXI マネージャー IP 間の接続を管理します。

    例

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

    例

    すべて折りたたむ

    この例では、MATLAB® から Intel® FPGA ボード上のメモリ位置を読み書きする方法を示します。

    この例を使用する前に、MATLAB ホスト マシンに接続された FPGA ボード上でデザインが実行されている必要があります。FPGA 設計には、FPGA ベンダー向けにカスタマイズされた AXI マネージャー IP が含まれている必要があります。サポート パッケージのインストールにはこの IP が含まれます。プロジェクトに IP を含めるには、Access FPGA External Memory Using AXI Manager (HDL Coder) の例を参照してください。

    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 を含めるには、Access FPGA Memory Using JTAG-Based AXI Manager (SoC Blockset) の例を参照してください。

    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 バイト単位で増分されます (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

    読み取るメモリ位置の数。負でない整数として指定します。デフォルトでは、関数は連続したアドレス ブロックからデータを読み取り、各操作のアドレスを増分します。アドレスの増分を無効にして同じ場所から繰り返し読み取るには、'BurstType' 引数を 'Fixed' に設定します。

    DDR メモリのブロックの読み取りなど、大きな操作サイズを指定すると、関数は、サポートされている最大バースト サイズである 256 ワードを使用して、操作を複数のバーストに自動的に分割します。

    例: 5 は 5 つの連続したメモリ位置を指定します。

    名前と値の引数

    すべて折りたたむ

    引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に表示されなければなりませんが、ペアの順序は重要ではありません。

    R2021a より前は、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

    例: 'BurstType','Fixed' は、AXI マネージャーに同じアドレスからすべてのデータを読み取るように指示します。

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

    • 'Increment' — AXI マネージャーは、指定されたアドレスから始まる連続したメモリ位置からデータのベクトルを読み取ります。

    • 'Fixed' — AXI マネージャーは同じアドレスからすべてのデータを読み取ります。

    メモ

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

    読み取りデータに割り当てられるデータ型。次のいずれかのオプションとして指定します。

    • 'int8'

    • 'uint8'

    • 'uint16'

    • 'int16'

    • 'half'

    • 'uint32'

    • 'int32'

    • 'single'

    • 'uint64'

    • 'int64'

    • 'double'

    • numerictype オブジェクト

    この関数は、FPGA から読み出されたデータを指定されたデータ型に型変換します。double は、64 ビット UDP 接続でのみサポートされます。

    出力引数

    すべて折りたたむ

    size に指定した値に応じて、スカラーまたはベクトルとして返されるデータを読み取ります。この関数は、データを入力で指定されたデータ型に型変換します。

    バージョン履歴

    R2017a で導入

    すべて展開する