之前章节中涉及到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中。
滤波电感在电源抗干扰中的应用
苹果明年起不再使用LCD液晶材质作为屏幕 LCD行业正走向衰落
博通公司通过新型器件扩大其在家庭、企业和户外中小型基站市场领导地位
长进激光推出抗辐照掺铒及铒镱共掺光纤
2018年正基新出WIFI+BT新模块AP6236
如何实现双核的AMP启动
详解半导体封装测试工艺
RS-LB-110-Y油烟监测系统
Fitbit使用新的操作系统来开发更新智能医疗手表
三星巨幅LED广告迎亚运
交换机的基本配置方法
PID控制算法是什么
光通信技术应用 光通信的意义
科创板西部超导独立董事戚聿东介绍、履历信息
虚拟仿真软件开发——Unity编辑器的巧用
红米笔记本配置曝光 搭载Intel8代酷睿高配版集成MX250独显
apple watch series 7什么时候出
2020世界智能制造大会在南京开幕
金仕达金属气动碰焊机 不锈钢丝铁丝锯片对焊机
继电器的分类有哪些?