Я пытаюсь изменить сценарий tcl, созданный Vivado 2018.3, для управления версиями. Как только я попытаюсь поместить все файлы VHDL в один каталог (и соответствующим образом изменить сценарий), сценарий не сможет найти все файлы при вызове source build.tcl
Я пытался следовать инструкциям по управлению версиями для старых версий Vivadoversion, подобных этой: https://github.com/tobiasrj20/Vivado-Version-Control-Example.
К сожалению, я не смог найти инструкции для Vivado 2018.3, поскольку сценарий примера выглядит иначе, чем то, что я получил от Vivado.
Структура папки Vivado Project.srcs выглядит следующим образом.
- constr_1
-
- imports
-
-
- project_1 <—Here is the constraints file
-
-
sim_1
-
- sources_1
-
-
- bd
-
-
-
-
- contains some stuff I don’t use
-
-
-
-
- imports
-
-
-
-
- Downloads <— contains a part of vhd files
-
-
-
-
-
- new <— contains another part of vhd files
-
-
-
-
- new <— contains other vhd files
-
Моя цель — переместить все файлы vhd в одну папку, например, под названием «src». И соответствующим образом изменить сценарий tcl.
Я изменил части в скрипте в соответствии с руководством, приведенным выше. И заменил все абсолютные пути на относительные пути. Например так:
Оригинальный сценарий
set files [list \
[file normalize "${origin_dir}/fpga_top_v2.srcs/sources_1/new/clk_gen_25M.vhd" ]\
Изменено:
set files [list \
[file normalize "$
$origin_dir/src/clk_gen_25M.vhd" ]\
Затем есть эта часть, где я не уверен, нужно ли мне ее менять.
# Set 'sources_1' fileset file properties for local files
set file "new/clk_gen_25M.vhd"
set file_obj [get_files -of_objects [get_filesets sources_1] [list "*$file"]]
set_property -name "file_type" -value "VHDL" -objects $file_obj
Поскольку консоль tcl говорит следующее во время исходного процесса:
# set file "new/clk_gen_25M.vhd"
WARNING: [Vivado 12-818] No files matched '*new/clk_gen_25M.vhd'
# set file_obj [get_files -of_objects [get_filesets sources_1] [list "*$file"]]
# set_property -name "file_type" -value "VHDL" -objects $file_obj
ERROR: [Common 17-55] 'set_property' expects at least one object.
Resolution: If [get_<value>] was used to populate the object, check to make sure this command returns at least one valid object.
Приносим извинения, если этот вопрос задавался раньше, но я не смог найти ответов на этот вопрос, особенно для версии Vivado 2018.3.
Этот вызов команды выглядит очень необычно для сценария Tcl (удаление лишних символов вокруг него, чтобы использовать результаты в списке):
Поскольку
$
является особенным только тогда, когда за ним следует буквенно-цифровое значение (или_
, или::
, или(
…)
, или{
…}
; подробности в правила основного языка Tcl), вы создаете имя файла, состоящее из конкатенации:$
origin_dir
/src/clk_gen_25M.vhd
Не думаю, что вам нужны были первые две части. Более обычная форма была бы:
Вы также можете попробовать использовать
file join
:Если
origin_dir
имеет полный путь, вам не понадобитсяfile normalize
результатаfile join
.Спасибо за ваш ответ. Вы правы, наверное, произошла ошибка копирования и вставки. Я нашел способ, который работает. Об этом подробно расскажу в дополнительном комментарии. — person le_audio; 26.08.2019
Вот как у меня получился рабочий tcl-скрипт:
Предполагая, что я использую tcl-скрипт для следующей структуры папок:
Убедись в том, что
назван по вашему желанию.
Заменять
с участием
А также
с участием
Там может быть инструкция «-part xxx», подходящая для FPGA, для которой вы хотите синтезировать свой проект. Это можно добавить к приведенному выше коду замены.
Для файлов vhdl, которые будут синтезированы, найдите следующую строку:
Строки ниже должны выглядеть так:
Более того, каждому файлу нужен описательный блок, подобный этому, со ссылкой на каталог, в котором он сейчас находится. (Вот где я не смог ответить на первый вопрос):
То же самое касается файлов моделирования и ограничений. Файлы моделирования можно найти на
Убедитесь, что все файлы указывают на правильный каталог src / xxx / .vhd.
Замените set import_files [import_files -fileset src_1 $ files] на add_files -norecurse -fileset $ obj $ files. Это связывает файлы src с проектом vivado вместо их копирования — person le_audio; 05.09.2019