Main Content

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

readmemory

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 を含めるには、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 ビットで、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 で導入

    すべて展開する