我正在尝试修改Vivado 2018.3创建的用于版本控制的tcl脚本。当我尝试将所有VHDL文件放在一个目录中(并相应地修改脚本)时,脚本在调用源build.tcl时无法找到所有文件
我试着按照以前的Vivadoversions的版本控制说明进行操作,比如: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版本。
发布于 2019-08-25 23:44:18
下面是我如何获得一个工作的tcl脚本:
假设我对以下文件夹结构使用了tcl脚本:
请确保
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“语句,适合您想要合成您的设计。这可以添加到上面的替换代码中。
对于将被合成的vhdl文件,请搜索以下行:
# Set 'sources_1' fileset object下面的线条应该是这样的:
[file normalize "${origin_dir}/src/hdl/<file name>.vhd"]\此外,ach文件需要像这样的描述性块,并提供一个指向它现在所在目录的链接。(这就是我在第一个问题中失败的地方):
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目录。
发布于 2019-08-25 15:16:11
对于Tcl脚本来说,这个命令调用看起来非常不寻常(去掉它周围的额外字符以使用列表中的结果):
file normalize "$
$origin_dir/src/clk_gen_25M.vhd"因为$只有在后面跟着字母数字(或_、::或(…)时才是特殊的。)或{…};Tcl核心语言规则中的详细信息),您将创建一个文件名,该文件名由以下内容的级联组成:
$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。
https://stackoverflow.com/questions/57640831
复制相似问题