天天看點

MPU進化,多核異構處理器有多強?A核與M核通信過程解析1. 硬體層通信實作機制2. 驅動層Virtio下RPMsg通信實作3. 應用層雙核通信實作方式4. 實際使用效果

内容來源:www.forlinx.com

随着市場對嵌入式裝置功能需求的提高,市面上出現了內建嵌入式處理器和單片機的主要方案,以兼顧性能和效率。

在實際應用中,嵌入式處理器和單片機之間需要進行大量且頻繁的資料交換,如果采用低速串行接口,則資料傳輸效率低,這将嚴重影響産品的性能;而如果采用高速并口,則占用管腳多,硬體成本将會增加。

MPU進化,多核異構處理器有多強?A核與M核通信過程解析1. 硬體層通信實作機制2. 驅動層Virtio下RPMsg通信實作3. 應用層雙核通信實作方式4. 實際使用效果

為解決這一痛點,各大晶片公司陸續推出了兼具A核和M核的多核異構處理器,如NXP的i.MX8系列、瑞薩的RZ/G2L系列以及TI的AM62x系列等等。雖然這些處理器的品牌及性能有所不同,但多核通信原理基本一緻,都是基于寄存器和中斷傳遞消息,基于共享記憶體傳輸資料。

以配電終端産品為例,A核負責通訊和顯示等人機互動任務,M核負責采樣和保護等對實時性要求較高的任務,雙核間互動模拟量、開關量和錄波檔案等多種資訊,A核+M核的方案既滿足了傳統采樣保護功能,又支援多種接口通信及新增容器等功能,符合國家電網現行配電标準。

MPU進化,多核異構處理器有多強?A核與M核通信過程解析1. 硬體層通信實作機制2. 驅動層Virtio下RPMsg通信實作3. 應用層雙核通信實作方式4. 實際使用效果

通信過程整體架構說明

接下來小編将以NXP的i.MX8MP為例,借助飛淩OKMX8MP-C開發闆分别從硬體層、驅動層、應用層介紹大緻的通信實作流程以及實測效果。

1. 硬體層通信實作機制

通過實體記憶體DDR配置設定,将硬體層分為了兩部分:TXVring Buffer(發送虛拟環狀緩沖區)和RXVring Buffer(接收虛拟環狀緩沖區);其中M核從TXVring區發送資料,從RXVring區讀取接收資料,A核反之。

處理器支援消息傳遞單元(MessagingUnit,簡稱MU)功能子產品,通過MU傳遞消息進行通信和協調,晶片内的M7控制核和A53處理核通過通過寄存器中斷的方式傳遞指令,最多支援4組MU雙向傳遞消息,既可通過中斷告知對方資料傳遞的狀态,也可發送最多4位元組資料,還可在低功耗模式下喚醒對方,是保證雙核通信實時性的重要手段。

MPU進化,多核異構處理器有多強?A核與M核通信過程解析1. 硬體層通信實作機制2. 驅動層Virtio下RPMsg通信實作3. 應用層雙核通信實作方式4. 實際使用效果

寄存器輸入輸出通信模型

(1)CoreA寫入資料;

(2)MU将Tx 空位清0,Rx滿位置1;

(3)産生接收中斷請求,通知CoreB接收狀态寄存器中的接收器滿,可以讀取資料;

(4)CoreB響應中斷,讀取資料;

(5)CoreB讀完資料後,MU将Rx滿位清0,Tx空位置1;

(6)狀态寄存器向CoreA生成發送中斷請求,告知CoreB讀完資料,發送寄存器空。

通過以上步驟,就完成了1次從CoreA向CoreB 傳遞消息的過程,反之亦然。

2. 驅動層Virtio下RPMsg通信實作

Virtio是通用的IO虛拟化模型,位于裝置之上的抽象層,負責前後端之間的通知機制和控制流程,為異構多核間資料通信提供了層的實作。

RPMsg消息架構是Linux系統基于Virtio緩存隊列實作的主處理核和協處理核間進行消息通信的架構,當用戶端驅動需要發送消息時,RPMsg會把消息封裝成Virtio緩存并添加到緩存隊列中以完成消息的發送,當消息總線接收到協處理器送到的消息時也會合理地派送給客戶驅動程式進行處理。

在驅動層,對A核,Linux采用RPMsg架構+Virtio驅動模型,将RPMsg封裝為了tty檔案供應用層調用;在M核,将Virtio移植,并使用簡化版的RPMsg,因為涉及到互斥鎖和信号量,最終使用FreeRTOS完成過程的封裝,流程框圖如下方所示。

MPU進化,多核異構處理器有多強?A核與M核通信過程解析1. 硬體層通信實作機制2. 驅動層Virtio下RPMsg通信實作3. 應用層雙核通信實作方式4. 實際使用效果

主處理核與協處理核資料傳遞流程圖

(1)Core0向Core1發送資料,通過rpmsg_send函數将資料打包至Virtioavail連結清單區;

(2)在avail連結清單尋找共享記憶體中空閑緩存,将資料置于共享記憶體中;

(3)通過中斷通知Core1資料到來,共享記憶體由avail連結清單區變至used區;

(4)Core1收到中斷,觸發rpmsg的接收回調函數,從used區擷取資料所在的共享記憶體的實體位址,完成資料接收;

(5)通過中斷通知Core0資料接收完成,共享記憶體緩存由used區變為avail區,供下次傳輸使用。

3. 應用層雙核通信實作方式

在應用層,對A核可使用open、write和read函數對 /dev下裝置檔案進行調用;對M核,可使用rpmsg_lite_remote_init、rpmsg_lite_send和rpmsg_queue_recv函數進行調用,不做重點闡述。

4. 實際使用效果

通過程式實測,M核和A核可以批量傳輸大資料。同樣以配電産品為例——128點采樣的錄波檔案大約為43K,若通過傳統的串行總線傳輸方式,需要數秒才可完成傳輸。

而使用i.MX8MP的雙核異構通信方案,隻需要不到0.5秒即可傳輸完成,資料傳輸效率提升數十倍!同時還避免了串行總線易受EMC幹擾的問題,提高了資料傳輸穩定性,簡化了應用程式設計,可滿足使用者快速開發的需求。

以上就是多核異構處理器中A核與M核通信過程的解析,想要了解具體詳細程式執行個體,可到【飛淩嵌入式官方微信公衆号】回複關鍵詞“程式執行個體”檢視。

繼續閱讀