I have a custom peripheral that needs to read data from DDR3 memory, and I have chosen a DataMover instance to accomplish that.
The DataMover MM2S command interface requires me to supply a 72-bit command word in port MM2S_CMD_TDATA. I think I'm doing everything right, but I don't get the proper data on read.
I've looked at the signals in Chipscope, and everything looked right there, except the values of data that I received on the MM2S_TDATA port.
On the ZedBoard hardware, I am running Linux, but reserved the last 16 MB of memory so the kernel wouldn't touch it. I used the mmap() interfaces to open /dev/mem, and wrote pattern data into those 16 MB. The data I wrote into memory doesn't come out in ChipScope.
I suspect a memory-mapping mismatch. How does the SADDR field in MM2S_CMD_TDATA relate to the physical addresses of DDR3? With the ZedBoard having 512 MB, the last 16 MB should be at physical address 0x1F000000. That's the value I use in SADDR, but it doesn't give me what I expect. Is this the wrong value for SADDR?
Any suggestions regarding what could be wrong?