The Elements of Computing  Systems / Nisan & Schocken / www.idc.ac.il/tecs  

Project 5: Computer Architecture

Objective: Build the Hack computer platform, culminating in the top-most Computer chip.

Resources: The only tools needed for this project are the supplied hardware simulator and the test scripts described below.  The computer platform should be implemented in the HDL language specified in appendix A.

Contract: The computer platform that you build should be capable of executing programs written in the Hack machine language, specified in Chapter 4.  Demonstrate this capability by having your Computer chip run the three test programs given below.  

Component testing: We supply test scripts and compare files for unit-testing the Memory and CPU chips in isolation. It’s important to complete the testing of these chips before building the overall Computer chip.

Chips

Build the computer in the following order:

Chip (HDL)

Function

Test script

Compare file

Memory.hdl Entire RAM address space

Memory.tst

Memory.cmp
CPU.hdl The Hack CPU CPU.tst (recommended - requires the usage of the built-in DRegister) CPU.cmp
CPU-external.tst (less thorough but does not require the usage of the built-in DRegister) CPU-external.cmp
Computer.hdl The platform's top-most chip See below See below

Test Programs

A natural way to test the overall Computer chip implementation is to have it execute some sample programs written in the Hack language. In order to run such a test, one can write a test script that loads the Computer chip into the hardware simulator, loads a program from an external text file into its ROM chip, and then runs the clock enough cycles to execute the program. We supply all the files necessary to run three such tests, as follows:

Add.hack: Adds the two constants 2 and 3 and writes the result in RAM[0]
                 Recommended test script (requires the usage of the built-in ARegister, DRegister, PC and RAM16K):
ComputerAdd.tst and ComputerAdd.cmp.
                 Alternative test script (less thorough but only requires the usage of the built-in RAM16K):
ComputerAdd-external.tst and ComputerAdd-external.cmp.

Max.hack: Computes the maximum of RAM[0] and RAM[1] and writes the result in RAM[2].
                 Recommended test script: (requires the usage of the built-in ARegister, DRegister, PC and RAM16K):
ComputerMax.tst and ComputerMax.cmp.
                 Alternative test script: (less thorough but only requires the usage of the built-in RAM16K):
ComputerMax-external.tst and ComputerMax-external.cmp.

Rect.hack:  Draws a rectangle of width 16 pixels and length RAM[0] at the top left of the screen.
                 Recommended test script (requires the usage of the built-in ARegister, DRegister, PC and RAM16K):
ComputerRect.tst and ComputerRect.cmp.  
                 Alternative test scripts (less thorough but does not require the usage of any built-in chips):
ComputerRect-external.tst and ComputerRect-external.cmp.  

Before testing your Computer chip on any one of the above programs, read the relevant .tst file and be sure to understand the instructions given to the simulator. Appendix B may be a useful reference here.

Steps

1. Create a directory named projects/05 on your computer and extract project 05.zip to it (while preserving the directory structure embedded in the zip file).

2. Build the computer in the following order:  

§         Memory: Composed from three chips: RAM16K, Screen, and Keyboard. The Screen and the Keyboard are available as built-in chips and there is no need to build them. Although the RAM16K chip was built in Project 3, we recommend using its built-in version, as it provides a debugging-friendly GUI.

§         CPU: Can be composed according to the proposed implementation given in Figure 5.9, using the ALU and register chips built in Chapters 2 and 3, respectively. We recommend using the built-in versions of these chips, in particular ARegister and DRegister. These chips have exactly the same functionality of the Register chip specified in Chapter 3, plus GUI side effects.

In the course of implementing the CPU, it is allowed (but not necessarily recommended) to specify and build some internal chips of your own. This is up to you. If you choose to create new chips not mentioned in the book, be sure to document and test them carefully before you plug them into the architecture.

§         Instruction Memory: Use the built-in ROM32K chip.

§         Computer: The top-most Computer chip can be composed from the chips mentioned above, using Figure 5.10 as a blueprint.

Tools

The Hardware Simulator: As in Projects 1-3, all the chips in this project (including the topmost Computer chip) can be implemented and tested using the hardware simulator supplied with the book.  Here is a screen shot of testing the Rect.hack program on a Computer chip implementation.

 

 

The Rect program draws a rectangle of width 16 pixels and length RAM[0] at the top left of the screen. Note that the supplied Rect program is correct. Thus, if it does not work properly, it means that the computer platform on which it runs (Computer.hdl and/or some of its lower-level parts) is buggy.