インテル® Agilex™ エンベデッド・メモリー・ユーザーガイド

ID 683241
日付 4/25/2022
Public

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

ドキュメント目次

4.3.13. デザイン例

このデザイン例では、ROMからのデータをRAMに転送する必要があります。ROMとRAMは無関係のクロックで駆動されていると仮定します。この場合は、DCFIFOを使用して、非同期のクロックドメイン間でデータを効果的に転送することができます。
図 41. コンポーネント・ブロックと信号の相互通信次の図は、コンポーネント・ブロックとそれらの信号の相互通信を示しています。
注: DCFIFOの機能は、ECC機能を有効にして、M20Kを使用して実装されています。
注: DCFIFOの機能ではどちらも、非同期のデータ転送の問題 (準安定状態の影響) のみを処理することができます。コントローラーを使用して、ROM、DCFIFO、およびRAM間のデータ・バッファリング・プロセスを管理および監視することが必要です。このデザイン例では、書き込み制御ロジック (write_control_logic.v) と読み出し制御ロジック (read_control_logic.v) を提供しています。これらのロジックはDCFIFOの仕様でコンパイルされており、DCFIFOとの間の有効な書き込みまたは読み出し要求を制御します。
注: このデザイン例は、機能に関する動作で検証されており、タイミング解析とゲートレベルのシミュレーションは行われていません。デザインのコーディング (書き込みコントローラーと読み出しコントローラーのステートマシンなど) は最適化されていない可能性があります。このデザイン例の目的は、IPコアの使用方法 (特に、データ・バッファリング・アプリケーションでの制御信号について) を示すことであり、デザインのコーディングおよび検証プロセスを示すことではありません。

このデザイン例のDCFIFOの設定を取得するには、デザインファイル (dcfifo8x32.v) のパラメーターの設定を参照してください。

以降のセクションでは個別のシミュレーション波形が提供されており、書き込み制御ロジックおよび読み出し制御ロジックで、DCFIFOから受信する信号に対して制御信号を生成する方法を説明しています。

注: 内容をより理解するため、シミュレーションの波形についての説明を確認する際は、上の図の信号名を参照してください。
注: 以降の図と表で示されている信号はすべて、次の数値形式で示されています。
  • バイナリー形式の信号値: resettrclkfifo_wrreqfifo_wrfull
  • HEX形式の信号値: rom_addrrom_outfifo_in
図 42. DCFIFO機能への初期の書き込み操作
表 50.  DCFIFO機能への初期の書き込み操作における波形の説明
状態 説明
IDLE

10nsに達する前にreset信号がHighになり、書き込みコントローラーがIDLE状態になっています。IDLE状態時に、書き込みコントローラーはfifo_wrreq信号をLowに駆動し、rom_addr=00からのデータの読み出しを要求します。ROMはレジスターされない出力を保有するようにコンフィグレーションされているため、rom_out信号は、リセットに関係なくrom_addr信号からのデータをすぐに表示します。rom_out信号がDCFIFOのレジスターされる入力ポートであるfifo_in信号に直接接続されているため、レイテンシーが短縮します。この場合、データ (0000000000000000000000000000000000000000000000000000000000000001) は常に安定しています。また、WRITE状態でfifo_wrreq信号がHighになり、DCFIFOに書き込まれるまで保留されます。

WRITE

リセット信号のデアサート後、fifo_wrfull信号がLowの場合に、書き込みコントローラーはIDLE状態からWRITE状態に移行します。WRITE状態では、書き込みコントローラーはfifo_wrreq信号をHighに駆動し、DCFIFOへの書き込み操作を要求します。データは、DCFIFOに組み込まれているECCブロックを介してエンコードされます。rom_addr信号は変化しないため (00)、DCFIFOがクロックの次の立ち上がりエッジで実際にデータを書き込む前に、データは少なくとも1クロックサイクル安定しています。

INCADR

rom_addr信号がffに達していない (つまり、ROMからの最後のデータが読み出されていない) 場合に、書き込みコントローラーはWRITE状態からINCADR状態に移行します。INDADR状態では、書き込みコントローラーはfifo_wrreq信号をLowに駆動し、rom_addr信号を1増やします (00から01)。

- fifo_wrfull信号がLowで、rom_addr信号がffに達していない場合は、IDLE状態とWRITE状態で説明されている状態遷移が続きます。
図 43. DCFIFO機能からの初期の読み出し操作
表 51.  DCFIFO機能からの初期の読み出し操作における波形の説明
状態 説明
IDLE

35nsに達する前に、読み出しコントローラーはIDLE状態になっています。これは、リセット信号がLowであっても (波形には示されていません)、fifo_rdempty信号がHighであるために起こります。IDLE状態の際は、ram_addr = ffであり、INCADR状態でのRAMアドレスの増分に対応します。そのため、最初に読み出されるデータは、WRITE状態の際にram_addr = 00に格納されます。

INCADR

fifo_rdempty信号がLowの場合に、読み出しコントローラーはIDLE状態からINCADR状態に移行します。INCADR状態では、読み出しコントローラーはfifo_rdreq信号をHighに駆動し、DCFIFOからの読み出し操作を要求します。データはデコードされ、eccstatusではデータのステータスが示されます。エラーが検出されなかった場合は00、シングルビット・エラーが検出されて訂正された場合は10、訂正不可能なエラーの場合は11として示されます。ram_addr信号が1増加するため (ffから00)、読み出しデータをram_addr = 00でRAMに書き込むことができます。

WRITE

INCADR状態から、読み出しコントローラーは常にクロックの次の立ち上がりエッジでWRITE状態に移行します。WRITE状態では、ram_wren信号をHighに駆動し、RAMへのデータ書き込みをram_addr = 00で可能にします。同時に、読み出しコントローラーはram_rden信号をHighに駆動するため、新しく書き込まれたデータがクロックの次の立ち上がりエッジでqに出力されます。また、word_count信号を1に引き上げ、DCFIFOから正常に読み出されたワード数を示します。

--

fifo_rdempty信号がLowの場合は、INCADR状態とWRITE状態で説明されている状態遷移が続きます。

図 44. DCFIFOがフルの場合の書き込み操作
表 52.  DCFIFOがフルの場合の書き込み操作における波形の説明
状態 説明
INCADR

書き込みコントローラーがINCADR状態の際にfifo_wrfull信号がアサートされると、書き込みコントローラーはクロックの次の立ち上がりエッジでWAIT状態に移行します。

WAIT

WAIT状態の際に、書き込みコントローラーはrom_addr信号 (08) を保持するため、書き込みコントローラーがWRITE状態に移行すると、それぞれのデータはDCFIFOに書き込まれます。

fifo_wrfull信号でHighの状態が続いている場合、書き込みコントローラーはWAIT状態を維持します。fifo_wrfullがLowになると、書き込みコントローラーはかならず、クロックの次の立ち上がりエッジでWAIT状態からWRITE状態に移行します。

WRITE

WRITE状態の際は、書き込みコントローラーのみがfifo_wrreq信号をHighに駆動して書き込み操作を要求し、それまでに保持されていたアドレス (08) からDCFIFOにデータを書き込みます。rom_addr信号がffに達していない場合はかならず、コントローラーはクロックの次の立ち上がりエッジでINCADR状態に移行します。

--

fifo_wrfull信号がHighの場合は、INCADRWAITWRITE状態で説明されている状態遷移が続きます。

図 45. ROMからDCFIFOへのデータ転送の完了
表 53.  ROMからDCFIFOへのデータ転送完了時の波形の説明
状態 説明
WRITE 書き込みコントローラーが WRITE状態で、rom_addr = ffの場合、書き込みコントローラーはfifo_wrreq信号をHighに駆動し、DCFIFOへの最後の書き込み操作を要求します。データ100は、ROMに格納されているデータのうち、最後にDCFIFOに書き込まれるものです。クロックの次の立ち上がりエッジで、書き込みコントローラーはDONE状態に移行します。
DONE DONE状態では、書き込みコントローラーはfifo_wrreq信号をLowに駆動します。
-- 受信ドメインの読み出しコントローラーでは読み出し操作を継続して実行するため、fifo_wrfull信号がデアサートされます。ただし、fifo_wrfull信号は、受信ドメインからの読み出し要求後しばらくしてからデアサートされます。これは、DCFIFOのレイテンシー (rdreq信号とwrfull信号) のために発生します。
図 46. DCFIFOからRAMへのデータ転送の完了

fifo_rdempty信号がアサートされ、DCFIFOが空であることを示します。読み出しコントローラーはfifo_rdreq信号をLowに駆動し、ram_addr =ffで最後のデータ100の書き込みを有効にします。word_count信号は256 (10進数) に増加し、ROMからの256ワードのデータがすべて正常にRAMに転送されたことを示します。

RAMに書き込まれる最後のデータは、q出力で示されます。

注: 結果を確認するには、qの出力をデザイン例で提供されているrom_initdata.hexファイルのデータと比較します。 インテル® Quartus® Prime開発ソフトウェアでファイルを開き、ワードサイズを256ビットとして選択します。qの出力に、ファイルと同じデータが表示されていることを確認します。