NoC路由器架构
Noc小记
Noc是由Router和Channel组成的网络结构。其中router主要用来控制网络中数据传输,channel是连通片上系统中各处理核之间进行点对点数据传输的通路。
NoC采用分组交换的方式进行通信,片上网络中各处理核之间通过发送请求和接收相应消息的方式通信。在网络中传输的消息由头(head)、传输数据和尾(tail)组成。投中包含接收方的地址信息,router根据这个地址建立从传输方到达接收方的传输路径。传输数据即通信中核间要传输的信息。尾用来表示一个消息传输完毕。由于一个完整的传输数据往往包含的数据量很大,这样对片上网络的通信效率不利,于是我们将传输数据分割成更小的数据段,在对数据段添加头和尾构成数据包。
一般的Router有以下单元组成:
计算单元
分配单元
交叉单元
输入单元
其中路由计算涉及路由算法,输入单元涉及流控机制与交换机制,分配单元涉及流控机制与仲裁机制 ,而交叉开关涉及路由器的整体布局。
wormhole
目前虫孔路由器(wormhole router)和虚信道路由器(virtual channel router)主要使用的都是虫孔交换机制。虫孔交换机制将数据分组划分为更小的微片,链路每次只能通过一个微片。微片的种类又分 为头微片(hed filt),体微片和尾微片(tail filt),并且允许一个分组只由一个微片组成。只有头微片包含分组的路由信息〈源节点和目的节点地址、分组长度、时间戳等)。
因此在传输分组数据时,由头微片根据路由信息为整个分组建立一条路由器内部的数据路径,体微片和尾微片沿着头微片建立的数据路径传输,其他分组的微片不能使用该路径,尾微片传输完毕后,路由器释放头微片建立的数据路径供其它分组传输使用。通过头微片这样逐跳的在路由器中建立的链路,整个分组最 终传输到目的地址。当头微片发生阻塞时,分组中的其它所有微片也都将停止前进,其中头微片缓存在当前路由器,其它微片就地缓存在它们自己所位于的若干个中间路由器中 。
flow control
上网络路由器与Internet路由器最大的区别在于它不支持重传,这意味着片上网络路由器不允许丢失数据分组,因此片上网络路由器需要精确的流量控制机制防止当下行路由器缓存空间满的时候,上行路由器还在持续发送数据而产生丢失数据分组现象。片上网络路由器常用的流控机制有3种,分别是基于credit的流控机制、基于握手的流控机制和on/off 流控机制 。
credit
基于 credit 的流控机制在每个路由器的输出端口处设置一个计数器,计数器中的值表示下行路由器输入端口中可用缓存的数目。上行路由器每发送一个微片它自己的计数器值就减1,当计数器的值减到0时就表示下行路由器输入端口中缓存队列己满,不能再继续发送,数据将在上行路由器中等待。当下行路由器中有 数据发送出去,意味着缓存被释放,就向上行路由器传回一个credit,上行路由器接收到credit后,计数器的值加1。基于credit的流控机制通过计数器的值是否为0能清楚的知道下行路由器是否满.不仅能防止丢失数据分组,同时能充分利用缓存资源,是当前主要的流控机制。
on-off
由于基于credit的流控机制需要计数器,开销较大。一种改进的流控机制是on/off 流控机制,它在路由器中设置两个门限值 on 和 off ,当下行路由器中空闲缓存数目大于 off 时,发送1位比特信息通知上行路由器处于 “关” 状态,停止发送数据,当下行路由器的空闲缓存数目大于 on 时,发送l位比特信息通知上行路由器处于 “开” 状态,继续发送数据 。on/off 流控机制仅用l位比特信息来通知上行 路由器是否可以继续发送,而且回传信号次数也较基于 credit 流控机制少,但是它的缺点是由于 on/off 值的设定,不能充分利用缓存资源 。
handshake
另一种改进的流控机制是基于握手的流控机制,它的工作原理是当上行路由器有数据发送时,先往下行路由器发送一个 req 信号,下行路由器收到 req 请求信号后,判断自己的缓存是否满,并返回一个 ack 应答信号,上行路由器接收的 ack 信号后,根据 ack 的值判断是否要发送数据。该机制虽然简单,但是一个明显的不足之处在于,该流控机制需要2个时钟周期来完成操作,比基于credit 的流控机制多了 1个时钟周期,增加了数据在网络中的传输时延。
仲裁机制
片上网络能支持数据的并行传输,这必然会引起不同信息之间的竞争冲突,具体到路由器就是多个输入端口的数据请求同一个输出端口离开时,产生的端口竞争,而在虚信道路由器中除了上述竞争外,还存在多个输入虚信道请求同一个输出虚信道的虚信道分配竞争 。目前路由器常用的仲裁机制有固定优先级、动态优先级和轮询仲裁机制。
固定优先级
固定优先级的仲裁机制就是给每条线路分配固定的优先级,如果某条优先级高的线路一直有请求,那么其他优先级低的线路的请求将一直不会有响应。如图所示,端口A中一直有请求,并且他的优先级为3最高,因此他一直被相应,知道在时钟周期3他的请求变为0,才接着响应有请求切优先级最高的B端口,到了时钟周期7端口A又有请求,这时候A又被响应。可以看到尽管C端口一直有请求,但是由于他的优先级比较低,所以一直得不到相应。
动态优先级
动态优先级的仲裁机制与固定优先级的仲裁机制的原理基本相同,不同之处在于每条线路的优先级是动态变化的。每次也是相应优先级最高的请求。
轮询仲裁机制基本思想是当前仲裁成功的请求在下一时钟周期仲裁中的优先级最低,最高优先级赋予相邻的下一个仲裁请求,这样一次轮询。如图,开始初始化一个仲裁顺序为A-B-C,那么首先选定A端口开始轮询仲裁,由于A端口没有请求,因此直接跳到B,接着到C,接着轮询A,发现A端口有请求,响应A端口。