邢艷芳,朱金付,周曉梅
(1.中國傳媒大學南廣學院,江蘇 南京 211172;2.東南大學,江蘇 南京 210000)
多核處理器主要包括兩種,即對稱多核處理器(symmetrical multi-core processors,SMP)和非對稱多核處理器(asymmetrical multi-core processors,AMP)。目前大部分通用多核處理器是SMP,各個CPU是平等的,共享操作系統、內存和外設等資源,Windows和Linux都有比較成熟穩定的任務調度算法。AMP大多是嵌入式多核處理器采用的架構,由一個主CPU控制系統運行和資源分配,從CPU執行主CPU的命令或者預定義任務,其實時性比較強,適合于一個CPU做任務調度,其他CPU各自獨立處理實時任務,并通過共享內存實現各個CPU之間的通信。AMP目前還沒有成熟的任務調度算法。
Zynq是Xilinx推出新的全可編程芯片[1-2],是以ARM為核心,以FPGA為可編程外設的一種全新架構處理器,其ARM是由2個Cortex-A9 CPU組成的非對稱多核處理器系統,目前對Zynq的應用研究大都是基于單核處理器。文中提出在Zynq的CPU0上運行一個裸機程序,由CPU0控制系統的初始化、共享資源和啟動CPU1。CPU1啟動后,同時也運行一個裸機程序,通過共享OCM和CPU0通信,分時共享OLED,實時顯示CPU運行的相關信息。
Zynq是一個FPGA做外設的A9雙核處理器,是一個可擴展處理平臺。因此,它的啟動流程與傳統的ARM處理器類似,和FPGA完全不同。Zynq的啟動配置需要多個處理步驟,通常情況,需要包含以下三個階段[3-6]。
(1)階段0:在器件上電運行后,處理器就自動開始Stage-0 Boot,即片內BootROM中的代碼被執行,上電復位或者熱復位后,處理器執行的不可修改的代碼。
(2)階段1:在BootROM初始化CPU和一些外設后,讀取下一個階段所需的程序代碼FSBL,即first stage boot loader。它可以由用戶修改控制的代碼。
(3)階段2:這是用戶基于BSP的裸機程序,也可以是第二階段操作系統的啟動引導程序。這個階段代碼完全是在用戶的控制下實現的。
CPU0作為主處理控制共享資源,如果CPU1需要控制一個共享資源,必須請求CPU0并讓CPU0控制資源。OCM被作為兩個CPU通信共享資源,相比DDR內存,OCM具有非常高的性能和低延遲訪問的特點。
CPU0和CPU1共享OLED外設,并顯示相關運行信息。CPU0和CPU1分時占用OLED資源,各占用5 s,相互之間通過OCM的0xFFFF0000地址作為共享內存,進行通信協調。當0xFFFF0000中的內容為0時,OLED由CPU0占有,當0xFFFF0000中的內容為1時,OLED由CPU1使用。OCM是片上內存,訪問速度比片外DDR快,因此,兩個CPU通信的實時性比較好。
Zynq是非對稱多核處理器系統,CPU0和CPU1各自占用獨立的DDR空間,其中CPU0使用的地址空間為0x00100000到0x001FFFFF,而CPU1使用的地址空間為0x00200000到0x002FFFFF。
Zynq由PS+PL構成,其中PS部分和普通的ARM芯片一樣,可以獨立使用;PL部分就是傳統意義的FPGA,可以方便定制外設電路IP,也可以進行相關的算法設計。普通的ARM,外設是固定的;而Zynq硬件外設是不固定的,可以利用PL部分靈活地定制外設掛在PS上,這是Zynq最大的特點,也是Zynq靈活性的一個重要表現。兩個應用程序運行在PS部分的Cortex-A9雙核處理器,因此,PS部分自帶的相關硬件使用Xilinx默認配置即可,但雙核CPU運行的相關信息需要在OLED上顯示[7-9],因此需要在PL部分定制一個OLED的IP核,通過AXI總線和PS進行通信。在PS部分對OLED進行驅動設計和顯示設計。
Zynq的測試板ZedBoard上使用Inteltronic/Wisechip公司的OLED顯示模組UG-2832HSWEG04。這是一款單色被動式顯示屏,分辨率為128*32,驅動電路采用所羅門科技的SSD1306芯片。ZedBoard測試板使用的OLED采用SPI模式控制,使用的信號線和電源線有如下幾條:
RST(RES):硬復位OLED;
DC:命令/數據標志(0,讀寫命令;1,讀寫數據);
SCLK:串行時鐘線;
SDIN:串行數據線;
VDD:邏輯電路電源;
VBAT:DC/DC轉換電路電源。
在SPI模式下,每個數據長度均為8位,在SCLK的上升沿,數據從SDIN移入到SSD1306,并且是高位在前的。
其硬件建構框圖如圖1所示。

圖1 硬件設計圖
軟件設計部分包括CPU0應用程序和CPU1應用程序。CPU0上運行裸機程序是主系統,主要負責系統初始化、控制CPU1的啟動、與CPU1的通信和在OLED上顯示信息。CPU1上運行的裸機應用程序主要負責與CPU0上運行的程序通信、與CPU0共享OLED[10-13]。
FSBL總是運行在CPU0上,這是上電復位后PS運行的第一個軟件應用程序。負責配置PL和將應用程序ELF文件復制到DDR內存。加載應用程序到DDR內存后,FSBL開始執行第一個被加載的應用程序。FSBL加載完應用程序后,跳轉到0x00100000處執行CPU0程序。
CPU0里需配置MMU,關閉Cache,使OCM的物理地址為0xFFFF0000到0xFFFFFFFF和0x00000000到0x0002FFFF。
關閉Cache后,CPU0執行SEV匯編指令,激活CPU1,CPU1到OCM的0xFFFFFFF0地址讀取其數值,即CPU1應用程序的地址,CPU1應用程序將從該地址執行。
判斷共享內存COM_VAL是否為0,如果不為0,將繼續等待判斷。如果為0,將在OLED上顯示相關信息,延時5 s,將COM_VAL設置為1,把OLED資源讓給CPU1使用。然后繼續判斷共享內存COM_VAL是否為0,等待CPU1把OLED使用權讓給CPU0。
CPU0在DDR執行的物理地址由鏈接腳本設置,將其運行地址設置為0x00100000,鏈接腳本文件相關內存地址設置見表1。

表1 CPU0內存地址
CPU0程序流程如圖2所示。

圖2 CPU0程序流程
在AMP系統中,因為各CPU獨立使用資源,所以CPU1里仍需要配置MMU,關閉Cache。激活CPU1后,將從DDR的0x00200000地址開始執行應用程序。
在關閉Cache后,CPU1需等待CPU0將共享內存設置為1,然后在OLED上顯示相關信息。延時等待后,清除共享內存,將OLED讓給CPU0使用。
CPU1在DDR執行的物理地址由鏈接腳本設置,將其運行地址設置為0x00200000,鏈接腳本文件相關內存地址設置見表2。

表2 CPU1內存地址
CPU1程序流程如圖3所示。

圖3 CPU1程序流程
在完成軟硬件設計后,需要把軟件部分下載到DDR中運行,把硬件比特流配置到Zynq的PL部分。通過Xilinx的BootGen工具,生成Zynq能識別的合法鏡像文件BOOT.BIN,其中包含FSBL文件、system.bit文件、CPU0文件和CPU1文件。將BOOT.BIN復制到SD卡,將測試板ZedBoard設置為SD卡啟動,啟動ZedBoard后會看到OLED被CPU0和CPU1分時占用信息,如圖4所示。

圖4 實驗結果
Zynq器件包括一個ARM雙核AMP處理器,通過
CPU0控制系統和啟動CPU1,實現了兩個CPU同時運行裸機程序,并通過OCM實現了兩個CPU的通信,經過24小時不間斷測試,雙核運行穩定,解決了該處理器雙核同時運行的問題。
[1] 何 賓.Xilinx all programmable Zynq-7000SoC設計指南[M].北京:清華大學出版社,2013:384-391.
[2] 陸佳華,江 舟,馬 岷.嵌入式系統軟硬件協同設計實戰指南:基于Xilinx Zynq[M].北京:機械工業出版社,2013:17-18.
[3] 陸啟帥,陸彥婷,王 地.Xilinx Zynq SoC與嵌入式Linux設計實戰指南[M].北京:清華大學出版社,2014:138-152.
[4] 葉 棽,謝捷如.基于SoC和嵌入式Linux的數據采集系統設計[J].計算機技術與發展,2015,25(8):203-207.
[5] 肖靈芝,蒲 林,韓俊剛,等.異構多核圖形處理器存儲系統設計與實現[J].電子技術應用,2013,39(5):38-40.
[6] 李金泉,王 東,胡文振,等.基于ZYNQ異構多核處理器的人體動作識別系統[J].單片機與嵌入式系統應用,2016,16(8):27-29.
[7] 邢艷芳,張延冬.基于Zynq的OLED驅動設計[J].液晶與顯示,2014,29(2):224-228.
[8] 張 龍,馮 帥.基于ZYNQ的視頻圖像處理平臺的設計[J].計算機與數字工程,2016,44(12):2519-2523.
[9] WANG Jiannong,WANG Wei.The common data acquisition system based on Arm9[C]//Proceedings of international conference on electronic measurement &instruments.[s.l.]:IEEE,2011:324-327.
[10] STEVENS W R,RAGO S A.Advanced programming in the UNIX environment[M].[s.l.]:Addison-Wesley,2014.
[11] JONES M T.GNU/LINUX application programming[M].[s.l.]:Charles River Media,2008.
[12] 孟繁星.基于ZYNQ-7000的視頻圖像處理系統設計[J].信息通信,2015(8):60-62.
[13] Solomon-Systech Instruments.The datasheet of the SSD1322Solo-mon-Systech Instrument[R].Hong Kong:Solomon Systech Limit-ed,2008.