AR# 55136

MIG 7 Series RLDRAM II - u_phy_write_init_sm/rst_clk_sync_r パスでタイミング違反が発生する

説明

問題のあったバージョン : v1.9
修正場=ジョン : (ザイリンクス アンサー 45195) を参照
 
RLDRAM II デザインの u_phy_write_init_sm/rst_clk_sync_r パスでタイミング エラーが発生する場合があります。
 
タイミング エラーの例は次のとおりです。
Slack (setup path):     -0.021ns (requirement - (data path - clock path skew + uncertainty))
  Source:                      u_mig_7series_v1_9/u_rld_memc_ui_top_std/u_rld_phy_top/u_phy_write_top/u_phy_write_init_sm/rst_clk_sync_r_4_1 (FF)
  Destination:               u_mig_7series_v1_9/u_rld_memc_ui_top_std/gen_ui_fifos.u_rld_ui_top/u_usr_addr_fifo/u_af/FIFO36E1 (RAM)
  Requirement:            4.444ns
  Data Path Delay:      4.274ns (Levels of Logic = 0)

ソリューション

ISE を使用している場合にのみこのタイミング エラーは発生し、Vivado には影響しません。

このタイミング違反を回避するには、次のコードを変更する必要があります。

mig_7series_v1_9_rld_phy_write_init_sm.v ファイル :
 
次のコードを検索します。

  (* max_fanout = "50" *)
  reg [RST_SYNC_NUM-1:0]  rst_clk_sync_r     = -1;

これを次のものに置き換えます。

  reg [RST_SYNC_NUM-2:0]  rst_clk_sync_r     = -1;
  (* max_fanout = "50" *)
  reg rst_clk_sync_r1     ;

次のコードを検索します。

  always @(posedge clk)
    if (rst_wr_clk || !cnt_pwron_reset_done_r)
      rst_clk_sync_r <= #TCQ {RST_SYNC_NUM{1'b1}};
    else
      rst_clk_sync_r <= #TCQ rst_clk_sync_r << 1;
  
  assign rst_clk = rst_clk_sync_r[RST_SYNC_NUM-1];

これを次のものに置き換えます。

  always @(posedge clk) begin
    if (rst_wr_clk || !cnt_pwron_reset_done_r) begin
      rst_clk_sync_r <= #TCQ {RST_SYNC_NUM-1{1'b1}};
      rst_clk_sync_r1 <= #TCQ 1'b1;
    end else begin
      rst_clk_sync_r <= #TCQ rst_clk_sync_r << 1;
      rst_clk_sync_r1 <= #TCQ rst_clk_sync_r [RST_SYNC_NUM-2];
    end
  end

  assign rst_clk = rst_clk_sync_r1;

改訂履歴
2013/04/03 - 初版
AR# 55136
日付 01/26/2015
ステータス アクティブ
種類 既知の問題
デバイス
IP