zcu102_13_PS多核协同工作

这篇博客介绍了如何在ZCU102开发板上利用Vivado和SDK配置Zynq的4个A53核进行多核协同工作。内容包括建立PS工程,分配DDR内存,实现串口通信、共享DDR内存通信和SD卡加载。博主提供了详细的步骤和错误避免方法,并分享了试验源码。
摘要由CSDN通过智能技术生成

本试验在 PS 中使用 zynq 内部全部 4 个 A53 核分别独立运行程序,并且使用 DDR 进行数据通信。

除了在 SDK 中使用 Debug 进行运行调试外,还试验了以镜像文件的方式在 SD 卡中加载启动。

除了官方的 ug1186(本试验未使用 openamp)、xapp1079 以外,还有以下:

https://blog.csdn.net/long_fly/article/details/79335025

本试验源码工程已上传至
https://download.csdn.net/download/botao_li/11431382

Vivado 工程

建立 zcu102 的 Vaivado 工程,新建 Block Design,并且添加 zynq 模块

运行 Run Block Automation,并连接时钟信号:

在这里插入图片描述

保存后依次运行 Generate Output Products 和 Create HDL Wrapper

在 Flow Navigator 中选择 Generate Bitstream,完成后先 Export Hardware,再执行 Launch SDK

建立 PS 工程

在 SDK 中建立 4 个 Hello World 模板工程,分别选择 4 个 A53 核,并且4个工程全部使用独立的 BSP

在这里插入图片描述

完成后的 Project Explorer 如下

在这里插入图片描述

程序指令 DDR 空间分配

由于 4 个 A53 核使用访问同 1 个 DDR,因此必须将 4 个程序的指令空间分开,不能重叠。

双击打开 4 个工作工程的 lscript.ld 文件

在这里插入图片描述

在 Section to Memory Region Mapping 部分可以发现程序指令空间全部分配至 psu_ddr_0_MEM_0

在这里插入图片描述

于是在 Available Memory Regions 部分双击修改 psu_ddr_0_MEM_0 的 Size

在这里插入图片描述

分配结果如下表:

单核工程 Base Address Size
a0 0x0 0x10000000
a1 0x10000000 0x10000000
a2 0x20000000 0x10000000
a3 0x30000000 0x10000000

如果 Size 大小不足则会出一类似下方的 Build 错误

d:/program/xilinx/sdk/2018.2/gnu/aarch64/nt/aarch64-none/bin/…/lib/gcc/aarch64-none-elf/7.2.1/…/…/…/…/aarch64-none-elf/bin/ld.exe: a3.elf section .text' will not fit in regionpsu_ddr_0_MEM_0’
d:/program/xilinx/sdk/2018.2/gnu/aarch64/nt/aarch64-none/bin/…/lib/gcc/aarch64-none-elf/7.2.1/…/…/…/…/aarch64-none-elf/bin/ld.exe: address 0x30001674 of a3.elf section .init' is not within regionpsu_ddr_0_MEM_0’
d:/program/xilinx/sdk/2018.2/gnu/aarch64/nt/aarch64-none/bin/…/lib/gcc/aarch64-none-elf/7.2.1/…/…/…/…/aarch64-none-elf/bin/ld.exe: address 0x300016b4 of a3.elf section .fini' is not within regionpsu_ddr_0_MEM_0’
d:/program/xilinx/sdk/2018.2/gnu/aarch64/nt/aarch64-none/bin/…/lib/gcc/aarch64-none-elf/7.2.1/…/…/…/…/aarch64-none-elf/bin/ld.exe: address 0x30003010 of a3.elf section .mmu_tbl0' is not within regionpsu_ddr_0_MEM_0’
d:/program/xilinx/sdk/2018.2/gnu/aarch64/nt/aarch64-none/bin/…/lib/gcc/aarch64-none-elf/7.2.1/…/…/…/…/aarch64-none-elf/bin/ld.exe: address 0x30006000 of a3.elf section .mmu_tbl1' is not within regionpsu_ddr_0_MEM_0’
d:/program/xilinx/sdk/2018.2/gnu/aarch64/nt/aarch64-none/bin/…/lib/gcc/aarch64-none-elf/7.2.1/…/…/…/…/aarch64-none-elf/bin/ld.exe: address 0x3000a000 of a3.elf section .mmu_tbl2' is not within regionpsu_ddr_0_MEM_0’
d:/program/xilinx/sdk/2018.2/gnu/aarch64/nt/aarch64-none/bin/…/lib/gcc/aarch64-none-elf/7.2.1/…/…/…/…/aarch64-none-elf/bin/ld.exe: address 0x30001674 of a3.elf section .init' is not within regionpsu_ddr_0_MEM_0’
d:/program/xilinx/sdk/2018.2/gnu/aarch64/nt/aarch64-none/bin/…/lib/gcc/aarch64-none-elf/7.2.1/…/…/…/…/aarch64-none-elf/bin/ld.exe: addr

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值