I bit of a tradition for me with FPGA design is to get a VGA output running. It's a more complicated project than a blinky while still providing a good starting point. It's also a good way to familiarize oneself with the core of a platform. Sadly I did run into some issues with this on the PIC; however, all the better for the learning opportunity.
Setting up the project was simply a matter of hooking the PIC16F13145 up to a VGA PMOD to start writing code to output to the display.
The Simply Bodged together setup with a Curiosity Nano Hooked up via a PMOD to a VGA display.
Unfortunately due to some timing issues the resolution is currently not being set correct. Essentially I had to use some fairly significant space saving tricks to get the hsync generation working inside the CLB but I was unable to get both working cleanly at this point. https://youtube.com/shorts/68WcddeTDKE?si=yDMf8H9BiFSFz0qq
Some Actual Output
https://youtube.com/shorts/3nBcGq1u61I
So some actual video output (Sorry for the video not rendering properly for some reason the markdown system doesn't want to render the videos). Using an adafruit monitor and tweaking some of the values to get more accurate timings I see. I can draw horizontal lines!
So why am I having an issue drawing lines that aren't perfectly horizontal. Well because for some reason my execution loop is taking far longer than it should. I suspect that this is a me not configuring the clock speeds correctly as although I'm not being super careful with the clock by clock configuration I should be getting ~ 1.5 cycles per pixel which means that I should without care be getting closer to 100 pixels horizontally. Now the debate becomes what's the best way to output data rapidly to the pins. I've already used most of the CLB blocks in generating the hsync signal. What's the best way to go further.
Work to Do
So I have an output. It's just not as clean as I'd have liked. My current thought going forward I'll try and design a system that uses a proper 25Mhz clock so that things divide more cleanly. My hope would be to get to the point where I can draw text onto the display in an abstracted manner while trying to minimize the CPU usage.