关于RapidIO协议的对齐等问题

关于RapidIO协议的对齐等问题

  1. 字节序和对齐的概念

RapidIO的数据负荷是双字(8字节)对齐的big-endian模式,这意味这RapdIO与little-endian的设备接口时需要执行适当的endian转换。

小于8个字节的操作应该使字节对齐到big-endian双字里的适当位置,如下图:

关于RapidIO协议的对齐等问题_第1张图片

关于RapidIO协议的对齐等问题_第2张图片

关于RapidIO协议的对齐等问题_第3张图片

所谓,对齐不仅仅个数能8的倍数,而且其首地址也是8字节对齐。

对于写操作,PE应该适当将数据对齐到一个双字边界。如果数据没有天然对齐的话,传输对齐的要求可能会导致需要将一个不对齐的数据流拆分成多次交易,协议定义了一些数据负荷长度和双字对齐的方法,以最小化对齐要求的负担,图2-9显示一个48字节数据流:一个PE期望通过互联架构将其写入到另外一个PE中,因为流的开始和结束并不对齐到一个双字边界,发送的PE将这个流拆分成3次交易如图所示,第一次交易送出头三个字节(在字节lane5、6、7),第二次交易送出所有余下的数据,但不包含最后的子双字(sub-double-word,我理解就是不够8个字,但地址是8字节对齐的),第三次交易送出最后5个字节在字节lanes0、1、2、3、4。

 

 

 

关于RapidIO协议的对齐等问题_第4张图片

2. Rdsize、wrsize、wdptr

Rapidio的地址低三位总是假设为0,所以在请求包里的rapidIO地址低三位是不传输的(不包含的),总是假设为0。那么如何实现不对齐数据的传输呢?

wdptr:字指针,同rdsize和wrsize一起使用。

rdsize:读交易的数据尺寸,同wdptr一起使用。

wrsize:sub-double-word的写数据尺寸,硬wdptr一起使用,对于一个大于1个双字的写,这个size是期望在接收端能够接收的最大负荷。

关于RapidIO协议的对齐等问题_第5张图片关于RapidIO协议的对齐等问题_第6张图片

关于RapidIO协议的对齐等问题_第7张图片

关于RapidIO协议的对齐等问题_第8张图片关于RapidIO协议的对齐等问题_第9张图片

关于RapidIO协议的对齐等问题_第10张图片

rdsize、wrsize、wdptr并不像它们字面上的意义那么简单。如rdsize没有直接表明所读内容的长度,rdsize是数据块长度的编码结果。当数据少于8字节是,rdsize是数据对齐的编码结果,大于8字节的数据块的长度被视为8字节的整数倍并对齐到8字节的边界。某些事务使用wdptr指针与参加数据长度的编码,大致可用来辨别在对齐的双字数据字段中的哪个字位置。

最简单的产生rdsize和wdptr的办法是通过查表。将事务请求的数据长度和最低3根地址线作为查找表的输入。

关于RapidIO协议的对齐等问题_第11张图片

目标收到事务后,就会执行指定的操作,这时目标会从内存映射寄存器的0xffff004地址处读出4个字节,这4个字节会被放进一个8字节的数据载荷里(正确对齐)。目标会产生一个响应将数据发回给请求者。

wrsize与rdsize类似。

你可能感兴趣的:(RapidIO)