Уровень 47: Материализация

Открыть уровень →

Задание

Финальный уровень! Напишите top.v — модуль верхнего уровня, который инстанцирует CPU и подключает его к физическим портам платы Tang Nano 9K.

Проект содержит несколько файлов (вкладки слева):

  • top.vредактируемый: ваш модуль верхнего уровня.
  • cpu.v — только для чтения: Counter8 → ROM → Reg8 (упрощённый процессор).
  • counter8.v, adder8.v, full_adder.v, reg8.v — только для чтения: стандартные блоки.

Интерфейс Top: clk (такт), top_sw[7:0] (переключатели), top_led[7:0] (светодиоды). Нажмите «Создать компьютер» — проект соберётся в ZIP-архив с Ershov_Computer.pins.cst для прошивки на Tang Nano 9K.

Как запрограммировать ПЛИС

Verilog-код нельзя «запустить» как обычную программу: его нужно синтезировать — превратить в конфигурацию логических ячеек чипа, а затем прошить эту конфигурацию в память ПЛИС. Вот полный путь «из браузера в кремний».

Что происходит при синтезе? Компилятор не создаёт инструкции — он раскладывает вашу схему на элементы кристалла: логические ячейки (LUT) и программируемые перемычки между ними. Bitstream физически меняет структуру кристалла: перемычки замыкаются или размыкаются, и на чипе «прорастает» ваш процессор. Это принципиально отличается от компиляции C++: там программа хранится в памяти и исполняется процессором, здесь сама схема становится железом.

Шаг 1. Получите файлы проекта

Нажмите «Создать компьютер» на уровне 47. Скачается архив Ershov_Computer.zip:

  • top.v, cpu.v, counter8.v, adder8.v, full_adder.v, reg8.v — исходники вашего компьютера;
  • Ershov_Computer.pins.cst — файл физических ограничений: привязка портов к ножкам чипа уже сделана за вас.
ПортНожка Tang Nano 9KЧто подключено
clk45Тактовый вход (кнопка STEP на лабораторной базе Ershov Board)
top_led[7:0]10–178 светодиодов
top_sw[7:0]20–278 переключателей

Шаг 2. Подготовьте плату

Вам понадобится отладочная плата Sipeed Tang Nano 9K (чип GW1NR-9) и USB-C кабель с передачей данных. Никакого внешнего программатора не нужно: на плате уже есть встроенный USB-JTAG-программатор. Подключите плату к компьютеру по USB.

Если используете лабораторную базу Ershov Board — установите модуль Tang Nano 9K в сокет (2×24 pin), переключатели и светодиоды окажутся подключены к чипу согласно таблице выше.

Шаг 3. Выберите способ прошивки

Вариант А: Ershov Loader — одна кнопка (рекомендуется)

Утилита проекта прячет всю сложность EDA-инструментов: вы просто открываете в ней Ershov_Computer.zip и нажимаете «Прошить чип». Дальше она сама:

  1. Распаковывает архив и проверяет файлы;
  2. Запускает синтез и трассировку через консольный движок Gowin (gw_sh);
  3. Прошивает плату через openFPGALoader -b tangnano9k;
  4. Показывает статистику вашего процессора: сколько LUT и триггеров он занял на чипе.

Устройство утилиты описано в статье Ershov Board — Техническое задание.

Вариант Б: Gowin IDE (официальная среда, вручную)

  1. Скачайте Gowin EDA с сайта производителя (Education-версия бесплатна, лицензия приходит на e-mail) и установите.
  2. Создайте проект: File → New Project → имя проекта → в поле Device выберите GW1NR-LV9QN88PC6/I5 (это чип Tang Nano 9K).
  3. Распакуйте Ershov_Computer.zip и добавьте все шесть .v-файлов в проект (правая кнопка на вкладке Design → Add Files).
  4. Проверьте, что top-модулем выбран Top (правой кнопкой по файлу top.vSet as Top Module). Verilog чувствителен к регистру: имя в настройках проекта должно совпадать с именем модуля в коде до последней буквы. Если в файле написано module top, то и в проекте должно стоять top — иначе компилятор выдаст module not found.
  5. Добавьте файл ограничений: правой кнопкой на вкладке Constraints → Add Files → выберите Ershov_Computer.pins.cst.
  6. Запустите сборку кнопкой Run All (или по шагам: Synthesize → Place & Route).
  7. Подключите плату по USB и откройте ProgrammerProgram/Configure. Если плата видна в списке устройств — жмите программирование, прошивка займёт пару секунд.

Вариант В: командная строка

Синтез через TCL-скрипт, прошивка — через open-source утилиту:

gw_sh build.tcl                        # синтез + трассировка
openFPGALoader -b tangnano9k impl/pnr/project.fs   # прошивка по USB

Шаг 4. Что вы увидите

Сразу после прошивки компьютер оживает: по светодиодам top_led побежит «бегущий огонёк» — ROM предзаполнен программой Knight Rider, и процессор на каждом такте выводит на светодиоды новое значение. Подавайте такты кнопкой STEP (медленно, по одному такту) или от генератора. Переключатели top_sw подают данные на вход sw процессора.

Важно: прошивка по умолчанию загружается во внутреннюю SRAM-память чипа и работает до первого отключения питания. Вытащили USB-кабель — компьютер «всё забыл». Это нормальный режим отладки: прошивается мгновенно и не расходует ресурс флеш-памяти. Чтобы компьютер переживал включение питания, прошейте конфигурацию во внешнюю SPI-флеш-память платы: в Gowin Programmer выберите режим External Flash, а из командной строки добавьте флаг -f: openFPGALoader -b tangnano9k -f project.fs.

Это тот самый компьютер, который вы построили на уровнях 1–47 — теперь он работает в настоящем кремнии, а не в симуляторе.

Если что-то пошло не так

  • Плата не определяется в Programmer. Проверьте, что USB-кабель с передачей данных (не «только зарядка»); в Linux добавьте udev-правила для программатора; на Windows при необходимости установите драйвер USB-JTAG.
  • Плата видна в Gowin Programmer, но не видна в openFPGALoader (Windows). Официальный программатор Gowin и openFPGALoader используют разные драйверы для одного и того же USB-JTAG-интерфейса. После установки Gowin IDE Windows ставит официальный драйвер, и openFPGALoader (Варианты А и В) перестаёт видеть плату. Лечится утилитой Zadig: выберите устройство Tang Nano 9K и замените драйвер на WinUSB. После этого плату снова увидит openFPGALoader, но уже не увидит Gowin Programmer — драйверы работают по очереди, переключайте их в зависимости от выбранного способа прошивки.
  • Ошибка синтеза «module not found». Не все .v-файлы добавлены в проект — проверьте, что их шесть.
  • Светодиоды не горят. Проверьте, что .cst подключён к проекту, а топ-модуль называется Top.
  • Светодиоды «дрожат» при нажатии STEP. Кнопка должна иметь аппаратный антидребезг (RC-цепь + триггер Шмитта) — см. требования к Ershov Board.

Материалы по теме

Решение

Модуль Top предельно прост — нужно только инстанцировать CPU и подключить порты:

module Top(
    input wire clk,
    input wire [7:0] top_sw,
    output wire [7:0] top_led
);
  CPU cpu(clk, top_sw, top_led);
endmodule

После этого нажмите «Создать компьютер». В сгенерированный ZIP войдут:

  • Все файлы проекта (top.v, cpu.v, counter8.v, adder8.v, full_adder.v, reg8.v)
  • Ershov_Computer.pins.cst — физические ограничения: привязка портов к ножкам Tang Nano 9K (clk → 45, светодиоды → 10–17, переключатели → 20–27)

ZIP готов к прошивке на реальную плату. Пошаговая инструкция «из браузера в кремний» — в разделе «Как запрограммировать ПЛИС».

Схема решения уровня 47 — Материализация
Авторское решение уровня 47 в симуляторе (тёмная тема)