AR# 9794

6.1i CORE Generator - Asynchronous FIFO をシミュレーションすると「Warning: */X_FF RECOVERY Low VIOLATION ON SET WITH RESPECT TO CLK;」という警告メッセージが表示される

説明

キーワード : Verilog, VHDL, CORE, CORE Generator, FIFO, setup, hold, timing, simulation, セットアップ, ホールド, タイミング, シミュレーション

Asynchronous FIFO を使用したデザインをシミュレーションすると、MTI シミュレータで次のようなタイミング違反がレポートされます。 この問題は、NGDBuild 後、MAP 後、および PAR 後のシミュレーションで発生します。 このようなメッセージは、セットアップ違反とホールド違反でも表示されます。

# ** Warning: */X_FF RECOVERY Low VIOLATION ON SET WITH RESPECT TO CLK;
# Expected := 0.556 ns; Observed := 0.036 ns; At : 473.85 ns
# Time: 473850 ps Iteration: 0 Instance: /control_tb/u1/u6_notri_reg_noe
# ** Warning: */X_FF RECOVERY Low VIOLATION ON SET WITH RESPECT TO CLK;
# Expected := 0.556 ns; Observed := 0.036 ns; At : 473.85 ns
# Time: 473850 ps Iteration: 0 Instance: /control_tb/u1/u6_notri_reg_port
# ** Warning: */X_FF RECOVERY Low VIOLATION ON RST WITH RESPECT TO CLK;
# Expected := 0.556 ns; Observed := 0.508 ns; At : 473.862 ns
# Time: 473862 ps Iteration: 0 Instance: /control_tb/u1/u3_reg_head_hsi2
# ** Warning : */X_FF SETUP Low violation on I with respect to CLK;
Expected := 1ns; Observed := 0ns; At : 28306ns
Instance /u2_u1_u1_n1541_ffx_sync_ff

実際に表示されるメッセージは、使用しているシミュレータによって異なります。

原因
原因の 1 つは、CORE Generator の Asynchronous FIFO で RD_CLK と WR_CLK の速度が異なることです。 異なる周波数が使用できますが、Asynchronous FIFO には 2 つのクロック ドメインを通過する内部信号があります。 これは、同期化回路が RD_CLK と WR_CLK の両方に依存することを表します。 この回路は、FIFO の非同期機能に必要です。 FIFO は、タイミング違反にかかわらず正常に機能します。

Asynchronous FIFO で RD_CLK と WR_CLK の速度がシミュレーションのある時点で異なる場合、RD_CLK と WR_CLK のアクティブ エッジが重なることがあるため、FIFO で使用されている X_FF (SimPrim モデル) のセットアップ タイム違反、ホールド タイム違反、およびリカバリ違反が発生します。 X_FF は、タイミング違反が発生するたびに X または unknown (不明) を出力するように設計されています。 X はデザイン全体に伝搬されるので、シミュレーションで問題が発生します。

実際のシリコンでは、X ステートは存在せず、フリップフロップは常に 0 または 1 に設定されます。 タイミング違反にかかわらず、CORE Generator の Asynchronous FIFO はいずれの場合でも動作するように設計されています。

タイミング違反が 2 つのクロック境界を通過するフリップフロップで発生している場合、この違反は無視してもかまいません。

ソリューション

1

このタイミング違反の原因が Asynchronous FIFO である場合は、無視しても問題ありません。 タイミング違反の有無にかかわらず、Asynchronous FIFO はシリコンで動作します。

2

デザイン全体への X ステートの伝搬が問題とある場合は、シミュレーションで X が出力されないように、問題のレジスタ エレメントに ASYNC_REG 属性を適用できます。 シミュレータではタイミング チェックが継続して実行され、タイミング違反のメッセージが出力されますが、シミュレーションには X が出力されません。 代わりに、タイミング違反があった場合、X_FF が以前の値に維持されます。

ASYNC_REG 属性の適用方法については、(Xilinx Answer 15969) を参照してください。

FIFO Generator コアを使用すると、RD_Clk ドメインと WR_Clk ドメインを通過するレジスタ エレメントに ASYNC_REG 属性が適用され、このような問題が回避されます。 可能な限り、FIFO Generator コアを使用してください。

3

Verilog では、シミュレータ命令 +notimingchecks を使用して、X によるシミュレーション妨害を回避できます。 ただし、すべてのタイミング チェックがオフになってしまうので、現実的ではないことがあります。

また、no_notifier オプションを使用して、セットアップ/ホールド違反が発生した時に X の伝搬を無効にできます。
AR# 9794
日付 12/15/2012
ステータス アクティブ
種類 一般