AR# 46523: RXAUI v2.2 - Alignment fails to complete at startup for Virtex-6 devices
AR# 46523
|
RXAUI v2.2 - Alignment fails to complete at startup for Virtex-6 devices
Description
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).
Solution
For Virtex-6 VHDL : Connect mgt_rxbuf_reset signal to the appropriate GTXn_RXBUFRESET_IN port on the wrapper.
-- 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