Программа курса
47 уровней от первого провода до FPGA: для каждого — задание, сложность, типичное время и измеримый результат обучения.
Часть 1 · Базовые схемы
≈ 330 мин · ≈ 5,5 ч
От первого провода и NAND до счётчика команд: вентили, сумматоры, мультиплексор, SR-защёлка, D-триггер, регистр, АЛУ, тактовый генератор.
Часть 2 · Продвинутая архитектура
≈ 415 мин · ≈ 6,9 ч
Дешифратор команд и финальный Harvard-процессор с ассемблером, затем периферия: переменный шаг PC, двойное чтение ROM, указатели IX, шины и порты ввода-вывода, флаги, «Змейка».
Часть 3 · Verilog
≈ 360 мин · ≈ 6 ч
Язык описания аппаратуры: примитивы, иерархия модулей, шины, АЛУ, RAM, тракт данных, многофайловые проекты, RTL Viewer и временные диаграммы.
Часть 4 · Проектирование компьютера
≈ 135 мин · ≈ 2,3 ч
Блок управления, собственная система команд (ISA), Memory-Mapped I/O и экспорт на реальную FPGA Tang Nano 9K.
Итого: ≈ 21 ч чистого решения
≈ 1240 мин
≈ 28 уроков по 45 минут чистого решения; с теорией, статьями и разбором — ≈ 40 уроков (30 ч).
Форматы внедрения в школе
Годовой электив
2 урока в неделю по 45 минут — все 47 уровней проходятся за учебный год.
Полугодовой факультатив
4 урока в неделю — полный курс укладывается в полугодие.
Интенсив
5 дней × 6 часов — формат летней школы или профильной смены.
Часть 1 · Базовые схемы · уровни 1–16 · ≈ 330 мин
Да будет свет!
Задание: Соедините источник сигнала (Вход) с приёмником (Выход).
Отрицание
Задание: Соберите инвертор (NOT) из элемента NAND. Если на входе 1, на выходе 0.
Идеальная пара
Задание: Соберите логическое И (AND).
Хотя бы один
Задание: Соберите логическое ИЛИ (OR).
Строгий выбор
Задание: Соберите исключающее ИЛИ (XOR).
Полусумматор
Задание: Соберите полусумматор (Half Adder).
Сумматор
Задание: Соберите полный сумматор (Full Adder): 3 входа, 2 выхода.
8-битный Сумматор
Задание: Соберите 8-битный сумматор ADDER8, используя FullAdder и шины.
Перекрёсток
Задание: Соберите мультиплексор (MUX): выбирает один из двух входных битов.
Замыкание
Задание: Соберите SR-защёлку из NOR. Состояние сохраняется при S=0,R=0.
Умный запоминатель
Задание: Соберите D-триггер (DFF). Данные запоминаются по фронту Clock.
Осязаемая память
Задание: Соберите 8-битный регистр из DFF. Подключите его выход к LED8.
Выбор операции
Задание: Постройте селектор операций. BusMUX выбирает результат: ADD, AND или OR на основе OpSelect.
Сердце математики
Задание: Соберите 8-битное АЛУ (ADD, AND, OR, XOR, NOT, SHL, SHR). Подсказка: декодер->операции->MUX.
Пульс системы
Задание: Изучите концепцию тактирования. Нажимайте кнопку ManualClock и наблюдайте за счётчиком на LED8.
Счётчик команд
Задание: Соберите счётчик команд (PC) из Register и ADDER8. Каждый такт увеличивает адрес на 1.
Часть 2 · Продвинутая архитектура · уровни 17–29 · ≈ 415 мин
Анатомия дешифратора
Задание: Соберите логику распознавания 3 опкодов (ADD, STA, JMP) для дешифратора. На выходах LED-индикаторы покажут, какая линия активна.
ФИНАЛ: Компьютер Ершова
Задание: Соберите 8-битный компьютер! Harvard arch: ROM(инструкции) + RAM(данные) + PC + Register + ALU + Decoder + Clock.
Шаг вперёд (PC+2)
Задание: Подключите BusConstant(2) к входу Inc счётчика команд, чтобы PC шагал на +2 вместо +1.
Двойное чтение
Задание: Добавьте вторую ROM для чтения операнда длиной 2 байта. PC шагает на +2.
Указатели
Задание: Добавьте Index Register (IX) для косвенной адресации. Реализуйте LDX, LDAX, STAX, INX в декодере.
Конфликт на шине
Задание: Исправьте конфликт на шине данных: RAM и Gamepad одновременно выдают данные. Добавьте AddrDecoder и BusAND для гейтирования RAM.
Геймпад
Задание: Напишите программу, которая читает геймпад (порт 254) и сохраняет значение в RAM[0].
Ручной пиксель
Задание: Подключите 4 BusConstant к MatrixDisplay и зажгите пиксель в (0,0).
Проверка на минус
Задание: Изучите условный переход JN (Jump if Negative). Запустите тестовую программу и убедитесь, что переход работает.
Бросок кубика
Задание: Подключите LFSR (генератор случайных чисел) к шине данных через второй BusOR.
Hello, Ports!
Задание: Измените константы в программе так, чтобы пиксель зажёгся в координатах X=4, Y=12.
Движущаяся точка
Задание: Напишите программу, которая двигает точку по экрану с помощью геймпада.
ФИНАЛ: Змейка
Задание: Напишите полную игру «Змейка» на ассемблере!
Часть 3 · Verilog · уровни 30–43 · ≈ 360 мин
Hello, Wire!
Задание: Код — это не алгоритм, а чертёж схемы. Вызовите базовый вентиль И, чтобы проложить первые провода в кремнии. Напишите: and gate1(out, a, b);
Управление потоком (MUX)
Задание: Соберите вентиль XOR, используя только and, or и not. Встроенный xor отключён. Главное правило: строки кода здесь работают одновременно, как соединённые проводники, а не последовательно.
Первое вычисление
Задание: Спроектируйте мультиплексор 2→1. Если sel=0, out=a; если sel=1, out=b.
Масштабирование схем
Задание: Спроектируйте полусумматор. sum = a XOR b, carry = a AND b.
Переход к шинам данных
Задание: Спроектируйте полный сумматор. sum = a XOR b XOR c_in, c_out = (a AND b) OR (a AND c_in) OR (b AND c_in). Можно использовать HalfAdder из предыдущего уровня.
Центр вычислений (АЛУ)
Задание: Спроектируйте 8-битный сумматор. Используйте 8 полных сумматоров (FullAdder) с цепочкой переноса.
ALU
Задание: Соберите 8-битное АЛУ. op_code=0: сложение (Adder8), op_code=1: побитовое И. Используйте модули Adder8 и Mux из предыдущих уровней.
Память и Время
Задание: Спроектируйте 8-битный регистр из D-триггеров с помощью generate-for. module Reg8(input wire [7:0] in, input wire clk, output wire [7:0] out);
Шаг за шагом
Задание: Спроектируйте 8-битный счётчик: регистр + сумматор в обратной связи. Константа 8'b00000001 = +1.
Оперативная память
Задание: Обвяжите встроенный RAM256 для записи и чтения данных по адресам. Порты RAM256: (clk, we, addr, data, q).
Сердце процессора
Задание: Спроектируйте тракт данных: Counter → ROM → ALU → Register. ROM выдаёт числа: 0→5, 1→7, 2→3, 3→10, 4→2. ALU складывает.
Анатомия системы
Задание: Соберите верхнеуровневый модуль CPU. Инстанцируйте Reg8 и FullAdder из соседних файлов (register.v, full_adder.v) и соедините их.
Рентген для кремния
Задание: Исследуйте иерархию через RTL Viewer (рентген-аппарат для чипов), найдите неверный вентиль на нижнем уровне и ответьте на вопрос.
Остановка времени
Задание: Найдите и исправьте ошибку в FullAdder. Тест падает — откройте осциллограмму (waveform) и найдите неверный провод переноса.
Часть 4 · Проектирование компьютера · уровни 44–47 · ≈ 135 мин
Мозг процессора
Задание: Реализуйте дешифратор инструкций. На вход — 4-битный opcode, на выход — управляющие сигналы (RegWrite, MemWrite, ALUSel, Branch). Используйте вентили AND/OR/NOT.
Своя инструкция
Задание: Реализуйте 8-битный вычислитель (ALU). Поддержите три операции: ADD (sel=0), AND (sel=1), OR (sel=2). Используйте Adder8 для сложения, вентили для AND/OR, и декодер sel с MUX для выбора результата. Применяйте generate-for.
Окно в реальный мир
Задание: Реализуйте контроллер ввода-вывода. При записи по адресу 0xFF зажигайте светодиоды (led_out), при чтении 0xFE выдавайте состояние переключателей (switches_in).
Материализация
Задание: Напишите top.v, инстанцируйте CPU и выведите порты. Нажмите "Создать компьютер" для экспорта проекта на Tang Nano 9K.
Читайте также
Часть 1 · Базовые схемы
- Введение в схемотехнику
- Как устроен компьютер
- Как работает процессор
- Логические вентили И, ИЛИ, НЕ
- Законы де Моргана: Как собрать схему из того, что есть
- Исключающее ИЛИ (XOR)
- Анатомия сумматора
- Информационные магистрали (Шины)
- Мультиплексор: электронный стрелочник
- АЛУ: Сердце математики
- Магия обратной связи
- Тактовый генератор и D-триггер
- Регистры: первый байт памяти
- Счётчик команд (Program Counter)
Часть 2 · Продвинутая архитектура
- Гарвардская архитектура: Разделяй и властвуй
- Дешифратор инструкций: Переводчик процессора
- Конфликты на шине и адресное пространство
- Memory-Mapped I/O: Гениальный обман процессора
- Флаги состояния: Как процессор понимает мир
- Ассемблер: самый честный язык программирования
- Указатели и индексные регистры (IX)
- Ветвления и циклы (JZ, JN, JMP)
Презентация проекта для школы → · Методическое руководство →