首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何修改Vivado 2018.3生成的用于版本控制的tcl脚本

如何修改Vivado 2018.3生成的用于版本控制的tcl脚本
EN

Stack Overflow用户
提问于 2019-08-24 19:09:38
回答 2查看 1.3K关注 0票数 1

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

我试着按照以前的Vivadoversions的版本控制说明进行操作,比如: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文件的另一部分

      • 新<-包含其他vhd文件

我的目标是将所有vhd文件移动到一个文件夹中,例如,称为"src“。并相应地修改tcl脚本。

我根据上面给出的教程修改了脚本中的各个部分。将所有绝对路径替换为相对路径。例如:

原稿

代码语言:javascript
运行
复制
set files [list \
 [file normalize "${origin_dir}/fpga_top_v2.srcs/sources_1/new/clk_gen_25M.vhd" ]\

修改:

代码语言:javascript
运行
复制
set files [list \
 [file normalize "$
$origin_dir/src/clk_gen_25M.vhd" ]\

还有这个部分,我不确定我是否需要改变它。

代码语言:javascript
运行
复制
# 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控制台在源过程中表示如下:

代码语言:javascript
运行
复制
# 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版本。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-25 23:44:18

下面是我如何获得一个工作的tcl脚本:

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

  • src
    • --包含约束文件

    • sim <--包含所有模拟文件

    • hdl <-包含所有用于syntheszis的文件

请确保

代码语言:javascript
运行
复制
set _xil_proj_name_ "<project name>"

是根据你的意愿命名的。

替换

代码语言:javascript
运行
复制
set origin_dir "."

使用

代码语言:javascript
运行
复制
set origin_dir [file dirname [info script]]

代码语言:javascript
运行
复制
create_project ${_xil_proj_name_} ./${_xil_proj_name_}

使用

代码语言:javascript
运行
复制
create_project ${_xil_proj_name_} $origin_dir/${_xil_proj_name_}

可能有一个"-part xxx“语句,适合您想要合成您的设计。这可以添加到上面的替换代码中。

对于将被合成的vhdl文件,请搜索以下行:

代码语言:javascript
运行
复制
# Set 'sources_1' fileset object

下面的线条应该是这样的:

代码语言:javascript
运行
复制
 [file normalize "${origin_dir}/src/hdl/<file name>.vhd"]\

此外,ach文件需要像这样的描述性块,并提供一个指向它现在所在目录的链接。(这就是我在第一个问题中失败的地方):

代码语言:javascript
运行
复制
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

仿真和约束文件也是如此。模拟文件可在

代码语言:javascript
运行
复制
# Set 'sim_1' fileset object

确保所有文件都指向正确的src/xxx/..vhd目录。

票数 0
EN

Stack Overflow用户

发布于 2019-08-25 15:16:11

对于Tcl脚本来说,这个命令调用看起来非常不寻常(去掉它周围的额外字符以使用列表中的结果):

代码语言:javascript
运行
复制
file normalize "$
$origin_dir/src/clk_gen_25M.vhd"

因为$只有在后面跟着字母数字(或_::(…)时才是特殊的。){}Tcl核心语言规则中的详细信息),您将创建一个文件名,该文件名由以下内容的级联组成:

  1. 文字字符串$
  2. 换行符(!)
  3. origin_dir变量的内容
  4. 文字字符串/src/clk_gen_25M.vhd

我不认为你想要前两部分。一种更为传统的形式是:

代码语言:javascript
运行
复制
file normalize $origin_dir/src/clk_gen_25M.vhd

您也可以尝试使用file join

代码语言:javascript
运行
复制
file normalize [file join $origin_dir src/clk_gen_25M.vhd]

如果origin_dir有完整的路径名,则不需要file join结果的file normalize

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57640831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档