东北大学本科毕业设计(论文) 第三章 路由器IP Core的设计与实现
始时间都发生在时钟的上升沿,这有利于比较器的比较结果准确有效。而异步清零可使计时器立刻停止计时,相比于同步清零来讲,减少了一个周期的延迟。比较器的设计完全是采用异步,这样做的目的也是为了减少路由仲裁模块的延迟时间。
East Input Port West Input Port South Input Port North Input Port Buffer Local Input Port Buffer Timer Timer Timer Router Timer comparator Timer Buffer Buffer Buffer East Output Port West Output Port South Output Port North Output Port Local Output Port
图3.4 路由器IP核的延时可变模块框图
3.2.2.1 输入缓冲区模块
req ack 存储RAM datain[32] dataout[32] oreq oack
图3.5 缓冲区模块示意图
如图3.5所示,存储RAM其实就是用户可自定义缓存深度的一维数组。这个缓存深度用户可以在VHDL程序中通过常量进行设定,数组中每个元素的大小为32位。在进行这个模块的设计时,采用VHDL语言中最为熟悉的元件例化,方便此模块在各个方向上输入缓冲区模块的重复利用。其中,req是上一级路由节点或处理器节点发送当前路由节点的请求信号,ack则是当前路由节点反馈给上一级的应答信号。datain[32]是来自总线命令转换模块或者用户自定义逻辑用于缓存的数据包。oreq是本模块向下一个模块-路由仲裁模块发送的处理请求,oack是路由仲裁模块的反馈信号。dataout[32]是从缓冲区中读出的数据包。
19
东北大学本科毕业设计(论文) 第三章 路由器IP Core的设计与实现
本文设计的IP Core采用存储转发的方式。为了减少缓存的资源开销和提高路由器的转发速度,此路由单元仅在输入端口进行数据缓存。输入缓冲区模块主要用于对发送到当前路由单元的数据包的缓存。具体的程序设计采用状态机实现。如图3.6所示,在接到请求信号时,如果缓冲区空闲,则发出应答信号至上一级路由节点,表示同意接受数据包。若缓冲区数据已满,则等待直至缓冲区空闲时才发出应答信号。数据包存入缓冲区后向路由仲裁模块发出请求信号,在获得应答后,才将数据包发送到交换阵列模块。
空闲状态时钟上升沿req = ‘1’时钟上升沿RAM数据送至输出端口输入数据送至存储RAMoack = ‘1’oreq = ‘1’等待路由仲裁模块响应
图3.6 输入缓冲区状态转换图
3.2.2.2 路由仲裁模块
表3.1 路由仲裁模块端口设置
端口名 req[0 to 4] head[0 to 4] ack[0 to 4] o_req[0 to 4] o_ack[0 to 4] output[0 to 4] 类型 输入 输入 输出 输出 输入 输出 说明 输入请求信号 路由信息 对输入的应答信号 输出请求信号 对输出的应答信号 送至交换阵列 路由仲裁模块是延时可变路由模块的核心。该模块的作用是通过路由算法控制交换阵列实现对数据包的转发,同时根据输入端口的计时器进行优先级的仲裁以保证等待时间长的数据包优先发送。表3.1为路由仲裁模块的端口示意图,其中,req[0 to 4]和ack[0 to 4]分别是来自五个方向上输入缓冲区模块的请求和对其的应答,head[0 to 4]是五个输
20
东北大学本科毕业设计(论文) 第三章 路由器IP Core的设计与实现
入方向上的数据包中的路由信息,而o_req[0 to 4]和o_ack[0 to 4]分别是五个方向上向下一个路由节点发出的请求信号和接收到的应答信号,output[0 to 4]则是五个输入方向上发送至输出端口的数据包。
req[5] ARBIT ROUTE ack[5] head[5] SWITCH MATRIX oreq[5] oack[5] output[5]
图3.7 路由仲裁结构图
如图3.7所示,路由仲裁模块首先检查各个方向是否有请求信号,若某方向有请求信号,则说明有数据包要转发,此时,对发送来的包头进行译码,译码完成后,对其进行路由算法的处理,同时将发送请求信号方向上的计时器触发,使其开始计时。然后,根据路由算法得出的输出端口进行判断,如果发生了几个输入方向上在同一输出端口的竞争,那么就根据各个方向上的计时器来判定优先级,计时器的时间长的优先发送。如果没有发生竞争,那么就直接发送数据包。在向输出端口发送数据包之前,要先对其进行请求,这个请求的应答可以通过一个判忙函数返回值得到。
按照上述的思想,我们将路由仲裁模块再细分为路由子模块、仲裁子模块、输出请求子模块。 (1) 路由子模块
路由子模块主要是实现转发数据包的路由算法,首先将发送来的数据包进行头部译码,然后得到数据包在2D Mesh中的源地址坐标和目的地址坐标。本文IP Core的设计时采用的是动态的路由算法,其中包括XY维序路由、YX维序路由、XY-YX路由算法。IP核的具体路由算法是根据用户的配置来选择的。传统的XY、YX路由算法的思想是
21
东北大学本科毕业设计(论文) 第三章 路由器IP Core的设计与实现
先X方向,然后Y方向(先Y方向,后X方向),虽然它是无死锁的,但是容易造成阻塞,因为数据在达到任何一个目的节点前都先从X方向开始,要么是E方向,要么是W方向,如果多个数据同时处在同一X方向上传输,对X方向的E通道和W通道容易造成阻塞。本文使用的XY-YX路由算法借鉴于[15],其中的数据并不总是先X方向,后Y方向,而是根据目的节点和当前节点的位置来选择。当目的节点Y方向的值大于当前节点Y方向的值时,即目的节点在当前节点的北边,选择先Y后X;当目的节点Y方向的值小于当前节点对应的值时,即目的节点在当前节点的南边,选择先X后Y,从而减XY路由算法在X方向产生的阻塞。此模型的路由算法如下:
当前节点标识(xco,yco),目的节点标识(dest_xco,dest_yco) Begin
If(dest_xco==xco&&dest_yco==yco) 到达目的节点 Else if(dest_yco>yco) 沿N方向路由 Else if(dest_yco<=yco) {
If(dest_xco==xco) 沿S方向路由 Else if (dest_xco>xco) 沿E方向路由 Else if(dest_xco 路由算法简单明确,关键的问题是将数据包的包头译码为路由算法可识别的当前节点标识和目的节点标识。如已经定义好的数据包格式所示,源地址和目的地址各占用4bit,而其中的x,y坐标各占用2bit,那么就可以很容易的确定源节点和目的节点在2D Mesh中的坐标。因此,译码的过程也就变成了将源节点和目的节点的x,y二进制数转化为整数的过程。 (2) 仲裁子模块 22 东北大学本科毕业设计(论文) 第三章 路由器IP Core的设计与实现 起始状态时钟上升沿请求信号为高计时器复位计时器开始计时输出请求信号为高 将数据送至交换阵列无竞争路由判定按照优先级将数据包送至交换阵列时钟上升沿计时器值送入比较器有竞争有无竞争 图3.8 仲裁子模块状态转换图 仲裁子模块是用来对请求同一输出端口的不同输入模块进行仲裁。这里我们采用不同输入模块的等待时间来进行仲裁。其采用状态机实现,具体的状态图转换如图3.8所示,当不同输入模块同时请求转发数据包时,首先将输入模块中对应计时器触发,使其开始计时。然后,将路由子模块得到的输出端口进行判断,如果没有重复的输出端口,则直接将数据包发送至交换阵列使数据包向各个输出端口传送,并且给输入缓冲区模块应答信号,同时向交换阵列发送一个请求信号。同时计时器复位,停止计时。若有重复的输出端口,则说明产生了竞争,那么就要由仲裁来判定优先级。当时钟上升沿到来时,将重复输入方向的计时器送至比较器进行比较,计时器的大小就是优先级的大小。最后,按照优先级的大小发送数据包至交换阵列,并给对应的输入模块应答信号。 假设在数据包的转发过程中遇到了五个输入端口同时向一个输出端口发送数据包而各个输入方向上的计时器时间又相同的情况,这时五个输入方向无法被仲裁出哪个输入端口的数据包优先发送,因而产生了死锁,导致整个程序崩溃,无法继续向下执行。我们的解决办法就是一旦遇到这种情况就按照预先设定好的优先级顺序(顺序为N、S、 23 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库片上网络路由器IP核的设计与实现(6)在线全文阅读。
相关推荐: