AR# 20414

LogiCORE 非同期 FIFO および FIFO Generator - ビヘイビア モデルの限界

説明

キーワード : CORE Generator, Verilog, simulation, rd_en, wr_en, rd_clk, wr_clk, counter, clock, domains, synchronization, シミュレーション, カウンタ, クロック, ドメイン, 同期

Asynch FIFO および FIFO Generator のビヘイビア モデルはあくまでファンクション モデルで、 クロック サイクルごとにコアのビヘイビアをモデル化してはいません。 このため、ハードウェアのコアのビヘイビアを正確に表しているわけではありません。 フラグおよびカウンタは、 ビヘイビア シミュレーションでクロックと同時に更新される可能性があり、ストラクチャ レベルおよびゲートレベルのシミュレーションで 1 クロックまたは 2 クロック程度の遅延がある場合があります。 このモデルの仕様については、次を参照してください。

ソリューション

重要 :
Asynchronous FIFO および FIFO Generator のビヘイビア モデルは、ほかのコアのビヘイビア モデルと違い、ファンクションのみを記述しており、遅延はモデル化していません。 このため、ビヘイビア モデル シミュレーションとストラクチャ レベルまたはゲート レベルなどのほかのシミュレーションや実際のコアのビヘイビアと比較する場合は、次の点に注意してください。

- 書き込み動作および対応するハンドシェイク信号は、wr_clk クロック領域に関連して発生します。
- 読み出し動作および対応するハンドシェイク信号は、rd_clk クロック領域に関連して発生します。
- FIFO 内の遅延 (ライト信号がリード ポートに達するまでの時間) は、ビヘイビア モデルとコアの間で異なります。
- 操作と、rd_count および wr_count 信号のアップデートの間の遅延は、 モデルとコアの間で異なります。 データ カウント出力は、FIFO のワード数の概算を出す場合にのみ使用してください。正確な数値ではありません。
- EMPTY および ALMOST_EMPTY 出力は、rd_clk クロック領域に対しては正確ですが、wr_clk クロック領域からのレイテンシが異なるため、ビヘイビア モデルとコアの間で異なる場合があります。
- EMPTY 出力のビヘイビアは、Verilog モデルとコアの間で異なります。 EMPTY フラグは、"pessimistic" フラグとみなされるため、そのビヘイビアは、FIFO が EMPTY になると、定義されます。 ただし、データが EMPTY FIFO に書き込まれると、そのビヘイビアは変わります。 つまり、ビヘイビア モデルおよびコアは、最終ワードが FIFO から読み込まれた時点で EMPTY フラグが High になる点において、同様のビヘイビアになります。 しかし、wr_clk クロック ドメインから rd_clk クロック ドメインのレイテンシが異なるため、EMPTY フラグが解放されるタイミングははっきりしません (この情報は、ALMOST_EMPTY にもあてはまります)。
- FULL および ALMOST_FULL 出力は、wr_clk クロック ドメインに対して正しいのですが、 rd_clk ドメインからのレイテンシが異なるため、ビヘイビア モデルとコアの間で異なる場合があります。
- FULL フラグのビヘイビアは、ビヘイビア モデルとコアの間で異なります。 FULL フラグは、"pessimistic" フラグとみなされるため、そのビヘイビアは、FIFO が FULL になると、定義されます。 ただし、データが FULL FIFO から読み出されると、そのビヘイビアは変わります。 つまり、Verilog モデルおよびコアは、最終ワードが FIFO に書き込まれた時点で FULL フラグが High になる点において、同様のビヘイビアになります。 しかし、rd_clk クロック ドメインから wr_clk クロック領域のレイテンシが異なるため、FULL フラグが解放されるタイミングははっきりしません (この情報は、ALMOST_EMPTY にもあてはまります)。

特別な注意事項
- rd_count および wr_count は FIFO のワード数を正確に表すものではありません。この数字はあくまでも参考値です。
- rd_count および wr_count は、RD_EN=0 および WR_EN=0 (通常は数クロック サイクル後) のとき、ある期間後に常に正しくなります。 つまり、rd_count と wr_count の値は読み出しおよび書き込み動作が一時停止してから時間をおいて正確な値になります。

ビヘイビア シミュレーション以外の方法
ビヘイビア シミュレーションを実行する代わりに、『合成/検証デザイン ガイド』に記載されているように、ゲート レベル シミュレーションまたはタイミング シミュレーションを実行できます。 ストラクチャ レベルのシミュレーションを実行するには、CORE Generator のプロジェクト設定をストラクチャ シミュレーション モデルを生成するように変更する必要があります。 CORE Generator で生成された EDIF ネットリスト用に NGDBuild 後のシミュレーション モデルを生成するには、、『合成/検証デザイン ガイド』の「デザインの検証」→「NetGen の実行」セクションを参照してください。
AR# 20414
日付 06/06/2006
ステータス アクティブ
種類 一般