LabVIEW FPGAモジュールでは、メモリ項目(memory item)を介してDRAMに対するネイティブなインタフェースを提供します。このインタフェースは、モジュール上の物理的なDRAMとの通信に伴う低レベルの複雑さを軽減したり、DRAMのリソースに対する競合が生じた場合のアービトレーション(調停)を行ったりするほか、DRAMを使用する際の柔軟性を最大限に高めるためにメモリのセグメント化を行います。 結果として、DRAMへの書き込みやDRAMからの読み出しをシンプルなインタフェースによって実行することが可能になります。
DRAMのメモリ項目は、ブロックメモリやルックアップテーブルと同様に、プロジェクトビューによってグローバルに作成することができます。DRAMのメモリ項目を新たに作成するには、対象とするFPGAターゲットを右クリックし、「新規」→「メモリ」を順に選択します。続いて、「Implementation(実装)」で「DRAM」を選択してください。メモリ項目は、それぞれ1つのDRAMバンクをターゲットとします。選択したDRAMバンクにほかのメモリ項目が割り当てられていないという条件の下、メモリ項目はバンクの最大数まで増やすことができます。
メモリ項目を用いれば、DRAMの全領域を小さなセグメントに分割し、LabVIEW FPGAモジュールで作成したコードの複数のセクションから独立してアクセスできるようになります。LabVIEWは、生成されたすべてのインタフェースがDRAMに均等にアクセスできるようにアービトレーション用のコードを生成します。下に示した図は、LabVIEWが生成したロジックが特定のDRAMバンクにアクセスするまでのプロセスを表しています。
下の図に示すように、書き込みの方法は単純です。すなわち、書き込み先となるアドレスと、そのアドレスに入力するデータを設定します。「Input Valid(入力の妥当性)」に対する入力が「True(真)」である場合には、インタフェースに書き込みコマンドが必ずプッシュされます。「入力準備完了(Ready for Input)」ターミナルは、インタフェースの準備が整っているかどうかを知らせるもので、その値が「False(偽)」の場合にはデータは無視されます。情報の損失を避けるために、「入力準備完了(Ready for Input)」が「True」の場合にのみ、データがプッシュされます。
メモリの読み出しインタフェースは、2つの処理から成ります。「データの要求」と「データの取得」です。まずデータの要求では、ユーザが取得したいと考えているデータのアドレスを受け取り、そのアドレスに対応するデータをメモリコントローラから要求します。ここで認識しておかなければならないのは、DRAMでは、アービトレーションが生じること、DRAMのリフレッシュなどが非確定的に発生すること、さらには比較的長い遅延が生じることです。つまり、データをすぐに入手することはできません。要求はキューに格納され、受信された順に処理されます。ある程度の時間が経過した後、2つ目のデータの取得の処理が行われます。この処理によって、次のデータが要求され、そのデータが入手可能な状態にあるかどうかを示す「Output Valid(出力の妥当性)」がアサート(出力)されます。「出力準備完了(Ready for Output)」ターミナルに「True」が設定された場合、つまりデータを使用するロジックにおいてデータを受信する準備が整ったことがメモリインタフェースに示された場合に限り、データが表示されます。