Zynq 器件搭建多核系统

         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,但该应用我尚未跑通。

 

 

 

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
Zynq是一款基于ARM Cortex-A9架构的SoC芯片,它集成了FPGA和处理器,可以实现高性能的数字信号处理和控制。在Zynq上运行Linux操作系统可以充分发挥其处理器的性能和FPGA的可编程性能力,实现复杂的应用。 以下是在Zynq搭建Linux操作系统的步骤: 1. 准备工作 在开始之前,需要准备好以下工具和材料: - 一台装有Ubuntu操作系统的PC机 - Vivado开发环境 - Xilinx SDK(包含ARM交叉编译器) - Bootgen工具 - SD卡 2. 创建Vivado工程 在Vivado中创建一个新的工程,选择Zynq Processing System作为IP核,并配置好FPGA和处理器的参数。 3. 生成硬件描述文件 在Vivado中生成硬件描述文件(bitstream)。 4. 创建FSBL工程 在Xilinx SDK中创建一个新的FSBL(First Stage Boot Loader)工程,用于加载Linux内核和根文件系统。 5. 编译FSBL 编译FSBL工程,生成boot.bin文件。 6. 创建Linux内核工程 在Xilinx SDK中创建一个新的Linux内核工程,配置好内核参数,并使用ARM交叉编译器编译内核。 7. 生成设备树文件 生成设备树文件(device tree)用于描述硬件系统的配置信息。 8. 创建根文件系统 创建一个根文件系统,包含Linux操作系统所需要的文件和工具。 9. 打包根文件系统 使用Bootgen工具将根文件系统打包成一个文件(image.ub)。 10. 在SD卡中创建分区 将SD卡插入PC机,使用fdisk工具在SD卡中创建两个分区,一个用于存放boot.bin和设备树文件,另一个用于存放根文件系统。 11. 将文件复制到SD卡中 将生成的boot.bin,设备树文件和image.ub复制到SD卡的第一个分区中,将根文件系统复制到第二个分区中。 12. 启动系统 将SD卡插入Zynq开发板中,连接串口和网线,开机启动系统。 以上是在Zynq搭建Linux操作系统的基本步骤,具体实现过程可能会受到硬件和软件版本的影响。需要根据实际情况进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Hello_Panda_

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值