AR# 56313

|

RXAUI v3.0 rev1、v2.4 rev1 - 7 シリーズ GTP リセット ロジックへのアップデート

説明

RXAUI v2.4 rev1、v3.0、および v3.0 rev1 コアには、プロダクション シリコンに必要な GTP リセット シーケンスへのアップデートが含まれています。この要件の詳細は (ザイリンクス アンサー 53779) および (ザイリンクス アンサー 53561) を参照してください。GTRXRESET ステート マシンは DCLK ドメインに GTRXRESET を必要としますが、ブロック レベルのラッパーは userclk (clk156) ドメインでこのクロックを出力します。GTRXRESET が DCLK ドメインに正しく乗せ換えられるようにし、また前のリセットが処理されている間に 2 番目のリセットが出力されないようにするには、次のロジックを追加して、GTRXRESET を拡張する必要があります。

ソリューション

この問題を修正するには、<core_name>_block.v または vhd ファイルに次の変更を加えます。

VHDL

  signal mgt_rx_reset_stretched        : std_logic;
  signal mgt_rx_reset_inprocess        : std_logic := '0';
  signal mgt_rx_reset_stretched_unique : std_logic;
  signal mgt_rx_reset_stretch_r        : std_logic_vector(2 downto 0) := "000";

...
    GT0_GTRXRESET_IN                        => mgt_rx_reset_stretched_unique,
...
    GT1_GTRXRESET_IN                        => mgt_rx_reset_stretched_unique,
...

  process(common_pll_reset, reset, dclk)
  begin
    if common_pll_reset = '1' or reset = '1' then
      mgt_rx_reset_inprocess <= '0'; 
    elsif rising_edge(dclk) then
      if mgt_rx_reset_stretched = '1' then
        mgt_rx_reset_inprocess <= '1';
      end if;
      if (core_mgt_rx_reset = "00") then
        mgt_rx_reset_inprocess <= '0';
      end if;
    end if;
  end process;

  process(dclk, mgt_rx_reset)
  begin
    if mgt_rx_reset = '1' then
      mgt_rx_reset_stretch_r(2) <= '1';
    elsif rising_edge(dclk) then
      mgt_rx_reset_stretch_r <= '0' & mgt_rx_reset_stretch_r(2 downto 1);
    end if;
  end process;

  mgt_rx_reset_stretched <= mgt_rx_reset_stretch_r(0);
  mgt_rx_reset_stretched_unique <= mgt_rx_reset_stretched and not mgt_rx_reset_inprocess;

Verilog

  wire       mgt_rx_reset_stretched;
  reg       mgt_rx_reset_inprocess = 1'b0;
  wire      mgt_rx_reset_stretched_unique;
  reg [2:0] mgt_rx_reset_stretch_r = 3'b000;

...
        .GT0_GTRXRESET_IN                   (mgt_rx_reset_stretched_unique),
...
        .GT1_GTRXRESET_IN                   (mgt_rx_reset_stretched_unique),
...

  always @(posedge common_pll_reset or posedge reset or posedge dclk)
  begin
    if (common_pll_reset || reset ) begin
      mgt_rx_reset_inprocess <= 1'b0;
    end
    else begin
      if (mgt_rx_reset_stretched) begin
        mgt_rx_reset_inprocess <= 1'b1;
      end
      if (core_mgt_rx_reset == 2'b00) begin
        mgt_rx_reset_inprocess <= 1'b0;
      end
    end
  end

  always @(posedge dclk or posedge mgt_rx_reset)
  begin
    if (mgt_rx_reset) begin
      mgt_rx_reset_stretch_r[2] <= 1'b1;
    end
    else begin
      mgt_rx_reset_stretch_r <= {1'b0 , mgt_rx_reset_stretch_r[2 : 1]};
    end
  end

  assign mgt_rx_reset_stretched = mgt_rx_reset_stretch_r[0];
  assign mgt_rx_reset_stretched_unique = mgt_rx_reset_stretched && !mgt_rx_reset_inprocess;

アンサー レコード リファレンス

マスター アンサー レコード

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
47692 LogiCORE IP RXAUI - v2.x 以前のリリース ノートと既知の問題 N/A N/A
54249 Vivado 2013.1 以降のバージョンの LogiCORE RXAUI のリリース ノートおよび既知の問題 N/A N/A
AR# 56313
日付 11/15/2013
ステータス アクティブ
種類 一般
IP
People Also Viewed