Altera_Forum
Honored Contributor
10 years agoMulti-Port-Front-End DDR3 controller is too slow
Hi,
I've using a Cyclone V SOC with 1Gbyte of DDR3 memory connected to the FPGA DDR3 pins - I've set the basic clock rate to 350MHz. I've got the NIOS CPU connected to this, and can verify that the memory is working. I'm trying to send multiple streams of data to the DDR3 memory, and read streams back out again. This is being controlled by the FPGA. Unfortunately, I seem to have a bottleneck in terms of bandwidth. I'm assuming that maximum bandwidth would be 350M x 2 x 32bits = 22.4Gbits per second. I'm not managing to get 6Gbits per second (total). I've set it up in QSYS for the MPFE with 5 ports. One 32bit read/write port is connected to the NIOS. Three 64 bit write-only ports are exported to the FPGA, and one 64bit read-only port is also exported to the FPGA. I've set the clock rate on these ports to 150MHz, and I'm sending 32 words at a time in bursts of 1 (I've tried bursts of 4 but that didn't work, and I'm puzzled as to why my burst width limits me to max burst of 4. Equally, I'm puzzled that as I'm using v15.1 and the Avalon MM port is generated with a "beginbursttransfer" signal, why the Avalon MM manual suggests "Altera recommends that you do not use thissignal. This signal exists to support legacymemory controllers." How legacy is the MPFE on the UniPhy IP for Cyclone V in Quartus 15.1? I've also monitored the NIOS bus, and that uses burst cycles of 1 as well. I know the manual for the MPFE suggests I use 128-bit wide bus as I'm running at 1/2 the DDR clock rate, so should use 4x the bus width, but then I need to assign two FIFOs to each port, and I run out of FIFOs in the MPFE. Is there no way of speeding this up? Why is it not even managing 6Gbits per second - which is nearly 1/4 of the maximum?