Serial Rapid-IO Gen2 IP核介绍

作者:Gary Pan,AMD工程师;来源:AMD开发者社区

RapidIO 互连架构旨在与最流行的集成通信处理器、主机处理器和网络数字信号处理器兼容,是一种高性能、分组交换互连技术。它满足了高性能嵌入式行业对系统内互连的可靠性、增加的带宽和更快的总线速度的需求。

RapidIO 标准定义为三层:逻辑层、传输层和物理层。逻辑层定义总体协议和数据包格式。这是端点发起和完成事务所需的信息。传输层提供数据包从一个端点移动到另一个端点所需的路由信息。物理层描述设备级接口细节,例如数据包传输机制、流量控制、电气特性和低级错误管理。这种划分提供了向逻辑规范添加新事务类型的灵活性,而无需修改传输或物理层规范。

IO操作

SRIO协议中的指令操作,一般由一端的Requestor(Initiator)向另一端Destination(Target)发起;然后目标收到操作指令后,如果有需要,则回以Response。

下面两张图,分别是NREAD读指令,Destination收到后,会通过回复Response,将读到的数据传回Requestor;而另一张图里的NWRITE和SWRITE两个写指令,则不需要回以Response,操作写完即可。

01.JPG

Xilinx的SRIO Gen2 IP为用户逻辑提供了4个接口进行IO操作,分别是IREQ,IRESP,TREQ和TRESP,其中IREQ和TRESP负责发送,IRESP和TREQ负责接收。用户先从IREQ(Initiator Request)接口发起指令操作,数据包传到对端的SRIO IP后,用户会从TREQ(Target Request)接口收到这个指令;如果该指令需要回复,则从TRESP(Target Response)发出response,该回复包传到一开始发起指令的SRIO IP后,会从IRESP(Initiator Response)接口收到。

SRIO Gen2 IP亦提供了一种HELLO包格式,帮助用户逻辑收发包,只需将包头信息写在第一拍数据里,后续为正常数据;IP会帮助将用户侧的HELLO格式统一转换成符合SRIO物理层协议的数据包,发出去。具体格式如下图:包含了所有SRIO协议中定义的常用类型,如NREAD读,NWRITE写,SWRITE连续写,DOORBELL,Message,Response等

02.JPG

由于SRIO协议对SRIO数据包有Double Word对齐的要求,所以其读写包也有各自长度要求,如下图为读操作数据长度的部分定义。用户逻辑在发送此类包时,应当尽量满足定义中的要求,以符合协议,长度不够可以自己手动补零。

03.JPG

物理层操作

一.物理层的收发管理机制

SRIO物理层收发数据,有一套自己的握手机制。每个SRIO包都有一个ackID,当收到的包的ackID符合预期,收端会给发端回复PA(Packet Accepted),如果收到的ackID乱了,不符合预期,则回复PNA(Packet Not Accepted)。

(SRIO Gen2 IP核内部有提供信号phy_nex_fm表示下一个想要收到包的ackID,以及phy_last_ack表示刚刚收到的包的实际ackID,两者应当匹配,其有助于用户作debug)

当收到ackID不符合预期,SRIO收端物理层会回复PNA,发端物理层在收到PNA而不是PA后,就会自动发起Link Request,在收到Link Request后SRIO收端就可以回复Link Response并要求正确的ackID的包。

由于以上机制在物理层自动完成,所以不需要用户关注。但是如果发生了错误,如信号质量不佳等原因,上述机制触发,用户可能会看到input/output retry stop或者error stop,用户则可以根据上述原理,查看IP的内部信号,进行相应地debug。

二.初始化流程

SRIO的初始化主要分为单通道的应用和多通道的应用,下图为协议中的初始化状态机。

基本流程可以参考SRIO IP核里的信号,先是port_initialized拉高表示每个通道都已经各自同步完成,再是link_initialized拉高表示所有通道都已经一起对齐,SRIO成功完成初始化。

然而需要注意的是,从下图协议中的状态机,我们可以看到,每个状态并不是通过信号反馈往下走的,而是通过简单的延时往下走;而且在多通道应用中,当超时link不成功,协议还会自动降通道去改做0或2的单通道link初始化。这样就导致了,如果是单通道的应用没什么影响,但是多通道的应用,需要务必保证两边的SRIO器件尽量在差不多时间起来,一旦时间上面有先后,差异较大的话,多通道的初始化很可能会失败,早起来的一端,可能会超时自动降通道。

因此建议两端的复位可以交替进行,如先复位一端但不释放,复位另一端后,再去释放前一个复位;或者可以在实际操作中,将Xilinx的SRIO Gen2 IP核稍晚于对端释放复位。(SRIO核的文档PG007里也有一段相关复位建议操作的描述)

04.png

三.物理层数据

接下来,以实例操作演示,SRIO IP核从用户侧数据,到物理层协议标准数据的过程。

首先,用户发一个HELLO格式的包,以SWRITE包为例,用户应当在第一拍发数0060200000000777,解释如下:

05.png

然后,数据经过LOG层,BUF层,最后到PHY层,由GT发出去,以8B10B为例:

TXDATA=7c96f818_ b04600ff_00000770_00000000_00000000_34b70000_7c97fa1b

其中7C是8B10B里的控制字,在这里做SRIO传输中的数据包分隔控制符;

接着,96f818(=1001_0110_1111_1000_0001_1000)表示这个控制符是包头SOP,具体释义如下图:

06.png

后面的数据,就表示的是这个SWRITE的具体数据包了:b04600ff00000770=1011_0000_0100_0110_0000_0000_1111_1111_0000_0000_0000_0000_0000_0111_0111 0000

具体释义如下图:

(这里的包格式解析表格,可以在PG007的附录里找到)

07.png

最新文章

最新文章