Rapid IO的协议格式


这小节就来讲述这“包”里面装的是什么。也就是“事务类型和格式”。A想要从自己的帐户中转1000块钱到B的帐户里。那个从A开始转帐,到转帐结束的这一个过程,称之为一个事务。我觉得有必要再重复一下什么是rapidio,它是硬件和软件的集合,软件就是协议,就是上一节所阐述的内容,是我们通过代码来实现的,硬件就是在芯片里面会集成这样一个电路,满足我们进行rapidio协议的数据传输的需求。在一定程度上,我们可以把互连的rapoidio器件看作一个又一个的站点,那么互连的链路就是集散地和公路,在公路上我们可以开符合国家标准的车辆,这些车辆可以是卡车、轿车、救护车。同样,rapidIO的硬件链路上也支持满足其要求的不同类型的数据包,我们把不同类型的数据包称之为事务,大的事务又被分为多个小事务,林林总总一堆事务,就是rapidio各样的协议。这和卡车有大卡小卡,客车有大巴小巴一个道理。如果你研发了一款新车,只要符合国家要求,也可以上路,rapidio协议也是这样,这也就是前文所说的rapidio的灵活性。

Rapidio有多种协议方式,差不多15种。我们也可以理解为在rapidio链路上,有15种类型的车辆是允许上路的。我们在对协议进行归纳时也有多种分类方式,一般情况,我们有两种分类方式,一是按照数据格式分类,有时候称之为事务类型,准许的说是“格式类型”Ftype (Format Type),其实我们需要对它有个准确的称呼,这有助于对协议的理解。如果按照事务类型分类,常用的可以分为如下几类:大致看看就好,后续还会着重介绍的。

Ftype

Ttype

包类型

功能

2

4’b0100

NREAD

读指定的地址

4’b1100

ATOMIC increment

先往指定的地址中传递数据,在把传递的数据加1,此操作为原子操作,不可打断

4’b1101

ATOMIC decrement

先往指定的地址中传递数据,在把传递的数据减1,此操作为原子操作,不可打断

4’b1110

ATOMIC set

把指定地址中的数据每个bit全部写1

4’b1111

ATOMIC clear

把指定地址中的数据清0(每个bit全部清零)

5

4’b0100

NWRITE

往指定的地址写数据

4’b0101

NWRITE_R

往指定的地址写数据,写完成以后接收目标器件(Target)的响应

4’b1101

ATOMIC test/swap

对指定地址中的数据进行测试并交换,此操作为原子操作,不可打断

6

4’bxxxx

SWRITE

以流写方式写指定的地址,与NWRITE以及NWRITE_R相比,此方式效率最高

8

4’b0000

MAINTENANCE read request

发起读配置,控制,状态寄存器请求

4’b0001

MAINTENANCE write request

发起写配置,控制,状态寄存器请求

4’b0010

MAINTENANCE read response

产生读配置,控制,状态寄存器响应

4’b0011

MAINTENANCE write response

产生写配置,控制,状态寄存器响应

4’b0100

MAINTENANCE write resquest

端口写请求

10

4’bxxxx

DOORBELL

门铃

11

4’bxxxx

MESSAGE

消息

13

4’b0000

RESPONSE no data

不带有效数据的响应包

4’b1000

RESPONSE with data

带有效数据的响应包

除了这种分类方式,还有其他的分类方式,例如按功能特点分类,也是xilinx的IP核所用的分类方式,这种分类方式在我看来也是比较好理解的。根据功能可分为I/O操作、维护操作、消息事务这三类。I/O操作就好比运输货物的卡车,载人的客车,目的是完成内容从一端到另一端的传递,由于采用不同的车型,所以会有以下几种I/O操作。

操作

使用的事务

描述

请求类事务

NREAD、ATOMIC_inc、dec、set、clr

从目标器件中读数据

NWRITE

往目标器件中写数据

有响应写

NWRITE_R、RESPONSE

往目标器件中写数据,写完后等待目标的响应

流写

SWRITE

面向大数据量DMA传输优化写数据

Atomic

ATOMIC、RESPONSE

原子操作,读-修改-写,事务不能被打断

维护事务就可以理解为救火车、急救车等,是为了为何各个集散地的正常运行。消息事务是大喇叭,是广播,是传递些通知的内容。






快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~

有建议、有需求、有疑问、联系我

<