GTX 不同复位之间的区别
设备 : ZYNQ
技术手册 : Zynq 7000 SoC Technical Reference Manual (Zynq 7000 SoC技术参考手册)
参考该技术手册第21章节 Input/Output 小节下 GTX Low-Power Serial Transceivers 器件说明,其中可以获取到ZYNQ各个收发器对应的物理引脚约束信息。
在 Out-of-Band Signaling 项目下提到:
For more details on GTX Transceivers, see 7 Series FPGAs GTX Transceiver User Guide (UG476).
或者进入 Vivado 在 IP core 的 IDE 界面的 Documentation -> Product Guide 可以获取对应 IP 文档。
GT 时钟
一个 Quad 包含4个收发器以及一个 GTXE2_COMMON 资源,无论用户在IDE中选择 QPLL还是CPLL,GTXE2_COMMON都会被例化,因此使用同一个Quad的不同收发器的例化时候需要注意,若直接使用 example design 有可能出现 gtwizard_0_common 资源冲突.解决方式就是在IDE中选择 Include the shared logic in the example design 分别例化两组收发器,然后将使用CPLL时钟的收发器例化文件中的 GTXE2_COMMON 例化去掉即可。
GTX收发器中的CPLL标称工作范围在1.6 GHz到3.3 GHz之间。GTH收发器CPLL的标称工作范围为1.6 GHz ~ 5.16 GHz。7系列fpga收发器向导根据应用需求选择合适的CPLL设置.大于以上速率必须使用QPLL。
另外,同一型号的不同速度标识的设备上GT收发器最高可运行速度不同,因此在硬件选型的时候需要注意设备速度型号是否满足要求.
GT 复位
GT收发器的必须要复位后才能正常使用,然而在设备运行中需要复位的场景有很多,所要求的复位的操作也不相同.但庆幸的是Xilinx官方已经为我们做好了大部分的复位逻辑,我们只需要根据手册以及当前环境去驱动对应信号即可.
全复位
在FPGA上电后,gt收发器开始初始化,GT收发器使用FSM(有限状态机来控制初始化过程).驱动有限状态机复位即可完成CPLL/QPLL,TX,RX复位.驱动信号为soft_reset_tx_in
和soft_reset_rx_in
,需要注意的是,驱动这两个信号将复位并且初始化目前Quad下所有Tx或Rx通道(该部分代码为与IP中,只能看到无法修改).
用户可以在顶层读取 fsmresetdone
类型信号来判断状态机是否完成复位操作.
FSM复位GT收发器的驱动逻辑是驱动 GTTXRESET 和 GTRXRESET 这两个信号会复位所有TX和RX组件,如果有需要用户也可驱动这两个信号完成所有组件复位.
需要注意的是,若套用Example设计,则设计中对外暴露的RESET端口有可能无效,在(CoreName)_init中可以看见
generate
if (EXAMPLE_USE_CHIPSCOPE == 1)
begin : chipscope
assign gt0_gttxreset_i = gt0_gttxreset_in || gt0_gttxreset_t;
assign gt0_gtrxreset_i = gt0_gtrxreset_in || gt0_gtrxreset_t;
assign gt0_txuserrdy_i = gt0_txuserrdy_in && gt0_txuserrdy_t;
assign gt0_rxuserrdy_i = gt0_rxuserrdy_in && gt0_rxuserrdy_t;
assign gt1_gttxreset_i = gt1_gttxreset_in || gt1_gttxreset_t;
assign gt1_gtrxreset_i = gt1_gtrxreset_in || gt1_gtrxreset_t;
assign gt1_txuserrdy_i = gt1_txuserrdy_in && gt1_txuserrdy_t;
assign gt1_rxuserrdy_i = gt1_rxuserrdy_in && gt1_rxuserrdy_t;
end
endgenerate generate
if (EXAMPLE_USE_CHIPSCOPE == 0)
begin : no_chipscope
assign gt0_gttxreset_i = gt0_gttxreset_t;
assign gt0_gtrxreset_i = gt0_gtrxreset_t;
assign gt0_txuserrdy_i = gt0_txuserrdy_t;
assign gt0_rxuserrdy_i = gt0_rxuserrdy_t;
assign gt1_gttxreset_i = gt1_gttxreset_t;
assign gt1_gtrxreset_i = gt1_gtrxreset_t;
assign gt1_txuserrdy_i = gt1_txuserrdy_t;
assign gt1_rxuserrdy_i = gt1_rxuserrdy_t;
end
endgenerate
该文件在ipcore下是只读文件,我无法修改,可能与GUI中某一项设置有关,但我目前没有发现.因此对外暴露的 gtx_gtrxreset_in
gtx_gttxreset_in
可能是无效端口.所以我建议若无法确定这两个信号是否有效,则直接驱动 soft_reset_tx_in
和 soft_reset_rx_in
信号进行完整复位初始化最为稳妥.
在收发器外接光纤等可拔插器件时,连接回复需要复位.可驱动全局复位,也可驱动单组件复位.
复位区别
实际使用过程中,若使用Example Design,对外暴露的复位引脚主要有 `GTRXRESET` `PMARESET` `PCSRESET`
-
GTRESET
通过阅读ug476可知,在顺序模式下驱动GTRXRESET
可以进行全域复位流程,驱动GTRXRESET
还会复位有限状态机.另外,根据手册建议在RXN/RXP
或者远端重新上线时候,复位GTRXRESET
以确保数据能够被正确的锁定. -
PMARESET
使用PMARESET
进行复位复位组件实际上与GTRXRESET
进行复位的唯一区别就是使用GTRXRESET
进行复位将重置组件的FSM即有限状态机.
另外,GUI默认设置来看,使用GTRXRESET
连接到的是各个通路的FSM,前文提到,若使用设计示例进行开发则所有的收发器TX和RX的reset均由SOFT_RESET
控制,也就是说若使用总复位信号则会使所有统一组下的收发器TX或RX复位,若用户不能接接受这种情况,则可以使用PMARESET
进行复位 , 示例代码中将每一组收发器的收发通道的PMA复位引出,使用该信号复位不会影响其他收发通道. -
PCSRESET
单独使用数字域复位的情况较少,在文档中也只提到了在并行时钟源进行复位的时候可以选择使用PCS复位.
总结
在结构较为简单且对设备恢复工作时间没有严格要求的情况下,使用设计示例提供的soft_reset端口进行复位与初始化最为稳妥,若多个收发器同时被开启是使用且相互间独立,则更适合使用PMARESET进行复位.
在输入时钟或PLL时钟发生变化时可以直接驱动soft_reset,FSM在复位GT收发器是之前会复位QPLL/CPLL,在时钟锁定之后才会去复位收发器.