zynq cdma hp访问ddr的cash问题

最近调试cdma通过hp口完成bram和DDR之间的数据搬移遇到一个非常有趣的问题,也是让这边苦恼了好几天;
首先问题如下:
1.上电debug开始ddr搬数据到bram是可以看到bram搬移成功;
2.之后bram搬数据到ddr,mem查看窗口没有发现ddr对应地址段出现变化;
3.程序写这块内存,mem查看窗口ddr地址段数据有变化;
4.启动ddr该地址段搬到bram,—是之前的数据—
5.程序更新bram中的数据后搬到ddr,mem查看窗口ddr地址段数据没有发生变化;
6.启动ddr该地址段搬到bram,—是5步中bram写的数据—
总结下就是:程序改变ddr中数据会及时的更新到ddr中,但搬移到bram中还是上一次的数据;bram搬到ddr中,ddr数据没有改变,实际已经搬进来了因为下一次ddr搬出来是上一次的数据。
最开始做的实验少,没有发现这个规律,一直以为是hp和ddr的地址映射有问题,hp将数据写到ddr其他地址段了,查了好多的资料最后这边总结下来是hp地址和ddr地址是对应的,做一个全地址就好了,假如DDR是256MB那么hp总线空间直接拉满256MB如下图:

HP地址空间拉满
这样,使用哪段可以直接在软件里面申请malloc出来。之后这边意识到是不是被缓存了,最开始以为CDMA缓存了,CDMA中的确有个FIFO但这个FIFO是用来改善总线的;最后这边查到了这个好的博文Zynq Cache问题的解决方法
得到了解决;这边再总结下:
包含了头文件:xil_cache.h
使用到了两个函数:
void Xil_DCacheFlushRange(INTPTR adr, u32 len)
这边理解这个函数就是将cash数据flush(刷)成ddr最新数据,往外搬数据时候用;
void Xil_DCacheInvalidateRange(INTPTR adr, u32 len)
这边理解这个函数就是将cash数据放入DDR中,搬数据到DDR用;

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值