Streaming into different areas of RAM Vivado

Applications, development tools, FPGA, C, WEB
Post Reply
User avatar
renegade264
Posts: 15
Joined: Mon Apr 08, 2019 1:08 pm

Streaming into different areas of RAM Vivado

Post by renegade264 » Sat Mar 28, 2020 5:55 pm

Hi,

I am working on quite a complex project involving 4 simultaneous data streams at 960 KSPS 32 bit floating point (30.72 MBPS) total data rate at most 122.88 MBPS. I am thinking to stream each set of data into different areas of RAM (244Mb) split into 4 so (61 Mb) each, I am first hoping whether this is possible ? but I can foresee a potential issue with moving the RAM writer pointer location. As the data rate is relatively low (DDR RAM is rated in many Gigabits) I am hoping this would be possible in some way but also wondering how I would go about implementing this in Vivado. I have learnt from Pavel's projects streaming data into the DDR RAM and that has been a great success, I am also far more confident in navigating and implementing ideas in Vivado and C. I am working on the Red Pitaya 122.88 SDR model and I have SmartLynq JTAG debugger connected and I am working fully remotely. I understand that fiddling around too much may hang and crash the FPGA, I will probably arrange to install a jumper cable from the Lynq GPIO to FPGA reset.

Another caveat is that I would like this data to be averaged and then streamed to a c++ client which I have running remotely. The four data channels should ideally be sent at 32 Hz each, meaning that data must be averaged in each RAM location before it is sent. This might also be an issue because of the way it is stored. An idea I had was inspired by the AMP video series from 'wickywaka', I would have one CPU core running the Ubuntu OS with 244Mb of RAM and the other CPU core running bare metal, doing the averaging operations and possibly depositing the averaged result into another area of RAM ready to be sent immediately to the c++ client. (I have already partitioned the RAM). Another thing I had a think about was a Microblaze processor, controlling the RAM operation, but there is already a lot of questions.

I have had a google of this but the results and technical papers have been quite overwhelming, I would first like to know if I am going in the right direction and what similar solutions there are out there?

Best Regards, Renegade

User avatar
renegade264
Posts: 15
Joined: Mon Apr 08, 2019 1:08 pm

Re: Streaming into different areas of RAM Vivado

Post by renegade264 » Mon Mar 30, 2020 11:54 am

Well actually I have solved a part of my question, I could do the averaging in Vivado by continuously adding to values in BRAM and then dividing them by the number of frames. If I am not mistaken, this maybe what Pavel's AXI4-Stream Averager IP does or Anton's variation, I am looking into it.

But I am still interested to know if anyone has experimented with multiple streams feeding into the on board DDR3 RAM. OR if anyone has done any AMP related projects (not just hello world), which utilises the RAM, because after looking at the hello world code it feels like it would be incredibly complex. Documentation and information about how to do projects with the DDR3 RAM seem quite sparse, but I would like to get more insight to understand the limitations. I also know that the Zynq7010 is used in some modern oscilloscopes at 1GSPS +, I therefore do not have doubt of its power.

Also has anyone had success using Vitis with the Zynq7010/20 directly on the Red Pitaya?

Regards, Ren

Post Reply
jadalnie klasyczne ekskluzywne meble wypoczynkowe do salonu ekskluzywne meble tapicerowane ekskluzywne meble do sypialni ekskluzywne meble włoskie

Who is online

Users browsing this forum: No registered users and 24 guests