3 Replies Latest reply on Mar 21, 2016 2:04 AM by dhritimank_

    FIFO requirement running on Windows




      I have a FX3 application which streams data from a FPGA to an application running on the PC. I have a SDRAM that acts as a large FIFO to buffer data when Windows locks out my application from reading streamed FPGA data. I hardly ever see the SDRAM being required to buffer data and when it does it's only for 1-2ms worth of data (my PC is a mid-range spec). It seems that I could potentially do away with the SDRAM and implement multiple DMA buffers (~300K) in a 512K FX3 part instead.


      I know there are so many variables here and it's very indeterminate but I'm interested in peoples' experience of the worst case duration for streamed data being held up by Windows. Any thoughts / comments welcome!





        • 1. Re: FIFO requirement running on Windows

          Hi daveb1,


          The maximum DMA buffer size is 64KB(Kilo Bytes) - 16 Bytes. what is the interface you ae using ( slave FIFO or GPIF) ? Are you using any flow control ?





          • 2. Re: FIFO requirement running on Windows

            Hi Krishna,


            Am I right in thinking that I can assign multiple buffers to a DMA channel to acheive > 64k-16 ?


            With a 3014 part, I have ~328k RAM spare which plan use as 43 x 8K buffers to assign to a single DMA channel. I have a 32k FIFO in the FPGA that can buffer the data stream while the FX3 switches to the next free buffer (~0.8us). My data rate is 60MB/s so with 328k + 32k I get 6ms worth of buffering before an overflow if Windows stops the Cypress USB driver from running.


            From my observations so far I'm seeing hardly any buffer being required. This is running on a dual core i7 laptop and is only a sample size of 1, hence my open question to see what experience other users have had.



            • 3. Re: FIFO requirement running on Windows

              Yes, The maximum size of a single DMA buffer is 64K-16 bytes. You can implement multiple buffers. However it should not be more than the space that you allocate in the RAM for DMA buffer. Just make sure of that.