AR# 46523

RXAUI v2.2 - Alignment fails to complete at startup for Virtex-6 devices

描述

When using RXAUI v2.2 under some startup / remote transmission startup circumstances, the GTX RX Buffer can introduce skew beyond the deskew capability of the Core (Marvell Mode) or GTX (Dune Mode).

解决方案

For Virtex-6 VHDL :
Connect mgt_rxbuf_reset signal to the appropriate GTXn_RXBUFRESET_IN port on the wrapper.

constant CHBOND_COUNT_LENGTH : integer := 16;
signal chbond_counter : unsigned(CHBOND_COUNT_LENGTH - 1 downto 0);
signal mgt_rxbuf_reset : std_logic_vector(1 downto 0) := "00";
...

-- reset the RX Buffer when the chbond counter expires to
-- realign the buffer pointers
process (clk156)
begin
if rising_edge(clk156) then
if chbond_counter(CHBOND_COUNT_LENGTH-1) = '1' then
mgt_rxbuf_reset <= "11";
else
mgt_rxbuf_reset <= "00";
end if;
end if;
end process;

process (clk156) begin
if rising_edge(clk156) then
if ((chbond_counter(CHBOND_COUNT_LENGTH-1) = '1') or (align_status_i = '1')) then
chbond_counter <= (others => '0');
elsif (sync_status_i = "1111") then
chbond_counter <= chbond_counter + 1;
end
else
chbond_counter <= (others => '0');
end if;
end if;
end process;

Virtex-6 Verilog:

Connect mgt_rxbuf_reset signal to the appropriate GTXn_RXBUFRESET_IN port on the wrapper.

localparam CHBOND_COUNT_LENGTH = 16;
reg [CHBOND_COUNT_LENGTH-1:0] chbond_counter = {CHBOND_COUNT_LENGTH{1'b0}};
reg [1:0] mgt_rxbuf_reset = 2'b00;
...
// reset the RX Buffer when the chbond counter expires to
// realign the buffer pointers
always @(posedge clk156) begin
if (chbond_counter[CHBOND_COUNT_LENGTH - 1])
mgt_rxbuf_reset <= 2'b11;
else
mgt_rxbuf_reset <= 2'b00;
end

always @(posedge clk156) begin
if (chbond_counter[CHBOND_COUNT_LENGTH - 1] || align_status_i) begin
chbond_counter <= {CHBOND_COUNT_LENGTH{1'b0}};
end
else if (&sync_status_i) begin
chbond_counter <= chbond_counter + 1'b1;
end
else begin
chbond_counter <= {CHBOND_COUNT_LENGTH{1'b0}};
end
end
AR# 46523
日期 12/15/2012
状态 Active
Type 综合文章
IP