Программа курса

47 уровней от первого провода до FPGA: для каждого — задание, сложность, типичное время и измеримый результат обучения.

1–16

Часть 1 · Базовые схемы

≈ 330 мин · ≈ 5,5 ч

От первого провода и NAND до счётчика команд: вентили, сумматоры, мультиплексор, SR-защёлка, D-триггер, регистр, АЛУ, тактовый генератор.

17–29

Часть 2 · Продвинутая архитектура

≈ 415 мин · ≈ 6,9 ч

Дешифратор команд и финальный Harvard-процессор с ассемблером, затем периферия: переменный шаг PC, двойное чтение ROM, указатели IX, шины и порты ввода-вывода, флаги, «Змейка».

30–43

Часть 3 · Verilog

≈ 360 мин · ≈ 6 ч

Язык описания аппаратуры: примитивы, иерархия модулей, шины, АЛУ, RAM, тракт данных, многофайловые проекты, RTL Viewer и временные диаграммы.

44–47

Часть 4 · Проектирование компьютера

≈ 135 мин · ≈ 2,3 ч

Блок управления, собственная система команд (ISA), Memory-Mapped I/O и экспорт на реальную FPGA Tang Nano 9K.

47

Итого: ≈ 21 ч чистого решения

≈ 1240 мин

≈ 28 уроков по 45 минут чистого решения; с теорией, статьями и разбором — ≈ 40 уроков (30 ч).

Форматы внедрения в школе

Годовой электив

2 урока в неделю по 45 минут — все 47 уровней проходятся за учебный год.

Полугодовой факультатив

4 урока в неделю — полный курс укладывается в полугодие.

Интенсив

5 дней × 6 часов — формат летней школы или профильной смены.

Часть 1 · Базовые схемы · уровни 1–16 · ≈ 330 мин

1

Да будет свет!

Задание: Соедините источник сигнала (Вход) с приёмником (Выход).

●○○ ≈ 5 мин
После уровня: объяснить, что такое сигнал 0/1, входной/выходной пин и провод, и соединить источник с приёмником
2

Отрицание

Задание: Соберите инвертор (NOT) из элемента NAND. Если на входе 1, на выходе 0.

●○○ ≈ 10 мин
После уровня: объяснить, почему NAND с объединёнными входами превращается в NOT (функциональная полнота)
3

Идеальная пара

Задание: Соберите логическое И (AND).

●○○ ≈ 10 мин
После уровня: собрать AND из NAND + NOT и объяснить композицию операций
4

Хотя бы один

Задание: Соберите логическое ИЛИ (OR).

●○○ ≈ 15 мин
После уровня: собрать OR по закону де Моргана и объяснить формулу NOT(NOT A AND NOT B)
5

Строгий выбор

Задание: Соберите исключающее ИЛИ (XOR).

●○○ ≈ 15 мин
После уровня: собрать XOR из базовых вентилей и объяснить его как «контролируемый инвертор»
6

Полусумматор

Задание: Соберите полусумматор (Half Adder).

●●○ ≈ 15 мин
После уровня: объяснить, как сложение двух битов даёт два выхода (Sum, Carry), и собрать полусумматор
7

Сумматор

Задание: Соберите полный сумматор (Full Adder): 3 входа, 2 выхода.

●●○ ≈ 20 мин
После уровня: объяснить перенос между разрядами и собрать полный сумматор
8

8-битный Сумматор

Задание: Соберите 8-битный сумматор ADDER8, используя FullAdder и шины.

●●○ ≈ 25 мин
После уровня: объяснить, что такое шина и байт, и собрать 8-битный сумматор как цепочку переносов
9

Перекрёсток

Задание: Соберите мультиплексор (MUX): выбирает один из двух входных битов.

●●○ ≈ 20 мин
После уровня: объяснить работу мультиплексора как «цифрового переключателя» и его формулу выбора
10

Замыкание

Задание: Соберите SR-защёлку из NOR. Состояние сохраняется при S=0,R=0.

●●○ ≈ 25 мин
После уровня: объяснить, что такое обратная связь и как два NOR образуют SR-защёлку (первую память)
11

Умный запоминатель

Задание: Соберите D-триггер (DFF). Данные запоминаются по фронту Clock.

●●○ ≈ 30 мин
После уровня: объяснить роль фронта тактового сигнала и работу D-триггера master-slave
12

Осязаемая память

Задание: Соберите 8-битный регистр из DFF. Подключите его выход к LED8.

●●● ≈ 30 мин
После уровня: объяснить, как из 8 триггеров собирается байтовый регистр (параллелизм ячеек)
13

Выбор операции

Задание: Постройте селектор операций. BusMUX выбирает результат: ADD, AND или OR на основе OpSelect.

●●● ≈ 30 мин
После уровня: объяснить, как каскад мультиплексоров маршрутизирует результат нужной операции
14

Сердце математики

Задание: Соберите 8-битное АЛУ (ADD, AND, OR, XOR, NOT, SHL, SHR). Подсказка: декодер->операции->MUX.

●●● ≈ 40 мин
После уровня: объяснить архитектуру АЛУ (декодер → операции → MUX) и назначение флага Zero
15

Пульс системы

Задание: Изучите концепцию тактирования. Нажимайте кнопку ManualClock и наблюдайте за счётчиком на LED8.

●●● ≈ 10 мин
После уровня: объяснить, как такт двигает данные через регистры, и протактировать счётчик вручную
16

Счётчик команд

Задание: Соберите счётчик команд (PC) из Register и ADDER8. Каждый такт увеличивает адрес на 1.

●●● ≈ 30 мин
После уровня: собрать счётчик команд и объяснить цикл регистр → АЛУ → регистр

Часть 2 · Продвинутая архитектура · уровни 17–29 · ≈ 415 мин

17

Анатомия дешифратора

Задание: Соберите логику распознавания 3 опкодов (ADD, STA, JMP) для дешифратора. На выходах LED-индикаторы покажут, какая линия активна.

●●● ≈ 30 мин
После уровня: объяснить, как опкод распознаётся цепочками AND (дешифратор)
18

ФИНАЛ: Компьютер Ершова

Задание: Соберите 8-битный компьютер! Harvard arch: ROM(инструкции) + RAM(данные) + PC + Register + ALU + Decoder + Clock.

●●● ≈ 60 мин
После уровня: объяснить цикл выполнения инструкции и Harvard-архитектуру (ROM + RAM)
19

Шаг вперёд (PC+2)

Задание: Подключите BusConstant(2) к входу Inc счётчика команд, чтобы PC шагал на +2 вместо +1.

●●● ≈ 15 мин
После уровня: объяснить, зачем счётчику команд переменный шаг (word-формат инструкций)
20

Двойное чтение

Задание: Добавьте вторую ROM для чтения операнда длиной 2 байта. PC шагает на +2.

●●● ≈ 20 мин
После уровня: объяснить, как один PC адресует два банка ROM (двойное чтение)
21

Указатели

Задание: Добавьте Index Register (IX) для косвенной адресации. Реализуйте LDX, LDAX, STAX, INX в декодере.

●●● ≈ 25 мин
После уровня: объяснить указатели и косвенную адресацию на уровне регистра IX
22

Конфликт на шине

Задание: Исправьте конфликт на шине данных: RAM и Gamepad одновременно выдают данные. Добавьте AddrDecoder и BusAND для гейтирования RAM.

●●● ≈ 30 мин
После уровня: объяснить конфликт на шине и как дешифратор адреса разделяет устройства (гейтирование)
23

Геймпад

Задание: Напишите программу, которая читает геймпад (порт 254) и сохраняет значение в RAM[0].

●●● ≈ 30 мин
После уровня: написать программу чтения порта ввода и объяснить разницу LDA N и ADD N
24

Ручной пиксель

Задание: Подключите 4 BusConstant к MatrixDisplay и зажгите пиксель в (0,0).

●●● ≈ 25 мин
После уровня: объяснить протокол memory-mapped портов дисплея (X, Y, пиксель) и зажечь пиксель
25

Проверка на минус

Задание: Изучите условный переход JN (Jump if Negative). Запустите тестовую программу и убедитесь, что переход работает.

●●● ≈ 30 мин
После уровня: объяснить флаги состояния (доп. код) и написать программу с условным переходом JN
26

Бросок кубика

Задание: Подключите LFSR (генератор случайных чисел) к шине данных через второй BusOR.

●●● ≈ 20 мин
После уровня: объяснить, как LFSR генерирует псевдослучайные числа и как третий источник попадает на шину
27

Hello, Ports!

Задание: Измените константы в программе так, чтобы пиксель зажёгся в координатах X=4, Y=12.

●●● ≈ 25 мин
После уровня: читать и править готовую ассемблерную программу под новое условие
28

Движущаяся точка

Задание: Напишите программу, которая двигает точку по экрану с помощью геймпада.

●●● ≈ 45 мин
После уровня: написать полную программу с переменными в RAM, вводом, ветвлением и циклом
29

ФИНАЛ: Змейка

Задание: Напишите полную игру «Змейка» на ассемблере!

●●● ≈ 60 мин
После уровня: спроектировать игру «Змейка» на ассемблере: состояние, ввод, отрисовка

Часть 3 · Verilog · уровни 30–43 · ≈ 360 мин

30

Hello, Wire!

Задание: Код — это не алгоритм, а чертёж схемы. Вызовите базовый вентиль И, чтобы проложить первые провода в кремнии. Напишите: and gate1(out, a, b);

●○○ ≈ 10 мин
После уровня: объяснить, что Verilog описывает схему, а не алгоритм, и инстанцировать вентиль
31

Управление потоком (MUX)

Задание: Соберите вентиль XOR, используя только and, or и not. Встроенный xor отключён. Главное правило: строки кода здесь работают одновременно, как соединённые проводники, а не последовательно.

●○○ ≈ 15 мин
После уровня: объяснить параллельность операторов Verilog и собрать XOR из and/or/not без примитива xor
32

Первое вычисление

Задание: Спроектируйте мультиплексор 2→1. Если sel=0, out=a; если sel=1, out=b.

●○○ ≈ 15 мин
После уровня: перенести схемную задачу (MUX) в структурный Verilog
33

Масштабирование схем

Задание: Спроектируйте полусумматор. sum = a XOR b, carry = a AND b.

●○○ ≈ 15 мин
После уровня: собрать полусумматор на Verilog (XOR + AND)
34

Переход к шинам данных

Задание: Спроектируйте полный сумматор. sum = a XOR b XOR c_in, c_out = (a AND b) OR (a AND c_in) OR (b AND c_in). Можно использовать HalfAdder из предыдущего уровня.

●●○ ≈ 20 мин
После уровня: объяснить иерархию модулей и переиспользовать собственный HalfAdder
35

Центр вычислений (АЛУ)

Задание: Спроектируйте 8-битный сумматор. Используйте 8 полных сумматоров (FullAdder) с цепочкой переноса.

●●● ≈ 30 мин
После уровня: собрать 8-битный сумматор инстанцированием 8 FullAdder
36

ALU

Задание: Соберите 8-битное АЛУ. op_code=0: сложение (Adder8), op_code=1: побитовое И. Используйте модули Adder8 и Mux из предыдущих уровней.

●●● ≈ 40 мин
После уровня: объяснить соответствие структуры кода архитектуре (8×and, 8×Mux)
37

Память и Время

Задание: Спроектируйте 8-битный регистр из D-триггеров с помощью generate-for. module Reg8(input wire [7:0] in, input wire clk, output wire [7:0] out);

●●○ ≈ 30 мин
После уровня: объяснить последовательную логику в Verilog (dff, clockPort) и generate-for
38

Шаг за шагом

Задание: Спроектируйте 8-битный счётчик: регистр + сумматор в обратной связи. Константа 8'b00000001 = +1.

●●○ ≈ 25 мин
После уровня: собрать счётчик с обратной связью, разорванной D-триггерами; использовать константы 8'b
39

Оперативная память

Задание: Обвяжите встроенный RAM256 для записи и чтения данных по адресам. Порты RAM256: (clk, we, addr, data, q).

●●● ≈ 30 мин
После уровня: обвязать встроенный RAM256 и объяснить абстракцию black-box
40

Сердце процессора

Задание: Спроектируйте тракт данных: Counter → ROM → ALU → Register. ROM выдаёт числа: 0→5, 1→7, 2→3, 3→10, 4→2. ALU складывает.

●●● ≈ 40 мин
После уровня: собрать datapath (Counter → ROM → ALU → Register) и объяснить тракт данных
41

Анатомия системы

Задание: Соберите верхнеуровневый модуль CPU. Инстанцируйте Reg8 и FullAdder из соседних файлов (register.v, full_adder.v) и соедините их.

●●● ≈ 35 мин
После уровня: объяснить многофайловый проект (VFS) и роли read-only файлов-библиотек
42

Рентген для кремния

Задание: Исследуйте иерархию через RTL Viewer (рентген-аппарат для чипов), найдите неверный вентиль на нижнем уровне и ответьте на вопрос.

●●○ ≈ 20 мин
После уровня: отлаживать иерархию через RTL Viewer drill-down и найти неверно подключённый примитив
43

Остановка времени

Задание: Найдите и исправьте ошибку в FullAdder. Тест падает — откройте осциллограмму (waveform) и найдите неверный провод переноса.

●●● ≈ 35 мин
После уровня: читать временную диаграмму и по ней найти и исправить ошибку в схеме

Часть 4 · Проектирование компьютера · уровни 44–47 · ≈ 135 мин

44

Мозг процессора

Задание: Реализуйте дешифратор инструкций. На вход — 4-битный opcode, на выход — управляющие сигналы (RegWrite, MemWrite, ALUSel, Branch). Используйте вентили AND/OR/NOT.

●●○ ≈ 25 мин
После уровня: спроектировать блок управления: дешифратор опкода → управляющие сигналы
45

Своя инструкция

Задание: Реализуйте 8-битный вычислитель (ALU). Поддержите три операции: ADD (sel=0), AND (sel=1), OR (sel=2). Используйте Adder8 для сложения, вентили для AND/OR, и декодер sel с MUX для выбора результата. Применяйте generate-for.

●●● ≈ 35 мин
После уровня: спроектировать собственную систему команд (ISA) с декодером и MUX
46

Окно в реальный мир

Задание: Реализуйте контроллер ввода-вывода. При записи по адресу 0xFF зажигайте светодиоды (led_out), при чтении 0xFE выдавайте состояние переключателей (switches_in).

●●● ≈ 30 мин
После уровня: объяснить memory-mapped I/O и реализовать LED/переключатели с write-enable регистром
47

Материализация

Задание: Напишите top.v, инстанцируйте CPU и выведите порты. Нажмите "Создать компьютер" для экспорта проекта на Tang Nano 9K.

●●● ≈ 45 мин
После уровня: инстанцировать полный компьютер и экспортировать его на реальную FPGA (ZIP, pin-mapping)

Читайте также

Презентация проекта для школы → · Методическое руководство →