發布日期:2022-07-15 點擊率:42
在系統級芯片(SoC)設計中采用多個CPU已經成為一種越來越常用的設計方法。為多CPU應用而設計的處理器內核應具備幾個重要特性,例如較高的性能密度、有效的處理器內部通信能力、支持調試,以及可靈活實現和可配置性。本文將針對這些與多CPU設計相關的內核性能進行討論。
由于業界對SoC器件的可編程性要求越來越高,所以采用多CPU進行SoC設計變得更加普遍。對許多應用來說,單CPU很難滿足人們對設備性能飛速提高的要求。而在復雜的實時系統中,采用多CPU通常會使性能分配更加容易做到,因此響應時間也更容易達到要求。同時,外圍器件或專用加速器中的專用CPU也能夠分擔主CPU中那些比較低級的功能,從而使主CPU能夠專注于高級功能的實現。
多CPU設計非常適用于今天的嵌入式系統,這主要有三個方面的原因。首先,嵌入式應用的功能通常可以靈活地進行分離,因此很容易將其功能映射到多個CPU中。有時,將嵌入式系統的功能分割映射到多個單獨的CPU中甚至比映射到一個CPU中更容易。其次,許多嵌入式應用都具備明顯的并行性,因而可以用一系列并行CPU來開發。例如,網絡處理器(NPU)設計工程師已經利用這個特性開發路由功能。最后一點,隨著當今和微米工藝技術的出現,已經可以以較低的成本實現用多CPU方法構造SoC系統。
目前,多CPU設計在很多重要市場中都有應用,例如網絡路由器,大多數新一代NPU都是基于多CPU設計。除了這些標準的NPU以外,核心ASSP也開始采用多處理器構建更加優化的針對特定應用的路由解決方案。對于很多應用來說,特定目標應用的ASSP比標準NPU效率高。一個ASSP可以集成合適的物理接口,根據目標應用確定存儲器大小,并可以為處理器提供最佳配置。
諸如DSLAM和基站或高性能網絡存儲設備等的相關應用中,在采用這種多處理器的“分而治之”的方法來構建高性能可編程解決方案時,都實現了較好的工作性能。而且,為了節約成本并降低功耗,甚至終端用戶設備都開始采用多CPU來獲取最佳性能密度。例如,在設計機頂盒、住宅網關,甚至智能移動設備時也可采用多CPU方法。需要說明的是,這里的多CPU并不是單用一個RISC處理器和一個DSP,而是采用多個RSIC處理器和多個DSP。
如何獲得優秀的CPU內核
一個適用于多CPU設計的處理器內核,必須具備以下幾個重要的特性:
首先最重要的是它必須能夠提供較高的性能密度。多CPU設計的目的就在于在每平方毫米內,或在單位功耗內獲得盡可能高的總性能。因此,理想的效果是在最小的空間內或最低的功耗內得到最佳的MIPS性能。
其次,它必須能夠在處理器內實現有效通信。因為盡管許多多CPU設計都是軟件相關的,但在設計過程中仍然十分需要進行處理器內的通信。如果處理器內核不提供一種支持處理器內的通信機制,那么這種內部通信的功能就必須由SoC設計工程師來開發。這不僅非常耗時,而且也從其它方面增加了設計的復雜性。而如果在處理器內核處提供對內部通信的支持將簡化SoC設計工程師的工作,從而也縮短開發周期。
通常,多CPU設計在調試時比較困難,因為這些處理器內核既相互獨立又相互影響,而且在調試多CPU SoC時,設計工程師必須看到各處理器之間相互影響的情況。這就要求在CPU內置一種功能,使多CPU能夠同時進行調試,并且充分地相互作用。否則,多CPU SoC的調試工作將十分艱難,甚至根本不可能對所有CPU進行全面調試。同時,調試工具必須支持這些CPU,這樣,設計工程師才能利用CPU內嵌的調試功能進行調試。
此外,在判斷一個處理器內核是否適用于多CPU設計時,還需考慮配置和實現該CPU內核時的靈活度。在進行一個多CPU設計時,應盡量將產品尺寸和功耗降至最低,同時必須盡力提高其性能。設計工程師只有采用高度可配置和高度可綜合的CPU,才能設計出尺寸、功耗和頻率都滿足特定應用要求的SoC產品。而對于一個固化的或不可配置的CPU內核,則不可能構造出滿足各種要求的產品。
基于這些思想,MIPS Technologies公司最近研制出一款專門針對多CPU設計的CPU內核--MIPS32 M4K。該內核可達到很高的性能,而且尺寸和功耗都很低。同時,該內核還具備可綜合性,并內帶一個快速響應的存儲器系統。
處理器間通信
在多CPU設計中,處理器之間必須能夠相互通信,以便控制對共享資源的訪問。但在如今構建的很多多CPU設計中,存儲器相關性都是通過純軟件方式管理的,因此不能利用常規的高速緩存相關機制通信。
M4K中,通過外部執行MIPS結構中的負載鏈接(Load Linked,LL)指令和條件存儲(SC)指令來支持多CPU旗語(semaphore),并以此使得系統能夠對各CPU保持必要的監控。同時,為實現對系統的最大控制和靈活性,SYNC指令動作也被移出到信號接口。通過執行該指令,可以為系統提供一個內存排序器(memory barrier),以保證分類指令語義正確。
如圖1所示,當系統執行一個典型的旗語訪問代碼序列時,使用LL和SC指令就可以無需對系統傳輸一個鎖定信息而直接執行自動的Read-Modify-Write序列。
例如,在一個測試-設置旋轉鎖(spin-lock)中,執行LL指令時會在信號接口上產生一個讀操作,這個信號接口在系統中標記為LL。然后,系統會在該地址設置一個監測器,監測該接口所在地址的狀態。此時,如果另一個處理器向這個被監測的地址進行寫操作,那么監測器的pass/fail標志位將被清零。而系統執行SC指令時,系統邏輯會根據監測器的狀態有條件地執行存儲操作,即有條件地向存儲器中寫入數據。接著,系統會將監測器的Pass/fail標志位返回給處理器,然后將工作交給處理器中的軟件去執行。 該軟件執行的操作起初通常會失敗,但它會不斷重復執行,直到成功為止。類似地,SYNC指令的語義解釋也被轉移到CPU外執行,這樣系統才能保證內存排序器正確操作。
如圖2中范例所示,SYNC位于連接到共享緩沖的最后一個存儲器和釋放控制信號的存儲器之間。在執行SYNC指令時,CPU向系統邏輯發送信號,表示它已經準備接收同步響應。一旦系統確保工作次序正常,就向CPU返回一個信號,接著,負載和存儲內容才得以釋放。如果系統是一個簡單系統,那么必須按部就班地等待所有重要的轉換完成;但如果系統比較復雜,就能夠保持其序列中的次序,并以更快的速度進行響應。但在這兩種情況下,CPU軟件和硬件的運行機制都是相同的。
M4K上的處理器內部通信機制得到業界的標準開發工的全面支持。設計工程師如果用M4K內核進行多CPU設計,那么他們就可以利用M4K的這些特性在不同的處理器內核間方便快捷地進行通信,從而縮短設計時間并降低風險。
多CPU系統的應用
系統有了多個CPU內核后,能做些什么呢?以圖3的NAS設計為例,其主處理器為一個MIPS64 20Kc內核,使用了多處理器核后,網絡存儲系統就可以將許多特定功能從主處理器中轉移出來。例如將一個CPU放在網絡接口處,將一些較高級的功能,如濾波、L2或L3協議響應以及分段和重裝等轉移到本地的外圍器件中去完成,從而將主處理器解放出來去執行一些更高級的協議和管理功能。
與此類似,在一個加速器內使用一個或多個M4K處理器內核,可以將一些特殊的高性能的功能從主處理器中分離出來,而同時并不影響標準可再編程器件的優勢。
多CPU系統設計的另一個常見的例子是線路卡,這類線路卡可用于網絡路由器和DSLAM中,也可以用于無線基站。在這些情況下使用并行CPU子系統(有時也叫微引擎)能令高度并行的應用(如L2層處理、數據包分類、濾波或標志管理)實現極好的總體性能。此時,主處理器主要用于異常處理。該方法在實現時有多種不同的形式,不但可以采用并行處理,還可以采用處理器管線或并行處理器管線來實現。
多CPU設計能夠提供可擴展、可編程的特性,非常適用于將許多網絡和嵌入式系統設計中的功能分離出主處理器,因而這種方法在芯片設計中逐漸得到很多應用。當然,就如今的大多數SoC設計而言,多CPU設計并非毫無問題,但我們通過采用MIPS32 M4K這類優化的CPU內核,可以在相當大的程度上減少這些問題。
作者:David Courtright
產品策劃部主任
MIPS Technologies公司