メモリ エレメントを効率的に推論するには、パフォーマンスに影響する次の要素について考慮する必要があります。
- 専用ブロック RAM または分散 RAM の使用
RAM は、専用ブロック RAM 内、または分散 RAM を使用して LUT 内にインプリメントできます。この選択は、リソース選択に影響するだけでなく、達成可能なクロック周波数および消費電力にも大きく影響することがあります。
通常、RAM に必要なワード数が最初の基準となり、64 ビットのワード数までのメモリ配列は、通常 LUT RAM にインプリメントされます (32 ビット以下のワード数は LUT ごとに 2 ビットをマップ、64 ビットまでのワード数は LUT とごに 1 ビットをマップ可能)。使用可能なリソースおよび合成ツールの割り当てによって、よりワード数の多い RAM も LUT RAM にインプリメントできます。
256 ビットよりもワード数の多いメモリ配列は、通常ブロック RAM メモリにインプリメントされます。AMD デバイスには柔軟性があるので、このような構造をさまざまな幅およびワード数の組み合わせでマップできます。コードの大容量メモリ配列宣言に使用されるブロック RAM の数および構造を理解するため、これらの構成を知っておく必要があります。
- 出力パイプライン レジスタの使用
出力レジスタの使用は、より高いクロック周波数で動作するデザインに必須ですが、タイミング クロージャを容易にするためすべてのデザインに推奨されます。これにより、ブロック RAM の clock-to-out タイミングが改善されます。また、スライスの出力レジスタの clock-to-out タイミングはブロック RAM レジスタよりも高速なので、2 つ目の出力レジスタがあると有益です。両方のレジスタを使用すると、読み出しレイテンシの合計は 3 になります。これらのレジスタを推論する場合は、レジスタが RAM 配列と同じ階層レベルにある必要があります。これにより、ツールでブロック RAM 出力レジスタがプリミティブに統合されるようになります。
- 入力パイプライン レジスタの使用
RAM 配列が大きく、多数のプリミティブにマップされる場合、ダイのかなりのエリアに広がる可能性があり、これがアドレスおよび制御ラインでのタイミング クロージャの問題につながることがあります。これらの信号の生成後、RAM の前にレジスタを追加することを考慮してください。タイミングをさらに向上させるため、フローの後の方で
phys_opt_design
を使用してこのレジスタを複製します。入力にロジックのないレジスタの方が簡単に複製できます。