邢艳芳,朱金付,周晓梅
(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.