RapidIO操作协议
逻辑层协议定义了 10操作协议和相应的数据包格式、门铃的格式、流量控制。
I/O操作协议在互连结构中利用请求/响应事务来完成。请求和相应对穿越RapidIO交换结构运行,但当事务穿越交换结构时RapidIO交换结构并不跟踪该事务。
在RapidIO体系结构中定义了6种基本的I/O操作,以及相应的事务。
操作 | 所使用的事务 | 可能的系统用途
| 传输格式 |
读Read | NREAD, RESPONSE | 读操作 | Type 2 |
写Write | NWRITE | 写操作 | Type 5 |
Write-with-response (带响应的输入) | NWRITE_R, RESPONSE | 写操作 | Type 5 |
Streaming-write (流写入) | SWRITE | 写操作 | Type 6 |
Atomic (read-modify-write) 自动读-修改-写 | ATOMIC, RESPONSE | 读-修改-写操作 | Type 2 Type 5 |
Maintenance 维护 | MAINTENANCE | 系统查找,初始化和维护操作 | Type 8 |
读操作
读操作由NREAD和事务RESPONSE(通常是响应)组成,下图用处理单元通过指定的地址读取数据,读取指定对应大小的数据,如果读操作是存储器,那么数据就从存储器中返回,而不管指定的高速缓存行或行的任何系统范围的缓存一致性机制的状态。
图 读操作
写操作和流写操作
写操作(NWRITE)和流写操作(SWRITE),如下图所示,用处理单元通过指定的地址读取数据,NWRITE事务允许多个双字、字、半字和字节以有效载荷的合理补充对齐方式(以字节为边界)进行写入。SWRITE事务是仅能写入双字形式的NWRITE版本,它有较少的头部开销。系统不支持非连续写操作和非对齐写操作。如果数据块没有对齐,请求端将负责将写操作的分解为多个事务。
事务不接收响应,所以当事务在目的地完成时,发送端将没有任何提示。
图 写操作和流写操作
带响应的写操作
图 带响应的写操作
原子(读改写)操作
读改写操作包括原子和响应事务。允许的指定数据大小是一个单词(4字节)、一个半字(2字节)或一个字节,其大小与指定的事务相同。对于一个NWRITE方式。双字(字节)和3, 5, 6字节和7字节的原子事务不可以指定。图 读改写操作
维护(maintenance)操作
维护操作是对SRIO本身寄存器的访问请求,如图所示,需要读或者写到特定的CARs,CSRs、本地定义的寄存器或者数据指令,如果一个响应命令,维护请求接收到一个比而不是普通读写操作的响应。支持访问32位并且可以选择双字和多个双字数量,对多为64字节。
图 维护操作
包格式描述
RapidIO逻辑层定义了请求、响应、编译器确认、保留。
表 请求包的通用定义
Field | Definition |
ftype | 格式类型, 4bit; 逻辑报文的前四个bit |
wdptr | 字针, 与数据大小 (rdsize and wrsize) 字段共同使用 |
rdsize | 读事务数据大小字段 |
wrsize | 子双字事务中写数据的大小,与字指针(wdptr)比特协同使用。当写入大于一个双字的数据时,数据大小应该设为接收端的最大有效载荷 |
rsrv | Reserved保留 |
srcTID | The packet’s transaction ID数据包的事务ID |
transaction | 格式类中指定给接收端的事务;也被称为type或者ttype |
Extended address | 可选字段。指定50位地址中的高16位或者66位地址中的高32位 |
xamsbs | 扩展地址中高位比特。将address或extended address字段中的地址进一步扩充两位。这个字段可以提供数据包指定的34位,50位和66位地址的高位比特 |
address | 字节地址[0-28]或者双字物理地址[0-31] |
Addressing and Alignment(寻址和对齐)
Type 0 Packet Format(Implementation-Defined)
type 0类型0包格式是为实现定义的函数保留的,例如流控制。
Type 1 Packet Format (Reserved)
Type1报文形式保留。
Type 2 Packet Format (Request Class)
图 TYPE2 (请求类)的包格式
表 transaction的字段类型
Encoding | Transaction Field |
0b0000–0011 | Reserved |
0b0100 | NREAD transaction |
0b0101–1011 | Reserved |
0b1100 | ATOMIC inc: post-increment the data |
0b1101 | ATOMIC dec: post-decrement the data |
0b1110 | ATOMIC set: set the data (write 0b11111...’) |
0b1111 | ATOMIC clr: clear the data (write 0b00000...’) |
Type 5 Packet Format (WriteClass)
类型5数据包格式通常都包含数据的有效负荷。
由单个双字或以下组成的数据有效载荷具有表中定义。wrsize字段指定多个双字事务的数据有效载荷的大小。 数据有效载荷不超过该大小,但如果需要,可能会更小。 ATOMIC,NWRITE和NWRITE_R事务使用表4-6中定义的5类格式。 NWRITE请求数据包不需要响应。因此,NWRITE请求的事务ID(srcTID)字段未定义,并且可以具有任意值
请求数据包不需要响应。因此,请求的事务字段未定义,可以是任意值,而—请求的事务必须定义。数据包格式写入类数据包)格式如图所示,图中方框内为请求数据包格式的字段,图下的数字是各字段的长度。
ATOMIC测试和交换事务限于一个双字(8字节)的数据有效负载。 为写事务定义的寻址方案还控制存储器中原子操作的大小,因此字节应是连续的,并且应该是大小字节,半字(2字节)或字(4字节),并且对齐到该边界和字节通道与常规写入事务一样。 不允许双字(8字节)和3,5,6和7字节的ATOMIC测试和交换事务。
表Write Size (wrsize) Definitions (Continued)
wdptr | wrsize | Number of Bytes | Byte Lanes |
0b0 | 0b1001 | 6 | 0b11111100 |
0b1 | 0b1001 | 6 | 0b00111111 |
0b0 | 0b1010 | 7 | 0b11111110 |
0b1 | 0b1010 | 7 | 0b01111111 |
0b0 | 0b1011 | 8 | 0b11111111 |
0b1 | 0b1011 | 16 maximum |
|
0b0 | 0b1100 | 32 maximum |
|
0b1 | 0b1100 | 64 maximum |
|
00b | 0b1101 | reserved |
|
0b1 | 0b1101 | 128 maximum |
|
0b0 | 0b1110 | reserved |
|
0b1 | 0b1110 | reserved |
|
0b0 | 0b1111 | reserved |
|
0b1 | 0b1111 | 256 maximum |
|
表Transaction Fields and Encodings for Type 5 Packets
Encoding | Transaction Field |
0b0000–0011 | Reserved |
0b0100 | NREAD transaction |
0b0101 | NWRITE_R transaction |
0b0110–1011 | Reserved |
0b1100 | ATOMIC swap: read and return the data, unconditionally write with supplied data. |
0b1101 | ATOMIC compare-and-swap: read and return the data, if the read data is equal to the first 8 bytes of data payload, write the second 8 bytes of data to the memory location. |
0b1110 | ATOMIC test-and-swap: read and return the data, compare to 0, write with supplied data if compare is true |
0b1111 | Reserved |
图 数据包格式(写入类)包格式
Type 6 Packet Format(Streaming-Write Class)流写入类
Type 6是一种特殊目的数据包类型,它总是包含有数据。数据有效载荷最小为一个完整的双字。因为事务是唯一使用数据格式类型的事务,所以数据包中不需要事务字段。同样,数据包中也不包含大小和事务字段。数据包格式流写入类数据包)格式如图所示,图中方框内为请求数据包格式的字段,图下的数字是各字段的长度。
图数据包格式流写入类)包格式
Type 7 Packet Format (Reserved)
Type 8 Packet Format (Maintenance Class)
格式维护类数据包格式,被用来访问能力寄存器(CAR)和状态寄存器(CSR)。与其他请求格式不同,类型8数据包格式既用于维护操作的请求和响应格式。 类型8数据包不包含地址,只包含写入请求和读取响应的数据有效载荷。 所有配置寄存器读取访问都以字(4字节)和可选的双字(8字节)或可指定的多个双字数(最多64字节)执行。 所有寄存器写入访问也以字(4字节)和可选的双字(8字节)或多个双字数量执行,最多为64字节。
wrise字段规定了多双字事务数据荷载的最大长度。数据荷载的长度不能超过这个最大长度,但如果需要,可以比这个最大长度小。维护读和维护写请求产生正确的维护响应。
维护端口写操作是一种写入操作,它不具有保证传递,并且没有相关的响应。此维护操作对于从不包含终点的设备(如交换机)发送消息(如错误指示器或状态信息)很有用。数据有效载荷通常放置在目标终点中的队列中,并且通常会向本地处理器生成中断。 可能会丢弃对服务其他请求的全或忙的队列的端口写入请求。
表Type8数据包特定字段的定义和编码
Type 8 Fields | 编码 | 描述 |
transaction | 0b0000 | 指定维护读取请求 |
0b0001 | 指定维护写请求 | |
0b0010 | 指定维护读响应 | |
0b0011 | 指定维护写响应 | |
0b0100 | 指定维护端口写请求 | |
0b0101–1111 | 保留 | |
config_offset | — | 双字偏移到CAR / CSR寄存器块中用于读取和写入 |
srcTID | — | Type8 请求数据包的事务ID(为端口写请求保留) |
targetTID | — |
|
status | 0b0000 | Done 请求处理完成 |
0b0001–0110 | 保留 | |
0b0111 | 错误 检测不可恢复错误 | |
0b1000–1011 | 保留 | |
0b1100–1111 | 实现定义 - 可以用于其他信息,如错误代码 |
图 数据包Type8格式(维护请求类)包格式
图 数据包Type8格式(维护响应类)包格式
Type 9–11 Packet Formats(Reserved)
Response Packet Formats(响应包格式)
当处理元件完成远程处理元件对它的请求时,响应事务由处理元件发出。响应数据包总是被引导,并以与请求数据包相同的方式发送。 目前存在两种数据包格式类型,如表所示
表 响应数据包类型到事务类型交叉引用
响应包格式 | 处理格式 | 定义 |
Type 12 | — | 保留 |
Type 13 | RESPONSE | 处理单元在完成远程单元请求时发出 |
Type 14 | — | 保留 |
Type 15 | Implementation-defined | 由设备实现定义 |
Type 12 Packet Format(Reserved)
Type 13 Packet Format (ResponseClass)
Type13数据包格式返回状态,数据(如果需要)和请求者的事务ID。 具有“ERROR”状态的RESPONSE数据包或预期不具有数据有效载荷的响应从不具有数据有效载荷。 Type13格式用于除了维护和无响应写入之外的所有请求数据包的响应数据包。
图 Type13数据包比特流形式
Type 14 Packet Format(Reserved)
Type 15 Packet Format(Implementation-Defined)
Type15包格式被保留用于实现定义的功能,例如流量控制。