14.2 EDK / Zynq - 在PL上添加CIP pcore并使用开箱即用的软件驱动程序代码,将源缓冲区和目标缓冲区设置为ddr时不起作用

描述

我为Zynq创建了一个自定义IP并将其添加到PL上。我使用CIP生成的驱动程序软件代码来运行测试。在ddr中设置源缓冲区和目标缓冲区时,它不起作用。为什么?

这是因为默认情况下在独立BSP中启用缓存。

有几种方法可以达到预期的效果。

1)在main.c代码中禁用缓存;它应该工作正常。

#include“xil_cache.h”
Xil_DCacheDisable();

2)在自测试示例中,在写入DDR之后和继续下一步之前刷新缓存。

for(Index = 0; Index <CIP_AXI4_MASTER_SELFTEST_BUFSIZE; Index ++)
{
SrcBuffer [指数] =指数;
DstBuffer [Index] = 0;
}

xil_printf(“*******刷新数据缓存!!! \ n \ r”);
Xil_DCacheFlushRange( (unsigned int) SrcBuffer,CIP_AXI4_MASTER_SELFTEST_BUFSIZE);
Xil_DCacheFlushRange( (unsigned int) DstBuffer,CIP_AXI4_MASTER_SELFTEST_BUFSIZE);

xil_printf(“ - 启动用户逻辑主模块以从源接收单词\ n \ r”);

3)“仅”刷新src缓冲区,然后启动cip并最终在执行比较之前使目标缓冲区无效,以强制从主DDR(而不是缓存)读取。

for(Index = 0; Index <CIP_AXI4_MASTER_SELFTEST_BUFSIZE; Index ++)
{
SrcBuffer [指数] =指数;
DstBuffer [Index] = 0;
}

xil_printf(“*******仅为源代码刷新数据缓存!!! \ n \ r”);
Xil_DCacheFlushRange((unsigned int)SrcBuffer,CIP_AXI4_MASTER_SELFTEST_BUFSIZE);
xil_printf(“ - 启动用户逻辑主模块以从源接收单词\ n \ r”);
/ ****来自selftest的更多代码**** /

xil_printf(“*******使目标数据缓存无效以强制正确读取!!! \ n \ r”);
Xil_DCacheInvalidateRange((unsigned int)DstBuffer,CIP_AXI4_MASTER_SELFTEST_BUFSIZE);
/ ***按照原始代码进行内存比较*** /

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-31 13:14:19 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它