基于SRIO总线的高速通信

目录

 

前言

1、SRIO物理层LP-Serial串行接口

2、User Interface

2.1 I/O端口(I/O Port)

2.2 消息端口(Messaging Port)

2.3 寄存器空间(Register Space)

2.4 数据包格式

2.5 时钟

2.6 复位

3、SRIO工程创建

3.1 ISE工程创建

3.2 架构分析


前言

本文对SRIO的基础理论进行学习和整理,部分内容来自参考文献。

详细文档可以参考ISE产生的IP CORE 芯片手册《LogiCORE IP Serial RapidIO Gen2 Endpoint v1.5》,这个手册与vivado产生的手册会有一点差异。

1、SRIO物理层LP-Serial串行接口


2、User Interface

2.1 I/O端口(I/O Port)

  I/O端口能被配置为两种类型:Condensed I/O或Initiator/Target。这两种类型可以在IP核的配置中进行选择。I/O端口的数据流协议是AXI4-Stream协议,它支持两种类型的包格式,分别是HELLO格式与SRIO Stream格式。

  Condensed I/O端口类型减少了用于发送和接收I/O包的端口数目。它只用一个AXI4-Stream通道来发送所有类型的包,同样,也只用一个AXI4-Stream通道去接收所有类型的包。Condensed I/O端口示意图如下:

Initiator/Target端口类型把请求事务与响应事务分别处理,所以一共有4个AXI4-Stream通道用于I/O事务的传输。Initiator/Target端口的示意图如下图所示,其中灰色的箭头表示请求事务,黑色的箭头表示响应事务。

端口名 相对SRIO IP数据方向 作用
1、ireq 数据输入 给SRIO IP发送待转发的REQ,SRIO通过srio_txn0/srio_txp0将req请求发送给远端设备
2、iresp 数据输出 SRIO IP接收到ireq对应的响应,即远端设备返回对应的response,本地设备进行数据接收。
3、treq 数据输出 SRIO IP接收到远端设备的request请求。
4、tresp 数据输入 给SRIO IP发送待转发的response,即本地设备给远方设备发送response响应。

2.2 消息端口(Messaging Port)

  消息端口是一个可选的接口,消息事务既能在I/O端口上发送,也能在独立的消息端口上发送。独立的消息端口类型为Initiator/Target类型。下图是消息端口的示意图。

消息接口与IO接口使用方式类似。

2.3 寄存器空间(Register Space)

2.4 数据包格式

(1)SRIO包格式

请求包格式
响应包格式

(2)SRIO包类型

SRIO包的类型由Ftype和TT共同决定。最重要的三种类型为NREAD(基本读操作)、NWRITE(基本写操作)、Doorbell(门铃操作),通过这三种类型的组合就可以完成所有的存储器读写操作。

包类型 Ftype设置 TType设置
NREAD 2 0b0100
NWRITE 5 0b0100
Doorbell 10 --

(3)HELLO包格式

在下图中55位中  “ FType2 ” , 表示FType值=2。

此外,需要注意:下面ISE产生IP 手册中的hello包格式,与vivado产生的略有不同。vivado的手册中,多了一个data stream包格式。

传输的数据量小于8字节(Sub-DWORD Accesses):

       对于传输的数据量小于8字节的情况,address字段和size字段用来决定有效的字节位置(tkeep信号必须为0xff),但是仅仅能导致RapidIO包中rdsize/wrsize和wdptr为有效值的address和size值组合才是被允许的,下图是HELLO格式中address和size两个字段与有效字节位置的对应关系示意图(图中灰色部分为有效字节位置)

例如,对size=2,address=34’h1_1234_5675这两个组合来说,由于size=2,所以往address中写入的数据个数为3(size+1)个字节,而address的最低3位为5(3’b101),通过上图可知,有效字节的位置是第7、6、5三个字节。对于size和address[2:0]值的组合不在上图中的情况都是非法的,这是应该避免的,比如,size=2, address=34’h1_1234_5673这种组合就属于非法的组合。

传输的数据量大于8字节(Large Accesses):

对于传输的数据量大于8字节,并且地址的起始字节偏移不为0的情况必须把数据分成多次进行传输,其中未对齐的小于8字节的段就可以通过上图中size和address的有效组合来确定有效字节的位置。

因此,对于数据量为1个双字(8个字节)或更大的情况,address的最低3位必须为0,RapidIO手册给读写事务定义了范围从1到256个字节的可支持的数据量。请求事务的数据量如果大于一个双字(8个字节),那么数据量应该通过四舍五入到最接近的支持的值。读写事务有效的HELLO格式的数据量为:7,15,31,63,95(仅支持读事务),127,159(仅支持读事务),191(仅支持读事务),223(仅支持读事务)和255。

2.5 时钟

几种推荐的典型时钟

2.6 复位

每个时钟域都有相关联的复位信号。复位信号应该至少在各自的时钟域中保持4个时钟周期,如果RapidIO核的通道宽度减少导致phy_clk的时钟频率降低,那么复位信号仍然需要保持至少4个时钟周期。复位参考设计模块(srio_rst.v)有一个单复位输入sys_rst。这个信号同步于输入。这个模块同步复位信号到每个时钟域并对复位脉冲进行扩展以满足最小4个时钟周期的要求。

       硬件复位应该被用户设计产生,当复位RapidIO核的时候必须要注意主机和从机必须同时复位以保证ackID字段对齐,推荐主机和从机的复位信号完全重叠以减少包和控制符号的丢失率。

3、SRIO工程创建

软件工具ISE14.7

对example design工程进行分析。

3.1 ISE工程创建

在配置下图的IO端口时,选择Initiator/Target Legacy;

 在配置下图的Messaging端口时,选择separate端口,端口通道数与IO口一致。

3.2 架构分析

工程文件

SRIO Gen2 Endpoint
RTL和数据流示意图

在对SRIO进行实例化的时候,可以直接使用srio_dut.v (包含下面所有字模块),作为SRIO Gen2 Endpoint。

 相关介绍见下面手册。

文件名 功能
srio_example_top.v 例子工程的顶层模块
srio_request_gen_1 生成请求事务的模块。它用来产生I/O事务或消息(MESSAGE)事务,但仅仅SRIO核支持的事务类型能被产生,这个模块也存储了期望的响应事务并与实际接收到的响应事务进行对比用来确定整个事务交互过程的正确性。
srio_response_gen 这个模块用来产生有响应事务的响应包
srio_request_gen_2 生成请求事务的模块
srio_respose_gen 这个模块用来产生有响应事务的响应包
srio_quick_start 这个模块与IP核的维护端口相连,用来发起维护事务。这个模块用来向本地(Local)或远程(Remote)的配置寄存器空间发送一组固定的指令集,用户可以编辑maintenance_list.v来添加、修改或移除维护事务。
 
srio_dut.v This module instantiates srio_wrapper and the clocking and reset modules.
srio_clk.v 时钟域模块
srio_rst.v 复位模块
 
srio_wrapper.v HDL包装器文件,用于实例化:SRIO Gen2 Endpoint顶层包装器,GT包装器和配置结构参考设计。
cfg_fabric.v 配置结构
srio_gt_wrapper_<family>_<width>.v 收发器包装文件。其子模块含有:GT wrapper from 7 series Transceiver Wizard for 7 series FPGA configurations.
srio_ipcore  
其他  .v 文件
instruction_list.vh 这是一个Verilog头文件,里面定义了120个事务,它被包含在srio_request_gen.v模块中,srio_request_gen.v模块会把里面的所有事务依次发出去。
maintenance_list.vh 这是一个Verilog头文件,里面定义了一些维护事务,它被包含在srio_quick_start.v模块中,srio_quick_start.v模块会把里面的所有维护事务依次发出去用来配置相关寄存器。
srio_report.v 在仿真时,这个模块用来产生包接收和发送的时间戳,在硬件上运行的时候这个模块可以删除
srio_statistics.v 这个模块用来收集核的统计信息并通过寄存器接口提交一些信息,提交的信息可以通过Vivado的调试特征以及用户设计来访问。
srio_sim.v srio_sim.v是仿真顶层文件,它例化了两个核,分别是primary和mirror,并把它们连接到一起用于仿真。它也包含了上报测试是否成功的机制与超时(timeout)功能。
srio_condensed_gen.v 当IP核的端口配置为Condensed I/O模式时,这个文件才会出现在例子工程中。它用来产生Condensed I/O模式的请求事务。

3.3 仿真分析

参考文献

作者 博客
1、wbyjerry 基于Xilinx的RapidIO核配置和AXI-SRIO核设计
2、jgliu 1、RapidIO协议概述
  2、RapidIO串行物理层的包与控制符号
  3、RapidIO串行物理层的包传输过程
  4、Xilinx RapidIO核详解
  5、Xilinx RapidIO核例子工程源码分析
  6、Xilinx RapidIO核仿真与包时序分析
3、树桥上多情的kevin 最详细【SRIO】Xilinx RapidIO核详解
4、风中月隐 SRIO学习笔记之SRIO简介与Xilinx SRIO ip核例程详解
5、李锐博恩 【FPGA】SRIO IP核系统总览以及端口介绍(二)(I/O Port 含义介绍)
  【FPGA】SRIO IP核系统总览以及端口介绍(一)(User Interfaces 之 I/O Port)
  【FPGA】SRIO IP核系统总览以及端口介绍(三)(Messaging Port、User-Defined Port介绍)
   
   
发布了80 篇原创文章 · 获赞 77 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_22168673/article/details/102955594
今日推荐