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

作者: 资深软件开发工程师 & 技术文档作家

日期: 2025-10-22

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

版本: v1.0

关键词: SRIO, RapidIO, FPGA, Verilog, CBB, 高速串行通信, FIFO, 数据包传输


一、概述

SRIO CBB(Serial RapidIO Common Building Block)是一个用于 FPGA 的高速串行通信模块,基于 Xilinx 的 sriov56 IP 核开发,实现了 Serial RapidIO 协议的用户侧封装。该模块提供了统一的数据收发接口,支持门铃(Doorbell)、数据写(NWRITE、NWRITE_R、SWRITE)等多种传输模式,适用于高性能嵌入式系统中 FPGA 与 DSP、PowerPC、其他 FPGA 之间的数据通信。


二、设计目标

  • 封装 sriov56 IP 核,简化用户接口
  • 支持多种 RapidIO 数据包格式:Doorbell、NWRITE、NWRITE_R、SWRITE
  • 提供基于 FIFO 的数据通道,支持异步时钟域
  • 支持流控、状态反馈、错误检测
  • 提供仿真与综合参考设计,便于快速集成

三、模块结构

SRIO CBB 的整体架构如下图所示:

+------------------+
|   App Logic      |
| (User FPGA Code) |
+--------+---------+
         |
         v
+------------------+
|  SRIO CBB Core   |
|  - SRIO_SEG      |
|  - SRIO_TXP      |
|  - SRIO_RXP      |
|  - SRIO_TCFIFO   |
|  - SRIO_TXFIFO   |
+--------+---------+
         |
         v
+------------------+
|  srio_v5_6 IP    |
|  (Xilinx Core)   |
+------------------+

3.1 子模块说明

模块名 功能描述
SRIO_SEG 数据包分段与协议控制字生成
SRIO_TXP 用户数据 → LocalLink → SRIO IP
SRIO_RXP SRIO IP → LocalLink → 用户数据
SRIO_TCFIFO 控制字缓存(72位)
SRIO_TXFIFO 数据缓存(64位)
SRIO_RXFIFO 接收数据缓存(64位)

四、接口定义

4.1 用户侧信号(App Logic)

信号名 方向 位宽 描述
user_synclk I 1 用户逻辑时钟
user_synrst I 1 用户逻辑复位
sriosetiden I 1 设置 SRIO 设备 ID 使能
sriosetidnum I 8 设置 SRIO 设备 ID
sriotcfifowr I 1 控制字 FIFO 写使能
sriotcfifowdata I 72 控制字数据
sriotcfifoafull O 1 控制字 FIFO 将满标志
sriotxfifowr I 1 数据 FIFO 写使能
sriotxfifowdata I 64 数据
sriotxfifoafull O 1 数据 FIFO 将满标志
sriorxfifowr O 1 接收 FIFO 写使能
sriorxfifowdata O 64 接收数据
sriorxfifowaddr O 32 接收数据地址
srio_status O 32 状态寄存器

五、协议格式说明

5.1 控制字格式(TCFIFO)

控制字为 72 位,结构如下:

位段 含义
[71:68] 保留
[67:36] 目标地址(Dest Addr)
[35:28] 目标设备 ID(Dest ID)
[27:12] 数据长度(Length)或门铃信息(Doorbell Info)
[11:08] 流控标志
[07:00] 包类型(0xA0: Doorbell, 0x54: NWRITE, 0x55: NWRITE_R, 0x60: SWRITE)

5.2 数据格式(TXFIFO)

  • 每个数据为 64 位(8 字节)
  • 支持整包传输,长度由控制字指定
  • 支持字节使能(Byte Enable)与地址对齐

六、传输流程

6.1 发送流程(以 NWRITE 为例)

  1. 用户设置目标地址、目标 ID、数据长度
  2. 构造控制字,写入 sriotcfifowdata
  3. 拉高 sriotcfifowr,写入控制字 FIFO
  4. 写入数据到 sriotxfifowdata,拉高 sriotxfifowr
  5. CBB 模块将数据封装为 RapidIO 包,通过 SRIO IP 发出

6.2 接收流程

  1. SRIO IP 接收到数据包
  2. CBB 模块解析数据包,提取数据与地址
  3. 数据写入 sriorxfifowdata,地址写入 sriorxfifowaddr
  4. 拉高 sriorxfifowr,通知用户读取

七、使用注意事项

  1. ID 设置:必须在 linktrdy 有效前设置 sriosetid_num
  2. FIFO 空满:写入前需检查 afull 标志,避免溢出
  3. 数据对齐:数据长度必须为 8 字节对齐(64 位)
  4. 时钟域:TCFIFO/TXFIFO 使用 usersynclk,RXFIFO 使用 sriosynclk
  5. 仿真支持:提供完整仿真脚本与测试用例,支持 ModelSim、Debussy

八、仿真与验证

8.1 仿真结构

Testbench
├── ep0 (SRIO CBB Instance)
├── ep1 (SRIO CBB Instance)
├── Generator & Checker
└── Transceiver Model

8.2 仿真流程

  • 运行 collect_files.bat 收集文件
  • 执行 simulate.bat 启动仿真
  • 使用 start_debussy.bat 打开波形查看器
  • 测试用例包括:Doorbell、NWRITE、NWRITE_R、SWRITE、流模式

九、综合与实现

  • 支持 Virtex-5、Virtex-6 系列 FPGA
  • 使用 ISE 14.1 进行综合
  • 提供完整 UCF 约束文件与时钟约束(TimeSpec)
  • 支持 GTX 2.5Gbps、3.125Gbps、5.0Gbps 配置

十、总结

SRIO CBB 是一个高度封装、功能完整、接口友好的 RapidIO 通信模块,适用于 FPGA 与多处理器系统之间的高速数据交换。其模块化的设计、详尽的仿真支持、丰富的传输模式,使其成为嵌入式高速通信领域的理想选择。


附录

  • 源码路径Src/
  • 仿真路径Sim/
  • 测试用例Test/test01_001/
  • 文档路径Doc/
  • IP 核版本sriov56, FIFO Generator 8.5

如需进一步定制(如添加 DMA、AXI 接口、中断支持),可在此基础上扩展开发。欢迎技术交流。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐