作者:羅迪·厄克哈特(Roddy Urquhart)
大多數集成電路包括至少一個處理器內核和一些嵌入式軟件。對于更復雜的片上系統 (SoC),可能有運行主軟件和操作系統的應用程序處理器以及多個專門的子系統處理通信、安全性和傳感器等功能。處理要求差別很大,有多種處理器 IP 內核可供選擇。處理器 IP 供應商通常通過顯示 PPA 數字(性能、 功耗和面積)相互競爭,但此類指標需要上下文信息,并且可能具有誤導性。 那么, 設計人員在選擇處理器 IP 內核時需要考慮哪些事項呢?
指令集架構 (ISA)
選擇處理器最重要的考慮因素之一是指令集架構。30年前,許多集成設備制造商擁有自己的微控制器架構,市場被許多指令集架構分割。 然而 ,在當時 ,電腦市場由X86架構主導,X86不但擊敗了所有挑戰產品 ,而且開發了大量的應用軟件。
隨著 20 世紀 90 年代處理器 IP 公司的出現,越來越多的半導體公司采用第三方處理器IP, Arm 成為手機和嵌入式的主導架構。這導致許多公司開發的產品具有與競爭產品相同的處理器內核,這限制了芯片產品的差異化。然而,隨著Arm ISA的廣泛使用,一個令人印象深刻的軟件生態系統被開發出來。
數十年來,Arm一直被視為獨立于半導體公司之外,提供某種“瑞士中立性”。軟銀公司(SoftBank)的收購破壞了這種中立性,這意味著Arm不再獨立。這一點因Arm和Arm中國之間的緊張關系而加劇。如果Nvidia的收購通過,Arm將由持牌人擁有,完全失去任何中立的假象。許多半導體公司會因為競爭對手半導體公司的關鍵技術而感到不安。
在選擇 ISA 時,您需要考慮許多事項。其中三項最重要,包括:
a)復雜性
b)軟件生態系統
c)開放和中立
多年來,人們在增加ISA復雜性和減少ISA復雜性方面都做出了努力。坎皮納斯大學的一項研究表明,在1986年至2013年之間,X86架構增長了3倍多。Arm 的 ISA 也發生了類似的增長。
來源 - ISA Aging: A Case Study(《指令集架構老化:一項案例研究》),坎皮納斯大學
相反,加州大學伯克利分校的 RISC 項目始于 1980 年,當時只使用了 32 條指令,但利用流水線設計和寄存器窗口實現性能。這個概念被太陽微系統公司商業化為SPARC。1981 年,斯坦福大學 MIPS 項目開發了一個小型 ISA,包含 16 位和 32 位指令的組合。
最近,加州大學伯克利分校的克爾斯特·阿薩諾維奇(Krste Asanovi?)開始了“3個月項目(3-month project)”,目的是開發一個干凈利落的 ISA。這樣做是因為專有 ISA 具有局限性,包括:
?專利保護 – 成本
?ISA 所有權與處理器設計之間的聯系 – 單一供應商
?許多 ISA 的復雜性 – 通常不需要
?ISA 可能會隨著其擁有公司而消亡 – 風險會隨時間而變
這成為開放的 RISC-V ISA 標準。
RISC-V 的一個關鍵特征是它不是通用的 ISA。它認識到不同的應用需要不同程度的 ISA 復雜性。其中有一個非常小的基本指令集(只有 47 個指令的 32 位處理器),然后是一系列可根據需要使用的可選標準擴展。最后,還有用于創建非標準自定義指令的預配。
與專有商業 ISA 不同,RISC-V 使您能夠將 ISA 與其設計需求相匹配。 例如,來自 Arm 的高端 Cortex-A 處理器將具有 800 多個指令,但它們都是必需的嗎?使用 RISC-V 時,您可使用基本 ISA 加上具體所需的擴展,如 [G] 和 [P]。
軟件的可用性是一個關鍵的考慮因素。某些軟件僅在有限數量的 ISA 上可用,例如,安卓到目前為止僅移植到 Arm 和 MIPS。對于嵌入式軟件 ,許多軟件都有源代碼,因此可以移植到幾乎任何 ISA,而有些有二進制代碼。對于Arm來說,二進制形式的軟件有很多選擇,但對于其他專有的 ISA,選擇范圍小得多。
使用 RISC-V,如果將嵌入式軟件編譯到基本指令集或標準擴展(如 RV32IMC)的通用組合,那么不管目標處理器是什么,它都可以輕松以二進制形式交付。
最后,考慮 ISA 的開放性很有用。專有架構通常與單個公司聯系在一起,因此依賴于該公司的運行狀況和生存能力。如果Arm和MIPS由半導體公司所有,其他開發集成電路的公司就不再認為它們是中立的。
RISC-V 開放 ISA 由獨立的 RISC-V 國際組織所有,而不是由單個公司擁有。因此,因此,即使提供RISC-V處理器IP的公司資不抵債,也可以選擇其他RISC-V內核供應商。投資針對 RISC-V 內核的軟件是一種低風險選擇。
性能
看看任何處理器 IP,您會發現其供應商強調 PPA(性能、功率和面積)數字。從理論上講,它們應為比較不同的處理器IP內核提供一個公平的競爭環境,但實際上 情況更為復雜。 讓我們考慮一下什么是“性能”。
首先要考慮的是,您關心性能的哪些方面?您更關心所需的絕對吞吐量(每秒性能),還是更關心每 MHz 的性能?在機器視覺等持續運行且需要使用復雜算法的應用中,您很可能會關心絕對吞吐量。但是,如果您有一個低占空比的無線傳感器節點,當節點喚醒時,您將希望它在盡可能少的時鐘周期內處于活動狀態。這意味著您將關心每 MHz 實現的計算量。
大約 40 年前,計算機以MIPS(每秒數百萬條指令)為基礎進行比較,但問題是——什么是“指令”? 各種指令在復雜性和架構上有很大的不同,因此,在CISC處理器中的一個操作通常比在RISC處理器中需要的周期更少。MIPS 只有在將產品與類似體系結構進行比較時才有所幫助,有些人稱之為“毫無意義的性能指數”!
另一個要考慮的事項是您最關心的計算類型。這是整數操作嗎?如果是,是哪些操作?還是表示浮點計算?在過去,MFLOPS(每秒百萬個浮點操作)是一種受歡迎的衡量標準。但同樣,什么是“操作”?
如今,綜合基準已普遍用于處理器 IP 內核。它們具有以下特征:
a)它們相對較小,便于攜帶,
b)它們代表常用的相關應用,
c)它們透明且可重復,
d)它們可以公平地應用于一系列處理器,
e)它們將基準結果表示為單個數字。
過去 36 年來流行的基準是 Dhrystone 基準。其名稱取自與一度流行的“惠斯登基準”(Whetstone benchmark)相比較的文字游戲。惠斯登基準通專注于浮點操作,而 Dhrystone 則專注于整數和字符串操作。Dhrystone 基準結果通常被引用為 DMIPS(Dhrystone 分數除以名義上的 1MIPS 機器的分數)。該基準測試一直受到批評,因為現代編譯器可以優化部分工作,這意味著它部分測試的是編譯器,而不是處理器性能。
對于浮點,Whetstone 目前很少使用, 有時也會使用 LINPACK 等替代方法。LINPACK 涉及使用浮點數對矩陣進行 LU 分解。結果用 MFLOPS 表示。
自 2009 年以來,另一個流行的嵌入式應用綜合基準是 EEMBC 的 CoreMark? ,CoreMark?旨在開展代表嵌入式整數處理需求的操作。其中包括列表處理、矩陣操作、有限狀態機和 CRC。
由加州大學伯克利分校的戴夫·帕特森(Dave Patterson)領導的一個小組批評了所有的合成基準,轉而建議Embench作為使用真實程序的替代方案。隨著該行業的進一步發展,時間會告訴我們這種做法是否會贏得業內的關注,但計劃采用浮點基準令人鼓舞。
正如您所看到的,那里有許多不同的基準測試系統,每個系統都適合度量略有不同的性能類型。那么,在為項目選擇處理器IP時,如何評估性能呢? 如果您的嵌入式軟件具有與綜合基準類似的操作,則該基準可能會快速簡單地為您提供有用的初始指導。但是,此類基準通常以 MHz 報價,例如 CoreMark/MHz。如果您在按周期尋找良好效果,每兆赫數字值通常是低功率應用的一個好指標。但是,如果您正在尋找高絕對性能,這可能是誤導。相反,您應該考慮說,按您的目標時鐘頻率可實現的 CoreMarks。
如果您的主要問題是浮點性能,請記住 DMIPS 和 CoreMark 是整數基準。您最好根據浮點基準(如Whetstone或 LINPACK)比較內核; 然而,這些基準相當舊。
最后,強烈建議將時間投入在處理器內核上運行逼真的軟件,以此評估內核是否為您提供所需的性能。即使綜合基準測試給了你快速的指示,也沒有什么可以替代使用真正的應用軟件。如果您正在查看 RISC-V,那么可了解計算瓶頸在哪里的分析軟件也會評估添加自定義指令是否可以提高性能。
復雜性
處理器內核越復雜,面積和功耗越大 。但是,增加復雜性并不是單一維度,因為處理器可能在不同的方面更為復雜。在選擇處理器 IP 內核時,為項目選擇正確的復雜類型非常重要。
思考復雜性的方法包括:
-字長
-執行單元
-特權/保護
-虛擬內存
-安全功能
通常,字長越小,內核越小,功率越低,但情況并非總是如此。8 位內核(如 8051)在柵極數上與最小的 32 位內核相當,但功耗通常更差。8 位內核需要更多的內存訪問,每個時鐘周期的計算更少,需要的周期更多,因此需要更多的動態功率來完成計算。
處理器內核在執行單元的復雜性方面差異很大。最簡單的是基本的單個ALU(算術邏輯運算單元),需要通過簡單的指令實現許多常見操作,例如使用 shift and add算法來實現乘法。因此,內核具有硬件乘法器和除法器是司空見慣的事。在需要良好的浮點性能時,添加硬件浮點單元將顯著提高性能。此選項可用于 Codasip 的 Bk3 和 Bk5 RISC-V 內核,但代價是內核尺寸約擴大為兩倍。
到目前為止,我們已經假設了一次執行一個指令的標量處理單元和一個計算線程。Superscalar 體系結構具有指令級并行性,能夠獲取多個指令并將它們發送到不同的執行單元。例如,西部數據 EH1 和 EH2 SweRV 內核有兩個執行單元。處理一個線程的雙發射內核處理理論上可以使單發射內核的性能翻倍。
但是,線程可能會使兩個執行單元暫時處于非活動狀態。如果存在兩個硬件線程(harts),如果一個線程停止,另一個線程可以繼續執行。
另一個復雜的領域是特權模式 - 通常模式越多,核心邏輯越復雜。許多嵌入式應用程序在機器模式下運行,這意味著其代碼具有對內核的完全訪問權限,就像 Linux 中的根權限一樣。必須完全信任此類代碼,才能避免負面后果。在更復雜的應用中,可能會提供一系列特權,如機器、主管和用戶。普通應用將在用戶模式下運行,保護量最大,某些需要更大權限的軟件將使用主管模式。Linux 需要所有三種模式。 RISC-V 規范還定義了物理內存保護 (PMP),以此防止特權較低的模式訪問某些內存空間。
虛擬內存還需要額外的處理器資源,如內存管理單元 (MMU) 和轉譯后備緩沖器 (TLB)來處理將虛擬內存地址轉換為物理地址。這會在不提高處理器吞吐量的情況下,在面積和功耗方面帶來額外的成本。然而,虛擬內存對于使用豐富的操作系統(如 Linux)很有必要,這些操作系統能夠使用更復雜的軟件。
最后, 硬件安全功能增加了邏輯。這可能以向存儲器提供電子加密/解密的形式,提供糾錯編碼和篡改檢測塊功能。
因此,選擇處理器內核時,要弄清您需要什么樣的執行單元、內存管理 、特權和安全。這種組合將決定內核的復雜性。
操作系統
對于每個嵌入式產品,軟件開發人員需要考慮是否需要操作系統;如果是這樣,操作系統的類型千差萬別,包括內存占用很小的實時操作系統,以及具有豐富特性的通用操作系統(如Linux)。
為您的產品選擇適當的操作系統類型,并因此確定嵌入式處理器所需的功能,很大程度上取決于您是否面臨硬性實時要求。安全關鍵系統和工業系統(如防鎖制動系統或電機控制)將具有最大硬響應時間。在該頻譜的另一端,如果平均性能足夠,則音頻或游戲設備等消費類系統可能能夠容忍緩沖。據說這樣的系統有軟實時要求。
硬實時需求可以通過編寫直接控制底層硬件的所謂裸機軟件來實現。有時,處理器資源非常有限、軟件非常簡單和/或實時要求非常嚴格,引入進一步的抽象層會使滿足這些硬實時需求變得復雜時,這時通常會使用裸機編程。這種方法的缺點是,這樣的裸機軟件需要作為一個單一的任務(加上中斷例程)來編寫,這使得程序員很難在其復雜性增長時維護軟件。
在處理更復雜的嵌入式軟件時,使用實時操作系統 (RTOS) 通常比較有利。它允許程序員將嵌入式軟件拆分為多個線程,這些線程的執行由RTOS的小而低開銷的“內核”管理。使用多線程范式使開發人員能夠創建和維護更復雜的軟件,同時仍然允許足夠的響應。RTOS 通常使用分配給單個線程的“優先級”概念進行操作。然后,RTOS 可以“搶占”(暫時停止)優先級較低的線程,這樣做有利于那些具有較高優先級的線程,以此滿足所需的實時限制。在采用復雜的庫或協議堆棧(如 TCP/IP 或藍牙)時,通常需要使用 RTOS,因為這種第三方軟件通常已經包含多個線程。如今,許多開源和商業許可的RTOSes可供選擇。
對于一個簡單的RTOS(例如FreeRTOS或Zephyr)來說,嵌入式處理器的要求的確不高。擁有只配置機器模式 (M) 和定時器外設的 RISC-V 處理器就足夠了。因此,這些 RTOS 可以在任何 Codasip RISC-V 內核或西部數據 SweRV 內核上運行。但是,由于機器模式對具有相關風險的所有內存和外圍設備提供不受限訪問權限,因此需要嚴密的軟件開發。通過專門的 RTOS(例如為功能安全(如 SAFERTOS)或安全開發的 RTOS,可以提供額外的保護。
如果處理器內核同時支持機器 (M) 和用戶 (U) 權限模式,并且具有物理內存保護 (PMP),則有可能在受信任代碼(具有不受限訪問權限)和其他應用程序代碼之間建立隔離。使用 PMP,受信任的代碼為應用程序代碼的每個部分設置規則,并規定允許訪問內存(或外圍設備 )的哪些部分。例如,PMP 可用于防止第三方代碼干擾應用程序其余部分的數據,或檢測堆棧溢出。因此,使用 PMP 可提高系統的安全性,但代價是需要額外的硬件來支持它。
對于需要更高級用戶界面、復雜 I/O 和網絡(如機頂盒或娛樂系統)的應用程序,RTOS 可能過于簡單化。如果有復雜的計算、對完整的進程隔離和多任務處理的要求、文件系統和存儲支持,或者通過設備驅動程序將應用程序代碼與硬件完全分離,也同樣適用。此類系統通常具有軟實時要求,且最好由通用豐富的操作系統(如 Linux)提供。如前所述,Linux 需要多種 RISC-V 特權模式(計算機、主管和用戶模式(M、S、U))以及用于虛擬到物理地址轉換的內存管理單元 (MMU)。此外,與簡單的 RTOS 相比,此類系統的內存占用量要大得多。
最后,對于需要硬實時響應和 Linux 等豐富操作系統功能的嵌入式系統,通常使用兩個通信處理器子系統進行設計,一個支持 RTOS,另一個運行 Linux。
子系統硅面積
設計中任何部分的面積都會影響硅成本和功耗。在處理器IP供應商的PPA編號中簡單地遵循“A”可能會引起誤解。處理器從來都不是孤立的,它是子系統的一部分,另外還包括指令存儲器、數據存儲器和外設。在大多數情況下,指令內存將占主導地位,而處理器面積則不那么重要。
指令內存的大小將受目標指令集、編譯器和使用的編譯器切換的影響。在 RISC-V 的情況下,選擇可選的標準擴展和自定義擴展可以極大地影響代碼大小。
資料來源:《為物聯網應用實施 RISC-V》,Dan Ganousis & Vijay Subramaniam,設計自動化會議 2017
為了說明這一點,上表顯示了向內核和代碼大小添加擴展的效果。在此示例中,Microsemi 使用 Codasip RISC-V Bk3 內核實現音頻處理應用。從32位基指令集開始,它們的編碼和循環計數高得令人無法接受。通過添加乘法 [M] 擴展實現了一些改進,但突破是使用自定義 DSP 指令。這使得編碼大小減少了3.6倍,但與基礎內核相比,以增加2.4倍的核心尺寸為代價。在指令內存占主導地位的情況下,這是一個很好的權衡; 此外,性能目標很容易實現。
對于典型的供應商 PPA 數據,通常使用一組復雜的編譯器交換機引用一些綜合基準(如 CoreMark/MHz)。但在實踐中,嵌入式軟件可能會使用常見的交換機(如-Os或-O3)進行編譯。
請考慮利用通用的 GCC 編譯器使用不同的交換機編譯 CoreMark 基準。在這種情況下,目標是具有 3 階段流水線的 Codasip RV32IMC RISC-V 內核。下圖顯示了不同編譯器設置的 CoreMark/MHzcodesize和代碼大小度量值。最后一個示例是典型的供應商性能數據,其中許多交換機用于 CoreMark (CM = “-O3 -flto -fno-common -funroll-loops -finline-functions -falign-functions=16 -falign-jumps=8 -falign-loops=8 -finline-limit=1000 -fno-if-conversion2 -fselective-scheduling -fno-tree-dominator-opts -fno-reg-struct-return -fno-rename-registers --param case-values-threshold=8 -fno-crossjumping -freorder-blocks-and-partition -fno-tree-loop-if-convert -fno-tree-sink -fgcse-sm -fgcse-las -fno-strict-overflow”)。
在此示例中,CoreMark/MHz 分數隨著交換機從左到右的變化而增長。但是,有趣的是,最復雜的一組交換機在“-O3”上增加了40%的編碼大小,而性能只提高了14%。
并不是每個示例都會這樣運行,但編譯器交換機會影響性能和代碼大小。重要的是要實事求是地了解要使用的編譯器交換機,并確保任何性能基準數據的交換機與用于評估代碼大小的交換機相匹配。
許可模式
每個人都熟悉傳統處理器 IP 供應商(如 Arm、Cadence 和 Synopsys) 的商業許可。但是,在討論 RISC-V 開放指令集架構 (ISA) 時,普遍存在著術語上的混淆,即通常被描述為“開源”的RISC-V。有些人甚至指責商業RISC-V IP的供應商,如Codasip或Andes不符合RISC-V的精神。但現實是什么?
讓我們簡要地看一下定義。像C、Verilog或HTTP這樣的開放標準是由獨立組織維護的文檔定義的。因此,C 由 ISO 維護,Verilog 由 IEEE 維護,HTTP 由 IETF 維護。這些組織使用一套公正的規則維護技術標準。這樣的開放標準通常可自由訪問。
使用開源, 軟件包的源代碼或硬件塊的硬件描述語言源可使用許可證提供。開源許可證從限制性許可證(如非盈利版權許可證)到許可授權(如 Apache)各不相同。開源許可證定義使用、研究、修改和分發代碼的權利。非盈利版權許可證將要求任何修改都是開源的,而許可授權則不開放。
RISC-V是一個開放標準,ISA 不定義任何微體系結構或業務模型。因此,RISC-V 微體系結構可以作為商業 IP 許可證或作為開源許可證獲得許可。沒有規定。
如果我們想到一個經典的商業處理器IP許可證,您一般支付:
-使用供應商的 ISA 的權利,
-使用供應商的微觀體系結構的權利,
-保修,
-供應商承諾修復錯誤,
-賠償。
在實踐中,保修通常有時限,賠償有限。但是,對于被許可方,如果發現錯誤,尤其在日程緊張時發現的錯誤有價值,供應商有一些復設計的承諾。如果被許可人被指控專利侵權,知識產權賠償意味著供應商將代表被許可人為指控辯護或解決。
經典 IP 供應商小心翼翼地保護自己的 ISA 以及他們的微觀體系結構。普通許可證將 ISA 的使用與微體系結構捆綁在一起,并且沒有修改可交付結果的權利。此類供應商很少提供架構許可證,允許被許可方在自己的微體系結構中使用ISA,但是這樣的許可要求的費用很高。RISC-V非常具有破壞性的一個原因是,免費開放的ISA是最有價值的可交付產品之一,而且不需要支付許可費。
鑒于 RISC-V 沒有規定微體系結構或如何獲得許可,因此既有商業許可,也有開源的 RISC-V IP 內核。使用開源許可證時,您無需為微型體系結構支付許可證費用,但您也無法獲得商業許可證的所有好處。通常,交付物沒有擔保,并要接受“現狀”。同樣,商業許可證也不存在賠償。如果發現錯誤,則許可證方或開源社區需要修復它們。
對于商業許可的 RISC-V 內核,只有費用與微體系結構相關,因為 RISC-V ISA 是免費許可的。有了此許可證,您可以獲得通常與商業許可證相關的保修、賠償和錯誤修復承諾。
那么,RISC-V 的哪個選擇正確呢?商業許可證和開源許可證都有優點和缺點。您需要權衡最適合您的設計項目。
在Codasip, 我們提供商業RISC-V IP許可證,并支持采用開源SweRV內核。過去,商業許可證和開源許可證一直被視為激烈的競爭對手。然而, 在軟件界,微軟等公司已經接受了這兩種模式。Microsoft 提供商業許可證,支持開源項目,并且具有基于云的業務模型。Codasip 深信,商業和開源 RISC-V 許可證可以共存并相互補充。
結論
選擇處理器是一項復雜的任務,需要明確評估您的底層需求。對諸如供應商PPA數據或基準測試之類的度量進行膚淺的評估可能會產生誤導,并最終導致對處理器的次優選擇。
出發點應該是清楚地了解 SoC 項目需要什么。您是希望打開 ISA 還是由單個公司控制?您是否關心絕對吞吐量或每個時鐘周期的計算量?您面臨的是硬實時需求,還是需要一個豐富的操作系統? 實現計劃性能需要哪些計算單位?您需要在處理器內核上運行什么軟件, ISA 和編譯器怎樣組合會讓您實現所需的整個子系統領域?最后,比起避免許可證費, 您更關心獲得保修, 承諾修復潛在的錯誤和賠償?
審核編輯:黃飛
評論
查看更多