Уровень 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 | Что подключено |
|---|---|---|
clk | 45 | Тактовый вход (кнопка STEP на лабораторной базе Ershov Board) |
top_led[7:0] | 10–17 | 8 светодиодов |
top_sw[7:0] | 20–27 | 8 переключателей |
Шаг 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 и нажимаете «Прошить чип». Дальше она сама:
- Распаковывает архив и проверяет файлы;
- Запускает синтез и трассировку через консольный движок Gowin (
gw_sh); - Прошивает плату через
openFPGALoader -b tangnano9k; - Показывает статистику вашего процессора: сколько LUT и триггеров он занял на чипе.
Устройство утилиты описано в статье Ershov Board — Техническое задание.
Вариант Б: Gowin IDE (официальная среда, вручную)
- Скачайте Gowin EDA с сайта производителя (Education-версия бесплатна, лицензия приходит на e-mail) и установите.
- Создайте проект:
File → New Project→ имя проекта → в поле Device выберитеGW1NR-LV9QN88PC6/I5(это чип Tang Nano 9K). - Распакуйте
Ershov_Computer.zipи добавьте все шесть.v-файлов в проект (правая кнопка на вкладке Design →Add Files). - Проверьте, что top-модулем выбран
Top(правой кнопкой по файлуtop.v→Set as Top Module). Verilog чувствителен к регистру: имя в настройках проекта должно совпадать с именем модуля в коде до последней буквы. Если в файле написаноmodule top, то и в проекте должно стоятьtop— иначе компилятор выдастmodule not found. - Добавьте файл ограничений: правой кнопкой на вкладке Constraints →
Add Files→ выберитеErshov_Computer.pins.cst. - Запустите сборку кнопкой Run All (или по шагам: Synthesize → Place & Route).
- Подключите плату по USB и откройте Programmer →
Program/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.
Материалы по теме
- Ershov Board — Техническое задание — плата, pin-маппинг, Ershov Loader
- Мозг процессора — Control Unit
- Иерархия модулей — многофайловые проекты
Решение
Модуль 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 готов к прошивке на реальную плату. Пошаговая инструкция «из браузера в кремний» — в разделе «Как запрограммировать ПЛИС».