Как изменить сгенерированный tcl-скрипт Vivado 2018.3 для контроля версий

Я пытаюсь изменить сценарий 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.

См. также:  Правило Firestore - запрос поля документа без раскрытия всей коллекции
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. le_audio

    Этот вызов команды выглядит очень необычно для сценария Tcl (удаление лишних символов вокруг него, чтобы использовать результаты в списке):

    file normalize "$
    $origin_dir/src/clk_gen_25M.vhd"
    

    Поскольку $ является особенным только тогда, когда за ним следует буквенно-цифровое значение (или _, или ::, или (), или {}; подробности в правила основного языка Tcl), вы создаете имя файла, состоящее из конкатенации:

    1. буквальная строка $
    2. перевод строки (!)
    3. содержимое переменной origin_dir
    4. буквальная строка /src/clk_gen_25M.vhd

    Не думаю, что вам нужны были первые две части. Более обычная форма была бы:

    file normalize $origin_dir/src/clk_gen_25M.vhd
    

    Вы также можете попробовать использовать file join:

    file normalize [file join $origin_dir src/clk_gen_25M.vhd]
    

    Если origin_dir имеет полный путь, вам не понадобится file normalize результата file join.

    Спасибо за ваш ответ. Вы правы, наверное, произошла ошибка копирования и вставки. Я нашел способ, который работает. Об этом подробно расскажу в дополнительном комментарии. person le_audio; 26.08.2019

  2. le_audio

    Вот как у меня получился рабочий tcl-скрипт:

    Предполагая, что я использую tcl-скрипт для следующей структуры папок:

    • src
      • constr <—contains the constraints file
      • sim <— contains all simulation files
      • hdl <— contains all files for syntheszis

    Убедись в том, что

    set _xil_proj_name_ "<project name>"
    

    назван по вашему желанию.

    Заменять

    set origin_dir "."
    

    с участием

    set origin_dir [file dirname [info script]]
    

    А также

    create_project ${_xil_proj_name_} ./${_xil_proj_name_}
    

    с участием

    create_project ${_xil_proj_name_} $origin_dir/${_xil_proj_name_}
    

    Там может быть инструкция «-part xxx», подходящая для FPGA, для которой вы хотите синтезировать свой проект. Это можно добавить к приведенному выше коду замены.

    Для файлов vhdl, которые будут синтезированы, найдите следующую строку:

    # Set 'sources_1' fileset object
    

    Строки ниже должны выглядеть так:

     [file normalize "${origin_dir}/src/hdl/<file name>.vhd"]\
    

    Более того, каждому файлу нужен описательный блок, подобный этому, со ссылкой на каталог, в котором он сейчас находится. (Вот где я не смог ответить на первый вопрос):

    set file "hdl/<file name>.vhd"
    set file_obj [get_files -of_objects [get_filesets sources_1] [list "*$file"]]
    set_property -name "file_type" -value "VHDL" -objects $file_obj
    

    То же самое касается файлов моделирования и ограничений. Файлы моделирования можно найти на

    # Set 'sim_1' fileset object
    

    Убедитесь, что все файлы указывают на правильный каталог 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

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: