zynqMPSoC多核CPU使用

您所在的位置:网站首页 cpu多核调度 zynqMPSoC多核CPU使用

zynqMPSoC多核CPU使用

2023-07-05 22:09| 来源: 网络整理| 查看: 265

参考

1.《DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南》第十七章 双核AMP实验

2.ZYNQ-双核AMP通信(一)

3.ZYNQ-双核AMP通信(二)

要点:

1)给每个arm核创建一个domain。

2)多核app用软件中断实现通信。

3)debug时下载多个app的elf文件。

4)固化时把多个app的elf选中做BIN文件。

多核处理器,从硬件上看:

1)同构多核:多个核心的架构一致;ZynqMPSoC是多个A53核,同构。

2)异构多核:多个核心架构不一致。例如手机处理器的大小核。

从软件上看:

1)AMP 非对称处理:(Asymmetric Multi-Processing),多个处理器运行各自的程序,相互之间隔离。

2)SMP 对称处理:Symmetric Multi-Processing。多处理器运行同一个OS,由OS统一调度。

AMP非对称多处理

SMP(对称多处理)

ZynqMPSoC的EG系列有4核A53,在AMP机制下每个A53运行各自的应用程序。

ZynqMP中多个A53有各自私有的资源(L1指令Cache,L1数据Cache,私有定时器等),也有一些共享的资源(L2 Cache,DDR内存,OCM、外设等)。多处理器访问共享资源时,需要互斥访问,避免冲突。

在MPSoC中可以使用软件中断(SGI,Software Generated Interrupts)来避免访问的冲突。每个CPU可以用SGI中断自己,中断另一个CPU,或同时中断二者(Each CPU can interrupt itself,the other CPU, or both CPUs using a software generated interrupt SGI)。向软件中断寄存器(ICDSGIR)写入中断编号并指向目标CPU,就产生了一个SGI。每个CPU各自有一组SGI寄存器,可以产生16个软件中断。下图是SGI的中断ID号,0~15.

软件中断号

SGI实现互斥锁的功能,用共享内存实现数据共享的功能。

无论是用OCM(256kB,On-Chip-Memory)还是用DDR共享内存,在访问之前都需要禁止Cache功能。这样两个CPU看到的都是最新的数据,防止cache的数据不一致性。通过Xil_SetTlbAttributes(INTPTR Addr, u32 attrib)函数禁用Cache属性,第一个参数为共享内存的基地址,第二个参数为设置内存的参数,包括是否禁用Cache等。

Xilinx官方提供了2个例程,XAPP1078是1个linux+1个bare-metal;XAPP1079是2个bare-metal应用。XAPP1079文档是非常值得一看的,里面详细的介绍了ZYNQ芯片中两个CPU的启动顺序和方式、裸机VITIS环境中的配置等。

创建AMP应用的步骤

1)先创建CPU0上的application,步骤和普通单核应用是相同的。

2)给CPU1创建domain,如下图所示。

给CPU添加domain

设置cpu1的domain

在psu_cortexa53_1上新建的domain

新建cpu1上的app,指定cortexa53_1 默认选择了cpu1的domain

cpu0的内存地址

cpu1的内存地址,和cpu0不重叠

写好2个工程的代码后,设置debug,如下图,勾选cpu0和cpu1,下载2个工程进去。

调试配置


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3