本文转载自:十年老鸟的CSDN博客
复位模式
同TX链路一样,RX的复位模式也是包含两种操作,这部分设置都一样
1、顺序模式
2、单步模式
在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操作。
状态机的基本功能分析完毕,由于我们这里实际设置
并不存在MMCM_RESET和RUN_PHALIGNMEN等操作,(绿色表示)
实际上有用的端口为:
QPLL_RESET: 拉高然后拉低
QPLLLOCK:高电平锁定
GTRXRESET:初始态为高,拉低释放复位
RXRESETDONE
RXUSERRDY
RX_FSM_RESET_DONE
总结,首先是检测QPLLLOCK,QPLL锁定后,才会对RX transceiver进行初始化复位,控制管脚为GTRXRESET和RXUSERRDY,
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、 用户接口已经准备好从收发器接收数据
跟TX链路一样,顺序模式下RX lane的复位可以直接整体复位或者进行分步复位。RX的分步复位比TX复杂得多,我们的应用场景并不需要这种复杂的分步复位。因此我们就直接使用整体复位即可
顶层使用
为了实际操作尽量简化,我们实际上不使用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作为复位信号