微處理器和多處理器片上系統(tǒng)MPSOC設(shè)計(jì)的新紀(jì)元
可配置處理器標(biāo)志著第四代微處理器設(shè)計(jì)的開(kāi)始,這種技術(shù)更加適合片上系統(tǒng)SOC的設(shè)計(jì)。每一代處理器持續(xù)大約十年時(shí)間,每個(gè)時(shí)代的處理器適合當(dāng)時(shí)那個(gè)時(shí)期的需要。大約在二十世紀(jì)七十年代出現(xiàn)了第一代處理器,這個(gè)時(shí)期的處理器設(shè)計(jì)只是簡(jiǎn)單地追求性能,從4位處理器到早期的16位和32位微處理器。這種性能的提升奠定了二十世紀(jì)八十年代個(gè)人計(jì)算機(jī)PC和工作站的基礎(chǔ)。
個(gè)人計(jì)算機(jī)和工作站的增長(zhǎng)使得微處理器設(shè)計(jì)進(jìn)入了二十世紀(jì)八十年代的第二代微處理器研制時(shí)期。精簡(jiǎn)指令集RISC設(shè)計(jì)時(shí)代發(fā)生在二十世紀(jì)九十年代。在這個(gè)時(shí)期,即使像X86這樣堅(jiān)定的復(fù)雜指令集CISC處理器也假裝成精簡(jiǎn)指令集RISC體系結(jié)構(gòu)。在最初的這三代處理器的成長(zhǎng)和發(fā)展過(guò)程中,微處理器設(shè)計(jì)專(zhuān)家將處理器設(shè)計(jì)成固定的、單個(gè)的和可重用的模塊。但是,在二十世紀(jì)九十年代隨著專(zhuān)用集成電路ASIC和片上系統(tǒng)SOC制造技術(shù)的發(fā)展為微處理器設(shè)計(jì)進(jìn)入第四代(即后RISC、可配置處理器)打下了堅(jiān)實(shí)的基礎(chǔ)。
當(dāng)今的系統(tǒng)開(kāi)發(fā)工具已經(jīng)非常先進(jìn),完全可以允許設(shè)計(jì)人員根據(jù)具體的應(yīng)用目標(biāo)任務(wù)來(lái)定制微處理器核。處理器定制可以在非常短的時(shí)間內(nèi),甚至是幾分鐘就可以根據(jù)具體應(yīng)用完成片上系統(tǒng)處理器核的設(shè)計(jì)。由于根據(jù)具體任務(wù)來(lái)定制處理器的速度非???,因此可配置處理器可以具有非常優(yōu)異的高性能來(lái)構(gòu)建片上系統(tǒng)的設(shè)計(jì),并且經(jīng)常用于快速建立一些功能模塊,而這些功能模塊如果采用人工RTL方式設(shè)計(jì)的話,則可能需要幾個(gè)月的時(shí)間。正是由于可配置處理器技術(shù)的高性能和快速開(kāi)發(fā)能力,使得許多最終產(chǎn)品在多個(gè)可配置處理器核的基礎(chǔ)上實(shí)現(xiàn)了片上系統(tǒng)SOC(多處理器片上系統(tǒng)SOC或者簡(jiǎn)寫(xiě)為MPSOC)。這些最終產(chǎn)品的范圍從最大和最小的網(wǎng)絡(luò)路由器一直到諸如便攜式攝像機(jī)、打印機(jī)和低成本視頻游戲機(jī)等消費(fèi)類(lèi)電子產(chǎn)品。
兩種最新的開(kāi)發(fā)技術(shù)已經(jīng)嵌入到可配置處理器甚至片上系統(tǒng)SOC設(shè)計(jì)中,即全自動(dòng)化的、專(zhuān)用指令集定制技術(shù)和對(duì)處理器內(nèi)部執(zhí)行部件的多口訪問(wèn)技術(shù)。前者允許片上系統(tǒng)設(shè)計(jì)人員更加專(zhuān)注系統(tǒng)體系結(jié)構(gòu)方面的問(wèn)題,而通過(guò)依賴自動(dòng)化設(shè)計(jì)工具來(lái)完成某些單一功能模塊以達(dá)到性能方面的目標(biāo)。后者則永遠(yuǎn)克服了以前那種存在已久的總線瓶頸問(wèn)題,而這種總線瓶頸問(wèn)題從1971年第一個(gè)微處理器出現(xiàn)以來(lái)就一直阻礙微處理器性能的提高。
自動(dòng)化處理器定制
十多年來(lái),硬件設(shè)計(jì)人員一直在努力用C或者C++對(duì)系統(tǒng)進(jìn)行描述進(jìn)而轉(zhuǎn)換成有效的硬件。最初的系統(tǒng)說(shuō)明通常是用C或者C++寫(xiě)成的,因?yàn)椴捎眠@些高級(jí)語(yǔ)言描述的系統(tǒng)可以在廉價(jià)的PC上進(jìn)行執(zhí)行和評(píng)價(jià)。然而,即使是廉價(jià)的PC也不適合許多嵌入式系統(tǒng)的設(shè)計(jì),尤其是在消費(fèi)電子領(lǐng)域,因?yàn)槠涔奶蟆R虼?,設(shè)計(jì)人員開(kāi)始希望找到一種工具來(lái)將用C或者C++寫(xiě)成的系統(tǒng)描述轉(zhuǎn)換成硬件。
許多像“行為綜合”、“C語(yǔ)言硬件綜合”和“ESL”等詞匯描述的設(shè)計(jì)方法都有一些缺陷,因?yàn)樗鼈兌际窃噲D解決在本質(zhì)上很復(fù)雜的問(wèn)題:用時(shí)序可執(zhí)行語(yǔ)言寫(xiě)成的系統(tǒng)描述轉(zhuǎn)換成并行互操作和非可編程的硬件模塊。
Tensilica的XPRES編譯器采用一種更加簡(jiǎn)單、更加直接的方法來(lái)解決這一設(shè)計(jì)問(wèn)題。XPRES編譯器不是試圖從頭開(kāi)始進(jìn)行與應(yīng)用相關(guān)的硬件設(shè)計(jì),而是從一個(gè)完整的功能處理器核開(kāi)始設(shè)計(jì),然后以添加硬件執(zhí)行部件和相應(yīng)的機(jī)器指令的方式來(lái)增加硬件,以加速處理器上目標(biāo)應(yīng)用程序的執(zhí)行速度。因此,XPRES編譯器從一個(gè)正在工作的硬件(Xtensa微處理器核)開(kāi)始設(shè)計(jì),同時(shí)使得目標(biāo)程序代碼運(yùn)行得更快。這種搜索的結(jié)果是完成一個(gè)微處理器的配置,此配置有一個(gè)性能/硬件開(kāi)銷(xiāo)的特性曲線,如圖1所示。
圖1: XPRES編譯器為設(shè)計(jì)者提供一系列微處理器配置。隨著硅片面積的增加也使得與應(yīng)用相關(guān)的系統(tǒng)性能得到提升。
性能優(yōu)化的三種技術(shù)途徑
XPRES編譯器采用三種技術(shù)來(lái)建立優(yōu)化的Xtensa處理器配置:操作數(shù)融合、單指令流多數(shù)據(jù)流SIMD(向量化)和FLIX(可變長(zhǎng)度指令擴(kuò)展)。操作數(shù)融合技術(shù)記錄程序循環(huán)語(yǔ)句中簡(jiǎn)單操作出現(xiàn)的頻度。XPRES編譯器將這些指令序列合并成一條增強(qiáng)型指令,這種增強(qiáng)型指令通過(guò)減少循環(huán)內(nèi)部的指令條數(shù)來(lái)加速程序代碼的執(zhí)行。圖2表示由XPRES編譯器產(chǎn)生的數(shù)據(jù)流操作,圖中用灰色表示出融合操作。
圖2:由XPRES編譯器產(chǎn)生的數(shù)據(jù)流圖表示出一系列融合操作。當(dāng)減法操作、取絕對(duì)值操作、加法操作和位域抽取操作融合成一條新的指令后,由XPRES編譯器進(jìn)行評(píng)估需要增加474個(gè)邏輯門(mén)。
應(yīng)用程序中的許多循環(huán)語(yǔ)句對(duì)一個(gè)數(shù)據(jù)陣列執(zhí)行相同的操作,XPRES編譯器可以將這些循環(huán)語(yǔ)句進(jìn)行向量化,建立一條由多個(gè)相同執(zhí)行部件并行執(zhí)行多個(gè)數(shù)據(jù)項(xiàng)的指令。對(duì)Xtensa處理器增加單指令流多數(shù)據(jù)流SIMD指令與Tensilica的XCC C/C++編譯器是一致的,該編譯器能夠?qū)?yīng)用程序代碼中的內(nèi)循環(huán)展開(kāi)并且進(jìn)行向量化。通過(guò)向量化可以加速循環(huán)語(yǔ)句的執(zhí)行,這通常和增強(qiáng)型指令內(nèi)部SIMD運(yùn)算部件的序號(hào)有關(guān)。
XPRES編譯器采用的第三種加速程序代碼執(zhí)行的技術(shù)是Tensilica的FLIX(可變長(zhǎng)度指令擴(kuò)展)技術(shù)。FLIX指令是一種類(lèi)似于融合和單指令流多數(shù)據(jù)流SIMD指令的多操作指令。然而,F(xiàn)LIX指令包括多個(gè)獨(dú)立的操作,而融合和單指令流多數(shù)據(jù)流SIMD指令則均為相關(guān)多操作。FLIX指令中的每一個(gè)操作都是和其它操作互相獨(dú)立的,XCC C/C++編譯器將彼此獨(dú)立的操作壓縮成一條FLIX格式的指令,而這種壓縮后的指令能夠顯著加速程序代碼的執(zhí)行速度。
采用可配置處理器進(jìn)行多處理器SOC設(shè)計(jì)
在當(dāng)今的應(yīng)用中,很少只用一個(gè)處理器就能滿足系統(tǒng)的性能指標(biāo),即使采用面向目標(biāo)應(yīng)用的可配置處理器也很難做到。然而,多處理器MP指令集、高帶寬接口和小面積使得在一個(gè)片上系統(tǒng)SOC設(shè)計(jì)中可以集成多個(gè)可配置處理器。
片上系統(tǒng)SOC中處理器模塊之間硬件互連機(jī)制的選擇對(duì)系統(tǒng)性能和硅片成本產(chǎn)生很大影響,而且這些硬件互連機(jī)制必須直接支持多處理器MP系統(tǒng)設(shè)計(jì)的互連要求。消息傳遞軟件通信機(jī)制直接影響到數(shù)據(jù)隊(duì)列。類(lèi)似地,共享存儲(chǔ)器軟件通信模式也影響到基于總線的硬件系統(tǒng)??膳渲锰幚砥骺梢蕴峁┫到y(tǒng)以很大的靈活性,提供對(duì)共享設(shè)備和存儲(chǔ)器進(jìn)行訪問(wèn)所需的仲裁機(jī)制。共享存儲(chǔ)器總線的基本拓?fù)浣Y(jié)構(gòu)有如下幾種:
1. 通過(guò)通用處理器總線訪問(wèn)系統(tǒng)全局存儲(chǔ)器:微處理器設(shè)計(jì)一個(gè)通用接口以便實(shí)現(xiàn)多種總線事務(wù)處理。在讀操作時(shí),如果處理器認(rèn)為相應(yīng)的數(shù)據(jù)不在本地局部存儲(chǔ)器(根據(jù)地址或者高速緩存CACHE缺失進(jìn)行判斷),那么處理器必須要進(jìn)行全局存儲(chǔ)器訪問(wèn)。處理器請(qǐng)求總線控制權(quán),當(dāng)控制權(quán)得到應(yīng)答后,處理器通過(guò)總線發(fā)送讀操作的目標(biāo)地址。相應(yīng)的設(shè)備(例如,存儲(chǔ)器或者輸入/輸出接口)對(duì)地址進(jìn)行譯碼,然后通過(guò)總線對(duì)處理器所需要的數(shù)據(jù)進(jìn)行傳送,如圖3所示。
圖 3: 兩個(gè)處理器通過(guò)總線共享存儲(chǔ)器
當(dāng)兩個(gè)處理器通過(guò)總線對(duì)全局共享存儲(chǔ)器進(jìn)行訪問(wèn)時(shí),一個(gè)處理器獲得總線控制權(quán)對(duì)數(shù)據(jù)進(jìn)行寫(xiě)操作,另一個(gè)處理器就必須稍后才能獲得總線控制權(quán)以便進(jìn)行讀操作。按照這種方式,每個(gè)字傳輸需要兩個(gè)總線操作事務(wù)周期才能完成。該方法需要適度的硬件支持,并且具有較高的靈活性,因?yàn)槿执鎯?chǔ)器和輸入/輸出接口通過(guò)公共總線進(jìn)行訪問(wèn)。然而,對(duì)全局存儲(chǔ)器的使用卻不好根據(jù)處理器和設(shè)備的數(shù)量進(jìn)行度量,因?yàn)榭偩€擁塞會(huì)使得訪問(wèn)時(shí)間變長(zhǎng)和不可預(yù)測(cè)。
2. 通過(guò)通用處理器總線對(duì)處理器本地局部存儲(chǔ)器進(jìn)行訪問(wèn):可配置處理器可以允許局部數(shù)據(jù)存儲(chǔ)器參與通用總線事務(wù)處理。這些處理器基本上是由本地的處理器使用,并且二者是緊密耦合的。然而,控制局部數(shù)據(jù)存儲(chǔ)器的處理器可以按照總線從設(shè)備的方式進(jìn)行操作,如圖4所示。
圖4: 一個(gè)處理器通過(guò)總線訪問(wèn)第二個(gè)處理器的局部數(shù)據(jù)存儲(chǔ)器
第一個(gè)處理器和第二個(gè)處理器之間訪問(wèn)時(shí)間的不對(duì)稱性可以保證push 通信,即當(dāng)?shù)谝粋€(gè)處理器向第二個(gè)處理器發(fā)送數(shù)據(jù)時(shí),它將數(shù)據(jù)通過(guò)總線寫(xiě)到第二個(gè)處理器的本地局部存儲(chǔ)器。如果寫(xiě)操作經(jīng)過(guò)緩沖器,那么第一個(gè)處理器不必等到寫(xiě)操作完成就可以繼續(xù)執(zhí)行后面的操作。因此,到第二個(gè)處理器數(shù)據(jù)傳輸?shù)拈L(zhǎng)時(shí)間延時(shí)就被隱藏了。
3. 通過(guò)局部總線訪問(wèn)多口局部存儲(chǔ)器:當(dāng)數(shù)據(jù)流在處理器之間雙向傳輸且對(duì)時(shí)延要求比較嚴(yán)格時(shí),那么對(duì)任務(wù)間通信而言,采用本地共享數(shù)據(jù)存儲(chǔ)器通常是最好的選擇。每個(gè)處理器使用自己的本地?cái)?shù)據(jù)存儲(chǔ)器接口來(lái)訪問(wèn)共享存儲(chǔ)器,如圖5所示。存儲(chǔ)器可以有兩個(gè)物理訪問(wèn)端口(每個(gè)時(shí)鐘周期可以訪問(wèn)兩次存儲(chǔ)器),或者通過(guò)一個(gè)簡(jiǎn)單的仲裁器來(lái)控制。
圖5:兩個(gè)處理器共享局部數(shù)據(jù)存儲(chǔ)器
直接互連的數(shù)據(jù)端口
處理器直接相連可以減少通信開(kāi)銷(xiāo)和時(shí)間。這種連接方式將數(shù)據(jù)從一個(gè)處理器的寄存器傳送到另一個(gè)處理器的寄存器和執(zhí)行功能部件。直接互連的一個(gè)簡(jiǎn)單例子如圖6所示。當(dāng)?shù)谝粋€(gè)處理器向輸出寄存器寫(xiě)一個(gè)數(shù)值(通常作為計(jì)算的一部分)時(shí),該值將自動(dòng)出現(xiàn)在處理器的輸出端口上。同樣的數(shù)值可以立即輸入到第二個(gè)處理器進(jìn)行相應(yīng)的數(shù)據(jù)操作。
圖 6:處理器到處理器之間通過(guò)端口直接進(jìn)行訪問(wèn)
數(shù)據(jù)隊(duì)列
任務(wù)之間通信的最高帶寬機(jī)制是數(shù)據(jù)隊(duì)列的硬件實(shí)現(xiàn)。一個(gè)數(shù)據(jù)隊(duì)列可以使系統(tǒng)獲得每個(gè)時(shí)鐘周期傳輸一次的數(shù)據(jù)速率,或者在寬操作數(shù)位數(shù)的情況下可以達(dá)到每秒10GB的傳輸速率(每個(gè)操作數(shù)幾十個(gè)字節(jié),時(shí)鐘速率幾百兆赫MHz)。生產(chǎn)者和消費(fèi)者之間的握手信號(hào)隱含在處理器之間的接口和數(shù)據(jù)隊(duì)列的頭信息和尾信息之中。
專(zhuān)用處理器允許數(shù)據(jù)隊(duì)列作為指令集擴(kuò)展的一部分直接進(jìn)行硬件實(shí)現(xiàn)。數(shù)據(jù)隊(duì)列可以通過(guò)一條專(zhuān)門(mén)指令來(lái)說(shuō)明,隊(duì)列可以作為結(jié)果值的目的或者使用輸入隊(duì)列值作為源。這種形式的隊(duì)列接口方式如圖7所示,該隊(duì)列允許用戶建立一個(gè)新的數(shù)據(jù)值,或者每個(gè)隊(duì)列接口使用一個(gè)時(shí)鐘周期。
圖 7: 硬件數(shù)據(jù)隊(duì)列機(jī)制
數(shù)據(jù)隊(duì)列對(duì)任務(wù)間的性能有一定的影響。如果數(shù)據(jù)隊(duì)列生產(chǎn)者和消費(fèi)者速率高度一致,那么隊(duì)列長(zhǎng)度可以比較短。如果隊(duì)列生產(chǎn)者或者消費(fèi)者速率不同,那么需要設(shè)計(jì)深度隊(duì)列來(lái)彌補(bǔ)二者之間的失配。
由于處理器執(zhí)行部件的隊(duì)列接口對(duì)商用處理器核而言具有極其重要的特性,因此更加深入地對(duì)接口機(jī)制進(jìn)行一些探討是非常必要的。數(shù)據(jù)隊(duì)列接口通過(guò)如下TIE語(yǔ)法格式添加到Xtensa LX處理器中:
queue in|out
上面語(yǔ)法格式定義了數(shù)據(jù)隊(duì)列的名稱、寬度和隊(duì)列的方向。一個(gè)Xtensa LX處理器可以包含300多個(gè)隊(duì)列,每個(gè)隊(duì)列寬度可以高達(dá)1024位。設(shè)計(jì)人員可以采用數(shù)據(jù)隊(duì)列來(lái)對(duì)處理器性能進(jìn)行折中,即在快速、窄帶處理器接口和慢速、寬帶接口之間進(jìn)行折中以獲得系統(tǒng)高帶寬和高性能的目的。
圖8為T(mén)IE隊(duì)列和簡(jiǎn)單的Designware FIFO隊(duì)列之間的連接,這種連接方式非常容易。TIE隊(duì)列的push 和 pop操作由FIFO的隊(duì)列空和隊(duì)列滿狀態(tài)信號(hào)進(jìn)行門(mén)控,這樣可以使設(shè)計(jì)與Designware的 FIFO控制模式保持一致。
圖8:采用TIE隊(duì)列的Designware同步FIFO示意圖
(diag_n輸入驅(qū)動(dòng)為高且almost_full、 half_full、almost_empty和 error輸出均未用)
TIE隊(duì)列可以和寄存器操作數(shù)、系統(tǒng)狀態(tài)或者存儲(chǔ)器接口那樣直接為T(mén)IE指令提供輸入和輸出操作數(shù)。下面的TIE語(yǔ)法格式建立了一條新的指令,該指令對(duì)輸入數(shù)據(jù)隊(duì)列中的數(shù)據(jù)進(jìn)行累加,然后送給寄存器文件。
operation QACC {inout AR ACC} {in IQ1} {
assign ACC = ACC + IQ1;
}
圖9表示TIE隊(duì)列是如何像其它指令操作數(shù)那樣在Xtensa LX處理器中使用的。
圖9:TIE隊(duì)列作為指令操作數(shù)使用
Xtensa LX處理器本身包括一個(gè)兩項(xiàng)的數(shù)據(jù)緩沖器,用于緩沖系統(tǒng)設(shè)計(jì)人員定義的每個(gè)TIE隊(duì)列。每個(gè)隊(duì)列的兩項(xiàng)數(shù)據(jù)緩沖器所占用的面積大大小于一個(gè)加載/存儲(chǔ)處理單元。因此,TIE隊(duì)列接口所占的處理器面積是完全受到設(shè)計(jì)人員所控制的,并且可以按照需要增大或者減小。
數(shù)據(jù)流直達(dá)處理
數(shù)據(jù)端口和數(shù)據(jù)隊(duì)列與可配置處理器執(zhí)行部件直接相連,這種互連允許處理器應(yīng)用數(shù)據(jù)流直達(dá)技術(shù)進(jìn)行處理,而那些應(yīng)用在以前是為手工編寫(xiě)的RTL代碼邏輯塊預(yù)留的。將數(shù)據(jù)隊(duì)列和輸出隊(duì)列接口與設(shè)計(jì)人員定義的執(zhí)行部件相結(jié)合就可以建立一個(gè)在處理器內(nèi)部由固件控制的處理模塊,該模塊可以從輸入數(shù)據(jù)隊(duì)列中讀取數(shù)據(jù),對(duì)這些數(shù)據(jù)執(zhí)行計(jì)算,然后按照流水線方式每完成一個(gè)“輸入-計(jì)算-輸出”周期就將計(jì)算結(jié)果輸出。圖10表示一個(gè)簡(jiǎn)單的系統(tǒng)設(shè)計(jì),該系統(tǒng)有兩個(gè)256位的輸入數(shù)據(jù)隊(duì)列,一個(gè)256位的輸出數(shù)據(jù)隊(duì)列和一個(gè)256位的加法器/多路器執(zhí)行部件。盡管該處理器擴(kuò)展是在固件模式下進(jìn)行控制的,但是其操作可以將處理器的存儲(chǔ)器總線和加載/存儲(chǔ)單元旁路以便可以獲得同硬件一樣的處理速度。
圖10:通過(guò)在可配置處理器中增加數(shù)據(jù)流直達(dá)處理模式來(lái)將執(zhí)行部件和多個(gè)隊(duì)列相結(jié)合
即使在處理器擴(kuò)展中使用大量的硬件,但在定義時(shí)也只是僅僅寫(xiě)如下四行TIE代碼而已:
queue InData1 256 in
queue InData2 256 in
queue OutData 256 out
operation QADD {} { in InData1, in InData2, in SumCtrl, out OutData} { assign OutData = SumCtrl ? (InData1 + InData2) : InData1; }
前三行代碼定義了一個(gè)256位的輸入隊(duì)列和一個(gè)256位的輸出隊(duì)列,第四行定義了一條新的處理器指令QADD,該指令執(zhí)行256位的加法運(yùn)算或者將256位的數(shù)據(jù)從輸入隊(duì)列送到輸出隊(duì)列。通過(guò)TIE語(yǔ)言定義的指令告訴Xtensa處理器產(chǎn)生器自動(dòng)為處理器增加相應(yīng)的硬件,同時(shí)為處理器軟件開(kāi)發(fā)工具增添一條新指令。
用于多處理器片上系統(tǒng)MPSOC設(shè)計(jì)的處理器核
可配置處理器的出現(xiàn)使得片上系統(tǒng)SOC設(shè)計(jì)人員可以建立起一種嶄新的且非常靈活的硬件模塊構(gòu)建方法。同傳統(tǒng)的固定指令集體系結(jié)構(gòu)ISA處理器相比,可配置處理器通過(guò)添加用戶定制的執(zhí)行功能部件、寄存器和寄存器堆以及專(zhuān)用通信接口能夠獲得很高的系統(tǒng)性能。
自從1971年第一個(gè)微處理器研制成功至今已經(jīng)30多年,由于受固定處理器核的束縛,導(dǎo)致可配置處理器的發(fā)明無(wú)法實(shí)現(xiàn)。對(duì)于二十一世紀(jì)的片上系統(tǒng)SOC設(shè)計(jì)而言,這些制約因素已經(jīng)不再存在,而且這些過(guò)時(shí)的約束也不再限制系統(tǒng)設(shè)計(jì)人員對(duì)處理器的使用。