Всем снова здравствуйте, с вами Александр и та, кто, наверное, уже не нуждается в представлении.

Сегодня будет статья о работе в САПР (система автоматизированного проектирования) Vivado 2022. Заранее извиняемся за большое количество скриншотов и тяжесть статьи.

Вы предупреждены, а значит вооружены! Поехали!
Vivado это интерактивная среда разработки под HDL (hardware description language) разработанная компанией Xilinx на замену XILINX ISE в 2012. Причина разработки заключалась в том, что ISE не могла выполнять синтез для новых флагманских FPGA. Из-за этого случился довольно резкий разрыв между поколениями и, например в Vivado не поддерживается работа с поколением FPGA Spartan 6.

Итак, после открытия нас встречает общее окно Vivado с меню, находим создание проекта под заголовком Quick start (Рис. 1)

Нажимаем на “create project” и попадаем в окно создание проекта (Рис. 2)

Нажимаем “Next”, появляется окно, где нужно вписать название проекта и его путь (Рис. 3).

Далее будет окошко с выбора типа проекта оставляем RTL (Рис.4) и идём дальше.

Далее будут окна с добавлением новых файлов в проект пропускаем их через
“Next” до окна с выбором FPGA (Рис.5)

Здесь очень важный момент, нужно выбрать FPGA под которую будет собираться проект. В моём случает это Artix 7 xc7a15tcsg325-1, ПЛИС из статьи о комбинационной логике.

Последнее окно содержит общую информацию (Рис.6) по проекту и заветную кнопку “finish”. Нажимаем и создаём свой первый проект!

Всё мы завершили создание проекта можно переходить к написанию кода и файлов проектных ограничений. Для начало создадим файл с кодом для Verilog. В левом верхнем углу будет окошко с иерархией проекта (Рис.7).

Нажимаем правой кнопкой мышки на Design sources и выбираем add sources (Рис.8)

Появиться окно типа файла (Рис.9) с установленным выбором на design sources, так и надо идём дальше. Далее появиться знакомое окно из начало создания проекта теперь нажимаем кнопку “Create file” и получаем ещё одно окошко где указывается тип языка HDL и название файла (Рис.10), выбираем Verilog ,а название Logic_OR и нажимаем Ok.


В иерархи отобразился новый файл (Рис.11) нажимаем и получаем окно с шаблоном для написания кода (Рис.12).


Теперь допишем сюда код из статьи про логику и попробуем сделать синтез.
module Logic_OR(
input a,b,//sw1 и sw2
output c,d,osc
);
assign c=~(a&b);
assign d = ~c; //
assign osc =c; //выход осцилографа
endmodule
Слева есть кнопка с зелёным треугольником “Run Synthesis” (Рис 13.) запускаем синтез. Если в коде нет ошибок ( В этом коде их нет) будет выведено окошко о выполнении синтеза (Рис.14). Сам процесс синтеза заключается в преобразовании нашего кода HDL в схему RTL. Саму схему мы посмотрим далее.


Для просмотра схемы RTL под Run Synthesis выбираем Open Synthesized Design (Рис.15) и нажимаем на Schematic.

Открывается окно с схемой (Рис.16). После просмотра, давайте теперь создадим файл проектных ограничений.

Для этого в иерархии проекта находим наименование Constraints и проделываем ту же процедуру, что и с файлом Verilog (Рис.17- Рис.19)



После того как успешно создали файл проектных ограничений можно перенести туда код из примера про логику.
set_property PACKAGE_PIN C8 [get_ports c]
set_property IOSTANDARD LVCMOS33 [get_ports c]
set_property PACKAGE_PIN A9 [get_ports osc]
set_property IOSTANDARD LVCMOS33 [get_ports osc]
set_property PACKAGE_PIN H18 [get_ports a]
set_property IOSTANDARD LVCMOS33 [get_ports a]
set_property PACKAGE_PIN H17 [get_ports b]
set_property IOSTANDARD LVCMOS33 [get_ports b]
set_property PACKAGE_PIN D8 [get_ports d]
set_property IOSTANDARD LVCMOS33 [get_ports d]
Сам файл нужен, чтобы связать входы и выходы схемы, полученной при синтезе с физическими ножками FPGA. Дaлее, в левом нижнем углу находим кнопку Generate Bitstream (Рис.20) нажимаем и идём заваривать чай. Для некоторых больших проектов генерация битника иногда занимает по полчаса или час.

После успешной генерации должно появиться сообщение о успешном выполнении (Рис.21).


Да верно хочется сказать, что дальше нужна отладочная плата и программатор если вы следуете всем советам из гайда. Если у вас нету чего-то, можно остановиться на этом этапе.

Да есть такое, но зато будет что в комментариях обсудить. Ладно мы ещё с прошивкой не закончили. В сообщении о успешной генерации выбираем пункт Open Hardware Manager и нажимаем ОК. После открытия появиться сверху зелёная плашка (Рис.22) нажимаем Open target.

Появляется окно с выбором Auto Connect (Рис.23) выбираем его.

После происходит поиск подключенной платы, если всё правильно подключено, то слева измениться иерархия (Рис.24) и чип FPGA отобразиться в виде синего значка.

Нажимаем правой кнопкой мыши и получаем новое окно (Рис. 25)

Выбираем вариант Program Device и получаем последнее на сегодня окно (Рис.26) с выбором бит файла для прошивки ПЛИС.

Нажимаем Program. Готово! Плата прошивается. Фух, это статья лично для меня была самая тяжёлая в написании.

Ладно, на этой прекрасной ноте, прощаемся с вами!

Список литературных источников
1. https://en.wikipedia.org/wiki/Vivado?ysclid=mb1ykx337416399822
2. ПЛИС С XILINX. Языки описания аппаратуры VHDL/Verilog САПР, приемы проектирования (Aвтор И. Е. Тарасов)
3. FPGA prototyping by Verilog examples (Автор PONG P.CHU)
Moog_Prodigy
Вы придумали "игровую" форму подачи материала (весьма кстати посредственную), но не упомянули - а нафига и кому это надо? Для бытовых задач мк хватает с головой, порог вхождения невысок, принципы работы легко рязьясняются на пальцах.
А FPGA - это для чего? Нет ну например, если человеку на работе нужно такое - он либо уже знает, либо погуглит.спросит ИИ. Это весьма специфические задачи, которые на ровном месте не возникают (в отличие от задач на МК, которых что на работе, что дома - миллион применений).
Это не я не понимаю для чего они нужны (я то как раз и понимаю), а новички. Если новичок даже за такую тему берется - значит есть уже бэкграунд, есть задачи. Как поставить среду гайдов в интернете вагон и маленькая тележка. Зачем еще одно, да еще и настолько урезанное до невозможности понимания - а цель то у нас вообще какая? Изучить fpga? Этот "курс" только вводит в заблуждение своей кажущейся простотой, сводящейся к "сделайте вот это и вот это, увидите вот такое окошко, проставьте галочки вот так и получите вот это". Если и дальше так будет, то это полное днище.
sergeykonshin
Американский форум. Задаёшь вопрос, потом тебе отвечают.
Израильский форум. Задаёшь вопрос, потом тебе задают вопрос.
Русский форум. Задаёшь вопрос, потом тебе долго рассказывают, какой ты идиот.
aax
Реалтаймовые задачи, начиная с банальной бегущей строки(или банального десятка "взрослых", нелагающих UART и/или SPI), это гораздо проще и эффектифней как на FPGA.
А "сложно" это то чего Вы не знаете. Касаемо порога вхождения, тут плюс/минус все одинаково. К примеру с нуля войти в тему МК STM-32 сделать рабочую прошивку "Привет мир!", и аналогично, тоже к примеру, используя FPGA, скажем на Сyclone VI. В "Школе синтеза цифровых схем", ко второму занятию это уже могут сделать даже абсолютные новички.
KeisN13
О, вот он предводитель всех душнил с 2к комментов и 0 статей xD
Он все знает: знает как лучше, знает как сделать так, штобы у его комментов и заметок было миллон стрелок вверх, но он просто настолько гениален, што не делится этим секретом с нашими любимыми хабровчанами.
Мы обязательно сочтем ваше мнение важным для нашего сообщества ПЛИСоводов и обязательно вам перезвоним xD