文獻標識碼: 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)