NI FPGAデバイスDRAM使用方法

概要

多くの高性能デバイスでは、ダイナミックランダムアクセスメモリ (DRAM) をローカルストレージとして使用しています。このメモリは、高密度かつ高帯域幅を特徴としています。一部のNI FPGAモジュールおよびデバイスにはDRAMが搭載されており、この形式のローカルストレージを独自のアプリケーションに組み込む自由を提供します。DRAMは、レコードベースの収集/生成のようなシンプルなローカルストレージから、チャンネルエミュレーションアプリケーションにおける長い遅延チェーンの実装まで、幅広い用途に使用されています。このチュートリアルでは、NI LabVIEW FPGAモジュールの強力なDRAM抽象化およびインターフェースを使用して、デバイス上のDRAMを活用する方法を学びます。

内容

DRAM使用する

DRAMへのネイティブLabVIEW FPGAインターフェースは、メモリ項目を介して行われます。このインターフェースは、デバイス上の物理的なDRAMとの通信に伴う低レベルの複雑さを巧みに抽象化し、DRAMリソースへの競合する要求を調整・制御し、メモリを最大限柔軟に利用できるようにセグメント化します。その結果、DRAMへの書き込みとDRAMからの読み出しを行うシンプルなインターフェースが実現されます。

DRAMメモリ項目は、プロジェクトエクスプローラでグローバルに作成されます。DRAMメモリ項目を作成するには、FPGAターゲットを右クリックし、「新規作成」→「メモリ」を選択します。次に、実装に「DRAM」を選択します。メモリ項目は1つのDRAMバンクを対象とし、選択されたDRAMバンクに他のメモリ項目が割り当てられていない場合、そのバンク全体の容量になる可能性があります。

図1.「メモリのプロパティ」ウィンドウを使用して、DRAMメモリ項目の容量、データ型、およびDRAMバンクを設定

また、同じDRAMバンクを使用する複数のメモリ項目を作成することにより、DRAM領域全体を小さなメモリにセグメント化し、LabVIEW FPGAコードの異なるセクションから独立してアクセスすることもできます。LabVIEWは自動的にアービトレーションコードを処理し、生成されるすべてのインターフェースにDRAMへの平等なアクセス権を提供します。以下の図は、所定のDRAMバンクへのアクセスを提供するLabVIEWが生成するロジックを示しています。

図2.LabVIEWには、DRAMへの複数のインターフェースを処理するためのアービトレーションスキームが組み込まれている

 

書き込みメソッド

DRAMにデータを保存するには、以下の「書き込み」メソッドを使用します。書き込み先のアドレスと、そこに格納するデータが必要です。ハンドシェイク端子である「Input Valid」と「Ready for Input」は、有効なデータのみがメモリに書き込まれるようにするために使用されます。「Input Valid」入力にTRUEの値が書き込まれると、書き込みコマンドがインターフェースに送られます。「Ready for Input」端子は、インターフェースが新規データを受信できる状態かどうかを示します。「Ready for Input」がFALSEの場合、データは無視され、書き込みコマンドは実行されません。情報の損失を防ぐには、「Ready for Input」がTRUEの場合にのみ、書き込みメソッドにデータを送信します。

注:範囲外アクセスを回避するためのベストプラクティスに従ってください。メモリブロックのサイズを超えるアドレスへの読み書きは、非常に混乱を招く可能性があります。メモリブロックにどれだけの要素が割り当てられているかを常に意識してください。メモリメソッドのエラー端子を有効にすることで、メモリ領域外へのアクセスを検出できます。

図3.メモリ項目書き込みメソッドを用いて、データをDRAMに書き込む

 

読み取りメソッド

DRAMからデータを取得するには、2つのメソッドノードを使用します:「データを要求」と「データを取得」。最初のメソッドノード「データを要求」は、対象となるデータのアドレスを使用して、そのアドレスのデータをメモリコントローラに要求します。ただし、アービトレーションやDRAM更新などの非確定的発生の要件に加えて、DRAMのレイテンシは比較的長くなります。したがって、データは即座には利用できません。代わりに、要求はキューに入り、受信した順に処理されます。一定時間が経過すると、「データを取得」メソッドは、要求された次のデータを出力し、「Output Valid」をアサートしてデータが使用可能であることを示します。データは、「Ready for Output」端子がTRUEに設定されている場合にのみ返されます。これは、下流のロジックがデータを受信する準備が整っていることをメモリインターフェースに示すためです。

注:範囲外アクセスを回避するためのベストプラクティスに従ってください。メモリブロックのサイズを超えるアドレスへの読み書きは、非常に混乱を招く可能性があります。メモリブロックにどれだけの要素が割り当てられているかを常に意識してください。メモリメソッドのエラー端子を有効にすることで、メモリ領域外へのアクセスを検出できます。

図4.「データを要求」を使用してデータの要求を開始し、「データを取得」メソッドを使用してデータを取得

 

サポートいるデバイス

  DRAMバンク数サイズ/バンク帯域幅/バンク
Rシリーズデバイス    
 PXIe-7821R1512 MB800 MB/s
 PXIe-7822R1512 MB800 MB/s
FlexRIO FPGAモジュール    
 PXI-7952R264 MB800 MB/s
 PXI-7953R264 MB800 MB/s
 PXI-7954R264 MB800 MB/s
 PXIe-7962R2256 MB1.6 GB/s
 PXIe-7965R2256 MB1.6 GB/s
 PXIe-7966R2256 MB1.6 GB/s
 PXIe-7972R12 GB10.5 GB/s
 PXIe-7975R12 GB10.5 GB/s
 PXIe-7976R12 GB10.5 GB/s
 PXIe-7912*22 GB8.5 GB/s
 PXIe-7915*22 GB8.5 GB/s

* これらの値は、対応するコプロセッサと同じFPGAを搭載したFlexRIO統合I/Oモジュールに適用されます。たとえば、PXIe-7915の値は、KU060 FPGAを搭載したすべての統合I/Oモジュールに適用されます。

 

Was this information helpful?

Yes

No