Getting started with the Nand to Tetris projects

On the Linux cluster

On the Linux cluster, make a local copy of the project framework to your home directory. Open a Terminal and do the following:
mkdir compsys
cd compsys
cp -a /home/davisj/share/cs200a-compsys/projects .

That's it. The projects directory contains a series of folders, numbered 00 through 13, for each of the projects, including an introductory tutorial (00) and a final open-ended project (13).

You can edit the project files using vi, emacs, gedit (Text Editor), Sublime, or other editor of your choice.

You can execute the Nand to Tetris tools using the following commands in the Terminal:

Hardware simulator
CPU emulator
VM emulator

On your own computer

To do the projects on your own computer, follow the instructions on the Nand to Tetris web site to download and install the tools and projects.

Programming language and style

The programming language for the hardware projects is HDL (you will learn this language during the course). The recommended programming language for the software projects is Python. You may also use Java, C++, C#, or Perl. If you want to use another programming language, you must first get the instructor's permission.

Whichever language you use, you are expected to follow common programming conventions and style (documentation, indentation, descriptive variable names, etc.). Messy, unmodular, under-documented, or over-documented works will get point penalties. If you want detailed feedback on your programming style, please come to my office hours or make an appointment to discuss your code in person.


We have worked out a rota of partners for the 12 projects.

What to submit

For each project, you will submit the entire contents of the project directory.

You will also write a short README file addressing the following points: 

If you can't finish the project on time, submit what you've managed to do, and relax. All the projects in this course are highly modular, with incremental test files. Each hardware project consists of many chip modules (*.hdl programs), and each software project consists of many software modules (classes and methods). It is best to treat each project as a modular problem set, and try to work out as many problems as you can. You will get partial credit for partial work.

What if your chip or program is not working? It's not the end of the world. Hand in whatever you did, and explain what works and what doesn't. If you want, you can also supply test files that you developed, to demonstrate working and non-working parts of your project. Instead of trying to hide the problem, be explicit and clear about it. You will get partial credit for your work.

If you just can't let it go, you may invoke the health and wellness policy to obtain an extension and get help with your work.

How to submit

In general, projects will be due at 11 p.m. the night before the date specified on the course schedule.

To submit your work, first create an archive of the project directory. For example, for project 01, you might do the following:

cd compsys/projects
tar cvfz submission-01.tgz 01

The upload the archive file using the course turn-in form. Submit one archive for your entire team representing your joint work on the project.

You will also individually submit a post-project Wrapper as a Google form, linked from the course schedule.

Other assignments

Janet Davis ( with thanks to Noam Nisan and Shimon Schocken

Created January 17, 2016
Last revisedApril 14, 2016, 11:30:58 AM PDT
CC-BY-NC-SA This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.