AR# 56312

XAUI v10.4 rev1、v11.0 rev 1 - 7 シリーズ GTP/GTH リセット ロジックへのアップデート

説明

XAUI v10.4 rev1、v11.0、および v11.0 rev1 にはプロダクション シリコンに必要な GTP および GTH リセット シーケンスへのアップデートが含まれています。この要件の詳細は、(ザイリンクス アンサー 53779) および (ザイリンクス アンサー 53561) を参照してください。GTRXRESET ステート マシンは DCLK ドメインで GTRXRESET を必要としますが、ブロック レベルのラッパーは userclk (clk156) ドメインでこのクロックを出力します。DCLK ドメインに GTRXRESET が渡るようにし、また前のリセットが処理されている間に 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,
...
    GT2_GTRXRESET_IN                        => mgt_rx_reset_stretched_unique,
...
    GT3_GTRXRESET_IN                        => mgt_rx_reset_stretched_unique,
...

  process(pll_reset, reset, dclk)
  begin
    if 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 (mgt_rxresetdone_reg = "1111") 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),
...
        .GT2_GTRXRESET_IN                   (mgt_rx_reset_stretched_unique),
...
        .GT3_GTRXRESET_IN                   (mgt_rx_reset_stretched_unique),
...

  always @(posedge pll_reset or posedge reset or posedge dclk)
  begin
    if (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 (mgt_rxresetdone_reg == 4'b1111) 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;
AR# 56312
日付 09/23/2013
ステータス アクティブ
種類 一般
IP