Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course)

Product type
Logo Coursera (CC)
Provider rating: starstarstarstar_halfstar_border 7.2 Coursera (CC) has an average rating of 7.2 (out of 6 reviews)

Need more information? Get more details on the site of the provider.

Description

When you enroll for courses through Coursera you get to choose for a paid plan or for a free plan

  • Free plan: No certicification and/or audit only. You will have access to all course materials except graded items.
  • Paid plan: Commit to earning a Certificate—it's a trusted, shareable way to showcase your new skills.

About this course: What you’ll achieve: In this project-centered course* you will build a modern computer system, from the ground up. We’ll divide this fascinating journey into six hands-on projects that will take you from constructing elementary logic gates all the way through creating a fully functioning general purpose computer. In the process, you will learn - in the most direct and constructive way - how computers work, and how they are designed. What you’ll need: This is a self-contained course: all the knowledge necessary to succeed in the course and build the computer system will be given as part of the learning experience. Therefore, we assume no previous computer science or en…

Read the complete description

Frequently asked questions

There are no frequently asked questions yet. If you have any more questions or need help, contact our customer service.

Didn't find what you were looking for? See also: Computer Hardware, Computer Science, Science, Python, and Software / System Engineering.

When you enroll for courses through Coursera you get to choose for a paid plan or for a free plan

  • Free plan: No certicification and/or audit only. You will have access to all course materials except graded items.
  • Paid plan: Commit to earning a Certificate—it's a trusted, shareable way to showcase your new skills.

About this course: What you’ll achieve: In this project-centered course* you will build a modern computer system, from the ground up. We’ll divide this fascinating journey into six hands-on projects that will take you from constructing elementary logic gates all the way through creating a fully functioning general purpose computer. In the process, you will learn - in the most direct and constructive way - how computers work, and how they are designed. What you’ll need: This is a self-contained course: all the knowledge necessary to succeed in the course and build the computer system will be given as part of the learning experience. Therefore, we assume no previous computer science or engineering knowledge, and all learners are welcome aboard. You will need no physical materials, since you will build the computer on your own PC, using a software-based hardware simulator, just like real computers are designed by computer engineers in the field. The hardware simulator, as well as other software tools, will be supplied freely after you enroll in the course. Course format: The course consists of six modules, each comprising a series of video lectures, and a project. You will need about 2-3 hours to watch each module's lectures, and about 5-10 hours to complete each one of the six projects. The course can be completed in six weeks, but you are welcome to take it at your own pace. You can watch a TED talk about this course by Googling "nand2tetris TED talk". *About Project-Centered Courses: Project-centered courses are designed to help you complete a personally meaningful real-world project, with your instructor and a community of learners with similar goals providing guidance and suggestions along the way. By actively applying new concepts as you learn, you’ll master the course content more efficiently; you’ll also get a head start on using the skills you gain to make positive changes in your life and career. When you complete the course, you’ll have a finished project that you’ll be proud to use and share.

Created by:  Hebrew University of Jerusalem
  • Taught by:  Shimon Schocken, Professor

    Computer Science
  • Taught by:  Noam Nisan, Professor

    Computer Science and Engineering
Language English How To Pass Pass all graded assignments to complete the course. User Ratings 4.9 stars Average User Rating 4.9See what learners said Coursework

Each course is like an interactive textbook, featuring pre-recorded videos, quizzes and projects.

Help from your peers

Connect with thousands of other learners and debate ideas, discuss course material, and get help mastering concepts.

Certificates

Earn official recognition for your work, and share your success with friends, colleagues, and employers.

Hebrew University of Jerusalem Ranked among the top academic and research institutions worldwide, the Hebrew University of Jerusalem is Israel's leading university and premier research institution. Serving 23,000 students from 70 countries, the Hebrew University produces a third of Israel’s civilian research and is ranked 12th worldwide in biotechnology patent filings and commercial development. The Hebrew University was founded in 1918 by visionaries including Albert Einstein, Sigmund Freud, Martin Buber and Chaim Weizmann. It is located on three campuses in Jerusalem and a fourth in Rehovot. Visit the website at http://new.huji.ac.il/en. Join our online learners community at https://www.facebook.com/groups/hujimooc/.

Syllabus


WEEK 1


Introduction
Course introduction and overview, the roles of abstraction and implementation in systems design, the road ahead.


5 videos, 1 reading expand


  1. Reading: Module 0: Introduction Roadmap
  2. Video: Unit 0.0: Introduction
  3. Video: Unit 0.1: The Road Ahead
  4. Video: Unit 0.2: From Nand to Hack
  5. Video: Unit 0.3: From Hack to Tetris
  6. Video: Unit 0.4: Project 0 Overview
  7. Ungraded Programming: Project 0


Boolean Functions and Gate Logic



We will start with a brief introduction of Boolean algebra, and learn how Boolean functions can be physically implemented using logic gates. We will then learn how to specify gates and chips using a Hardware Description Language (HDL), and how to simulate the behaviour of the resulting chip specifications using a hardware simulator. This background will set the stage for Project 1, in which you will build, simulate, and test 15 elementary logic gates. The chipset that you will build this module will be later used to construct the computer's Arithmetic Logic Unit (ALU) and memory system. This will be done in modules 2 and 3, respectively.


8 videos, 1 reading expand


  1. Reading: Module 1: Boolean Functions and Gate Logic Roadmap
  2. Video: Unit 1.1: Boolean Logic
  3. Video: Unit 1.2: Boolean Functions Synthesis
  4. Video: Unit 1.3: Logic Gates
  5. Video: Unit 1.4: Hardware Description Language
  6. Video: Unit 1.5: Hardware Simulation
  7. Video: Unit 1.6: Multi-Bit Buses
  8. Video: Unit 1.7: Project 1 Overview
  9. Video: Unit 1.8: Perspectives

Graded: Project 1

General Course Information
General Course Information


1 video, 3 readings expand


  1. Reading: Course Overview
  2. Reading: Textbook
  3. Reading: FAQ
  4. Video: Promo Video


WEEK 2


Boolean Arithmetic and the ALU



Using the chipset that we've built in the previous module, we will now proceed to build a family of adders -- chips designed to add numbers. We will then take a big step forward and build an Arithmetic Logic Unit. The ALU, which is designed to perform a whole set of arithmetic and logical operations, is the computer's calculating brain. Later in the course we will use this ALU as the centerpiece chip from which we will build the computer's Central Processing Unit, or CPU. Since all these chips operate on binary numbers (0's and 1's), we will start this module with a general overview of binary arithmetic, and only then delve into building the ALU.


6 videos, 1 reading expand


  1. Reading: Module 2: Boolean Arithmetic and the ALU Roadmap
  2. Video: Unit 2.1: Binary Numbers
  3. Video: Unit 2.2: Binary Addition
  4. Video: Unit 2.3: Negative Numbers
  5. Video: Unit 2.4: Arithmetic Logic Unit
  6. Video: Unit 2.5: Project 2 Overview
  7. Video: Unit 2.6: Perspectives

Graded: Project 2

WEEK 3


Memory



Having built the computer's ALU, this module we turn to building the computer's main memory unit, also known as Random Access Memory, or RAM. This will be done gradually, going bottom-up from elementary flip-flop gates to one-bit registers to n-bit registers to a family of RAM chips. Unlike the computer's processing chips, which are based on combinational logic, the computer's memory logic requires a clock-based sequential logic. We will start with an overview of this theoretical background, and then move on to build our memory chipset.


6 videos, 1 reading expand


  1. Reading: Module 3: Memory Roadmap
  2. Video: Unit 3.1: Sequential Logic
  3. Video: Unit 3.2: Flip Flops
  4. Video: Unit 3.3: Memory Units
  5. Video: Unit 3.4: Counters
  6. Video: Unit 3.5: Project 3 Overview
  7. Video: Unit 3.6: Perspectives

Graded: Project 3

WEEK 4


Machine Language



A critically important aspect of building a new computer system is designing the low-level machine language, or instruction set, with which the computer can be instructed to do various things. As it turns out, this can be done before the computer itself is actually built. For example, we can write a Java program that emulates the yet-to-be-built computer, and then use it to emulate the execution of programs written in the new machine language. Such experiments can give us a good appreciation of the bare bone "look and feel" of the new computer, and lead to decisions that may well change and improve both the hardware and the language designs. Taking a similar approach, in this module we assume that the Hack computer and machine language have been built, and write some low-level programs using the Hack machine language. We will then use a supplied CPU Emulator (a computer program) to test and execute our programs. This experience will give you a taste of low-level programming, as well as a solid hands-on overview of the Hack computer platform.


10 videos, 1 reading expand


  1. Reading: Module 4: Machine Language Roadmap
  2. Video: Unit 4.1: Machine Languages: Overview
  3. Video: Unit 4.2: Machine Languages: Elements
  4. Video: Unit 4.3: The Hack Computer and Machine Language
  5. Video: Unit 4.4: Hack Language Specification
  6. Video: Unit 4.5: Input / Output
  7. Video: Unit 4.6: Hack Programming, Part 1
  8. Video: Unit 4.7: Hack Programming, Part 2
  9. Video: Unit 4.8: Hack Programming, Part 3
  10. Video: Unit 4.9: Project 4 Overview
  11. Video: Unit 4.10: Perspectives

Graded: Project 4

WEEK 5


Computer Architecture



Let's recap the last four modules: we've built some elementary logic gates (module 1), and then used them to build an ALU (module 2) and a RAM (module 3). We then played with low-level programming (module 4), assuming that the overall computer is actually available. In this module we assemble all these building blocks into a general-purpose 16-bit computer called Hack. We will start by building the Hack Central Processing Unit (CPU), and we will then integrate the CPU with the RAM, creating a full-blown computer system capable of executing programs written in the Hack machine language.


6 videos, 1 reading expand


  1. Reading: Module 5: Computer Architecture Roadmap
  2. Video: Unit 5.1: Von Neumann Architechture
  3. Video: Unit 5.2: The Fetch-Execute Cycle
  4. Video: Unit 5.3: Central Processing Unit
  5. Video: Unit 5.4: The Hack Computer
  6. Video: Unit 5.5: Project 5 Overview
  7. Video: Unit 5.6: Perspectives

Graded: Project 5

WEEK 6


Assembler



Every computer has a binary machine language, in which instructions are written as series of 0's and 1's, and a symbolic machine language, also known as assembly language, in which instructions are expressed using human-friendly mnemonics. Both languages do exactly the same thing, and are completely equivalent. But, writing programs in assembly is far easier and safer then writing in binary. In order to enjoy this luxury, someone has to translate our symbolic programs into binary code that can execute as-is on the target computer. This translation service is done by an agent called assembler. The assembler can be either a person who carries out the translation manually, or a computer program that automates the process. In this module and final project in the course we learn how to build an assembler. In particular, we'll develop the capability of translating symbolic Hack programs into binary code that can be executed as-is on the Hack platform. Each one of you can choose to accomplish this feat in two different ways: you can either implement an assembler using a high-level language, or you can simulate the assembler's operation using paper and pencil. In both cases we give detailed guidelines about how to carry out your work.


8 videos, 1 reading expand


  1. Reading: Module 6: Assembler Roadmap
  2. Video: Unit 6.1: Assembly Languages and Assemblers
  3. Video: Unit 6.2: The Hack Assembly Language
  4. Video: Unit 6.3: The Assembly Process - Handling Instructions
  5. Video: Unit 6.4: The Assembly Process - Handling Symbols
  6. Video: Unit 6.5: Developing a Hack Assembler
  7. Video: Unit 6.6: Project 6 Overview: Programming Option
  8. Video: Unit 6.6B: Project 6 Overview: Without Programming
  9. Video: Unit 6.7: Perspectives

Graded: Project 6
There are no reviews yet.

Share your review

Do you have experience with this course? Submit your review and help other people make the right choice. As a thank you for your effort we will donate $1.- to Stichting Edukans.

There are no frequently asked questions yet. If you have any more questions or need help, contact our customer service.