配列定数のメモリ使用量を最適化する
- 更新日2025-03-06
- 6分で読める
LabVIEWがメモリに配列定数を実装する方法を指定することで、FPGAアプリケーションを最適化できます。新しい配列定数のデフォルトの実装は自動で、特定のコードパターンに基づいて、配列定数をブロックメモリ、ルックアップテーブル、またはフリップフロップで実装するかどうかをコンパイラが決定します。
FPGA VIを自動設定でコンパイラする際に問題がある場合は、代わりにブロックメモリまたはルックアップテーブルを選択して配列定数を実装してください。異なるタイプのメモリの利点が必要でない限り、配列定数のブロックメモリ実装を選択してください。ブロックメモリはFPGAリソースを消費せず、他のタイプのメモリと比較して高いクロックレートでコンパイルします。
開発コンピュータ上などで別のコンテキストを作成した配列定数は、FPGA VIで開かれる際に自動的に自動に設定されます。FPGA VIで作成された配列定数は、別のコンテキストに移動した際に選択したメモリ実装を保持します。
配列定数をブロックメモリまたはルックアップテーブルで実装する場合の制限事項
配列定数をブロックメモリまたはルックアップテーブルのいずれかで実装するには、以下の条件を満たしている必要があります。
- 配列定数をトップレベル表示器に配線することはできません。ただし、別のサブVIで「指標配列」関数から「部分配列置換」関数を分離できます。
- シングルサイクルタイミングループに配列定数を配置する場合は、ループ内に「部分配列置換」関数と「指標配列」関数を1つずつのみ含めることができます。これらの関数は、それぞれ一度のループ反復につき1つの指標アドレスにのみアクセスが可能で、関数のサイズ変更や複数の値の読み取り/書き込みを含めることはできません。
- シングルサイクルタイミングループ内のブロックメモリ実装では、以下の追加の条件を満たしている必要があります。
- VIがコンパイルまたはロードする際にグローバルに初期化し、FPGA VIがリセットする場合は初期化を無視するように構成したフィードバックノードを介して配列定数を渡す必要があります。フィードバックノードをグローバルに初期化するには、初期化端子を右クリックしてグローバル初期化→コンパイルまたはロード時に初期化を選択します。フィードバックノードが初期化を無視するように構成するには、フィードバックノードのプロパティダイアログボックスのFPGA実装ページで、FPGAリセットメソッドを無視チェックボックスをオンにします。
- 読み取りおよび書き込み操作の後にフィードバックノードを配置する必要があります。
- シングルサイクルタイミングループ内のルックアップテーブル実装では、配列定数をシフトレジスタまたはフィードバックノードに配線する必要もあります。
配列定数メモリ実装のコードパターン
以下のFPGA VIパターンを使用して、配列定数が選択したメモリタイプを使用していることを確認します。逆に、FPGA VIがコンパイルしない場合は、以下のパターンを使用してコンパイルが失敗した理由を判断します。
シングルサイクルタイミングループ内の配列定数のコード例
なしブロックメモリ実装
コードパターンが以下の例に似ている場合は、配列定数をブロックメモリで実装できます。
RAMパターン
以下のコードパターンでは、フィードバックノードが「指標配列」による読み取り実行後、および「部分配列置換」による書き込み実行後に表示されることに注目します。このパターンでは、必要なフィードバックノードで1つの読み取りと1つの書き込みの要件が満たされるため、コンパイルが実行されます。
ROMパターン
以下のコードパターンでは、フィードバックノードが「指標配列」による読み取り実行後に要求されることに注目します。
ルックアップテーブル実装
コードパターンが以下の例に似ている場合は、配列定数をルックアップテーブルで実装できます。
RAMパターン
以下のコードパターンでは、シングルサイクルタイミングループに配置された場合、フィードバックノードが「指標配列」による読み取り実行後に要求されないことに注目します。必要なフィードバックノードが配列定数に配線されることにも注目してください。
ROMパターン
以下のコードパターンでは、フィードバックノードが「指標配列」による読み取り実行後に要求されないことに注目します。
シングルサイクルタイミングループ外の配列定数のコード例
コードが以下のパターンに似ている場合は、配列定数をブロックメモリまたはルックアップテーブルのいずれかで実装できます。
RAMパターン
以下のコードパターンでは、「部分配列置換」による1つの書き込みのみが実行可能で、「指標配列」による1つの読み取り実行が続きます。
ROMパターン
以下のコードパターンでは、「指標配列」による無限の読み取りが実行可能で、フィードバックノードは必要ではありません。