东北大学本科毕业设计(论文) 第三章 路由器IP Core的设计与实现
W、E、L)进行数据包的转发,这样就避免了死锁的产生。 (3) 输出请求子模块
输出请求子模块本质上是用一个判断函数来实现的。当仲裁子模块需要向输出端口发送数据包时,要先向输出端口发送一个请求信号,然后输出请求子模块对此请求进行处理,判断输出端口的数据包是否已经发送至下一个路由节点。如果数据包没有发送出去即还存在于输出端口当中,那么此模块不向仲裁子模块给出应答,因此将数据包不能发送至输出端口。如果输出端口的数据包被发送至下一个路由节点,那么对仲裁子模块给出响应。这个模块主要是为了避免输出端口中未发送出去的数据包被下一时刻到来的数据包被覆盖。 3.2.2.3 交换阵列模块
交换阵列根据路由子模块和仲裁子模块的输出结果来控制数据包的转发方向,为路由器的5组输入输出端口建立连接,进行数据包的并行传输。
表3.2 交换阵列举例 L E W S N 0 0 1 0 0 L 0 0 0 0 1 E 1 0 0 0 0 W 0 1 0 0 0 S 0 0 0 1 0 N 交换阵列开关控制矩阵如表3.2所示,其中,矩阵的行表示输入端口,列表示输出端口,矩阵中的‘1’表示其所在行与所在列建立了连接,数据包从其所在行的输入缓冲区发送到其所在列的输出端口。
矩阵中D(3,3)表示Local Input Port和West Output Port之间联通,即路由器单元东侧的Buffer中的数据发送到了西侧的输出端口。
3.2.3 路由状态监测模块
路由状态监测模块是用来将路由器的转发数据包的状态实时存储在双口BRAM中,并能够通过另一接口将状态读出的,监测的内容为哪个数据包何时到达何时被转发。由于需要记录数据包到达和转发的时刻,所以在设计中,我们需要维护一个全局时钟,使这个全局时钟能够保证硬件上电后就开始计时。数据包的标识可以通过数据包中的55-48位ID来确定,这个过程同头部译码一样,同样需要将二进制数转化为整数,在VHDL的STD_LOGIC_1164包中,可以直接使用转换函数CONV_INTEGER(A)达到目
24
东北大学本科毕业设计(论文) 第三章 路由器IP Core的设计与实现
的。关于数据包到达和转发的时刻,只需要关注路由监测模块中的输入端口和输出端口是否存在数据即可。当输入端口接收到数据包后,说明数据包已到达并存储在输入缓冲区,那么设计中就将 此时的全局时钟值设为数据包到达的时刻,并且将数据包ID和输入时间并置存入寄存器中。当数据包被转发到输出端口时,说明数据包已经准备发送至下个路由节点,那么此时的全局时钟值便为数据包发出的时刻,并且将数据包ID和输出时间并置存入另外一个寄存器中。由于输入端口和输出端口是存在于五个方向上的,所以我们要对五个方向的输入和输出端口进行监测,最后通过两个寄存器中数据包ID的匹配,我们就能得出各个数据包到达路由节点和离开路由节点的输入输出时间。具体的状态图如图3.9所示。
等待端口响应req = ’1’oreq = ‘1’全局计时器值存入寄存器A 全局计时器值存入寄存器BRising_edge(clk)时钟上升沿寄存器A,寄存器B,数据包ID并置存入寄存器C时钟上升沿 时钟上升沿读出状态至用户可见的寄存送读地址器将寄存器C的值存入BRAM中读使能
图3.9 路由状态监测模块
3.2.4 用户自定义逻辑模块
用户自定义逻辑目的是为了将本文设计的IP核可以用于纯逻辑电路系统中,其功能与总线接口大致相同,都是为了给路由节点发送其可识别的数据包,但是用户自定义
25
东北大学本科毕业设计(论文) 第三章 路由器IP Core的设计与实现
逻辑方便灵活,可以根据用户所需,发送相应的数据包,其中的存储模块是一个数组,用户可以按照自己的需要预先将数据包存储在数组中,然后此模块就能按照顺序将数组里的数据包逐个发送,同时此模块也应用了总线命令模块中的时序命令转换方法,这个模块的关键就是数组的存储和读取。
其模块框图如图3.10所示,wradd,wr分别是此模块的写地址和写使能,rdadd,rd分别是此模块的读地址和读使能,当wr为高电平时,则根据相应的wradd、rdadd地址将数据包写入和读出。
wradd wr User Define Input ack Interface RAM Output req rd rdadd
图3.10 用户自定义逻辑框图
3.3 本章小结
本章主要从路由器IP Core的设计与实现方面进行了阐述,并对总线命令转换模块、延时可变路由器模块、路由状态监测模块、用户自定义逻辑模块进行了详细的说明。本章通过状态图和模块框图,直观的显示了各个功能模块的关系以及具体的实现过程。
26
东北大学本科毕业设计(论文) 第四章 测试与结果分析
第四章 测试与结果分析
在本章中我们首先将对基于FPGA设计的路由节点及其子模块进行仿真验证,并对其进行测试,给出仿真结果。然后用仿真正确的路由节点搭建片上网络快速原型系统,并用EDK开发平台在硬件电路中进行测试。
4.1 路由节点的验证流程
根据以上对片上网络特点的分析,我们在对片上网络路由节点进行设计时,采用了自顶向下的主流方法将其分解为比较简单的设计子模块。而验证过程则以相反的方向进行,从较简单的子模块开始,逐步过渡到更高设计层次。子模块验证流程如图4.1所示。在完成子模块的设计后,我们根据其功能给出相应的验证平台。我们首先将验证用例加载到子模块上。根据输出,如果子模块完成的功能和预期的不一致,我们将定位故障点,并且对电路设计进行修改,迭代过程将持续到设计通过该验证用例。在每个子模块都完成验证后将子模块组合为网络组件,在仿真平台上验证其功能正确性。
4.2 各个功能模块仿真验证
4.2.1 输入缓冲区模块仿真
输入缓冲区的仿真如图4.2所示,其中的第一个截图是输入缓冲区中RAM的初始化数据,第二个是wradd为2时的BUFFER中的数据,第三个是整个输入缓冲区模块的过程截图。通过截图,我们可以得出结论:输入缓冲区能够将数据包缓存在RAM中,并能够按照数组的存储顺序依次读出RAM中的数据发送至输出端口。
27
东北大学本科毕业设计(论文) 第四章 测试与结果分析
图4.2 输入缓冲区仿真图
4.2.2 路由仲裁模块的仿真
根据路由仲裁模块的仲裁机制—以各个输入端口等待时间的长短作为优先级的度量,此模块在每个输入端口都加入了单独的计时器。如图4.3所示,这是S输出方向的数据转发过程的截图。其中packetl是此模块的本地输入端口,so是S方向输出端口,counters是输入方向计时器,tdatas是S输出端口的寄存器,reqs是对S输出方向的请求,ackls是对L输入端口向S输出端口发包的应答信号,oreqs是对与相邻路由节点对应输入端口的请求。
图4.3 路由仲裁模块的仿真图
根据我们选择的XY—YX路由算法可知,L输入方向中的数据包(5600039、2300011、4700019)是应该发送至S输出端口的,图中的时序仿真完全证明了数据包的转发过程是正确的。仲裁的机制是当寄存器tdatas接收到数据包后,计时器立刻停止计时。但是仿真图中,计时器是在下一个时钟周期重新计时的,那是因为进程中的信号并不能立即赋
28