之前章节中涉及到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中。
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:如何实现双核的AMP启动-双核cpu怎么变成四核 https://www.yhzz.com.cn/a/7718.html