Xilinx FPGA资源解析与使用系列——Transceiver(五)复位理解RXlane

本文转载自:十年老鸟的CSDN博客

复位模式

同TX链路一样,RX的复位模式也是包含两种操作,这部分设置都一样
1、顺序模式
2、单步模式

01.png

在ip example中,是直接使用顺序模式的,而且手册也是推荐使用顺序模式,那么我们就直接研究顺序模式了,单端模式暂时不关注

        //-------------------- Transceiver Reset Mode Operation --------------------
        .GTRESETSEL                     (tied_to_ground_i),
        .RESETOVRD                      (tied_to_ground_i),

复位的步骤

我们同样来分析gtwizard_0_RX_STARTUP_FSM状态机模块

1、最开始是INIT状态:

一开始先计数500ns到init_wait_done拉高,复位状态机才会开始工作。进入ASSERT_ALL_RESETS状态

2、ASSERT_ALL_RESETS

首先会操作 QPLL_RESET,拉高然后拉低。同时把一些复位控制线置为初始状态。这里,因为已经在接收FSM有这个操作了,所以这里的QPLL_RESET端口不会被引出

RXUSERRDY拉低

GTRXRESET拉高

MMCM_RESET拉高

RESET_PHALIGNMENT拉高

RUN_PHALIGNMENT拉低

并且立马进入WAIT_FOR_PLL_LOCK状态

3、WAIT_FOR_PLL_LOCK

这里等待WAIT_TIME_MAX个CLK,数满后,进入RELEASE_PLL_RESET状态

4、RELEASE_PLL_RESET

如果检测到QPLLLOCK(qplllock_sync)为1,则进入WAIT_FOR_TXOUTCLK状态

5、VERIFY_RECCLK_STABLE:

GTTXRESET会拉低。并且等待RECCLK_STABLE为高后,进入RELEASE_MMCM_RESET

(RECCLK_STABLE是CDRLOCK的指示,这里CDRLOCK也只是GTTXRESET拉低后一个计数器在drp_clk开始工作,数到WAIT_TIME_CDRLOCK后,便认为其已经锁定)

6、RELEASE_MMCM_RESET

MMCM_RESET 拉低,并且等待MMCM_LOCK 拉高。如果MMCM_LOCK 拉高,则进入WAIT_FOR_RXUSRCLK状态。

WAIT_FOR_RXUSRCLK:

等待一段时间,进入WAIT_RESET_DONE

7、WAIT_RESET_DONE

如果TXUSERRDY已经拉高,则将RXUSERRDY拉高,等待RXRESETDONE变高,如果TXRESETDONE变高,则进入DO_PHASE_ALIGNMENT状态。

(//When TXOUTCLK is the source for RXUSRCLK, RXUSERRDY depends on TXUSERRDY

//If RXOUTCLK is the source for RXUSRCLK, TXUSERRDY can be tied to ‘1’,我们实际用的就是这种情况)

8、DO_PHASE_ALIGNMENT:

RESET_PHALIGNMENT 拉低,RUN_PHALIGNMENT 拉高,等待PHALIGNMENT_DONE 拉高,如果PHALIGNMENT_DONE 拉高,进入MONITOR_DATA_VALID。

9、MONITOR_DATA_VALID

等待data_valid_sync信号为1,这个信号被引出到顶层,一般直接写为1即可,检测到data_valid_sync为1,则进入FSM_DONE状态

10、FSM_DONE

RX_FSM_RESET_DONE拉高,表示复位状态机完成。

状态机的等待回应部分都有超时检测机制,如果超时,状态机会回退到ASSERT_ALL_RESETS,继续QPLL_RESET操作。

状态机的基本功能分析完毕,由于我们这里实际设置

02.png

并不存在MMCM_RESET和RUN_PHALIGNMEN等操作,(绿色表示)

实际上有用的端口为:

QPLL_RESET: 拉高然后拉低

QPLLLOCK:高电平锁定

GTRXRESET:初始态为高,拉低释放复位

RXRESETDONE

RXUSERRDY

RX_FSM_RESET_DONE

总结,首先是检测QPLLLOCK,QPLL锁定后,才会对RX transceiver进行初始化复位,控制管脚为GTRXRESET和RXUSERRDY,

03.png

RX上电复位:

这些条件要满足:

1、 GTRESETSEL在顺序模式下必须为低

2、 GTRXRESET必须要使用

3、 所有单步复位输入RXPMARESET, RXCDRRESET, RXCDRFREQRESET,RXDFELPMRESET, EYESCANRESET, RXPCSRESET, and RXBUFRESET必须恒定为低在整个复位流程RXRESETDOWN为高之前。

4、 GTRXRESET不能拉低,除非QPLL锁定

5、 如果FPGA加载过程中GTX复位模式默认为顺序模式,在配置完成后,QPLLRESET和GTRXRESET可以被置位在等待最少500ns后。

RX复位顺序模式

为了初始化GTX/GTH收发器的RX,GTRXRESET必须在顺序模式下使用。激活GTRXRESET输入能够自动触发完全的异步RX复位。复位状态机执行复位顺序如下图所示,覆盖了整个RX PMA和RX PCS。在正常模式下,顺序模式也允许用户直接使用RXPMARESET, RXDFELPMRESET, EYESCANRESET, RXPCSRESET, and

RXBUFRESET进行初始化。

无论是顺序模式还是单步模式,RX复位状态机不能复位PCS除非RXUSERRDY为高。用户应该将RXUSERRDY拉高当以下条件满足时:

1、 所有用于业务的时钟,例如RXUSERCLK和RXUSERCLK2已经稳定,或者锁定当使用PLL或者MMCM时

2、 用户接口已经准备好从收发器接收数据

05.png

跟TX链路一样,顺序模式下RX lane的复位可以直接整体复位或者进行分步复位。RX的分步复位比TX复杂得多,我们的应用场景并不需要这种复杂的分步复位。因此我们就直接使用整体复位即可

06.png

顶层使用

为了实际操作尽量简化,我们实际上不使用RXPMARESET、和RXPCSRESET等接口。如果要复位,使用GTRXRESET即可。

1 soft_reset_rx_in, gtwizard_0_RX_STARTUP_FSM这个状态机模块会重置。只影响当前的LANE,不像soft_reset_tx_in会造成QPLL复位,已经整个tx rxlane都复位

2、 gt0_gtrxreset_in/gt1_gtrxreset_in/gtN_gtrxreset_in 这些复位

.gt0_gtrxreset_in               (tied_to_ground_i),

这个端口可以印出来可配置,这就是每条lane的GTRXRESET复位

那我们通过哪些信号来指示rxlane可以使用了呢。

gtwizard_0_RX_STARTUP_FSM模块中的TX_FSM_RESET_DONE信号,也即

顶层的gt0_rxfsmresetdone_i,这个为高了,表示serdes已经准备好了。

gt0_rxusrclk2_i 作为时钟(这里gt0_rxusrclk_i和gt0_rxusrclk2_i是同一个信号)

gt0_rxfsmresetdone_i作为复位信号

最新文章