如何修改Vivado 2018.3生成的tcl脚本进行版本控制

How to modify Vivado 2018.3 generated tcl script for version control

我正在尝试修改 Vivado 2018.3 创建的用于版本控制的 tcl 脚本。一旦我尝试将所有 VHDL 文件放在一个目录中(并相应地修改脚本),脚本在调用 source build.tcl

时找不到所有文件

我尝试遵循旧版 Vivadover 版本的版本控制说明,例如:https://github.com/tobiasrj20/Vivado-Version-Control-Example

很遗憾,我找不到 Vivado 2018.3 的说明,因为示例脚本看起来与我从 Vivado 获得的不同。

Vivado Project.srcs 文件夹的结构如下所示。

我的目标是将所有 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 脚本来说看起来非常不寻常(去掉它周围的额外字符以使用列表中的结果):

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

因为 $ 只有在后面跟着字母数字(或 _::(){}; Tcl core language rules) 中的详细信息,您创建的文件名由以下内容串联而成:

  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 join.

结果的 file normalize

下面是我如何得到一个有效的 tcl 脚本:

假设我对以下文件夹结构使用 tcl 脚本:

  • 源码
    • constr <--包含约束文件
    • sim <-- 包含所有模拟文件
    • hdl <-- 包含合成器的所有文件

确保

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"]\

此外,每个文件都需要一个像这样的描述性块,link 指向它现在所在的目录。 (这是我在最初的问题中失败的地方):

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 目录。