Hi, your situation reminds me of my own experience about video game design that I had last year. You are doing your third year in computer engineering and i suppose that you have an idea what behavioral, structural and RTL means. First, because of the fact that you are alone doing a project of this complexity and on top of that, having a time constraint will not make things easy. The reasonable thing to do is to plan your time, based most probably on a weekly schedule.
When we were doing our nintendo video game, we spent 1/3 of the time searching for the right and reliable information, 1/3 of the time debugging the system and the remaining 1/3 of the time, doing documentation. At the end, it was so complex, that we spent like a couple of weeks not sleeping (or having very little sleep). We were 7 doing the project. OK, 1/3 of the time was spent looking around, mostly on the net for the appropriate information, because for us, nobody had did it before (and we didnt want to plagiate anything!) and also, documention for it was erronous and scarce. It was really challenging to find the right source of information, that could be trusted. Once this was done, the task of writting down CLEAR AND CONSISE specification started. It was decided to break (or partitioned) the system in modules (SOC based on modular design XILINX ). This would be appropriate for a team based approach, but in your case, I guess that you should start writting the specs for the most important part of the computer system; the CPU.
CPU is tricky because in 14 weeks, you're gonna need to turn your choice towards an already made and tested free core module. It is tricky because you are going to have to do with specs that have been done by somebody else. OK, here is a clearer explanation. The CPU that you could get on the net would be written so as to "behave operation-wise" like the, say original Z80. It gets very problematic when you have to couple slow memories with those cloned VHDL CPU, cause the timing characteristics (did you take a computer architecture or microprocessor design class??) are not guaranteed to be compatible. Most of the time there is no problem with the interface but that's the weak point in the sysetm at this point. It would be wise to know by heart the difference in timing between the two cpus, (VHDL Off-shelf on the net core, and original Z80). This will save you a lot of time and head-aches! Know what your system consists of, and its weak points and try to find solutions for those. Also, be aware of the fact that if you consider to use on-chip, free-to-use SRAM your system will be synchronous...
Our NES on a chip (INES) had exotic clock frequencies, 5.37MHZ,
3.58MHZ, 1.79MHZ, 60HZ. Now building those clock domains in FPGA technologies can be tideous and challenging. You need to find the right balance and solve the "equation" while using limited resources provided by the spartan 3 chip.
Up to now, I only talked about gathering information, dividing the work and knowing the limitation. The hardest part is still to come. Once all infos about the system is known, you need to focus on coding the system. As said earlier, divide and conquer is one of the most suitable approach for doing such project. At this point you should have your working CPU and some memory unit.
1) CPU
2) Memory unit
--- test the two systems with some basic clock unit
From experience, behavioral test benches are good if you have a really fast computer, but again, if you have a demo FPGA spartan 3 board, why not dump the design right away on the hardware. You might want at this time to double check your pin assignment constrains and if you have any clock constrains.
CPU and memory are simple to test... some bubble sorting algorigthm might provide you with enough proof that your system is indeed working.
The next block that you should focus on is the video system. Write your specifications very clearly. How many colors should it display, what about the resolution. Are you driving a computer/lcd screen or a tv. Tv screens are somewhat easier to work with, because of the fact that it fits naturally the original design. But if you wanna make your design compatible with modern technologies, then you better give this block some attention.
Learn what's a sprite, what's a character, how the screen is organized in tiles, where do you use the 5.38MHZ clock (NTSC system), how to generate hsync and vsync. OK, at this point let me warn you. One of the challenge that we had was to couple the video interface of the Nintendo with something like a SVGA screen or LCD panel. The pacman system was designed to be used with 60HZ TV screen. This was so in our case and we did need to use something called a frame buffer...
The last block that should be approached is the sound unit, if you intend to provide the system with sound. The sound system would ressemble more something like a programmable square wave. That's not bad to design, from description (again clear specification).
Last touchs includes glue logic for memory interfacing and clock generations. Note that the order of the block, starting from
CPU->MEMORY->VIDEO->SOUND is important.
Its hard to test the video and sound without an appropriate CPU. Again success will come iff you have a good schedule.
Dont underestimate your debugging cycle! This is the hardest part of the whole project. Debugging kills and I really advise you to do things methodically. Get yourself a good logic analyzer from the lab (we had a TLA713). Learn how to use it and its nice triggering sequences. And prepare yourself to spend nites infront of it.
This message is getting long, so im gonna cut short here. There's still alot to say about designing something of this magnitude but again, the secret is in
getting the right time table getting the right information + specs getting the right instruments
im pretty much sure ive forgot a couple of other things but if i remember anything, well im just gonna post it here!
good luck with "pacman" and make it successful.
ja