:Xilinx SRIO Gen2高速串行通信(二)——多通道共享QPLL与Channel封装设计)
一、引言在系列第一篇文章中,我们剖析了顶层模块XC7Z035_TOP,重点介绍了系统时钟输入、VIO调试控制、rst_gen_module复位生成以及与SRIO_Engine的接口衔接。作为系列第二篇,本文将深入SRIO通信的中间层——SRIO_Module与SRIO_Channel的设计。在Xilinx 7系列FPGA中,GTX/GTH收发器以Quad(四通道)为单位进行组织,每个Quad包含一个共享的QPLL(Quad PLL)。合理利用QPLL共享机制,能够在多通道SRIO应用中显著节省时钟资源并简化设计。本文将重点阐述SRIO_Module如何通过k7_v7_gtxe2_common模块实现双通道QPLL共享,以及SRIO_Channel作为独立通道封装单元的设计思路。说明:本文聚焦于SRIO_Channel的外壳封装与信号聚合,而SRIO_Channel内部的时钟管理(srio_clk)、复位管理(srio_rst)和SRIO IP核具体配置,将在系列第三篇文章中深入解析。二、整体架构设计SRIO_Module处于顶层XC7Z035_TOP与底层SRIO_Channel之间,是连接物理通道与用户逻辑的桥梁。其内部结构如下:层级模块/单元数量职责公共时钟层srio_gen2_0_k7_v7_gtxe2_common1个基于GT参考时钟生成QPLL输出时钟和锁定信号,供双通道共享通道层SRIO_Channel2个(u0/u1)独立封装SRIO IP核、时钟模块和复位模块,对外暴露标准化AXI4-Stream接口信号聚合层顶层连线逻辑-将输入/输出信号按通道编号(1/2)分配到对应的Channel实例这种“1个QPLL + N个Channel”的架构充分利用了7系列FPGA的Quad资源特性,在保证多通道独立工作的同时,最大限度地复用时钟资源。三、创新点分析创新点一:Quad内多通道QPLL统一共享机制设计实现:在SRIO_Module中,我们首先例化k7_v7_gtxe2_common模块,将GT参考时钟(i_gtref_clk)作为输入,产生qpll_clk_out、qpll_out_refclk_out和gt0_qpll_lock_out三路关键信号,然后同时馈送给两个SRIO_Channel实例:srio_gen2_0_k7_v7_gtxe2_common k7_v7_gtxe2_common_inst ( .gt0_gtrefclk0_common_in (i_gtref_clk ), .gt0_qplllockdetclk_in (0 ), .gt0_qpllreset_in (0 ), .qpll_clk_out (gt0_qpll_clk_out ), .qpll_out_refclk_out (gt0_qpll_out_refclk_out), .gt0_qpll_lock_out (gt0_qpll_lock_out ) ); SRIO_Channel SRIO_Channel_u0( .gt0_qpll_clk_in (gt0_qpll_clk_out ), .gt0_qpll_out_refclk_in (gt0_qpll_out_refclk_out), .gt0_qpll_lock_in (gt0_qpll_lock_out ), // ... ); SRIO_Channel SRIO_Channel_u1( .gt0_qpll_clk_in (gt0_qpll_clk_out ), .gt0_qpll_out_refclk_in (gt0_qpll_out_refclk_out), .gt0_qpll_lock_in (gt0_qpll_lock_out ), // ... );创新价值:资源利用最优化:传统做法中,若每个Channel独立例化QPLL,双通道将占用两个QPLL资源。本设计将QPLL统一到顶层,两个通道仅需一个QPLL,释放了宝贵的时钟资源供其他模块使用。相位一致性保证:共享同一个QPLL意味着两个通道的GT时钟同源同相,这在需要多通道同步或相位对齐的场景中具有天然优势。功耗显著降低:减少QPLL数量直接降低了器件静态功耗和动态功耗。锁定状态统一管理:gt0_qpll_lock_out信号统一指示QPLL锁定状态,避免了多路锁定信号分别处理的复杂性。创新点二:标准化通道封装与信号透传隔离设计实现:SRIO_Module中例化了两个SRIO_Channel,采用“信号透传”方式,将顶层的_1_和_2_前缀信号直接映射到对应Channel的端口上:SRIO_Channel SRIO_Channel_u0( .s_axis_ireq_tvalid (s_1_axis_ireq_tvalid ), .s_axis_ireq_tready (s_1_axis_ireq_tready ), // ... 所有信号均按 _1_ 前缀映射 ); SRIO_Channel SRIO_Channel_u1( .s_axis_ireq_tvalid (s_2_axis_ireq_tvalid ), .s_axis_ireq_tready (s_2_axis_ireq_tready ), // ... 所有信号均按 _2_ 前缀映射 );创新价值:物理隔离:两个通道的信号路径完全独立,不存在任何逻辑耦合,确保通道间不会因逻辑资源共享而产生意外干扰。扩展友好:若未来需要增加至3通道或4通道,只需在SRIO_Module中新增Channel实例并添加对应的_3_/_4_信号端口即可,无需修改已有逻辑。层次清晰:信号前缀(_1_/_2_)从顶层贯穿至Channel层,在ILA调试时能够直观区分不同通道的信号归属。创新点三:专有参数化配置接口(QPLL_FBDIV自动适配)设计实现:在k7_v7_gtxe2_common模块中,通过参数QPLL_FBDIV_TOP和宏定义自动映射QPLL分频比:parameter QPLL_FBDIV_TOP = 16; parameter QPLL_FBDIV_IN = (QPLL_FBDIV_TOP == 16) ? 10'b0000100000 : (QPLL_FBDIV_TOP == 20) ? 10'b0000110000 : // ... 其他配置 parameter QPLL_FBDIV_RATIO = (QPLL_FBDIV_TOP == 66) ? 1'b0 : 1'b1;创新价值:参数化配置:用户只需修改QPLL_FBDIV_TOP一个参数,模块自动适配SRIO不同线速率(如1.25Gbps、2.5Gbps、3.125Gbps、5Gbps等)对应的QPLL倍频设置。降低配置复杂度:无需理解GTXE2_COMMON复杂的寄存器配置,降低了设计门槛和出错概率。复用性强:该Common模块可以轻松移植到其他线速率需求的项目中。四、功能点详解4.1 SRIO_Channel通道封装接口SRIO_Channel作为独立通道的封装单元,其端口可以分为四大类:端口类别典型信号功能说明GT物理层接口i_srio_rxp0/n0、o_srio_txp0/n0高速串行差分收发信号,直接连接FPGA的GT收发器引脚QPLL共享接口gt0_qpll_clk_in、gt0_qpll_out_refclk_in、gt0_qpll_lo