胡東偉,尚德龍,張 勇,王力男
(1.中國電子科技集團(tuán)公司 第五十四研究所,河北 石家莊 050080;2.南京智能技術(shù)研究院,江蘇 南京 211100)
伴隨著半導(dǎo)體工藝技術(shù)的飛速發(fā)展,在單芯片上能夠集成的處理器數(shù)目越來越多,處理器與處理器之間的互連問題和數(shù)據(jù)交換需求,已不是傳統(tǒng)的總線所能解決或達(dá)成。片上網(wǎng)絡(luò)(Network-on-Chip,NoC)借鑒互聯(lián)網(wǎng)的思維,采用數(shù)據(jù)包包交換的方式,實(shí)現(xiàn)處理器之間的互連和數(shù)據(jù)交換[1]。采用片上網(wǎng)絡(luò)的芯片系統(tǒng),可以實(shí)現(xiàn)成百上千處理器的集成[2-3]。
目前,片上網(wǎng)絡(luò)技術(shù)的研究如火如荼,但在片上網(wǎng)絡(luò)技術(shù)的各個(gè)方面,例如網(wǎng)絡(luò)架構(gòu)、路由算法、流量控制等問題,都未達(dá)到統(tǒng)一。因此,目前大量的片上網(wǎng)絡(luò)技術(shù)研究,都停留在系統(tǒng)仿真層面[4-6],電路實(shí)現(xiàn)方面的研究相對(duì)較少。
片上網(wǎng)絡(luò)實(shí)現(xiàn)包括網(wǎng)絡(luò)接口的實(shí)現(xiàn)和片上網(wǎng)絡(luò)路由器的實(shí)現(xiàn)[7]。網(wǎng)絡(luò)接口實(shí)現(xiàn)處理器和片上網(wǎng)絡(luò)的數(shù)據(jù)交換,路由器實(shí)現(xiàn)數(shù)據(jù)包的遠(yuǎn)程交換和路由。片上網(wǎng)絡(luò)實(shí)現(xiàn)的核心在于路由器的實(shí)現(xiàn)。首先,片上網(wǎng)絡(luò)路由器的時(shí)鐘,決定了整個(gè)網(wǎng)絡(luò)的時(shí)鐘;其次,片上網(wǎng)絡(luò)路由器,直接實(shí)現(xiàn)了片上網(wǎng)絡(luò)的路由算法和流量控制算法;最后,片上網(wǎng)絡(luò)路由器的復(fù)雜度,決定了整個(gè)網(wǎng)絡(luò)的復(fù)雜度[7]。
片上網(wǎng)絡(luò)路由器主要由輸入/輸出緩沖器和交叉開關(guān)組成[8]。交叉開關(guān)包括仲裁器和多路選擇器,其結(jié)構(gòu)已經(jīng)比較成熟。路由器的復(fù)雜度,主要由輸入/輸出緩沖器決定[9-10]。因此,路由器中緩存器的研究,引起了業(yè)界的極大重視。片上網(wǎng)絡(luò)路由器的緩沖器,一般采用先進(jìn)先出(FIFO)緩存器來實(shí)現(xiàn)。根據(jù)文獻(xiàn)[9],采用無緩存器的片上網(wǎng)絡(luò)路由器,可以使得片上網(wǎng)絡(luò)總面積消耗節(jié)約60%以上,功耗節(jié)約39%以上。根據(jù)文獻(xiàn)[10],緩存器面積占比達(dá)到75%,功耗占比達(dá)到22%。然而,無緩存的路由器增加了訪問延時(shí),降低了片上網(wǎng)絡(luò)吞吐率[9],這是所不希望的。因此,有必要尋求新的先進(jìn)先出緩存器實(shí)現(xiàn)技術(shù)。
首先,介紹同步先進(jìn)先出緩存器和異步先進(jìn)先出緩存器的電路結(jié)構(gòu)[11-12]和延遲特點(diǎn),及片上網(wǎng)絡(luò)組成的系統(tǒng)架構(gòu)和片上網(wǎng)絡(luò)路由器架構(gòu);然后,提出一種優(yōu)化的時(shí)鐘布線方案,并按照這種方案,重新設(shè)計(jì)了路由器,達(dá)到了減小復(fù)雜度及片上網(wǎng)絡(luò)延遲的效果。在此基礎(chǔ)上,筆者提出一種采用鎖存器替代寄存器的方法,以降低路由器中同步或異步先進(jìn)先出緩存器的復(fù)雜度,并提出單時(shí)鐘寄存器寫的解決方案,并進(jìn)一步提出多個(gè)先進(jìn)先出緩存器的共享實(shí)現(xiàn)方案。該方案建立在第3節(jié)先進(jìn)先出鎖存器實(shí)現(xiàn)方案的基礎(chǔ)上。
1.1.1 先進(jìn)先出緩存器的接口信號(hào)
先進(jìn)先出緩存器是一種非常常用的數(shù)字電路部件,在此對(duì)其功能不做過多的描述。圖1(a)給出了一般形式的先進(jìn)先出緩存器接口信號(hào),圖1(b)將接口信號(hào)重新命名,使得接口信號(hào)符合AXI總線形式。同步先進(jìn)先出緩存器是指緩存器的寫入時(shí)鐘CLK 1和讀出時(shí)鐘CLK 2,采用同一個(gè)時(shí)鐘。異步先進(jìn)先出緩存器是指緩存器的寫入時(shí)鐘CLK 1和讀出時(shí)鐘CLK 2,采用兩個(gè)不同的時(shí)鐘。這兩個(gè)時(shí)鐘可以是頻率相同、相位不同的兩個(gè)時(shí)鐘,也可以是既不同頻、也不同相的兩個(gè)時(shí)鐘。
1.1.2 先進(jìn)先出緩存器的電路實(shí)現(xiàn)
圖2(a)給出了同步先進(jìn)先出緩存器的電路實(shí)現(xiàn)。圖2(a)中,在寫入側(cè)和讀出側(cè),分別維持一個(gè)寫地址寄存器和讀地址寄存器,每寫入一個(gè)數(shù)據(jù)包,或讀出一個(gè)數(shù)據(jù)包,對(duì)應(yīng)的地址加1?!癉EC”和“MUX”分別是寫地址譯碼器和讀數(shù)據(jù)多路選擇器。當(dāng)寫地址和讀地址相同時(shí),先進(jìn)先出要么為“空”,要么為“滿”狀態(tài)。“空”和“滿”狀態(tài)分別由一個(gè)“FULL”寄存器來分辨。在復(fù)位狀態(tài)下,先進(jìn)先出只能為“空”,“FULL”被清零。此后,“FULL”寄存器可以跟蹤“空”和“滿”的狀態(tài)變化。
圖2(b)給出了異步先進(jìn)先出緩存器的電路實(shí)現(xiàn)。與同步先進(jìn)先出緩存器不同的是,由于讀寫地址位于不同的時(shí)鐘域,需要對(duì)讀寫地址進(jìn)行格雷編碼,并在對(duì)方時(shí)鐘域內(nèi)進(jìn)行兩次采樣,如此才能獲得穩(wěn)定的跨時(shí)鐘域地址信號(hào)。此外,為區(qū)分緩存器“空”和“滿”的狀態(tài),在讀寫時(shí)鐘域內(nèi)分別設(shè)置“EMPTY”和“FULL”寄存器,以此追蹤緩存器的狀態(tài)變化?!敖M合邏輯1”和“組合邏輯2”進(jìn)行地址比較。需注意,這里1個(gè)地址為二進(jìn)制編碼,1個(gè)地址為格雷編碼。
需要特別強(qiáng)調(diào)的是:① FIFO的數(shù)據(jù)流為單向的;② 根據(jù)圖2所示的FIFO實(shí)現(xiàn)電路,當(dāng)輸入輸出的READY都為高,且異步FIFO的兩側(cè)使用同一個(gè)時(shí)鐘時(shí),同步FIFO的輸出相對(duì)輸入延遲1個(gè)時(shí)鐘,異步FIFO的輸出相對(duì)輸入延遲3個(gè)時(shí)鐘,也就是,異步FIFO比同步FIFO具有更大的時(shí)延;③ 同步FIFO的最小深度為1,異步FIFO的最小深度為4;④ 通過FIFO與同步FIFO的級(jí)聯(lián),可構(gòu)成4以上任意深度的異步FIFO,這種級(jí)聯(lián)的異步FIFO輸入輸出延遲為4個(gè)時(shí)鐘。
圖2 先進(jìn)先出緩存器的電路實(shí)現(xiàn)
1.2.1 片上網(wǎng)絡(luò)架構(gòu)
片上網(wǎng)絡(luò)是用于多個(gè)處理器單元(Processing Element,PE)互連的一種電路,它由路由器和互連鏈路構(gòu)成。在NoC之上,PE與PE之間以數(shù)據(jù)包的形式進(jìn)行數(shù)據(jù)交換。文獻(xiàn)[3]指出,在一個(gè)路由器上連接一個(gè)處理器簇的分層架構(gòu),較一個(gè)路由器上連接單個(gè)PE的全網(wǎng)絡(luò)架構(gòu),能更好地利用處理器簇內(nèi)的本地存儲(chǔ)器,從而具有更高的多處理器并行加速比,并且,簇內(nèi)PE數(shù)目以4至8個(gè)為宜。因此,考慮圖3所示的片上網(wǎng)絡(luò)架構(gòu)。圖3中,NoC路由器(R)與R由L1鏈路相連,每一個(gè)R上連接1個(gè)處理器簇,每個(gè)簇內(nèi)包含4個(gè)PE。R與PE由L2鏈路相連。簇內(nèi)4個(gè)PE之間,每?jī)蓛捎蒐3鏈路相連(圖3中未示出PE0與PE2、PE1與PE3之間的L3)。圖3示出了1個(gè)4×4的NoC,每一個(gè)R具有X和Y兩個(gè)坐標(biāo),可用于R(對(duì)應(yīng)處理器簇)的尋址。每一個(gè)PE可通過對(duì)應(yīng)的R和簇內(nèi)PE編號(hào)來尋址。
顯然,在圖3所示的架構(gòu)中,每一個(gè)L1鏈路,至少承擔(dān)兩個(gè)處理器簇(即8個(gè)PE)的互連,因此L1的帶寬要求較高??紤]圖4所示的數(shù)據(jù)包格式。圖4中,數(shù)據(jù)包由包頭、地址段和數(shù)據(jù)段構(gòu)成。包頭內(nèi)包括了數(shù)據(jù)包類型(讀請(qǐng)求、寫請(qǐng)求、讀響應(yīng)、寫響應(yīng))、源、目標(biāo)PE地址和數(shù)據(jù)段的大小指示,地址段給出了數(shù)據(jù)段內(nèi)數(shù)據(jù)的起始地址,數(shù)據(jù)段承載PE間需要交換的數(shù)據(jù)。由于L1的帶寬要求較高,設(shè)計(jì)數(shù)據(jù)段的位寬較寬(例如128、192或256位),且整個(gè)數(shù)據(jù)包在一個(gè)時(shí)鐘周期內(nèi)傳輸[13],因此,圖4所示數(shù)據(jù)包格式,與總線有一定的相似性。
以XY靜態(tài)路由算法為例[5]。XY靜態(tài)路由對(duì)數(shù)據(jù)包首先進(jìn)行X(Y)方向的路由,再進(jìn)行Y(X)方向的路由,直至到達(dá)目的R(PE)。采用XY路由,從源PE到目的PE只有1條路徑,具有路由簡(jiǎn)單、無死鎖的優(yōu)點(diǎn),因而被廣泛采納。此外,由于R內(nèi)采用先進(jìn)先出緩存器(見2.2.2節(jié)),從源PE到目的PE整個(gè)路徑上數(shù)據(jù)包的先后順序得以保持,這也類似于總線。
圖3所示的4×4 NoC連接了64個(gè)PE,但該架構(gòu)具有向更大規(guī)模伸放的可行性。
圖3 片上網(wǎng)絡(luò)架構(gòu)示意圖
1.2.2 路由器架構(gòu)
根據(jù)圖3所示的NoC架構(gòu),路由器R的接口信號(hào)如圖5(a)所示。圖5(a)中,一個(gè)路由器上有4個(gè)相鄰NoC(即東e、南s、西w、北n 4個(gè)方向)輸入、4個(gè)PE輸入,這分別對(duì)應(yīng)圖3中4個(gè)L1和4個(gè)L2的輸入方向;相應(yīng)地,路由器有4個(gè)相鄰NoC輸出和4個(gè)PE輸出,這分別對(duì)應(yīng)圖3中4個(gè)L1和4個(gè)L2的輸出方向。圖5(b)給出了路由器的電路實(shí)現(xiàn)框圖。圖中,每個(gè)輸入數(shù)據(jù)包,首先進(jìn)入對(duì)應(yīng)的先進(jìn)先出進(jìn)行緩存,8個(gè)先進(jìn)先出緩存器的輸出,連接到8個(gè)仲裁及多路選擇器,每個(gè)仲裁及多路選擇器選擇出一個(gè)有效輸出,輸出到輸出端口的先進(jìn)先出緩存器。
仲裁及多路選擇器由仲裁器和多路選擇器構(gòu)成,其個(gè)數(shù)與輸出端口數(shù)目相同,且每個(gè)仲裁及多路選擇器都相互獨(dú)立。所有仲裁及多路選擇器的輸入通道數(shù)目,與路由器輸入先進(jìn)先出通道數(shù)目相同。輸出端口的FIFO連接到下一個(gè)路由器(或PE)的輸入FIFO,因此可以與下一個(gè)路由器(或PE)的輸入FIFO合并。因此文中后面路由器將不再有輸出FIFO。路由器輸入FIFO可以是同步FIFO,也可以是異步FIFO,2.1節(jié)將詳細(xì)討論FIFO的時(shí)鐘要求。
圖5 路由器架構(gòu)
1.2.3 虛通道和3D NoC
可以將每個(gè)物理輸入通道的數(shù)據(jù)包,根據(jù)不同的標(biāo)記排列到不同的先進(jìn)先出隊(duì)列中,由此形成虛通道。此標(biāo)記即為虛通道識(shí)別號(hào)。圖6示出了每個(gè)物理通道分為2個(gè)虛通道的示意圖。虛通道方法增加了先進(jìn)先出的個(gè)數(shù),從而增加了同時(shí)從先進(jìn)先出中輸出的數(shù)據(jù)包個(gè)數(shù),提高了數(shù)據(jù)包輸出的并行性,由此對(duì)吞吐率有一定的提升;但另一方面,仲裁及多路選擇器的輸入通道數(shù)目增多,增大了仲裁及多路選擇器的復(fù)雜度。假如仲裁及多路選擇器的輸入通道數(shù)目過多,則需要流水實(shí)現(xiàn),這又增加了路由器的延遲,因此,對(duì)虛通道的使用需謹(jǐn)慎對(duì)待[5,9]。
圖6 基于虛通道的路由器架構(gòu)
這里需要強(qiáng)調(diào)的是,倘若采用虛通道方案,則仲裁及多路選擇器的優(yōu)先級(jí),需要與時(shí)間相關(guān),不可使仲裁器長(zhǎng)時(shí)間駐留在某個(gè)優(yōu)先級(jí)。例如,假如某個(gè)輸出端口的數(shù)據(jù)包阻塞(由于它對(duì)應(yīng)的下一級(jí)先進(jìn)先出滿導(dǎo)致),且較長(zhǎng)時(shí)間無法發(fā)送出去,此時(shí),如果本地優(yōu)先級(jí)輪轉(zhuǎn),則仲裁及多路選擇器會(huì)嘗試發(fā)送與這個(gè)數(shù)據(jù)包并行的其他數(shù)據(jù)包(隸屬于其他虛通道),這會(huì)在一定程度上減小阻塞。要使優(yōu)先級(jí)與時(shí)間關(guān)聯(lián),也是很容易實(shí)現(xiàn)的,只要設(shè)置一個(gè)計(jì)數(shù)器,當(dāng)仲裁器駐留在某一優(yōu)先級(jí)超過該計(jì)數(shù)器閾值時(shí),仲裁器跳轉(zhuǎn)到下一優(yōu)先級(jí)。
3D NoC在圖5(a)所示的架構(gòu)上,增加了上下方向NoC的輸入輸出。同樣,這也增加了仲裁及多路選擇器的輸入通道數(shù)目,可流水實(shí)現(xiàn)仲裁及多路選擇器。
如圖3所示,由片上網(wǎng)絡(luò)路由器構(gòu)成的整個(gè)芯片,連接的PE較多,面積往往較龐大,因此,倘若整個(gè)芯片采用同步時(shí)鐘,則從芯片的東南角到芯片的西北角,時(shí)鐘的延遲構(gòu)成一個(gè)環(huán)路,由于布線的延遲,時(shí)鐘布線將很難收斂,或時(shí)鐘速率很難提高。此外,由于這樣的芯片功耗往往較高,需要對(duì)每個(gè)PE進(jìn)行動(dòng)態(tài)電壓頻率伸縮,這又需要各個(gè)PE的時(shí)鐘獨(dú)立。因此,最簡(jiǎn)單的辦法是,對(duì)圖5(b)所示的輸入先進(jìn)先出,采用異步先進(jìn)先出[7,13]。這可以實(shí)現(xiàn):① 各個(gè)PE的時(shí)鐘解耦合;② 相鄰NoC路由器的時(shí)鐘解耦合。
但是,如2.1.2節(jié)所示,異步先進(jìn)先出的缺陷是,異步先進(jìn)先出兩端的延遲較大,這將導(dǎo)致整個(gè)NoC上數(shù)據(jù)傳輸時(shí)的延遲較大。因此,筆者提出如下優(yōu)化方案:
(1) PE與R之間,依舊采用異步先進(jìn)先出,以實(shí)現(xiàn)各個(gè)PE時(shí)鐘獨(dú)立。
(2)對(duì)所有的R,從R到R,采用兩個(gè)獨(dú)立的時(shí)鐘,從西到東、從北到南為CLK1,從東到西、從南到北為CLK2。
(3)對(duì)所有的R,從R到R的先進(jìn)先出,采用同步先進(jìn)先出。
圖7為以上時(shí)鐘方案的示意圖。按照此時(shí)鐘方案,NoC路由器R將涉及到多個(gè)時(shí)鐘域,圖8給出了此時(shí)路由器的總體架構(gòu)。
圖7 優(yōu)化的NoC時(shí)鐘方案
圖8中,PE到R的數(shù)據(jù)包,首先分路為2路,一路將向東、南NoC端口輸出,因此需要通過異步先進(jìn)先出轉(zhuǎn)換到CLK 1時(shí)鐘域;另一路將向西、北NoC端口輸出,因此需要通過異步先進(jìn)先出轉(zhuǎn)換到CLK 2時(shí)鐘域。CLK 1和CLK 2都只是沿平面的一個(gè)方向推進(jìn),即東南方向或西北方向推進(jìn),時(shí)鐘的延遲可以在這個(gè)方向逐漸遞增,因此,時(shí)鐘布線時(shí),較易做到時(shí)鐘收斂。為減小復(fù)雜度,在同一個(gè)R內(nèi),將不再支持由PE到PE路由。由PE到PE的訪問,將全部通過圖3中L3鏈路實(shí)現(xiàn)。因此,圖8中,CLK 1時(shí)鐘域下的仲裁及多路選擇器陣列和CLK 2時(shí)鐘域下的仲裁及多路選擇器陣列,每個(gè)時(shí)鐘域下均為4個(gè)2選1(至PE),和2個(gè)6選1(至NoC)的仲裁和多路選擇,這樣仲裁及多路選擇器的復(fù)雜度大大降低。需強(qiáng)調(diào)的是,圖8中的PE到R的異步先進(jìn)先出,和R到PE的異步先進(jìn)先出,分成了2個(gè),但相應(yīng)地,它們的數(shù)據(jù)包流量也減半,因此每一個(gè)異步先進(jìn)先出的深度亦減半,先進(jìn)先出的復(fù)雜度并沒有較圖5(b)方案增加。
2.2.1 NoC路由器的實(shí)現(xiàn)實(shí)驗(yàn)
分別按照?qǐng)D5(b)所示的架構(gòu)和按照?qǐng)D8所示的架構(gòu),對(duì)NoC路由器R進(jìn)行設(shè)計(jì)實(shí)踐。實(shí)踐中圖5(b)只有輸入異步先進(jìn)先出,沒有輸出異步先進(jìn)先出,先進(jìn)先出深度選取為8。圖8所示異步先進(jìn)先出深度為4。為盡量保證比較的公平性,圖8的左側(cè)增加4個(gè)分路器,將每個(gè)PE輸入的數(shù)據(jù)包由1路分成2路;圖8的右側(cè)亦沒有輸出異步先進(jìn)先出。
表1給出了實(shí)現(xiàn)的綜合結(jié)果。實(shí)驗(yàn)中先進(jìn)先出采用寄存器實(shí)現(xiàn),工藝為TSMC 28nm HPC,9Track,RVT。從表1可以看到,采用圖8所示結(jié)構(gòu),組合邏輯明顯減小,時(shí)序邏輯與圖5(b)的相當(dāng)。這與前面的分析是一致的。
表1 不同結(jié)構(gòu)下的NoC路由器面積對(duì)比 μm2
圖9 不同跳數(shù)下的鏈路延遲
2.2.2 延遲仿真實(shí)驗(yàn)
為檢驗(yàn)圖7所示的時(shí)鐘優(yōu)化結(jié)果,按照?qǐng)D3所示架構(gòu),從源PE往目的PE發(fā)送數(shù)據(jù)包,檢驗(yàn)不同跳數(shù)(通過1個(gè)NoC路由器R,記為1跳)下鏈路的延遲。仿真中,所有的時(shí)鐘都設(shè)置為同一個(gè)時(shí)鐘,以該時(shí)鐘的時(shí)鐘計(jì)數(shù)來評(píng)估鏈路延遲。圖9給出了不同跳數(shù)下按照?qǐng)D5所示R和圖8所示R實(shí)現(xiàn)時(shí)的鏈路延遲結(jié)果。從圖9可以看到,在所有的跳數(shù)下,優(yōu)化的時(shí)鐘方案,都減小了鏈路延遲;當(dāng)跳數(shù)為7時(shí),全異步FIFO方案時(shí),鏈路延遲為24個(gè)時(shí)鐘,優(yōu)化后,鏈路延遲只有12個(gè)時(shí)鐘,只有原來的50%。
如前所述,數(shù)據(jù)包的位寬較寬,這導(dǎo)致NoC路由器R內(nèi)的先進(jìn)先出占用較多資源。一般情況下,先進(jìn)先出的深度不夠深,其存儲(chǔ)陣列不足以使用現(xiàn)成的SRAM宏單元,需采用定制電路實(shí)現(xiàn)。但定制電路的設(shè)計(jì)需耗費(fèi)較長(zhǎng)時(shí)間,在很多情況下很不方便。此時(shí),最簡(jiǎn)單的辦法是采用寄存器實(shí)現(xiàn)。如表1所示,此時(shí)寄存器占據(jù)了整個(gè)R內(nèi)最大部分的面積開銷。
為進(jìn)一步減小先進(jìn)先出的實(shí)現(xiàn)代價(jià),推薦使用鎖存器來替代寄存器,構(gòu)建同步或異步先進(jìn)先出。鎖存器的模型如圖10(a)所示。圖10中,當(dāng)使能信號(hào)EN為高時(shí),輸入數(shù)據(jù)D將貫通到鎖存器輸出端Q;當(dāng)EN為低時(shí),鎖存器的輸出值Q將保持不變。當(dāng)EN、D都是由時(shí)鐘CLK驅(qū)動(dòng)時(shí),數(shù)據(jù)D的延遲有可能比EN大,也可能比EN小,如圖10(b)所示。這將導(dǎo)致鎖存器內(nèi)鎖存不同時(shí)鐘下的數(shù)據(jù)(D12和D21),導(dǎo)致錯(cuò)誤。此外,倘若錯(cuò)誤地址上的EN信號(hào)產(chǎn)生毛刺,則有可能將數(shù)據(jù)寫到錯(cuò)誤的地址上。因此,針對(duì)鎖存器的寫數(shù)據(jù),最簡(jiǎn)單的辦法是,數(shù)據(jù)保持3個(gè)時(shí)鐘,只在中間時(shí)鐘打開EN信號(hào),如圖10(c)所示。
圖10 鎖存器模型及鎖存器寫存在的問題
但NoC路由器內(nèi)的先進(jìn)先出需要高吞吐率,使用3個(gè)時(shí)鐘來完成寫,是不可以接受的。筆者推薦圖11的鎖存器寫方法。圖11(a)示出了鎖存器寫的時(shí)序。圖中,鎖存器使能信號(hào)只是在時(shí)鐘低電平的半周期內(nèi)有效。鎖存器的輸入數(shù)據(jù),是原始輸入數(shù)據(jù)(見圖10(b))延遲半個(gè)時(shí)鐘周期。這延遲半個(gè)時(shí)鐘周期,可以通過一個(gè)下降沿采樣的寄存器來實(shí)現(xiàn),如圖11(b)所示。這樣,使用圖11(b)所示電路對(duì)先進(jìn)先出的輸入數(shù)據(jù)進(jìn)行處理后,先進(jìn)先出的存儲(chǔ)陣列即可使用鎖存器來實(shí)現(xiàn)。
圖11 單周期鎖存器寫方法
此方法要求,在時(shí)鐘的前半個(gè)周期內(nèi),地址譯碼已經(jīng)穩(wěn)定,這樣不至于在鎖存器使能信號(hào)打開時(shí),數(shù)據(jù)寫到錯(cuò)誤的地址上。由于NoC路由器內(nèi)的先進(jìn)先出深度都很小(幾個(gè)到幾十個(gè)),地址位寬很小,半個(gè)時(shí)鐘周期內(nèi)實(shí)現(xiàn)穩(wěn)定譯碼,是很容易達(dá)到的。
需要強(qiáng)調(diào)的是,圖11(a)的虛線處,鎖存器可能暫時(shí)鎖存前一個(gè)數(shù)據(jù)D10或D20,但由于在鎖存器使能信號(hào)的下降沿前后,數(shù)據(jù)穩(wěn)定為D11和D21,因此鎖存器能保證鎖存到正確數(shù)據(jù)。因此,使能信號(hào)上升沿的數(shù)據(jù)振蕩,只是造成輕微的功耗損失,不影響鎖存數(shù)據(jù)的正確性。
表2給出了圖5(b)和圖8的NoC路由器,使用寄存器和使用鎖存器時(shí)的面積對(duì)比。綜合時(shí)使用的工藝同前。從表2中可以看到,使用鎖存器,大大減小了NoC路由器的面積消耗。
表2 寄存器和鎖存器下的NoC路由器面積對(duì)比 μm2
在圖8中,CLK 1和CLK 2域,分別有兩個(gè)同步先進(jìn)先出,且它們的深度為圖8中異步先進(jìn)先出深度的2倍。本節(jié)進(jìn)一步提出,將CLK 1域和CLK 2域的4個(gè)同步先進(jìn)先出(FIFO 1、FIFO 2、FIFO 3和FIFO 4)深度進(jìn)行共享。也就是,F(xiàn)IFO 1可以從FIFO 2借用若干條目(entry)的FIFO單元,F(xiàn)IFO 2可以從FIFO 1、FIFO 3借用若干條目的先進(jìn)先出單元,F(xiàn)IFO 3可以從FIFO 2、FIFO 4借用若干條目的FIFO單元,F(xiàn)IFO 4可以從FIFO 3借用若干條目的先進(jìn)先出單元[14]。
圖12(a)給出了兩個(gè)先進(jìn)先出共享的原理框圖。
(a) 兩個(gè)FIFO共享存儲(chǔ)陳列示意圖
圖12中有一個(gè)大的、基于鎖存器的存儲(chǔ)陣列,它的上半部分為FIFO 1,下半部分為FIFO 2。上半部分和下半部分的分界,由一個(gè)寄存器Addr1_E/Addr2_S來指示,該寄存器可配置。倘若FIFO 1和FIFO 2在同一個(gè)時(shí)鐘域內(nèi),則很容易實(shí)現(xiàn)存儲(chǔ)陣列同時(shí)寫兩個(gè)數(shù)據(jù)、讀兩個(gè)數(shù)據(jù)。這時(shí),存儲(chǔ)陣列相當(dāng)于多端口寄存器文件。倘若FIFO 1和FIFO 2不在同一個(gè)時(shí)鐘域內(nèi),則由于鎖存器無需時(shí)鐘,只有分界地址在兩個(gè)時(shí)鐘域內(nèi)都使用,需保證使用該分界地址時(shí),兩個(gè)時(shí)鐘域內(nèi)的分界地址都有效。這有很多辦法可實(shí)現(xiàn),例如,可以在一個(gè)時(shí)鐘域內(nèi)寫入,在另一個(gè)時(shí)鐘域內(nèi)讀出,并等待兩個(gè)時(shí)鐘域內(nèi)寫入和讀出的數(shù)值相同來保證;也可以在CLK 1域?qū)懭耄瑐鞯紺LK 2域,然后又從CLK 2域傳回CLK 1域,比較傳回的數(shù)值與寫入的數(shù)值。
以上方法可實(shí)現(xiàn)靜態(tài)的先進(jìn)先出共享。如果設(shè)置一個(gè)寄存器,記錄分界地址前后(即wr_addr1或rd_addr1到Addr1_E/Addr2_S,和Addr1_E/Addr2_S到wr_addr2或rd_addr2),先進(jìn)先出內(nèi)容是否為空,則可以判斷是否可以進(jìn)行分界地址的動(dòng)態(tài)修改。只有分界地址前后先進(jìn)先出內(nèi)容都為空時(shí),則分界地址的修改方可進(jìn)行。如此可實(shí)現(xiàn)先進(jìn)先出的動(dòng)態(tài)共享。同樣,分界地址更改后,需保證修改后的地址,在相關(guān)時(shí)鐘域內(nèi)都穩(wěn)定后,相關(guān)時(shí)鐘域內(nèi)的讀寫方可繼續(xù)。
圖12(b)給出了4個(gè)同步先進(jìn)先出共享的原理框圖。FIFO 2和FIFO 3的分界地址,涉及到跨時(shí)鐘域問題。該分界地址前后的狀態(tài),也處于不同的時(shí)鐘域。
也可考慮異步先進(jìn)先出的共享。但非級(jí)聯(lián)異步先進(jìn)先出的地址涉及到格雷編碼,地址需連續(xù)變化為宜。此外,圖8中的異步先進(jìn)先出深度只有4,已是異步先進(jìn)先出的最小深度,共享的意義不大。倘若需要更大深度的異步先進(jìn)先出共享,則筆者主張以級(jí)聯(lián)的方式實(shí)現(xiàn):通過深度為4的異步先進(jìn)先出實(shí)現(xiàn)寫到讀時(shí)鐘域的轉(zhuǎn)換,只對(duì)讀時(shí)鐘域內(nèi)的同步先進(jìn)先出實(shí)現(xiàn)共享。
在圖8所示NoC路由器實(shí)現(xiàn)中,仿真及綜合驗(yàn)證了這種共享先進(jìn)先出方法的可行性。綜合時(shí)采用的工藝庫同前。表3給出了采用這種共享先進(jìn)先出和不采用這種共享先進(jìn)先出的復(fù)雜度對(duì)比??梢钥吹?,采用共享先進(jìn)先出的方法,先進(jìn)先出的組合邏輯復(fù)雜度有所增加。這是由于共享先進(jìn)先出后,所有先進(jìn)先出的地址位寬都需要加寬,輸入數(shù)據(jù)地址譯碼器和輸出數(shù)據(jù)多路選擇器的復(fù)雜度將變大。表3中從比例上看,共享先進(jìn)先出復(fù)雜度的提高還較顯著。這在面積容忍度較大,而對(duì)數(shù)據(jù)靈活性要求較高的場(chǎng)合[15-17],是可以接受的,有較大的現(xiàn)實(shí)意義。
表3 不共享和共享先進(jìn)先出的面積對(duì)比 μm2
片上網(wǎng)絡(luò)是大規(guī)模多處理器互連的一項(xiàng)基礎(chǔ)技術(shù)。雖經(jīng)過多年的研究,在片上網(wǎng)絡(luò)的實(shí)現(xiàn)上仍然莫衷一是。筆者從實(shí)現(xiàn)的角度,提出了片上網(wǎng)絡(luò)的時(shí)鐘優(yōu)化技術(shù)、基于鎖存器的先進(jìn)先出實(shí)現(xiàn)技術(shù)和多個(gè)先進(jìn)先出共享技術(shù)。由于直接面向?qū)崿F(xiàn),因此具有較大的現(xiàn)實(shí)意義,相信會(huì)對(duì)業(yè)界產(chǎn)生一定的推動(dòng)作用。