当前位置:首页 > 工业控制 > 电子设计自动化
[导读] 赛灵思Zynq-7000全可编程 SoC的众多优势之一就是拥有两个ARM Cortex-A9板载处理器。不过,很多裸机应用和更为简单的操作系统只使用Zynq SoC处理系统(PS)中两个ARM内核中的一个,这种设计方案可能会限制系统性能。

 赛灵思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分区可以很容易地实现两个内核之间的通信。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

全球知名半导体制造商罗姆(总部位于日本京都市)与领先的车规芯片企业芯驰科技面向智能座舱联合开发出参考设计“REF66004”。该参考设计主要覆盖芯驰科技的智能座舱SoC*1“X9M”和“X9E”产品,其中配备了罗姆的PM...

关键字: 智能座舱 SoC LED驱动器

TrustFLEX 器件搭配可信平台设计套件,将简化从概念到生产的信任根启用过程,适用于广泛的应用领域

关键字: 控制器 闪存器件 SoC

Arm Neoverse S3 是 Arm 专门面向基础设施的第三代系统 IP,应用范围涵盖高性能计算 (HPC)、机器学习 (ML)、边缘和显示处理单元,是新一代基础设施系统级芯片 (SoC) 的理想技术根基。Neov...

关键字: 机器学习 SoC 系统 IP

在北京举办的AMD AI PC创新峰会上,AMD高级副总裁及GPU技术与工程研发王启尚也登台演讲,做了一场AMD AI技术发展报告,还透露了一个小惊喜。

关键字: AMD 光电模块 赛灵思

近日,研究机构Canalys公布了2023年第四季度智能手机SoC出货量及销售收入排名。其中,依靠华为Mate60系列、Mate X5以及nova 12系列的优秀表现,华为海思在该季度出货680万颗,同比暴增5121%。...

关键字: 华为海思 SoC

Isaac 机器人平台现可为开发者提供全新的机器人训练仿真器、Jetson Thor 机器人计算机、生成式 AI 基础模型和由 CUDA 加速的感知和操作库

关键字: 机器人 生成式 AI SoC

加利福尼亚州 坎贝尔 – 2024 年 3月 13 日 – Arteris, Inc.(纳斯达克股票代码:AIP)是一家领先的系统 IP 供应商,致力于加速片上系统(SoC)创建。Arteris今天宣布立即推出最新版本...

关键字: 硬件加速器 片上网络 SoC

将芯原像素处理IP组合集成到高精度、低延迟的K230芯片中

关键字: AIoT SoC RISC-V

5G开放式RAN基带芯片和电信级软件提供商比科奇(Picocom)携多款产品与客户及合作伙伴一同参加了2024年世界移动通信大会(MWC24)。比科奇在此次全球行业盛会上搭建了自有展示区(Picocom Powered...

关键字: 移动通信 SoC 小基站

Ceva PentaG-RAN与Arm Neoverse计算子系统相结合,降低5G SoC开发成本并缩短上市时间,从而使双方客户受益

关键字: 5G SoC 芯片
关闭
关闭