Using LogicTools with more data

Dear support,

I am having some issues in both generating and recieving signals using the LogicTools’ pattern generator. I am trying to send an image over laser communications using the PYNQ z1, and I am able to convert this image to bits. I have found that typical image sizes are upwards of 50,000 bytes in size, which would be ok to send using the overlay since it works in the MHz frequency range. The current issue is simply that I am not able to put in the whole frame into the pattern generator (both in the sense that I cannot run the analyzer for that many bits, and that I cannot send that big of a signal). From what I have found, the pattern generator is capped at ~64,000 bits, which is obviously smaller than the frame.

The current solution is to break up the frame, and send the frame in chunks. This however adds a lot of overhead as actually setting up this overlay can take some time. There are also timing issues with this, which I am currently unable to solve. What do you think would be the best solution here? I am not experienced in creating my own overlays, which is why I have not attempted it. Would that be worth investigating for my use case?


There would be some effort to modify the design to increase the about of data you can use as the logictools design is a little complicated and there are lots of dependencies.

If you can manage breaking your data into chunks, there is an experimental feature in the PYNQ v2.6.2 branch that allows you to update the Pattern Generator with a numerical array (rather than regenerating a WaveDrom pattern and going through reset() → setup() → run())
(Note this isn’t in the main PYNQ image yet.)
See here:

This would allow you to send frames faster.

You woudl do you setup() to configure the output pins. Supply a wavedrom pattern as you currently do, but you can overwrite this immediately, so this can be a “dummy” pattern.
You can then run(), update_pattern() in a loop.