兩個核心比一個好!有時,兩個不同的內核比兩個相同的內核更好!本應用筆記解釋了原因。
介紹
當大多數人想到多核處理器時,他們的腦海中會立即想到個人電腦、智能手機或其他高級計算設備。這些設備統一具有復雜的用戶界面和搶占模式操作系統。
當我們閱讀新PC或新智能手機的評論時,通常會提到的一件事是內核數量:“該設備中的CPU有四個內核,最多支持八個線程。有了這些信息,我們知道操作系統可以將任務調度到任何內核,以嘗試平衡整體工作負載。
在這種環境中,所有計算核心都盡可能相同。畢竟,必須針對不同的 CPU 架構單獨編譯每個任務是沒有意義的。
但對于深度嵌入式處理器,擁有大量相同類型的內核可能不如擁有多個專用內核那么理想。
差異化內核案例
首先,在許多深度嵌入式應用程序中,甚至可能沒有操作系統。由設計人員決定哪些任務在哪些內核上運行、何時運行以及運行多長時間。其次,主任務很可能在單個線程中運行,任何其他內核都將在那里運行特定的專用任務。
在這些情況下,人們并不真正關心內核是否都相同,一個CPU處理所有監督任務,另一個從屬計算內核處理專用任務。擁有在特定區域具有更多功能、使用更少功率或消耗更少芯片硅面積的專用內核更有意義。
例如,考慮MAX32655。它是一款基于 Arm Cortex-M4 的微控制器,Arm Cortex-M4 是一款功能強大、備受推崇的單線程 CPU 內核。MAX32655具有半兆字節閃存、128KRAM和許多外設,包括低功耗藍牙無線電。?
現在,就停在那里。低功耗藍牙可能聽起來像是硬件功能,但它與軟件和硬件一樣多。你看,硬件實際上相當簡單:發射器和接收器必須具有一定的頻率捷變性,因為它們必須調諧到四十個可能的通道中的任何一個,并且它們必須快速完成。發射器和接收器均可快速打開和關閉以節省功率。他們必須處理高斯頻移鍵控調制和解調。不是微不足道的,但也不是特別具有挑戰性。
但是軟件 - 這可能是真正的挑戰!主機必須管理一整套協議——屬性協議、鏈路層控制和適應協議、安全管理器協議等。并且有一個接口將主機連接到控制器層。正是這一層管理無線電硬件,也不是微不足道的。有一個設備管理器、鏈路管理器和鏈路控制器——這些功能塊將無線電硬件的細節抽象到主機協議。
關于BLE軟件堆棧的好消息是您不必編寫它。在大多數環境中, 當您指定特定的 BLE 設備時,軟件堆棧就會出現.壞消息是BLE軟件堆棧要求很高。這并不是說它需要特別大的處理器帶寬或存儲,但BLE堆棧中的時序至關重要。這意味著當BLE需要完成某事時,需要立即完成!如果微控制器內核已經在執行一些時間關鍵型功能,則必須提供一些東西!
這就是第二個核心的用武之地。主內核被釋放出來,將其資源投入到用戶程序中,因為它可以將BLE任務移交給第二個內核。沒有延遲問題,不用擔心BLE堆棧會在錯誤的時刻中斷內核。第二個獨立核心解決了很多問題!
選擇合適的核心
第二個內核對于運行BLE堆棧是有意義的。但是選擇哪個核心呢?
一種選擇是使用第二個Arm Cortex-M4。M4帶來了很多資源。它是AMBA總線的原生版本,藍牙庫都針對Cortex-M系列內核進行了很好的編譯。那么,為什么不是第二個 M4?
事實是,與Arm Cortex-M4一樣高效,它比運行BLE堆棧的專門任務所需的CPU更多。更小,更慢,更適度的CPU會做得很好。但是哪個 CPU?
向RISC-V(發音為risk-five)核心問好!與Arm Cortex-M4一樣,它是一個基于RISC架構的32位CPU。RISC,或簡化指令集計算,是一種計算機體系結構哲學,它斷言一小組簡單的指令比一大組更復雜的指令更有效地執行。在大多數情況下,RISC在很大程度上贏得了CISC(復雜指令集計算)的爭論。但是CISC計算仍然有一個巨大的堡壘:x86架構。大多數其他計算環境——以及幾乎所有嵌入式處理器——都采用了RISC。
在評估新的CPU內核時,首先跳出的三件事是指令集架構,寄存器補碼和程序員模型。下一節將探討RISC-V和Arm Cortex-M4之間的這些因素有何不同。
比較指令集
在查看指令集之前,請記住:像C這樣的高級語言不是計算機的母語。C 編譯器將程序轉換為一組由內核執行的機器指令。一個 C 語句可以轉換為數十條機器指令。C編譯器已經變得如此高效,以至于匯編語言編程,即一個語句完全轉換為一個機器指令,已經成為一種失傳的藝術。
然而,C語句——或Python,或JavaScript,或其他高級語言——最終用原生機器代碼表達。因此,關注指令集的工作原理是有意義的。
Arm Cortex-M4基于ARMv7E-M指令集架構。雖然Arm Cortex-M4是32位CPU,但ARMv7E-M指令集使用Thumb-2指令編碼,大多數情況下,這些是16位指令。這里有一個故事。
最初,Arm 指令集是 32 位的。盡管底層架構是RISC,但指令集很豐富,但在代碼大小方面并不是特別有效。Arm在90年代中期提出了Thumb編碼,以解決這些關于指令集效率的擔憂。拇指指令的長度為 16 位,與以前使用的 32 位編碼的子集非常接近。指令集效率更高,但留下了許多功能。
Thumb-2 于 2003 年推出,混合使用 16 位和 32 位編碼,在恢復一些 32 位編碼功能的同時保留了大部分代碼密度優勢。當然,這種方案有一個缺點:它會導致可變長度指令集。但是今天,Thumb-2編碼已經成熟且易于理解,實際上是Arm Cortex-M4內核支持的唯一指令編碼。
相比之下,大多數RISC-V方案(包括Maxim的MAX32655中使用的實現方案)都使用純32位編碼。RISC-V支持可選的壓縮編碼,其術語為16位指令支持。但與 Arm Cortex-M4 中的 Thumb 指令編碼不同,它確實是可選的。
但是有什么指示呢?
ARMv7E-M和RISC-V指令集都支持負載存儲架構。這意味著,算術和邏輯指令的操作數必須從內存顯式加載到寄存器中,一旦執行操作,結果必須顯式存儲回內存。
負載存儲架構是RISC內核的標志,但除此之外,ARMv7E-M指令集并沒有太多的“減少”。ARM指令集包含數十條指令和指令變體,具有條件執行,作為指令操作數的移位,許多位和字節操作子指令以及多種內存尋址模式。把這一切加起來,它使ARM內核成為一個相當復雜的邏輯。
RISC-V并非如此。RV32I指令集中只有40條基本指令。由于其中許多可以分組到指令族中,因此指令集變得更加易于理解:有六個分支指令,五個加載指令,三個存儲指令和兩個用于函數調用的“跳轉和鏈接”指令。把這些指令家庭放在一起,只有28個指令需要考慮。
為了使事情更簡單,只有六種編碼格式:注冊到注冊、立即、上層立即、存儲、分支和跳轉。就是這樣!RISC-V編譯器的代碼生成部分很容易。
看看所有這些寄存器!
現在,寄存器補充:ARMv7E-M 架構指定了 16 個寄存器,其中 13 個是通用寄存器。RISC-V架構指定了32個寄存器,其中除一個寄存器外,其他所有寄存器都是通用的。以下是它們的工作原理。
臂寄存器命名為 R0 到 R15。但是前三個寄存器有特殊的用途:R15是程序計數器,對R15的任何寫入實際上都是跳轉到該位置。R14是鏈路寄存器。執行分支和鏈接(函數調用)時,返回地址存儲在 R14 中。R13 是堆棧指針。PUSH指令遞減R13并將指定寄存器中的值存儲到降序存儲器位置;POP 指令從升序內存位置加載值并遞增 R13。
RISC-V寄存器被命名為x0到x31,只有一個用戶可見的特殊用途寄存器:x0在讀取時始終返回零值,寫入x0的任何內容都會被丟棄。這對簡化指令集編碼來說是一個真正的福音。
所有其他寄存器都是真正的通用寄存器。按照慣例,x1 用作返回地址(Arm 稱之為鏈接寄存器),x2 用作堆棧指針,但硬件中沒有任何內容可以強制執行(除非在核心設計中實現了壓縮擴展,但那是另一回事)。雖然 ARM BL(分支和鏈接)指令始終將返回地址存儲在 R14 中,但 RISC-V JAL(跳轉和鏈接)指令允許您指定獲取返回地址的寄存器。
RISC-V指令集中似乎缺少一些指令,例如寄存器到寄存器的移動操作!相反,一個寄存器的內容使用 ADDI 指令移動到另一個寄存器:ADDI rd, rs, 0 將 rs 的內容添加到值零并將結果存儲在 rd 中,從而有效地將 rs 中的任何內容移動到 rd。整潔!
您可能認為 ADDI 是 MOVE 的糟糕替代品,因為算術指令會修改標志寄存器,而 MOVE 不會。在RISC-V內核中,這不是一個問題,因為沒有標志寄存器!相反,分支指令 - BEQ(如果相等則分支)、BNE(如果不等于則分支)、BLT(如果小于則為分支)、BGE(如果大于或等于則為分支)、BLTU(如果小于,則為分支,無符號)和 BGEU(如果大于或等于,則為分支,無符號)——都接受兩個寄存器說明符,執行比較,然后有條件地獲取分支。
但是,如果結果為零,如何分支?只需寫 BEQ rs x0 .請記住,x0 始終包含值零。這使得編寫測試零、非零、負或正值的分支指令變得容易。
因此,雖然RISC-V的指令集和程序員模型對于那些習慣于Arm指令集的人來說可能看起來有點陌生,但它確實功能強大且完整。
這些內核是如何堆疊的?
所以,現在我們來到一個大問題:為什么要使用RISC-V內核來運行BLE堆棧?
答案在于可定制性。所有商用CPU內核都允許一定程度的定制,這也適用于Arm Cortex-M系列。不過,一般來說,Arm 內核中提供的自定義選項是大粒度的。例如,它是否具有浮點運算或嵌入式跟蹤?
相比之下,RISC-V內核具有芯片設計人員可以啟用或禁用的一整套擴展:三種浮點單元(單精度,雙精度和四精度),原子指令,整數乘除法,壓縮指令以節省代碼空間,以及其他規格尚未凍結。
在設計運行BLE控制器堆棧的內核時,RISC-V內核只需整數乘法和除法擴展即可構建。沒有必要包含其他功能, 因為它們對運行 BLE 堆棧沒有任何幫助.因此,沒有理由占用硅空間并消耗支持這些功能的功率。我們可以比主 Arm Cortex-M4 更慢地為核心計時。更慢地對內核進行計時可以降低內核的功耗。
這就是為什么提前知道第二個內核的用途有助于芯片設計人員并有助于創造最佳的微控制器體驗!
審核編輯:郭婷
-
智能手機
+關注
關注
66文章
18499瀏覽量
180403 -
寄存器
+關注
關注
31文章
5357瀏覽量
120591 -
操作系統
+關注
關注
37文章
6842瀏覽量
123409
發布評論請先 登錄
相關推薦
評論