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

 

 

 

文档共60页。主要向初学者提供了Zynq开发的技术方向,针对不同应用给出了基本的参考文档;同时对Zynq双核AMP加载方式做了详细描述,对Zynq的fsbl启动流程做了简单介绍。章节如下: Zynq User Guide 1 介绍 4 2 快速上手指南 4 3 多核开发教程 4 3.1 AMP开发说明 6 3.1.1 快速生成amp工程 6 3.1.2 Generating Boot File 8 3.1.3 烧写程序 9 3.1.4 启动 10 3.1.5 调试 10 3.1.6 总结 11 3.2 SMP开发说明 11 4 ZC706启动代码分析 11 4.1 启动代码 12 4.2 FSBL流程(FOR AMP) 13 4.3 CPU0启动CPU1流程 14 5 程序在线烧写方案及流程 14 5.1 程序烧写需求 14 5.2 提出该需求的原因 14 5.3 程序烧写方案 14 5.3.1 BOOT.BIN组成 14 5.3.2 BOOT.BIN生成方法 15 5.4 FSBL.BIN和APP.BIN等的生成 15 5.5 制作*BIN及烧写的具体步骤 15 5.5.1 制作*bin流程 15 5.5.2 BOOT.bin制作过程 15 5.5.3 FSBL.bin和APP.bin等的生成过程 22 5.6 烧写BOOT.BIN步骤 26 5.6.1 通过SDK工具烧写步骤 26 5.6.2 通过上位机烧写软件的烧写步骤 29 5.6.3 通过串口调试助手烧写步骤 29 6 Zynq Qspi控制器 30 6.1 基本特性 30 6.2 I/O接口 31 6.3 QSPI控制器模式 33 6.3.1 I/O模式 33 6.3.2 线性地址(linear address)模式 33 6.3.3 传统(legacy)SPI模式 34 6.4 QSPI 例程 34 6.5 QSPI控制器支持访问32MB方法 35 6.5.1 Bank地址寄存器(Bank address register) 35 6.5.2 扩展地址模式(Extended address mode) 35 6.5.3 使用新写命令(New commands) 35 6.6 QSPI FLASH选择 35 6.7 作为BOOT器件考虑 35 7 µC/OS系统启动指南 36 7.1 INTRODUCTION 36 7.1.1 Software Requirements 36 7.1.2 Hardware Requirements 36 7.2 HARDWARE DESIGN 37 7.2.1 Step 1. Invoke the Vivado IDE and Create a project 37 7.2.2 Step 2. Create an IP Integrator Design 39 7.2.3 Step 3. Add and setup the Zynq processor system IP block 39 7.2.4 Step 4. Customize the Zynq block for our design 41 7.2.5 Step 5. Add the soft peripherals 45 7.2.6 Step 6. Generate HDL Design Files 47 7.2.7 Step 7. Synthesis, Implement and Generate Bitstream 48 7.3 SOFTWARE DESIGN 49 7.3.1 Step 1. Installation of the µC/OS Repository 49 7.3.2 Step 2. Generate the µC/OS BSP 50 7.3.3 Step 3. Build and Debug the Demonstration Project 54 7.3.4 Step 4. Program the AXI Timer 0 with the ucos_axitimer Driver 55 7.3.5 Step 5. Program the AXI Timer 1 with the Xilinx tmrctr Driver 58 7.4 CONCLUSION 59 8 Linux系统启动指南 59
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_Hello_Panda_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值