目前有一種新型態的處理器──可配置組態處理器(Configurable processor)相當受到注目,它的特色在於可以為特定應用而量身訂製。它不僅比標準型嵌入式微處理器的速度更快,而且能做更多工作,有些甚至可以取代ASIC及系統單晶片(SoC)中自行編碼(hand-coded)的 RTL設計。
什麼是Configurable processor?它可以做什麼?為什麼會有人想要使用這種處理器?它如何取代RTL coding?設計師該如何運用可編程處理器來做設計?這篇文章中將對這些問題有進一步的解答。
標準型嵌入式處理器核心
首先來看看標準式、固定指令集架構(fixed-ISA)的嵌入式微處理器及DSP核心。
這類微處理器包括ARM、MIPS及Power PC等處理器,它們在1980年代開始以單一晶片的型式被製造使用,並朝向兩個方向發展:一是以最大時脈為首要考量,這和PC處理器的發展模式極為類似,如果省電在設計上最重要的考量,那快速提升時脈以滿足應用需求就成了這顆特定處理的主要任務。第二個方向則是以平行運算(Parallel Operation)的方式來提供更多的運算資源,以便讓處理器能同時執行更多的工作。
這類處理器的業者雖然試著發展出能執行更寬廣運算的新架構,但一般來說,他們並不會為特定的應用而改變其處理器的設計。正是因為這種「一體適用」的微處理器設計特性,對於工程師來說,想運用此類處理器架構來發展平行運算引擎就顯得相當困難。此外,雖然這種設計方向對於時脈的要求較低,但對於一個需要客製化的方案來說,這樣做並不能讓時脈或邏輯閘效能得到充分的利用。
有些設計師已將DSP加入嵌入式SoC的設計中,這種DSP的應用範疇比上述一般性目的(general-purpose)處理器還要狹礙些,所以對於處理器工程師來說,要發展針對DSP應用的平行運算硬體比較容易些;但即使是DSP的架構,仍需要設計成能為大範圍的演算提供充分的效能,所以這樣的模式還是很難符合客製化方案對於速度上的需求。
自行開發 RTL以加速設計
由於標準型的嵌入式微處理器對於許多應用(尤其是需要處理多媒體或網路連結的應用)來說處速度並不夠快,即使多加了嵌入式的DSP來提升效率仍嫌不足,因此設計團隊只有自行以Verilog 或 VHDL來設計部分的硬體核心,以滿足個別的需求。但面對複雜的功能要求,客製化的RTL邏輯往往需要長時間的設計與驗證;此外,自製的RTL區塊一旦完成,往往因為太死板而難以更動,但隨著標準更新或產品的新特性出現,設計更動總是無法避免。
(圖一)為傳統RTL設計區塊圖,圖左為RTL的資料通道(datapath),圖右則為此區塊的有限狀態控制器(finite state machine;FSM),它進一步說明了上述的矛盾狀況。
《圖一 Hardwired RTL = Datapath + State Machine》 |
|
在多數的RTL設計中,資料通道消耗了絕大多數在邏輯區塊中的邏輯閘。一般來說,資料通道少則需要16或32位元,多則要數百位元,這包含了許多的資料暫存器(data registers)和重要的RAM區塊,此外還包括連結外部RAM的介面,以及與其他RTL區塊共用的記憶體。
相較之下,狀態控制器所要做的就是各種情況的控制,包括對各種資料流經資料通道時的先後順序的細微控制、對各種例外或錯誤狀況的控制,以及所有與其他區塊的溝通等,都是這個RTL邏輯區塊的次系統所要負責的事。這個狀態控制器對於邏輯區塊的閘數佔用比率可能極低,但由於它的工作複雜性極高,讓它也承擔了最大的設計與驗證上的風險。
近來在RTL區塊的設計上多傾向於針對狀態控制器做改變,而非針對資料通道的架構,但這種情況也造成設計時間的增加,以及當設計改變後得重新驗證RTL區塊的困難,因此也提高了RTL區塊設計的風險。一個可配置(configurable)、可延伸(extensible)的處理器(基本上是一種新型態的微處理器)則提供了降低狀態控制器設計風險的方法,也就是以可預先設計(pre-designed)、預先驗證(pre-verified)的處理器核心及應用功能韌體來取代難以設計和驗證的狀態控制器邏輯區塊。
Configurable Processors的承諾
對於SoC的設計來說,愈來愈大型的RTL區塊設計也產生了所謂的「SoC設計差距(SoC design gap)」,這種情況正逐年在擴大,如(圖二)所示。此一差距的形成是因為晶片複雜度有爆炸性的成長,但設計者生產力的成長上,卻相對低上許多。目前包括更長電池壽命的手機、四百萬像素數位相機、高速又低價的彩色列表機、數位高畫質電視(HDTV)及3D影像遊戲機等熱門產品,無不訴求更高效率、更低耗電的系統趨勢,這也促使SoC設計規模的擴大,以滿足更多新功能的需求。因此,除非有拉近「SoC」設計差距的方法,否則要將高階的設計案及時推出市場,會成為一項不可能的任務。
硬體式的RTL設計具有許多優點:小尺寸、低耗電及高處理效率等;但當晶片的閘數變得非常龐大時,RTL的另一面向:不易設計、驗證速度慢及困難,及對複雜問題的擴充性差等,逐漸成為主導性的特點。在縮短設計時間並減少風險的同時,還能保留RTL大部分的效能及效率優點的設計方法,自然具有極大的吸引力,而Configurable processor正可以滿足這個需求。就好像邏輯合成式的RTL設計一樣,Configurable processor具備了高速邏輯區塊的設計能力,因此能因應不同的指派工作而量身訂做。它與RTL設計有一個主要的不同:它的狀態控制器是以Configurable processor為基礎的硬體及邏輯區塊來完成,並使用韌體來做到這項功能。
什麼是Configurable Processor?
一個功能完整的Configurable processor工具組由一個可預先定義的處理器核心與一個設計工具環境所組成,當有特殊應用需求時,可以針對此一處理器設計做重要的調整。Configurable processor一般具備了對記憶體的增加、刪除和修改,對外部的匯流排頻寬與溝通協定,以及對常用的處理器週邊的組態配置能力。
可延伸性(extensibility)是Configurable processor的一個重要特色,它可以提供系統設計師一些在傳統架構下可能從未思考過、或甚至想像過的處理器指令新增能力。這種高度客製化的指令增加能力除了能理想地滿足特殊應用上的需求,它也讓Configurable processor具備了與RTL的高效能特性相匹敵的條件,並保有可預先驗證IP(pre-verified IP)的好處。Configurable processor可以像RTL程式碼一樣合成到FPGA或SoC的設計當中,最佳的Configurable processor更可以配合軟體開發工具,密切地呼應經由設計者自行定義的延伸架構所增加的硬體指令。
RTL的另一選擇──Configurable Processors
以Configurable Processors來取代RTL,通常是使用與一般RTL區塊相同的資料通道結構,也就是深度導線(deep pipelines)、平行處理單元、特定作業狀態暫存器,和連接區域與系統記憶體的寬頻資料匯流排。這些延伸的處理器可以達成和一般RTL設計相同的大量處理能力,並支援相同的資料連結介面。
然而,對Configurable Processors資料通道的控制卻和RTL的對應部分有很大的差異。它的資料通道週期控制並非固定在實體線路的狀態過渡(state transitions)中,而是由處理器的韌體來達成,如(圖三)所示。這樣做的好處在於從分流中就可以決定對資料流的控制,而記憶體在載入與儲存操作時的參考值(references)都很明白,此外,不論是一般性或特殊應用的運算處理,都有清楚的運算序列。
《圖三 可程式硬體功能:datapath + processor + software》 |
|
從RTL實體線路的狀態控制器轉移到採用韌體控制的Configurable processor,具備了以下幾項重要的優勢:
1. 彈性:晶片設計者與系統建置者可以透過改變韌體來更動邏輯區塊中的功能,即使是在產品生產後仍可做到。
2. 軟體式的發展:研發者可使用相對上較快速且低成本的軟體工具來實現多數的晶片功能。
3. 更快、更完整的系統模型:對於一個千萬閘級的設計來說,即使是最快的軟體式邏輯模擬器也很難做到每秒數個週期;相較之下,在指令集模擬器下運用韌體對延伸處理器做模擬,可以做到每秒數百、數千,甚至是數百萬週期的高速效能。
4. 資料處理與控制的統一:今日的系統不會只由實體線路所組成,少不了一個用來執行軟體功能的處理器;將RTL式的功能移到處理器中,可以免除以人工來分離「控制」與「資料處理」的困擾。
5. 快速上市:將關鍵性的功能從RTL移到Configurable processor上,可以簡化SoC的設計、加速系統模型和縮短硬體設計的終結時間。韌體式的狀態控制器很容易就可以因應改變而調整性能至符合標準,這就是沒有把實行細節放在硬體上的好處。
6. 提升設計者的生產力:這也是最重要的一點,在此作法下,設計團隊的生產力會因對RTL發展與驗證人力的減少而大幅增加。一個處理器式的SoC設計步驟也可以降低因實體邏輯上的錯誤導致的失敗風險;即使發現錯誤,此設計仍然允許修改補強。
關鍵優勢:硬體與軟體的自動化產生
為何Configurable processor還沒有被廣泛的接受?直到最近,要設計一個容易被修改的處理器還是很難做到。最早的configurable處理器是在90年代中期被提出,但回顧當時的瓶頸是:一旦有新的指令被加到這個處理器上頭時,沒有任何自動化的方法可以確定軟體開發工具能使用這些指令。因此使用Configurable processor的廠商所能做的事相當有限,他們僅能使用基本的組態配置;如果要增加指令,他們就得自行適度地修改軟體開發工具。
在1999年初,Tensilica發表它的第一款Xtensa處理器,並同時發表一個突破性的發明──自動化硬體與軟體產生器(Generator),設計者可以應用網路瀏覽器來定義所需要的組態選項。Xtensa處理器的產生器可以產生經驗證的硬體,也能提供各種版本的客製化軟體開發工具:涵蓋了編譯器、除錯器、指令集模擬器等等。這些軟體工具能完善地符合組態設定,而且不需要為了工具與處理器的可操作性而做多餘的工作。
以軟體開發程序來使用Configurable Processor
現在來看看目前的軟體開發程序是如何被用來發展嵌入式的應用。(圖四)是一個典型的嵌入式應用軟體的開發流程圖,設計工作是從演算法(algorithm)開始,而非處理器本身。應用開發者通常採用高階的設計工具或語言(如C 或 C++)開始工作,他們也可能會添購已用這些語言開發好的演算套件。高階程式語言及其他型式的開發套件讓開發者能夠創造、測試及確認最初的演算想法,甚至是一些獨立性的小演算,或次級演算(sub-algorithms),而此一工具的使用是在和特定處理器架構分開的狀況也能達成的。
接下來,開發者將主演算及次演算轉為C語言,以創造一個可攜式(portable)、獨立於處理器的應用程式碼。再由PC或工作站來執行C語言模擬,以證實此一程式碼化的演算法可如同預期被操作。在將次演算及其他應用軟體模組整合為一個協調的整體後,整個程式(已用C或C++寫成)再依處理器的設計目標而重編譯,並對產生的應用程式碼進行測試及獲得數據。
如果開發團隊非常幸運,所編譯的演算程式碼能以預期的速度來執行;然而,要符合fixed-ISA處理器專案的效能要求,應用軟體團隊往往得將程式碼的關鍵部分轉換成手動調整(hand-tuned)的組合程式碼。軟體開發團隊一般都得試著用手動方式讓組合程式碼更符合需求的處理器,否則,這個處理器專案可能因對所需的嵌入式應用來說太貴、太快或太耗電,而得終止設計。組合程式碼開發者必須小心地讓變數(variables)和可用的暫存器相吻合,因為若已存在的多組暫存器確定不適用,就沒有辦法再增加暫存器到一個fixed-ISA processor中。
讓演算設計達到處理器需求
Configurable processor允許嵌入式系統開發者創造為演算目標而特別客製的處理器,也就是能生產出更符合處理器需求的演算設計。設計者可以增加特殊目的、可變寬度(variable-width)的暫存器,以及專門的執行單元;為了?成特殊演算的最佳化處理器組態,也可以提升資料匯流排的頻寬。這些特性讓設計者能夠依演算需求而塑造處理器的性能,而非將處理器所無法負荷的演算能力強行加在這顆處理器上頭。在使用可配置組態(configurable)、可延伸的處理器來取代現成的、fixed-ISA微處理器或DSP的情況下,設計者能更快速的開發符合各項效能要求的應用系統。
與手動修改組合語言相比之下,可配置組態、可延伸處理器透過程式碼描述(code profiling)來達成最佳化要求的優勢是很明顯的。最佳化的目標一般都是軟體程式極為內部的一些運算迴路(loop),這些迴路的工作量極大,每秒得執行數千、甚至數百萬次的運算。如果能簡化這些迴路程式碼的指令數,對於系統的效能將有極大的好處。以下就是一個實際的應用案例。
@小標:以Configurable processor加速Viterbi Code設計
Viterbi解碼來自於GSM手機技術,GSM採用Viterbi解碼來從嘈雜的通訊頻道中取得資訊符碼,這種解碼方式應用了包含八個邏輯算式(四個加法、二個對照、二個選擇)的"Viterbi butterfly"運算,而每個接收到的數位資訊流中的符碼(symbol),是由八個Viterbi butterfly運算來加以解碼。
一般來說,RISC處理器需要50到80次指令週期(instruction cycles)來執行一個Viterbi butterfly,一個高階的VLIW DSP (TI's 320C64xx)只需要1.75週期就可計算一個Viterbi butterfly。TIE (Tensilica Instruction Extension)語言則讓設計者可以在Xtensa processor的 ISA上增加Viterbi butterfly指令,此一設計使用了處理器的可組態128-bit I/O bus,一次就可以接收八個符碼,它也增加了導線硬體,如(圖五),結果是butterfly的平均執行時間只要0.16次週期。
《圖五 Viterbi butterfly放大功能設計參考》 |
|
結論
由以上的介紹中,我們知道要加速嵌入式演算的效率,使用可配置組態、可延展的微處理器核心來創造為特定演算而客製化的處理器是可行的,它可以取代組合語言的編碼,以及RTL的硬體設計。使用可延展式處理器的好處在於:它讓設計者能精確的增加特定目的暫存器、執行單元和寬頻資料匯流排等資源,以達成要求的演算效能;設計者因此不用再傷腦筋於如何把演算需求強塞到fixed-ISA的運算資源中。
這種設計方式並不要求設計團隊的成員都成為處理器設計師,它只要求設計團隊能夠描述現存的演算程式碼,並發現其中的關鍵性內部迴路,接著是定義為加速這些關鍵性迴路所需的新處理器指令。前兩項工作本來就已在做,只有最後這項工作和現存的許多嵌入式系統開發者的軟體開發程序有所不同。
新的設計方式大大地加速了演算效能,它往往能大幅超越今日最先進的fixed-ISA微處理器和DSP核心。在多數的案例中,設計者能夠用Configurable processor來完全取代RTL設計,以縮短可觀的設計及驗證時間;由於這種設計方式特有的可程式(programmability)優勢,也讓整個設計案能發揮更大的彈性。
(作者任職於Tensilica公司)