NoC基础研究及一款基于XY路由算法的虫孔路由设计.docx
《NoC基础研究及一款基于XY路由算法的虫孔路由设计.docx》由会员分享,可在线阅读,更多相关《NoC基础研究及一款基于XY路由算法的虫孔路由设计.docx(40页珍藏版)》请在冰点文库上搜索。
NoC基础研究及一款基于XY路由算法的虫孔路由设计
毕业设计[论文]
题目:
NoC基础研究及一款基于XY路由算法的虫
孔路由设计
学院:
电气与信息工程学院
专业:
电子信息工程
姓名:
XXX
学号:
*******
指导老师:
XXX
完成时间:
2015年06月01日
摘要
片上网络作为一种新的通信方式,其核心是网络架构,与采用单总线结构的片上系统相比,片上网络能适应更大的系统规模、更高的系统复杂度和更多的IP核数量。
因此,片上网络更能适应现实需求,对其进行研究十分必要。
而路由算法直接决定片上网络的性能;片上网络的输入、输出模块与其内部交换器的连接方式和连接时间则取决于片上网络的交换技术。
对于片上网络的研究,这两个问题都非常关键。
本文总结了片上网络的拓扑结构、路由算法、数据交换方式,重点解释了XY路由算法、2D-Mesh拓扑结构和虫孔交换的优缺点,并使用VHDL语言设计了一款基于XY路由算法的虫孔路由器,设计分为输入、输出、虚拟通道、计数、顶层5个模块,完成了XY路由算法的虫孔路由器的各项功能。
最后使用QuartusⅡ完成编译及rtl级仿真。
关键词:
NoC,2D-Mesh拓扑结构,XY路由算法,虫孔路由器,VHDL
ABSTRACT
NoC,abrandnewmethodofcommunication,withacentraldesigntechniqueofnetworkarchitecture,isabletoadapttonowadaysbiggersizeandhighercomplexityofthesystemandlargernumberofipcoresthanSoCwhichisbasedonbusstructure.Therefore,itisofgreatsignificancetostudyit.
BeingthekeyproblemofNoC,theroutingalgorithm,aswellasthewayofswitching,influencestheperformanceofNoCdirectly.
Thispapergivesasummaryofthetopologystructure,routingalgorithmanddataswitchingpatternofNoC.AnditexplainsbothofthepositiveandnegtivefactsofXYroutingalgorithm,thetopologicalstructureof2D-Meshandwormholeswitching.Also,thereisadesignofawormholedatarouterwhichisbasedontheXYroutingalgorithm,usingVHDL.Thedesignconsistsofinput,output,fifo,creditandtopmoduleandiscompiledbyQuartusⅡatrtllevel.
KEYWORDS:
NoC,Thetopologicalstructureof2D-Mesh,XYroutingalgorithm,Wormholedatarouter,VHDL
1引言
1.1课题背景
当前,市场对电子产品的需求与日俱增,PC(PersonalComputer)市场也随之日益成熟,数码消费品将主导半导体产品市场的未来增长。
在过去的50余年里,集成电路(IC,IntegratedCircuit)作为有史以来持续发展最快的技术之一,其复杂度每年增长50%以上,单一芯片上晶体管的数目增长呈指数规律。
而片上系统(SoC,SystemonChip)虽然具有良好的片上集成性能,能集成多个处理器、存储器、模拟电路等IP核(IPCore,IntellectualPropertyCore),其总线结构能提供高性能的互联。
但是在深亚微米技术的生产工艺困难的前提下,SoC可扩展性差、通信效率低、能量消耗大、全局同步约束困难等问题逐步出现,难以满足设计需要。
要从本质上解决总线结构的缺陷,只有发展片上网络(NoC,NetworkonChip)。
NoC根据既有的单总线结构,在设计过程中融合计算机网络技术,IP核通过智能交换机互相联系。
它的优势主要体现在以下几方面:
首先,其交换方式是并发的、分组的,由此可以得到更大的带宽和链路利用率。
其次,分层网络协议使使其传输更加可靠。
最后,全局异步局部同步的结构使拓扑结构中任一节点都和其他节点异步,而单个节点内部同步。
与SoC的单一时钟相比NoC的优势非常明显,主要在于其空间可扩展性良好,只要增多IP核数量和相应的路由器就可以一直扩展拓扑结构。
同样,NoC也有自己的问题,比如电路面积相对较大,延迟需要控制,必须的缓冲和更多的逻辑可能提高功耗,IP核间的接口和协议能否相互兼容也是必须考虑的问题。
所以,要得到吞吐量更高、延时更低、系统功耗更小的NoC系统,就需要分析NoC的拓扑结构、路由算法、资源节点结构、通讯节点结构。
本文对XY路由算法的虫孔路由器进行设计,理解NoC的拓扑结构、路由算法、数据交换方式。
路由算法作为NoC网络通信中的关键研究问题,直接决定网络性能。
XY路由算法是一种确定性路由算法,它简单且容易实现。
虫孔交换机制将数据包分成固定长度的卫片(flit),交换器更紧凑,减小缓冲器对空间的要求。
通过对XY路由算法的虫孔路由器进行设计,能学习VHDL语言,深入认识XY路由算法、2D-Mesh拓扑结构和虫孔交换的优缺点,加深对NoC基本概念的理解。
1.2片上网络现状及发展趋势
自2000年“Networkonachip”的概念首次提出以来,越来越多的机构认识到了NoC所蕴含的巨大潜能,至今,片上网络已经成为最活跃的学术课题之一。
2007年,第一个以众核(ManyCore)为主题的研讨会在美国召开,多核从此成为集成电路技术前进的趋势。
同年,国际半导体技术蓝图(ITRS,InternationalTechnologyforSemiconductors)给出了延伸摩尔定律(MoreMoore)和超越摩尔定律(MorethanMoore),以及NoC与系统级封装(SIP,SystemInaPackage)技术结合的前进方向。
SIP可以缩短NoC连线长度,使NoC突破原有的布局限制,使其可能拥有更高的带宽、更低的延时和功耗。
2008年,欧洲开始开发一个设计全局异步局部同步架构芯片的流程,该流程正是借助了NoC结构的优越性。
由此可见,在研究人员的努力下,NoC正在从理论研究走向实际应用。
然而,国内研究现状与国外相比有一定的差距。
2005年以来,我国很多高校和研究机构陆续围绕NoC展开了研究工作,并为我国NoC理论研究做出了一定贡献。
但是总体上我国NoC研究仍处于起步阶段,比国外先进水平至少落后3到5年。
在当前多核技术产业的国际老牌公司不断发展,新兴公司显露头角,多核产品不断丰富并逐渐被公众认识的前提下,加强对NoC的深入研究非常必要。
2NoC基础研究
2.1基本概念
NoC研究来自于对SoC系统级设计方法的探索,初期主要涉及其通讯部分,此后很快就延伸到技术的方方面面。
NoC内涵丰富,其核心在于对计算机网络通信模式的模仿和借鉴。
它们有很多共同点,比如可扩展性、能进行数据包通讯。
片上网络与计算机网络通信模式之间的区别在于,片上网络硬件资源的使用受到芯片面积的限制,简单的逻辑和算法更能适应芯片面积,所以更加常用;通信线路短,信号间干扰小,数据位宽可用范围大;多采用异步缓存(FIFO,FirstInFirstOut)单元进行时钟域转换;片上网络没有标准的网络传输协议,且网络传输协议大多比计算机网络所使用的协议简单。
NoC架构的特点在于IP模块是通过智能交换机实现数据交换的,智能交换机作为数据传输介质,使NoC具有与SoC相比良好的可扩展性,且解决了SoC单一时钟的缺陷。
以2D-Mesh结构为例做NoC基本构成如图2.1:
图2.1NoC示意图
如图,片上网络主要由交换节点(Switch)、资源节点(Resource)和资源网络接口(RNI,ResourceNetworkInterface)通过链路(Link)互联而成。
信息被资源节点的处理,通过资源网络接口,经过链路到达交换节点再进入其他资源节点。
近年来,人们越来越关注NoC的低功耗设计和路由结构设计,要设计一个延迟低、带宽高、实现方式简单的NoC系统,就需要格外注意拓扑结构、路由算法和数据交换方式的设计。
2.2拓扑结构
NoC拓扑结构即资源节点之间的互联方式,片上网络的面积、路由方式、仲裁方法都受拓扑结构的影响,由此,它也决定片上网络的延迟、功耗和吞吐量。
使用设计专用的、不规则的拓扑结构可以提高NoC性能,但由于其线长不均匀、版图设计相对复杂,可能会带来一系列问题。
所以必须结合设计需求选择合适的拓扑结构。
常见的拓扑结构有网格(Mesh)结构、环绕(Torous)结构、胖树(FatTree)结构、蜂窝(Honeycomb)结构等。
这些结构各有优劣。
以下主要介绍二维网格(2D-Mesh)结构。
2.2.1二维网格结构
二维网格结构由S.Kumar提出,在各种拓扑结构中是最直观、易实现的一中,核心结构是交叉开关(CrossSwitch),交叉开关的作用在于为处理器分配内存。
如图2.1,它呈m行n列网格状。
边缘节点有三个或者四个端口,一个IP核与其相连;非边缘节点均有五个端口和一个与其相连的IP核。
所以,IP核数量等于交换节点数量相同。
2D-mesh结构高度对称,扩展性好。
其缺点在于结构直径相对较大,在网络规模扩大的同时,会较大幅度的提高功率消耗。
同时,由于边界节点的闭塞性,可提供的网络性能效率不足。
2.2.2环状结构
环状结构以二维网格结构为基础,有很好的带宽和吞吐量。
但增加了每个边缘节点与和其对应的结构另一端的一个边缘节点的连接,这样的连线增加了系统延时。
环状结构如图2.2,其中,R为通讯节点,S为资源节点。
图2.2环状结构示意图
2.2.3胖树结构
胖树结构中每一级均有四个母节点,连接下一级的四个子节点。
没有子节点的节点即为叶节点,每个叶节点就是一个IP功能模块,而相对的,每个根节点就是一个交换器。
其结构如图2.3,其中,R为通讯节点,S为资源节点。
图2.3胖树结构示意图
2.3路由算法
路由算法是NoC设计中的重要问题,它确定了数据包从源地址到目的地址的传播路径,直接决定数据的传输效率,从而影响系统性能。
路由算法应该具有流控机制,避免死锁,同时也应避免使数据包无限环绕产生活锁现象以及低优先级的数据包无法被输出的饥饿现象
路由算法分为确定路由算法和自适应路由算法。
其中确定路由算法指路由路径不能跟随网络情况的变化而变化的算法;相应的,自适应路由算法的路由路径可以根据网络情况发生改变。
因此,自适应路由算法能非常好地避免网络拥塞,但当数据传输量相对小时,逻辑复杂的自适应路由算法与确定路由算法相比系统开销更大。
因此,根据设计要求选择合适的路由算法非常重要。
2.3.1XY路由算法
XY路由算法属于确定路由算法,其实现方式基于二维网格结构。
它是路由算法中最简单的一种,通信延时低,非常适合低拥塞的网络情况。
其流程如下图:
图2.4XY路由算法流程图
如图2.4所示,XY路由算法是一种先X轴方向传输、再向Y轴方向传输的路由算法。
首先,如果当前节点的X轴坐标(Cx)小于目的节点的X轴坐标(Dx),则向X轴正方向传播,反之向X轴负方向传播;若Cx与Dx相等,再判断Y方向,如果当前节点的Y轴坐标(Cy)小于目的节点的Y轴坐标(Dy),则向Y轴正方向传播,反之,向Y轴负方向传播。
如果Cy等于Dy,则由本地输出。
图2.5XY路由算法示例
如图2.4中的示例,从(1,0)到(2,2)所经过的路径应为:
(1,0)→(2,0)→(2,1)→(2,2)
2.4数据交换方式
NoC的数据交换方式控制交换器和输入、输出模块之间的连接方式和时间。
主要的交换方式有虫孔交换技术、分组交换技术和电路交换技术等,以下主要介绍虫孔交换技术。
2.4.1虫孔交换机制
虫孔交换机制即将原有数据包先分成固定长度的flit,再进行传输。
是一种易实现的交换机制,且资源成本与其他方式相比更低。
路由器接收到头flit后即进行转发,并使以后的卫片沿头flit路径传输,直到尾flit传送完毕,再继续接收下一数据包的头flit,如此循环。
各flit按顺序到达目的节点,不需要将数据包重组。
因此,路由器只需要提供几个缓冲区,能够容纳几个flit即可。
也正是因为这样的传输方式,不同的数据包不能同时传输,一条信道如果被某数据包占用,其他数据包只能在其传输完毕后进入信道,信道利用率低。
但可以借助虚拟通道流控(Virtual-ChannelFlowControl)技术弥补这个缺陷。
多核处理器的通信形式频率高,需要较小的延时,所以使用虚拟通道的虫孔路由器是最常用的一种交换机制。
2.4.2分组交换技术
分组交换技术将要传输的数据分成一定的长度,即包。
包的传输没有确定的路径,仅由源节点决定。
这样的传输方式需要比虫孔交换更大的传输空间,由于NoC对芯片面积的限制非常严格,所以分组交换技术并不常用。
2.4.3电路交换技术
电路交换技术即线路交换技术,是一种直接的交换方式。
在这种交换机制下,源节点和目的节点之间有一条专用的电路连接,这条连接无论是永久的还是临时的,都可以保证数据传输的可靠性。
当NoC技术应用于无线通信时,电路交换技术能提供非常好的吞吐量,且功耗低、易控制,所以应用广泛。
3基于XY路由算法的虫孔路由器设计
3.1总体设计
3.1.1基本理论
基于XY路由算法的虫孔路由器的拓扑结构为2D-mesh拓扑结构,并采用Credit流控机制和输出排队的缓冲策略。
是一种比较常见的路由器。
其中2D-mesh拓扑结构呈网格状,前文已有详细说明。
以下主要介绍XY路由算法、虫孔交换方式、Credit流控机制三个方面。
XY路由算法:
由第二章可知,XY路由算法是一种先由X方向传输,再向Y方向传输的算法。
本设计中路由器东输出端口(out_east)代表X轴正方向,西输出端口(out_west)代表X轴负方向,北输出端口(out_north)代表Y轴正方向,南输出端口(out_south)代表Y轴负方向,本地输出表示当前节点即为目的节点(Cx=Cy且Dx=Dy)时,从本地路由器直接输出。
虫孔交换方式:
设计中,将数据包分为几个flit传输。
缓存空间最大设为8,如果缓存空间不为0且头flit被输入,即可被传送,后续的同数据包的flit均可按照头flit路径传送,直到尾flit被输出。
Credit流控机制:
路由器接收来自下一级路由器的Credit信号,这个信号给出下一级路由器的可用缓存空间。
当其不为0时,可以向下一级路由发送消息。
同样,路由器也输出一个Credit信号给上一级路由器。
3.1.2设计总体框架
本设计中路由器的工作过程如下:
卫片由东、西、南、北及本地5个输入端口进入路由器,如果本地FIFO有缓存空间,则经虚拟通道仲裁器(VC)选择,以先东西输入,后南北输入,最后本地输入的顺序进入路由器;同时根据目的地址和当前地址决定输出端口。
然后经过虚拟通道FIFO,如果来自下级路由的Credit信号表示有缓存空间,则输出。
同时路由向下级路由输出表示本地路由输出信号有效的Valid信号,向上级路由器输出表示本地缓存空间大小的Credit信号。
设计分为输入、输出、虚拟通道、计数、顶层5个模块。
各模块工作过程如下:
①输入模块主要作用为确定虚拟通道仲裁器的值,当路由器有缓冲空间时,从5个输入中仲裁出一个将其数据输入到输入缓存。
其中路由器是否有缓存空间根据FIFO是否上溢(overflow)确定。
设计中Flit为两位,其中“01”表示头卫片,“10”表示体卫片,“11”表示尾卫片,“00”无效。
当有剩余缓存空间时,如果X轴方向有头卫片输入,则优先选择X轴方向的卫片输入;如果X方向没有头卫片输入,则优先选择Y方向;如果XY两个方向均无数据,则选择本地输入的头卫片。
一旦头卫片被选择,则VC将被锁定,继续接收该通道传来的体卫片。
直到收到尾卫片,VC被解锁,再一次进行选择。
②虚拟通道模块即一个缓存数据的FIFO,用于缓存输入和输出。
本设计中FIFO深度为8,宽度为2。
当有数据进入缓存时,如果其内部写使能信号(rd)为高电平,则写入数据。
如果内部读使能信号(wr)为高电平,则输出数据。
读指针和写指针分别指向要写入和要读出的地址。
当8个数据全部写满但没有输出数据时,FIFO上溢,当全部数据均被输出时,FIFO下溢。
本设计对FIFO空满判断的算法为:
当读指针和写指针完全相同时,FIFO为空,即下溢;当读指针与写指针第一位相反,后三位相同时,FIFO为满,即上溢。
③计数模块用于输出本路由Credit信号。
FIFO每缓存一个数据,计数器(count)减1,每输出一个数据,计数器加1。
由此确定路由器缓存空间大小并输出。
④输出模块的作用在于按照XY路由算法确定输出端口。
下一级路由缓存空间不为0时,即输出信号;如果下级路由缓存为0,则数据保留在缓存中等待。
对输出端口的选择同样要按照XY路由算法进行。
具体方式前文已有详细介绍。
⑤顶层模块根据虚拟通道仲裁器的选择确定输入,读入下一级路由的Credit值,并根据输出信号是否有效向下一级路由反馈出Valid信号。
设计总体框架如图3.1。
图3.1基于XY路由算法的虫孔路由器总体设计框图
3.2基于XY路由算法的虫孔路由器程序设计
本部分主要对路由器及其各个模块的端口功能进行介绍,并对程序作出解析。
程序输入信号中,rst控制路由器启动和复位,clk为时钟信号,rdc、wrc为FIFO读写清零信号。
Cx、Cy、Dx、Dy分别表示当前节点XY坐标和目的节点XY坐标,credit_in反映下一级路由的缓存空间剩余情况,in_east、in_west、in_south、in_north、in_local分别表示东西南北和本地5个输入端口。
输出中,valid信号表示向下级输出信号有效,overflow表示FIFO上溢,underflow表示FIFO下溢,credit_out为路由器向上级路由给出的剩余缓存空间大小,out_east、out_west、out_south、out_north、out_local分别表示东西南北和本地输出信号。
①输入模块:
控制输入的启动和复位,确定虚拟通道仲裁器对输入的选择,并在FIFO上溢时不再输入信号。
rst信号为0时,模块启动;为1时,输出清零,不再对路由器输入信号。
overflow为1时,表示FIFO上溢,无法写入数据,为0时,正常输入。
in_east、in_west、in_south、in_north、in_local分别为东西南北以及本地端口的输入数据。
②虚拟通道模块:
本部分即为一个虚拟通道FIFO。
rst为1时,FIFO清零;为0时,FIFO启动。
时钟信号在上升沿,数据被写入或读出。
内部信号rd为1时,读出数据。
内部信号wr为1时,写入数据。
rdc为1时,写入数据清零;为0时,正常工作。
wrc为1时,读出数据清零;为0时,正常工作。
data_in即为输入数据。
overflow为1时FIFO为满,underflow为1时FIFO为空。
data_out为数据输出。
③计数模块:
rst为1时,计数清零;为0时,计数器正常工作。
output0、input分别为FIFO的输入和输出信号。
credit_out反映缓存器空间剩余情况。
④输出模块:
本模块对输出端口进行选择。
count0表示下一级路由的缓存空间。
out_east、out_west、out_south、out_north、out_local分别表示东西南北和本地5个输出端口。
根据Cx、Cy、Dx、Dy的值,判断output0应该由哪个端口输出。
⑤顶层模块:
顶层模块主要完成设计的整合。
同时,顶层模块根据虚拟通道仲裁模块的选择给出输入信号,并给出表示输出有效的valid信号,valid为1时,输出信号有效,为0时,无效。
rst信号为1时,整个路由器所有信号清零;为0时,正常工作。
clk为时钟信号。
以上即为本设计所有模块。
所有程序均见附录A。
4程序仿真
4.1Modelsim仿真流程
设计过程中,先将划分好的各模块功能完成并利用Modelsim软件仿真,再完成顶层模块设计。
最后进行整体设计Modelsim仿真,并使用QuartusⅡ进行rtl级仿真。
rtl级仿真图像见附录C
Modelsim作为VHDL最常见的仿真工具之一,编译仿真速度快、仿真波形直观。
其仿真过程如下:
①Modelsim仿真需要根据设计编写测试平台。
②运行Modelsim,将路径指到需仿真程序的sim文件夹。
步骤为:
在File菜单中选择ChangeDirectory命令,在弹出的浏览文件夹对话框中选择需要的文件夹。
③在Transcript区域运行dosim.do命令。
④将需要显示波形的信号选中并添加到波形。
⑤在Transcript区域执行run命令,运行时间可根据需要设置。
⑥在Transcript区域执行quit-sim可以关闭该程序仿真。
使用QuartusⅡ实现rtl级仿真的过程非常简单。
根据设计创建工程。
完成编译后在Tools菜单选择NetlistViewers中的RTLViewer即可。
4.2各模块仿真结果
4.2.1输入模块
输入模块仿真结果如图4.1。
根据XY算法判定输入,并在收到头flit时锁定虚拟通道选择器,在收到尾flit时解锁。
重新接收其他数据。
图4.1输入模块仿真图像
4.2.2FIFO模块
FIFO模块仿真图像如图4.2、图4.3。
FIFO实现先入先出功能。
且空满状态判断正确,当读指针与写指针重合时,FIFO为空,当缓存空间全部占满时,FIFO为满。
图4.2FIFO模块仿真图像1
图4.3FIFO模块仿真图像2
4.2.3计数模块
计数模块仿真图像如图4.4。
每输入一个数据,缓存空间减1;每输出一个数据,缓存空间加1。
图4.4计数模块仿真图像
4.2.4输出模块
输出模块仿真结果如图4.5。
由仿真可见,设计中输出端口能根据目的节点和当前节点的变化而改变,符合XY路由算法的要求。
图4.5输出模块仿真图像
4.3整体仿真
设计整体利用Modelsim仿真结果如图4.6。
输入信号进入缓存,并从XY路由算法决定的端口输出。
能完成XY路由算法的虫孔路由设计的各项要求。
其仿真测试平台见附录B。
图4.6总模块仿真
5设计总结
5.1设计过程中遇到的问题及解决方法
在本次设计中我遇了到很多问题,主要有以下三个方面:
首先,设计初期对NoC的理解不够深入。
对于XY路由算法以及虫孔路由器、二维网格拓扑结构的认识不够到位,不能全面的理解设计要求。
但通过大量阅读文献,仔细研究相关内容,我认识到了设计的内涵,明确了本设计应该完成的功能。
其次,在开始编写程