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

📅 2026/7/11 19:21:27 👁️ 阅读次数 📝 编程学习
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)和共享QPLL
SFP控制直接赋值使能SFP光模块

顶层信号流如下图所示(文字描述):

  • 差分时钟输入IBUFDSw_sys_clkrst_gen_modulew_sys_rst
  • GT参考时钟IBUFDS_GTE2w_gtref_clkSRIO_Module
  • SRIO_Engine_u0通过AXI4-Stream接口与SRIO_Module的通道0相连
  • SRIO_Engine_u1SRIO_Module的通道1相连
  • VIO输出w_vio_p0_rst_n(低有效)可软件复位
  • 两个Engine的复位由log_rstport_initialized组合产生

三、创新点分析

创新点一:双通道并行独立事务处理架构

设计实现:

顶层模块例化了两个完全独立的SRIO_Engine,分别对应两个物理通道。每个Engine拥有自己独立的时钟域(w_1_log_clkw_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_rstport_initialized

.i_rst = w_1_log_rst | ~w_1_port_initialized

逻辑含义:

  • 当SRIO物理层尚未完成初始化(port_initialized=0)时,Engine保持复位状态
  • 当逻辑层复位有效时,Engine被复位
  • 只有当两者都无效(log_rst=0port_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实例提高吞吐量,支持并行处理