ZYNQ进阶之路10--AMP模式 双核同时运行

14 篇文章 8 订阅
14 篇文章 43 订阅

导语

之前章节中涉及到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平台上的对应关系:
在这里插入图片描述
其性能的不同如下所示:
在这里插入图片描述

AMP启动的实现

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

在这里插入图片描述
将信号线引出到指定接线上:
在这里插入图片描述
对引脚进行绑定:
在这里插入图片描述
然后生成硬件bit文件,导出硬件,打开SDK进行软件编程:
在这里插入图片描述然后分别创建CPU0和CPU1的两个工程,在下图中选择:
在这里插入图片描述
创建后如下图所示,其中1为CPU0的工程,2为CPU2的工程:
在这里插入图片描述
在CPU0的工程中输入如下代码:
在这里插入图片描述
在CPU1工程中输入如下代码:
在这里插入图片描述
修改CPU0的DDR3基地址:
在这里插入图片描述
修改CPU1的DDR3基地址(注意两个CPU的地址不能发生冲突):
在这里插入图片描述
右键点击CPU1工程,选择BSP setting选项:
在这里插入图片描述
在此处添加如下附加信息:
在这里插入图片描述
然后就可以将两个工程编译后,在run config中设置如下选项:
在这里插入图片描述
然后点击run即可将程序下载到芯片中了,这是可以看到4个LED一两个一对的方式实现呼吸灯功能了。在下一章节我们将讲解如何将双核程序固化到SPI flash中。如果对博主的文章满意的话别忘了点赞评论哦!也希望有识之士能提出博主的问题共同进步,博主交流邮箱:wanpengwork@163.com,如果你有什么新奇的想法和技术可以和博主交流!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值