README.md

    nand2tetris-projects

    Данный репозиторий содержит мои реализации проектов из книги “The Elements of Computing Systems” за авторством Noam Nisan и Shimon Schocken. Данная книга является по сути учебником по курсу “От NAND до Тетриса” от этих же авторов. Все работы сопровождаются учебным программным обеспечением, которое можно найти на сайте курса “От NAND до Тетриса”.

    Все проекты разбиты по папкам. В папках содержится только саму реализацию. Файлов тестов и сравнений учебных программ не добавлялось, их можно найти на сайте курса “От NAND до Тетриса”.

    О курсе “От NAND до Тетриса”

    Данный курс дает представление о том, как устроена аппаратная часть компьютера, путем создания своего собственного компьютера (аппратной платформы) под названием Hack, а также как устроена система трансляции программного кода языков высокого уровня в двоичный код, путем создания собственного ООП языка Jack. Таким образом, курс поделен на две независимых друг от друга частей: аппаратной и программной.

    Аппаратная часть дает представление об устройстве компьютера, начиная с NAND логического вентиля и до реализации системы с процессором, ОЗУ и ПЗУ. Все микросхемы проектируются программно, на языке HDL. Тем не менее схематические обозначения элементов приводятся в книге.

    Программная часть дает представление о том, как программный код языков высокого уровня транслируются в двоичный код, понятный процессору. Здесь сначала реализуется ассемблер, затем виртуальная машина, затем компилятор.

    Проекты

    1. Булева логика

    В этом проекте необходимо реализовать базовые логические вентили на языке HDL. При этом базовым элементом для реализации вентилей используется элемент NAND (И-НЕ), его реализовывать не нужно. Элементы для реализации:

    1. NOT (НЕ)
    2. AND (И)
    3. OR (ИЛИ)
    4. XOR (Исключающее ИЛИ)
    5. MUX (Мультиплексор)
    6. DMUX (Демультиплексор)
    7. NOT16 (16-битный НЕ)
    8. AND16 (16-битный И)
    9. OR16 (16-битный ИЛИ)
    10. MUX16 (16-битный мультиплексор)
    11. OR8WAY (ИЛИ на 8 входов)
    12. MUX4WAY16 (16-битный мультиплексор на 4 входа)
    13. MUX8WAY16 (16-битный мультиплексор на 8 входов)
    14. DMUX4WAY (Демультиплексор на 4 входа)
    15. DMUX8WAY (Демультиплексор на 8 входов)

    2. Булева арифметика

    Просто наличие базовых вентилей недостаточно, чтобы собрать компьютер. Необходимо на их основе собрать такие элементы, которые уже реализуют булеву арифметику. Используя элементы из прошлого проекта, необходимо реализовать следующие элементы:

    1. HalfAdder (полусумматор)
    2. FullAdder (полный сумматор)
    3. Add16 (сумматор 16-битных чисел)
    4. Inc16 (16-битный Инкрементор)
    5. ALU (АЛУ, арифметико-логическое устройство)

    3. Память

    В данном проекте строится микросхема оперативной памяти, регистры и счетчик. Так как это уже элементы, которые хранят в себе данные, то базовым элементом для построения данных схем является DFF (по сути триггер). На базе этого элемента и предыдущих нужно собрать следующие элементы:

    1. Bit (Бит, хранит 0 или 1)
    2. Register (Регистр памяти 16 бит)
    3. RAM8 (Память на 8 регистров)
    4. RAM64 (Память на 64 регистра)
    5. RAM512 (Память на 512 регистров)
    6. RAM4K (Память на 4000 регистров)
    7. RAM16K (Память на 16000 регистров)
    8. PC (16-битный счетчик)

    4. Машинный язык

    В данном проекте нас знакомят с машинным кодом данного компьютера Hack. Все что нужно сделать, это реализовать на машинных кодах операцию умножения.

    5. Компьютерная архитектура

    В данном проекте завершается создания аппаратной части компьютера. В данном проекте необходимо реализовать следующие элементы:

    1. Memory (память ОЗУ, оперативная память)
    2. CPU (ЦПУ, процессор)
    3. Computer (Непосредственно сам компьютер, типа плата)

    Также предоствляется базовый элемент ROM, который по задумке хранит программу для выполнения.

    6. Программное обеспечение

    В данном проекте необходимо написать ассемблер для машинного языка из проекта 4 на любом языке высокого уровня. Я реализовал на TypeScript.

    7. Виртуальная машина I: обработка

    В данном проекте необходимо написать базовый траслятор кода виртуальной машины для языка Jack в ассемблер. Я реализовал на TypeScript

    8. Виртуальная машина II: управление

    В данном проекте необходимо дополнить транслятор из проекта 7 реализациями функций и ветвления. Проект полностью основан на проекте 7, то есть проект 7 своего рода резервная копия. Я реализовал на TypeScript. Не доделано!!! Не работает с несколькими файлами. Когда-нибудь поправлю.

    To be continued…

    Описание

    Реализации проектов из книги "The Elements of Computing Systems" за авторством Noam Nisan и Shimon Schocken

    Конвейеры
    0 успешных
    0 с ошибкой