汽車電氣/電子(E/E)架構正在向計算資源的集中方向發展。這最初發生在域控制器中,然后轉向區域和集中式方法。隨著多個實時功能被合并為區域控制器,對處理器性能的需求就會提高,操作系統和軟件的復雜性也會增加。該行業正越來越多地轉向基于Armv8-R的解決方案,如Cortex-R52和Cortex-R52+cpu(在論文中總結為Cortex-R52+),以實現這種軟件集成的愿景。一些汽車芯片制造商已經將這些處理器納入到區域平臺和安全島的高性能微控制器設計中。與此同時,汽車軟件供應商已經建立了與Armv8-R集成的解決方案,在這個處理器家族中使用的Arm架構。這篇文章總結了這一行業趨勢的最先進的概述。
新系統的硬件和軟件必須同時滿足設備上承載的每個單獨工作負載的要求。這些內容包括:
—滿足工作負載的軟件依賴性,包括庫、操作系統調用(包括對輸入/輸出的訪問)和應用程序二進制接口(ABI)。可能需要這些版本的特定版本。當單個操作系統不能同時滿足所有依賴項時,系統軟件可以包括多個操作系統。
—性能,包括實時工作負載所需的決定論,可能有不同的硬實時響應時間要求,從幾微秒以上。如果未能滿足困難的實時需求,將導致工作負載的操作不正確。有些工作負載可能有更精簡的實時需求,因為無法滿足這些需求會導致性能下降。其他工作負載沒有專門的實時需求,因此這些軟件制品是在最好的基礎上執行的。
—對于功能安全的工作負載,滿足工作負載對正確執行環境的假設以及提供任何假定的外部安全機制是最基本的。執行環境和安全機制的汽車安全完整性級別(ASIL)必須高于或高于分配給工作量的級別。
—對于安全性相關性較低的工作負載,最好不僅僅因為設備上存在其他更高的ASIL工作負載而增加工作負載的ASIL
—通過確保其他工作負載無法訪問敏感數據,滿足安全要求,如機密性、完整性、隱私性和真實性
—能夠更新單個工作負載,包括無線固件(FOTA)。這還包括一系列其他主題,如工作負載的身份驗證、安全引導和系統級更新。管理程序的FOTA是一個大話題,在本白皮書中也不能討論。
—對于從已有的(遺留)應用程序派生的工作負載,理想的選擇是以最小的適應性集成工作負載。在集成為獨立系統硬件設計的工作負載時,軟件必須防止任何具有影響系統中其他應用程序的副作用的行為。—對于與規范應用程序相關的工作負載,可能需要獲得認證(例如,在與車載診斷(OBD)相關的應用程序中)。為了避免在每次其他工作負載更改時都需要重新認證,必須證明其他工作負載不會干擾已認證的工作負載。
通過承載多個工作負載,系統硬件和軟件必須在工作負載之間提供適當的隔離,以確保一個工作負載不會導致另一個工作負載無法滿足其要求。如果需要多個操作系統,則每個操作系統之間都存在類似的隔離要求。為了功能安全,這種類型的隔離被稱為免干擾(FFI),它需要一種機制來確保與一個工作負載相關的故障不會導致提供給另一個工作負載的執行環境和系統安全機制的故障。在工作負載之間提供這種級別的隔離的系統還帶來了一個優勢,即允許與其他工作負載隔離地開發(和調試)每個工作負載。如果工作負載來自不同的供應商,那么這一點尤其重要。
系統硬件和軟件提供了以下隔離機制:
—邏輯隔離。使用特權模型和內存保護機制隔離屬于不同工作負載的狀態。
—定時隔離。調度私有資源和共享資源,分區和監視共享資源,以及管理監視器計時器以檢測計時違規。
Cortex-R
ARM有一個CPU處理器組合,設計用于解決廣泛的計算,從最小,最低功率的微控制器到超高性能的服務器類計算。Cortex-R處理器已經開發使應用程序需要實時處理和適用于一系列不同的用例,尤其是在汽車應用程序,系統必須響應短和確定的時間框架成功地滿足系統的要求。在許多情況下,這些應用程序還包括功能安全(和安全性)需求,這些需求增加了系統集成商和開發人員所面臨的挑戰。Cortex-R處理器,如Cortex-R52+,可以用于獨立的微控制器(mcu),也可以作為SoC(芯片系統)設計的額外核心,例如作為一個安全島。
第一個Cortex-R處理器,如Cortex-R5,是建立在Armv7-R架構上的。然而,從那時起,架構已經發展,Arm的Cortex-R52和Cortex-R52+處理器實現了Armv8-R架構,這有助于解決汽車實時軟件日益復雜的問題,以及從離散專用控制器到功能集中和組合的控制器的過渡。Armv8-R體系結構增加了支持,使其能夠在單個處理器中更好地控制軟件,提供代碼的隔離,并支持可重復和可理解的行為,包括在實時處理器中的虛擬化。
Cortex-R52和Cortex-R52+處理器是高度可配置的,可以被定義以滿足實現者的應用程序要求。表1描述了一些可配置性。
作為Armv8-R體系結構的一部分,這些處理器為用戶空間異常級別0(EL0)和操作系統空間異常級別1(EL1)提供了額外的異常級別。這個新的異常級別2(EL2)可以用于幫助管理管理程序/分離內核來幫助管理處理器上的軟件,這簡化了合作伙伴如何控制軟件對共享資源及其交互的訪問。這可用于維護在同一操作系統上運行的單個處理器上或跨多個操作系統上的任務之間的隔離。
與新的異常級別一起,還增加了一個兩階段內存保護單元(MPU),它能夠強制執行處理器對不同資源的訪問。操作系統能夠在EL1上控制MPU的資源,但是處理器可以實現添加MPU的第二階段,這只能從EL2進行配置,管理程序可以從EL2運行。
對資源的訪問可以通過運行在新的更高異常級別2上的軟件進行管理。應用程序任務可以通過該軟件請求訪問所需的資源,這將強制使用兩級內存保護單元(MPU)進行訪問。這種方法并不局限于兩個不同的臨界級別,而且還可以支持許多具有不同保護功能的不同上下文。與內存管理單元(MMU)不同的是,MPU的可用性可以提供從Cortex-R處理器到系統資源的訪問管理,而無需引入額外的、潛在的調度中斷、延遲搜索時間和從內存中加載頁面表。這些項目很難管理,也難以評估和保證其及時完成。
MPU的兩個級別是:
—EL1MPU,它由操作系統管理,以強制操作系統與應用任務/isr分離,以及應用任務/isr彼此分離。EL1 MPU可以通過運行在EL2或EL1處的代碼進行編程。
—EL2 MPU,它只能通過運行在EL2上的代碼進行編程,并由一個系統管理程序用來提供額外的分離。
Cortex-R52+提供了核心之外的信息,以使系統能夠基于正在運行的軟件來建立和維護對訪問的控制。這是通過為設備事務傳播虛擬機ID(VMID)來實現的,以使系統能夠管理對這些資源的訪問。在Cortex-R52+的情況下,這通過支持緩沖區和內存事務和請求得到進一步擴展,這些事務和請求直接由EL2上的管理程序生成。
這些Cortex-R處理器集成了自己的通用中斷控制器(GIC),集群內所有cpu共享,以從系統提供低延遲中斷。這可以靈活地將共享外設中斷(SPI)分配和優先級分配給集群中的任何核心。GIC支持同時對物理中斷和虛擬中斷發出信號的能力,并可以捕獲對EL2的中斷訪問,以虛擬化中斷。
這些處理器具有緊密耦合的存儲器,以實現高度確定性、低延遲的核心訪問代碼和數據。它們有多個到外部資源的接口,包括SRAM、主內存和設備。接口訪問的資源是根據其地址位置進行分配的,實現者能夠靈活地分配他們所使用的內存映射中的空間,并管理要私人分配給虛擬機的資源的分配。
軟件集成機制
虛擬化和虛擬機
隨著車輛中軟件數量的增加,越來越多的應用程序被集成到一個微控制器上。這可以看到特別在域/區域控制器提供之間的橋梁非常強大的中央車輛計算機。
使用Cortex-R52+的管理程序和虛擬機微控制器可以支持集成應用程序與必要的分離的系統。每個應用程序都在其自己獨立的實例中運行——通常稱為分區或虛擬機(VM)
虛擬機通常由以下部分組成:
一些物理或虛擬處理器核心
—一些內存
—一些物理或虛擬外設
—一些物理或虛擬配置寄存器
管理虛擬機的軟件通常稱為系統監控程序、分離內核或VM管理器,在Cortex-R處理器上,在異常級別2(EL2)特權級別運行。在或多或少的程度上,系統監控程序會給在虛擬機內部運行的客戶軟件產生一種錯覺,即它運行在自己的微控制器上,而不會與其他虛擬機中的其他客戶軟件共享微控制器設備。一個物理處理器核心可以通過在虛擬核心之間進行上下文切換來托管多個虛擬核心,就像操作系統的上下文在進程之間進行切換一樣。虛擬核心的上下文是通用寄存器、浮點寄存器、一些系統配置寄存器和EL1 MPU的配置的值。在遺留軟件運行在VM內部的地方,我們希望虛擬機看起來盡可能地像一個真正的微控制器,以避免需要更改遺留軟件,而不是通過重新鏈接,以便在每個VM中運行的客戶軟件使用單獨的內存。
使用SMPU和外圍保護機制
SMPU的主要作用是控制哪些總線管理器(例如DMA控制器)可以訪問哪些內存地址。Cortex-R處理器核心和其他微控制器組件,如Cortex-M內核和一些外設,可以作為總線管理器。通常,一個SMPU將有一個區域的集合。每個區域都有一個可配置的起始地址、一個大小,并被分配給一個或多個總線管理器(或在更高級的設計中,使用存儲在Cortex-R52+的VSCTLR中的虛擬機標識符分配給一個或多個虛擬機。VMID寄存器)。總線管理器(或VM)只能訪問分配給它的區域中的內存。微控制器還可以包括外圍設保護機制,以允許將外圍設分配給總線管理器(或vm)。在這里,一個外設被分配給一個或多個總線管理器(或VM),然后外設保護機制禁止任何其他總線管理器(或VM)訪問外設的寄存器。
通過使用smpu和外圍設備保護機制,我們可以實現集群級的分離。也就是說,一個微控制器的內存和外設,可以在多個虛擬機之間進行分區,其中一個虛擬機包含一個Cortex-R核心集群中的所有核心。如果虛擬機有不同的安全級別(例如,不同的ISO 26262 ASIL級別),那么僅僅依賴上述機制將不允許我們在同一集群中擁有多個虛擬機。每個集群都有一個通用中斷控制器(GIC),用于將中斷路由到集群中的核心。每個核心都有一個單獨的GIC重新分配器來處理軟件生成的中斷(SGI)和私有外圍中斷(PPI),但是用于處理SPI中斷的GIC分配器對集群中的所有核心都是通用的。如果我們允許同一Cortex-R52核心集群中的多個虛擬機寫入內存映射的GIC分發器寄存器,一個VM可能會通過(意外或惡意地)改變其他虛擬機的中斷配置來干擾另一個虛擬機。
使用EL2進行Para-virtualization
除了像smpu這樣的保護機制和由微控制器提供的外圍保護外,Cortex-R52+本身還包括支持虛擬化的功能。其中一個特性是EL2特權級別。EL2比操作系統使用的EL1(監視器)級別和應用程序代碼使用的EL0(用戶)級別更有特權。一個虛擬機管理程序在EL2上運行,并且代碼在客戶軟件VM中運行,在EL1或EL0上運行。
HVC(EL1調用)指令可以使用HVC向管理程序發出請求,就像應用軟件可以使用SVC(HVC調用)指令向操作系統發出請求一樣。當運行在EL1上的軟件執行一個HVC指令時,Cortex-R52+核心會切換到EL2,并接受一個超模式的輸入異常。管理程序處理此異常,然后返回到EL1上的guest os.HVC指令允許對虛擬化。guest os知道它在虛擬機中運行,并且管理程序提供了API(使用HVC指令),guest os用來請求管理程序、插入到管理程序的設備驅動程序(EL2設備驅動程序),或請求在其他虛擬機中運行的設備驅動程序。
作為一個例子,考慮如何使用對虛擬化允許多個虛擬機存在于同一集群中,盡管共享GIC分發程序。SMPU(或核心MPU)被配置為使虛擬機無法訪問GIC的內存映射寄存器。當來賓軟件想要更改其中斷配置時,它會向管理程序發出API請求。管理程序在首先檢查了所請求的更改是否不會干擾其他VM后,執行必要的GIC配置。對虛擬化還可以用于允許外設共享和創建虛擬外設。外設備,如以太網控制器,可以以與GIC相同的方式共享。還可以創建完全虛擬的外設。例如,可以創建一個虛擬以太網控制器,用于運行在同一微控制器上的虛擬機之間的通信。在這兩種情況下,管理程序都將包含一個EL2設備驅動程序,該驅動程序要么管理了對共享外設的訪問,要么實現了虛擬外設。這類似于操作系統使用設備驅動程序來管理對由多個進程或任務共享的外設的訪問的方式。對虛擬化可以用作不支持或不完全支持硬件虛擬化的外設的解決方案。理想情況下,外圍設備將支持“實時系統的設備虛擬化原則”中所描述的虛擬化,以避免對準虛擬化的需要——至少在數據平面上是這樣。與設備傳遞(外圍設直接由客戶軟件驅動)相比,對虛擬化(以及陷阱和模擬)總是會添加一些額外的周期。
中斷虛擬化
中斷虛擬化EL2單獨不允許我們共享或虛擬化中斷驅動的外設。Armv8-R體系結構定義了通常當發生中斷時,它會中斷當前特權級別的當前運行的代碼。例如,如果代碼在EL1運行時發生IRQ,則中斷將使用EL1向量表中的IRQ條目在EL1處進行,但如果代碼在EL2運行時發生IRQ,則中斷將在EL2向量表中的IRQ條目在EL2處進行。為了解決這個問題,Cortex-R52+支持中斷虛擬化。當中斷虛擬化啟用(通過設置HCR寄存器的IMO和FMO標志和設置ICH_HCR寄存器),FIQ或IRQ中斷(例外)總是導致Cortex-R52+切換到EL2和使用EL2向量表FIQ或IRQ中斷。然后,管理程序可以處理中斷,或者使用Cortex-R52+核心的特性來虛擬化中斷(通過使用列表寄存器),這樣當來賓軟件在EL1/EL0處運行時,它使用EL1向量表在EL1處接受虛擬中斷。對于客戶軟件,虛擬中斷是獨立的。
由于所有中斷最初都由管理程序處理,管理程序可以決定中斷應該由管理程序本身、由EL2設備驅動程序處理,還是應該虛擬化并注入VM。這允許處理中斷驅動的共享/虛擬外設。如果需要,EL2設備驅動程序還可以向虛擬機中注入虛擬中斷。中斷虛擬化還允許“遠程控制”虛擬機。例如,運行在一個物理核心上的特權管理VM或EL2設備驅動程序可以在第二個物理核心中生成中斷,以請求管理程序在第二個核心上做一些事情,例如關閉或重新啟動在第二個核心上運行的VM。
當然,沒有什么是免費的,而且中斷虛擬化增加了處理中斷所需的總時間。確切的開銷取決于許多因素,包括中斷的到達模式和使用了多少個不同的GIC中斷。與中斷虛擬化相關的問題有兩個時間問題:
1。在EL2處虛擬化中斷的處理會消耗處理器時間。
2.由于虛擬中斷的優先級獨立于實際中斷的優先級,客戶軟件可能會看到時間異常。
虛擬處理器核心
我們還可以利用中斷虛擬化來支持虛擬處理器核心。例如,計時器中斷可以由系統管理程序處理,并用于驅動虛擬核心調度器,該調度器決定何時在虛擬核心之間進行上下文切換。由于來賓軟件無法阻止在EL2處發生的中斷,因此損壞或惡意的來賓軟件無法拒絕對其他來賓軟件的處理器時間。當前未運行的虛擬核心的中斷可以被虛擬化,在軟件中排隊,并在下次運行時注入虛擬核心中。在虛擬核之間的切換通常需要重新編程EL2 MPU。還必須注意協同處理器14和15配置寄存器(這些寄存器用于配置處理器的各個方面,如環境性,是否啟用緩存以及是否啟用EL1MPU)。其中一些寄存器對物理核心的影響可能會影響物理核心和虛擬機管理程序上的所有虛擬核心。其他寄存器的影響可能是特定于虛擬核心的,如EL1 MPU區域寄存器。后一類中的寄存器需要是虛擬寄存器的一部分
如果多個虛擬核由單個物理核托管,那么必須考慮如何安排虛擬核。最簡單的方法是使用靜態TDMA(時分多址)算法。TDMA算法具有非常低的運行時開銷,易于理解,并且容易計算虛擬核心何時在墻時鐘時間內運行。純靜態算法的缺點是,在處理異步事件(例如,中斷)時,它可能會導致較長時間的延遲。通過仔細構建靜態VM調度,可以避免長時間的延遲,以確保在處理中斷的VM運行之前不必等待太久。然而,這可能需要詳細了解中斷在最壞情況下的執行時間。系統處理具有短延遲的異步事件的另一種方法是使用動態調度算法。動態調度算法的一個例子是基于保留的調度,每個虛擬核心都是一個可延遲的服務器。這種算法已經在一些版本的ETAS RTA-HVR管理程序中使用過。這在處理異步時提供了更短的延遲。
使用虛擬處理器內核為系統設計者提供了靈活性:—可以創建一個虛擬機,它包含的內核比僅使用物理內核時可用的內核要多。額外的核心可能會使軟件的結構化變得更容易——就像在操作系統中使用線程一樣。—多個虛擬機可以由單個物理核心托管。然而,虛擬核之間的上下文切換有不少開銷,因為管理程序需要保存一個虛擬核的通用寄存器、浮點寄存器、相關配置寄存器和EL1 MPU設置,然后為另一個虛擬核重新加載這些寄存器。虛擬核心上下文開關類似于操作系統中的進程上下文開關。使用虛擬核心會影響中斷延遲。使用靜態調度算法,到達當前未運行的虛擬核心的中斷在虛擬核心下次運行之前不會被處理。通過一個自動切換到處理中斷的虛擬核心的動態調度算法,虛擬核心上下文切換時間將被添加到中斷延遲中。系統設計人員需要評估哪些應用程序。
軟件集成的建議
決定是否需要管理程序類型的分離還是os級分離更好?
上面描述的機制允許一個管理程序創建一種認為客戶軟件有自己的微控制器的錯覺,并強制執行運行客戶軟件的虛擬機之間的分離。如果要集成的應用程序是緊密耦合的(緊密耦合意味著應用程序相互調用同步函數或依賴于由同一調度器調度的所有應用程序中的活動),那么使用操作系統容器的集成可能更合適。AUTOSAR操作系統允許將任務和isr分組到被稱為“操作系統應用程序”的容器中,mpu可以用來分離這些不同的容器。操作系統級別的集成意味著使用一個調度器來調度所有任務,并且更好地支持緊密耦合的通信。像自動存儲系統Flex-CP這樣的新舉措正在開發中,以支持更動態的應用程序集成到經典的自動存儲系統系統中。
使用核心本地資源和集群-本地資源
最好使用內存和“接近”使用它們的核心的外設等資源。每個Cortex-R核心都有比其他類型的RAM更快地訪問的tcm。通常微控制器有集群本地Flash和RAM,并且在某些情況下,外設(例如,CAN和LIN控制器)可以被分配給一個集群。除了使用通常更快之外,使用集群本地資源通常會導致更少的內存總線爭用,因為訪問集群本地資源的核心可能不必與其他集群中的核心競爭訪問內存總線。請注意,使用接近核心的資源可能會在運行時限制物理處理器內核之間的虛擬處理器內核的任何遷移(如果支持這樣做的話)。例如,如果一個虛擬核心連接到本地flex-r核心集群0,如果遷移到集群1,虛擬核心的運行速度會更慢
考慮中斷延遲和實時需求
下表總結了適用于具有不同中斷延遲和實時需求的應用程序的技術摘要。
對未來微控制器的建議
為虛擬機提供細粒度的外設分配
如果外圍設可以以細粒度分配給虛擬機,那么就可以減少對EL2設備驅動程序的需求。例如,能夠將單個控制器區域網絡(CAN)通道,甚至單個通用輸入/輸出(GPIO)引腳分配給虛擬機是很有用的。這減少了對準虛擬化或陷阱和模擬的需求,從而提高了性能。雖然完全的外圍設備虛擬化是理想的(見下文),但一個折衷方案是使用對虛擬化/陷阱和模擬來執行外設的初始化和配置,但允許直接訪問數據平面。
支持外設的虛擬化
甚至比細粒度的虛擬機分配更好的是外設的完全虛擬化。在這里,一個外設將由一個管理程序配置,以向多個虛擬機呈現一個單獨的“視圖”。然后,每個虛擬機都可以使用外圍設備,就好像它已經被分配了一個外圍設備的唯一實例一樣。
確保DMA是虛擬化意識的
當VM使用DMA傳輸或使用DMA傳輸的外設時,DMA傳輸不能允許VM從SMPU或核心MPU通常禁止的內存地址讀寫。理想的情況是,DMA模塊/通道將自動繼承配置DMA模塊/通道的VM的標識,或配置使用DMA模塊/通道的外設的VM的標識。然后,DMA傳輸上的SMPU將至少檢查VM標識符,如果VM無權讀取或寫DMA傳輸中涉及的內存,則DMA傳輸將被阻止。為了支持這種行為,Armv8-R VMID應該分發給外設和DMA控制器。如果不可能自動繼承虛擬機身份,那么應該可以通過特權軟件實體以編程方式將DMA模塊/標識符分配給虛擬機,以便可以完成對DMA傳輸的SMPU控制。當單個物理核心可能運行多個VM時,由VM控制DMA,而不僅僅是總線管理器,則很重要。
采用可用的虛擬化標準來簡化軟件的可移動性
對于通常用于運行經典autosar系統的微控制器來說,虛擬化是一個相對較新的話題,自然地,微控制器制造商正在添加一些功能,以使他們自己相對于競爭對手具有優勢。然而,這些微控制器的用戶希望開發軟件,如果有必要,他們可以將軟件轉移到不同的微控制器上。因此,微控制器和系統管理程序的結合需要為微控制器的用戶提供一套相當標準的特性和特性使用方法。為此目的,在有行業標準的地方,就應該采用這些標準。在Armv8-R架構方面已經做了一些工作,在Arm的“實時系統的設備虛擬化原則”的論文中可以找到一個很好的例子。
總結
電子電子架構的發展,包括區域控制器,需要進一步的實時軟件集成解決方案。經典的自動存儲器是汽車實時軟件世界中事實上的一個標準,但進一步的集成選項,如遺留軟件,是必須向前推進的。帶有EL2分離選項的Armv8-R體系結構是啟用智能集成選項的一個很好的選項。不過,如何使用此集成選項高度依賴于應用程序,而專用的應用程序需求將定義哪種集成方式最適合。本文介紹了各種不同的技術,可用于支持不同類型的應用程序的集成。這將有助于系統設計師理解如何最好地使用Cortex-R52+內核來支持應用程序集成。
來源:功能安全開發???????
審核編輯:湯梓紅
-
微控制器
+關注
關注
48文章
7651瀏覽量
152115 -
處理器
+關注
關注
68文章
19409瀏覽量
231189 -
ARM
+關注
關注
134文章
9168瀏覽量
369217 -
Cortex
+關注
關注
2文章
203瀏覽量
46600 -
汽車軟件
+關注
關注
1文章
102瀏覽量
3231
原文標題:Armv8-R Cortex-R52+軟件集成的最佳實踐
文章出處:【微信號:談思實驗室,微信公眾號:談思實驗室】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論