メモ 本コンテンツの日本語版は、便宜を図るために自動翻訳で提供されています。正確な最新情報については、英語版をご覧ください。

いくつかのCompactRIOターゲットには、LabVIEW FPGA VIから直接アクセスが可能なオンボードDRAMが含まれます。LabVIEWはDRAMをFPGAメモリ項目としてアクセス可能にします。

オンボードDRAMの使用可能な容量を確認するには、CompactRIOターゲットの仕様ドキュメントを参照してください。

CompactRIOでDRAMを効果的に使用する

メモ 本コンテンツの日本語版は、便宜を図るために自動翻訳で提供されています。正確な最新情報については、英語版をご覧ください。

設計に関する次の考慮事項は、CompactRIOデバイスのFPGAのダイナミックランダムアクセスメモリ (DRAM) インタフェースで達成できるスループットと記憶域容量に影響を及ぼす場合があります。

  • アクセスサイズと周波数
  • 要求パイプライン
  • シーケンシャルアクセス

アクセスサイズと周波数

アクセスサイズとは、1つのメモリアドレスに格納される情報量です。さまざまなデータタイプを使用するようにメモリを設定することができます。最大限の性能を達成し、最大量のデータを活用するためには、コントローラのアクセスサイズに合ったデータタイプを使用してください。アクセスサイズは、所定のメモリアクセスで読み書きされる正確なビット数になります。

以下の表に、最適なアクセスサイズなど、FPGAからのアクセスが可能なDRAMをサポートするCompactRIOターゲットの仕様を示します。

表 23. FPGAアクセス可能なDRAMをサポートするCompactRIOターゲット
CompactRIOターゲット DRAMバンク数 サイズ (バンク単位) 理論上の最大帯域幅 (バンク単位) アクセスサイズ
cRIO-9034 1 128 MB 1.6 GB/s 128ビット
cRIO-9039 1 128 MB 1.6 GB/s 128ビット

データに関する推奨事項

アクセスサイズよりも小さいデータタイプを使用した場合、残りのビットは不明で無効な値を受け取りますが、引き続き書き込みが続けられるため、領域と帯域幅の両方が使用されます。たとえば、アクセスサイズが128ビット幅のときにDRAM構成で32ビットのデータタイプを選択すると、残りの96ビットは不明で無効なデータタイプになります。以下の図は、最適化されたメモリ要素およびデータタイプがアクセスサイズよりも小さい場合のメモリ要素を示しています。

図 8. 最適化されたメモリエレメント
各アクセスを最適化するには、DRAMのアクセスサイズと全く同じ幅のデータタイプを使用してください。メモリ項目は使用するクラスタをデータタイプとして受け取るため、情報をクラスタにパッケージ化して、LabVIEWにネイティブなデータタイプよりも大きなデータタイプに対応することができます。

DRAMクロック領域(100 MHz)内でデータをメモリ項目インタフェースにプッシュします。LabVIEWプロジェクトでFPGAターゲットを右クリックし、新規→FPGAベースクロックを選択して、DRAMクロックリソースを選択します。クロックレートでデータをメモリ項目インタフェースにプッシュすることによって、帯域幅を最適化することができます。

メモ DRAMクロック以外のクロックソースも使用できますが、パフォーマンスは最適化されません。

要求パイプライン

DRAMアーキテクチャはパイプライン化が進んでいるため、データが要求されてから要求が実行されるまでの間に比較的長いレイテンシが生じます。NIでは、高いスループットを維持するために、サンプルを事前要求することを推奨しています。

サンプルを事前要求する場合は、取得メソッドのデータ有効ストローブを待たずに、読み取るサンプルを要求します。個々の要求はレイテンシやある程度の非確定性の影響を受けますが、DRAMが各要求を個別に扱うのではなく、複数のデータに順次アクセスできるため、転送速度が大幅に向上します。

シーケンシャルアクセス

DRAMは高い記録密度と高い帯域幅に合わせて最適化されます。DRAMはシーケンシャルに、大きいブロック単位でデータにアクセスします。たとえば、実行対象プログラムで1バイトが要求されている場合でも、アドレス0x0のデータの読み取り後に、プロセッサが大きなブロックのメモリをキャッシュに読み取らなければ、アドレス0x1のデータを読み取ることはできません。

パフォーマンスを最大化するために、読み取ると書き込むの切り替え、連続していないアドレスへのアクセス、デクリメントアドレス方式でのメモリへの書き込みは避けてください。最も効率的なアクセス方法は、読み取りでも書き込みでも1種類のアクセスだけを多数のシーケンシャル (連続) アドレスに対して実行することです。こうすると最適化が実現しますが、これは大部分のアプリケーションにとっては実用的な方法ではありません。より実用的なアプローチは、アクセス対象のシーケンシャルデータの量を最大化し、アクセスモードでの変更を最低限に抑えることです。