0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何实现双核的AMP启动

lhl545545 来源:ZYNQ 作者:ZYNQ 2022-09-14 09:07 次阅读

之前章节中涉及到PS端的裸机程序都是在CPU0上运行的,弄的差点就忘了ZYNQ是拥有两个A9硬核的强劲芯片,所以我们必须要学会怎么让两个CPU核心同时运行,不然就和之前开发单片机有什么区别呢?本章我们就来探索如何实现双核的AMP启动(PS:博主以前是开发单片机和FPGA过来的)。

ZYNQ双核启动方式简介

非对称多处理器启动(AMP启动)

这个模式启动可以用语使用多个CPU核的系统上,比如像ZYNQ这样的多核芯片上,在这种模式下,每个CPU核可以运行自己的操作系统,比如可以CPU0跑裸机而CPU1跑FreeRTOS系统,再比如CPU0跑FreeRTOS系统而CPU1跑LINUX系统;而CPU之间的通讯是通过共享内存的方式进行的。

对称多处理器启动(SMP启动)

在该启动模式下所有的CPU必须是完全相同的构架,并且所有CPU必须运行单个操作系统一起运行,这个操作系统把进程任务分派到各个CPU上,并且加以协调。和AMP一样,CPU之间是通过共享内存来做通信,以及任务执行的协调。所以SMP的启动方式不适合在裸机以及RTOS环境下实现。

两种启动方式的比较

下图描述了AMP和SMP的不同,以及他们在ZYNQ平台上的对应关系:0914e9b8-33c3-11ed-ba43-dac502259ad0.png其性能的不同如下所示:098285e0-33c3-11ed-ba43-dac502259ad0.png

AMP启动的实现

我们本节工程是基于 ZYNQ进阶之路7 章节的内容实现的,在ZYNQ进阶之路7 章节中我们输出了两路PWM波实现呼吸灯的功能,在本章节中我们分别使用CPU0和CPU1控制两个LED等实现两个呼吸灯的功能,我们再通过逻辑在PL端增加两个端口输出PWM控制LED,这两个LED实现和前面两个LED同步呼吸的功能。首先打开 ZYNQ进阶之路7 中的工程如下所示:099e5306-33c3-11ed-ba43-dac502259ad0.png新建verliog文件输入以下代码,代码中的50M时钟我们使用PL端的50M晶振提供,所以和PS端属于异步时钟,因为PS端提供给PL端的时钟也为50M,所以这里我们对其进行简单的跨时钟域处理,多周期同步,对两个PWM信号进行打两个时钟节拍的方式实现同步,这种方式能解决一些简单的异步时钟域问题:09cfd2be-33c3-11ed-ba43-dac502259ad0.png将PWM.v文件加入Diagram窗口中:

0a4086bc-33c3-11ed-ba43-dac502259ad0.png将信号线引出到指定接线上:0a8ee334-33c3-11ed-ba43-dac502259ad0.png对引脚进行绑定:0ab29540-33c3-11ed-ba43-dac502259ad0.png然后生成硬件bit文件,导出硬件,打开SDK进行软件编程:0b187d4c-33c3-11ed-ba43-dac502259ad0.png然后分别创建CPU0和CPU1的两个工程,在下图中选择:0b49cb36-33c3-11ed-ba43-dac502259ad0.png创建后如下图所示,其中1为CPU0的工程,2为CPU2的工程:0b890904-33c3-11ed-ba43-dac502259ad0.png在CPU0的工程中输入如下代码:0bbef50a-33c3-11ed-ba43-dac502259ad0.png在CPU1工程中输入如下代码:0be7a586-33c3-11ed-ba43-dac502259ad0.png修改CPU0的DDR3基地址:0c149f96-33c3-11ed-ba43-dac502259ad0.png修改CPU1的DDR3基地址(注意两个CPU的地址不能发生冲突):0c504b36-33c3-11ed-ba43-dac502259ad0.png右键点击CPU1工程,选择BSP setting选项:0c70370c-33c3-11ed-ba43-dac502259ad0.png在此处添加如下附加信息:0ca0d5f6-33c3-11ed-ba43-dac502259ad0.png然后就可以将两个工程编译后,在run config中设置如下选项:0d7216c0-33c3-11ed-ba43-dac502259ad0.png然后点击run即可将程序下载到芯片中了,这是可以看到4个LED一两个一对的方式实现呼吸灯功能了。在下一章节我们将讲解如何将双核程序固化到SPI flash中。  

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10437

    浏览量

    206524
  • 操作系统
    +关注

    关注

    37

    文章

    6280

    浏览量

    121869
  • Amp
    Amp
    +关注

    关注

    0

    文章

    71

    浏览量

    47008

原文标题:ZYNQ进阶之路--AMP模式 双核同时运行

文章出处:【微信号:ZYNQ,微信公众号:ZYNQ】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机是什么

    ,而且还可以通过软件在不影响主程序的前提下实现高速PWM和UART功能。上图为该单片机的内部构架示意图,从图可见该单片机内部有两个,分别为FPP0和FPP1,每个
    发表于 11-03 13:10

    nios ii例子

    nios ii例子nios ii例子NIOS II 构建的简单例子,希望对大家有所帮
    发表于 08-12 15:18

    处理器ARM_DSP如何实现协同工作

    处理器ARM_DSP如何实现协同工作
    发表于 08-17 14:26

    非对称MCU基础知识及间通信

    来源 网络本文从对比两颗分立MCU与单芯片MCU开始(以LPC4350为例),展开介绍了非对称MCU的基础知识与重要特点。接下来,重点介绍了
    发表于 05-15 14:26

    keystone II 的4个ARM之间可以实现AMP吗?

    大家好:             我目前手里有一个EVMK2H评估板,我想问一下66AK2H14这款SOC看起来在arm和DSP之间支持AMP架构很强大,但是能不能在4个ARM
    发表于 06-19 02:42

    WINCE6.0 如何实现OMAPL138通信呢?

    ARM端运行wince6.0 如何实现OMAPL138中的ARM与DSP的通信?可以使用 syslink 吗?有哪位大神知道呀?
    发表于 06-21 11:28

    OMAPL138的通信组件DSPLINK开发和通信演示教程

    共享一个OMAPL138的通信组件DSPLINK开发和通信演示教程,希望大家顶顶!!
    发表于 06-21 17:09

    请问ccs怎样实现调试?

    TI的技术专家:你好。我用的是F28M36x系列DSP,请问如何在CCS中同步调试程序?谢谢解答!
    发表于 10-08 11:02

    F28377D flash启动外设工作异常问题怎么解决

    问题很简单,同时工作,cpu1有pwm1、2、3、11,adca,eqep1外设,cpu2有pwm4、5、6、12,adcb,eqep2外设。仿真情况下,两个核心外设都可以正常工作,但是烧写到flash启动后,cpu2中的p
    发表于 05-20 14:15

    基于DSP的视频解码芯片驱动研究与实现

    基于DSP的视频解码芯片驱动研究与实现
    发表于 05-28 09:11

    非对称MCU的基础知识与重要特点

    本文从对比两颗分立MCU与单芯片MCU开始(以LPC4350为例),展开介绍了非对称MCU的基础知识与重要特点。接下来,重点介绍了
    发表于 11-01 06:29

    MCU Pico的相关资料分享

    树莓派不讲武德,自研MCU Pico,STM32哭晕在厕所!重磅,树莓派再出Pico自研MCU,国产能否跟上?树莓派Raspberry Pi 近日发布自研的40nm
    发表于 11-04 08:51

    如何在CubeIDE中为处理器创建静态库?

    如何为处理器创建静态库?在 CubeIDE 下以“New Project”启动时,“Static Library”点不可用,例如,当使用 STM32H745 (M4 &
    发表于 12-05 06:51

    OS启动后在S32K344中启用,怎么实现启动单核呢?

    加载程序阶段处理它(因为我们在启动条目下只能有一个 BOOT_HEADER 结构)。但是......有什么方法可以从单核(在引导加载程序中)开始,然后在我们的应用程序(MicrosarOS)启动时启用第二个
    发表于 03-28 08:43

    请问之间如何通信?

    请问之间如何通信? 怎么处理核对外设资源出现竞争的问题?
    发表于 05-26 06:37