Vivado 2014.1 дозволяє використовувати сценарії .tcl для відновлення проектів.
Для цього, відкривши проект, перейдіть до Файл -> Написати проект tcl.
Основні проекти
Зазвичай я зберігаю свої джерела та .tcl скрипт у місці, що знаходиться поза каталогом проектів. IP-ядра xilinx, згенеровані в рамках проекту, можуть бути скопійовані в інше місце, клацнувши правою кнопкою миші та вибравши "Скопіювати IP". І видалення оригіналу. Коли генерується скрипт tcl, він створює відносні посилання на ці файли. Зазвичай так виглядає моя структура каталогу:
base_project/
srcs/
project.v
ip/
ip1/
ip1.xml
ip1.xci
genproject.tcl
Необхідно ввести лише файли IP .xml та .xci. (І навіть це не обов'язково, технічно див. Примітки наприкінці).
Це те, що привертається до git, зауважте, відсутність проекту.xpr або каталогів проектів.
Коли я запускаю genproject.tcl
, він створює інший каталог для проекту.
base_project/
srcs/
ip/
genproject.tcl
projectdir/
project.runs/
project.cache/
project.xpr
Ця нова папка повністю одноразова. Для того, щоб створити цю структуру, я змінюю скрипт tcl наступним чином.
Перші 3 рядки я змінюю так:
# Set the reference directory for source file relative paths (by default the value is script directory path)
set origin_dir [file dirname [info script]]
# Set the directory path for the original project from where this script was exported
set orig_proj_dir "[file normalize "$origin_dir/projectdir"]"
# Create project
create_project project $projectdir/project
Це створює новий каталог проектів і новий проект у цьому режимі.
Потім я модифікую шляхи, щоб вказати на правильні місця. Можливо, вам доведеться змінити ці шляхи в інших місцях сценарію.
# Set 'sources_1' fileset object
set obj [get_filesets sources_1]
set files [list \
"[file normalize "$origin_dir/srcs/project.v"]"\
"[file normalize "$origin_dir/ip/ip1/ip1.xci"]"\
]
add_files -norecurse -fileset $obj $files
Я також змінюю конструкції для IP ядер, як видно з цієї відповіді .
Файли .wcfg можуть бути включені аналогічно до ip та srcs.
Тут закінчується обробка для більш простих проектів (що містять лише джерела та IP, без блок-діаграм). Для збереження даних блок-схеми також потрібно зробити наступне.
Блок-проекти проектів
Щоб зберегти блок-схему, відкривши блок-схему, перейдіть до Файл -> Експорт -> Блок-діаграма в Tcl і збережіть її в тому ж режимі, що й інший файл tcl.
Потім я створив Generate_Wrapper.tcl
сценарій, який створює файли обгортки блок-схеми, тому вам не потрібно робити це вручну. Папка project / project.srcs використовується для зберігання даних bd, але вона все ще є повністю одноразовою, оскільки bd зберігається в скрипті tcl. Збережіть це за допомогою двох інших.
set origin_dir [file dirname [info script]]
make_wrapper -files [get_files $origin_dir/project/project.srcs/sources_1/bd/design_1/design_1.bd] -top
add_files -norecurse -force $origin_dir/project/project.srcs/sources_1/bd/design_1/hdl/design_1_wrapper.v
update_compile_order -fileset sources_1
update_compile_order -fileset sim_1
В кінці мого genproject.tcl
я додаю наступні рядки для створення блок-схеми та обгортки:
source $origin_dir/Create_bd.tcl
source $origin_dir/Generate_Wrapper.tcl
regenerate_bd_layout
Для проектів, що не мають джерела (просто блок-схема), моя git-фіксація є лише наступною:
base_project/
Generate_Wrapper.tcl
Create_Bd.tcl
genproject.tcl
Щоб генерувати все, запустіть genproject.tcl
.
Ви навіть можете поєднати все це в одне ціле, якщо ви особливо ефективні, я ще цього не вирішив.
Спеціальні компоненти: Проект компонентів
Ще одна швидка примітка щодо створення користувацького компонента. Якщо у вас є компонент.xml, додайте його до свого списку джерел tcl:
"[file normalize "$origin_dir/component.xml"]"\
А потім також додайте наступний розділ:
set file "$origin_dir/component.xml"
set file [file normalize $file]
set file_obj [get_files -of_objects [get_filesets sources_1] [list "*$file"]]
set_property "file_type" "IP-XACT" $file_obj
Це включає дизайн компонента в проект для легкої настройки.
Спеціальні компоненти: Посилання на ваш компонент
Ви можете розділити свій спеціальний шлях репо-компонента таким чином:
# Set IP repository paths
set obj [get_filesets sources_1]
set_property "ip_repo_paths" "[file normalize "$origin_dir/path/to/repository"]" $obj
У моїй папці repo є окремі папки, що містять файли .xml. Таким чином, ви не посилаєтесь на папку, що містить .xml, але батьківську. Наприклад:
repository/
component1/component1.xml
component2/component2.xml
Як ми запускаємо ці сценарії tcl?
Відкрийте Vivado і, не відкриваючи жодних проектів, виберіть Інструменти -> Запустити скрипт TCL та перейдіть до свого сценарію.
Додаткові примітки TCL
Кожна команда, запущена у Vivado, відображається на консолі tcl як команда tcl. Наприклад, коли я генерував новий IP Xilinx за допомогою GUI, це з'явилося на консолі tcl:
create_ip -name floating_point -vendor xilinx.com -library ip -module_name floating_point_0
set_property -dict [list CONFIG.Operation_Type {Fixed_to_float} CONFIG.A_Precision_Type {Custom} CONFIG.C_A_Exponent_Width {38} CONFIG.C_A_Fraction_Width {0} CONFIG.Result_Precision_Type {Custom} CONFIG.C_Result_Exponent_Width {8} CONFIG.C_Result_Fraction_Width {16} CONFIG.Flow_Control {NonBlocking} CONFIG.Has_ARESETn {true}] [get_ips floating_point_0]
Це означає пару речей:
Вам навіть не потрібно зберігати ядра xilinx ip - як тільки вони так, як вам потрібно, скопіюйте команди в скрипт tcl і вам більше не потрібно робити ip / більше.
вкажіть IP-каталог з аргументом -dir після -module_name, щоб розмістити його там, де ви хочете (за замовчуванням - у project.srcs).
Переважно все, що ви робите в GUI, можна зробити в tcl, найпростіший спосіб побачити, як xilinx робить речі, це зробити це в GUI, а потім подивитись, що потім знаходиться на консолі TCL.
Цей гумористичний pdf детально описує всі команди vivado tcl.