FPGA实战(43):Xilinx SRIO Gen2高速串行通信(一)——顶层系统集成与调试架构设计

📅 2026/7/11 19:18:02
FPGA实战(43):Xilinx SRIO Gen2高速串行通信(一)——顶层系统集成与调试架构设计
一、引言在FPGA高速串行通信设计中,顶层集成模块承担着系统时钟管理、复位分发、调试接口以及多通道协同工作的核心职责。一个好的顶层架构不仅需要保证各子模块稳定运行,还需为调试和验证提供便利。本系列文章基于XC7Z035平台,采用Xilinx SRIO Gen2 IP核实现双通道高速通信。本文作为系列第一篇,重点剖析顶层模块XC7Z035_TOP的设计思路,涵盖系统时钟生成、可配置复位逻辑、VIO调试控制、双通道SRIO_Engine实例化以及与底层通信模块的衔接。后续文章将深入SRIO_Module与Channel的封装设计,以及IP核、时钟和复位管理的具体实现。二、顶层整体架构XC7Z035_TOP是系统的最高层模块,其核心架构如下:功能单元实现模块职责系统时钟输入IBUFDS将差分系统时钟转为单端,作为复位逻辑的时钟源GT参考时钟输入IBUFDS_GTE2提供SRIO物理层的高速参考时钟(125MHz/156.25MHz)复位生成rst_gen_module产生系统上电复位信号,复位周期可配置VIO调试控制VIO_O1提供软件可控制的复位信号,便于调试SRIO_Engine(通道0)SRIO_Engine_u0实现事务发起与响应的自动化状态机SRIO_Engine(通道1)SRIO_Engine_u1与通道0完全独立,可并行工作SRIO_ModuleSRIO_Module_u0封装两个物理通道(SRIO_Channel)和共享QPLLSFP控制直接赋值使能SFP光模块顶层信号流如下图所示(文字描述):差分时钟输入→IBUFDS→w_sys_clk→rst_gen_module→w_sys_rstGT参考时钟→IBUFDS_GTE2→w_gtref_clk→SRIO_ModuleSRIO_Engine_u0通过AXI4-Stream接口与SRIO_Module的通道0相连SRIO_Engine_u1与SRIO_Module的通道1相连VIO输出w_vio_p0_rst_n(低有效)可软件复位两个Engine的复位由log_rst和port_initialized组合产生三、创新点分析创新点一:双通道并行独立事务处理架构设计实现:顶层模块例化了两个完全独立的SRIO_Engine,分别对应两个物理通道。每个Engine拥有自己独立的时钟域(w_1_log_clk和w_2_log_clk)和复位信号,互不干扰。SRIO_Engine SRIO_Engine_u0( .i_clk (w_1_log_clk), .i_rst (w_1_log_rst | ~w_1_port_initialized), // ... AXI4-Stream接口 ); SRIO_Engine SRIO_Engine_u1( .i_clk (w_2_log_clk), .i_rst (w_2_log_rst | ~w_2_port_initialized), // ... AXI4-Stream接口 );创新价值:双通道可同时独立运行,互不阻塞,实现真正的并行通信每个通道的复位条件独立,单个通道异常不影响另一通道为未来扩展更多通道提供了清晰的模板创新点二:VIO(Virtual I/O)软复位集成设计实现:在顶层中例化了Xilinx VIO IP核,通过w_vio_p0_rst_n输出低有效复位信号。用户可通过Vivado Hardware Manager在线控制该信号,无需重新编译即可对逻辑进行复位。VIO_O1 VIO_O1_U0 ( .clk (w_1_log_clk), .probe_out0 (w_vio_p0_rst_n) );创新价值:调试效率提升:传统方式需要按键或外部信号复位,VIO可实现软件触发复位远程调试:配合JTAG,可在不接触硬件的情况下复位指定逻辑灵活组合:可将VIO复位与系统复位逻辑组合,实现分级复位策略创新点三:Engine复位条件精细化设计设计实现:每个Engine的复位信号并非简单的log_rst,而是组合了log_rst和port_initialized:.i_rst = w_1_log_rst | ~w_1_port_initialized逻辑含义:当SRIO物理层尚未完成初始化(port_initialized=0)时,Engine保持复位状态当逻辑层复位有效时,Engine被复位只有当两者都无效(log_rst=0且port_initialized=1)时,Engine才能开始工作创新价值:安全启动:确保物理链路就绪后再开始事务,避免发送无效报文自动恢复:若链路因故断开(port_initialized变低),Engine自动复位,链路恢复后自动重启无需用户干预:简化用户逻辑,提高系统可靠性创新点四:调试信号集中标记策略设计实现:顶层中所有关键的AXI4-Stream信号均添加了(* MARK_DEBUG = "TRUE" *)属性:(* MARK_DEBUG = "TRUE" *) wire s_1_axis_ireq_tvalid; (* MARK_DEBUG = "TRUE" *) wire [63:0] s_1_axis_ireq_tdata; // ... 其他信号创新价值:在Vivado的ILA(Integrated Logic Analyzer)中可直接观测这些内部信号,无需修改底层代码统一在顶层标记,便于集中管理调试信号,避免遗漏当需要缩小调试范围时,可快速注释或取消标记四、功能点详解4.1 系统时钟与GT参考时钟输入系统时钟采用差分LVDS输入,通过IBUFDS转换为单端:IBUFDS #( .DIFF_TERM ("FALSE"), .IBUF_LOW_PWR ("TRUE"), .IOSTANDARD ("DEFAULT") ) IBUFDS_U0 ( .O (w_sys_clk), .I (i_sys_clk_p), .IB (i_sys_clk_n) );GT参考时钟通过IBUFDS_GTE2专用原语输入:IBUFDS_GTE2 IBUFDS_GTE2_U0( .O (w_gtref_clk), .I (i_gtref_clk_p), .IB (i_gtref_clk_n), .CEB (1'b0), .ODIV2() );4.2 可配置复位生成模块(rst_gen_module)rst_gen_module产生系统上电复位信号,复位持续时间通过参数P_RST_CYCLE配置:rst_gen_module#( .P_RST_CYCLE (50) ) rst_gen_module_u0 ( .i_clk (w_sys_clk), .o_rst (w_sys_rst) );其内部实现如下(参考源码):使用8位计数器r_cnt计数复位输出ro_rst在计数未达到指定周期前为1,达到后为0特殊处理P_RST_CYCLE=0时保持复位状态功能特点:支持长复位周期,满足各IP核的上电初始化时序要求参数化设计,便于调整4.3 SFP光模块使能控制顶层输出o_sfp_diseable直接赋值为2'b00,表示使能两个SFP光模块(低有效):assign o_sfp_diseable = 2'b00;4.4 通道与Engine的信号连接顶层中,SRIO_Module与两个SRIO_Engine之间的信号连接遵循AXI4-Stream协议:IREQ通道:Engine → Module(发起请求)IRESP通道:Module → Engine(接收响应)TREQ通道:Module → Engine(接收目标请求)TRESP通道:Engine → Module(发送目标响应)这种标准化的握手协议使得模块间接口清晰,便于跨层调试。五、设计亮点总结设计特性实现方式工程价值双通道并行两个独立Engine实例提高吞吐量,支持并行处理