- Electronics
- Xilinx
XilVGA - Introduction
The Spartan 3E development kit comes with a VGA interface - albeit a 3-bit per pixel (RGB) interface. I was considering using that for a custom dashboard for my Aeon (using a standard automotive LCD display), but it's not really enough colours for my liking.
Other people have modified their boards to produce a 12bpp interface (by sacrificing some of the I/O pins on the Hirose FX2 connector), but I don't want to do that, because it would mean that the dev kit would basically be dedicated (although I do have some FX2 connectors, and I could make a breakout board).
The other issue is that the dev kit is quite expensive, and has a lot of stuff I don't need (which means it's big, and would need to find a bigger hiding place).
So, I decided to have a go at making my own. In addition, I wanted to look at the Spartan 3A devices - these are better (in some respects) to the 3E in that they don't need the 2.5V supply, which means it can run quite happily off 3.3V and 1.8V. The only downside is that the 144 pin version is only available in the smallest CLB count, so if I need more pins, then I may need to go to either 208-pins, or switch back to the 3E.
I've got a fair amount of experience in how memory is used for video - predominantly with the Acorn machines, although I have seen the hardware for other systems.
I would've loved to have used the VRAM that the RiscPC has, but I've not found a good supplier. The great thing about it is that it's inherrantly dual-channel, so I wouldn't need to multiplex the writing of the display datawith the reading of it.
DDR SDRAM is probably the next best one to use, although I've got no experience with DDR (the 3E dev kit does have some on it). Xilinx do make available some IP cores for DDR memory which would help. I'm not sure about burst sizes and creating multi-channel accessing to the memory.
SDRAM is a possibility if I wanted it to be more open (there's a good OpenCores project that allows multiple channels over the same SDRAM memory).
So, for the first version, I'm using SRAM - 10ns speed, 4MBit. The downsides to SRAM is that it doesn't multiplex the address lines (so you need more I/O pins), and it's expensive for the memory size.
I made an order through DigiKey (since a lot of the bits aren't available from Farnell or RS), and included some SDRAM as well as the SRAM (and FPGAs).
Specifications
The memory should allow me to run at 100MHz frame rate, although I'm only aiming for 50MHz to allow 800x600 resolution (the display will use 480K out of the 512K for the memory - I could've bought a larger memory, but the cost starts to go quite a bit higher).
It will have an 8bpp memory, although it'll have a 9bpp palette (which will be held in BRAM).
I'm using the XC3S200A device for the prototype - that will allow me to gauge whether I can get away with the XC3S50A for the SDRAM version (which will be 16bpp), or if I need to look at the XCS250E instead (they'll need to be 144 pin).