Project 9: Final Project
The purpose of the final project is to give you some experience with design of a complex digital circuit.
Final Project Choices
For your final project you can select any of the following, or do a project of your choice after discussing it with the prof.
- Design a CPU and implement it in VHDL. You may choose an actual CPU architecture or design your own from scratch. If you chose an actual CPU, you can implement a selected subset of the instructions. There are a number of embedded processor designs that may be interesting to emulate, such as the PIC or ARM processor. You could also pick a subset of the Java Virtual Machine.
Implement the Ultimate RISC CPU that has one instruction: subtract and
branch if negative. Implementing the CPU itself is fairly trivial,
although there are a number of design choices to make regarding the
number of registers and types of addressing.
The key part of this project is to implement a simple assembly language that enables you to write programs for the computer in a more typical assembly language style. The assembler would then need to convert each assembly instruction into one or more machine instructions.
Design a circuit that makes use of one or more of the additional
capabilities of the board.
- Accept input from a PS2 mouse.
- Drive a VGA monitor.
- Create sounds using the signal generator and speaker outputs.
- Create a game on the board, one or two-player. Examples of prior projects include: snake, pong, asteroids, connect-4, and tetris.
For this project, you are free to use code from the sample CDs provided with the DE-1 boards, from Altera's web site, or from other sources to build your final project. How you use that code, and what code you use, depends on the goal of your project. For example, if your goal is to make a game, borrow as much code as you want for driving the monitor or getting data from the mouse and focus your efforts on writing your own code for the game logic.
If, on the other hand, you want experience in designing circuits that talk with hardware, write your own driver code based on the documentation. Writing your own VGA driver is a fine final project, but it needs to be your own work.
Likewise, sharing code between groups for basic capabilities like driving the monitor or reading from a mouse is fine. In all cases, you must document your sources in your project report and your code.
No formal extensions for the final project.
Create a wiki page with your writeup.
- Give a brief, but complete problem description.
- Describe the design of your circuit.
- Simulate (optional) and test your circuit (not optional). Include a video or other demonstration of your circuit in action as part of your final project report.
- Please supply a list of people you worked with, including TAs, and professors. Include in that list anyone whose code you may have seen, such as those of friends who have taken the course in a previous semester.
Give your wiki page the label cs232f16project9.
Put your VHDL files and other design documents in your private subdirectory on Courses.