缓冲区的流控机制


注:本节内容为《PG007》P110的翻译。

串行RapidIO缓冲区设计(BUF)设计提供了可配置的缓冲区解决方案以处理时钟域交叉,重传,流控制和响应优先级。TX和RX缓冲区大小可分别配置为容纳8、16或32个数据包。串行RapidIO是一种无损协议。BUF使用重传来保证数据包的传递。当数据包从BUF传输到PHY时,它们会用确认标识符(ackID)进行标记。PHY在传输之前将ackID附加到数据包上,以供链接伙伴进行跟踪。如果链接伙伴有足够的空间容纳接收到的数据包,并且发现它没有错误,那么它将发出一个数据包接受(PA)控制符号。否则,链接伙伴会指示该数据包应重试或错误。

PHY向BUF提供phy_next_fm,指示哪个ackID应该与发送数据包相关联。当PHY接收到PA控制符号时,phy_last_ack总线会更新,指示已成功发送数据包,并且可以从发送缓冲区中删除该数据包。在链路伙伴出于某种原因不接受数据包的情况下,PHY会中断当前传输并倒回数据包计数器。为了向BUF发出倒带事件信号,PHY在更新phy_next_fm和phy_last_ack指针时会断言phy_rewind。无论是否正在传输帧,都会发生phy_rewind断言。但是,当在数据包中时,phy_rewind信号保持有效,直到BUF在接口上完成该数据包为止。不在数据包中时,phy_rewind可以保持断言至少两个周期在释放phy_rewind之后,更新phy_last_ack值将用于确定可以从缓冲区中删除哪些数据包,然后开始传输/重新传输数据包。

当发生倒带事件时,不能保证BUF以与倒带事件之前相同的顺序发出数据包。当数据包在BUF设计中累积时,它将根据优先级和事务类型对数据包进行仲裁,如下所示:

 image.png

正常操作条件下,SRIO Gen2端点以与接收数据包相同的速率传输数据包,因此缓冲区中的数据包之间的仲裁不会发挥作用。但是,当发生错误或缓冲区开始填充并且流控制开始起作用时,BUF开始备份,必须仲裁多个数据包。

重要说明:在考虑系统设计问题(例如如何确定数据包的优先级)时,必须考虑仲裁机制及其对使用模型的影响。

如果系统使用SRIO Gen2端点作为启动器来生成稳定的流量,则建议对所有请求流量使用相同的优先级,以使没有一个流量饿死。但是,如果系统使用1或2个高优先级流中的数据突发,则分层优先级方法可能会有所帮助,因为较低优先级的流具有不活动状态,可以在其中完成。串行RapidIO规范[Ref 13]支持两种不同形式的流控制,即发送器(TX)和接收器(RX)。BUF支持两种形式。此外,您可以选择生成仅RX控制的缓冲区,以节省资源,这可能会占用带宽。

使用接收器控制的流量控制时,BUF依赖PHY重试协议来限制链路流量。串行RapidIO规范要求接收缓冲区为每个优先级跳转保留一个空间,为响应保留1个空间。随着接收缓冲区填满这些点,它应该开始重试表3-10中所示的较低优先级的数据包。

 image.png

当优先级太低的数据包被重试时,BUF通过重新排队所有内容进行仲裁来倒回它发送的数据包。如果重试的数据包是响应数据包,则重新发出相同的数据包;否则,将重新发出该数据包。但是,数据包优先级增加了1。RapidIO协议允许端点使用此功能,以防止出现死锁情况,在死锁情况下,响应事务将备份并最终阻塞接收者队列。其余的数据包将被仲裁,如表3-10所示。

图3-22至3-26显示了重传如何影响数据包排队的示例。

图3-22显示了基本的优先级凹凸

 image.png

发送Buffer负责把将要发出去的事务放到队列中,并对发往物理层(PHY)的包流进行管理。接收Buffer和发送Buffer的大小可以在IP核中配置为8、16或32个包的深度。发送Buffer是一个存储和转发缓冲区,它是用来降低包到包的延迟以最大化流吞吐量。发送Buffer必须保存每个包直到包被接收方成功接收,当接收方成功接收包以后,发送Buffer才会释放包来给其他包腾出空间。当流控(Flow Control)发生时,通常会有多个未发送的包滞留在发送Buffer中,发送Buffer会根据包的类型与优先级进行重新排序,然后按照响应包先发送,请求包后发送的顺序把发送Buffer中的包依次发出去。Buffer的另一个作用是处理跨时钟域的问题,当生成IP核的时候可以根据需求添加或者移除跨时钟域逻辑。对于多通道的RapidIO来说,由于物理层的时钟在start-up场景和traindown场景是动态的,所以推荐把跨时钟域逻辑加上,这样可以保证用户逻辑工作在已知的速率上。

接收Buffer类似于一个FIFO,它用来存储和转发接收通路上发送给逻辑层的数据。接收Buffer也包含跨时钟域逻辑,这可以保证逻辑层和物理层工作在不同的速率上,和发送Buffer一样,对于多通道RapidIO,推荐加上跨时钟域逻辑。





快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~

有建议、有需求、有疑问、联系我

<