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. Компонентная база и интерфейсы
| Блок | Компоненты | Требования к разводке и схемотехнике |
|---|---|---|
| Сокет FPGA | 2 × 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. Использовать токоограничивающие резисторы. |
| Кнопка STEP | 1 × Тактовая кнопка (крупная, надежная) | Критично: Аппаратный антидребезг (RC-цепь + триггер Шмитта, например 74HC14). Сигнал должен быть идеально чистым. |
| Кнопка RESET | 1 × Тактовая кнопка (отличается цветом) | Глобальный сброс схемы. Аппаратный антидребезг желателен. |
| Кнопка MODE | 1 × Галетный переключатель (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).
| Группа | Кол-во пинов | Назначение (Логика ученика) | Примечание |
|---|---|---|---|
| Кнопки | 2 | clk_step, rst_n | Входы тактирования и сброса. |
| Переключатель | 5 | mode[4:0] | Выбор режима отображения (PC, IR, ACC, ALU, RAM). |
| Ввод данных | 8 | switches[7:0] | 8-битная шина прямого ручного ввода. |
| Вывод данных | 8 | leds[7:0] | 8-битная шина вывода. |
| Дисплей | 3 | matrix_din, matrix_cs, matrix_clk | SPI интерфейс для матрицы 16×16. |
| Джойстик | 5 | joy_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 (чтобы не тянуть зависимости).
Зависимости (в комплекте):
- Gowin CLI (
gw_shи консольные бинарники синтеза — их можно вырезать из полной Gowin EDA, чтобы утилита весила не 2 ГБ, а около 100–200 МБ). 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 должен перехватывать типичные ошибки компилятора по регулярным выражениям и переводить их на человеческий язык.
Примеры перехвата:
- Сырая ошибка:
ERROR (EX2000) : "cpu.v":14 | Syntax error near 'always'→ Перевод лоадера: «Опечатка в файлеcpu.vна строке 14. Кажется, вы пропустили точку с запятой в предыдущей строке». - Сырая ошибка:
ERROR (EX3011) : Port 'clk' is unconnected→ Перевод лоадера: «Вы забыли припаять провод: сигналclkникуда не подключен».