多核的微控制器(MCU)向來是設(shè)計(jì)上的一大挑戰(zhàn),尤其是多核異構(gòu)的設(shè)計(jì)。而MCU雙核作為其中的精簡版本,憑借其超強(qiáng)的處理性能和便捷開發(fā)的特性,很快受到業(yè)界的好評。先楫半導(dǎo)體先后推出了幾款高性能MCU雙核產(chǎn)品,集成 2 個 RISC-V 處理器,其中HPM6700系列兩個核的最高主頻都可以達(dá)到816MHz。本文通過對先楫HPM6000系列雙核的使用方法、工程編譯與調(diào)試、雙核通信方式和資源分配等內(nèi)容的介紹,全方位給大家介紹雙核的使用和操作,讓大家輕松玩轉(zhuǎn)雙核,完成更多的片上系統(tǒng)功能開發(fā)。
接下來,讓我們看一看HPM6000系列雙核MCU是如何玩轉(zhuǎn)起來的吧~
雙核簡介
Introduction
HPM6000系列的雙核配置,均集成 2 個 RISC-V 處理器,雙核采用主從結(jié)構(gòu)。CPU0 和 CPU1 采用相同配置,如下:
● 支持相同指令集
● 相同容量的 L1 指令和數(shù)據(jù)緩存
– 32KB L1 I-Cache,4-way,128x 64B cache line per way
– 32KB L1 D-cache,4-way,128x 64B cache line per way
● 相同容量的指令和數(shù)據(jù)本地存儲器:256 KB ILM 和 256 KB DLM
CPU0 和 CPU1 采用相同的存儲器映射,以下為例外:
● CPU 自身的指令/數(shù)據(jù)本地存儲器 ILM / DLM 為私有;
● FGPIO 為私有
● 軟件中斷控制器 PLICSW 為私有
● 機(jī)器定時器 MCHTMR 為私有
雙核的三種使用方法推薦
Recommendation
不論是在RAM中運(yùn)行,還是片上Flash運(yùn)行,雙核固件均是存儲在Flash上??蛻舾鶕?jù)應(yīng)用場景,選擇在上電后將雙核各自的鏡像從Flash中裝載到RAM中執(zhí)行或者基于Flash片上執(zhí)行。
根據(jù)應(yīng)用場景,選擇合適的運(yùn)行方式,推薦以下幾種:
方案一:Core0 加載到RAM運(yùn)行,Core1加載到RAM運(yùn)行
RAM區(qū)域可以是各自的ILM,也可以片上的SRAM,或者是SDRAM。當(dāng)然,裝載CODE的RAM區(qū)域各自都是獨(dú)立的。此方案應(yīng)用與雙核固件均占用小,可完全裝載到RAM中運(yùn)行。
固件存儲位置:Core0和Core1的固件均存放在Flash指定區(qū)域(Flash分區(qū)規(guī)劃)。上電后,BootRom 從指定Flash區(qū)域裝載Core0鏡像到指定RAM運(yùn)行(type:debug/release),Core0運(yùn)行后從指定Flash 區(qū)域裝載Core1鏡像到指定RAM,然后運(yùn)行Core1。
方案二:Core0基于flash xip(flash片上執(zhí)行)運(yùn)行,Core1加載到RAM運(yùn)行
此方案應(yīng)用與Core0核固件占用大, Core1核固件占用小。通常將Core0用來做應(yīng)用復(fù)雜交互,Core1用來做高實(shí)時性,高性能的觸發(fā)邏輯。
固件存儲位置:
1). Core0和Core1的固件各自存放在Flash的指定區(qū)域(Flash分區(qū)規(guī)劃)。
優(yōu)點(diǎn):Core0和Core1可單獨(dú)OTA。
缺點(diǎn):需要維護(hù)兩個固件BIN文件,并存放到各自的區(qū)域中。
2). Core1的固件以數(shù)組(只讀區(qū))鏡像的方式存儲在Core0的固件中,Core0固件存放在Flash指定區(qū)域;官方例程中使用此方案。
優(yōu)點(diǎn): 只維護(hù)一個固件。
缺點(diǎn):Core0和Core1不可單獨(dú)OTA。
方案三:Core0基于flash xip0(flash片上執(zhí)行)運(yùn)行,Core1基于flash xip1(flash 片上執(zhí)行)運(yùn)行
此方案應(yīng)用與Core0核和Core1核固件均很大,雙核均無法滿足放到RAM中運(yùn)行。
注意:由于雙核均基于flash片上執(zhí)行,如果使用同一個flash XPI,會出現(xiàn)并發(fā)訪問Flash的情況導(dǎo)致未知異常發(fā)生;如果強(qiáng)制順序訪問,訪問效率極低,嚴(yán)重拖垮CPU運(yùn)行速率;故不建議兩個核使用同一個flash XPI片上執(zhí)行。建議使用XPI0和XPI1各自外掛一個FLASH,分別用于Core0 Flash xip0和Core1 Flash xip1。
固件存儲位置:Core0和Core1的固件存儲在各自外掛的Flash的指定區(qū)域中。
雙核工程編譯與調(diào)試
Compilation and Debugging
HPM雙核是集成了兩個RISC-V 處理器,是兩個完全獨(dú)立的CPU,故HPM雙核工程是Core0工程和Core1工程兩個獨(dú)立的工程。因此HPM雙核工程編譯,其實(shí)是兩個獨(dú)立的單核工程的編譯。用戶只需要建立core0和core1的各自工程編譯調(diào)試即可。
由于HPM-SDK例程中使用的是方案二,且Core1的固件以數(shù)組(只讀區(qū))鏡像的方式存儲在Core0的固件中,導(dǎo)致Core1工程為Core0工程的關(guān)聯(lián)工程。因此在構(gòu)建工程時,必須先構(gòu)建生成Core0工程,作為關(guān)聯(lián)工程Core1工程會自動生成。由于Core1的固件是Core0工程中的只讀數(shù)組,故必須先編譯Core1工程生成只讀數(shù)組鏡像后,再編譯Core0工程。
如下構(gòu)建編譯調(diào)試雙核hello world工程:
A. 構(gòu)建工程
先構(gòu)建生成Core0工程:
由于Core0是flash片上執(zhí)行,故type選擇:flash_sdram_xip或flash_xip
作為關(guān)聯(lián)工程Core1工程會自動生成:
B. 編譯工程
打開各自的工程(Core0通過GUI工具直接點(diǎn)擊Open Project with IDE, Core1對應(yīng)目錄下雙擊打開工程)。
用SES編譯各自的工程即可。
C. 工程調(diào)試
一、雙核同時調(diào)試
基于OpenOCD調(diào)試(FT2232/DAP-LINK等)。
為了達(dá)到Core0和Core1同時調(diào)試,基于OpenOCD調(diào)試在HPM-SDK例程中,對Core1的Debug做了如下限制:
1)Core1不啟動GDB Server,連接Core0啟動的GDB Server。當(dāng)然使用不同的port來區(qū)分是Core0(Port:3333)還是Core1(Port:3334)。
2)Reset 和 Stop時,直接hart停止運(yùn)行。
如下圖:
因此,調(diào)試HPM-SDK雙核例程,步驟如下:
步驟1:Core0的工程調(diào)試,和正常的單核調(diào)試相同,正常SES啟動debug即可。
步驟2:Core1的工程調(diào)試,由于上述限制(為了雙核同時調(diào)試),必須先將Core0的工程Debug運(yùn)行,然后在啟動Core1的Debug仿真。
可在Core0 SES終端看到Core1 GDB connect信息:
基于Jlink 調(diào)試
基于Jlink調(diào)試,對Core0和Core1的Debug做如下修改:
1. Core0 修改Debug連接target為:J-Link
2. Core1修改Debug連接target為:J-Link
3. Core1修改Debug Device為:HPM6750xVMx_CPU1
4. 由于SES修改Device為CPU1(上一步驟修改),聯(lián)動修改ISA為:rv32i,導(dǎo)致編譯等異常。故在Code Generation下改回ISA為:rv32imac。
5. 通常初始化時鐘等外設(shè)在Core0中完成,故為了雙核能同時調(diào)試,需先運(yùn)行Core0 Debug至完成時鐘等外設(shè)初始化后,方可Core1 Debug運(yùn)行。
二、雙核單獨(dú)調(diào)試
基于 OpenOCD 調(diào)試
如果只用來單獨(dú)調(diào)試Core1(Core0的單獨(dú)調(diào)試不做任何修改即可),可修改Core1的Debug配置,如下:
Auto Start GDB Server: Yes
Reset and Stop Command: reset halt
修改后, 可直接啟動Core1 Debug運(yùn)行。
注意:由于CPU0,CPU1主從架構(gòu),通常外設(shè)等時鐘初始化會在Core0中完成。如果是單獨(dú)調(diào)試Core1,為了確保程序能正常運(yùn)行,需在Core1工程中初始化時鐘等外設(shè)。如下:
基于 Jlink 調(diào)試
單獨(dú)調(diào)試Core1 (Core0的單獨(dú)調(diào)試不做任何修改即可),JLink修改同雙核JLink修改一致(可參考上方介紹的內(nèi)容)。
同樣為了確保Core1能正常運(yùn)行,需在Core1工程中初始化時鐘等外設(shè)。
下一篇,我們將會給各位小伙伴們介紹雙核的通信方式、資源分配和雙核應(yīng)用eRPC架構(gòu),敬請期待。
-
mcu
+關(guān)注
關(guān)注
146文章
16796瀏覽量
349329 -
先楫半導(dǎo)體
+關(guān)注
關(guān)注
10文章
214瀏覽量
2026
發(fā)布評論請先 登錄
相關(guān)推薦
評論