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

ID 683082
日付 4/13/2020
Public

このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。

ドキュメント目次

1.4.1.3. Read-During-Write動作の確認

HDLデザインで記述されているメモリーブロックのRead-During-Write動作がターゲット・デバイス・アーキテクチャーと一致していることを確認してください。

HDLソースコードは、同じクロックサイクルで同じメモリーアドレスから読み書きするときのメモリー動作を指定します。リードは、アドレスの古いデータ、またはアドレスに書き込まれた新しいデータのいずれかを返します。これは、メモリーブロックの書き込み中のリード動作と呼ばれます。 Intel FPGAメモリーブロックは、ターゲット・デバイス・ファミリー、メモリーモード、ブロックタイプに応じて、書き込み中のリード動作が異なります。

合成ツールは、ソースコードに記述されている機能を保持します。したがって、ソースコードがRAMブロックに対してサポートされていないread-during-write動作を指定している場合、 インテル® Quartus® Primeソフトウェアは、専用のRAMハードウェアではなく、通常のロジックセルにロジックを実装します。

HDLコードでの連続リード

次の例のように、HDLコードで連続リードが行われると、1つの一般的な問題が発生します。次のコーディング・スタイルの使用は避けてください。

//Verilog HDL concurrent signal assignment
assign q = ram[raddr_reg];
-- VHDL concurrent signal assignment
q <= ram(raddr_reg);

このタイプのHDLは、ライト動作が行われると、非同期メモリーブロックの動作であるリードクロックに関係なく、リード時にアドレスの新しいデータがすぐに反映されることを意味します。合成では、この動作を同期メモリーブロックに直接マッピングできません。ライトクロックとリードクロックが同じ場合、合成はメモリーブロックを推測し、デバイスの動作がHDLの動作と一致するようにバイパスロジックを追加できます。ライトクロックとリードクロックが異なる場合、合成ではバイパスロジックを確実に追加できないため、専用のRAMブロックではなく通常のロジックセルにロジックを実装します。次のセクションの例では、書き込み中のリード条件のこれらの違いのいくつかについて説明します。

さらに、特定のデバイスのロジック・アレイ・ブロック(LAB)のMLABメモリーは、専用デバイス・アーキテクチャーでのread-during-writeの古いデータまたは新しいデータの動作を簡単にサポートしません。この動作をサポートする追加のロジックを実装すると、メモリー全体のタイミング・パフォーマンスが大幅に低下します。

注: MLABメモリーで最高のパフォーマンスを得るには、書き込み操作中にデザインがリードデータに依存しないようにしてください。

多くの合成ツールで、書き込み中のリード動作がデザインにとって重要でないことを宣言できます(たとえば、同じクロックサイクルで書き込み先と同じアドレスから読み出さない場合)。 インテル® Quartus® Primeプロ・エディション合成で、合成属性ramstyleno_rw_checkに設定して, インテル® Quartus® Prime HDLコードで指定された動作を使用するのではなく、RAMのread-during-writeの動作を定義するソフトウェアを許可します。この属性は、合成ツールが追加のロジックを使用してメモリーブロックを実装できないようにするか、不可能な場合にメモリー推論を許可します。