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

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

Вы предупреждены, а значит вооружены! Поехали!

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

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

Рисунок 1- Quick start
Рисунок 1- Quick start

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

Рисунок 2- Создание проекта
Рисунок 2- Создание проекта

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

Рисунок 3 - Имя и путь до проекта
Рисунок 3 - Имя и путь до проекта

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

Рисунок 4 – Тип проекта
Рисунок 4 – Тип проекта

Далее будут окна с добавлением новых файлов в проект пропускаем их через

“Next” до окна с выбором FPGA (Рис.5)

Рисунок 5 – Выбор FPGA
Рисунок 5 – Выбор FPGA

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

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

Рисунок 6 – последнее окно создания проекта
Рисунок 6 – последнее окно создания проекта

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

Рисунок 7 – Иерархия проекта
Рисунок 7 – Иерархия проекта

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

Рисунок 8 – add sources
Рисунок 8 – add sources

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

Рисунок 9 – add or create design sources
Рисунок 9 – add or create design sources

 

Рисунок 10 – Create source file
Рисунок 10 – Create source file

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

Рисунок 11 – Отображение нового файла Logic_OR
Рисунок 11 – Отображение нового файла Logic_OR
Рисунок 12 – шаблоном для написания кода
Рисунок 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.  Саму схему мы посмотрим далее.

Рисунок 13 – Synthesis
Рисунок 13 – Synthesis
Рисунок 14 – Выполнение синтеза
Рисунок 14 – Выполнение синтеза

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

Рисунок 15 – Open Synthesized Design
Рисунок 15 – Open Synthesized Design

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

Рисунок 16 – схема RTL
Рисунок 16 – схема RTL

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

Рисунок 17 – Выбор типа файла
Рисунок 17 – Выбор типа файла
Рисунок 18 – Название и тип файла
Рисунок 18 – Название и тип файла
Рисунок 19 – Отображение в иерархии
Рисунок 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) нажимаем и идём заваривать чай. Для некоторых больших проектов генерация битника иногда занимает по полчаса или час.

Рисунок 20 – Generate Bitstream
Рисунок 20 – Generate Bitstream

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

Рисунок 21 – Выполнение генерации битстрима
Рисунок 21 – Выполнение генерации битстрима

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

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

Рисунок 22 – Open target
Рисунок 22 – Open target

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

Рисунок 23 – Auto Connect
Рисунок 23 – Auto Connect

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

Рисунок 24 – Иерархия
Рисунок 24 – Иерархия

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

Рисунок 25 – Окно с выбором
Рисунок 25 – Окно с выбором

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

Рисунок 26 – Окно с выбором бит-файла
Рисунок 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)

Комментарии (5)


  1. Moog_Prodigy
    25.05.2025 17:30

    Вы придумали "игровую" форму подачи материала (весьма кстати посредственную), но не упомянули - а нафига и кому это надо? Для бытовых задач мк хватает с головой, порог вхождения невысок, принципы работы легко рязьясняются на пальцах.

    А FPGA - это для чего? Нет ну например, если человеку на работе нужно такое - он либо уже знает, либо погуглит.спросит ИИ. Это весьма специфические задачи, которые на ровном месте не возникают (в отличие от задач на МК, которых что на работе, что дома - миллион применений).

    Это не я не понимаю для чего они нужны (я то как раз и понимаю), а новички. Если новичок даже за такую тему берется - значит есть уже бэкграунд, есть задачи. Как поставить среду гайдов в интернете вагон и маленькая тележка. Зачем еще одно, да еще и настолько урезанное до невозможности понимания - а цель то у нас вообще какая? Изучить fpga? Этот "курс" только вводит в заблуждение своей кажущейся простотой, сводящейся к "сделайте вот это и вот это, увидите вот такое окошко, проставьте галочки вот так и получите вот это". Если и дальше так будет, то это полное днище.


    1. sergeykonshin
      25.05.2025 17:30

      Американский форум. Задаёшь вопрос, потом тебе отвечают.

      Израильский форум. Задаёшь вопрос, потом тебе задают вопрос.

      Русский форум. Задаёшь вопрос, потом тебе долго рассказывают, какой ты идиот.


    1. aax
      25.05.2025 17:30

      Реалтаймовые задачи, начиная с банальной бегущей строки(или банального десятка "взрослых", нелагающих UART и/или SPI), это гораздо проще и эффектифней как на FPGA.

      А "сложно" это то чего Вы не знаете. Касаемо порога вхождения, тут плюс/минус все одинаково. К примеру с нуля войти в тему МК STM-32 сделать рабочую прошивку "Привет мир!", и аналогично, тоже к примеру, используя FPGA, скажем на Сyclone VI. В "Школе синтеза цифровых схем", ко второму занятию это уже могут сделать даже абсолютные новички.


    1. KeisN13
      25.05.2025 17:30

      О, вот он предводитель всех душнил с 2к комментов и 0 статей xD

      Он все знает: знает как лучше, знает как сделать так, штобы у его комментов и заметок было миллон стрелок вверх, но он просто настолько гениален, што не делится этим секретом с нашими любимыми хабровчанами.

      Мы обязательно сочтем ваше мнение важным для нашего сообщества ПЛИСоводов и обязательно вам перезвоним xD


  1. KeisN13
    25.05.2025 17:30

    А что если вместо статичных картинок вставлять гифки ? xD