From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
12-13-2012 04:23 AM
We have some existing code which we are porting to some newer FPGA hardware and are looking into tapping into the DRAM capabilities of the new board. The Board is the PXIe 7965R.
I have looked at the examples and have read the Help on the subject but since I currently don't have a device to do tests on (Will have it again soon) and I want to create a universal solution I am trying to find out the limitations which I need to be aware of in order to create a truly re-usable and scaleable solution. At the moment I am looking at creating a ring buffer using DRAM.
I want to have a system which continually fills the RING buffer and then upon triggering outputs a sub set via DMA FIFO to the host. The data requested may or may not be completely acquired at the point of triggering so the logic pertaining to which address is requested when is more complex than a simple sequential read. It is non deterministic on the "Request data" side.
My understanding (Using the Memory item, not the CLIP version):
I'm aware of the 128 Bit data width. I have plans for this, but my main questions are regarding the synchronisation aspects and how complicated my caching / synchronisation code needs to be.
Phew.
Mega thanks to anyone willing to enter into the discussion with an FPGA newling.
Shane.
PS I have read THIS (Great info from Ben Sisney) and THIS (Great info also) and the help on the subject.
12-13-2012 03:50 PM
Hi,
12-13-2012 05:23 PM
@James_McN wrote:
Hi,
- The memory interface is actually designed to run at 100MHz (x 128bit to get the 1.6GB/s speed per bank). 40MHz is for the FIFO CLIP interface. Gotcha. Thanks.
- The handshaking signals are your friends for most of the points. Ready for Input describes that the item is ready for input on the next iteration, this avoids missing cycles unnecessarily.
- Any data written when not ready for input will beignored.
- If you fill the outstanding requests that is what will cause it to not be ready.
- You are correct, if you have downstream functions which can always take data the you can wire true to ready foroutput.
- I'm not sure about the benchmarks for the throughput. I have worked on an application once when we were doing truly random access in RWRWRW mode and saw a big drop in throughput (I think about 1MS/s in that case vs 50 max for RWRWRW max). Sequential access is faster than random access though, the FIFO CLIP achieves 40MS/s which will be highly sequential, I am not sure exactly how they implement this to achieve this rate. Sorry I can't me more specific but hopefully it gives you a rough range. 50MS/s at 128 bit = 800MByte / s, right? 1MS/s = 16MByte/s, right?
Thanks.
Shane.
12-19-2012 02:24 AM
@Intaris wrote:
50MS/s at 128 bit = 800MByte / s, right? 1MS/s = 16MByte/s, right?
Hi Shane,
Yeah thats right, in that project we were speccing everything in samples but the conversion you have written is correct.