文献标识码:A
DOI:10.16157/j.issn.0258-7998.190548
中文引用格式:许川佩,王纪锋,牛军浩. NoC资源网络接口设计[J].电子技术应用,2019,45(8):118-123.
英文引用格式:Xu Chuanpei,Wang Jifeng,Niu Junhao. Design and verification of NoC resource network interface[J]. Application of Electronic Technique,2019,45(8):118-123.
0 引言
片上网络(Network-on-Chip,NoC)具有可重用性、可扩展性和并行性等特点,是替代以总线通信方式的片上系统(System-on-Chip,SoC)的一种可行方案[1-2]。NoC由路由节点、处理单元(Processing Elements,PE)、路由节点和PE间的接口以及路由节点间链路通道组成[3]。路由节点的功能用于将数据(包)从一个节点传送到另一个节点[4],资源网络接口(Resource Network Interfaces,RNI)是PE向路由节点传输数据的一个通信接口,其基本功能是根据标准通信协议(如AXI、OCP或异步握手)完成PE向路由节点的数据传输[5]。
近年来,有很多路由节点与PE间接口设计研究成果相继发表。文献[4]提出并实现了一个简单的网络接口架构,但该接口的延迟较高。文献[6]中提出了一种符合AHB(高级高性能总线)的2D Mesh 结构NoC网络接口,该接口通过两阶段流水线通信方式来减少PE和NoC路由节点之间通信延迟。文献[7]提出了使用标准PE和AXI总线组包的技术来减少延迟。但是,上述所有接口设计都是基于时序电路实现的,数据传输都是在时钟控制下完成的,很少在接口各模块间采用请求、应答通信方式设计,且上述接口设计研究都是在减少接口与处理单元和路由节点间通信延迟,很少研究如何减少资源网络接口内缓存模块读写过程的延迟。为此,本文采用请求、应答通信机制方式来设计资源网络接口;根据时分复用思想可以提高多通道利用率[8],采用时分复用的思想设计双通道缓存模块作为本文资源网络接口缓存模块。
1 资源网络接口设计
资源网络接口是PE向路由节点传送数据的物理通道[9],作用是把处理单元发送来的数据转化成NoC路由节点所识别的数据。其处理单元、资源网络接口、路由节点之间的连接方式如图1所示。其中资源网络接口与处理单元和路由节点都采用异步通信。
资源网络接口结构如图2所示,由打包器和缓存模块组成,其中缓存模块由缓冲区读、写控制器和两个循环FIFO组成。数据处理流程分为两部分:数据封装和数据转发。这两个部分处理过程如下:
数据封装:当打包模块接收到PE请求时,根据PE发来数据信息封装成相应类型微片,然后把封装好的微片存储到缓存区内。数据转发:缓存区内数据不为空时,向路由节点本地端口发出请求,等到应答之后把数据转发路由节点本地端口。
1.1 数据包格式
目前NoC内的路由节点间的数据交换主要采用虫洞交换技术[10]。该交换方式将数据包划分成很小的微片,并把这些微片分成三种不同的类型:头微片、数据微片和尾微片。传输时头微片在NoC内开辟一条路径,数据微片以流水线方式向前传输,以尾微片作为数据包传输结束标志。这样数据包中微片就会存到多个路由节点内,但如果NoC内某个路由节点发生阻塞时,这时又有其他数据包微片经过此路由节点,并且与当前数据包微片传输方向相同,这时路由节点就无法区别当前微片和前一个微片是否来自同一个数据包,造成微片混乱现象[11]。
为防止这种情况发生,本文将数据包分为两种格式:奇数包和偶数包。打包次数为奇数是奇数包;打包次数为偶数是偶数包。两种数据包微片格式一致,不同的是微片中编码号编码方式不同。其数据包格式及微片格式如图3所示。
这两种数据包微片编码方式如下。当打包数据包为偶数包时,其微片编码方式为头微片和尾微片两位码号设置为00,数据微片两位码号设置为01;打包为奇数包时,头微片和尾微片的编两位码号设置为11。数据微片两位码号设置为10。将数据包的源地址、目的地址信息添加到头微片、数据微片和尾微片中来,用来区分数据包源地址不同、目的地址相同的微片。采用奇偶打包格式,来区分数据包源地址、目的地址相同但不是同一个数据包的微片。
1.2 打包器设计
打包模块负责将PE发送来的数据重新拆包,并重新打包成NoC内路由节点所识别的数据包格式数据,然后把打包好的数据转发给路由节点。其整个结构如图4所示,由二相单轨数据捆绑异步单元和Packetizer模块组成。其中Packetizer由Packet Control、Head Info、24位数据搬运器、32位合成器以及Flit组合器组成。二相单轨数据捆绑异步单元是负责与PE和该接口内的缓存模块通信的异步握手单元,与两个模块通信时采用数据捆绑二相握手协议(异步通道中请求、应答信号每翻转一次完成一次通信事件)[12];Packetizer是打包器的核心模块,负责数据包内各个微片封装。由于本文设计的资源网络接口向路由节点转发数据时,是以微片为基本单位进行数据交换,因此在数据打包时,不需将数据封装成整个数据包,只需将数据封装成微片。传输时以头微片作为一个新数据包的开始,尾微片作为一个数据包结束,整个过程以流水线方式传输。
数据包整个打包流程如下:当收到PE发送来的新数据时,二相单轨数据捆绑异步单元先将该数据锁存该单元内数据通道中,并向Packetizer发送请求。当Packetizer模块收到二相单轨数据捆绑异步单元请求(req_from_ip信号发生翻转) 时,内部的打包控制器Packet Control判断当前Status信号状态以及打包奇偶格式后,将锁存二相单轨数据捆绑异步单元中数据通道内的数据,通过Flit组成器封装成相应微片,同时向二相单轨数据捆绑异步单元做出应答(ack_to_ip信号发生翻转),并将封装好的微片存储到缓冲区内。其微片封装类型是根据当前Status信号的状态决定的。其Status信号的状态转换与微片类型封装之间的关系如图5所示。其中Status信号由2 bit数据组成,00表示状态S0,01表示状态S1,10表示S2,11表示状态S3。
四种状态工作详细步骤为:
(1)S0状态:初始化Packetizer模块,此时打包器处于空闲状态。监督二相单轨数据捆绑异步单元是否有新数据到来(req_from_ip信号翻转),如果没有,就一直在S0状态循环,否则进入S1状态。
(2)S1状态:当收到二相单轨数据捆绑异步单元请求(req_from_ip信号发生翻转)时,不会立即做出响应。而是Packetizer模块内Head Info单元先将发送来的32 bit数据中的头部信息提取出来,并存储到数据寄存器内(其中头部信息包括数据包的长度、数据包传输的目的地址和源地址,数据包长度为4位,目的地址和源地址为8位);然后Packet Control控制器判断当前打包次数是奇数还是偶数后,将Head Info内的12 bit头部信息传送给32位数据合成器。接收到Head Info信息后的32位数据合成器会立即判断当前打包次数奇偶性,并把剩余的20位存储地址填充数据包相关类型信息。最后把合成好的32位数据转发给flit合成器,封装成34 bit头微片,并向二相单轨数据捆绑异步单元做出应答(ack_to_ip信号发生翻转),进入S2状态。此时标志一个新的数据包打包开始。
(3)S2状态:检测到有32 bit新数据到来时,先判断从头微片到当前所封装微片数是否小于数据包的长度。如果是,进行数据微片封装。其封装步骤:先把发送来的32 bit数据存储到24位数据搬运器中寄存器内;然后Head Info将存储的8 bit目的地址、源地址信息转发给32位合成器,之后24位数据搬运器将存储在寄存器内的数据前24 bit数据填充到32位合成器的后24位;最后由flit合成器封装成34 bit数据微片。如果当前所封装微片数等于数据包的长度,转移S3状态。
(4)S3状态:把PE发送来的32 bit数据封装成34 bit尾微片,并把Head Info内存储的头部信息清空,进入S0状态,此时标志一个数据包打包结束。其中34 bit尾微片的封装步骤与S2状态34 bit数据微片一致,不再赘述。
1.3 缓存模块设计
当打包器把封装好的微片转发给NoC路由节点时,如果NoC路由节点没有给予及时处理,此时会大大降低数据打包的效率,为此需在打包器和NoC路由节点间增加一个缓存模块,目前大多数缓存器都是使用单个缓存区来存储数据的,但是这种方式无法在同一时刻进行读、写,产生过大的延迟。为减小缓存模块的延迟,本文采用时分复用的思想设计一个读、写并行的双通道缓存模块。为了更好证明采用时分复用思想可以降低缓存模块延迟,设每次写数据的时间为Twr,读数据延迟为Trd,数据包的长度为2L。则单通道缓存和采用时分复用后缓存完成一个数据包读写时间可由以下公式计算[13]。
单通道完成一个数据包读写时间为:
其单通道和双通道读、写过程如图6(a)和图6(b)所示。
下面介绍整个缓存模块设计流程。
缓存模块整个结构由图2所示,由缓冲模块读、写控制器以及两个FIFO组成。传统的FIFO都是靠时钟完成FIFO数据读写的。为了提高数据的读写速率,本文采用数据捆绑二相握手协议(异步通道中请求、应答信号每翻转一次完成一次通信事件)[12]设计一个循环FIFO进行数据读写,数据宽度为34位,为了节约资源,深度设计为4,整个设计框架如图7所示。
当req_in信号发生反转时(和ackout信号不一样时,有请求发生时),对应的writerpointersi会被拉高,当判断regi为空(fulli和emptyi电平不同)时,ackout就会做出应答,将数据写入到regi里,fulli信号发生反转。同理当readpointersi读到regi不为空(fulli和emptyi电平不同)时,此时reqout电平会发生变化,同时后面的二相单轨异步单元向相邻接结点发出请求信号,当接收到ackin应答时,emptyi信号发生反转,然后去读下一个reg的值,以此类推。下面介绍读、写控制器设计。
缓冲区读写整个过程都是由读、写控制器配合完成的。其缓冲区读、写控制器内部结构如图8所示。其中读、写控制器分别由二相单轨数据捆绑单元、仲裁器以及状态控制器组成。在读、写控制器内,仲裁器都是采用轮询算法对两个FIFO进行读、写操作,状态控制器控制两个FIFO的读、写状态。下面介绍一下读、写控制器的工作流程。
写操作步骤:当收到打包器发送来的请求时(req_from_packet信号翻转),二相单轨数据捆绑异步单元立即把打包器传送来的微片锁存到该模块内的数据通道中,紧接着仲裁器判断当前FIFOA和FIFOB是否全满(Read_statusA和Read_statusA全为1)。如果是,停止数据写操作;否则仲裁器根据轮询算法将数据写入到相应的FIFO内,然后再判断当前FIFO是否满,如果是,将该FIFO设置为读状态(Read_status设置为1)。其中写控制器中仲裁机制采用轮询的算法,每收到一个请求信号时,仲裁器内仲裁指针移动一次,这样保证了每个FIFO写的频率相同。
读操作步骤:当仲裁器接收到FIFOA或FIFOB的请求(reqC和reqD信号翻转)时,判断当前两个FIFO是否全空(Write_statusA和Write_statusB全为1)。如果是,停止读操作;否则读控制器内的仲裁器根据轮询算法将相应FIFO内的数据发送给NoC路由节点,然后判断该FIFO是否为空,如果是,则将该FIFO设置为写状态(Write_status设置为1)。其中读控制器内仲裁器也是每读一次数据,仲裁器内仲裁指针移动一次,这样保证了缓存区中每个数据读、写顺序一致。
该缓存模块根据FIFO中Write_status和Read_status信号判断当前FIFO的读、写状态,保证读、写过程同时进行。用时分复用的思想降低数据在缓冲区写过程中的延迟,减少缓冲区FIFO在读的过程出现饥饿现象(一直没有数据可读)。
2 功能仿真与验证
本文采用Verilog HDL硬件语言完成资源接口内各个模块设设计,并在ModeSim10.d EDA平台上验证其功能。首先对打包器打包过程进行验证,然后再对缓存模块读、写过程进行验证。
2.1 打包器功能验证与分析
打包器负责把PE发送来的数据打包成NoC内路由节点所识别的数据包,其中验证分为三部分:(1)头微片封装过程,数据包打包开始标志;(2)数据微片封装过程;(3)尾微片封装过程,数据打包结束的标志。其整个打包器的整个打包过程仿真图如图9所示。当status的状态由S0变为S1(status的值由00变为01)时,表示数据包打包开始,当datain的值由0变为000000000000000000000000011110001时,headinfo的值由0为010111110001。其中headinfo的值的后4位0101表示数据包的长度为9,前8位11110001(数据包的源地址和目的地址值)与data_in值的前8位一致,表明头部信息提取正确。当data_out的值由0变为0001111001111001000001011111000100时,表明头微片封装完毕。其数据封装如图8被标注的封装好微片数据微片所示:该微片的前12位与headinfo的值一样,后24位是datain的第一个值的后8位和第二个值的前16位组合,表明数据微片封装正确。尾微片封装过程与数据微片封装过程一致,为此不再叙述。
2.2 缓存模块功能验证与分析
缓存模块由基于二相单轨数据捆绑协议的循环FIFO和读、写控制器组成,其数据读、写过程都是在读、写控制器控制下完成的。其缓存模块内读、写控制器控制两个FIFO读、写过程仿真图如图10所示。
从仿真图10(a)可以看出:当打包器发送来的数据为0x000003c6、0x000003c7、0x000003c8、0x000003c5时,写进FIFOA的数据为0x000003c7和0x000003c5,写进FIFOB的数据为0x000003c6和0x000003c8,表明写控制器是采用轮询算法把数据写进两个FIFO内。从仿真图10(b)可以看出:FIFOA输出的数据为0x000003c7和0x000003c5,FIFOB输出的数据为0x000003c8和0x000003c6时,读控制器输出的数据为0x000003c6、0x000003c7、0x000003c8、0x000003c5,表明缓存模块的数据可以被正确读出。
2.3 资源网络接口传输延迟分析
对设计的资源网络接口传输延迟验证,本文设置两种情况:RNI-1循环FIFO和RNI-2循环FIFO。RNI-1循环FIFO是缓存模块为单个FIFO的资源网络接口;RNI-2循环FIFO是缓存模块本采用时分复用读、写的资源网络接口。在ModelSim 10.01d EDA仿真时间为纳秒环境下,连续向这两种接口注入6个位宽为32的数据。其仿真图如图11所示。
从图11仿真结果可以看出:RNI-1循环FIFO完成一个数据包的读、写的时间为80 ns,表明单个数据包传输延迟为80 ns;单个数据包的存储时间为75 ns,则单个微片传输延迟为5 ns;RNI-1循环FIFO完成一个数据包延迟为62 ns,即单个数据包传输延迟为62 ns;单个数据包的存储时间为59 ns,则单个微片传输延迟为3 ns。RNI-2循环FIFO的单个微片延迟相对RNI-1循环FIFO减少2 ns,包延迟减少18 ns。
3 结论
本文采用奇偶交替打包格式,来区分源地址和目的地址相同但不是来自同一数据包的微片。将源地址和目的地址信息加入数据微片和尾微片中,来区分源地址和目的地址都不相同的微片。采用时分复用思想来降低缓存模块的读、写过程中的延迟。最后仿真结果表明:本文设计的资源网络接口能把PE发送来的数据打包成路由节点所识别的数据包,并且单个微片传输延迟为3个时间单位,满足高速率传输要求。
参考文献
[1] SWAMINATHAN K,LAKSHMINARAYANAN G,LANG F.Design of a low power network interface for Network on chip[C].International Conference on Communications,Management and Telecommunications,2013.
[2] 陈松涛,徐金甫,刘航天.基于认证加密的NoC安全防护研究[J].电子技术应用,2016,42(7):50-52,56.
[3] 谈俊燕,华迪,Virginie Fresse,Frederic Rousseau.用于油画鉴别的自适应MPSoC中NoC仿真平台研究[J].电子技术应用,2016,42(12):76-80.
[4] MASOUD D,LILJEBERG P,PLOSILA J.Memoryefficient on-chip network with adaptive interfaces[C].Computer-Aided Design of Integrated Circuits and Systems,2012:146-159.
[5] CUONG N V,CAO B C,NAM P N.Design of a low latency network interface using dual buffer for network on chip[C].International Conference on Communications,Management and Telecommunications,2016.
[6] ATTIA B,CHOUCHENE W,ZITOUNI A,et al.Design and implementation of low latency network interface for network on chip[C].2010 5th Internation Design and Test Workshop,2010:37-42.
[7] CHOUCHENE W,ATTIA B,ZITOUNI A,et al. A low power network interface for network on chip[C].Multi-Conference on Systems,Signals & Devices,2011:37-42.
[8] 黄世锋,陈章友,张兰,等.多通道雷达数字接收机数字下变频设计[J].电子技术应用,2016,42(6):46-48,55.
[9] 王胜,屈凌翔.基于NoC的网络接口设计[J].电子与封装,2017,17(9):23-27.
[10] 李贞妮,李晶皎,王爱侠,等.片上网络跨时钟域的高速数据通信接口设计[J].单片机与嵌入式系统应用,2018,18(3):13-18.
[11] 许川佩,刘标.基于高速数据采集的NoC路由节点设计[J].微电子学与计算机,2017,34(11):140-144.
[12] 何安平,刘晓庆,陈虹.基于约束数据捆绑两相握手协议的8位异步Booth乘法器设计[J].电子学报,2018,46(4):961-968.
[13] 张恒,张迎春.一种动态时分复用方法及FPGA实现[J].无线电工程,2015,45(6):85-87,95.
作者信息:
许川佩,王纪锋,牛军浩
(桂林电子科技大学 电子工程与自动化学院 广西自动检测技术与仪器重点实验室,广西 桂林541004)