本试验在 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 region
psu_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 region
psu_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 region
psu_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 region
psu_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 region
psu_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 region
psu_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 region
psu_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