Imagine that you have just taken a 1 term course in Electronic Engineering and Computer Science and you are now facing the end of term exam:
Part 1 – Digital Logic.
1a. Using transistors, diodes and resistors, show how a 2-input NAND gate can be constructed. Show how the 2-inputs can be extended to allow for additional inputs.
1b. Using standard logic symbols show how the following gates may be synthesised from the NAND component. AND, OR, XOR, NOR
2a. Using conventional logic symbols, show how a half adder my be created from gates devised in 1b. What is the minimum gate count?
2b. Show in a digram, how the half adder can be extended to a full adder, allowing for any additional external gatess that may be required.
3a. Show the schematic for a 2:1 multiplexer using 2 input NAND gates
3b. Show how the multiplexer may be extended to 3 input and 4 input. Include the gate count for each of your designs.
4a. A small cpu requires an arithmetical logic unit (ALU) capable of the following operations.
AND, OR, XOR, NOT, ADD, SUBTRACT
Produce a block diagram showing how this may be achieved from conventional logic gates. Pay specific attention to the detail of how each operation is selected.
4b. Explain the term “Bitslice” and using the design for the ALU in 4a. show how the logic may be partitioned into a bitslice design.
5a. A logic design requires a clocked D-type Flip Flop (DFF) – show how this may be created from NAND gates. Pay particular attention to the method by which the DFF is loaded and clocked.
5b. A small cpu needs a program counter capable of addressing 64K words of memory. Using the DFF from 5a, and any other external logic – show how this may be achieved.
6a. Using the functional blocks described above, plus external memory such as RAM and/or ROM show how these elements may be interconnected connected to form a simple 16-bit cpu.
6b. Explain the operation of the cpu in terms of the sequence of events required to fetch, decode and execute an instruction from memory.
Now, whilst I studied electronic engineering in the early 1980s, I too would find some of those questions quite a challenge, but as a result of the online course “From NAND to Tetris”, which introduces digital logic and computer systems in a series of heirarchical layers – demystifying each layer in turn. Accompanying the course are a series of course lecture notes, a text book “The Elements of Computer Systems (TECS – available online as pdf) plus hardware and software simulators that will run on any common laptop platform.
Starting from the basic NAND gate the course shows in 6 lectures how to create a complete 16-bit computer from logic “chips” designed using a hardware description language. The computer design, called “Hack” is backed up by a laptop based simulator, and capable of running real code.
With such a structured course, it makes it possible to learn the basics needed to answer the above questions in full in just six weeks of lectures and practical study workshops.
Whilst “NAND to Tetris” is a well structured course and has been designed to allow maximum access and exposure for self-learners to the course materials, the course is based upon an artificially created hardware description language, and a series of test scripts and simulators written in Java. This makes the course viable to the widest audience, who may be of limited resources, but it does not provide hands-on experience of real hardware.
Through my work with myStormmyStorm – the open source FPGA experiment board, I hope to show how “NAND to Tetris” can be used as the basis for a FPGA learning course – using low cost open source FPGA hardware and tools. With the “BlackIce” FPGA board – it will be possible to create a real “Hack” computer – and have the means to connect it to a variety of experiments.
How to introduce Electronics and Computer Science to undergraduate students, makers and hobbyists in a practical “learning by doing” manner, will be the subject of a my forthcoming presentation “Computer Science From the Ground Up” for OSHCamp, at Wuthering Bytes, on Saturday 2nd September.