Ershov Board — Техническое задание

Главная проблема при работе с логическими схемами — дребезг контактов (bounce). Если мы не подавим его аппаратно, одно нажатие кнопки STEP выдаст 5–6 тактовых импульсов, и процессор «улетит» вперед, сломав весь методический процесс.

ТЗ на разработку печатной платы «Ershov Board» v1.0

1. Общие требования

Тип устройства: Лабораторная базовая плата (Dock Board) для установки модуля Tang Nano 9K.

Питание: Осуществляется от USB Type-C коннектора, расположенного на самой плате Tang Nano 9K (дополнительного разъема питания на Ershov Board не требуется, разводим шины 5V и 3.3V с пинов отладочной платы).

Монтаж: Все элементы управления (кнопки, тумблеры, переключатели) выводятся на верхнюю сторону (Top layer) для удобной работы.

Защита: Обязательна защита от короткого замыкания (предохранитель/PTC) на шине питания и токоограничивающие резисторы на всех пинах ввода-вывода для защиты портов FPGA при ошибках в коде ученика.

2. Компонентная база и интерфейсы

БлокКомпонентыТребования к разводке и схемотехнике
Сокет FPGA2 × 24-pin female headers (шаг 2.54 мм)Посадочное место строго под габариты Sipeed Tang Nano 9K. Выводы подписать на шелкографии.
Input Bus (Ввод)8 × тумблеров (Toggle switches) или DIP-свитчОбязательна подтяжка (Pull-up/Pull-down) внешними резисторами. Плавный ход для удобства переключения.
Output Bus (Вывод)8 × LED (красные/зеленые)Расположить в одну линию напротив Input Bus. Использовать токоограничивающие резисторы.
Кнопка STEP1 × Тактовая кнопка (крупная, надежная)Критично: Аппаратный антидребезг (RC-цепь + триггер Шмитта, например 74HC14). Сигнал должен быть идеально чистым.
Кнопка RESET1 × Тактовая кнопка (отличается цветом)Глобальный сброс схемы. Аппаратный антидребезг желателен.
Кнопка MODE1 × Галетный переключатель (1 полюс, 5 позиций)Общий контакт на GND. 5 сигнальных линий идут на пины FPGA. Подтяжка Pull-up.
МатрицаСветодиодная матрица 16×16Для экономии пинов использовать матрицы со встроенным контроллером (например, сборка из 4 шт. MAX7219). Подключение по SPI (DIN, CS, CLK).
Джойстик5-позиционный цифровой джойстик (Up, Down, Left, Right, Press)Аналоговый стик не подходит (у FPGA мало АЦП). Нужны обычные цифровые замыкания на землю.

3. Предварительный Pin-Mapping (Распределение пинов)

Tang Nano 9K (чип GW1NR-9) имеет достаточное количество пользовательских пинов ввода-вывода. Распределение нужно зафиксировать, чтобы ученикам выдавался готовый файл .cst (Constraints).

ГруппаКол-во пиновНазначение (Логика ученика)Примечание
Кнопки2clk_step, rst_nВходы тактирования и сброса.
Переключатель5mode[4:0]Выбор режима отображения (PC, IR, ACC, ALU, RAM).
Ввод данных8switches[7:0]8-битная шина прямого ручного ввода.
Вывод данных8leds[7:0]8-битная шина вывода.
Дисплей3matrix_din, matrix_cs, matrix_clkSPI интерфейс для матрицы 16×16.
Джойстик5joy_u, joy_d, joy_l, joy_r, joy_pНавигация для финала (Змейка).
Итого:31 пинНа Tang Nano 9K доступно более 32 пинов.

4. Требования к шелкографии (Silkscreen) и UX платы

Плата является методическим пособием. Шелкография не менее важна, чем разводка дорожек.

Зонирование: Визуально разделить плату линиями на зоны: CONTROL (Step, Reset), INPUT (Тумблеры), DEBUG (Светодиоды и Галетный переключатель), PERIPHERALS (Матрица и Джойстик).

Шкала MODE: Вокруг галетного переключателя должны быть четко напечатаны позиции: PC (Program Counter), IR (Instruction Register), ACC (Accumulator), ALU (ALU Out), RAM (Data Bus).

Брендирование: В углу платы напечатать логотип проекта и версию платы. Рекомендуемый цвет маски — классический темно-зеленый (вызывает ассоциации с промышленной инженерией).

Ershov Loader

Главная задача Ershov Loader — работать как идеальный фасад. Ученик не должен даже подозревать, что под капотом крутится тяжеловесный корпоративный софт (Gowin EDA). Для него это должна быть утилита с одной кнопкой «Прошить чип» и красивым, понятным логом.

Под капотом мы будем использовать интерфейс командной строки Gowin (gw_sh) для синтеза и open-source утилиту openFPGALoader для прошивки, так как она работает по USB гораздо стабильнее проприетарного программатора.

Архитектура утилиты

Движок: Приложение может быть написано на Python (с простым UI на Tkinter или PyQt) или собрано как легковесный бинарник на Go/Rust (чтобы не тянуть зависимости).

Зависимости (в комплекте):

  1. Gowin CLI (gw_sh и консольные бинарники синтеза — их можно вырезать из полной Gowin EDA, чтобы утилита весила не 2 ГБ, а около 100–200 МБ).
  2. openFPGALoader (идеально шьет Tang Nano 9K из командной строки).

Алгоритм работы (Конвейер)

1. Распаковка и Валидация: Утилита получает архив Ershov_Computer.zip. Распаковывает его во временную директорию ОС (temp). Проверяет наличие top.v (главный модуль) и Ershov_Board.cst (файл ограничений). Если чего-то не хватает — выдает человекопонятное предупреждение.

2. Генерация TCL-скрипта (Конфигуратора): Чтобы не открывать GUI Gowin, лоадер «на лету» генерирует текстовый файл build.tcl. В этом скрипте прописаны команды для компилятора: выбор чипа, добавление .v файлов, добавление .cst, запуск синтеза и трассировки.

3. Фоновый Синтез (Парсинг логов): Лоадер запускает gw_sh build.tcl. Gowin EDA начинает выплевывать в консоль тысячи строк технического текста. Лоадер перехватывает этот поток (stdout) и работает как фильтр-переводчик. Ученик видит только красиво анимированные статусы: «Читаем чертежи…» → «Синтезируем логические вентили…» → «Прокладываем провода внутри чипа…».

4. Анализ результатов и Оценка: Если компиляция успешна, лоадер парсит файл отчета (.rpt) и выводит ученику статистику его процессора перед прошивкой: потрачено логических ячеек (LUTs), использовано триггеров (Registers). Ученик понимает, насколько «большой» компьютер он собрал.

5. Прошивка в кремний: Лоадер находит сгенерированный файл прошивки project.fs. Запускает фоновую команду: openFPGALoader -b tangnano9k project.fs. Индикатор прогресса доходит до 100%. Выводится сообщение: «Компьютер ожил! Можете нажимать кнопку STEP на плате».

Обработка ошибок (Защита от фрустрации)

Самая большая проблема EDA-систем — ужасные сообщения об ошибках. Если ученик забыл поставить точку с запятой, Gowin может выдать 50 строк нечитаемого красного текста. Ershov Loader должен перехватывать типичные ошибки компилятора по регулярным выражениям и переводить их на человеческий язык.

Примеры перехвата: