a "first stab" at real-time image processing in hardware
I got pretty far into this project before the end of the year, but I had to restart somewhat. With the classic SPI ILI9341 display board, I was able to display an image on the screen at 15FPS. (The image was blue, but--heck, that was fixable with a few more hours of debugging.)
Sadly, driving an image over to the display at 15FPS was pushing the limits of the SPI interface. Pushing an image onto the display over an SPI interface at 15 FPS required an SPI transfer speed of 75 MHz. While I can synthesize a PLL on the FPGA to give me a clock capable of that speed, the SPI interface in the ILI9341 just can't handle that rate of transfer.
Luckily, the ILI9341 chip supports multiple interfaces: SPI, and 8080 Parallel variants. By transferring 8 bits at once, I can reduce the overall clock speed and still display images at 30 FPS. WIth an SPI driver already written and working, I abandoned that approach and wrote an 8080 parallel interface driver instead.
To access the parallel port, I needed a different breakout board. Luckily, Adafruit sells one. I had a couple of bugs along the way, but this time the worst ones were actually in my wiring (forgot to tie the RD line HIGH) and not in my SystemVerilog code. The waveforms look very pretty on the logic analyzer. In case you'd like to try it out, it's on the Gits under ILI9341_MCU_Parallel_Ctrl in the master branch.