UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
618 Views
Registered: ‎10-11-2017

DMA SimpleTransfer() and Redundant Memory Writes

I have a custom IP that takes a 32-bit number from the PL and writes it to DDR. The problem I am having is that when I loop a function including the below code, the initial 32-bit value that is accepted gets immediately written over and over again in the memory. So, if I write 0xFFFFFFFF and tell the program to loop 4 times, it does not wait for the 2nd-4th inputs, it immediately fills all 128 bits with 1s. I have tried to flush and invalidate the data ranges in multiple locations with no effect. I'm sure it is something obvious that I am missing. Any help?

 

		//Initiates transfer from receiver IP to DDR

		Status = XAxiDma_SimpleTransfer(&AxiDma,(UINTPTR) RxBufferPtr + Spacing,
					MAX_PKT_LEN, XAXIDMA_DEVICE_TO_DMA);

		if (Status != XST_SUCCESS) {
			return XST_FAILURE;
		}

		xil_printf("Receive Setup Complete.\r\n");

		//Waits for 32-bit transfer to complete

		while (XAxiDma_Busy(&AxiDma,XAXIDMA_DEVICE_TO_DMA)){

		}
0 Kudos
1 Reply
Highlighted
565 Views
Registered: ‎10-11-2017

Re: DMA SimpleTransfer() and Redundant Memory Writes

I'll also add that this is a bare metal system and I am asserting TLAST at the end of every 32nd bit. Putting TLAST at other locations seems to just make the system hang.

 

If I rerun the program without reprogramming the FPGA between runs, the system executes with whatever input I provided on the earlier run. So, if I give it 0xFFFFFFFF on one run and see it write multiple times and then exit, if I rerun the program it immediately sets the input to all 1s again without waiting for input from the custom IP.

0 Kudos