11-01-2020 02:12 PM
Hi,
I am getting DmaIntErr in my CDMA design. The manual for CDMA, PG-034, says it will occur when DataMover gets 0 value for BTT(Byte to transfer). But this is not my case because I gave it "4" as a value.
I think I need to look inside the CDMA module. Is there any way I can do it?
I will post my waveforms too just in case if someone can help me with this.
1. I am dispatching this descriptor to CDMA.
2. the descriptor above will copy data from the "0x5000_0010" address(DDR memory) to the "0x8000_0004"(BRAM buffer) address.
After that, 4 bytes of data will be transferred to the buffer.
Now, as you can see in the waveform, the CDMA module issue and ARADDR 0x5000_0010 to read data from DDR memory. However, the data read from the previous data read operation makes "RLAST" go high again and it stays there even if the RVALID is not asserted. Why does this behavior happen? I think this makes CDMA get confused and mess up with DataMover. Is this the cause of DmaIntErr?
Any input will be appreciated.
Thank you.
Best,
Hsuh
11-01-2020 03:11 PM
Did you select "allow unaligned transfers"? Because your address is not aligned to 512/8 = 64 and you should select this option or you should align your address to 64.
11-01-2020 03:11 PM
Did you select "allow unaligned transfers"? Because your address is not aligned to 512/8 = 64 and you should select this option or you should align your address to 64.
01-08-2021 10:19 AM - edited 01-08-2021 10:26 AM
Thank you for your reply adem369.
Yes. As you indicated above, the cause was the "Allow unaligned transfers" not ticked in the settings.
I have two CDMA modules in my design. But forgot to turn this on in one CDMA and that created a problem.
On top of this, I also had the problem in the CDMA descriptor block chain.
In the page 35 of the CDMA IP manual(PG034), there is a description on how to form Buffer Descriptor(BD) Chain.
I am using Scatter-Gather mode and not a cyclic BD mode. So I didn't look into it and just issuing next descriptor address as an incremental address.
e.g.)
1st descriptor points 0xC000_0040 as a next descriptor
2nd descriptor points 0xC000_0080
....
4th descriptor points 0xC000_0100 (and I expect CDMA Scatter Gather operation ends here)
Even if I gave a stopping address of 0xC000_00C0 to AXI_lite port, it looks like I need to give 0xC000_0000(start of the Buffer Descriptor address, the addr of the first DMA descriptor.) as a next descriptor pointer in the fourth DMA descriptor. In this way, CDMA can point the first descriptor correctly. So the content of the fourth descriptor in the memory will be,
NXTDESC_PNTR: 0xC000_0000
SA: <whatever the source address you are using>
DA: <whatever the destination address you are using>
CONTROL: <specify your length of transfer here>
After I corrected these two, the problem is gone now.