Read Write DDR4 through HPS2FPGA Bridge



I am working with an Arria 10 with 2 DDR4 memories. One is connected to the HPS EMIF and the other is connected to the HPS2FPGA bridge. However, when I read and write data, some of the read data does not match the return data. For example, I tried writing 0x0 to 0x100 using mmap and read the data, every 16th and 17th data address did not write correctly (0, 1, 16, 17, 32, 33 … etc.). However, the behavior has changed between compiles when I add or remove a PIO (I have not played with much else yet only PIOs). I have had a project that only did not write the first value correctly and would write that value to the 16th address position (I am writing 32 bits at a time). I have also compiled a few times where I can read values, but when I try to write values, Linux will hang and I either need to power cycle or hit the reset button. However, I have had some compiles that work as expected (written values match the read values), but I cannot figure out what causes it to not work when I add or remove QSYS IP. One thing that I am looking into is a ram timing not met message from the Quartus compiler. I cannot remember if I receive that message for the compiles that worked properly. I have not used timequest analyzer before; I am in the learning process.To me it seems like a timing problem so I will try to resolve that first. Any suggestions, comments, or help would be much appreciated.

Thank you


Just to tie up this loose end, I solved my problem. It was indeed a timing problem. After changing some synthesis settings in Quartus and changing my architecture in QSYS, the “RAM timing not met” warning message was removed and my system worked as expected.