Intel Agilex® 7 エンベデッド・メモリー・ユーザーガイド

ID 683241
日付 4/10/2023
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 機能への初期の書き込み操作
表 51.  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 状態に移行します。INCADR 状態では、書き込みコントローラーは fifo_wrreq 信号を Low に駆動し、rom_addr 信号を 1 増やします (00 から 01)。

- fifo_wrfull 信号が Low で、rom_addr 信号が ff に達していない場合は、IDLE 状態と WRITE 状態で説明されている状態遷移が続きます。
図 43. DCFIFO 機能からの初期の読み出し操作
表 52.  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 がフルの場合の書き込み操作
表 53.  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 へのデータ転送の完了
表 54.  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 の出力に、ファイルと同じデータが表示されていることを確認します。