A couple of buddies and I wanted to see if we had what it takes to make a small video game console from a Nexys-2 FPGA board. We have some experience with C and assembly, but we're not really sure how to get started. Does anyone have any advice or links they'd recommend? Thanks in advance!

Start learning VHDL and be ready to think in ways that neither C nor Assembly have taught you. Be prepared to to diagnose and fix bugs that have to do with signal propagation latency. Be prepared to design a CPU, GPU, and to generate a proper video signal.

After that you get to program it in not assembly, but machine-code -- or you get to write an assembler. When there's a bug in your application, it might not actually be in your application code, it might be a flaw in the code that defines the system. And you won't have a debugger for any of this, so get really used to debugging from memory-dumps.

Its certainly doable -- people have done it. But to say you and your friends have "some C and assembly experience" is basically equivalent to saying you and your friends have a dream and some gumption. Realize that you've got a long, long road ahead of you. This project is on the scale of a thesis project for an Electrical Engineering degree, except without the benefit of 3+ years of said degree program to get you running.

I actually have the exact same board and used it to partially recreate the original Gameboy hardware. It's definitely doable and not that hard if you plan things right. And of course before beginning, I'd recommend doing a few state machines and little cpu cores just to get to know VHDL and make sure you understand how to test, debug, etc. the board.

The single most important thing to plan ahead is timings and freq dividers. I'd go with a 25Mhz vga pixel clock, which gives the standard 640x480 resolution (there's really no other option that makes sense and is compatible with today's displays). 25Mhz is FAST - it's ok for the vga output module which is simple, but you're not gonna be able to drive a cpu or gpu at that frequency (because of fpga logic propagation times). I'd recommend dividing the gpu clock a few times off the main output clock and reducing the gpu resolution considerably (while vga module duplicates lines, etc).

The gpu is really just a state machine, that constantly fetches sprites from shared video memory and feeds lines to vga module. You can add extra bg layers or more sprites, but you will be severely limited by the sprite fetch time.