Zynq系列器件提供双核Cortex-A9 ARM硬核,同时PL还支持MB软核,现在就掰一掰这三核共存怎么用。

1  多核框架

多核框架如图1所示,PL内使用MicroBlaze软核,PS内为ARM双硬核,通用外设控制器、DDR挂在PS上,PL和PS共享DDR。PS程序在DDR里运行应用程序,Microblaze在内部BRAM中运行。

图1  多核框架图

2 启动过程

在非加密状态下各部分的启动流程如下:

①  Stage0:上电复位,CPU0 BootROM根据ModeIO选择的启动设备读取FSBL镜像并在OCM运行(Nor Flash、QSPI Flash可直接在FLASH运行),此时CPU1处于WFE状态;

②  Stage1:FSBL执行后,将PL BitStream 、PS应用程序和其它数据到指定位置,并通过DevCfg DMA向0xFFFFFFFF处写Bit文件配置PL,释放PL复位和交付程序指针到ARM应用程序;

③  Stage2:应用程序执行,CPU0向地址0xFFFFFFF0地址处写入CPU1程序执行地址并释放SEV事件唤醒CPU1,CPU在检测到0xFFFFFFF0地址里的数据不为0x0后跳转运行。

3 应用程序创建与调试

按照图1所示的框架在Vivado中搭建好硬件工程并综合实现产生bit文件和其他配置文件导出到SDK。

3.1   FSBL和CPU0 APP

FSBL必须选择在CPU0下建立,和单核时没有区别。

CPU0 APP在执行过程中需要唤醒CPU0,步骤如下:

①  禁止Cache ToOCM;

②  写CPU1 APP执行首地址到0xFFFFFFF0;

③  等待写内存完成(dmb())并释放SEV(sev())事件。

CPU0 其他应用程序和单核相同,在处理共享资源时需要通过共享内存传递互斥信号量或使用中断通知。

3.2  CPU1 APP

CPU1 APP在建立应用时CPUCore选择 Ps7_CortexA9_1,将编译器预编译配置项Board Support Package Settings中的extra_compiler_flag选项中添加预编译命令-DUSE_AMP=1使能AMP条件;

由于程序不需要MMU作地址映射,因此需要将CPU1BSP的boot.S代码中以下内容注释掉:

/* In case of AMP, map virtual address 0x20000000 to 0x00000000  and mark it as non-cacheable */

#if USE_AMP==1

ldr r3, =0x1ff          /* 512entries to cover 512MB DDR */

ldr r0, =TblBase        /* MMUTable address in memory */

add r0, r0, #0x800      /* Addressof entry in MMU table, for 0x20000000 */

ldr r2, =0x0c02         /* S=b0TEX=b000 AP=b11, Domain=b0, C=b0, B=b0 */

mmu_loop:

str r2, [r0]            /* writethe entry to MMU table */

add r0, r0, #0x4        /* nextentry in the table */

add r2, r2, #0x100000   /* nextsection */

subs    r3, r3, #1

bge mmu_loop            /* looptill 512MB is covered */

#endif

除了对共享资源的处理外,和单核应用程序开发相同。

3.3  MicroBlaze APP

MicroBalze是独立的,与PS内的ARM硬核没有任何关联。

4 启动镜像制作

第一级引导文件FSBL、PL Bit文件、CPU0 elf、CPU1 elf和MicroBlazeelf均需固化在ROM中。

4.1  MicroBlaze elf 处理

因MicroBlaze是独立在BRAM中运行,因此无法将其可执行elf文件上电单独加载到BRAM,因此将elf作为BitStream中的RAM初始化文件写入。所需文件如下:

①  MicroBlaze RAM配置文件:xx.bmm;

②  MicroBlaze ELF文件:xx.elf;

③  PL Bit文件:xx.bit。

执行命令:

data2mem –bm xx.bmm –p <器件型号> -bt xx.bit –bdxx.elf –o b <目标bit>   生成包含RAM初始化文件的最终Bit文件。

当然,使用SDK图形工具也可生成相关文件。

4.2  生成BOOT.BIN文件

最终boot.bin文件包含fsbl、bit文件、cpu0 elf、cpu1 elf以及其他数据如操作系统镜像、DeviceTree、文件系统等等。可以通过SDK GUI界面或批处理命令生成,各镜像必须内容的位置必须是:

①  fsbl.elf: 属性[bootloader];

②  xx.bit:属性[data];

③  cpu0.elf(或u-boot.elf):属性[data];

④  cpu1.elf:属性[data]。

4.3  Debug and Run

Debug 略。

将最终生成的boot.bin(或BOOT.BIN,名字必须是这两个)拷贝到SD卡中,

重新上电即可加载运行。

5 小结

在ARM已有双CortexA9Mpcore硬核的情况下添加Microblaze软核的好处是:

①  完全独立且和操作系统无关,可降低开发难度,便于调试时使用,在运行轻量级任务很方便,不需要额外的软件开发团队;

②  符合传统FPGA的开发思维,可移植到任何一款Xilinx FPGA和含FPGA的Soc上。

缺点是:

①   占用额外的逻辑资源且处理能力有限;

②   ARM硬核强大的处理能力得不到充分利用,造成固有资源浪费,无法实现系统的最高性能。

注:MicroBlaze代码也可在DDR中运行,Xilinx提供了官方应用XAPP1093,但该应用我尚未跑通。

Zynq 器件搭建多核系统相关推荐

  1. Zynq器件的时钟系统

    目录 前言 1.系统PLL介绍 2.时钟使用模式 (1)正常操作情况: (2)bypass旁路模式: ​3.时钟分支(Clock Branches) 4.系统时钟域 5.CPU CLOCK 附录 前言 ...

  2. Xilinx Zynq 7000 安装Linux 系统

    Xilinx Zynq 7000 安装Linux 系统 介绍 1 准备工作 2 工具的安装 2.1 支持库的安装 2.2 PetaLinux的安装 3 搭建硬件系统 3.1 建立工程 3.2 添加IP ...

  3. Zynq器件XADC模块介绍

    1.前言 赛灵思的7系列FPGA和Zynq器件创造性地在片上集成了模数转换器和相关的片上传感器(内置温度传感器和功耗传感器),这是相比赛灵思前一代产品来新增加的特性,可在系统设计中免去外置的ADC器件 ...

  4. 如何从0到1搭建物联网系统?

    如何从0到1搭建物联网系统? 2019年是一个好的开端,在互联网行业混迹3年,充分理解互联网行业关于用户思维.平台思维的诠释后,以及对于敏捷研发.协同工作等新思想新管理模式实践后,我准备回身物联网产业 ...

  5. vertex系列芯片和zynq系列芯片结构的异同_使用ZYNQ实现复杂嵌入式系统,真的好用!...

    [导读] 基于ZYNQ实现复杂嵌入式系统非常便利,其应用领域也越来越广泛,本文来从对ZYNQ芯片架构的理解来谈谈个人体会. 俯瞰zynq ZYNQ主要由两大部分组成: 处理系统PS(Processin ...

  6. TensorFlow搭建垃圾分类系统大师(免费领源码)

    人工智能是一个多学科交叉融合的领域,其包含机器学习.计算机视觉.自然语言处理等多个子领域,其中计算机视觉是应用最广泛的领域之一.大多数人熟悉的手机和相机中的人脸识别功能,就是人工智能子领域--计算机视 ...

  7. 云服务器+开发板搭建直播系统,自建流媒体服务器开直播

    使用背景 你工作中有没有碰到过这种情况: 1,实验室里跑着实验要一直盯着,周围还有很多事情要做. 2,晚上跑着实验下班了,回到家还想时不时的看一下实验情况. 现在很流行的直播可以帮上忙,把实验台当作直 ...

  8. 教你从0到1搭建秒杀系统-订单异步处理

    前面几篇我们从限流角度,缓存角度来优化了用户下单的速度,减少了服务器和数据库的压力.这些处理对于一个秒杀系统都是非常重要的,并且效果立竿见影,那还有什么操作也能有立竿见影的效果呢?答案是下单的异步处理 ...

  9. 教你从0到1搭建秒杀系统-Canal快速入门(番外篇)

    Canal用途很广,并且上手非常简单,小伙伴们在平时完成公司的需求时,很有可能会用到.本篇介绍一下数据库中间件Canal的使用. 很多时候为了缩短调用延时,我们会对部分接口数据加入了缓存.一旦这些数据 ...

最新文章

  1. c# html文本编辑器,C#实现简单文本编辑器
  2. 《失业的程序员》(六):加班
  3. css hover图片hover效果兼容ie8
  4. 【渝粤题库】陕西师范大学292391 金融机构管理 作业(专升本)
  5. [html] 如何在页面上显示Emoji表情?
  6. java ntlm_使用java UrlConnection使用ntlm(或kerberos)进行身份验证
  7. 04732微型计算机技术,04732微型计算机及其接口技术200710
  8. 第13章 线程安全与锁优化
  9. java查找一个数等于一组数中哪些数字相加的和_快速入门二分查找
  10. Win2008 R2 RemoteApp深度体验之二,RemoteApp服务器配置
  11. jquery鼠标右键事件
  12. dbvis连接mysql_Dbvis连接Mysql驱动问题
  13. 牛人搜集的常用的资源类网站及68个各类资源网站汇总
  14. CSDN IT冷知识(每日更新)
  15. 电子邮箱市场盈利模式
  16. r语言做绘制精美pcoa图_pca , nmds , pcoa 图添加分组的椭圆
  17. BZOJ4011: [HNOI2015]落忆枫音
  18. vue 手机h5动态银行支付密码键盘前端
  19. Mysql-五种join类型
  20. 如何安装R以及RStudio?打开RStudio页面告诉你没安装R或者出现页面空白问题

热门文章

  1. 关于psv破解中finalhe显示“sha256不匹配,请检查网络状态”的问题的解决办法!
  2. 开源的 Python 抢票神器,过年回家就看这一波了!
  3. SDL Trados 2021 最新版本的下载地址 (2021年12月更新)
  4. 小米2s合并分区后如何刷回MIUIV5
  5. 计算机类的专利号,一种计算机机箱
  6. python趣味编程-太空大战
  7. 企业管理员MCITP
  8. 委外---采购的几种特殊的外部采购类型
  9. 阿里云服务(六)—阿里云安全
  10. js判断数据类型(全)