ZYNQ DDR读写

很不错的一篇文章,mark一下: 使用Xilinx SDK对Zynq的PCIE,SRIO等高速接口进行调试的过程中,经常会涉及到DMA对DDR数据的读写,此时就会引入会引入cache一致性问题。Zynq的PS在运行过程中,通过DDR控制器对DDR存储器进行访问,为了加快访问速度,常常将一些数据缓存在cache中,而且不是针对一个数据数据缓存,而是一批(Xilinx称为一行,即line,一行长度为32),这样的好处是下次访问速度会加快,但是坏处也很明显,cache数据发生变化,不能马上反映到DDR中,反之亦然。当通过DMA修改DDR数据时,CPU可能还不知道发生了什么,拿到的数据还是cache中没有修改的数据,导致读写数据的错误。

解决的办法有以下两种

  1. 调试过程中,直接禁用cache,即使用Xil_DCacheDisable();CPU将直接访问DDR内存,读写都是直接的,这会降低CPU性能,但简化了数据传输操作,属于极端方法。
  2. 使用CacheFlushCache Invalidate操作,CacheFlush把Cache里的数据清空,将Cache内容推到DDR中;而Cache Invalidate表示当场宣布Cache内容无效,需要从DDR中重新加载数据,即把数据从DDR中拉到Cache中。
#include "xil_cache.h"

//将内容刷新至DDR(写数据后)
Xil_DcacheFlushRange((u32)sendram,sizeof(buffer));

//将DDR内容拉近Cache中(读数据前)
Xil_DcacheInvalidRange((u32)recvram,sizeof(buffer));


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值