side-projects

More frequently updated list of experiments.

Parallel FFT on FPGA

Last Updated: Aug 2, 2024

I managed to get 1024-pt FFT to work in simulation, going to try and implement a spectrogram module and also a DWT streaming model (they're more amenable to streaming, anyways). Going to write a blog post on this!

Update: May 29, 2024

I revised how discrete fourier transforms work, but I'm still struggling a bit on how you reduce the number of computations to make it a fast fourier transform.

FPGA Blinker

Last Updated: May 29, 2024

github repo ↗

Followed this tutorial to get set up and familiar with the ZYNQ 7200 platform. My set up is a bit wack, because I use a MacBook but I couldn't get Vivado to run through an emulation layer and using a virtual machine wouldn't have been feasible. So I VNC into my Windows laptop (which is pretty banged up physically but is still fast) to run Vivado and export bitstreams which I then export to my Macbook (because the ports on my Windows machine are unusable).

Doing the PWM challenge mentioned was a bit hard because I was overcomplicating things and running into timing issues. Eventually realized I could simplify logic since I was only varying duty cycle between 10% and 100% in increments of 10. Also, writing the logic to match a period of 8ns was too short and made no sense, so I decided to run the clock divider separately, and feed in the input to the PWM module.

Effect is a bit subtle, but you can see how LD3 goes from being lit sparsley over a duty cycle to almost completely over a duty cycle; reducing playback speed to 0.25x helps a lot.

Also, I've learnt that LLMs are counter-productive when working at a hardware level lower than baremetal C (at least for me).