xilinx vivado verilog srio源代码工程,包含维护包、读写和门铃等功能,顶层封装为fifo,操作简单,简单修改即可应用到实际工程中,附含srio使用说明文档和license

一、模块概述

SRIO(Serial RapidIO)作为一种高速串行互连技术,在FPGA实时处理系统中有着广泛应用。SRIO CBB(Common Build Block)模块是基于Xilinx ISE14.1软件平台与Virtex-5 FPGA器件开发的可重用模块,其核心目标是简化SRIOv56 IP的使用复杂度,优化接口适配能力,提升高速数据传输效率。

该模块的开发初衷主要包含三个维度:其一,将信号复杂的SRIOv56 Local Link接口转换为标准FIFO接口,降低IP与其他应用模块的接口适配难度;其二,屏蔽Serial RapidIO复杂的总线协议细节,通过分离控制字与传输数据,降低初、中级工程师的使用门槛;其三,针对高速实时处理系统的应用场景,精简SRIOv56 IP的冗余功能,提升IP的应用效率。

在核心参数配置方面,SRIO CBB选用4x位宽模式,传输速率达2.5Gbps,GTX参考时钟采用125MHz,硬件描述语言采用Verilog HDL。若实际应用中需调整上述模式,需联系硬件部更换对应IP核版本。

二、模块结构与核心组件

2.1 整体架构

SRIO CBB模块的内部结构由CLK_RST、CORE、SEG、TXP、RXP及各类FIFO(TCFIFO、TXFIFO、DBFIFO、RXFIFO)组成,整体工作在CORE输出的同步时钟域下。模块框图如下(依据文档图1整理):

App logic ←→ [SEG模块] ←→ [TXP模块] ←→ [TXFIFO] ←→ [CORE模块] ←→ 4x serdes
                                                               ↓↑
App logic ←→ [RXP模块] ←→ [RXFIFO/DBFIFO] ←→ [CORE模块] ←→ 时钟复位(CLK_RST)

其中,CLKRST和CORE为SRIOv5_6 IP生成过程中自动生成的不可修改模块,SEG、TXP、RXP为可定制开发模块,工程师可根据实际需求进行调整。

2.2 核心组件功能说明

2.2.1 时钟复位模块(CLK_RST)

该模块负责生成和控制SRIO CBB的时钟与复位系统,由sriov56clk和rioreset两个子模块构成:

  • sriov56_clk:通过MMCM(混合模式时钟管理器)生成CORE模块及其他设计模块所需的工作时钟,确保系统时钟的稳定性与同步性;
  • rio_reset:通过FSM(有限状态机)控制RapidIO复位序列的发送与接收处理,保障模块复位过程的规范性与可靠性。
2.2.2 核心协议模块(CORE)

CORE是RapidIO顶层封装模块,集成了SRIO物理层核心、逻辑层核心、缓冲区设计、寄存器管理器参考设计及收发器封装等子模块,完整实现了Serial RapidIO总线协议规范,是模块进行高速数据传输的核心支撑。其主要功能包括协议解析、数据缓冲、链路管理等,为上层模块提供标准化的Local Link接口。

2.2.3 数据分片模块(SEG)

根据RapidIO总线协议规定,一次传输的最大数据包长度为256字节。当应用逻辑(app logic)需要传输的数据长度超过该限制时,SEG模块会自动将数据分割为多个256字节的数据包进行分片传输,从而减少app logic更新控制字的频率,有效提升传输带宽。

2.2.4 发送控制模块(TXP)

TXP模块的核心功能是接口转换与时序控制:一方面,将app logic待发送的命令(控制字)和数据转换为CORE模块能够识别的Local Link接口信号;另一方面,根据CORE与app logic两端的有效状态,精准控制总线接口时序,确保数据发送的准确性与同步性。

2.2.5 接收解析模块(RXP)

RXP模块通过解析CORE模块输出的Local Link接口信号,提取有效的控制字信息和传输数据,并以标准FIFO接口时序将数据传输给app logic进行处理。需要注意的是,CBB默认用户模块能够及时接收数据,若无法全带宽接收,数据丢弃逻辑需由用户自行实现。此外,工程师可根据需求在app logic内部灵活配置DBFIFO(门铃FIFO)和RXFIFO(接收数据FIFO)的例化方式(单FIFO、双FIFO或不例化)。

2.2.6 FIFO缓存模块

CBB模块包含多个FIFO缓存组件,各自承担特定功能:

  • TCFO:发送控制字FIFO,缓存app logic写入的控制字信息,位宽72bit,深度512;
  • TXFIFO:发送传输数据FIFO,缓存待发送的业务数据,位宽64bit,深度1024;
  • DBFIFO:接收门铃FIFO,缓存接收端的门铃信息,位宽16bit;
  • RXFIFO:接收传输数据FIFO,缓存接收的业务数据,位宽64bit,支持按BLOCK划分存储(相同地址段数据属于同一BLOCK)。

三、接口描述

3.1 接口信号分类与定义

SRIO CBB的接口信号可分为参数定义、时钟复位、与app logic交互、GTP物理层布线四大类,核心信号定义如下表所示(节选关键信号):

信号类别信号名称位宽方向核心功能描述
参数定义SRIO_SWING--差分摆动幅度,需结合IBERT测试结果配置

| | SRIOPREEMPH | - | - | 预加重比率,需结合IBERT测试结果配置 |

| 时钟复位 | user_synrst | 1 | 输入 | 用户接口复位信号,高电平有效 |

| | srio_synclk | 1 | 输出 | SRIO核同步时钟 |

| | srio_synrst | 1 | 输出 | SRIO核同步复位,高电平有效 |

| 与app logic交互 | sriosetiden | 1 | 输入 | 本地SRIO ID设置使能,操作时钟为user_synclk |

| | sriosetidnum | 8 | 输入 | 本地SRIO ID配置信息 |

| | sriotcfifowr | 1 | 输入 | 发送控制字FIFO写使能 |

| | sriotcfifowdata | 72 | 输入 | 发送控制字FIFO写数据(含目的地址、ID、长度等) |

| | sriotcfifoafull | 1 | 输出 | 发送控制字FIFO将满标志 |

| | sriotxfifowr | 1 | 输入 | 发送传输数据FIFO写使能 |

xilinx vivado verilog srio源代码工程,包含维护包、读写和门铃等功能,顶层封装为fifo,操作简单,简单修改即可应用到实际工程中,附含srio使用说明文档和license

| | sriotxfifowdata | 64 | 输入 | 发送传输数据FIFO写数据 |

| | sriodbfifowr | 1 | 输出 | 接收门铃使能,操作时钟为srio_synclk |

| | sriodbfifowdata | 16 | 输出 | 接收门铃信息 |

| | sriorxfifowr | 1 | 输出 | 接收传输数据FIFO写使能 |

| | sriorxfifowaddr | 32 | 输出 | 接收传输数据FIFO写地址(同地址属同一BLOCK) |

| | srio_devid | 8 | 输出 | 本地SRIO ID信息(配置后20个时钟周期更新) |

| | srio_status | 32 | 输出 | 模块内部状态(含FIFO状态、PLL锁定、链路就绪等) |

| GTP物理层 | refclk_in | 1 | 输入 | GTP输入参考时钟 |

| | sriotxp[0-3]/sriotxn[0-3] | 1 | 输出 | 发送差分信号(4x模式) |

| | sriorxp[0-3]/sriorxn[0-3] | 1 | 输入 | 接收差分信号(4x模式) |

| | sysrstn | 1 | 输入 | 本地复位信号,低电平有效 |

3.2 接口时序特性

CBB模块与app logic的接口均采用标准写FIFO时序,核心时序规则如下:

  1. 时钟同步:所有与app logic交互的控制信号(如sriotcfifowr、sriotxfifowr)均以usersynclk为操作时钟,接收端信号(如sriodbfifowr、sriorxfifowr)以sriosynclk为操作时钟;
  2. 写操作时序:写使能信号(如sriotcfifowr)为高电平时,对应写数据(如sriotcfifowdata)需保持稳定,直至写使能信号拉低;
  3. 满状态判断:写操作前需检测FIFO将满标志(如sriotcfifoafull),避免数据溢出;
  4. 复位时序:复位信号(usersynrst、sriosynrst)有效期间,所有接口信号应处于无效状态,复位释放后需等待时钟稳定再进行数据传输。

关键时序图包括同步时钟和复位时序图、写发送控制字FIFO时序图、写发送传输数据FIFO时序图等,具体可参考文档图2-图6。

四、核心功能与应用流程

SRIO CBB支持五种RapidIO传输层操作,分别为配置本地SRIO ID、发送/接收门铃、不带响应的正常模式数据传输、带响应的正常模式数据传输、流模式数据传输。以下详细说明各功能的应用流程与关键配置。

4.1 配置本地SRIO ID操作

本地SRIO ID是模块在RapidIO网络中的唯一标识,必须在数据传输前完成配置,具体流程:

  1. app logic产生一个sriosetiden使能脉冲(高电平有效);
  2. 在使能脉冲有效期间,将目标ID值写入sriosetidnum(8bit);
  3. 配置完成后,需等待20个时钟周期,srio_devid信号才会更新为新配置的ID值(文档图7示例中,配置ID为0x18后,经16个周期完成更新);
  4. 注意事项:SRIO核软复位后需重新配置本地ID。

4.2 发送/接收门铃操作

门铃操作主要用于模块间的控制信号交互,无需传输业务数据,流程如下:

4.2.1 发送门铃
  1. 无需操作TXFIFO,仅需配置TCFIFO;
  2. 向sriotcfifowdata写入门铃控制字,控制字字段定义如下(文档图9):
    - Bit71~68:保留字,写0;
    - Bit35~28:目的端SRIO ID(Destid);
    - Bit27~12:门铃信息(Doorbell
    info);
    - Bit11~08:Bit[9:8]为传输优先级(0x1代表优先级1),Bit[11:10]保留;
    - Bit07~00:操作码0xA0(标识门铃操作);
  3. 检测sriotcfifoafull为低电平时,拉高三sriotcfifowr使能信号,完成控制字写入;
  4. 示例:控制字0x1212345a0表示向ID为0x12的远端发送门铃信息0x1234,传输优先级为1。
4.2.2 接收门铃

接收端通过srio_dbfifo接口直接获取门铃信息:

  1. 当sriodbfifowr为高电平时,表示有新的门铃信息;
  2. 读取sriodbfifowdata(16bit)即可获得门铃内容;
  3. 无需配置额外控制字,由RXP模块自动解析CORE接口信号并写入DBFIFO。

4.3 不带响应的正常模式数据传输(NWRITE)

该模式下,发送端发送一个BLOCK数据后无需等待远端响应即可继续发送下一个BLOCK,传输效率较高,流程如下:

4.3.1 发送数据
  1. 写控制字:向TCFIFO写入数据传输控制字,字段定义(文档图11):
    - Bit71~68:保留字,写0;
    - Bit67~36:目的端起始地址(Destaddr);
    - Bit35~28:目的端SRIO ID(Dest
    id);
    - Bit27~12:整包数据长度(Length,单位为DW,1DW=64bit);
    - Bit11~08:Bit[9:8]为传输优先级,Bit[11:10]保留;
    - Bit07~00:操作码0x54(标识NWRITE操作);
  2. 写数据:控制字写入完成后,向TXFIFO顺序写入业务数据,需保证数据长度与控制字中Length字段一致;
  3. 时序要求:必须先写TCFIFO再写TXFIFO,且TCFIFO写入指令后,需完成对应TXFIFO数据写入才能写入其他操作指令;
  4. 示例:控制字0x180502454表示向ID为0x18、地址0x0的远端发送长度为0x502 DW的数据,传输优先级为0。
4.3.2 接收数据
  1. 接收端RXP模块解析CORE接口信号,将数据按BLOCK划分后写入RXFIFO;
  2. 同一BLOCK数据的sriorxfifowaddr相同,同一数据包内不同BLOCK的起始地址递增;
  3. app logic通过检测sriorxfifowr信号,读取sriorxfifowdata(64bit)和sriorxfifowaddr(32bit),完成数据接收与重组。

4.4 带响应的正常模式数据传输(NWRITE_R)

该模式与不带响应模式的核心区别在于:发送端每发送一个BLOCK数据后,必须等待远端返回响应才能继续发送,传输可靠性更高但带宽较低。

关键差异点
  1. 控制字操作码:Bit07~00为0x55(标识NWRITE_R操作),其余字段定义与NWRITE一致(文档图15);
  2. 时序特性:数据传输间隔增加(响应等待时间),接收端时序间隔明显大于不带响应模式(文档图17);
  3. 无需app logic干预响应过程:响应的发送与接收由CBB内部自动处理,app logic仅需按NWRITE模式的接口时序进行数据收发。
示例

控制字0x120502455表示向ID为0x12、地址0x0的远端发送长度为0x502 DW的数据,传输优先级为0,带响应模式。

4.5 流模式数据传输(SWRITE)

流模式适用于大数据量连续传输场景,与正常模式的核心差异:

  1. 数据长度限制:仅支持8BYTE整数倍长度的数据传输;
  2. 包头格式:比NORMAL_WRITE精简,有效传输带宽略高;
  3. 控制字操作码:Bit07~00为0x60(标识SWRITE操作),其余字段定义与NWRITE一致(文档图18);
  4. 接口时序:与NORMAL_WRITE完全相同,app logic无需修改时序处理逻辑。
示例

控制字0x120502460表示向ID为0x12、地址0x0的远端发送长度为0x502 DW的数据,传输优先级为0,流模式。

五、使用注意事项与常见问题排查

5.1 核心使用注意事项

  1. ID配置要求:FPGA进行SRIO数据传输前必须配置本地SRIO ID,软复位后需重新配置;
  2. 链路就绪判断:需在linktrdy(sriostatus[0])有效后,再进行ID配置和FIFO操作;
  3. 使能信号互斥:sriosetiden、sriotcfifowr、sriotxfifowr不可同时使能,需分时操作;
  4. 数据长度匹配:TCFIFO中配置的长度需与TXFIFO写入的数据长度一致,数据发送最小单元为64bit;
  5. 满状态检测:写TCFIFO和TXFIFO前必须检测对应afull信号,避免数据溢出;
  6. 复位操作规范:SRIO核独立硬复位或数据传输中Bit文件重加载时,需先执行核的软复位;
  7. 示例工程使用:使用示例工程时,需根据FPGA型号选择对应的ngc文件,并按SRIO速率配置ucf文件中的Time Specs。

5.2 常见问题排查

1. SRIO物理链路异常(link_trdy/link_rrdy无效)
  • 排查方向:确认SRIO位置约束(尤其是时钟和复位);检查与SRIO Switch或DSP(6455/6678)的速率设置是否一致;使用ISE的IBERT工具或示波器测试高速SerDes信号质量。
2. 数据传输丢失
  • 排查方向:检查app logic是否检测afull信号;传输过程中是否出现linktrdy/linkrrdy无效;确认目的节点是否正常工作。
3. 数据传输中止
  • 排查方向:确认目的节点工作状态;检查linktrdy/linkrrdy是否有效,必要时测试SerDes信号质量或论证系统SRIO方案。
4. 4x模式传输带宽持续降低
  • 排查方向:复查FPGA和DSP的软件程序;检测linktrdy/linkrrdy状态;确认机箱底板是否支持当前SRIO速率(尤其是5.0G);检查modesel(sriostatus[2])是否异常(0代表1x模式,1代表4x模式)。
5. 门铃传输超时(FPGA与6678互联场景)
  • 排查方向:先验证不带响应的数据传输是否正常(判断路由配置);确认SRIO链路初始化或软复位后,本地ID是否正确配置。

六、仿真与综合实现实例

6.1 功能仿真实例

功能仿真旨在验证模块的收发全双工能力,仿真环境由两个 transceiver 组成,收发信号互联,两端同时生成并校验顺序数据。

仿真步骤
  1. 执行Sim文件夹下的collect_files.bat,完成目录清理和文件列表生成;
  2. 修改Test/test01001目录下的testbench.v,创建自定义激励模型;
  3. 执行Test/test01_001目录下的simulate.bat,输入仿真时间(如run 250us),等待仿真完成;
  4. 执行Sim文件夹下的start_debussy.bat,启动Debussy软件进行波形调试。
仿真结果

仿真时序图(文档图22)验证了SRIO CBB支持全双工数据传输,发送和接收数据同步且无错误。

6.2 综合实现实例

综合实现基于FPGA2V6ZD板卡和SRIO交换板卡搭建测试系统,包含两个transceiver(V6A和V6B),通过SRIO Switch互联。

测试指标
  • 参考时钟锁定:慢闪灯表示GTP参考时钟锁定;
  • 数据校验状态:快闪灯表示数据校验错误,长亮表示校验正确。
系统架构

测试系统由Generator&Checker、SRIO CBB、Transceiver、SRIO Switch组成,实现两端数据的发送、传输、接收与校验,具体架构见文档图23。

七、总结

SRIO CBB模块通过接口标准化、协议屏蔽、功能精简三大设计理念,显著降低了Serial RapidIO技术在FPGA系统中的应用门槛。其核心优势在于将复杂的SRIO协议交互封装为简单的FIFO接口,支持多种传输模式,适配高速实时处理场景的需求。

工程师在实际应用中,需重点关注接口时序、ID配置、数据长度匹配、链路状态检测等关键环节,并结合仿真工具与测试实例验证系统功能。通过合理配置模块参数与传输模式,可实现高效、可靠的高速数据传输,为FPGA-based实时处理系统提供强有力的互连支撑。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐