RapidIO规范定义了几种事务类型。 每种事务类型执行不同的功能。 IP核的事务支持是通过Vivado®集成设计环境(IDE)设置的。

表3-1列出了已定义的事务类型,并指示事务所属的LOG端口。 如果事务不是表3-1中定义的事务,或者在Vivado IDE中未启用对事务的支持,则认为该事务不受支持。 如果不支持接收的事务,则它将显示在用户定义的端口上。 如果用户定义的端口不存在,则在IP核内丢弃事务并且使能port_decode_error信号。

下标列出了IP核支持的全部事务类型:

【FPGA】SRIO IP核系统介绍之事务类型(Transaction)_初始化

【FPGA】SRIO IP核系统介绍之事务类型(Transaction)_数据_02

【FPGA】SRIO IP核系统介绍之事务类型(Transaction)_数据_03

【FPGA】SRIO IP核系统介绍之事务类型(Transaction)_ide_04

下面节选一段话来说明事务类型是如何确定的:(基于SRIO协议设计和实现了DSP与FPGA之间的高速数据通信)

SRIO初始化完成后,通过DSP对SRIO端口的读写操作实现和FPGA之间的数据传输。DSP读写支持的操作通过数据包格式中的Ftype和Ttype两个字段描述,I/O逻辑操作是简单实用的传输方式,使用该模式的前提是主设备要知道被访问端的存储器映射,可以直接读写从设备的存储器。I/O逻辑操作在被访问端的功能往往完全由硬件实现,所以被访问的器件不会有任何软件负担。下表所列为I/O操作的几种事务类型。本文使用的读操作事务是NREAD。在3种写操作事务中:NWRITE_R是带响应的写操作,效率较低;SWRITE要求数据载荷长度在8~256字节之间,且为8字节的整数倍。因此本文采用NWRITE写操作,配置简单且易于实现。

【FPGA】SRIO IP核系统介绍之事务类型(Transaction)_数据_05

从这段话可以知道,DSP读写支持的事务类型由数据包格式中的Ftype和Ttype两个字段决定,当然对于FPGA也是一样。

到此,我们节选几个比较重要的事务类型来解释下:

NREAD

Basic read request transaction. Request does not have a data payload. Results in a response with data.

这是一个基本的读请求事务,请求当然不必携带数据(只读而已),但响应结果应该带有数据。

这里的payload为数据包中的数据所在之处。

为了更清楚地认识数据包的格式,给出示意图:

【FPGA】SRIO IP核系统介绍之事务类型(Transaction)_初始化_06

 

NWRITE

Basic write operation. Request has a data payload. Does not result in a response.

基本写操作。 请求具有数据有效负载。 不会导致回复(无需响应)。

NWRITE_R 

Basic write operation. Request has a data payload. Results in a response with no data.

基本写操作。 请求具有数据有效负载。 响应中无数据负载。

SWRITE 

Streaming write operation (uses less header fields than NWRITE). Request has a data payload. Does not result in a response.

流写入操作(使用比NWRITE少的头字段)。 请求具有数据有效负载。 不会导致回复。

DOORBELL

Very short message between processing elements. Request has no data payload. Results in a response with no data.

处理元素之间很短的消息,请求没有数据有效负载,响应也没有数据有效负载。

MESSAGE

Messaging operation – typically used by processors in distributed memory system machines. Message packets always have a data payload.

消息传递操作 - 通常由分布式存储器系统机器中的处理器使用。 消息包始终具有数据有效负载。

ATOMIC with no payload

Read-modify-write operation. Request does not have a data payload. Results in a response with data.

读 - 修改 - 写操作。 请求没有数据有效负载。 响应带有有效数据负载。

下面就不一一赘述了。