K7 GTX在SDI中的使用解析

UG476是GTX的数据手册。
+++++++++++++++++++++++++++++++++++++++++++
详细解析xapp592
+++++++++++++++++++
先来看看kc705_sdi_demo.v
一方面,是进行各个时钟的BUFFER处理。
IBUFDS_GTE2用来缓冲MGTbank上的输入的两路时钟,
BUFG用来缓冲各个工作时钟。
例如ODIV2输出的时钟,用BUFG来缓冲,
GTXchannel输出的txoutclk和rxoutclk,用BUFG缓冲后,驱动txusrclk和txusr2clk,驱动rxusrclk和rxusr2clk。

k7_sdi_rxtx模块,是SDI协议的处理模块和GTX模块的控制模块。
+++++++++++++++++++++++++++++++++++++++++++
GTX模块的控制信号,连接到k7_sdi_rxtx模块上。
下面以SDI2和GT1为例,来看看这两个模块的互连信号。

clk----工作时钟,使用clk_74_25。

tx_usrclk----发送时钟,使用tx2_usrclk。
tx_gttxreset----tx复位控制信号,由SDI2输出给GT,
tx_txdata----tx的数据,由SDI2输出给GT,
tx_ratedone----tx的ratedone状态,由GT输出给SDI2.
tx_resetdone----txpll的reset状态,由GT输出给SDI2.
tx_pmareset----txpma的reset控制,由SDI2输出给GT.
tx_sysclksel----tx的sysclk的选择控制,由SDI2输出给GT。
tx_rate----tx的rate选择,由SDI2输出给GT。
tx_plllock----tx的PLL的lock状态,由QPLL和CPLL的lock状态信号,相与。
tx_slew----tx的摆率状态,由SDI2输出。未使用。
tx_userrdy----tx的usrrdy握手信号,由SDI2输出给GT。
tx_pllreset----tx的pll的reset控制信号,由top模块生成,并输出给SDI2和GT使用。这里,top生成的信号是gtxpllreset。
tx_txen----tx的使能信号,这里浮空。

rx_usrclk----接收时钟,使用rx2_usrclk。
rx_gtrxreset----rx复位控制信号,由SDI2输出给GT,
rx_resetdone----rxpll的reset状态,由GT输出给SDI2.
rx_rate----rx的rate选择,由SDI2输出给GT。
rx_ratedone----rx的ratedone状态,由GT输出给SDI2.
rx_cdrhold----rx的cdrhold控制信号,由SDI2输出给GT。
rx_rxdata----rx的数据,由GT输出给SDI2,
rx_locked----rx的lock状态信号,由SDI2输出。未使用。
rx_userrdy----rx的usrrdy握手信号,由SDI2输出给GT。
rx_pllreset----tx的pll的reset控制信号,由top模块生成,并输出给SDI2和GT使用。这里,top生成的信号是gtxpllreset。
rx_plllock----rx的PLL的lock状态,由QPLL的lock状态信号提供。

rx_mode----rx的mode指示信号,由SDI2输出,未使用。
rx_level_b----rx的level指示信号,由SDI2输出,未使用,
rx_t_family----rx的family指示信号,由SDI2输出,未使用,
rx_t_rate----rx的rate指示信号,由SDI2输出,未使用。
rx_t_scan----rx的scan指示信号,由SDI2输出,未使用。
rx_m----rx的m指示信号,由SDI2输出,未使用。

drpclk----drp的工作时钟,这里使用clk_74_25。
drprdy----drp的ready状态信号,由GT输出给SDI2.
drpaddr----drp的addr控制信号,由SDI2输出给GT。
drpdi----drp的di数据信号,由SDI2输出给GT。
drpen----drp的en控制信号,由SDI2输出给GT。
drpwe----drp的we控制信号,由SDI2输出给GT。

++++++++++++++++++++++++++++++++++++++++++
k7gtx_sdi_wrapper模块,是GTX的收发模块。
这是本文的解析重点。
在这个模块内,将4个GT和1个COMMON的接口引出,使得一个MGTbank可以和外部其他模块对接。
下面看看COMMON的接口。
GT0_GTREFCLK0_COMMON_IN----QPLL的refclk的输入参考时钟,这里使用mgtclk_148_5。
GT0_QPLLLOCK_OUT----QPLL的lock状态信号,由GT输出给SDI2。
GT0_QPLLLOCKDETCLK_IN----QPLL的lockdetect的输入工作时钟,这里使用clk_74_25。
GT0_QPLLREFCLKLOST_OUT----QPLL的refclk的lost状态信号,由GT输出,这里浮空。
GT0_QPLLRESET_IN----QPLL的reset控制信号,由top生成,并输出给GT。

下面以GT1为例,分析GT的接口。
GT1_DRPADDR_IN----drp的addr控制信号,由SDI2输出给GT。
GT1_DRPCLK_IN----drp的工作时钟,这里使用clk_74_25。
GT1_DRPDI_IN----drp的di数据信号,由SDI2输出给GT。
GT1_DRPDO_OUT----drp的do数据信号,这里浮空。
GT1_DRPEN_IN----drp的en控制信号,由SDI2输出给GT。
GT1_DRPRDY_OUT----drp的ready状态信号,由GT输出给SDI2.
GT1_DRPWE_IN----drp的we控制信号,由SDI2输出给GT。

GT1_GTREFCLK0_IN----CPLL的refclk的输入参考时钟,这里使用mgtclk_148_35。
GT1_CPLLFBCLKLOST_OUT----CPLL的fbclk的lost状态信号,这里浮空。
GT1_CPLLLOCK_OUT----CPLL的lock状态信号,由GT输出给SDI2。
GT1_CPLLLOCKDETCLK_IN----CPLL的lockdetect的输入工作时钟,这里使用clk_74_25。
GT1_CPLLREFCLKLOST_OUT----CPLL的refclk的lost状态信号,这里浮空。
GT1_CPLLRESET_IN----CPLL的reset控制信号,由top生成,并输出给GT。

GT1_EYESCANDATAERROR_OUT----GT的eyescan的dataerror状态信号,这里浮空。

GT1_RXUSERRDY_IN----rx的usrrdy握手信号,由SDI2输出给GT。

GT1_GTRXRESET_IN----rx的reset控制信号,rx复位控制信号,由SDI2输出给GT,
GT1_RXDATA_OUT----rx的接收数据信号,由GT输出给SDI2。

GT1_RXOUTCLK_OUT–rx的输出时钟,在外部由BUFG驱动后,作为rxusrclk和rxusr2clk使用。
GT1_RXUSRCLK_IN----rx的输入的rxusrclk。
GT1_RXUSRCLK2_IN----rx的输入的rxusr2clk。

GT1_GTXRXN_IN----rx的接收串行数据信号。
GT1_GTXRXP_IN----rx的接收串行数据信号。

GT1_RXCDRHOLD_IN----rx的cdrhold控制信号,由SDI2输出给GT。
GT1_RXCDRLOCK_OUT----rx的cdrlock状态信号,由GT输出,这里浮空。
GT1_RXELECIDLE_OUT----rx的elecidle状态信号,由GT输出,这里浮空。

GT1_RXBUFRESET_IN----rx的rxbuf的reset控制信号,由外部输入,这里拉低。
GT1_RXBUFSTATUS_OUT----rx的rxbuf的status状态信号,由GT输出,这里浮空。

GT1_RXRATE_IN----rx的rxrate控制信号,由SDI2输出给GT。
GT1_RXRATEDONE_OUT----rx的rxratedone状态信号,由GT输出给SDI2。
GT1_RXRESETDONE_OUT----rx的resetdone状态信号,由GT输出给SDI2。

GT2_TXPOSTCURSOR_IN----tx的postcursor输入控制信号,由外部输出给GT。这里控制码使用5’b00000。
GT2_TXPRECURSOR_IN----tx的precursor输入控制信号,由外部输出给GT。这里控制码使用5’b00000。
GT1_TXSYSCLKSEL_IN----tx的sysclk的选择控制,由SDI2输出给GT。
GT1_TXUSERRDY_IN----tx的usrrdy握手信号,由SDI2输出给GT。
GT1_TXBUFSTATUS_OUT----tx的txbuf的status状态信号,由GT输出,根据status来控制自身的复位。
GT1_GTTXRESET_IN----tx的reset控制信号,由SDI2输出给GT,
GT1_TXDATA_IN----tx的输入数据信号,由SDI2输出给GT。

GT1_TXOUTCLKFABRIC_OUT----tx的txoutclkfabric输出时钟,这里不使用,浮空。
GT1_TXOUTCLKPCS_OUT-----tx的txoutclkpcs输出时钟,这里不使用,浮空。
GT1_TXPCSRESET_IN----tx的pcs的reset控制信号,这里使用txbuf的status状态信号来实现自控,
这里使用tx2_bufstatus[1]。
GT1_TXPMARESET_IN----tx的pma的reset控制信号,由SDI2输出给GT。

GT1_TXOUTCLK_OUT----tx的txoutclk输出时钟,在外部经过BUFG驱动后,作为txusrclk和txusr2clk使用。
GT1_TXUSRCLK_IN----tx的txusrclk,由BUFG缓冲后,作为输入时钟。
GT1_TXUSRCLK2_IN----tx的txusr2clk,由BUFG缓冲后,作为输入时钟。

GT1_GTXTXN_OUT----tx的发送串行数据信号。
GT1_GTXTXP_OUT----tx的发送串行数据信号。

GT1_TXDIFFCTRL_IN----tx的diffterm控制信号,这里使用控制码4’b1011。

GT1_TXRATE_IN----tx的txrate控制信号,由SDI2输出给GT。
GT1_TXRATEDONE_OUT----tx的txratedone状态信号,由GT输出给SDI2.
GT1_TXRESETDONE_OUT----tx的txresetdone状态信号,由GT输出给SDI2.

+++++++++++++++++++++++++++++++++++++++++
来看看k7gtx_sdi_wrapper模块的具体实现。
其中的4个GT,是例化了k7gtx_sdi_wrapper_GT模块来实现的。
其中的COMMON,是例化了GTXE2_COMMON原语来实现的。

GTXE2_COMMON原语的例化实例,
主要是将输入的mgtclk_148_5倍频10倍,作为QPLL的qplloutclk输出。
然后是将mgtclk_148_5经过mux后,作为QPLL的qplloutrefclk输出。

来看看GT的具体实现。
k7gtx_sdi_wrapper_GT模块。
例化了一个GTXE2_CHANNEL原语。
QPLLCLK----输入的QPLLCLK高速时钟,作为PISO的工作时钟Q,
QPLLREFCLK----输入的QPLLREFCLK时钟,作为GT的输入QREF。
GTREFCLK0----输入的CPLLREFCLK时钟,作为GT的输入CREF。
CPLLLOCKDETCLK----输入的CPLL的lockdetect的时钟,作为GT的工作时钟。

GTXRXN----GT的接收串行信号,
GTXRXP----GT的接收串行信号,

RXDATA----GT接收的数据,
RXCHARISK----GT接收的数据,
RXDISPERR----GT接收的数据,

assign rxdata_out_i = {rxdisperr_i[1],rxcharisk_i[1],rxdata_i[15:8],rxdisperr_i[0],rxcharisk_i[0],rxdata_i[7:0]};

RXCDR_CFG----rx的CDR的配置参数,这里参数是72’h03000023ff40080020,即,使用CPLL或者QPLL,在LPM或者DFE模式,速率在1.56G以下,RXOUT_DIV设置为8,REFCLK频偏在200ppm。

RXOUTCLKSEL----rx的rxoutclk的选择控制信号,这里控制码是3’b010,即,选择的是rxoutclkpma。由PMA时钟作为基准时钟。

RXSYSCLKSEL----rx的sysclk的选择控制信号,这里控制码是2’b11,即,选择的是Q和QREF。

TXSYSCLKSEL----tx的sysclk的选择控制信号,这里是由SDI2输出给GT的。TXSYSCLKSEL[0]用来选择QPLLCLK还是CPLLCLK,为1则为Q,为0则为C。

TXCHARDISPMODE----GT要发送的数据,
TXCHARDISPVAL----GT要发送的数据,
TXDATA----GT要发送的数据,

	input   [19:0]  TXDATA_IN,
	
	assign txdata_in_i =   TXDATA_IN;

	assign txchardispmode_i = {tied_to_ground_vec_i[5:0],txdata_in_i[19],txdata_in_i[9]};
    assign txchardispval_i  = {tied_to_ground_vec_i[5:0],txdata_in_i[18],txdata_in_i[8]};
    assign txdata_i         = {tied_to_ground_vec_i[47:0],txdata_in_i[17:10],txdata_in_i[7:0]};
    

TXOUTCLKSEL----tx的txoutclk的选择控制信号,这里控制码是3’b010,即,选择的是txoutclkpma。由PMA时钟作为基准时钟。

GTXTXN----GT的发送串行信号,
GTXTXP----GT的发送串行信号,

TXDIFFCTRL-----tx的txdiffctrl控制信号,由上层模块提供控制码。这里使用的是4’b1011。
++++++++++++++++++++++++++++++
补充,RX CDR
The GTXE2_CHANNEL/GTHE2_CHANNEL transceiver employs phase rotator CDR
architecture.
The CDR state machine uses the data from both the edge and data samplers to determine
the phase of the incoming data stream and to control the phase interpolators (PIs).
The CPLL or QPLL provides a base clock to the phase interpolator.
The CDR state machine can track incoming data streams that can
have a frequency offset from the local PLL reference clock.

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值