如何修改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 文件夹的结构如下所示。
- constr_1
- 进口
- project_1 <--这是约束文件
sim_1
- sources_1
- bd
- 包含一些我不使用的东西
- 进口
- 下载 <-- 包含部分 vhd 文件
- 新 <-- 包含另一部分 vhd 文件
- new <-- 包含其他 vhd 文件
我的目标是将所有 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) 中的详细信息,您创建的文件名由以下内容串联而成:
- 文字字符串
$
- 一个换行符 (!)
origin_dir
变量的内容
- 文字串
/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 目录。
我正在尝试修改 Vivado 2018.3 创建的用于版本控制的 tcl 脚本。一旦我尝试将所有 VHDL 文件放在一个目录中(并相应地修改脚本),脚本在调用 source build.tcl
时找不到所有文件我尝试遵循旧版 Vivadover 版本的版本控制说明,例如:https://github.com/tobiasrj20/Vivado-Version-Control-Example。
很遗憾,我找不到 Vivado 2018.3 的说明,因为示例脚本看起来与我从 Vivado 获得的不同。
Vivado Project.srcs 文件夹的结构如下所示。
- constr_1
- 进口
- project_1 <--这是约束文件
sim_1
- sources_1
- bd
- 包含一些我不使用的东西
- 进口
- 下载 <-- 包含部分 vhd 文件
- 新 <-- 包含另一部分 vhd 文件
- new <-- 包含其他 vhd 文件
我的目标是将所有 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) 中的详细信息,您创建的文件名由以下内容串联而成:
- 文字字符串
$
- 一个换行符 (!)
origin_dir
变量的内容- 文字串
/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 目录。