Перейти к содержанию
    

Как использовать Git с проектами Vivado

Апну тему. Пытаюсь изменить привычки и начать работать со скриптами, вместо складывания в гит кучи файлов вивады. Столкнулся с несколькими непонятностями:

1. Как правильно добавлять и описывать block design в проекте? С учетом того, что всё хочется делать в скриптах, раз уж взялся. Кстати, ни один внешний фреймворк или мануал не учитывает bd файлы, насколько я вижу.

2. Что с автоматизацией? Имею в виду, нет никакого желания перед коммитом делать write_*_tcl, потом разбираться, куда сложились эти файлы и т.д. В общем, как минимизировать ручной труд при использовании вивады со скриптами?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А bd разве не представляет собой ординарный tcl скрипт (простите мою серость, как-то до сих пор удавалось обходиться без bd, но есть желание и эту технологию подтянуть)? У нас и IP тоже хранятся под гитом как tcl, который и является исходником. Ну, это как вариант. Сейчас перешли на более продвинутый путь, когда и tcl для корки генерируется из параметров для оной, хранимых в более удобном (YAML) формате (вот этот файл и идёт под контроль, а тот же tcl для корки - это продукт генерации).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 minutes ago, dxp said:

А bd разве не представляет собой ординарный tcl скрипт (простите мою серость, как-то до сих пор удавалось обходиться без bd, но есть желание и эту технологию подтянуть)? У нас и IP тоже хранятся под гитом как tcl, который и является исходником. Ну, это как вариант. Сейчас перешли на более продвинутый путь, когда и tcl для корки генерируется из параметров для оной, хранимых в более удобном (YAML) формате (вот этот файл и идёт под контроль, а тот же tcl для корки - это продукт генерации).

БД можно сохранить в .tcl. Но потом это нужно как-то развернуть и добавить в проект сам .bd и еще кучу файлов, которые будут сгенерированы после его синтеза. Я пока на этом месте застрял)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, nice_vladi сказал:

Как правильно добавлять и описывать block design в проекте? С учетом того, что всё хочется делать в скриптах, раз уж взялся.

Поковыряйте https://github.com/analogdevicesinc/hdl

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, dxp said:

А IP ядра вы как храните?

Складываем в гит .gen и .ip_user_files.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

7 hours ago, nice_vladi said:

1. Как правильно добавлять и описывать block design в проекте? С учетом того, что всё хочется делать в скриптах, раз уж взялся. Кстати, ни один внешний фреймворк или мануал не учитывает bd файлы, насколько я вижу.

По правильному (как рекомендует Xilinx) надо делать экспорт BD в tcl (как и всего проекта) и затем класть  скрипт в репозиторий.  Соответственно  при  клонировании  нужно делать  импорт (source) такой BD. 
При этом могут быть неприятности. У меня  например постоянно глючит  экспорт/импорт BD  в которой контроллер DDR имел кастомные настройки памяти из внешнего  .csv файла добавленного  в проект. Первый раз   экспорт/импорт проходил нормально, но при этом терялись связи с .csv файлом,  Соответственно второй и последующие  разы экспорт/импорт уже  не работал. 

 

Ест еще  один вариант сохранят  только файл  BD.  И затем, при клонировании, восстанавливать полную BD  "read_bd ...    generate_target all  ...".  Во  всяком случае в Vv 2020.2 такое работает, но не факт что это будет работать для всех BD и для более старых версий Vv. При этом само BD можно держать внешне (как и обычные rtl файлы и файлы IP корок) по отношению к папке проекта *.srcs . 
При этом заметил что при такой регенерации  файл  BD может немного меняется   :shok:  То есть схематика остается прежней  но может изменится  расположение  блоков строк или название цепей в xml описывающих BD. 
Так что  бардак с BD у Xilinx  все еще  присутствует. :scratch_one-s_head: 

 

7 hours ago, nice_vladi said:

2. Что с автоматизацией? Имею в виду, нет никакого желания перед коммитом делать write_*_tcl, потом разбираться, куда сложились эти файлы и т.д. В общем, как минимизировать ручной труд при использовании вивады со скриптами?

IMHO c автоматизацией дела  проще.   При  желании  можно  встроить свои  хуки в стандартные  команды  Vv  и в них контролировать состояние  BD и других  сорцов и необходимость обновления их экспорта или коммита.  Например в стандартные для всех этапов хуки pre_*.   У меня например похоже  делается в скрипте pre_synth.
 

Или через  Vivado_init.tcl повесить свои  хуки в open_project, close_project, ....
Но  тут проблема может быть в том что это не может гарантировать целостность проекта и результат  сильно зависит от стиля и организации в работе  с проектом.    

 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Начиная с вивады 2020.2 она хранит весь проект в папке <имя проекта>.srcs без мусора, образующегося при синтезе и далее (он вынесен наконец то в отдельную папку). Так что хранить можно ее в гит полностью + сам файл проекта. Такой вариант позволяет сразу открыть проект в первозданном виде без затрат времени на восстановлении из скриптов - у него только один недостаток - это новые версии вивады с кучей других косяков. Хранение бд в скрипте как уже писали выше ведет к переразмещению блоков "по понятиям" вивады, что не всегда удобно. При использовании внешнего репозитория с ядрами хлс, требуется их компиляции перед запуском скрипта, а это отдельный "геморой" сам по себе. Опять же скрипт для бд довольно сурово привязан к версии вивады, что то же может быть существенным.

Изменено пользователем fguy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 minutes ago, fguy said:

Начиная с вивады 2020.2 она хранит весь проект в папке <имя проекта>.srcs без мусора, образующегося при синтезе и далее (он вынесен наконец то в отдельную папку). Так что хранить можно ее в гит полностью + сам файл проекта. Такой вариант позволяет сразу открыть проект в первозданном виде без затрат времени на восстановлении из скриптов - у него только один недостаток - это новые версии вивады с кучей других косяков

Как в 2020.2 пробовал. Без папок .gen и .ip_user_file проект не разворачивается - сыпет ошибки. Возможно, я где-то ошибся... Не подскажете полный алгоритм, даже если звучит очень просто?

43 minutes ago, RobFPGA said:

Но  тут проблема может быть в том что это не может гарантировать целостность проекта и результат  сильно зависит от стиля и организации в работе  с проектом.   

Да, проблема. Хочется однозначно и железно всегда складывать в гит определенный набор файлов, который обеспечит развертывание проекта "с чистого листа". Пока, как писал выше, приходится складывать огромное количество файлов. Особенно при наличии нескольких крупных IP cores.

Лирика: в Quartus я точно знал, что сложу .qsys, .qsf, .sdc файлы, и при разворачивании проектов получу полностью готовое окружение. В vivado могу только мечтать и придумывать костыли.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

21 minutes ago, nice_vladi said:

Лирика: в Quartus я точно знал, что сложу .qsys, .qsf, .sdc файлы, и при разворачивании проектов получу полностью готовое окружение. В vivado могу только мечтать и придумывать костыли.

В Vv  я тоже знаю что и как сложить но только ручками, в скрипте, а не автоматом из GUI.  

 

Удачи!  Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, nice_vladi сказал:

Как в 2020.2 пробовал. Без папок .gen и .ip_user_file проект не разворачивается - сыпет ошибки. Возможно, я где-то ошибся... Не подскажете полный алгоритм, даже если звучит очень просто?

2020.2 была первой реализацией и возможно глючной - проверить увы уже не смогу - снес. В 2021.1 оставил папку srcs, файл с проектом xpr и сое файл от фира - проект открылся без ошибок. Если бы не косяки в хлс, то на 2021.1 можно было бы и перейти - среда рабочая и экспорт в сдк адекватный. В 2021.1 в отличии от 2020.2 в новый формат проект можно перевести при конвертации из предыдущих версий вивад.

Изменено пользователем fguy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, fguy said:

В 2021.1 оставил папку srcs, файл с проектом xpr и сое файл от фира - проект открылся без ошибок

...

В 2021.1 в отличии от 2020.2 в новый формат проект можно перевести при конвертации из предыдущих версий вивад

Что за праздник такой?) Поставлю качаться!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 часов назад, RobFPGA сказал:

Ест еще  один вариант сохранят  только файл  BD.  И затем, при клонировании, восстанавливать полную BD  "read_bd ...    generate_target all  ...".  Во  всяком случае в Vv 2020.2 такое работает, но не факт что это будет работать для всех BD и для более старых версий Vv. При этом само BD можно держать внешне (как и обычные rtl файлы и файлы IP корок) по отношению к папке проекта *.srcs . 
При этом заметил что при такой регенерации  файл  BD может немного меняется   :shok:  То есть схематика остается прежней  но может изменится  расположение  блоков строк или название цепей в xml описывающих BD. 
Так что  бардак с BD у Xilinx  все еще  присутствует. :scratch_one-s_head: 

Повозился вчера в качестве эксперимента с BD: создал в одном проекте, перекидывал в другой сам .bd файл. Вполне корректно подхватывало, на Vivado 2018.2. Для того, чтобы схематика не слетала, там надо ещё директорию ui (в ней файлик с кодированными именем и расширением .ui) тащить вместе с файлом .bd. Ну, и все объекты зафиксировать (сделать pinned), хотя, может, и без этого не перемещает, не проверял.

 

Вроде бы выглядит рабочим вариантом складывать в реп .bd и ui. Ну, а при импорте - да, генерить всё, что положено скриптом. Это (для нас) не проблема. Пока не нравится то, что если, скажем, эти файлы bd, ui хранить вместе с исходниками, то при импорте в проект оно там рожает synth, sim и прочие директории прямо тут же рядом, т.е. мусорит. В новых версиях, как сказали выше, такого уже нет, я пока не проверял. Надо посмотреть ключи этих тиклевых команд, которые используются для импорта bd в проект, может там можно указать путь, где продукты генерации складывать. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

2 hours ago, dxp said:

Пока не нравится то, что если, скажем, эти файлы bd, ui хранить вместе с исходниками, то при импорте в проект оно там рожает synth, sim и прочие директории прямо тут же рядом, т.е. мусорит.

Ненужный "мусор"  убирается настройкой .gitignore.   Например  для общей папки где у меня  все BD сохраняются:  
/*/*/
/*/*.*
!/*/*.bd 

 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 минуты назад, RobFPGA сказал:

Ненужный "мусор"  убирается настройкой .gitignore.   Например  для общей папки где у меня  все BD сохраняются: 

В контексте git да, решение. Но мне не нравится вот что. Структура проекта у нас выглядит так:

/build
  /sim
  /syn
    /<out-of-context IPs>
    ...
    /<project>.runs
    <project>.xpr
...  
/src
  /bd
  /cfg
  /sim
  /syn
  

src под git, build в ignore. И вот в src/bd находятся файлы .bd. Было бы замечательно, если бы только они там и оставались. Но Vivado там же (т.е. в директории src) генерит этот "мусор" (synth, sim). Вот ка бы это уносилось куда-нить в build, которая является целиком и полностью продуктом генерации, и там этому "мусору" (как также являющимся продуктом генерации) самое место. А src содержала бы только исходники, которые правятся руками.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...