本文主要是介绍MPSOC上PS和PL基于AXI-CDMA高速交互数据(linux),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
MPSOC上PS和PL基于AXI-CDMA高速交互数据(linux)
alvin.lu@avnet.com
2020.09.12
软件平台:
Vivado 2018.3
PetaLinux 2018.3
Ubuntu16.04.6真机
git地址 git@github.com:alvin-hao/cdma_training.git
硬件平台:
ZCU102 (ZynqMP)
一.MPSOC ps和pl通过cdma搬运ddr进行数据交互的核心思想比较简单,ps发指令,使能cdma,cdma把对应的数据从pl ddr搬运到ps ddr,搬运完成以中断的方式通知,其中软件设计的基础依据如下
CDMA寄存器的地址是0xA000_0000
CDMA能够操作PS的内存范围是0x0000_0000~0x7FFF_FFFF2GB
CDMA能够操作PL的内存范围是0x8000_0000~0x9FFF_FFFF512MB
1.petalinux的开发
基于附件bsp创建一个petalinux工程;
$ petalinux-create -t project -s cdma0930.bsp -n cdma
客户也可以基于xilinx官方的xilinx-v2018.2-zcu102.bsp创建一个工程然后用petalinux-config --get-hw-description=[SRC OF HDF]导入基于zcu102新的hdf工程
用命令
$ petalinux-build可以编译出ZCU102 linux启动需要的所有镜像文件
关于linux的bootargs的设置,需要设置linux能主动访问的ddr空间为0-1G,1-2G的空间用来与cdma共享,这里的range客户可以手动调节,但是一定需要留足够的空间给cdma搬运数据
我的设置如下
chosen {
bootargs = "earlycon console=ttyPS0,115200 clk_ignore_unused cma=128M devtmpfs.mount=1 uio_pdrv_genirq.of_id=generic-uio mem=1024M";
stdout-path = "serial0:115200n8";
};
编译完成后,用petalinux-packahe命令打包
$ petalinux-package --boot --fsbl zynqmp_fsbl.elf --fpga system.bit--u-boot --pmufw pmufw.elf --force
生成BOOT.BIN文件
然后把boot.bin和image.ub放到sd卡启动即可。
2.测试
第一步,把1.jpg从sd卡读取到ddr 0x4000 0000,然后用cdma把数据搬运到0x8000 0000
第二步,用cdma把0x8000 0000数据搬运到0x5000 0000,搬运的次数在第一步打印出来
第三步,用md5检验两个文件,是不是一致,一致则搬运成功
读写速度应该是超过1500MB/s了.
这篇关于MPSOC上PS和PL基于AXI-CDMA高速交互数据(linux)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!