VGA Videowall


Back around 1990, a videowall with 4x4 monitors could cost £250,000. From the ashes of Memotech, Geoff Boyd created Memotech Computers Ltd., and produced videowalls at 1/10th of the cost. Information about these can be found on Daves site. There are also good photos at Peter Ketzschmars site.

They were controlled by software that I developed. The first version was a CP/M program that ran on an MTX.

The later version was a DOS program that ran on a PC. I still have the source to all the software, and tools to convert between the file formats used.

These programs controlled the videowall hardware by outputting bytes down the centronics port.

Since then, peices of the original videowall black-magic kit have been appearing an making it into peoples collections. But it is difficult and expensive to assemble a complete wall. Also the video format used is the old 15KHz format.

This also makes it difficult to show off the software.

This project

The goal is to create a miniature videowall that is massively cheaper, needs far fewer monitors, and works with a more modern video format. The solution needs to be hardware compatible with the original, in that it is controlled by the same bytes sent over a centronics connection.

My design uses a video capture card to digitise the VGA, and framestores cards to store the digitised data, and output selected parts of it.

The video resolution will be comparable to the original, but the bits per pixel will be lower. I'm not after video perfection here, just the ability to demo the software with live video of recognisable quality.

Video capture card

When I talk about VGA, I am talking about 640x480 at 60Hz. Any form of super VGA is not supported.

The capture card takes in a VGA video signal and uses 3 AD8041 op-amps to convert the 0.0-0.7V VGA to 2.0-3.0V. I used the Designing Gain and Offset in Thirty Seconds Application Report by Texas Instruments to calculate resistor values suitable for the desired transfer function. Note that the design uses a trimmer between two of the resistors, so I can tune the amplication.

The 2.0-3.0V is then fed into 3 AD9057 flash ADC chips to digitise the video signal. Unfortunately these chips are SSOP-20, ie: surface mount.

AD9057s can theoretically produce a new sample at 40MSPS or better, which is better than the 25MHz VGA pixel rate. The actual clocking will come from another board.

There is guidance in the datasheet about placement of decoupling capacitors, the use of ground planes, and separate power supplies for the analog and digital sides of things. I'm not able to follow most of this guidance, so I expect noise in the output. However, although the capture card outputs 8 bits of red, green and blue, for this project, the framestore card(s) will only be able to handle the top 3 bits of each. Its a calculated risk that the noise remains in the lower 5 bits.

There are some 0Ω resistors in the design. This is a trick to get the desired behaviour out of Kicad and Freeroute. These connect the power (as it enters the board) to the the 0V, 5VA and 5V supplies used in the board. This allows me to keep the analog and digital 5V lines apart (which is a recommended best practice when ADCs are involved). Thanks to Mark Kinsley for explaining this to me at Memofest 2018. It also allows me to have thicker tracks between the jack and the ribbon cable (and thus onto other boards). I also put both 0V and 5V over two strands of ribbon cable, in the hope this helps sufficient current reach them.

BOM :-

Part Quantity Source Cost
PCB 2 layer, green, 10cm x 10cm max, 1.6mm HASL 1 iteadstudio $23 / 10 = $2.30
AD8041 op-amp 3 Mouser 3*£5.27 = £15.81
AD9057 flash-ADC 3 Mouser 3*£4.91 = £14.73
8 pin DIP socket 3
VGA DE15 Male connector 1 Digikey £3.38
2KΩ Bournes 3309P-1-202 trimmer potentiometer 3 Farnell or Mouser 3*£0.62 = £1.86
10KΩ resistors 6
8.2KΩ resistors 3
5.6KΩ resistors 3
75Ω resistors 3
0.1uF capacitors 9
17x2 header 1
Barrel Jack, 2.5mm 1 Farnell or Mouser £1.63
Total <£100

Video framestore card

The board is comprised of

I considered using a Mercury Micronova, but its XC3S200A FPGA only has 28KB BRAM and its 512KB SRAM has 10ns access time, for the same $89.

I'll use a CMT to fabricate a 50MHz clock from the 12MHz clock on the Cmod. You have to multiply to get into the MMCM VCO 600-1200MHz frequency range, and then divide. A multiplier of 100 and divisor of 24 will do the trick, or possibly 50 and 12.

The FPGA has many pairs of input pins which can be used as differential pairs, or the +pin may be used as a clockable input. Some are accessible as Cmod pins PIO03, PIO05, PIO36, PIO38, PIO46, PIO47. I use PIO36 as the main clock input.

I also use PIO05 for the centronics STROBE_n. The strobe pulse will be 1.5+/=0.5us, ie: 1-2us. But not all hardware meets these constraints, and I've no idea if an MTX does. I also know that some PC software simply does two successive OUT instructions to cause the strobe pulse, and although this would have met timing constraints with older PCs, with modern fast PCs this could mean a very short pulse. By using a clock capable FPGA input, I can trigger on the edge, however short the pulse is.

Within the FPGA, the BRAM can be arranged 9 bits wide (8+parity), which is handy because I store 3 bits red, 3 bits green and 3 bits blue per pixel. There is theoretically space for 204800 x 9 bit pixels.

A 640x480 frame requires 307200 pixels, which therefore couldn't be stored in BRAM. What's worse, is that I need space to store 2 frames in order to be able to double buffer the video and avoid tearing effects where the frame buffer is being displayed as it is being updated. A 320x240 frame requires 76800 pixels, and 2 frames need 153600, which fits.

Some of the BRAM is used to hold the mapping tables, which are used to map output monitor coordinates to input frame coordinates. This is the mechanism by which different monitors in the wall display a different part of the whole input frame.

The external SRAM is used to support freeze-mode. Whenever data is output to a monitor, a copy is written to SRAM, but if the monitor is frozen, then going forwards that SRAM copy is output instead of from BRAM.

Jumpers exist so that signals generated by the Cmod are routed to the capture card, and back over the centronics cable. If more than one framestore card is connected to the same capture card, only one of them will have these jumpers populated.

BOM :-

Part Quantity Source Cost
PCB 2 layer, green, 10cm x 10cm max, 1.6mm HASL 1 iteadstudio $23 / 10 = $2.30
Cmod A7-35T 1 Digilent or Digi-Key $89 / £67.38
48 pin DIP socket 1 Farnell £0.72
L78L33 regulator 1
0.33uF capacitor 1
0.1uF capacitor 5
74HC4050 level shifters 4
16 pin DIP socket 4
VGA DE15 Female connector 1 Digikey or Mouser £1.01 or £2.02
500Ω (or maybe 470Ω) resistors 3
1KΩ resistors 3
2KΩ (or maybe 2.2KΩ) resistors 3
220Ω resistors 2
17x2 header 1
18x2 header 1
8x1 headers 3
2x1 headers 4
Total <£100

Resources for Working with Cmod A7 :-


This design can be downloaded from

The author of the design and this documentation is Andy Key (email

{{{ Andy