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 | 原子操作,读-修改-写,事务不能被打断 |
维护事务就可以理解为救火车、急救车等,是为了为何各个集散地的正常运行。消息事务是大喇叭,是广播,是传递些通知的内容。
快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~
有建议、有需求、有疑问、联系我