消息操作
第10类包格式是门铃事务格式。它没有数据载荷。门铃事务的请求包格式如下图所示
上图中Ftype字段固定为10,表示这是一个门铃事务,8位的Reserved字段置0,Source TID指的是请求方的事务ID,info(msb)表示的是发送信息的高8位,info(lsb)表示的是发送信息的低8位。如果信息是用数字表示的,而且长度大于8位,那么数据符合低地址存放高字节(big-endian)的格式。比特流中先到达的是高字节。门铃事务适合向处理器递送中断信息,在这种情况下,信息字段用来向接收者传递中断级别和目标信息,除此以外,还可以在处理器件间发送信号量。
一个完整的门铃操作由DOORBELL事务和RESPONSE事务(通常是DONE响应)组成。处理单元用这个操作将非常短的消息通过互连结构发送到另一个处理器部件。门铃事务包括用于保持事务信息的信息字段。该事务没有数据载荷。它的信息字段是由软件定义的,可以用于任何目的。通常,运行在处理器上的操作系统会定义门铃事务使用的信息字段的意义。收到门铃事务的处理器部件将包放进处理器部件中的门铃消息队列,该队列可以在硬件或者本地存储器中实现。一个完整的门铃操作如下图所示
第11类包为消息事务格式包。第11类包总有数据载荷,并且数据载荷长度总是双字(64-bits或8-bytes)长度的整数倍。没有规定子双字(sub-double-word)消息,如果需要的话,可以由软件管理子双字消息。一个消息请求包的格式如下图所示
图中逻辑层各个字段的含义如下表所示
字段 | 值 | 含义 | |
Ftype | 11 | Ftype=11表示这是一个MESSAGE事务 | |
Msglen | 包的个数 | 消息长度(Message Length):指的是组成该消息的包的总数。值为0时表明该包是一个单包消息,值为15(4’b1111)时,表明这是一个由16个包组成的消息。 | |
Ssize | 4’b0000~4’b1000 | 保留(Reserved) | 标准消息包数据大小(Stardard message packet data size)。 该字段告诉消息接收者一个单独消息操作除消息中最后一个包外组成消息的所有包的数据载荷大小。 这样可以防止发送者过度延长最后一个包的数据字段并允许接收者正确的将包放入本地存储器 |
4’b1001 | 8字节(byte) | ||
4’b1010 | 16字节(byte) | ||
4’b1011 | 32字节(byte) | ||
4’b1100 | 64字节(byte) | ||
4’b1101 | 128字节(byte) | ||
4’b1110 | 256字节(byte) | ||
4’b1111 | 保留(Reserved) | ||
Letter | 2bit信件。该字段用来识别信箱(MailBox)中的一个槽(SLOT)。该字段允许发送方同时发送最多4个消息到接收方的同一个信箱中 | ||
Mbox | 信箱的哪个格子 | 2bit信箱(MailBox)。该字段用来指定目标处理部件中的接收信箱 | |
Msgseg | 哪个信箱 | 4bit消息段(Message Segment)。该字段用来表明该包是组成消息的包中的第几个包。值为0表明该包是消息的第一个包。值为15(4’b1111)表明该包是消息的第16个包。 | |
Xmbox | 对于单包数据消息事务,该字段用来指明目标信箱的高四位。该字段与Msgseg占用相同的字段。 Xmbox字段和mbox字段组合使用的定义如下: xmbox || mbox : mailbox number 0000 00:mailbox0 0000 01:mailbox1 0000 10:mailbox2 0000 11:mailbox3 0001 00:mailbox4 1111 11:mailbox63 |
尽管RapidIO规范使用信箱(MailBox)、信件(Letter)和消息分段(Message Segment)之类的术语,但是这些字段在逻辑上指的是一个8位的消息标识符信息。消息标识符信息可以用来惟一的标识和管理任意两个处理部件之间最多256个不同的消息流。接收处理部件的消息传递硬件会根据该信息计算应该把事务数据存放在本地存储器的什么位置。
例如,假设接受处理部件的信箱0、信箱1、信箱2和信箱3的起始地址分别为地址0x1000、0x2000、0x3000和0x4000,处理部件接收到的消息事务带有下列字段:
A、消息长度为6个包(msglen=4’b0110)
B、消息段是第3个包(msgseg=4’b0011)
C、信箱为信箱2(mbox = 2’b10)
D、信件为1(letter = 2’b01)
E、标准大小为32字节(ssize = 4’b1011)
F、数据载荷为32字节(由于这不是最后一个事务, 所以数据载荷应该是32字节)
处理部件的消息传递硬件使用这些信息来决定将这部分数据消息所含32字节数据存放到本地存储器地址0x3040。
目标地址 = 信箱2基地址(Mailbox_2_base) + (消息分段x标准长度)
0x3040 = 0x3000+(0x0002 x 0x0020)
这个简单的寻址结构使得接收处理部件很容易计算存储消息数据的目标存储结构的地址。不仅计算起来容易,而且接收者的目标存储器结构的位置对发送者也是不可见的。这允许仅在处理器部件间提供基于消息通信的安全系统研发工作。
消息的响应事务也是由第13类包产生,与NREAD事务和NWRITE_R事务响应包不同的是,消息事务的响应包中的target_info字段占用了普通响应包中的target ID字段的位置,具体的响应包格式见下图
其中消息响应包中逻辑层Ftype字段,Ttype字段,Status字段以及Data Payload字段的含义与普通响应包中各字段的含义完全相同,Target_info字段由letter,mbox和msgseg三个字段组成,这三个字段的含义与消息请求包中这三个字段的含义完全相同,这里不再赘述。
由消息和响应(一般是DONE响应)事务组成的数据消息操作如下图所示,处理部件的支持消息传递的硬件用它向另一个处理部件发送数据消息。完成一次数据消息操作最多需要16个单独的消息事务。消息事务数据载荷的大小是双字长度(8个字节)的整数倍。最大的消息操作载荷是4096字节,该载荷由16个消息事务组成,每个事务携带256字节的数据载荷。信件( letter),信箱(mbox)和消息段(msgseg)组合在一起,惟一地标识系统中每个请求和响应部件对的消息包,与其他请求类型使用的事务 ID的作用一样。
快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~
有建议、有需求、有疑问、联系我