OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11608|回复: 2

[XILINX] 如何设计可以实现用AXI4-stream来同步读写DDR(Zedboard)

[复制链接]

0

主题

0

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2020-11-26
在线时间
0 小时
发表于 2020-11-26 11:08:08 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 zhaolin2612 于 2020-11-26 11:15 编辑

我有一个使用流水线结构的设计,是信号处理中的一个部分,需要在FPGA上验证。数据使用SD卡进行存储,通过SDK来使输入的数据从SD卡写到DDR再发送到PL,输出的数据从PL到DDR再写到SD卡中。但我的设计是使用的流水线结构,而且其中还有反馈的结构,并且数据量比较大,7*10^6个数,因此我考虑使用AXI4 stream来进行数据传输,可以无限制突发传输。

但由于流水线结构的特点,当新输入数据来的时候,旧的数据已经处理完了,已经输出了,所以需要再发送数据的同时就已经开始接收数据了,也就是需要同步进行。但PL侧没有DDR,我使用DMA来控制传输(因为有原子哥的zynq的使用实例,就采用了这种方法),读写到DDR。
Annotation 2020-11-26 103921.jpg
我之后打算把 AXI4-Stream DATA FIFO 来换成我的设计。但我在软件代码里面看到,这个是先通过向DMA发送一个“发送数据到device”的指令,之后再有一个接受device数据到DDR的指令。但这也是顺序执行的,我的理解是先发送一串数,然后再接受一串数,不知道这个理解对不对。不过我想要在发送数据的时候就开始接受数据了。
value = TEST_START_VALUE;
for (i = 0; i < MAX_PKT_LEN; i++) {
tx_buffer_ptr = value;
value = (value + 1) & 0xFF;
}   
Xil_DCacheFlushRange((UINTPTR) tx_buffer_ptr, MAX_PKT_LEN); //刷新Data Cache
//传送数据
status = XAxiDma_SimpleTransfer(&axidma, (UINTPTR) tx_buffer_ptr,
MAX_PKT_LEN, XAXIDMA_DMA_TO_DEVICE);
if (status != XST_SUCCESS) {
return XST_FAILURE;
}
status = XAxiDma_SimpleTransfer(&axidma, (UINTPTR) rx_buffer_ptr,
MAX_PKT_LEN, XAXIDMA_DEVICE_TO_DMA);
if (status != XST_SUCCESS) {
return XST_FAILURE;
}
Xil_DCacheFlushRange((UINTPTR) rx_buffer_ptr, MAX_PKT_LEN); //刷新Data Cache

想问下DMA或者SDK可以做到在发送的时候就开始接受吗?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2018-10-22
在线时间
35 小时
发表于 2020-11-26 20:51:10 | 显示全部楼层
dma手册(pg021)中有Cyclic DMA Mode,描述如下图,你可以看下是否是你需要的功能
回复

使用道具 举报

9

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2019-6-20
在线时间
20 小时
发表于 2021-4-9 09:13:39 | 显示全部楼层
请问楼主实现将 AXI4-Stream DATA FIFO替换成自己的设计了吗,最近也有这样的需求,可以交流一下吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-3 18:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表