Школа синтеза цифровых схем · basics-graphics-music · редакция от 5 октября 2026 года
Эта инструкция описывает установку программного обеспечения, которое нужно
для лабораторных работ Школы синтеза цифровых схем, и для работы с
репозиторием примеров basics-graphics-music (далее BGM).
Инструкция заменяет предыдущую редакцию,
Инструкция_по_установке_ПО.pdf от 3 октября 2025 года. Фотографии
и снимки экрана из той редакции сохранены. Там, где сведения устарели, рядом
стоит пометка «Было верно раньше» с объяснением, что изменилось. Полный
перечень расхождений собран в
отдельном файле.
Школа синтеза цифровых схем (School of Digital Circuit Synthesis) — бесплатная образовательная программа компании YADRO, посвящённая схемотехнике и цифровому дизайну: разработке на уровне RTL, функциональной верификации и основам проектирования микросхем.
По данным сайта школы, программа объединяет более 2000 участников и 24 вуза России и Белоруссии. Занятия сезона 2026/2027 проходят по субботам с 12:00 до 15:00 по московскому времени — в университетских кластерах очно и онлайн с записью. Участие бесплатное; YADRO предлагает проектную работу со своими инженерами, стажировки и кадровый резерв.
Актуальная информация и регистрация: edu.yadro.com/chip-design-school.
BGM — это набор переносимых примеров на SystemVerilog для ПЛИС и для
заказных микросхем. Над ним работали более 60 человек (69
авторов по данным git log на момент подготовки этой редакции);
ведущий разработчик — Юрий Панчуль.
Репозиторий используется в Школе синтеза цифровых схем и на семинарах в разных странах: Бишкек (2022), Тбилиси (2023), Баку и Hacker Dojo в Кремниевой долине (2024), Тихуана и Ереван (2025).
Существуют три копии репозитория, и выбор между ними имеет значение:
| Назначение | Адрес |
|---|---|
| Экспериментальная версия разработки | github.com/yuri-panchul/basics-graphics-music |
| Стабильная версия для Школы синтеза | github.com/chipdesignschool/basics-graphics-music |
| Стабильная версия для международных семинаров | github.com/verilog-meetup/basics-graphics-music |
Для занятий Школы синтеза берите версию
chipdesignschool: она стабильна в течение семестра.
Версия yuri-panchul — рабочая, в ней ведётся разработка, и
поведение может измениться в любой день.
03_synthesize_for_fpga.bash
запускает Altera Quartus, AMD Vivado, Gowin EDA или открытый поток на основе
Yosys. Учащемуся не нужно изучать интерфейс каждой из этих программ, чтобы
начать.Подробнее о структуре курса — в разделе 8 и в статье на Хабре: habr.com/ru/articles/1071736.
systemverilog-homework (SVH) — набор небольших задач по
SystemVerilog с автоматической проверкой. Он дополняет BGM: в BGM примеры
запускаются на плате, а в SVH отрабатываются языковые конструкции и
микроархитектурные приёмы в симуляторе.
| Назначение | Адрес |
|---|---|
| Версия Школы синтеза | github.com/chipdesignschool/systemverilog-homework |
| Версия разработки | github.com/yuri-panchul/systemverilog-homework |
| Версия для международных семинаров | github.com/verilog-meetup/systemverilog-homework |
Для SVH достаточно Icarus Verilog и Git — платы и САПР не нужны. Подробнее в разделе 9.
Примеры BGM можно не только запускать на ПЛИС, но и превратить в настоящую микросхему.
lab_top из примера.
Подробнее в разделе 10 и в статье
habr.com/ru/articles/1084844.07_synthesize_for_asic.bash, а посмотреть топологию можно
скриптами 08_ и 09_. Установка — в разделе 4.1.11.Прежняя редакция инструкции описывала установку
OpenLane через Docker. В репозитории теперь используется
LibreLane — развитие того же проекта, устанавливаемое через
Nix. Старый скрипт 00_setup_open_lane.source_bash в репозитории
ещё лежит, но основным стал
00_setup_libre_lane.source_bash.
Короткий обзор; технические подробности — в соответствующих разделах, а построчный разбор ошибок прежней редакции — в файле исправлений.
| Тема | Что нового |
|---|---|
| Altera вместо Intel | Intel снова стала Altera. Quartus Lite 25.1 ставится в каталог
altera_lite, Quartus Pro — в altera_pro.
Скрипты знают все восемь вариантов имени каталога. |
| Старые версии Quartus | Для плат на Cyclone II (DE1, DE2) нужен Quartus II 13.0sp1; для Cyclone III (DE0, Марсоход MCY316) — 13.1 или 13.0sp1. Новые версии эти микросхемы уже не поддерживают. |
| Quartus Pro и новая плата | Terasic DE23-Lite (Agilex 3) требует редакции Pro с бесплатной лицензией. Ни одна редакция Lite эту микросхему не собирает. |
| Поиск инструментов | Задавать PATH не обязательно — скрипты находят Quartus,
Vivado, Gowin EDA, Icarus и остальное самостоятельно. |
| USB Blaster III | Добавлено правило udev для USB Blaster III
(idProduct 6022), нужное для DE23-Lite. |
| Icarus Verilog | Рекомендуется версия 13, лучше 14. Прежняя редакция описывала версию 12. |
| OSS CAD Suite | Открытый поток для плат Gowin и Lattice; содержит и свой Icarus, который скрипты тоже умеют использовать. |
| Surfer | Просмотрщик временных диаграмм, альтернатива GTKWave: и как программа,
и как расширение VS Code. Если surfer найден, скрипты
используют его. |
| LibreLane вместо OpenLane | Весь раздел про OpenLane переписан. |
| XPACK RISC-V GCC | Компилятор C и ассемблера для программ, исполняемых ядрами
aps (МИЭТ), yrv и picorv32
внутри ПЛИС. |
| Терминалы | Скрипт 14_run_terminal_program.bash работает с
minicom, picocom и putty. |
| Больше плат | 54 платы вместо 39 в прежнем перечне. В скриптах появилась также поддержка САПР Efinity для ПЛИС Efinix, но действующих плат на Efinix пока нет — см. раздел 11. |
| Имя файла настройки | 00_setup_intel_fpga.source_bash переименован в
00_setup_altera.source_bash. |
| Устаревшие адреса | Репозитории на gitflic.ru больше не используются;
valid-ready-etc устарел. Всё на GitHub. |
Репозиторий поддерживает 54 плат на ПЛИС четырёх
производителей. Таблица ниже — копия файла
boards/README.md
из репозитория; там же лежат варианты
на русском,
в форматах .html и .csv. Данные для этой таблицы
взяты из файла boards/README.csv того же репозитория, поэтому она
не может разойтись с ним.
| Изготовитель ПЛИС | Изготовитель платы | Плата | Семейство ПЛИС | САПР и подходящие версии | TM1638 | Графика |
|---|---|---|---|---|---|---|
| Altera | ALINX | alinx_ax301 | Cyclone IV E | Quartus с 13.0sp1 по 25.1std | нет | VGA |
| Altera | ALINX | alinx_ax4010 | Cyclone IV E | Quartus с 13.0sp1 по 25.1std | нет | VGA |
| Altera | Altera | dk_dev_3c120n | Cyclone III | Quartus 13.1 и старше | нет | нет |
| Altera | Marsohod | marsohod_mcy112 | Cyclone | Quartus 9.1 SP2; с 13.0sp1 нужна лицензия † | нет | нет |
| Altera | Marsohod | marsohod_mcy316 | Cyclone III | Quartus 13.1 и старше | нет | нет |
| Altera | OMDAZZ | omdazz | Cyclone IV E | Quartus с 13.0sp1 по 25.1std | нет | VGA + LCD |
| Altera | OMDAZZ | omdazz_epm570 | MAX II | Quartus с 13.0sp1 по 25.1std | нет | VGA + LCD |
| Altera | Piswords | piswords6 | Cyclone IV E | Quartus с 13.0sp1 по 25.1std | нет | VGA |
| Altera | Terasic | c5gx | Cyclone V | Quartus с 13.0sp1 по 25.1std | нет | HDMI/DVI |
| Altera | Terasic | de0 | Cyclone III | Quartus 13.1 и старше | нет | VGA |
| Altera | Terasic | de0_cv | Cyclone V | Quartus с 13.0sp1 по 25.1std | нет | VGA |
| Altera | Terasic | de0_nano | Cyclone IV E | Quartus с 13.0sp1 по 25.1std | всегда | VGA |
| Altera | Terasic | de0_nano_soc | Cyclone V | Quartus с 13.0sp1 по 25.1std | всегда | VGA |
| Altera | Terasic | de1 | Cyclone II | Quartus 13.0sp1 и старше | нет | VGA |
| Altera | Terasic | de10_lite | MAX 10 | Quartus 14.0.2 и новее † | на выбор | VGA |
| Altera | Terasic | de10_nano | Cyclone V | Quartus с 13.0sp1 по 25.1std | всегда | HDMI/DVI |
| Altera | Terasic | de1_soc | Cyclone V | Quartus с 13.0sp1 по 25.1std | нет | VGA |
| Altera | Terasic | de2 | Cyclone II | Quartus 13.0sp1 и старше | нет | VGA |
| Altera | Terasic | de23_lite | Agilex 3 | Quartus Pro 26.1.1 | нет | HDMI/DVI |
| Altera | Terasic | de2_115 | Cyclone IV E | Quartus с 13.0sp1 по 25.1std | нет | VGA |
| Altera | Terasic | terasic_sockit | Cyclone V | Quartus с 13.0sp1 по 25.1std | нет | VGA |
| Altera | ZEOWAA | zeowaa | Cyclone IV E | Quartus с 13.0sp1 по 25.1std | нет | VGA |
| Altera | unknown | emooc_cc | Cyclone IV E | Quartus с 13.0sp1 по 25.1std | нет | нет |
| Altera | unknown | rzrd | Cyclone IV E | Quartus с 13.0sp1 по 25.1std | нет | VGA + LCD |
| Altera | unknown | saylinx | Cyclone IV E | Quartus с 13.0sp1 по 25.1std | нет | VGA |
| Gowin | Marsohod | marsohod3gw2 | GW1NR-9 | Gowin EDA, любая версия † | нет | HDMI/DVI |
| Gowin | Sipeed | tang_mega_138k | GW5AST | Gowin EDA, 1.9.9 и новее † | всегда | HDMI/DVI + LCD |
| Gowin | Sipeed | tang_mega_138k_pro | GW5AST-138 | Gowin EDA, любая версия † | всегда | HDMI/DVI + LCD |
| Gowin | Sipeed | tang_nano_20k | GW2AR-18 | Gowin EDA, любая версия † | всегда | HDMI/DVI + LCD |
| Gowin | Sipeed | tang_nano_4k | GW1NSR-4 | Gowin EDA, любая версия † | всегда | HDMI/DVI |
| Gowin | Sipeed | tang_nano_9k | GW1NR-9 | Gowin EDA, любая версия; Yosys/OSS † | всегда | HDMI/DVI + LCD |
| Gowin | Sipeed | tang_primer_20k_dock | GW2A-18C | Gowin EDA, любая версия; Yosys/OSS † | всегда | HDMI/DVI + LCD |
| Gowin | Sipeed | tang_primer_20k_lite | GW2A-18 | Gowin EDA, любая версия † | всегда | нет |
| Gowin | Sipeed | tang_primer_25k | GW5A | Gowin EDA, 1.9.9 и новее † | всегда | HDMI/DVI + VGA |
| Gowin | Xunlong | orangepi_msoc | GW5AT-138B | Gowin EDA, любая версия † | всегда | нет |
| Lattice | 1BitSquared | icebreaker | iCE40 | САПР не назначен; Yosys/OSS † | на выбор | HDMI/DVI |
| Lattice | Colorlight | colorlight75b | ECP5 | Yosys/OSS † | всегда | нет |
| Lattice | Colorlight | colorlightI5 | ECP5 | Yosys/OSS † | всегда | нет |
| Lattice | Fabmicro | karnix | ECP5 | Yosys/OSS † | всегда | нет |
| Lattice | Greg Davill | orangecrab | ECP5 | Yosys/OSS † | всегда | нет |
| Lattice | Olimex | ice40hx8k_evb | iCE40 | Yosys/OSS † | всегда | VGA |
| Xilinx | ALINX | alinx_ax7035b | Artix-7 | Vivado, любая версия † | нет | нет |
| Xilinx | Digilent | arty_a7_100 | Artix-7 | Vivado, любая версия † | нет | нет |
| Xilinx | Digilent | arty_a7_35 | Artix-7 | Vivado, любая версия † | нет | нет |
| Xilinx | Digilent | basys3 | Artix-7 | Vivado, любая версия † | нет | VGA |
| Xilinx | Digilent | cmod_s7 | Spartan-7 | Vivado, любая версия † | нет | нет |
| Xilinx | Digilent | eclypse_z7 | Zynq-7000 | Vivado, любая версия † | всегда | нет |
| Xilinx | Digilent | nexys4 | Artix-7 | Vivado, любая версия † | нет | VGA |
| Xilinx | Digilent | nexys4_ddr | Artix-7 | Vivado, любая версия † | нет | нет |
| Xilinx | Digilent | nexys_a7_100 | Artix-7 | Vivado, любая версия † | нет | нет |
| Xilinx | Digilent | nexys_a7_50 | Artix-7 | Vivado, любая версия † | нет | нет |
| Xilinx | Digilent | zybo_z7 | Zynq-7000 | Vivado, любая версия † | нет | нет |
| Xilinx | QMTech | qmtech_kintex_7 | Kintex-7 | Vivado, любая версия † | нет | нет |
| Xilinx | unknown | a7_lite_35t | Artix-7 | Vivado, любая версия † | всегда | HDMI/DVI |
Пояснения к столбцам:
Одна и та же плата встречается в репозитории в нескольких конфигурациях —
с модулем TM1638 и без него, с HDMI или с одним из ЖК-экранов, со штатным
САПР или с открытым потоком. Всего 112 каталогов в boards/
на 54 платы.
Для большинства плат годится любой современный Quartus Lite. Но есть три исключения, из-за которых нельзя просто поставить самую новую версию:
| Платы | Микросхема | Что ставить | Почему |
|---|---|---|---|
| Terasic DE1, DE2 | Cyclone II | Quartus II 13.0sp1 | Версия 13.1 уже не поддерживает Cyclone II |
| Terasic DE0, Марсоход MCY316, DK-DEV-3C120N | Cyclone III | Quartus II 13.1 (или 13.0sp1) | Версия 21.1 и новее уже не поддерживает Cyclone III |
| Terasic DE23-Lite | Agilex 3 | Quartus Prime Pro + бесплатная лицензия | Ни одна редакция Lite эту микросхему не собирает |
Несколько версий Quartus могут стоять на одной машине одновременно и не мешают друг другу. Скрипты сами выберут подходящую для выбранной платы — см. раздел 4.1.1.4. Именно поэтому для старых плат удобно поставить 13.0sp1 или 13.1 рядом с новым Quartus Lite, а не вместо него.
Плата Марсоход MCY112 построена на
микросхеме Cyclone первого поколения (EP1C12). Ни одна из проверенных версий
Quartus — от 13.0sp1 до 25.1std и Pro 26.1.1 — не собирает для неё проект:
все выдают ошибку Error (20005) о необходимости лицензии. Файл
проекта самой платы в репозитории был создан редакцией Quartus II 9.1 SP2 Web,
то есть бесплатной. Для этой платы нужен Quartus того же поколения либо
лицензия.
Порядок разделов: Windows (4.1), Linux (4.2), macOS (4.3). Внутри каждого — одни и те же инструменты в одном и том же порядке.
Что обязательно, а что нет. Обязательны Git, Icarus Verilog с просмотрщиком диаграмм, VS Code и RARS — без них не выполнить ни одной лабораторной работы. САПР для ПЛИС нужен только тот, который соответствует вашей плате: для платы на Altera — Quartus, на Xilinx — Vivado, на Gowin — Gowin EDA или OSS CAD Suite, на Lattice — OSS CAD Suite. Если платы нет вообще, ставить САПР не нужно: примеры можно моделировать в Icarus Verilog, а упражнения SVH выполнять целиком без платы.
Во всех случаях в пути к каталогу установки не должно быть русских букв и пробелов. Это касается всех перечисленных программ и является самой частой причиной необъяснимых сбоев.
Quartus нужен только для плат с ПЛИС Altera (прежнее название — Intel). Если у вас плата на Xilinx, Gowin или Lattice, пропустите разделы 4.1.1–4.1.3.
Intel снова стала Altera. Новые версии
ставятся в каталоги altera_lite (редакция Lite) и
altera_pro (редакция Pro), тогда как версии времён Intel ставились
в intelFPGA_lite и intelFPGA. Скрипты репозитория
знают все эти имена, поэтому выбор версии ни на что не влияет — ставьте в
предлагаемый установщиком каталог.
altera_lite.1. Убедитесь, что скачаны оба файла: установщик
(QuartusLiteSetup-21.1.exe) и архив поддержки вашей микросхемы с
расширением .qdz. Оба файла должны лежать в одной
папке.
Какой именно .qdz нужен, определяется микросхемой на плате:
| Плата | Микросхема | Файл поддержки |
|---|---|---|
| DE10-Lite | MAX 10 | max10-21.1.1.850.qdz |
| DE10-Nano, DE1-SoC, DE0-CV | Cyclone V | cyclonev-21.1.1.850.qdz |
| OMDAZZ, RzRd, ZEOWAA, DE2-115, DE0-Nano | Cyclone IV | cyclone-21.1.1.850.qdz |
Модель микросхемы написана на самом корпусе микросхемы на плате; её же можно найти в столбце «Семейство ПЛИС» таблицы раздела 3.

2. Запустите установщик и примите условия лицензионного соглашения.

3. Путь установки оставьте предложенный по умолчанию.

4. Если файл .qdz лежал рядом с установщиком,
на этом шаге в списке Devices появится ваша микросхема. Если файлов
несколько, отметьте галочкой только нужную серию — остальные занимают место
без пользы.

5. Нажмите Next и дождитесь окончания установки.

6. На последнем экране обязательно поставьте галочку Launch USB Blaster II driver installation и нажмите Finish.



Прописывать переменные окружения и PATH после
установки не нужно. Как скрипты находят Quartus — в разделе
4.1.1.4.
Для прошивки платы нужен драйвер программатора. Дальше в качестве примера взята плата OMDAZZ/RzRd с программатором DDS2022-24.
1. Подключите программатор. Шлейф JTAG одним концом — к разъёму JTAG на плате (не к AS!), другим — к программатору. Обратите внимание на выемку в разъёме: шлейф вставляется только одной стороной.


2. Подключите питание платы кабелем USB B-type и включите её кнопкой рядом с разъёмом. Готовая к работе плата выглядит так:


3. Откройте Диспетчер устройств (быстрее всего — через поиск у кнопки «Пуск»). После подключения программатора в списке появится новое устройство.
4. Нажмите на нём правой кнопкой → Обновить драйвер → Найти драйверы на этом компьютере.
5. В качестве папки поиска укажите каталог установки
Quartus. Драйвер лежит внутри него, в подкаталоге
quartus/drivers/usb-blaster.


Если устройство в диспетчере не появилось: попробуйте другой разъём USB (в том числе USB 2.0 вместо 3.0 — работают не все), проверьте подключение JTAG и то, что на программаторе горит светодиод. Если на семисегментном индикаторе OMDAZZ разом горят все сегменты, плата неисправна. Если ничего не помогло, напишите модераторам Школы.
USB Blaster III. У программаторов разных
поколений разные идентификаторы USB, и драйвер нужен свой. У плат с USB
Blaster III — к ним относится DE23-Lite — идентификатор продукта
6022. Под Windows драйвер ставится так же, из каталога Quartus;
для Linux нужно правило udev, см. раздел 4.2.1.2.
1. Запустите Quartus. Должно появиться окно выбора; нажмите Run the Quartus Prime Software.

2. Если плата есть, откройте окно Programmer.

3. Нажмите Hardware Setup.

4. Если в выпадающем списке есть USB-Blaster, драйвер установлен правильно.


5. Добавьте через Add File готовый файл прошивки
.sof и нажмите Start. Надпись
Successful означает, что Quartus и программатор работают.



Отдельный файл прошивки для проверки скачивать не
обязательно: достаточно собрать любой пример репозитория скриптом
03_synthesize_for_fpga.bash — он и соберёт, и прошьёт плату.
Прежняя редакция инструкции предлагала скачать top.sof с
Яндекс.Диска; этот путь остаётся рабочим, но необязателен.


Окно Programmer после успешной прошивки
В репозитории BGM синтез, прошивка и запуск графического интерфейса выполняются одними и теми же скриптами для всех САПР:
./03_synthesize_for_fpga.bash # синтез и прошивка
./04_configure_fpga.bash # только прошивка
./05_run_gui_for_fpga_synthesis.bash # графический интерфейс
За поиск Quartus отвечает файл
scripts/steps/00_setup_altera.source_bash. Порядок поиска такой,
и первый успешный шаг прекращает дальнейший поиск:
QUARTUS_ROOTDIR — если переменная задана и указывает на
каталог quartus внутри установки, берётся именно он, без
всякого поиска.quartus в PATH — если он уже доступен и
подходит для вашей платы, скрипт ничего не меняет.INTEL_FPGA_HOME, затем ALTERA_HOME, затем
QUARTUS_HOME — каталог, внутри которого лежат каталоги
установок./opt,
/tools (под Windows — диски /c, /d,
/e).В каждом из этих мест проверяются все имена каталогов, которыми пользовались установщики Altera и Intel за годы:
altera altera_lite altera_std altera_pro
intelFPGA intelFPGA_lite intelFPGA_std intelFPGA_pro
Прописывать PATH не обязательно.
Прежняя редакция инструкции требовала добавить QUARTUS_ROOTDIR,
QSYS_ROOTDIR и PATH в ~/.bashrc. Сейчас
это необязательно: при установке в стандартное место скрипты находят Quartus
сами. Переменные остаются полезными в двух случаях — когда установка лежит в
нестандартном каталоге и когда на машине несколько версий и вы хотите
принудительно выбрать одну.
Имя каталога ничего не говорит ни о версии, ни о редакции.
На машине разработчика altera_lite/25.1std содержит редакцию
Lite, а altera/13.1 — редакцию Web (так раньше называлась Lite).
Поэтому скрипт не доверяет именам: он запускает quartus_sh и
спрашивает у самого инструмента его версию, редакцию и список микросхем,
которые тот умеет собирать.
Дальше скрипт берёт из файла проекта вашей платы
(boards/<плата>/board_specific.qsf) конкретную микросхему и
оставляет только те установки, которые её поддерживают. Среди оставшихся
выбор идёт так:
Опрос установки занимает от одной до пяти секунд,
поэтому ответ кэшируется в
~/.cache/basics-graphics-music и привязывается к дате файла
quartus_sh. Обычный запуск лабораторной работы на это время не
тратит.
Если ни одна установка не умеет собирать проект под микросхему вашей платы,
скрипт сообщает об этом сразу, называя микросхему и перечисляя найденные
версии, — вместо того чтобы выбрать неподходящую и упасть позже посреди
синтеза. Если при этом вы сами указали установку через
QUARTUS_ROOTDIR или через INTEL_FPGA_HOME /
ALTERA_HOME / QUARTUS_HOME, скрипт вам доверяет:
он выдаёт предупреждение и продолжает работу.
Vivado нужен только для плат с ПЛИС AMD Xilinx. Для плат на Altera, Gowin или Lattice он не требуется.
Образ установщика Vivado занимает более 80 ГБ, а установленная программа — более 50 ГБ. Проверьте свободное место заранее.
Лабораторные работы рассчитаны на версию 2022.2. Сообщество Школы проверяло, что работы выполняются и на версиях 2018, 2021 и 2023, однако рекомендуется именно 2022.2.
1. На приветственном экране установщика нажмите Next.

2. Поставьте флажок напротив Vivado.
3. На шаге Product Devices отметьте серии микросхем, которые поддерживаются в репозитории: Zynq-7000, Artix-7, Kintex-7 и Spartan-7. Остальные серии занимают десятки гигабайт без пользы.


4. Примите условия лицензионного соглашения, оставьте путь установки по умолчанию и нажмите Install.
Прежняя редакция называла только Zynq-7000, Artix-7 и Kintex-7. В репозитории сейчас есть и платы на Spartan-7 (например, Digilent Cmod S7), поэтому эту серию тоже стоит отметить.
За поиск отвечает scripts/steps/00_setup_xilinx.source_bash.
Порядок такой же по смыслу, как у Quartus:
XILINX_VIVADO — прямое указание на каталог конкретной
версии;vivado в PATH;XILINX_HOME — каталог, внутри которого лежат установки;/opt,
/tools; под Windows — /c, /d,
/e.Внутри каждого места проверяются каталоги Xilinx,
AMD и AMDDesignTools, причём в двух раскладках:
<место>/<вендор>/Vivado/<версия> — Vivado 2024.1 и старше
<место>/<вендор>/<версия>/Vivado — Vivado 2024.2 и новее
Начиная с выпуска 2024.2 AMD поменяла раскладку каталогов:
номер версии теперь стоит выше названия продукта, а каталог вендора
называется уже не обязательно Xilinx. Прежние версии скриптов
из-за этого не находили Vivado; теперь поддерживаются обе раскладки.
Если установок несколько, выбирается самая новая версия. Прописывать
PATH не нужно.
Отдельное руководство по установке Vivado с иллюстрациями есть в самом репозитории: docs/vivado_installation_guide.
Подробное сравнение: verilog-meetup.com — Can Gowin beat Xilinx and Altera in the educational market?
Для скачивания нужно зарегистрироваться на сайте производителя. Школа рассчитывает на версию V1.9.9 Education.
Для плат Tang Primer 25K и Tang Mega 138K (семейства GW5A и GW5AST) версии 1.9.9 недостаточно — эти микросхемы появились позже. Используйте более новую Gowin EDA.
1–2. На приветственном экране нажмите Next и примите лицензионное соглашение.


3–4. Поставьте все галочки, чтобы установить все компоненты. Путь оставьте по умолчанию и нажмите Install.


5–6. По завершении поставьте галочки установки драйверов программатора и нажмите Finish. В окне FTDI CDM Drivers нажмите Extract.


7–9. Далее → принять соглашение → дождаться окончания → Готово.



10–12. В области уведомлений замигает значок щита — нажмите на него, оставьте путь по умолчанию, Install, затем Close.



Файл scripts/steps/00_setup_gowin.source_bash проверяет:
GOWIN_VERSION_DIR — каталог конкретной версии (внутри него
должны быть подкаталоги IDE и Programmer);GOWIN_HOME — каталог, внутри которого лежат версии;/opt, /tools, а в них
подкаталоги Gowin или gowin.Если версий несколько, берётся самая новая (каталоги вида
Gowin_V1.9.9 сортируются, выбирается последний), и выдаётся
предупреждение со списком найденного.
OSS CAD Suite — один архив, в котором собран весь открытый поток: Yosys (синтез), nextpnr (размещение и трассировка), openFPGALoader (прошивка), а также свои сборки Icarus Verilog, GTKWave и Verilator. Это единственный способ работать с платами на ПЛИС Lattice (ECP5, iCE40), и альтернативный способ работать с платами Gowin.
~/oss-cad-suite — то есть прямо в домашнем каталоге.
Скрипты BGM ищут именно по этому пути, а также в
~/Downloads/oss-cad-suite.Больше ничего делать не нужно: скрипт
scripts/steps/00_setup_yosys.source_bash сам найдёт каталог и
подключит его командой source ~/oss-cad-suite/environment.
Прописывать PATH вручную не требуется.
Если каталога нет, скрипт ищет yosys в системе и, не найдя,
выдаёт сообщение со ссылкой на страницу выпусков.
Открытый поток развивается быстро, и часть примеров репозитория на нём пока работает не полностью — особенно для плат Lattice. Если вы столкнётесь с таким примером, это хорошая тема для самостоятельной работы: Школа рассчитывает на помощь учащихся в отладке таких случаев. Сообщайте о найденном через issues в репозитории.
Icarus Verilog — открытый симулятор, которого достаточно для моделирования всех примеров репозитория. GTKWave или Surfer — программы для просмотра временных диаграмм в формате VCD.
Нужна версия 13, лучше 14. Прежняя редакция инструкции описывала версию 12. Скрипты репозитория проверяют версию при запуске: ниже 12 выдаётся ошибка, на 12 — предупреждение с рекомендацией перейти на 13 или 14. Часть примеров использует конструкции SystemVerilog, которые понимает только версия 13 и новее.
Где скачать: bleyer.org/icarus — сборки для Windows. Берите версию 14.
1–2. Запустите установщик и примите лицензионное соглашение.


3–4. Установщик предупреждает, что в пути установки не
должно быть пробелов. Путь оставьте по умолчанию
(C:\iverilog).


5–6. Поставьте обе галочки для полной установки — она включает GTKWave. Имя папки в меню «Пуск» оставьте по умолчанию.


7–8. Поставьте галочку Add executable folder(s) to the user PATH и нажмите Install.


Файл scripts/steps/00_setup_icarus.source_bash:
iverilog доступен в PATH — используется
он;/c/iverilog (то есть
C:\iverilog), под Linux и macOS —
~/install/iverilog;iverilog -V, разбирает номер версии и
предупреждает, если она слишком старая;-g2023 — она нужна части
примеров.Icarus из OSS CAD Suite тоже поддерживается. Если вы поставили OSS CAD Suite (раздел 4.1.4), отдельная установка Icarus не обязательна: в архиве есть и симулятор, и GTKWave, и скрипты их используют.
Если вместо GTKWave в системе найдена программа surfer,
скрипты используют её и берут файл настроек surfer.scr вместо
gtkwave.tcl. См. раздел 4.1.7.
1–3. Скачайте установщик с code.visualstudio.com, запустите его и примите лицензионное соглашение.



4–5. Путь установки оставьте по умолчанию. В пути не должно быть русских букв. Имя папки в меню «Пуск» оставьте как есть.


6–7. Полезно поставить галочки «Создать значок на Рабочем столе» и оба пункта «Открыть с помощью Code» — они добавляют команду в контекстное меню проводника.


8. Установите расширение для подсветки синтаксиса: вкладка расширений → в поиске SystemVerilog → SystemVerilog - Language Support → Install.

Этого раздела в прежней редакции не было. Surfer — современная альтернатива GTKWave для просмотра временных диаграмм. Существует в двух видах, и полезны оба.
Откройте вкладку расширений, найдите Surfer и установите. После
этого файлы .vcd открываются прямо в редакторе, рядом с кодом —
не нужно переключаться в отдельное окно.
Скачайте сборку со страницы выпусков:
gitlab.com/surfer-project/surfer/-/releases,
и поместите исполняемый файл в каталог, который есть в PATH.
Скрипты репозитория проверяют наличие команды surfer и, если
она есть, используют Surfer вместо GTKWave автоматически. Для каждого примера
в репозитории рядом с gtkwave.tcl лежит файл
surfer.scr с таким же набором отображаемых сигналов.
Git нужен, чтобы скачать репозиторий с примерами и получать обновления. Кроме того, вместе с ним под Windows устанавливается Git Bash — оболочка, в которой запускаются все скрипты репозитория.
Под Windows скрипты BGM запускаются именно из
Git Bash, а не из cmd.exe и не из PowerShell.
Это обязательное условие.
1–3. Скачайте установщик с git-scm.com/downloads/win, примите соглашение, следующие три окна оставьте по умолчанию.



4. В качестве редактора по умолчанию удобно выбрать из списка Visual Studio Code.



5. Поставьте флажок Override the default branch name
for new repositories и оставьте имя main.



6. Остальные страницы оставьте по умолчанию и завершите установку.



7. После установки в системе появятся Git Bash и Git CMD, а в контекстном меню проводника — пункты Open Git GUI here и Open Git Bash here.


mkdir -p ~/projects
cd ~/projects
git clone https://github.com/chipdesignschool/basics-graphics-music.git
git clone https://github.com/chipdesignschool/systemverilog-homework.git
Прежняя редакция предлагала клонировать репозитории с
gitflic.ru, в том числе valid-ready-etc. Эти адреса
больше не используются: valid-ready-etc устарел, а актуальные
репозитории живут на GitHub (см. разделы 1.2 и 1.3). Пункт про
main вместо master в настройках Git теперь
существенен именно поэтому — на GitHub основная ветка называется
main.
RARS — симулятор системы команд RISC-V. В нём выполняются
упражнения по ассемблеру из раздела курса про архитектуру процессора, и его
запускает скрипт 10_run_instruction_set_simulator.bash.
RARS распространяется одним исполняемым jar-файлом, поэтому нужна Java 8 или новее.
1. Скачайте сборку OpenJDK с
jdk.java.net и распакуйте, например, в
C:\Program Files\OpenJDK.
2. Создайте системную переменную JAVA_HOME с
путём к распакованному каталогу и добавьте в PATH значение
%JAVA_HOME%\bin.
3. Проверьте установку командой в cmd:
java --version



4. Скачайте rars1_6.jar со страницы выпусков:
github.com/TheThirdOne/rars/releases.


Скрипт 00_setup_rars.source_bash ищет jar-файл в домашнем
каталоге и в каталоге загрузок; если найдено несколько версий, берётся самая
новая.
Этого раздела в прежней редакции не было. Он нужен для раздела курса, где в ПЛИС синтезируется процессорное ядро, а на нём исполняются программы на C и ассемблере.
В репозитории есть три процессорных ядра RISC-V, которые можно синтезировать в ПЛИС:
aps — ядро из МИЭТ;yrv — компактное ядро с отладочным интерфейсом;picorv32 — известное небольшое ядро.Выбор ядра — скриптом
13_choose_another_riscv_core_for_software.bash.
Чтобы собрать программу для такого ядра, нужен кросс-компилятор. В
репозитории используется сборка XPACK RISC-V GCC
(riscv-none-elf-gcc).
~/xpack-riscv-none-elf-gcc-14.2.0-3/, внутри которого есть
подкаталог bin.Скрипт 00_setup_riscv.source_bash ищет каталоги с именем вида
xpack-riscv-none-elf-gcc-* на глубину до двух уровней от
домашнего каталога, а также каталог xpack/bin. Если найдено
несколько версий, выдаётся предупреждение и берётся одна из них.
Сборка и загрузка программы:
./11_build_software_to_run_on_cpu.bash
./12_upload_software_to_the_board_using_uart.bash
./14_run_terminal_program.bash
Скрипт 14_run_terminal_program.bash работает с
тремя терминалами: minicom, picocom и
putty. Скрипт сам находит те, которые установлены, предлагает
выбрать порт UART из доступных и запускает терминал с нужной скоростью. Под
Windows проще всего поставить PuTTY, под Linux — minicom или picocom.
Прежняя редакция описывала OpenLane, устанавливаемый через Docker, и этот раздел нужно считать полностью устаревшим. В репозитории теперь используется LibreLane — продолжение того же проекта, которое ставится через Nix.
LibreLane — открытый поток, превращающий код на SystemVerilog в топологию микросхемы (RTL-to-GDSII). Работает только под Linux и macOS; под Windows нужен WSL или виртуальная машина с Linux (см. раздел 4.2.11 и файл docs/wsl.md репозитория).
# установить менеджер пакетов Nix
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
# в каталоге с LibreLane
nix develop
Внутри оболочки nix develop команда librelane
доступна, и скрипты репозитория её найдут.
Укажите путь к каталогу с исполняемым файлом в переменной
LIBRELANE_PATH:
export LIBRELANE_PATH=/путь/к/librelane/bin
Скрипт 00_setup_libre_lane.source_bash добавит этот путь в
PATH. Если команда librelane так и не найдена,
выдаётся сообщение с обоими способами установки.
./07_synthesize_for_asic.bash # синтез в СБИС
./08_visualize_asic_synthesis_results_1.bash # просмотр топологии
./09_visualize_asic_synthesis_results_2.bash
Просмотрщик выбирается переменной LAYOUT_VIEWER и может быть
openroad (по умолчанию) или klayout.



Снимки экрана из прежней редакции, относящиеся к OpenLane. Оставлены для сравнения: сам поток заменён на LibreLane.
Порядок тот же, что и для Windows, и нумерация подразделов совпадает. Там, где шаги не отличаются, они не повторяются — даётся ссылка на соответствующий подраздел 4.1.
Под Linux скрипты запускаются в обычном терминале — отдельная оболочка, как Git Bash под Windows, не нужна.
Quartus нужен только для плат на ПЛИС Altera. Если ваша плата на Xilinx, Gowin или Lattice — переходите к подразделам 4.2.2–4.2.4.
1. Скачайте установщик
QuartusLiteSetup-21.1.0.842-linux.run и архив
.qdz для вашей микросхемы (см. таблицу в подразделе 4.1.1.1),
положив их в одну папку.
2. В терминале:
chmod +x QuartusLiteSetup-21.1.0.842-linux.run
./QuartusLiteSetup-21.1.0.842-linux.run



Каталог установки не должен содержать пробелов и русских букв — это приводит к сбоям Quartus.
Дальше установщик ведёт себя так же, как под Windows: предлагает принять
соглашение, выбрать каталог и показывает список Devices с
микросхемами из найденных файлов .qdz. Если список пуст, значит
файл .qdz не лежал рядом с установщиком; его можно добавить
позже через меню Tools → Install Devices.
Переменные окружения задавать не нужно.
Прежняя редакция требовала дописать в ~/.bashrc такие строки:
export QSYS_ROOTDIR=…
export QUARTUS_ROOTDIR=…
PATH=$PATH:/home/user/intelFPGA_lite/20.1/quartus/bin:…
Сейчас это необязательно — скрипты находят Quartus сами (подраздел 4.2.1.4).
Заметьте также, что в прежнем примере номера версий не совпадали между
строками (21.1 в двух переменных и 20.1 в PATH) — такая
опечатка приводила к тому, что в PATH попадал
несуществующий каталог.
Без правила udev программатор доступен только пользователю root, и Quartus его «не видит».
1. Подключите плату и программатор и убедитесь, что система их видит:
lsusb
В списке должна появиться строка с идентификатором производителя
09fb — это Altera.
2. Создайте файл правил:
sudo nano /etc/udev/rules.d/51-usbblaster.rules
и запишите в него:
# USB Blaster
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", MODE:="0666", SYMLINK+="usbblaster/%k"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6002", MODE:="0666", SYMLINK+="usbblaster/%k"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6003", MODE:="0666", SYMLINK+="usbblaster/%k"
# USB Blaster II
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6010", MODE:="0666", SYMLINK+="usbblaster2/%k"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6810", MODE:="0666", SYMLINK+="usbblaster2/%k"
# USB Blaster III (нужен для Terasic DE23-Lite)
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6022", MODE:="0666", SYMLINK+="usbblaster3/%k"
Третья группа строк — новая. USB Blaster III
(idProduct 6022) применяется в плате Terasic DE23-Lite. В прежней
редакции инструкции правил для него не было, и плата не прошивалась.
3. Примените правила и переподключите кабель программатора:
sudo udevadm control --reload
# затем выньте и вставьте кабель USB Blaster
Если в /etc/udev/rules.d/ окажутся два файла с
правилами для Blaster — например 51-usbblaster.rules и
90-altera.rules из комплекта Quartus, — ничего не сломается:
udev читает все файлы и применяет все подходящие правила.
Но если они задают разные права, победит файл, который идёт раньше по
алфавиту, потому что оператор := запрещает дальнейшие изменения.
Проверить, какое правило сработало, можно командой
udevadm test.
Шаги те же, что в подразделе 4.1.1.3: запустить Quartus, открыть Programmer, нажать Hardware Setup и убедиться, что в списке есть USB-Blaster.



В Lubuntu окно Programmer иногда не прикрепляется к краю экрана. Помогает меню Window → Attach Window.






Надпись Successful означает, что Quartus и программатор работают
Полностью так же, как под Windows, — см. подраздел
4.1.1.4. Отличается только список стандартных мест:
под Linux это домашний каталог, /opt и /tools
(под Windows на их месте корни дисков /c, /d,
/e).
Скачайте установщик с сайта AMD, сделайте его исполняемым и запустите:
chmod +x FPGAs_AdaptiveSoCs_Unified_*_Lin64.bin
./FPGAs_AdaptiveSoCs_Unified_*_Lin64.bin
Дальше диалоги те же, что под Windows (подраздел 4.1.2): выбрать Vivado, отметить серии Zynq-7000, Artix-7, Kintex-7 и Spartan-7, принять соглашение.
После установки запустите скрипт установки драйверов кабеля — без него программатор не будет доступен обычному пользователю:
cd $XILINX_VIVADO/data/xicom/cable_drivers/lnx64/install_script/install_drivers
sudo ./install_drivers
Под дистрибутивами, не входящими в список официально
поддерживаемых, Vivado может не запуститься из-за отсутствия библиотеки
libtinfo.so.6 — сообщение вида couldn't load file
"libxv_tcltasks.so" и затем Failed to load feature
'core'. Причина в том, что скрипт ldlibpath.sh внутри
Vivado не знает вашего дистрибутива и не подставляет для него нужный путь.
Решение — положить совместимую библиотеку в каталог
$XILINX_VIVADO/lib/lnx64.o/Default/.
Как скрипты находят Vivado — подраздел 4.1.2; порядок одинаков на всех системах.
Скачайте архив для Linux (требуется регистрация на сайте Gowin),
распакуйте его в домашний каталог или в /opt, так чтобы
получился путь вида ~/Gowin/Gowin_V1.9.9/IDE.
Для доступа к программатору нужно правило udev — программатор плат Tang построен на микросхеме FTDI:
sudo nano /etc/udev/rules.d/91-sipeed.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", MODE:="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", MODE:="0666"
sudo udevadm control --reload
Как скрипты находят Gowin EDA — подраздел 4.1.3.
Так же, как под Windows (подраздел 4.1.4): распаковать архив в
~/oss-cad-suite и больше ничего не делать — скрипты подключат
его сами.
cd ~
tar xzf oss-cad-suite-linux-x64-*.tgz
Для Ubuntu 22.04 и новее:
sudo add-apt-repository ppa:team-electronics/ppa
sudo apt-get update
sudo apt install iverilog gtkwave
Проверьте версию:
iverilog -V

Нужна версия 13, лучше 14. Если в репозиториях дистрибутива лежит только версия 11 или 12, есть три выхода: взять Icarus из OSS CAD Suite (подраздел 4.2.4), собрать из исходников, либо поставить сборку с bleyer.org/icarus (там есть и исходники). Скрипты проверяют версию и предупреждают, если она слишком старая.
Сборка из исходников в ~/install/iverilog — путь, который
скрипты знают:
git clone https://github.com/steveicarus/iverilog.git
cd iverilog && sh autoconf.sh
./configure --prefix=$HOME/install/iverilog
make -j$(nproc) && make install
Скачайте пакет .deb с
code.visualstudio.com и
установите:
sudo dpkg -i code_*.deb








Затем поставьте расширения SystemVerilog - Language Support и Surfer — так же, как под Windows (подразделы 4.1.6 и 4.1.7)
Скачайте сборку для Linux со страницы релизов
gitlab.com/surfer-project/surfer,
распакуйте и положите исполняемый файл в каталог, который есть в
PATH — например ~/.local/bin:
mkdir -p ~/.local/bin
tar xzf surfer-*-linux.tar.gz -C ~/.local/bin --strip-components=1 surfer/surfer
surfer --version
Чтобы скрипты открывали диаграммы в Surfer, а не в GTKWave:
export WAVE_VIEWER=surfer
Подробнее о выборе просмотрщика — подраздел 4.1.7.
sudo apt install git
Настройте имя и адрес — иначе Git откажется делать коммиты:
git config --global user.name "Имя Фамилия"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
Отдельная оболочка не нужна: под Linux скрипты работают в обычном терминале.
Нужна Java — под Linux она ставится одной командой, переменные
JAVA_HOME и PATH настраивать не требуется:
sudo apt install default-jre
java --version
Затем скачайте rars1_6.jar со страницы релизов
(github.com/TheThirdOne/rars)
в домашний каталог и запустите:
java -jar rars1_6.jar
Скрипт 10_run_instruction_set_simulator.bash находит файл
.jar сам — см. подраздел 4.1.9.
Компилятор. Распакуйте архив XPACK в домашний каталог — скрипты найдут его сами (подраздел 4.1.10):
cd ~
tar xzf xpack-riscv-none-elf-gcc-*-linux-x64.tar.gz
Терминальная программа. Нужна, чтобы загрузить программу в плату через UART и общаться с процессором внутри ПЛИС:
sudo apt install minicom picocom
Скрипт 14_run_terminal_program.bash выбирает программу
переменной TERMINAL_PROGRAM (minicom,
picocom или putty).
Чтобы иметь доступ к последовательному порту без sudo,
добавьте себя в группу dialout:
sudo usermod -aG dialout $USER
# затем перезайдите в систему
Группа — самая частая причина ошибки
Permission denied на /dev/ttyUSB0. Изменение
вступает в силу только после нового входа в систему, перезапуска терминала
недостаточно.
См. подраздел 4.1.11 — установка через Nix одинакова для Linux и macOS. Под Linux это основной, штатный способ: ни WSL, ни виртуальная машина не нужны.
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
nix develop
./07_synthesize_for_asic.bash
Под macOS нет ни Quartus, ни Vivado. Altera и AMD не выпускают эти программы для macOS ни в каком виде. Значит, платы на ПЛИС Altera и Xilinx с macOS напрямую использовать нельзя — нужна виртуальная машина с Linux или Windows (разделы 5 и 7), либо отдельный компьютер.
Зато полностью работают и не требуют никаких ухищрений:
Иными словами, на Mac удобно учиться с платой Tang Nano 9K — это ещё одна причина, по которой Школа рекомендует её как недорогой вариант.
В остальном macOS ведёт себя как Linux: те же скрипты, тот же терминал, те же команды. Но есть четыре особенности, которые заложены в сами скрипты.
На компьютерах Mac с процессором Intel Gowin EDA не запускается, и скрипт сообщает об этом прямо:
Gowin IDE is not working on your platform (Mac x64?)
На Mac с процессорами M1 и новее всё работает.
Под macOS Gowin EDA поставляется как приложение, и исполняемые файлы лежат
внутри него. Скрипт ищет каталоги GowinIDE.app,
Gowin и gowin, а внутри них дополнительно проверяет
подкаталог:
Contents/Resources/Gowin_EDA
Поэтому путь к установке выглядит, например, так:
/Applications/GowinIDE.app/Contents/Resources/Gowin_EDA/IDE/bin.
Переменные DYLD_FRAMEWORK_PATH и
DYLD_LIBRARY_PATH, без которых Gowin EDA под macOS не находит
свои библиотеки, скрипт выставляет сам — вручную их задавать не нужно.
macOS помечает всё скачанное из интернета атрибутом
com.apple.quarantine и отказывается запускать такие программы.
Это самая частая причина, по которой на Mac «не работают» Gowin EDA,
OSS CAD Suite и компилятор XPACK.
Скрипты репозитория это обнаруживают и подсказывают команду, но снять атрибут должны вы сами. Проверяются:
IDE и
Programmer;~/oss-cad-suite и ~/Downloads/oss-cad-suite;Команда для любого из них:
xattr -rd com.apple.quarantine ~/oss-cad-suite
# если выдаёт Permission denied:
sudo xattr -rd com.apple.quarantine ~/oss-cad-suite
Обнаружив атрибут, скрипт задаёт вопрос
Abort, Retry, Ignore? [a/R/i]. Это значит: откройте второе окно
терминала, выполните подсказанную команду xattr, вернитесь и
нажмите Enter — вариант Retry выбран по умолчанию, и
скрипт проверит атрибут заново. Ответ i продолжит работу без
снятия атрибута (скорее всего, с ошибкой), a прервёт
выполнение.
На Mac с процессором M1 и новее скрипты открывают диаграммы в Surfer, а не в GTKWave, и требуют, чтобы он был установлен:
brew install surfer # либо скачайте сборку со страницы релизов
На Mac с процессором Intel используется GTKWave, причём запускается исполняемый файл внутри приложения:
/Applications/gtkwave.app/Contents/MacOS/gtkwave-bin
Поэтому там достаточно перетащить gtkwave.app в
/Applications. Запуск через open -a gtkwave не
годится: в этом случае GTKWave не читает файл сценария
gtkwave.tcl, который заранее расставляет сигналы на
диаграмме, — в комментарии к скрипту это отмечено отдельно.
Ещё одна мелочь, заложенная в скрипты: при поиске
компилятора XPACK под macOS каталог Desktop исключается из
обхода. Это сделано, чтобы macOS не спрашивала разрешение на доступ к файлам
рабочего стола при каждом запуске.
Установка остального через Homebrew:
brew install git icarus-verilog
brew install surfer # на Apple Silicon
brew install gtkwave # на Mac с процессором Intel
brew install --cask visual-studio-code
Раздел про macOS написан на основе кода скриптов
репозитория (обработка darwin в
00_setup_gowin, 00_setup_yosys,
00_setup_icarus, 00_setup_riscv и
00_setup.source_bash), а не проверен на
живой машине с macOS. Если вы столкнётесь с расхождением, сообщите об этом —
раздел будет исправлен.
Для раздела курса про функциональную верификацию нужен симулятор Questa. Он распространяется отдельно и может требовать лицензию, поэтому Школа выдаёт готовую виртуальную машину с установленным симулятором.
.vbox из распакованного каталога.1234.vsim. Должно появиться приветственное окно
симулятора.



При затруднениях напишите в чат Школы синтеза цифровых схем.
Вместо установки всего перечисленного вручную можно получить готовый образ SSD с предустановленным ПО и загружаться с него. Это удобно для занятий в учебных классах.
Основа раздела — статья Юрия Панчула: habr.com/ru/articles/754262.
Образ содержит ПО для плат на ПЛИС Altera (Quartus). Vivado и Gowin EDA при необходимости ставятся отдельно. Questa в образе может требовать лицензию.
Скачайте файл образа .img (ссылку даёт Школа).
Про GPT. Таблиц разделов GPT на диске две — основная и резервная. Образ (около 50 ГБ в распакованном виде) меньше любого современного SSD, поэтому после записи резервная таблица остаётся нетронутой и мешает первой загрузке. Поэтому вторую таблицу нужно стереть.
Это делает скрипт из самого репозитория:
scripts/admin/erase_ssd_gpt_and_write_bootable_image.bash
Положите скрипт в каталог с образом (или образ — в каталог со скриптом) и
запустите под sudo. Скрипт проверит, что образ один, спросит,
какой диск перезаписать, убедится, что диск не смонтирован, и запишет образ.
Операция занимает десятки минут.
Подключите SSD к выключенному компьютеру, включите его и нажимайте клавишу входа в меню загрузки:
| Производитель | Клавиша |
|---|---|
| ASUS, Acer | Del или F2 |
| Dell | F12 или F2 |
| HP | F10 |
| Lenovo | F2 или Fn+F2 (ноутбуки), F1 (десктопы), Enter затем F1 (ThinkPad) |
| MSI | Del |
| Samsung | F2 |
Образ поддерживает и UEFI, и устаревшую Legacy-загрузку.




Если клавиши при включении не срабатывают (так бывает из-за быстрой загрузки Windows), воспользуйтесь средствами самой Windows: Параметры → Восстановление → Особые варианты загрузки → Перезагрузить сейчас, затем Use a device и выберите пункт Linpus lite (вариант EFI USB Device работает не всегда).




Далее загрузится Simply Linux. Логин verilog, пароль
verilog.



Подключитесь к интернету и обновите примеры. Если каталог уже есть:
cd ~/projects/basics-graphics-music
git pull
Если каталога нет:
cd ~/projects
git clone https://github.com/chipdesignschool/basics-graphics-music.git
git clone https://github.com/chipdesignschool/systemverilog-homework.git
Прежняя редакция предлагала клонировать с
gitflic.ru и упоминала репозиторий
valid-ready-etc. Он устарел; его материал вошёл в BGM. Актуальные
адреса — в разделах 1.2 и 1.3.
Сначала выберите плату:
cd ~/projects/basics-graphics-music
./check_setup_and_choose_fpga_board.bash
Скрипт покажет список поддерживаемых плат, запомнит ваш выбор в файле
fpga_board_selection в корне репозитория и предложит создать
рабочие каталоги для всех примеров.
Затем соберите и прошейте пример:
cd labs/1_basics/1_01_and_or_not_xor_de_morgan
./03_synthesize_for_fpga.bash
Имена каталогов примеров изменились: теперь они
сгруппированы по разделам курса —
labs/1_basics/1_01_and_or_not_xor_de_morgan вместо прежнего
labs/01_and_or_not_xor_de_morgan.
Если прошивка не удалась с первого раза, переподключите кабель USB Blaster и запустите только прошивку:
./04_configure_fpga.bash
После этого можно нажимать кнопки на плате и наблюдать за светодиодами в соответствии с кодом примера.
Если загружаться с отдельного SSD неудобно, тот же образ можно запустить в виртуальной машине.
.img.qemu-img:
qemu-img convert -f raw -O vdi образ.img образ.vdi.vdi как существующий жёсткий диск.verilog, пароль verilog.










Прошивка платы из виртуальной машины требует передать USB-устройство внутрь машины (Устройства → USB), и для VirtualBox нужен Extension Pack. Если программатор упорно не определяется, проще работать с платой из основной системы, а виртуальную машину использовать только для моделирования и верификации.
Примеры в репозитории сгруппированы по разделам курса. Ниже — краткая карта, по статье habr.com/ru/articles/1071736.
| Раздел | О чём | Что получается на плате |
|---|---|---|
1_basics |
Логические элементы, мультиплексоры, D-триггеры, счётчики, сдвиговые регистры, конечные автоматы | Светодиоды, семисегментный индикатор, кнопки |
2_graphics |
Генерация изображения комбинационной логикой, затем с памятью | Картинка на VGA, HDMI или ЖК-экране; игры |
3_music |
Распознавание нот через микрофон, синтез звука через ЦАП | Звук из динамика, определение сыгранной ноты |
4_microarchitecture |
Конвейеры, очереди FIFO, управление потоком по кредитам | То, о чём спрашивают на собеседованиях |
5_cpu |
Процессор schoolRISCV (около 300 строк на Verilog, около десятка
команд RISC-V), а также ядра picorv32, yrv,
aps |
Собственный процессор в ПЛИС, исполняющий ваши программы |
Разделы 3–5 курса Школы соответствуют этой структуре: ассемблер RISC-V в симуляторе RARS, затем микроархитектура процессорного ядра, затем интеграция ядра в систему — ввод-вывод от датчиков и параллелизм через прерывания. Пример Femto Threads реализует переключение контекста задач примерно в 400 строках ассемблера, то есть многопоточность на синтезированном вами процессоре.
Каждый пример — отдельный каталог с одинаковым набором скриптов. Порядок работы обычно такой:
./check_setup_and_choose_fpga_board.bashlab_top.sv — это
то, что предлагается изменить../02_simulate_rtl.bash./03_synthesize_for_fpga.bashПолный перечень скриптов:
| Скрипт | Что делает |
|---|---|
| 01_clean | удалить результаты предыдущих запусков |
| 02_simulate_rtl | моделирование в Icarus Verilog, диаграммы в GTKWave или Surfer |
| 03_synthesize_for_fpga | синтез, размещение, трассировка и прошивка — одной командой |
| 04_configure_fpga | только прошивка уже собранного битстрима |
| 05_run_gui_for_fpga_synthesis | открыть проект в графическом интерфейсе САПР |
| 06_choose_another_fpga_board | выбрать другую плату |
| 07_synthesize_for_asic | синтез в заказную микросхему через LibreLane |
| 08_, 09_visualize_asic_… | просмотр топологии (OpenROAD, KLayout) |
| 10_run_instruction_set_simulator | запуск RARS |
| 11_build_software_to_run_on_cpu | сборка C и ассемблера компилятором XPACK |
| 12_upload_software_to_the_board_using_uart | загрузка программы в плату через UART |
| 13_choose_another_riscv_core_for_software | выбрать ядро: aps, yrv, picorv32 |
| 14_run_terminal_program | терминал: minicom, picocom или putty |
Руководство для начинающих с разбором первого примера: verilog-meetup.com — Beginner's guide, а также файл docs/beginner-s-guide-to-basics-graphics-music.md в репозитории.
SVH — это набор небольших задач с автоматической проверкой. Структура простая: в файле задачи есть незаполненный модуль, рядом — тестовое окружение, которое сообщает, прошло решение или нет.
Что нужно: только Icarus Verilog и Git. Плата и САПР не требуются, поэтому SVH удобно начинать сразу, не дожидаясь получения платы.
git clone https://github.com/chipdesignschool/systemverilog-homework.git
cd systemverilog-homework
# внутри каталога задачи:
./run.bash
Темы задач идут от простых комбинационных схем к арифметике, конечным
автоматам, конвейерам и интерфейсам с квитированием — то есть к тем же
микроархитектурным приёмам, что и раздел
4_microarchitecture в BGM, но без привязки к плате.
Три копии репозитория — как и у BGM; для занятий Школы берите версию
chipdesignschool:
| Школа синтеза | github.com/chipdesignschool/systemverilog-homework |
| Разработка | github.com/yuri-panchul/systemverilog-homework |
| Международные семинары | github.com/verilog-meetup/systemverilog-homework |
Tiny Tapeout — сервис, который собирает проекты многих участников на один кристалл и отправляет его на фабрику. Такой способ изготовления называется MPW (multi-project wafer) или «шаттл»: стоимость маски делится между всеми участниками, и поэтому изготовление одной небольшой схемы становится доступным для университета, а иногда и для отдельного человека.
Для BGM есть готовый шаблон, который берёт из примера модуль
lab_top — то есть ровно тот файл, который учащийся менял,
отлаживая пример на плате. Изготовление идёт на фабрике института IHP
(Leibniz-Institut für innovative Mikroelektronik) в Германии.
./07_synthesize_for_asic.bash
./08_visualize_asic_synthesis_results_1.bash
Это тот же поток RTL-to-GDSII, который применяется и при настоящем
изготовлении, поэтому ошибки видны заранее.lab_top.Подробнее:
Стоимость участия и даты шаттлов меняются, и в источниках, доступных при подготовке этой редакции, конкретных цифр не было. Смотрите сайт Tiny Tapeout.
В каталоге docs/ лежат отдельные файлы, которые полезно читать вместе с этой инструкцией:
| Файл | О чём |
|---|---|
| IntelQuartus.md | замечания по Quartus |
| GowinEDA.md | замечания по Gowin EDA |
| Yosys.md | открытый поток |
| vivado_installation_guide/ | установка Vivado с иллюстрациями |
| wsl.md | работа под Windows Subsystem for Linux |
| qemu.md | запуск в QEMU |
| beginner-s-guide-to-basics-graphics-music.md | руководство для начинающих |
| boards/README.md | таблица плат (см. раздел 3) |
В скриптах репозитория есть поддержка ещё одного САПР —
Efinity для ПЛИС Efinix
(scripts/steps/00_setup_efinity.source_bash, только под Linux).
Установка здесь не описана сознательно: единственная плата на Efinix
(Trion T20) лежит в каталоге
boards/zzz_postponed_and_retired/, то есть в число действующих
плат не входит и в таблицу раздела 3 не попадает. Если такая плата у вас
появится, смотрите скрипт: он ищет Efinity по переменной
EFINITY_HOME и по команде efinity_sh.sh в
PATH.
Чат Школы синтеза цифровых схем — для вопросов по занятиям и по установке. Ошибки и несоответствия в самих примерах лучше оформлять как issue в репозитории: это самый надёжный способ, чтобы о проблеме узнали разработчики.
Нет. Только тот, который соответствует вашей плате: Quartus для Altera, Vivado для Xilinx, Gowin EDA или OSS CAD Suite для Gowin, OSS CAD Suite для Lattice. Если платы нет, не нужен ни один: примеры моделируются в Icarus Verilog, а задачи SVH выполняются целиком без платы.
Да. Моделирование в Icarus Verilog с просмотром диаграмм покрывает значительную часть курса, а весь репозиторий SVH вообще не требует платы. Для графики есть возможность посмотреть результат в виде изображения, не имея монитора на плате.
Нет, если инструменты установлены в стандартные места. Скрипты находят их
сами. Переменные (QUARTUS_ROOTDIR, XILINX_VIVADO,
GOWIN_VERSION_DIR и остальные) нужны в двух случаях: установка в
нестандартном каталоге, либо несколько версий и необходимость выбрать
конкретную.
Да, и для старых плат это обязательно: Cyclone II требует Quartus II 13.0sp1, Cyclone III — 13.1, а современные платы — Quartus Lite 21.1 или новее. Все они спокойно живут рядом, а скрипты выбирают подходящую по микросхеме вашей платы.
Значит, ни одна из установленных версий не умеет собирать проект под микросхему выбранной платы. В сообщении перечислено, что найдено. Чаще всего это старая плата (нужен Quartus 13.x) или DE23-Lite (нужен Quartus Pro). См. раздел 3.1.
Запускайте их из Git Bash, а не из cmd.exe и
не из PowerShell. Git Bash устанавливается вместе с Git (раздел 4.1.8).
Скорее всего, у вас версия 11 или 12. Нужна 13, лучше 14 — часть примеров использует конструкции, которых старые версии не понимают. См. раздел 4.1.5.
Переподключите кабель программатора и запустите
./04_configure_fpga.bash — пересобирать проект заново не нужно.
Под Linux проверьте правило udev (подраздел 4.2.1.2), в том числе строку для USB
Blaster III, если у вас DE23-Lite.
Снимите атрибут карантина:
xattr -rd com.apple.quarantine ~/oss-cad-suite. См. раздел
4.3.
Tang Nano 9K с модулем ЖК-экрана и звуковыми модулями: примерно 60 долларов за комплект, быстрый синтез, работает под всеми тремя операционными системами, включая macOS. Для плат Altera и Xilinx под macOS нужна виртуальная машина.
В разделе 3 этой инструкции и в файле boards/README.md репозитория — он обновляется вместе с кодом.