本帖最后由 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。 我之后打算把 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可以做到在发送的时候就开始接受吗? |