SRIO学习(三)——SRIO包

来源:互联网 发布:知返景行全文阅读19楼 编辑:程序博客网 时间:2024/05/17 02:20

SRIO Functional Description

SRIO包

在讲SRIO包之前,有必要再强调一下SRIO的构造层次。
SRIO分为三个层次,分别是逻辑层,传输层和物理层。

逻辑层 确定终端处理传输的协议,包括包的格式。

传输层 定义了在系统中正确路由信息包的寻址方案。

物理层 包含设备级的接口信息,如电气特性、错误管理数据和基本的流量控制数据。

传输层与逻辑层和物理层是上下兼容的。

RapidIO数据流由与数据字段有关的逻辑层、传输层和物理层组成。

逻辑层包含header(定义访问类型)和payload(如果有的话)。

传输层一定程度上取决于系统中物理层的拓扑结构,传输层包含有发送/接受消息(message)所需的来源设备ID(source ID)和目标设备ID(destination ID)。

物理层取决于物理接口(例如并口和串口),物理层包含优先级acknowledgement(什么是acknowledgement?),和错误检测域

操作队列

SRIO的transaction是基于请求包(request packet)和响应包(response packet)的,包是终端设备之间最基本的通信元素,master(主核)或initator(初始化器)产生一个请求包并传输到目标去,目标产生一个响应包回到master或者initiator完成整个transaction。

以下是笔者自己画的一个transaction的示意图:
transaction

SRIO终端之间通常并不直接连接,而是通过中间fabric(结构)装置连接。控制符号是用来管理SRIO物理互联块之间的transaction流的,也提供数据包的确认,流量控制信息和维护功能。

Figure2-2 显示了包在系统中的流向。
操作队列
首先在initiator中,由master进行操作并产生request packet,再由initiator将request packet 发出到中间fabric层中,fabric的控制符号确认数据包后,向initiator发回一个确认接受信号。fabric层接收到request packet之后继续将其送至target,target的控制符号确认数据包后,向fabric返回一个接收信号。接着target对request packet进行相关操作,操作完成之后向fabric发出一个response packet,待fabric中的控制符号确认response packet之后,返回一个确认接收信号。fabric继续将response packet发送回initiator,待initiator中的控制符号确认包之后,向fabric发送一个接收信号,之后意味着此次整体操作的完成。

图中用红圈标记的就是带有返回信号的控制符号的确认操作。只有这部分带有双向交流,其余部分都是单向交流。

SRIO包的长度必须是一个32位的偶数,如果物理层、逻辑层和传输层长度加起来是一个16位的整数,那么在packet的最后一部分CRC之后会加上一个16位的后缀,一般是0000h。packet的位域(bits filed)里被定为保留(reserved)的部分,如果在该包被产生时,或者在被接收时忽略,那么位域就会被全部置0。包有不同的格式,我会在后续的文章里细讲。

如果系统中定义的设备ID是8位的,那么可能的ID位置有256个,如果定义的设备ID是16位的,那可能指向的位置就有64K个。

packet还包含一个CRC部分,该部分旨在确认数据在传输时的正确性,即在数据传输时数据内容没有发生变化。CRC部分保护除了ackID(ackID是什么?)和1bit的PHY(物理层)区域。外设会以硬件方式自动查看CRC部分,如果CRC是正确的,一个packet-accepted control symbol(包接收控制符)就会被接收包的设备所发送。如果CRC是错误的,接收包的设备就会发送一个未接收包控制符,该控制符会引起发送方重试这一次的包发送。

PS:CRC是循环冗余纠错码

控制符

control symbol(控制符)是物理层的消息单元,用来管理链接维护包界定(包的分割)包确认错误报告和错误恢复,所有经过传输的数据包都通过start-of-packet和end-of-packet分割符进行分割。SRIO的控制符24bit长,并被控制符自己的CRC所保护。Figure2-4显示的是控制符的格式。

这里写图片描述

控制符提供了两个功能:stype0类型的控制符显示传递符号的port的状态;stype1类型的控制符是向传输分隔符接收port发出的请求。

“传递符号的port”大家可以理解为figure2-2中的箭头,那些就是传递符号的port。同样“接收port”也是类似定义。

Ti在控制符的开始位,提供特殊的符号对控制符进行分割。如果控制符包含一个分割符,那么就使用特殊符号PD(K28.3)(K28.3是特殊符号的名称,在这里就是将PD定义为K28.3,即PD = K28.3,后文的K28.0也是类似的定义)如果控制符不包含分隔符,就使用特殊符号SC(K28.0)。这种控制符会为控制符的内容提供了一个预警告,CRC并不保护这些特殊符号,但是如果出现一个非法的或错误的特殊符号,CRC就会将其理解为packet-not-accpted信号。因为控制符的长度是一定的,所以它已经在头部分割之后,就不需在尾部继续分割。

接收到的包的类型决定该包的去向,未定义的包类型在被逻辑层功能区域处理之前就会被摧毁,这防止系统为逻辑层功能区域分配错误的存储空间,不支持的包类型会以error response packet的形式返回。

包类型

SRIO包的类型决定于包的FtypeTtype两个域的组合情况, Table2-2列出了所有Ftype和Ttype的组合和相应的解读。

table2-2
table2-2

参考文献

http://www.ti.com/cn/litv/pdf/sprugw1b

PS:欢迎大家与我讨论文章中的问题,包括反对我的观点。

0 0