Xilinx的Zynq系列,ARM和PL通过DMA通信时如何保证DDR数据的正确性。

       使用ZYNQ或者MPSoC的好处是可以通过PL逻辑设计硬件加速器,对功能进行硬件加速。加速器和ARM之间的交互信息一般包含自定义加速指令传递、待计算数据以及计算结果。这三种交互信息为了实现高性能往往需要使用DMA进行通信。考虑两种场景,一种是ARM将运算数据的结果或者一些待处理数据发往PL侧加速,一种是PL处理结果DMA传输到DDR内存,ARM读取数据接着处理。当有操作系统管理内存时,这些操作没什么问题,PL看到的DDR数据总是更新过的;ARM接收到DMA中断后,读取内存数据,总能读取到更新后的数据。但如果在SDK环境下裸调,由于Dcache的存在,CPU和PL往往发现看到的是部份更新的数据,因此需要在代码中加入对Dcache的处理。主要有两种方法

        第一种方法:简单粗暴,直接将cache关闭,这时不使用cache,无论是CPU还是PL都是直接更新DDR中的数据,所以不存在Cache一致性的问题。

         初始化的时候加入以下以下语句:

           #include "xil_cache.h"

           Xil_DCacheDisable();
           Xil_ICacheDisable();

           但这种方法有缺陷,由于Cache关闭,CPU计算的中间结果保存在DDR内存中,每次取数据从DDR取,而不是Cache,因此性能会急剧下降。

      第二种方法:

           CPU传数据给外设,CPU写完数据后,其实数据存在Dcache中,这时需要cache中关联地址的cacheli

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值