赛灵思Zynq-7000全可编程 SoC的许多优势之一便是具有两个ARM Cortex-A9板载处理器。不过,许多裸机运用和更为简略的操作体系只运用Zynq SoC处理体系(PS)中两个ARM内核中的一个,这种规划计划或许会约束体系功用。
依据所开发的运用类型不同,或许需求这两个处理器都运转裸机运用,或许需求在每个处理器上运转不同的操作体系。例如,其间一个处理器履行要害核算使命,然后运转裸机/RTOS运用,一起第二个处理器经过Linux供给HMI和通讯功用。
什么是多处理?
这两种计划都归于多处理。简略界说:多处理便是在一个体系中运用一个以上的处理器。多处理架构可答应一次履行多个指令,但并非有必要如此。
多核处理包括两种类型:对称和非对称。
对称多处理是经过将负载分配给多个内核,然后能够一起运转多个软件使命。而非对称多处理(AMP)则是运用专用处理器,或许针对特定运用或使命在相同处理器上履行运用。
依据界说,运用Zynq SoC上的两个内核履行裸机运用或不同操作体系都归于非对称多处理。Zynq SoC上的AMP或许触及如下几种组合:
• 在内核0和内核1上运转不同操作体系;
• 在内核0上运转操作体系,在内核1上运转裸机运用(反之亦然);
• 在两个内核上均运转裸机运用,履行不同程序。
当您决定在Zynq SoC上创立AMP体系时有必要考虑一个实际问题,即ARM处理器内核一起包括有必要进行正确寻址的私有资源和同享资源。这两个处理器都有私有的L1指令和数据高速缓存、定时器、监督时钟以及中止操控器(针对同享和私有中止)。别的还存在一些同享资源,常见的有I/O外设、片上存储器、中止操控器分配器、L2高速缓存和坐落DDR存储器中的体系内存(见图1)。这些私有和同享资源均需求精心办理。
每个PS核都有自己的中止操控器,能够运用软件中止完结本身与一个或两个内核的中止。这些中止经过ARM的分布式中止操控器技能完结分配。
由于针对每个内核履行的程序都坐落DDR存储器内,因而您有必要特别注意以保证对这些运用进行正确切割。
树立AMP
树立AMP并使其运转在Zynq SoC上所需的要害因素是引导载入程序,该程序会在榜首个运用载入到存储器后寻觅第二个可履行文件。赛灵思在XAPP1079中供给了有用的运用指南和源代码。该文档包括修正后的榜首阶段引导载入程序(FSBL)和独立OS,可用来创立AMP体系。
首要要做的是下载与运用阐明配套供给的ZIP文件,再将FSBL和OS这两个要素解压到期望的作业目录。然后,有必要给名为SRC“design”的文件夹从头命名。现在,十分重要的一点是一定要保证软件开发套件(SDK)知道这些新文件(修正后的FSBL和独立OS,两者兼备)的存在。因而,下一步需求更新您的SDK库,以便使其知道这些新文件的存在。
运用软件中止与硬件中止根本类似,区别只在于您怎么触发它们。
这很简略完结。在SDK中赛灵思东西菜单下挑选“库”,然后挑选“新建”,随之导航到目录方位您的作业目录>\ app1079\design\work\sdk_repo,如图2所示。
处理器间的通讯
为AMP规划创立运用之前,您需求考虑运用怎么进行通讯(如有需求)。最简略的办法是运用片上存储器。Zynq SoC装备256KB的片上SRAM,可从以下四个源地址进行拜访:
• 运用侦测操控单元(SCU)从恣意内核进行拜访;
• 运用SCU经过AXI加速器一致性端口(ACP)从可编程逻辑进行拜访;
• 运用片上存储器(OCM)互联经过高功用AXI端口从可编程逻辑进行拜访;
• 也是运用OCM从中心互联进行拜访。
图1 – Zynq SoC处理体系,显现私有和同享资源
图2 — 将您的新文件增加到库
由于这些不同的拜访源都能对片上存储器进行读写,因而尤为重要的一点是,在运用OCM之前一定要首要具体了解其的运转办法。
已然OCM有多个拜访源,那么明显应该界说一个裁定和优先级方式。由于侦测操控单元需求最低时延(SCU既可所以处理器内核也可所以AXI ACP接口),因而SCU从这些拜访源的读操作就具有最高优先级,紧接着是SCU写操作,然后是OCM互联读/写操作。用户可经过将片上存储器操控寄存器中的SCU写操作的优先级设置为低来倒置SCU写操作和OCM互联拜访的优先级。
OCM本身结构为128位字,分红四个64KB分区,并坐落PS地址空间的不同方位。初始装备下,前三个64KB区块安置在地址空间的开端方位,最终一个64KB区块置于地址空间的结尾(见图5)。
简略的片上存储器实例
您可运用赛灵思I/O函数拜访OCM,以便从所选的存储器地址读取和写入数据。这些函数包括在Xil_IO.h中,可支撑在CPU地址空间内存储和拜访8位、16位或32位字符型、短整型或整型数据。运用这些函数时,只需知道您期望拜访的地址以及想要在此存储的值即可。假如是写操作,办法如下,
运用该技能时要保证两个地址指向片上存储器中的相同方位,尤其是当不同人编写不同内核程序时更应如此,为此更好的办法是运用一起的头文件。该文件将包括针对特定传输的相关操作地址的宏界说,例如:
另一种备选办法是让两个程序都运用指示器来拜访存储单元。您能够经过运用宏指令界说指向稳定地址的指示器(一般用C言语)来完结这一点:
此外,您还能够对地址再次进行宏界说,以保证该地址为两个运用程序的共用地址。这种办法无需运用赛灵思I/O库,而是经过指示器完结简略拜访。
处理器间的中止
Zynq SoC中的每个内核都有16个软件生成的中止。如上文所说到的,每个内核都能完结本身与另一个内核或两个内核的中止。运用软件中止与运用硬件中止根本类似,区别只在于您怎么触发它们。若运用软件中止,正在接纳的运用就无需针对更新数据而对方针存储单元进行轮询。
就像运用任何硬件中止时相同,您需求对两个内核中的通用中止操控器进行装备。敬请参看《赛灵思我国通讯》第87期的“怎么在Zynq SoC上运用中止”以了解更多相关信息。
然后,您能够运用xscugic.h中供给的XScuGic_SoftwareIntr函数在正在更新的内核中触发软件中止。该指令将向该指定内核宣布一个软件中止,再由该内核进行恰当操作:
您有必要为内核0和内核1运用对DDR存储器进行正确分段,不然会存在其间一个运用损坏另一个运用的危险。
创立运用
将文件增加到库之后,下个阶段便是生成AMP解决计划的三个重要部分:AMP榜首阶段引导载入程序、内核0运用和内核1运用。您有必要为每个部分生成一个不同的板支撑包(BSP)。
您需求做的榜首件事是用SDK创立一个新的FSBL。挑选“新建运用项目”,创立一个支撑AMP的FSBL项目。这与创立一般FSBL的进程没有什么不同。不过,这次您需求挑选“Zynq FSBL for AMP”模板,如图3所示。
完结AMP FSBL创立之后,接下来需求为榜首个内核创立运用。一定要挑选内核0和您的首选操作体系,并答应其创立自己的BSP,如图4所示。
创立运用之后,您需求正确界说运用在DDR存储器中的方位(运用将从该方位履行)。为此,您需求修正图5中的链接器脚本,以显现DDR的基地址和巨细。这一点很重要,由于假如没有为内核0和内核1运用对DDR存储器进行正确分段,就会存在其间一个运用损坏另一个运用的危险。
完结分段之后,您现在能够编写期望在内核0上履行的运用,由于该内核是AMP体系中的主管。内核0有必要发动内核1运用的履行。您需求将图6中的代码段包括在运用中。这段代码禁用片上存储器上的高速缓存,并将内核1程序的开端地址写到一个内核1将会拜访的地址。一旦内核0履行Set Event(SEV)指令,内核1便开端履行其程序。
图3 – 为AMP规划挑选榜首阶段引导载入程序
图4 – 为内核0创立运用和BSP
下一步是为内核1创立BSP。一定要运用修正后的独立OS(standalone_amp,如图7所示),这一点很重要,由于它能避免PS侦测操控单元的从头初始化。就这一点而言,在创立项目时不要像对待内核0那样答应其主动生成BSP。有必要保证在CPU选项中挑选内核1。
已然您现已为内核1创立了BSP,那么接下来首要需求修正BSP的设置,才干持续创立您想要在内核1上运转的运用。这十分简略,只需求向BSP驱动器部分的装备中增加一个额定的编译器标志:–DUSE_AMP=1。
这一步完结后,您就能够恣意为内核1创立运用了。必须挑选内核1作为处理器,并运用您刚刚创立的BSP。创立新运用之后,您需求再次在DDR存储器中界说正确的存储单元,而内核1程序将从此处履行。您可依照之前的办法经过修正内核1运用的链接器脚原本完结设定。与榜首个内核相同,在该运用中相同要禁用片上存储器上的高速缓存——该高速缓存可用来在这两个处理器之间进行通讯。
将一切组件完美整合
在创立运用和构建项目之后,您现在应已具有以下组件:
• AMP FSBL ELF;
• 内核0 ELF;
• 内核1 ELF;
• BIT文件,用来为预期能够完结AMP的Zynq器材界说装备。
图5 – 内核0的DDR方位和巨细
运用所供给的东西在Zynq SoC上创立非对称多处理运用能够变得十分简略。
图6 – 经过编码禁用片上存储器上的高速缓存
图7 – 为内核1创立BSP
为了使Zynq SoC从所选的装备存储器中引导,您需求一个.bin文件。要创立该文件,您还需求一个BIF文件。BIF文件规则了应运用哪些文件创立BIN文件以及它们的次序。不要运用SDK中的“创立Zynq”引导映像,而应运用ISE®规划套件指令提示符和BAT文件(BAT文件是XAPP1079的一部分,坐落下载目录\design\work\bootgen)。该目录包括一个BIF文件和一个cpu1_bootvec.bin,后者作为修正后的FSBL的一部分,用于阻挠其查找和加载更多运用。
要生成BIN文件,您需求将生成的三个ELF文件复制到bootgen目录,并对BIF文件进行修正以保证其间的ELF称号正确无误(如图8所示)。
现在您可翻开一个ISE指令提示符,并导航至bootgen目录。在这里运转createboot.bat。该过程将创立boot.bin文件(如图9所示)。
图8 – 修正BIF文件
图9 – 创立将在Zynq SoC上运转的boot.bin文件
然后,您可将该文件下载到Zynq SoC上的非易失性存储器中。该器材的引导将使两个内核发动并履行其各自的程序。
运用所供给的东西在Zynq SoC上创立非对称多处理运用能够变得十分简略。运用片上存储器或DDR分区能够很简略地完结两个内核之间的通讯。