Reading blocks from external RAM


I ve been working on a signal acquisition project. It samples 262.144 points (each point = 2 bytes), taking 524.288 bytes in the external RAM. This was done using the fifo idea, filling the fifo with 512 ponits at 10Mhz and loading the external RAM at 100Mhz (I’m using the “ramtester example” RAM controller, which is very helpful for this situation).
After a single acquisition, The data is read from a PC through the usb port, running a C++ application. However, I experienced some delays (a long busy state) when I call thr following function:

okUsbFrontPanel_ReadFromPipeOut(obj, 0xa0, 524288, buf);

My data is loaded in buf variable, ‘obj’ is the handler object, ‘0xa0’ is the address inside the fpga of okPipeOut module and ‘524288’ is the block size argument (which i couldnt understand very well). Is this ‘524288’ value correct? Why my application freezes for a consider while when I read this block from fpga+external RAM? Do you recommend I use some polling technique in my C++ code?

Thanks a lot,



You have this attached to a okPipeOut inside the FPGA? (or an okBTPipeOut?)

The ReadFromPipeOut method does not take a block size parameter. It is a length parameter and just means it will read that length of data before returning.

I’m Using okpipeout module. That’s ok. So what can I do to prevent my system from freezing, please?



Joao - What operating system and FrontPanel version are you using? Also, are you using a USB 2.0 (high-speed) port? How long is the delay?

All API functions are blocking, so they will not return until the data has been transferred.

Im using windows xp professional. Front panel 3.0 and usb 2.0.
It takes about 15 seconds to return the data (250kB of data). What it could be?


Please try running the PipeTest application and the DESTester applications. Those are good samples to check your work against.

Thank you.

Do these applications work with external RAM module?