丁一歡,何衛(wèi)鋒
(上海交通大學(xué)微納電子學(xué)系,上海 200240)
隨著多核、眾核技術(shù)的發(fā)展,越來越多的處理器核被集成到一起,因此也對片上多個(gè)處理器核的互連機(jī)制提出了更高的要求。NOC通過多個(gè)路由器組成特定的拓?fù)浣Y(jié)構(gòu),實(shí)現(xiàn)了并行化處理數(shù)據(jù)通信,因此具有高帶寬、高利用率和良好的擴(kuò)展性[1]。目前NOC中最常用的數(shù)據(jù)交換方式是分組交換方式,即數(shù)據(jù)從源節(jié)點(diǎn)以分組的形式在路由器間進(jìn)行存儲(chǔ)、轉(zhuǎn)發(fā),直至到達(dá)目的節(jié)點(diǎn),面向這種分組交換方式的路由器即分組交換路由器。圖1展示了一個(gè)應(yīng)用于2D Mesh網(wǎng)絡(luò)的分組交換路由器,可以同時(shí)處理來自四個(gè)方向和本地處理器核心的數(shù)據(jù)包,并通過路由計(jì)算、仲裁等操作,將數(shù)據(jù)發(fā)往各自目標(biāo)方向的輸出端口。
圖1 2D Mesh結(jié)構(gòu)NOC中的Router
在NOC中,路由器是構(gòu)成整個(gè)網(wǎng)絡(luò)的核心部件,也占據(jù)了整個(gè)網(wǎng)絡(luò)大部分的功耗開銷。從硬件層面來說,為了降低電路的功耗,最常見的做法是將電路電壓降低到晶體管近閾值或亞閾值區(qū)域,以顯著減小動(dòng)態(tài)翻轉(zhuǎn)功耗[2]。
低電壓電路的功耗比正常電壓電路小很多,但會(huì)對PVT波動(dòng)(Process,Voltage,Temperature variations)更加敏感。當(dāng)發(fā)生制造工藝偏差、電壓波動(dòng)和外界溫度變化時(shí),電路的延時(shí)會(huì)受到嚴(yán)重的影響,甚至?xí)?dǎo)致功能錯(cuò)誤。因此相較于正常電壓電路,低電壓下的電路設(shè)計(jì)需要有更多的時(shí)間裕度,這限制了低電壓電路的最高工作頻率。
在此背景下,錯(cuò)誤檢測與糾正(EDAC:Error Detection and Correction)技術(shù)[3-4]能夠有效減小PVT variations的影響,放松對電路設(shè)計(jì)裕度的要求。EDAC技術(shù)通過在部分電路節(jié)點(diǎn)插入EDAC單元,來對電路中出現(xiàn)的時(shí)序錯(cuò)誤進(jìn)行檢測和糾正,使得電路可以在較高的頻率下保持功能正確。由于EDAC技術(shù)可以提高低電壓電路的最高運(yùn)行頻率,因此也可以得到能耗的收益。
因此本文設(shè)計(jì)了一種可以工作在超低電壓下的片上分組交換路由器,首先完成路由器的6級流水線結(jié)構(gòu)后,將傳統(tǒng)的REG時(shí)序單元替換為LATCH單元,并在部分關(guān)鍵路徑終點(diǎn)插入了EDAC單元進(jìn)行檢錯(cuò)和糾錯(cuò),最后基于一個(gè)4×4的2D Mesh NOC系統(tǒng)驗(yàn)證了此路由器的性能。
路由器的基本結(jié)構(gòu)包括輸入緩沖區(qū)、路由計(jì)算、端口仲裁和交叉開關(guān)模塊,如圖2。設(shè)計(jì)中的數(shù)據(jù)包設(shè)定為32比特,其中有8比特代表了此數(shù)據(jù)的源地址和目的地址(見表1)。因此輸入緩沖區(qū)采用了位寬為32比特的異步FIFO。本文選擇的路由算法為二維XY路由,Switch Allocation模塊根據(jù)優(yōu)先級輪詢的結(jié)果對前級的輸入端口申請進(jìn)行仲裁,仲裁失敗或下級已滿時(shí),會(huì)暫停部分流水線恢復(fù)數(shù)據(jù)。
表1 數(shù)據(jù)包格式
圖2 Router基本結(jié)構(gòu)
考慮到仲裁失敗時(shí)數(shù)據(jù)恢復(fù)的需要,在計(jì)算路由前增加了一級流水線FO。由于FIFO讀取和寫入為2級,因此一共為6級流水線。Router的6級流水線結(jié)構(gòu)如圖3。
圖3 Router流水線結(jié)構(gòu)圖
在以上描述的路由器流水線結(jié)構(gòu)基礎(chǔ)上,采用正沿觸發(fā)LATCH(即PLATCH)作為主要時(shí)序單元實(shí)現(xiàn)了6級流水線。相較于傳統(tǒng)的REG單元來說,由于LATCH對電平敏感,具有時(shí)間借用的特性,因此具有更強(qiáng)的容錯(cuò)性,也非常適合結(jié)合EDAC技術(shù)進(jìn)一步提高電路的性能。
完成RTL代碼后,將TSMC28nmHPC標(biāo)準(zhǔn)單元庫在0.4V下重新特征化提取,并用于Design Compiler綜合,然后在Prime Time中分析綜合后網(wǎng)表的關(guān)鍵路徑分布。根據(jù)路徑分布結(jié)果,Router中的關(guān)鍵路徑都集中于少數(shù)的Endpoints,因此可以運(yùn)用EDAC技術(shù)進(jìn)行優(yōu)化,即在這些關(guān)鍵Endpoints處插入EDAC單元進(jìn)行檢錯(cuò),從而提高電路的運(yùn)行頻率。由于關(guān)鍵Endpoints數(shù)量適中,因此不會(huì)導(dǎo)致EDAC單元插入開銷過大。
在本設(shè)計(jì)中采用的EDAC單元結(jié)構(gòu)如圖4a),由一個(gè)CLK_edac控制的Shadow LATCH和一個(gè)異或門來實(shí)現(xiàn)檢錯(cuò)。CLK_edac頻率和CLK相同,但高電平時(shí)間比CLK更長一些。EDAC單元的檢錯(cuò)過程的波形示意圖見圖4 b)。在圖4 b)最后一個(gè)周期,正確數(shù)據(jù)D在CLK的下降沿到來后才翻轉(zhuǎn),發(fā)生了時(shí)序錯(cuò)誤,導(dǎo)致Error信號為高,此時(shí)的Q_edac的值才是正確值。EDAC單元的檢測窗口大小約為CLK_edac與CLK的高電平時(shí)間之差。
圖4 a)EDAC單元結(jié)構(gòu)圖;b)EDAC單元糾錯(cuò)過程波形示意圖
在Router電路中,根據(jù)Primer Time分析的路徑分布,最易發(fā)生時(shí)序錯(cuò)誤的關(guān)鍵路徑集中在計(jì)算arbiterfail信號和仲裁結(jié)果arbiter信號的路徑上。因此在這兩類信號后插入EDAC單元進(jìn)行檢錯(cuò),具體的方法是將圖4 a)中的EDAC CELL接到相應(yīng)的數(shù)據(jù)端,通過相應(yīng)的Error信號判斷是否發(fā)生時(shí)序錯(cuò)誤。所插入EDAC單元的數(shù)量為20個(gè)。
插入EDAC單元進(jìn)行檢錯(cuò)后,糾錯(cuò)機(jī)制可以有兩種:
(1)若后級路徑為短路徑,通過Error信號選擇 Q_edac 作為正確的輸出,送到后級運(yùn)算即可。
(2)若后級路徑也為長路徑,則必須立即將前后級的流水線暫停,同時(shí)通過Error選擇Q_edac作為本級輸入,下一個(gè)周期就可以正確運(yùn)算。
圖5 EDAC糾錯(cuò)機(jī)制圖解
其中第1種方式可以進(jìn)一步簡化為直接將Q_edac作為正確的輸出。如圖6所示,在本設(shè)計(jì)中,當(dāng)檢測到SA級出現(xiàn)時(shí)序錯(cuò)誤,會(huì)立即暫停FIFO、FO、XB級流水線,并將EDAC CELL中的正確值恢復(fù)到SA級相應(yīng)的輸入端。
圖6 EDAC糾錯(cuò)波形圖
插入EDAC單元后的Router流水線結(jié)構(gòu)圖如圖7所示。
圖7 插入EDAC單元后的Router流水線結(jié)構(gòu)圖
由于所提出的Router設(shè)計(jì)采用了LATCH為時(shí)序單元,采用的時(shí)鐘會(huì)與傳統(tǒng)REG單元有所差別,此處簡單介紹本設(shè)計(jì)中采用的時(shí)鐘和時(shí)鐘產(chǎn)生模塊。基于PLATCH結(jié)構(gòu)的流水線一般采用兩相時(shí)鐘控制,相鄰兩級的時(shí)鐘高電平不會(huì)重疊。但與此同時(shí),如果采用PLATCH設(shè)計(jì),兩相時(shí)鐘的周期需要變成REG電路時(shí)鐘周期的兩倍,才能確保功能正確。
針對這一點(diǎn),本文創(chuàng)新性地采用了三相時(shí)鐘控制,時(shí)鐘周期理論上只需要變成REG電路的3/2倍,既保持了不需要進(jìn)行短路徑填充的優(yōu)點(diǎn),也減小了對運(yùn)行頻率的影響。需要注意的是,采用三相時(shí)鐘控制后,各級數(shù)據(jù)不再是同步更新。因此當(dāng)STALL信號觸發(fā)時(shí),也不需要立即暫停前級流水線??梢詫⑾嚓P(guān)控制信號傳到前級打拍再處理,這也進(jìn)一步簡化了數(shù)據(jù)恢復(fù)的控制邏輯。
在本文提出的Router設(shè)計(jì)中,由CLK1控制FIFO級讀數(shù)據(jù)操作和SA級,由CLK2控制FO級和XB級,由CLK3控制RC級和FIFO級寫數(shù)據(jù)操作。設(shè)計(jì)中的三相時(shí)鐘和clk_edac的產(chǎn)生電路[5]如圖8。設(shè)計(jì)中采用的CLK_edac占空比為1/3。
圖8 a)時(shí)鐘產(chǎn)生模塊電路圖 b)時(shí)鐘產(chǎn)生模塊波形圖
將前文描述的綜合網(wǎng)表基于IC Compiler布局布線,得到了最終的4×4 2D Mesh NOC版圖,如圖9所示。版圖面積為1619.8um×533.74um,包含16個(gè)路由節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)包括一個(gè)面積為114.1um×113.4um的Router和一個(gè)等高的數(shù)據(jù)處理單元。
圖9 4×4 2D Mesh NOC版圖
為了驗(yàn)證所設(shè)計(jì)的路由器的性能,搭建了一個(gè)4×4的2D Mesh NOC作為testbench。此網(wǎng)絡(luò)中含有16個(gè)按照設(shè)定的數(shù)據(jù)包格式收發(fā)數(shù)據(jù)的處理單元,16個(gè)所設(shè)計(jì)的路由器,以及前文所描述的時(shí)鐘產(chǎn)生模塊。數(shù)據(jù)處理單元具有收發(fā)數(shù)據(jù)和計(jì)數(shù)的功能。數(shù)據(jù)處理單元發(fā)送數(shù)據(jù)可以有兩種模式:輪詢模式和用戶配置模式。我們采用的是輪詢模式,即按照0000~1111的順序依次向其他地址發(fā)送數(shù)據(jù)。另外為了比較EDAC設(shè)計(jì)的優(yōu)勢,將不具備檢錯(cuò)糾錯(cuò)功能的Router作為Baseline電路,在同樣的testbench和輸入激勵(lì)下也進(jìn)行仿真。
仿真關(guān)注的性能指標(biāo)包括NOC網(wǎng)絡(luò)的最高工作頻率、丟包率、吞吐率以及Router模塊的功耗開銷等。
本文設(shè)計(jì)的Router在測試中得到的正常運(yùn)行最小時(shí)鐘周期為16.2ns,即整個(gè)NOC網(wǎng)絡(luò)最高工作頻率為61.73MHz。在時(shí)鐘周期小于16.2ns時(shí),發(fā)生時(shí)序錯(cuò)誤,導(dǎo)致出現(xiàn)丟包,對不同周期下同樣時(shí)間內(nèi)的丟包數(shù)和接收數(shù)進(jìn)行統(tǒng)計(jì),得到曲線如圖。圖10的橫坐標(biāo)為仿真設(shè)置的時(shí)鐘周期大小,縱坐標(biāo)為丟包數(shù)與接收數(shù),由圖可見,隨著時(shí)鐘周期減小,丟包越來越頻繁,接收到的數(shù)據(jù)包越來越少。由于每次丟包后會(huì)請求重傳一次數(shù)據(jù),因此這會(huì)導(dǎo)致網(wǎng)絡(luò)的總運(yùn)行時(shí)間迅速增加。
圖10 網(wǎng)絡(luò)丟包數(shù)與接收數(shù)隨周期變化曲線
由丟包數(shù)和接收數(shù)可以計(jì)算得到丟包率隨周期變化曲線,對不具有檢錯(cuò)糾錯(cuò)功能的Router也進(jìn)行了同樣的仿真后,將兩者丟包率曲線進(jìn)行對比。由圖11所示,可以看到采用EDAC設(shè)計(jì)的Router丟包率始終小于Baseline電路,且在16.2ns時(shí)丟包率已經(jīng)降為0,而Baseline電路直到17.4ns時(shí)才不再丟包。因此采用EDAC設(shè)計(jì)可以提高Router對時(shí)序錯(cuò)誤的容忍能力,并使Router的工作頻率提高了7.4%。
圖11 網(wǎng)絡(luò)丟包率隨周期變化曲線
此外隨時(shí)鐘周期減小,電路丟包率的增長趨勢也有所不同。在圖11的A區(qū)域,兩種Router的丟包率都隨周期減小而保持緩慢的增長,且丟包率數(shù)值接近,基本在10%以內(nèi)。當(dāng)時(shí)鐘周期繼續(xù)減小時(shí),如B區(qū)域所示,Baseline電路的丟包率開始迅速增大,此時(shí)采用EDAC設(shè)計(jì)的Router丟包率曲線仍維持A區(qū)域的趨勢不變,曲線斜率明顯更小。注意到在時(shí)鐘周期為13.2ns時(shí),Baseline電路的丟包率達(dá)45%,此時(shí)采用EDAC設(shè)計(jì)的丟包率僅為15%。當(dāng)時(shí)鐘周期小于13.2ns時(shí),即為圖11的C區(qū)域,Baseline電路丟包率的增長趨勢又趨于平緩,而采用EDAC設(shè)計(jì)的電路丟包率隨周期減小開始迅速增大。因此整體而言在圖11的B區(qū)域內(nèi),采用EDAC設(shè)計(jì)的優(yōu)勢最明顯。
當(dāng)以最小周期16.2ns運(yùn)行時(shí),整個(gè)NOC網(wǎng)絡(luò)吞吐率為1.93E+10 bps。由于不出錯(cuò)時(shí)發(fā)送完所有數(shù)據(jù)需要的周期數(shù)固定,當(dāng)運(yùn)行周期大于16.2ns時(shí),運(yùn)行時(shí)間會(huì)變長,網(wǎng)絡(luò)吞吐率隨之下降;當(dāng)運(yùn)行周期小于16.2ns,由于出現(xiàn)大量丟包,需要大量的重傳數(shù)據(jù)導(dǎo)致時(shí)鐘周期數(shù)增大,吞吐率也會(huì)迅速下降。因此網(wǎng)絡(luò)最大吞吐率為1.93E+10bps,而Baseline電路的最大吞吐率在17.4ns處得到,為1.80E+10bps。
表2 網(wǎng)絡(luò)吞吐率與時(shí)鐘周期
除了網(wǎng)絡(luò)運(yùn)行頻率和吞吐率有所提升以外,由于采用了超低電壓設(shè)計(jì),NOC中路由器的整體功耗也很小。對于單個(gè)路由器設(shè)計(jì),以Router_0000的各指標(biāo)為例。
表3 Router_0000性能指標(biāo)
根據(jù)PrimeTime中的功耗報(bào)告得到Router_0000中各類型功耗分布圖和各個(gè)子模塊的功耗分布圖,分別為圖12 a)和圖12 b)。由圖12 a)可以看到時(shí)鐘網(wǎng)絡(luò)造成的功耗開銷占了50%左右,同時(shí)所有單元的靜態(tài)功耗也占了約50%。這一點(diǎn)也符合最小能量點(diǎn)(MEP)的特征。
圖12 a)Router_0000中各類型功耗分布圖;b)Router_0000子模塊功耗分布圖
由圖12 b)可以看到在子模塊中,輸入緩沖區(qū)的FIFO功耗開銷最大,RC模塊和SA模塊次之。顯然頻繁的數(shù)據(jù)讀寫會(huì)導(dǎo)致FIFO相對于其他模塊消耗更多的能量,此外由于RC模塊進(jìn)行了優(yōu)化設(shè)計(jì),添加了備份數(shù)據(jù)的存儲(chǔ),SA模塊增加了EDAC單元和更多的控制邏輯,因此也會(huì)有較多的功耗開銷。
Router_0000的峰值功耗為9.54mW,電路功耗隨時(shí)間的變化曲線呈現(xiàn)周期性的規(guī)律。
圖13 Router_0000瞬時(shí)功耗變化曲線
對NOC網(wǎng)絡(luò)中16個(gè)Router的功耗信息進(jìn)行了統(tǒng)計(jì),結(jié)果如圖14,圖中每個(gè)點(diǎn)代表一個(gè)Router的Pavg。
圖14 16個(gè)Router的平均功耗
由圖14可見,在4×4的NOC網(wǎng)絡(luò)中,功耗最低的是處于4個(gè)角處的Router(即Router 6、7、10、11),其次是邊緣上的Router(即Router 2、3、5、8、9、12、14、15),功耗最大的是網(wǎng)絡(luò)中心位置的Router(即Router 1、4、13、16)。這是由于處于中心位置的Router需要處理更多方向的數(shù)據(jù),因此中心位置的Router也是最容易發(fā)生堵塞的。將這16個(gè)Router的Pavg結(jié)果取平均后,可以得到:所設(shè)計(jì)的Router采用TSMC 28nmHPC工藝實(shí)現(xiàn),在0.4V,61.73 MHz下運(yùn)行時(shí),平均每周期能耗僅為2.07 pJ。
本文結(jié)合低電壓EDAC(Error Detection and Correction)技術(shù)和三相時(shí)鐘流水線設(shè)計(jì)的優(yōu)點(diǎn),提出了一種面向低電壓的片上分組交換路由器,并在一個(gè)4×4的2D Mesh網(wǎng)絡(luò)中驗(yàn)證了性能?;赥SMC28HPC工藝的后仿結(jié)果表明,在0.4V下該路由器最高工作頻率達(dá)到61.73MHz,比Baseline電路相比提高了7.4%,且每個(gè)路由器一個(gè)周期的平均能耗僅為2.07 pJ。