FIFO形式
上图是一副常规的NoC Router结构图。FC指Flow Control流控机制,数据交换逻辑将开关分配单元仲裁结果进行链接,也就是将输入端口的FIFO与它请求的输出端口链接行程传输通道。FIFO,缓存,或者说当前的缓存主要使用的技术就是FIFO,first in first out的队列缓冲。
魂村是片上网络路由器中必不可少的单元,用于存储数据。目前的路由器中缓存与交叉开关存在3中相对位置关系:
- 缓存队列在交叉开关的前面
位于输入端口中,同时输出端口无缓存
- 缓存队列在交叉开关的后面
位于输出端口中,输入端口无缓存
- 缓存队列在交叉开关的前后两方
输入/输出端口都有缓存队列
当前的片上网络路由器多半使用的就是第一种结构,即FIFO放置在输入端口内的交换结构。到达的数据分组首先存储在输入缓存中,然后经过路由计算、调度算法决定输入缓存中的数据分组如何通过交叉开关传送到输出端口,即缓存功能在交叉开关传输之前。
这种结构对于构建大容量的交换结构十分经济,可扩展性好,但是当不同的输入端口的缓存队列都有微片要传递到同一个输出端口时,在一个时间段内,这种交换结构只允许一个被调度输出,另外的会处于阻塞状态。
第二个是缓存队列放置在输出端口的交换结构。数据到达输入端口先通过交叉开关传输到相应的输出端口的缓存队列中进行排队,即缓存功能在交叉开关传输之后。这种结构避免了由交换开关内部冲突引发的延迟,可以方便地提供吞吐量、速率以及时延等方面的服务质量保障,但是要求交叉开关具有很高的传输带宽,如果出现N个输入端口同时竞争同一个输出端口时,输出缓存需要一次性完成N次写入,交叉开关内部就需要一个加速比为N的交换结构,因此,这种结构复杂且不易扩展。
最后显示的是在交叉开关的输入和输出端口都具有缓存队列的结构。该结构是上述两种结构的一种折衷,通过适当的加速,可以避免交换开关拥塞引发的延迟,但是调度过程中需要同时考虑输入调度与输出调度,而且新加的缓存增加了路由器资源,因此该结构过于复杂。
简单的XY路由算法
路由算法确定数据分组在网络中按照何种路径从源节点传输到目的节点。通常简答的路由器采用的都是XY维序路由算法,该算法是一种确定性路由算法,只要给定源地址与目的地址,就能唯一确定条路由路径。它将网络中所有路由器都用一个2维坐标(X,Y)表示,分组中的地址信息也是用2维坐标(X,Y)表示。
设当前路由器的坐标为(cur_x,cur_y),分组中目的地址为(dst_x,dst_y)。如果cur_x<dst_x,则将数据分组向东转发;如果cur_x>dst_x,则将数据包向西转发;如果cur_x=dst_x and cur_y<dst_y,则将数据分组向北转发;如果cur_x=dst_x and cur_y>dst_y则将数据分组向南转发;如果cur_x=dst_x and cur_y=dst_y,那么说明数据分组到达了目的地。
目的路由器就通过本地端口将数据分组发往与之相连的处理单元。这样分组总是先沿X轴方向走完,才沿Y轴方向传输。