VGA1306 (VGA-out for DIY Arduboys implemented on an FPGA!)

This is no different than the real OLED display. You write to its internal RAM buffer any time you wish. The display is constantly refreshed by the controller at it’s own independent rate. (I think it’s about 150 FPS.)

…and at the opposite extreme, here it is on our 42" TV! :smiley:


How long until you’ve got the HDMI version working? :smiley:



1 Like

…just finished some testing with the Luma.OLED Python library on a Raspberry Pi (Happy π Day!) to be certain the VGA1306 will work with the ZeroPhone before I got @CRImier’s hopes up! And it works brilliantly:


@uXe Don’t have a blog of my projects, too busy jumping between projects! It’s something I want to do though. Here’s about as far as I got with what I had on hand.

I kinda like the idea of keeping it portable, but just having a nicer screen. I haven’t seen a screen that supports 2 bits per pixel, or really any dot clock based display that isn’t a TFT. All the graphic STN displays I see are strictly monochrome with 4 or 8 bit interfaces with built in controllers.

I bought one of these cheapo boards.
It’s just a Cyclone IV with a VGA and PS2 port essentially. It doesn’t have a lot of free pins due to the VGA port (16-bits is kinda more than you need for this kind of board!) and the LED display (which is another 8 or so pins - might mod it to be serial) but it seems to be a pretty good board for the price. I figured I’d get a DE0 CV or something like that if I decided to keep going with FPGAs. Plus It comes with a USB Blaster (which is basically just a PIC chip, but whatever) so I can get an even more stripped down board if I want.

Maybe you could make a few of your boards up and throw them up on (After selling me one, lol).

Looks like you got tantalisingly close with that 4-bit per clock LCD panel - thanks for the photo! :slight_smile:

The VGA1306 code should work on that FPGA board you got - looking at a datasheet, the EP4CE6 definitely beats the iCE40HX1K that I used in terms of specs. Do you have a toolchain / IDE setup for it? And can you use Verilog (as opposed to VHDL)? Should just be a matter of remapping pins, and generating the 25MHz clock…

If you want a ready-made solution, there are some options available in BennVenn’s shop (but they are all closed-source, and looks like they are all out-of-stock - possibly discontinued):

…may also need a level shifter to safely use the GameBoy’s 5V-level signals, if there is not one on that board?

Have been playing with the with the SSD1306 Linux framebuffer driver on the Pi, at @CRImier’s suggestion:

…required a variation to the FPGA code though, because the FBTFT device uses the ‘vertical addressing’ mode of the SSD1306.

1 Like

That looks awesome! Quick question - what video player did you use for this video? Sorry for the offtopic.

mplayer - as per the wiki:

I love the DMG Entertainment System. I’d totally get it if he had it available again. The porchie is what got me looking into FPGAs seriously. Unfortunately, the dev board I bought was maxed out for IO. :frowning: Between the 16 bits + H + V for VGA, the 4x 7-seg displays and the SRAM, there are basically no ports left. Only the VGA port is exposed to the header, which I’d use, but I think that them being connected to the VGA port via the R-2R makes that impossible as wired. I may desolder the 2 LSBs for each color channel. I don’t need 16 bit color. I might just remove all the ladders and use an external VGA interface. For now I think I’ll just hijack the 7seg or the push buttons for inputs.

I got Quartus installed and a simple blinky program running on the board, that’s about as far as I was able to get this weekend. Yeah, Verilog. Still trying to get the ins and outs. It took watching a few tutorial videos to even program the thing. I haven’t gotten to actually saving the program to flash though, so it gets wiped each time the device is reset (which is actually pretty cool).

There are I/O available on that 26-pin header though?

PM me an E-Mail address if you like, and we can work on it together?

@uXe The forum doesn’t seem to want to let me contact you. :thinking: I must be too new to PM you?

I’ll PM you then :slight_smile:

…after some discussion with @filmote have refactored the FPGA code for 5x scaling of the 128x64 frame = 640x320! (was previously scaled 4x to 512x256 and centered):

Also happy to report we got @Mpiazza’s eBay board working :slight_smile:


Looks great! I can’t wait to play with this one …


I’ve cleaned up the wire from the Gameboy, it turns out that the 6 pin header on the CPU board is D0-1 and Clk, with the other 3 being ground. I isolated one of the grounds and made it vsync. I tossed in hsync, too, just in case.
I know I’m off topic, but I wanted to share.

Thanks again, @uXe!


Is it possible to use the Numato Labs’ Elbert V2 board (

It’s based on Spartan XC3S50A, has on board VGA connector and stereo audio out, among other peripherals. I got it several years ago, but being a total newbie to FPGA just done some simple tutorials, and since then looking into what to use it for. Your project looks as a perfect application, but I’ll need your community help and guidance on how to implement it, if at all possible! Thank you very much in advance!

Looking at the specs it certainly should be possible. I think you’d be better off starting a thread on the Numato community though:

You will also need a level-shifter if whatever you are planning to interface with does not have 3.3V I/O? I do not have any experience with the toolchain for that board, but I can try to follow along and help if you start a new thread over there…

They have an example for VGA but it is written in VHDL, and my code is written in Verilog:

1 Like