インテル® Quartus® Prime プロ・エディションのユーザーガイド: デザインの推奨事項

ID 683082
日付 8/03/2023
Public
ドキュメント目次

1.4.1.4. RAMの推論と実装の制御

インテル® Quartus® Primeの合成で提供するオプションにより、同期メモリーブロックを備えるインテル FPGAデバイスにおけるRAMの推論と実装を制御します。 合成ツールは通常、小さなRAMブロックを推論しません。小さなRAMブロックの実装には、通常のロジックでレジスターを使用する方が効率的です。

インテル® Quartus® Prime開発ソフトウェアですべてのサイズのRAMブロックをグローバルに推論するには、Advanced Analysis & Synthesis Settings ダイアログボックス (Assignments > Settings > Compiler Settings > Synthesis Settings (Advanced))Allow Any RAM Size for Recognition オプションを有効にします。

もしくは、ramstyle RTL属性を使用して、推論RAMの実装方法 (メモリーブロックのタイプや専用メモリーブロックの代わりに通常のロジックを使用するなど) を指定します。 インテル® Quartus® Primeの合成では、HDLコードで適切な ramstyle 属性を指定していない限り、推論メモリーをMLABにマッピングしません。ただし、フィッターで一部のメモリーがMLABにマッピングされる場合があります。

ramstyle 属性をRTLまたは .qsf ファイルで設定します。
(* ramstyle = "mlab" *) my_shift_reg
set_instance_assignment -name RAMSTYLE_ATTRIBUTE LOGIC -to ram
この属性は、推論メモリーの実装を制御します。属性は、RAM、ROM、またはシフトレジスターを推論する変数宣言に適用します。有効な値は、「M9K」、「M10K」、「M20K」、「M144K」、「MLAB」、「no_rw_check」、「logic」です。

RTLでRAMまたはROM推論にメモリーブロックの最大深度を指定することもできます。デザインファイルでRAMまたはROMを表す変数の宣言に max_depth 合成属性を指定します。次に例を示します。

// Limit the depth of the memory blocks implement "ram" to 512
// This forces the 
               Intel® 
               Quartus® Prime software to use two M512 blocks instead of one M4K block to implement this RAM
(* max_depth = 512 *) reg [7:0] ram[0:1023];

さらに、no_ram 合成属性を指定して、特定のアレイでのRAMの推論を防ぐことができます。次の例のようになります。

(* no_ram *) logic [11:0] my_array [0:12];