AR# 46483

XAUI v10.2 および RXAUI v2.2 - 7 シリーズ デバイスでは、リンク パートナーの伝送再開後にコアを再び同期できない

説明

遠端が伝送を停止したり、パワーダウンすると、データ伝送の再開のため GTX レシーバーにリセットが必要になります。これは、ブロック レベルのソース ファイルで mgt_rx_reset 信号を駆動するための次のコードを追加することで可能になります。

このソリューションは、初期 ES または GS シリコンを使用している場合の Kintex-7 またはVirtex-7 GTX トランシーバーのある XAUI v10.2 または RXAUI v2.2 コアを対象にしています。このコードは次のリリースのコアに追加される予定です。

 

ソリューション

Verilog の場合は、example_design/core_name_block.v に次のコードを追加します。

 

localparam SYNC_COUNT_LENGTH  = 16;
reg     [SYNC_COUNT_LENGTH - 1:0]    sync_counter  = {SYNC_COUNT_LENGTH{1'b0}};


  // Sync counter - GT requires a reset if the far end powers down
  always @(posedge clk156) begin
    if (sync_counter[SYNC_COUNT_LENGTH - 1]) begin
      sync_counter <= {SYNC_COUNT_LENGTH{1'b0}};
    end
    else if (!(&sync_status_i)) begin
      sync_counter <= sync_counter + 1'b1;
    end
    else begin
      sync_counter <= {SYNC_COUNT_LENGTH{1'b0}};
    end
  end

// Modify the line below - add topmost bit of sync_counter into the mgt_rx_reset in your design
assign mgt_rx_reset = (... || sync_counter[SYNC_COUNT_LENGTH-1]) && reset_counter[5];

VHDL の場合は
example_design/core_name_block.v に次のコードを追加します。 :

  constant SYNC_COUNT_LENGTH       : integer := 16;
  signal sync_counter              : unsigned(SYNC_COUNT_LENGTH - 1 downto 0)  := (others => '0');

  -- Sync counter GT requires a reset if the far end powers down.
  process (clk156) begin
    if rising_edge(clk156) then
      if (sync_counter(SYNC_COUNT_LENGTH - 1) = '1') then
        sync_counter <= (others => '0');
      elsif (sync_status_i /= "1111") then
        sync_counter <= sync_counter + 1;
      else
        sync_counter <= (others => '0');
      end if;
    end if;
  end process;
-- Modify the line below - add topmost bit of sync_counter into the mgt_rx_reset in your design
mgt_rx_reset <= (... or sync_counter(SYNC_COUNT_LENGTH - 1)) and reset_counter(5);
AR# 46483
日付 10/11/2014
ステータス 共有
種類 一般
IP