Zynq UltraScale四核調(diào)試
硬件型號:MZU07C
APU:?A53四核
RPU:R5兩核
這節(jié)分享A53四核調(diào)試經(jīng)驗,首先聊下兩核運行,官方資料或者廠商都會給雙核例程,功能是core0開啟tcp通信接收網(wǎng)絡(luò)調(diào)試助手的數(shù)據(jù),將數(shù)據(jù)存到共享內(nèi)存空間,然后開啟軟件中斷通知給core1,core1接收到中斷指令后讀取共享內(nèi)存數(shù)據(jù),完成雙核APU數(shù)據(jù)通信。
實現(xiàn)這部分功能的資料滿天飛,這里不再贅述,主要分享軟件中斷的兩個函數(shù),因為介紹這兩個函數(shù)的資料不多:
這個是軟件中斷初始化函數(shù),參數(shù)注釋:
1、Cpu0_Intr_Hanedler表示中斷處理函數(shù),就是中斷來臨時,會調(diào)用這個回調(diào)函數(shù)處理信息。
2、CORE1_TO_CORE0_INTR_ID: 這個定義為0x02,當(dāng)時剛看這個時候有點懵,c例程定義的CORE0_TO_CORE1_INTR_ID、CORE1_TO_CORE0_INTR_ID,云里霧里,實際上就是中斷號,軟件中斷有16個,對應(yīng)著0~15,這里就是core0定義成2而已,其實完全可以core0定義成1,core1定義成2,這樣對于初學(xué)者更好理解。
3、最后一個參數(shù)0,代表著APU號, 用core0,這里就是0,core1這里就是1。
在一個就是中斷產(chǎn)生函數(shù),參數(shù)&Intc 不多說固定用就行了。
CORE0_TO_CORE1_INTR_ID, XSCUGIC_SPI_CPU1_MASK,這兩個參數(shù)表示目標(biāo)core的中斷號和CPU\APU號,可以右擊XSCUGIC_SPI_CPU1_MASK找到定義:
好了,雙核到此為止,雙核程序應(yīng)該可以跑起來了,如果還有沒跑起來的,歡迎私信討論。
下面分享下,在加一個核時出現(xiàn)的問題:
操作如下:
1、添加一個應(yīng)用,選擇core2,helloworld例程:


2、編譯,運行調(diào)試

此時,發(fā)現(xiàn)FPGA程序可以正常燒入,

core2提示有問題:

報錯信息提示coretex-A53#2沒有供電,心細(xì)的話,我們在運行core0的時候,在debug界面也會有如下提示:

說名A53后面兩個核都沒有供電,屬于硬件問題,解決辦法在vivado中,將A53后面兩個核供電打開,因為默認(rèn)情況下,考慮低功耗,都是將后面兩個核關(guān)掉的,操作如下:
1、在vivado中找到Block Properties,選中Properties,最大化

2、找到CONFIG,搜索框輸入power:

將PSU_ACPU2_POWER_ON和PSU_ACPU3_POWER_ON由原來的0改成1即可打開供電
3、重新生成.xsa文件,替換掉SDK工程中的.xsa,編譯運行,就沒有問題了,在添加core3工程,運行都正常。

然后將core1中的代碼全部考到core2中,稍作修改:
初始化軟件中斷:
軟件中斷向core0中發(fā)送:
software_intr.c中添加:
然后編譯運行:

可以看出,三個核的運行信息,第四個核沒改程序,運行完helloworld就退出了~