美文网首页
zynqMPSoC多核CPU使用

zynqMPSoC多核CPU使用

作者: Alliawell | 来源:发表于2023-06-24 08:55 被阅读0次

    参考


    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个工程进去。

    调试配置

    相关文章

      网友评论

          本文标题:zynqMPSoC多核CPU使用

          本文链接:https://www.haomeiwen.com/subject/altmydtx.html