arduFPGA-game, an arduboy/FPGA clone with audio decoder

I come through this connectors from mistake browsing and eating ebay internet band, I see them, look nice they give me a solid base to stick the board using the USB connector and I wanted to give them a shot, of course that they are very expensive for what they are, but if they will have a place in something commercial need to be somewhere to buy them without the board at a cheaper price.

First step after receiving this:

I add the necessary soft IP into the design to generate NTSC composite video signal using two pins on the USB connector, these two pins will be multiplexed with the UART RX/TX pins that use D+ and D- pins on the USB connector.

The NTSC IP is parameterized to generate only one bit color, black & white.

The USB connector function will be selected from the first stage boot-loader pressing the INT button for more than 500mS and at the same time push the button LEFT when is in application running mode.

For those that will want to use the USB connector as UART interface, the NTSC signal will be available from the audio connector, this way will be multiplexed with the audio signal, and will be available pressing INT at least 500mS and pushing RIGHT button when is in application running mode.

In order to generate the composite signal you will need to put two resistors in series, one with 510Ohm value and one with 150Ohm value, the 510Ohm one will be wired to D+ pin of the USB connector and the 150Ohm one will be wired to D- terminal of the USB connector, between resistors will result the composite signal that can be seen on every TV that has a composite video in.

The image will be displayed on both screens, on the onboard display and on the TV, at this moment the TV image on the digital ones is a little bit trembling ( On XILINX platform the display is perfectly clean ), I do not know how is displayed on analog TV’s.

With the emulated SSD1306 IP and the NTSC IP the FPGA is at ~91% LUT resource utilization, including a fully functional UART interface that is not used by the games.

The result:

I use the same NTSC IP that @uXe use with some little changes.


A: Bang up job!
B: I need to find that usb connector, I have an idea for an Arduboy dock!
C: How are you making the RX/TX and D+/D- connection? Are you using any resistors or diodes?

A: :beers:
B:, ( a little bit expensive, but … )
C: Connections are direct, I do not use protection resistors, I chosen to relay only on the internal diodes for protection, this way they will have the maximum speed, the additional protection & impedance match can be implemented in the expansion board side , the USB connector does not allow the reverse insertion or pin connector misalignment, and at insertion the ground and VCC touch first and after that the data and ID pins make contact ( the design as it is has RX pin wired to D- and TX wired to D+, but can be changed from design or eventually selected from buttons in application running mode ).

When working with FPGA’s the application’s debug with a minimum resource usage can be quite a challenge.

For those that will need a debugger for arduFPGA, a skeleton debugger application has been committed to:

At this moment supports only partial and whole read of FLASH, RAM and EEPROM memory, at the final stage will be able to write/read whole memory’s and write/read chunks of memory, enabling the ability to control all internal IO’s thru UART interface and poll chunks of memory for easy debug and writing applications.

When debug unit in the first stage boot-loader is enabled is mandatory for the user application not to use this interface because the debugger will fight with the user application to catch received characters :crazy_face: , exception is the situation when debugger will have his own separate UART interface implemented in the design.


There I add a debug tool for easy writing/reading and debugging:

This tool is a command line tool that can be used in a terminal or directly as external tool under Atmel Studio and Arduino IDE.

The GUI debugger from above will use this tool to communicate with arduFPGA design.

These applications are written in Qt C++ on Windows for easy port for other platforms.


1 Like