Инструкция по установке ПО

Школа синтеза цифровых схем · basics-graphics-music · редакция от 5 октября 2026 года

наверх ↑1. Введение

Эта инструкция описывает установку программного обеспечения, которое нужно для лабораторных работ Школы синтеза цифровых схем, и для работы с репозиторием примеров basics-graphics-music (далее BGM).

Инструкция заменяет предыдущую редакцию, Инструкция_по_установке_ПО.pdf от 3 октября 2025 года. Фотографии и снимки экрана из той редакции сохранены. Там, где сведения устарели, рядом стоит пометка «Было верно раньше» с объяснением, что изменилось. Полный перечень расхождений собран в отдельном файле.

1.1. Школа синтеза цифровых схем

Школа синтеза цифровых схем (School of Digital Circuit Synthesis) — бесплатная образовательная программа компании YADRO, посвящённая схемотехнике и цифровому дизайну: разработке на уровне RTL, функциональной верификации и основам проектирования микросхем.

По данным сайта школы, программа объединяет более 2000 участников и 24 вуза России и Белоруссии. Занятия сезона 2026/2027 проходят по субботам с 12:00 до 15:00 по московскому времени — в университетских кластерах очно и онлайн с записью. Участие бесплатное; YADRO предлагает проектную работу со своими инженерами, стажировки и кадровый резерв.

Актуальная информация и регистрация: edu.yadro.com/chip-design-school.

1.2. Репозиторий basics-graphics-music

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 — рабочая, в ней ведётся разработка, и поведение может измениться в любой день.

Чем BGM отличается от других наборов примеров

Подробнее о структуре курса — в разделе 8 и в статье на Хабре: habr.com/ru/articles/1071736.

1.3. Репозиторий systemverilog-homework

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.

1.4. Синтез примеров в заказную микросхему

Примеры BGM можно не только запускать на ПЛИС, но и превратить в настоящую микросхему.

Было верно раньше

Прежняя редакция инструкции описывала установку OpenLane через Docker. В репозитории теперь используется LibreLane — развитие того же проекта, устанавливаемое через Nix. Старый скрипт 00_setup_open_lane.source_bash в репозитории ещё лежит, но основным стал 00_setup_libre_lane.source_bash.

наверх ↑2. Что изменилось по сравнению с прежней инструкцией

Короткий обзор; технические подробности — в соответствующих разделах, а построчный разбор ошибок прежней редакции — в файле исправлений.

ТемаЧто нового
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.

наверх ↑3. Поддерживаемые платы и требования к версиям САПР

Репозиторий поддерживает 54 плат на ПЛИС четырёх производителей. Таблица ниже — копия файла boards/README.md из репозитория; там же лежат варианты на русском, в форматах .html и .csv. Данные для этой таблицы взяты из файла boards/README.csv того же репозитория, поэтому она не может разойтись с ним.

Изготовитель ПЛИСИзготовитель платыПлатаСемейство ПЛИССАПР и подходящие версииTM1638Графика
AlteraALINXalinx_ax301Cyclone IV EQuartus с 13.0sp1 по 25.1stdнетVGA
AlteraALINXalinx_ax4010Cyclone IV EQuartus с 13.0sp1 по 25.1stdнетVGA
AlteraAlteradk_dev_3c120nCyclone IIIQuartus 13.1 и старшенетнет
AlteraMarsohodmarsohod_mcy112CycloneQuartus 9.1 SP2; с 13.0sp1 нужна лицензия †нетнет
AlteraMarsohodmarsohod_mcy316Cyclone IIIQuartus 13.1 и старшенетнет
AlteraOMDAZZomdazzCyclone IV EQuartus с 13.0sp1 по 25.1stdнетVGA + LCD
AlteraOMDAZZomdazz_epm570MAX IIQuartus с 13.0sp1 по 25.1stdнетVGA + LCD
AlteraPiswordspiswords6Cyclone IV EQuartus с 13.0sp1 по 25.1stdнетVGA
AlteraTerasicc5gxCyclone VQuartus с 13.0sp1 по 25.1stdнетHDMI/DVI
AlteraTerasicde0Cyclone IIIQuartus 13.1 и старшенетVGA
AlteraTerasicde0_cvCyclone VQuartus с 13.0sp1 по 25.1stdнетVGA
AlteraTerasicde0_nanoCyclone IV EQuartus с 13.0sp1 по 25.1stdвсегдаVGA
AlteraTerasicde0_nano_socCyclone VQuartus с 13.0sp1 по 25.1stdвсегдаVGA
AlteraTerasicde1Cyclone IIQuartus 13.0sp1 и старшенетVGA
AlteraTerasicde10_liteMAX 10Quartus 14.0.2 и новее †на выборVGA
AlteraTerasicde10_nanoCyclone VQuartus с 13.0sp1 по 25.1stdвсегдаHDMI/DVI
AlteraTerasicde1_socCyclone VQuartus с 13.0sp1 по 25.1stdнетVGA
AlteraTerasicde2Cyclone IIQuartus 13.0sp1 и старшенетVGA
AlteraTerasicde23_liteAgilex 3Quartus Pro 26.1.1нетHDMI/DVI
AlteraTerasicde2_115Cyclone IV EQuartus с 13.0sp1 по 25.1stdнетVGA
AlteraTerasicterasic_sockitCyclone VQuartus с 13.0sp1 по 25.1stdнетVGA
AlteraZEOWAAzeowaaCyclone IV EQuartus с 13.0sp1 по 25.1stdнетVGA
Alteraunknownemooc_ccCyclone IV EQuartus с 13.0sp1 по 25.1stdнетнет
AlteraunknownrzrdCyclone IV EQuartus с 13.0sp1 по 25.1stdнетVGA + LCD
AlteraunknownsaylinxCyclone IV EQuartus с 13.0sp1 по 25.1stdнетVGA
GowinMarsohodmarsohod3gw2GW1NR-9Gowin EDA, любая версия †нетHDMI/DVI
GowinSipeedtang_mega_138kGW5ASTGowin EDA, 1.9.9 и новее †всегдаHDMI/DVI + LCD
GowinSipeedtang_mega_138k_proGW5AST-138Gowin EDA, любая версия †всегдаHDMI/DVI + LCD
GowinSipeedtang_nano_20kGW2AR-18Gowin EDA, любая версия †всегдаHDMI/DVI + LCD
GowinSipeedtang_nano_4kGW1NSR-4Gowin EDA, любая версия †всегдаHDMI/DVI
GowinSipeedtang_nano_9kGW1NR-9Gowin EDA, любая версия; Yosys/OSS †всегдаHDMI/DVI + LCD
GowinSipeedtang_primer_20k_dockGW2A-18CGowin EDA, любая версия; Yosys/OSS †всегдаHDMI/DVI + LCD
GowinSipeedtang_primer_20k_liteGW2A-18Gowin EDA, любая версия †всегданет
GowinSipeedtang_primer_25kGW5AGowin EDA, 1.9.9 и новее †всегдаHDMI/DVI + VGA
GowinXunlongorangepi_msocGW5AT-138BGowin EDA, любая версия †всегданет
Lattice1BitSquaredicebreakeriCE40САПР не назначен; Yosys/OSS †на выборHDMI/DVI
LatticeColorlightcolorlight75bECP5Yosys/OSS †всегданет
LatticeColorlightcolorlightI5ECP5Yosys/OSS †всегданет
LatticeFabmicrokarnixECP5Yosys/OSS †всегданет
LatticeGreg DavillorangecrabECP5Yosys/OSS †всегданет
LatticeOlimexice40hx8k_evbiCE40Yosys/OSS †всегдаVGA
XilinxALINXalinx_ax7035bArtix-7Vivado, любая версия †нетнет
XilinxDigilentarty_a7_100Artix-7Vivado, любая версия †нетнет
XilinxDigilentarty_a7_35Artix-7Vivado, любая версия †нетнет
XilinxDigilentbasys3Artix-7Vivado, любая версия †нетVGA
XilinxDigilentcmod_s7Spartan-7Vivado, любая версия †нетнет
XilinxDigilenteclypse_z7Zynq-7000Vivado, любая версия †всегданет
XilinxDigilentnexys4Artix-7Vivado, любая версия †нетVGA
XilinxDigilentnexys4_ddrArtix-7Vivado, любая версия †нетнет
XilinxDigilentnexys_a7_100Artix-7Vivado, любая версия †нетнет
XilinxDigilentnexys_a7_50Artix-7Vivado, любая версия †нетнет
XilinxDigilentzybo_z7Zynq-7000Vivado, любая версия †нетнет
XilinxQMTechqmtech_kintex_7Kintex-7Vivado, любая версия †нетнет
Xilinxunknowna7_lite_35tArtix-7Vivado, любая версия †всегдаHDMI/DVI

Пояснения к столбцам:

Одна и та же плата встречается в репозитории в нескольких конфигурациях — с модулем TM1638 и без него, с HDMI или с одним из ЖК-экранов, со штатным САПР или с открытым потоком. Всего 112 каталогов в boards/ на 54 платы.

3.1. Три случая, когда версия Quartus критична

Для большинства плат годится любой современный Quartus Lite. Но есть три исключения, из-за которых нельзя просто поставить самую новую версию:

ПлатыМикросхемаЧто ставитьПочему
Terasic DE1, DE2Cyclone II Quartus II 13.0sp1 Версия 13.1 уже не поддерживает Cyclone II
Terasic DE0, Марсоход MCY316, DK-DEV-3C120NCyclone III Quartus II 13.1 (или 13.0sp1) Версия 21.1 и новее уже не поддерживает Cyclone III
Terasic DE23-LiteAgilex 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 того же поколения либо лицензия.

наверх ↑4. Установка САПР и сопутствующего ПО

Порядок разделов: 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 выполнять целиком без платы.

Примечание

Во всех случаях в пути к каталогу установки не должно быть русских букв и пробелов. Это касается всех перечисленных программ и является самой частой причиной необъяснимых сбоев.

4.1. Windows 10 и 11

4.1.1. Установка Quartus (для плат на ПЛИС Altera)

Quartus нужен только для плат с ПЛИС Altera (прежнее название — Intel). Если у вас плата на Xilinx, Gowin или Lattice, пропустите разделы 4.1.1–4.1.3.

Новое в этой редакции

Intel снова стала Altera. Новые версии ставятся в каталоги altera_lite (редакция Lite) и altera_pro (редакция Pro), тогда как версии времён Intel ставились в intelFPGA_lite и intelFPGA. Скрипты репозитория знают все эти имена, поэтому выбор версии ни на что не влияет — ставьте в предлагаемый установщиком каталог.

Какую версию выбрать

4.1.1.1. Пошаговая установка Quartus Prime Lite 21.1

1. Убедитесь, что скачаны оба файла: установщик (QuartusLiteSetup-21.1.exe) и архив поддержки вашей микросхемы с расширением .qdz. Оба файла должны лежать в одной папке.

Какой именно .qdz нужен, определяется микросхемой на плате:

ПлатаМикросхемаФайл поддержки
DE10-LiteMAX 10max10-21.1.1.850.qdz
DE10-Nano, DE1-SoC, DE0-CVCyclone Vcyclonev-21.1.1.850.qdz
OMDAZZ, RzRd, ZEOWAA, DE2-115, DE0-NanoCyclone IVcyclone-21.1.1.850.qdz

Модель микросхемы написана на самом корпусе микросхемы на плате; её же можно найти в столбце «Семейство ПЛИС» таблицы раздела 3.

Установщик Quartus и файл .qdz в одной папке
Рис. 1. Установщик Quartus и файл .qdz в одной папке

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

quartus_windows_installation
Рис. 2

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

quartus_windows_installation
Рис. 3

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

quartus_windows_installation
Рис. 4

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

quartus_windows_installation
Рис. 5

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

quartus_windows_installation
Рис. 6
quartus_windows_installation
Рис. 7
quartus_windows_installation
Рис. 8
Примечание

Прописывать переменные окружения и PATH после установки не нужно. Как скрипты находят Quartus — в разделе 4.1.1.4.

4.1.1.2. Установка драйвера USB Blaster

Для прошивки платы нужен драйвер программатора. Дальше в качестве примера взята плата OMDAZZ/RzRd с программатором DDS2022-24.

1. Подключите программатор. Шлейф JTAG одним концом — к разъёму JTAG на плате (не к AS!), другим — к программатору. Обратите внимание на выемку в разъёме: шлейф вставляется только одной стороной.

board_omdazz_connection
Рис. 9
board_omdazz_connection
Рис. 10

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

board_omdazz_connection
Рис. 11
board_omdazz_connection
Рис. 12

3. Откройте Диспетчер устройств (быстрее всего — через поиск у кнопки «Пуск»). После подключения программатора в списке появится новое устройство.

4. Нажмите на нём правой кнопкой → Обновить драйвер → Найти драйверы на этом компьютере.

5. В качестве папки поиска укажите каталог установки Quartus. Драйвер лежит внутри него, в подкаталоге quartus/drivers/usb-blaster.

usb_blaster_driver_windows
Рис. 13
usb_blaster_driver_windows
Рис. 14
Примечание

Если устройство в диспетчере не появилось: попробуйте другой разъём 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.

4.1.1.3. Проверка установки Quartus

1. Запустите Quartus. Должно появиться окно выбора; нажмите Run the Quartus Prime Software.

quartus_windows_check
Рис. 15

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

quartus_windows_check
Рис. 16

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

quartus_windows_check
Рис. 17

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

quartus_windows_check
Рис. 18
quartus_windows_check
Рис. 19

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

quartus_programmer_success
Рис. 21
quartus_programmer_success
Рис. 22
quartus_programmer_success
Рис. 23
Примечание

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

quartus_windows_check
Рис. 20
quartus_windows_check
Рис. 24

Окно Programmer после успешной прошивки

4.1.1.4. Как скрипты BGM находят Quartus

В репозитории 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. Порядок поиска такой, и первый успешный шаг прекращает дальнейший поиск:

  1. QUARTUS_ROOTDIR — если переменная задана и указывает на каталог quartus внутри установки, берётся именно он, без всякого поиска.
  2. quartus в PATH — если он уже доступен и подходит для вашей платы, скрипт ничего не меняет.
  3. INTEL_FPGA_HOME, затем ALTERA_HOME, затем QUARTUS_HOME — каталог, внутри которого лежат каталоги установок.
  4. Стандартные места: домашний каталог, /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) конкретную микросхему и оставляет только те установки, которые её поддерживают. Среди оставшихся выбор идёт так:

  1. бесплатная редакция (Lite или Web) — впереди платной, даже если она старше;
  2. затем более новая версия;
  3. Standard впереди Pro — но только при равных версиях.
Новое в этой редакции

Опрос установки занимает от одной до пяти секунд, поэтому ответ кэшируется в ~/.cache/basics-graphics-music и привязывается к дате файла quartus_sh. Обычный запуск лабораторной работы на это время не тратит.

Если ни одна установка не умеет собирать проект под микросхему вашей платы, скрипт сообщает об этом сразу, называя микросхему и перечисляя найденные версии, — вместо того чтобы выбрать неподходящую и упасть позже посреди синтеза. Если при этом вы сами указали установку через QUARTUS_ROOTDIR или через INTEL_FPGA_HOME / ALTERA_HOME / QUARTUS_HOME, скрипт вам доверяет: он выдаёт предупреждение и продолжает работу.

4.1.2. Установка AMD Vivado (для плат на ПЛИС Xilinx)

Vivado нужен только для плат с ПЛИС AMD Xilinx. Для плат на Altera, Gowin или Lattice он не требуется.

Внимание

Образ установщика Vivado занимает более 80 ГБ, а установленная программа — более 50 ГБ. Проверьте свободное место заранее.

Лабораторные работы рассчитаны на версию 2022.2. Сообщество Школы проверяло, что работы выполняются и на версиях 2018, 2021 и 2023, однако рекомендуется именно 2022.2.

1. На приветственном экране установщика нажмите Next.

vivado_windows_installation
Рис. 25

2. Поставьте флажок напротив Vivado.

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

vivado_windows_installation
Рис. 26
vivado_windows_installation
Рис. 27

4. Примите условия лицензионного соглашения, оставьте путь установки по умолчанию и нажмите Install.

Было верно раньше

Прежняя редакция называла только Zynq-7000, Artix-7 и Kintex-7. В репозитории сейчас есть и платы на Spartan-7 (например, Digilent Cmod S7), поэтому эту серию тоже стоит отметить.

Как скрипты BGM находят Vivado

За поиск отвечает scripts/steps/00_setup_xilinx.source_bash. Порядок такой же по смыслу, как у Quartus:

  1. XILINX_VIVADO — прямое указание на каталог конкретной версии;
  2. vivado в PATH;
  3. XILINX_HOME — каталог, внутри которого лежат установки;
  4. стандартные места: домашний каталог, /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.

4.1.3. Установка Gowin EDA (для плат на ПЛИС Gowin)

Почему платы Gowin удобны для учёбы

Подробное сравнение: 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 и примите лицензионное соглашение.

gowin_windows_installation
Рис. 28
gowin_windows_installation
Рис. 29

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

gowin_windows_installation
Рис. 30
gowin_windows_installation
Рис. 31

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

gowin_windows_installation
Рис. 32
gowin_windows_installation
Рис. 33

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

gowin_windows_installation
Рис. 34
gowin_windows_installation
Рис. 35
gowin_windows_installation
Рис. 36

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

gowin_windows_installation
Рис. 37
gowin_windows_installation
Рис. 38
gowin_windows_installation
Рис. 39

Как скрипты BGM находят Gowin EDA

Файл scripts/steps/00_setup_gowin.source_bash проверяет:

  1. GOWIN_VERSION_DIR — каталог конкретной версии (внутри него должны быть подкаталоги IDE и Programmer);
  2. GOWIN_HOME — каталог, внутри которого лежат версии;
  3. домашний каталог, /opt, /tools, а в них подкаталоги Gowin или gowin.

Если версий несколько, берётся самая новая (каталоги вида Gowin_V1.9.9 сортируются, выбирается последний), и выдаётся предупреждение со списком найденного.

4.1.4. OSS CAD Suite — открытый поток для Gowin и Lattice

OSS CAD Suite — один архив, в котором собран весь открытый поток: Yosys (синтез), nextpnr (размещение и трассировка), openFPGALoader (прошивка), а также свои сборки Icarus Verilog, GTKWave и Verilator. Это единственный способ работать с платами на ПЛИС Lattice (ECP5, iCE40), и альтернативный способ работать с платами Gowin.

Установка

  1. Скачайте архив для своей системы со страницы выпусков: github.com/YosysHQ/oss-cad-suite-build/releases.
  2. Распакуйте его так, чтобы получился каталог ~/oss-cad-suite — то есть прямо в домашнем каталоге. Скрипты BGM ищут именно по этому пути, а также в ~/Downloads/oss-cad-suite.

Больше ничего делать не нужно: скрипт scripts/steps/00_setup_yosys.source_bash сам найдёт каталог и подключит его командой source ~/oss-cad-suite/environment. Прописывать PATH вручную не требуется.

Если каталога нет, скрипт ищет yosys в системе и, не найдя, выдаёт сообщение со ссылкой на страницу выпусков.

Примечание

Открытый поток развивается быстро, и часть примеров репозитория на нём пока работает не полностью — особенно для плат Lattice. Если вы столкнётесь с таким примером, это хорошая тема для самостоятельной работы: Школа рассчитывает на помощь учащихся в отладке таких случаев. Сообщайте о найденном через issues в репозитории.

4.1.5. Установка Icarus Verilog и просмотрщика диаграмм (обязательно)

Icarus Verilog — открытый симулятор, которого достаточно для моделирования всех примеров репозитория. GTKWave или Surfer — программы для просмотра временных диаграмм в формате VCD.

Новое в этой редакции

Нужна версия 13, лучше 14. Прежняя редакция инструкции описывала версию 12. Скрипты репозитория проверяют версию при запуске: ниже 12 выдаётся ошибка, на 12 — предупреждение с рекомендацией перейти на 13 или 14. Часть примеров использует конструкции SystemVerilog, которые понимает только версия 13 и новее.

Где скачать: bleyer.org/icarus — сборки для Windows. Берите версию 14.

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

icarus_windows_installation
Рис. 40
icarus_windows_installation
Рис. 41

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

icarus_windows_installation
Рис. 42
icarus_windows_installation
Рис. 43

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

icarus_windows_installation
Рис. 44
icarus_windows_installation
Рис. 45

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

icarus_windows_installation
Рис. 46
icarus_windows_installation
Рис. 47

Как скрипты BGM находят Icarus

Файл scripts/steps/00_setup_icarus.source_bash:

  1. если iverilog доступен в PATH — используется он;
  2. иначе под Windows проверяется /c/iverilog (то есть C:\iverilog), под Linux и macOS — ~/install/iverilog;
  3. затем скрипт запускает iverilog -V, разбирает номер версии и предупреждает, если она слишком старая;
  4. дополнительно проверяется поддержка -g2023 — она нужна части примеров.
Новое в этой редакции

Icarus из OSS CAD Suite тоже поддерживается. Если вы поставили OSS CAD Suite (раздел 4.1.4), отдельная установка Icarus не обязательна: в архиве есть и симулятор, и GTKWave, и скрипты их используют.

Если вместо GTKWave в системе найдена программа surfer, скрипты используют её и берут файл настроек surfer.scr вместо gtkwave.tcl. См. раздел 4.1.7.

4.1.6. Установка Visual Studio Code (обязательно)

1–3. Скачайте установщик с code.visualstudio.com, запустите его и примите лицензионное соглашение.

vscode_windows_installation
Рис. 48
vscode_windows_installation
Рис. 49
vscode_windows_installation
Рис. 50

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

vscode_windows_installation
Рис. 51
vscode_windows_installation
Рис. 52

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

vscode_windows_installation
Рис. 53
vscode_windows_installation
Рис. 54

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

vscode_windows_installation
Рис. 55

4.1.7. Установка Surfer — просмотрщика диаграмм

Новое в этой редакции

Этого раздела в прежней редакции не было. Surfer — современная альтернатива GTKWave для просмотра временных диаграмм. Существует в двух видах, и полезны оба.

Расширение для VS Code

Откройте вкладку расширений, найдите Surfer и установите. После этого файлы .vcd открываются прямо в редакторе, рядом с кодом — не нужно переключаться в отдельное окно.

Отдельная программа

Скачайте сборку со страницы выпусков: gitlab.com/surfer-project/surfer/-/releases, и поместите исполняемый файл в каталог, который есть в PATH.

Скрипты репозитория проверяют наличие команды surfer и, если она есть, используют Surfer вместо GTKWave автоматически. Для каждого примера в репозитории рядом с gtkwave.tcl лежит файл surfer.scr с таким же набором отображаемых сигналов.

4.1.8. Установка Git (обязательно)

Git нужен, чтобы скачать репозиторий с примерами и получать обновления. Кроме того, вместе с ним под Windows устанавливается Git Bash — оболочка, в которой запускаются все скрипты репозитория.

Внимание

Под Windows скрипты BGM запускаются именно из Git Bash, а не из cmd.exe и не из PowerShell. Это обязательное условие.

1–3. Скачайте установщик с git-scm.com/downloads/win, примите соглашение, следующие три окна оставьте по умолчанию.

git_windows_installation
Рис. 56
git_windows_installation
Рис. 57
git_windows_installation
Рис. 58

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

git_windows_installation
Рис. 59
git_windows_installation
Рис. 60
git_windows_installation
Рис. 61

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

git_windows_installation
Рис. 62
git_windows_installation
Рис. 63
git_windows_installation
Рис. 64

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

git_windows_installation
Рис. 65
git_windows_installation
Рис. 66
git_windows_installation
Рис. 67

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

git_windows_installation
Рис. 68
git_windows_installation
Рис. 69

Получение репозиториев

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.

4.1.9. Установка RARS (обязательно)

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
rars_installation
Рис. 70
rars_installation
Рис. 71
rars_installation
Рис. 72

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

rars_installation
Рис. 73
rars_installation
Рис. 74

Скрипт 00_setup_rars.source_bash ищет jar-файл в домашнем каталоге и в каталоге загрузок; если найдено несколько версий, берётся самая новая.

4.1.10. Установка XPACK RISC-V GCC (для программ, исполняемых ядром внутри ПЛИС)

Новое в этой редакции

Этого раздела в прежней редакции не было. Он нужен для раздела курса, где в ПЛИС синтезируется процессорное ядро, а на нём исполняются программы на C и ассемблере.

В репозитории есть три процессорных ядра RISC-V, которые можно синтезировать в ПЛИС:

Выбор ядра — скриптом 13_choose_another_riscv_core_for_software.bash.

Чтобы собрать программу для такого ядра, нужен кросс-компилятор. В репозитории используется сборка XPACK RISC-V GCC (riscv-none-elf-gcc).

Установка

  1. Скачайте архив со страницы выпусков: github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases.
  2. Распакуйте его в домашний каталог. Должен получиться каталог вида ~/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.

4.1.11. Установка LibreLane (синтез в заказную микросхему)

Было верно раньше

Прежняя редакция описывала OpenLane, устанавливаемый через Docker, и этот раздел нужно считать полностью устаревшим. В репозитории теперь используется LibreLane — продолжение того же проекта, которое ставится через Nix.

LibreLane — открытый поток, превращающий код на SystemVerilog в топологию микросхемы (RTL-to-GDSII). Работает только под Linux и macOS; под Windows нужен WSL или виртуальная машина с Linux (см. раздел 4.2.11 и файл docs/wsl.md репозитория).

Установка через Nix

# установить менеджер пакетов Nix
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install

# в каталоге с LibreLane
nix develop

Внутри оболочки nix develop команда librelane доступна, и скрипты репозитория её найдут.

Если 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_legacy
Рис. 96
openlane_legacy
Рис. 97
openlane_legacy
Рис. 98

Снимки экрана из прежней редакции, относящиеся к OpenLane. Оставлены для сравнения: сам поток заменён на LibreLane.

4.2. Linux (на примере Ubuntu 22.04)

Порядок тот же, что и для Windows, и нумерация подразделов совпадает. Там, где шаги не отличаются, они не повторяются — даётся ссылка на соответствующий подраздел 4.1.

Примечание

Под Linux скрипты запускаются в обычном терминале — отдельная оболочка, как Git Bash под Windows, не нужна.

4.2.1. Установка Quartus (для плат на ПЛИС Altera)

Quartus нужен только для плат на ПЛИС Altera. Если ваша плата на Xilinx, Gowin или Lattice — переходите к подразделам 4.2.2–4.2.4.

4.2.1.1. Пошаговая установка Quartus Prime Lite 21.1

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_linux_installation
Рис. 75
quartus_linux_installation
Рис. 76
quartus_linux_installation
Рис. 77
Внимание

Каталог установки не должен содержать пробелов и русских букв — это приводит к сбоям 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 попадал несуществующий каталог.

4.2.1.2. Правило udev для USB Blaster

Без правила 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.2.1.3. Проверка установки Quartus

Шаги те же, что в подразделе 4.1.1.3: запустить Quartus, открыть Programmer, нажать Hardware Setup и убедиться, что в списке есть USB-Blaster.

quartus_linux_check
Рис. 78
quartus_linux_check
Рис. 79
quartus_linux_check
Рис. 80
Примечание

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

quartus_linux_check
Рис. 81
quartus_linux_check
Рис. 82
quartus_linux_check
Рис. 83
quartus_programmer_success_linux
Рис. 84
quartus_programmer_success_linux
Рис. 85
quartus_programmer_success_linux
Рис. 86

Надпись Successful означает, что Quartus и программатор работают

4.2.1.4. Как скрипты BGM находят Quartus

Полностью так же, как под Windows, — см. подраздел 4.1.1.4. Отличается только список стандартных мест: под Linux это домашний каталог, /opt и /tools (под Windows на их месте корни дисков /c, /d, /e).

4.2.2. Установка AMD Vivado (для плат на ПЛИС Xilinx)

Скачайте установщик с сайта 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; порядок одинаков на всех системах.

4.2.3. Установка Gowin EDA (для плат на ПЛИС Gowin)

Скачайте архив для 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.

4.2.4. OSS CAD Suite — открытый поток для Gowin и Lattice

Так же, как под Windows (подраздел 4.1.4): распаковать архив в ~/oss-cad-suite и больше ничего не делать — скрипты подключат его сами.

cd ~
tar xzf oss-cad-suite-linux-x64-*.tgz

4.2.5. Установка Icarus Verilog и просмотрщика диаграмм (обязательно)

Для Ubuntu 22.04 и новее:

sudo add-apt-repository ppa:team-electronics/ppa
sudo apt-get update
sudo apt install iverilog gtkwave

Проверьте версию:

iverilog -V
icarus_linux_installation
Рис. 87
Новое в этой редакции

Нужна версия 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

4.2.6. Установка Visual Studio Code (обязательно)

Скачайте пакет .deb с code.visualstudio.com и установите:

sudo dpkg -i code_*.deb
vscode_linux_installation
Рис. 88
vscode_linux_installation
Рис. 89
vscode_linux_installation
Рис. 90
vscode_linux_installation
Рис. 91
vscode_linux_installation
Рис. 92
vscode_linux_installation
Рис. 93
vscode_linux_installation
Рис. 94
vscode_linux_installation
Рис. 95

Затем поставьте расширения SystemVerilog - Language Support и Surfer — так же, как под Windows (подразделы 4.1.6 и 4.1.7)

4.2.7. Установка Surfer — просмотрщика диаграмм

Скачайте сборку для 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.

4.2.8. Установка Git (обязательно)

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 скрипты работают в обычном терминале.

4.2.9. Установка RARS (обязательно)

Нужна 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.

4.2.10. Установка XPACK RISC-V GCC и терминальной программы

Компилятор. Распакуйте архив 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.2.11. Установка LibreLane (синтез в заказную микросхему)

См. подраздел 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

4.3. macOS

Внимание

Под macOS нет ни Quartus, ни Vivado. Altera и AMD не выпускают эти программы для macOS ни в каком виде. Значит, платы на ПЛИС Altera и Xilinx с macOS напрямую использовать нельзя — нужна виртуальная машина с Linux или Windows (разделы 5 и 7), либо отдельный компьютер.

Зато полностью работают и не требуют никаких ухищрений:

Иными словами, на Mac удобно учиться с платой Tang Nano 9K — это ещё одна причина, по которой Школа рекомендует её как недорогой вариант.

В остальном macOS ведёт себя как Linux: те же скрипты, тот же терминал, те же команды. Но есть четыре особенности, которые заложены в сами скрипты.

1. Gowin EDA работает только на Apple Silicon

На компьютерах Mac с процессором Intel Gowin EDA не запускается, и скрипт сообщает об этом прямо:

Gowin IDE is not working on your platform (Mac x64?)

На Mac с процессорами M1 и новее всё работает.

2. Другая раскладка каталогов Gowin

Под 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 не находит свои библиотеки, скрипт выставляет сам — вручную их задавать не нужно.

3. Карантин: «программу нельзя открыть, так как её автор не установлен»

macOS помечает всё скачанное из интернета атрибутом com.apple.quarantine и отказывается запускать такие программы. Это самая частая причина, по которой на Mac «не работают» Gowin EDA, OSS CAD Suite и компилятор XPACK.

Скрипты репозитория это обнаруживают и подсказывают команду, но снять атрибут должны вы сами. Проверяются:

Команда для любого из них:

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 прервёт выполнение.

4. Просмотрщик диаграмм: Surfer на Apple Silicon

На 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. Если вы столкнётесь с расхождением, сообщите об этом — раздел будет исправлен.

наверх ↑5. Виртуальная машина для занятий по функциональной верификации

Для раздела курса про функциональную верификацию нужен симулятор Questa. Он распространяется отдельно и может требовать лицензию, поэтому Школа выдаёт готовую виртуальную машину с установленным симулятором.

  1. Установите VirtualBox.
  2. Скачайте и распакуйте архив с виртуальной машиной (ссылку даёт Школа).
  3. Запустите VirtualBox и добавьте машину кнопкой Добавить, указав файл с расширением .vbox из распакованного каталога.
  4. Запустите машину. Пароль пользователя: 1234.
  5. Откройте терминал (Applications → System Tools → Terminal) и введите vsim. Должно появиться приветственное окно симулятора.
virtualbox_verification_vm
Рис. 99
virtualbox_verification_vm
Рис. 100
virtualbox_verification_vm
Рис. 101
virtualbox_verification_vm
Рис. 102

При затруднениях напишите в чат Школы синтеза цифровых схем.

наверх ↑6. Загружаемый SSD с предустановленным ПО

Вместо установки всего перечисленного вручную можно получить готовый образ SSD с предустановленным ПО и загружаться с него. Это удобно для занятий в учебных классах.

Основа раздела — статья Юрия Панчула: habr.com/ru/articles/754262.

Примечание

Образ содержит ПО для плат на ПЛИС Altera (Quartus). Vivado и Gowin EDA при необходимости ставятся отдельно. Questa в образе может требовать лицензию.

6.1. Запись образа на SSD

Скачайте файл образа .img (ссылку даёт Школа).

Внимание

Про GPT. Таблиц разделов GPT на диске две — основная и резервная. Образ (около 50 ГБ в распакованном виде) меньше любого современного SSD, поэтому после записи резервная таблица остаётся нетронутой и мешает первой загрузке. Поэтому вторую таблицу нужно стереть.

Это делает скрипт из самого репозитория:

scripts/admin/erase_ssd_gpt_and_write_bootable_image.bash

Положите скрипт в каталог с образом (или образ — в каталог со скриптом) и запустите под sudo. Скрипт проверит, что образ один, спросит, какой диск перезаписать, убедится, что диск не смонтирован, и запишет образ. Операция занимает десятки минут.

6.2. Загрузка с SSD

Подключите SSD к выключенному компьютеру, включите его и нажимайте клавишу входа в меню загрузки:

ПроизводительКлавиша
ASUS, AcerDel или F2
DellF12 или F2
HPF10
LenovoF2 или Fn+F2 (ноутбуки), F1 (десктопы), Enter затем F1 (ThinkPad)
MSIDel
SamsungF2

Образ поддерживает и UEFI, и устаревшую Legacy-загрузку.

bootable_ssd
Рис. 103
bootable_ssd
Рис. 104
bootable_ssd
Рис. 105
bootable_ssd
Рис. 106

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

bootable_ssd
Рис. 107
bootable_ssd
Рис. 108
bootable_ssd
Рис. 109
bootable_ssd
Рис. 110

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

bootable_ssd
Рис. 111
bootable_ssd
Рис. 112
bootable_ssd
Рис. 113

6.3. Обновление репозиториев

Подключитесь к интернету и обновите примеры. Если каталог уже есть:

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.

6.4. Проверка работы с платой

Сначала выберите плату:

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

После этого можно нажимать кнопки на плате и наблюдать за светодиодами в соответствии с кодом примера.

наверх ↑7. Виртуальная машина с предустановленным ПО

Если загружаться с отдельного SSD неудобно, тот же образ можно запустить в виртуальной машине.

  1. Скачайте образ .img.
  2. Преобразуйте его в формат VirtualBox при помощи qemu-img:
    qemu-img convert -f raw -O vdi образ.img образ.vdi
  3. Создайте в VirtualBox новую машину и подключите к ней полученный файл .vdi как существующий жёсткий диск.
  4. Логин verilog, пароль verilog.
preinstalled_vm
Рис. 114
preinstalled_vm
Рис. 115
preinstalled_vm
Рис. 116
preinstalled_vm
Рис. 117
preinstalled_vm
Рис. 118
preinstalled_vm
Рис. 119
preinstalled_vm
Рис. 120
preinstalled_vm
Рис. 121
preinstalled_vm
Рис. 122
preinstalled_vm
Рис. 123
preinstalled_vm
Рис. 124
Внимание

Прошивка платы из виртуальной машины требует передать USB-устройство внутрь машины (Устройства → USB), и для VirtualBox нужен Extension Pack. Если программатор упорно не определяется, проще работать с платой из основной системы, а виртуальную машину использовать только для моделирования и верификации.

наверх ↑8. Подробнее о репозитории BGM

8.1. Из чего состоит курс

Примеры в репозитории сгруппированы по разделам курса. Ниже — краткая карта, по статье 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 строках ассемблера, то есть многопоточность на синтезированном вами процессоре.

8.2. Как выполнять упражнения

Каждый пример — отдельный каталог с одинаковым набором скриптов. Порядок работы обычно такой:

  1. Выбрать плату один раз на весь репозиторий:
    ./check_setup_and_choose_fpga_board.bash
  2. Зайти в каталог примера и посмотреть файл lab_top.sv — это то, что предлагается изменить.
  3. Промоделировать и посмотреть диаграммы:
    ./02_simulate_rtl.bash
  4. Собрать и прошить плату:
    ./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 в репозитории.

наверх ↑9. Подробнее о репозитории systemverilog-homework

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

наверх ↑10. Синтез примеров в заказную микросхему через Tiny Tapeout

Tiny Tapeout — сервис, который собирает проекты многих участников на один кристалл и отправляет его на фабрику. Такой способ изготовления называется MPW (multi-project wafer) или «шаттл»: стоимость маски делится между всеми участниками, и поэтому изготовление одной небольшой схемы становится доступным для университета, а иногда и для отдельного человека.

Для BGM есть готовый шаблон, который берёт из примера модуль lab_top — то есть ровно тот файл, который учащийся менял, отлаживая пример на плате. Изготовление идёт на фабрике института IHP (Leibniz-Institut für innovative Mikroelektronik) в Германии.

Порядок действий

  1. Отладить пример на ПЛИС обычным путём (разделы 8.2 и 4).
  2. Локально проверить, что пример проходит синтез в микросхему:
    ./07_synthesize_for_asic.bash
    ./08_visualize_asic_synthesis_results_1.bash
    Это тот же поток RTL-to-GDSII, который применяется и при настоящем изготовлении, поэтому ошибки видны заранее.
  3. Создать репозиторий из шаблона Tiny Tapeout и перенести в него lab_top.
  4. Отправить проект на очередной шаттл через сайт Tiny Tapeout.

Подробнее:

Не проверено

Стоимость участия и даты шаттлов меняются, и в источниках, доступных при подготовке этой редакции, конкретных цифр не было. Смотрите сайт Tiny Tapeout.

наверх ↑11. Дополнительная информация

Документация внутри репозитория

В каталоге 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 в репозитории: это самый надёжный способ, чтобы о проблеме узнали разработчики.

наверх ↑12. Частые вопросы

Нужно ли ставить все САПР?

Нет. Только тот, который соответствует вашей плате: Quartus для Altera, Vivado для Xilinx, Gowin EDA или OSS CAD Suite для Gowin, OSS CAD Suite для Lattice. Если платы нет, не нужен ни один: примеры моделируются в Icarus Verilog, а задачи SVH выполняются целиком без платы.

У меня нет платы. Можно учиться?

Да. Моделирование в Icarus Verilog с просмотром диаграмм покрывает значительную часть курса, а весь репозиторий SVH вообще не требует платы. Для графики есть возможность посмотреть результат в виде изображения, не имея монитора на плате.

Нужно ли прописывать PATH и переменные окружения?

Нет, если инструменты установлены в стандартные места. Скрипты находят их сами. Переменные (QUARTUS_ROOTDIR, XILINX_VIVADO, GOWIN_VERSION_DIR и остальные) нужны в двух случаях: установка в нестандартном каталоге, либо несколько версий и необходимость выбрать конкретную.

Можно ли держать несколько версий Quartus одновременно?

Да, и для старых плат это обязательно: Cyclone II требует Quartus II 13.0sp1, Cyclone III — 13.1, а современные платы — Quartus Lite 21.1 или новее. Все они спокойно живут рядом, а скрипты выбирают подходящую по микросхеме вашей платы.

Почему скрипт говорит, что ни одна версия Quartus не подходит?

Значит, ни одна из установленных версий не умеет собирать проект под микросхему выбранной платы. В сообщении перечислено, что найдено. Чаще всего это старая плата (нужен Quartus 13.x) или DE23-Lite (нужен Quartus Pro). См. раздел 3.1.

Под Windows скрипты не запускаются

Запускайте их из Git Bash, а не из cmd.exe и не из PowerShell. Git Bash устанавливается вместе с Git (раздел 4.1.8).

Icarus выдаёт ошибки синтаксиса в примерах

Скорее всего, у вас версия 11 или 12. Нужна 13, лучше 14 — часть примеров использует конструкции, которых старые версии не понимают. См. раздел 4.1.5.

Плата не прошивается с первого раза

Переподключите кабель программатора и запустите ./04_configure_fpga.bash — пересобирать проект заново не нужно. Под Linux проверьте правило udev (подраздел 4.2.1.2), в том числе строку для USB Blaster III, если у вас DE23-Lite.

На Mac программа не запускается: «автор не установлен»

Снимите атрибут карантина: xattr -rd com.apple.quarantine ~/oss-cad-suite. См. раздел 4.3.

Какую плату купить, если её ещё нет?

Tang Nano 9K с модулем ЖК-экрана и звуковыми модулями: примерно 60 долларов за комплект, быстрый синтез, работает под всеми тремя операционными системами, включая macOS. Для плат Altera и Xilinx под macOS нужна виртуальная машина.

Где полный список плат?

В разделе 3 этой инструкции и в файле boards/README.md репозитория — он обновляется вместе с кодом.