之前章節中涉及到PS端的裸機程序都是在CPU0上運行的,弄的差點就忘了ZYNQ是擁有兩個A9硬核的強勁芯片,所以我們必須要學會怎么讓兩個CPU核心同時運行,不然就和之前開發單片機有什么區別呢?本章我們就來探索如何實現雙核的AMP啟動(PS:博主以前是開發單片機和FPGA過來的)。
ZYNQ雙核啟動方式簡介
非對稱多處理器啟動(AMP啟動)
這個模式啟動可以用語使用多個CPU核的系統上,比如像ZYNQ這樣的多核芯片上,在這種模式下,每個CPU核可以運行自己的操作系統,比如可以CPU0跑裸機而CPU1跑FreeRTOS系統,再比如CPU0跑FreeRTOS系統而CPU1跑LINUX系統;而CPU之間的通訊是通過共享內存的方式進行的。
對稱多處理器啟動(SMP啟動)
在該啟動模式下所有的CPU必須是完全相同的構架,并且所有CPU必須運行單個操作系統一起運行,這個操作系統把進程任務分派到各個CPU上,并且加以協調。和AMP一樣,CPU之間是通過共享內存來做通信,以及任務執行的協調。所以SMP的啟動方式不適合在裸機以及RTOS環境下實現。
兩種啟動方式的比較
下圖描述了AMP和SMP的不同,以及他們在ZYNQ平臺上的對應關系:其性能的不同如下所示:
AMP啟動的實現
我們本節工程是基于 ZYNQ進階之路7 章節的內容實現的,在ZYNQ進階之路7 章節中我們輸出了兩路PWM波實現呼吸燈的功能,在本章節中我們分別使用CPU0和CPU1控制兩個LED等實現兩個呼吸燈的功能,我們再通過邏輯在PL端增加兩個端口輸出PWM控制LED,這兩個LED實現和前面兩個LED同步呼吸的功能。首先打開 ZYNQ進階之路7 中的工程如下所示:新建verliog文件輸入以下代碼,代碼中的50M時鐘我們使用PL端的50M晶振提供,所以和PS端屬于異步時鐘,因為PS端提供給PL端的時鐘也為50M,所以這里我們對其進行簡單的跨時鐘域處理,多周期同步,對兩個PWM信號進行打兩個時鐘節拍的方式實現同步,這種方式能解決一些簡單的異步時鐘域問題:
將PWM.v文件加入Diagram窗口中:
將信號線引出到指定接線上:
對引腳進行綁定:
然后生成硬件bit文件,導出硬件,打開SDK進行軟件編程:
然后分別創建CPU0和CPU1的兩個工程,在下圖中選擇:
創建后如下圖所示,其中1為CPU0的工程,2為CPU2的工程:
在CPU0的工程中輸入如下代碼:
在CPU1工程中輸入如下代碼:
修改CPU0的DDR3基地址:
修改CPU1的DDR3基地址(注意兩個CPU的地址不能發生沖突):
右鍵點擊CPU1工程,選擇BSP setting選項:
在此處添加如下附加信息:
然后就可以將兩個工程編譯后,在run config中設置如下選項:
然后點擊run即可將程序下載到芯片中了,這是可以看到4個LED一兩個一對的方式實現呼吸燈功能了。在下一章節我們將講解如何將雙核程序固化到SPI flash中。
-
cpu
+關注
關注
68文章
11037瀏覽量
216015 -
操作系統
+關注
關注
37文章
7091瀏覽量
124962 -
Amp
+關注
關注
0文章
86瀏覽量
47656
原文標題:ZYNQ進階之路--AMP模式 雙核同時運行
文章出處:【微信號:ZYNQ,微信公眾號:ZYNQ】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
RTOS實現雙核MCU消息通信

雙核單片機是什么
非對稱雙核MCU基礎知識及核間通信
如何在CubeIDE中為雙核處理器創建靜態庫?
DSP MCU雙核,什么是SP MCU雙核
非對稱雙核MCU基礎知識及核間通信

基于XC2VP30的雙核處理器嵌入式系統的構建與實現
ZYNQ開發雙核運行原理及過程
正點原子i.MX 93開發板,雙核A55+M33+NPU,雙路RS485&amp;FDCAN&amp;千兆網,異核/AI/工業開發!

評論