tcl - 从 TCL 文件重新创建 Vivado 项目而不复制源代码
问题描述
我曾经write_project_tcl
从 Vivado 项目创建 TCL 脚本,然后可以使用该脚本重新创建项目的结构。如果我通过 运行脚本vivado -mode batch
,它会创建一个目录结构并将源 HDL 文件复制到这些新创建的目录中。这是目录树的相关部分:
$ tree SpaceInvaders.srcs/sources_1/imports/
SpaceInvaders.srcs/sources_1/imports/
└── _build-vivado
├── clash-syn
│ └── verilog
│ └── SpaceInvaders
│ └── SpaceInvaders
│ ├── SpaceInvaders.v
│ ├── image.hex
│ ├── null-SpaceInvaders-0-1024x8.hex
│ └── null-SpaceInvaders-1-7168x8.hex
└── xilinx-vivado
└── src-hdl
└── Top.v
现在我想更改脚本,以便不复制源文件;相反,我希望生成的.xpr
项目文件在其原始位置引用它们。
当前复制源的 TCL 脚本部分是这一位:
# Set 'sources_1' fileset object
set obj [get_filesets sources_1]
# Import local files from the original project
set files [list \
[file normalize "${origin_dir}/src-hdl/Top.v" ]\
[file normalize "${origin_dir}/../clash-syn/verilog/SpaceInvaders/SpaceInvaders/SpaceInvaders.v" ]\
[file normalize "${origin_dir}/../clash-syn/verilog/SpaceInvaders/SpaceInvaders/image.hex" ]\
[file normalize "${origin_dir}/../clash-syn/verilog/SpaceInvaders/SpaceInvaders/null-SpaceInvaders-0-1024x8.hex" ]\
[file normalize "${origin_dir}/../clash-syn/verilog/SpaceInvaders/SpaceInvaders/null-SpaceInvaders-1-7168x8.hex" ]\
]
set imported_files [import_files -fileset sources_1 $files]
# Set 'sources_1' fileset file properties for remote files
# None
# Set 'sources_1' fileset file properties for local files
# None
# Set 'sources_1' fileset properties
set obj [get_filesets sources_1]
set_property -name "top" -value "Top" -objects $obj
# Set 'sources_1' fileset object
set obj [get_filesets sources_1]
# Import local files from the original project
set files [list \
[file normalize "${origin_dir}/ip/ClockWiz25.xci" ]\
]
set imported_files [import_files -fileset sources_1 $files]
# Set 'sources_1' fileset file properties for remote files
# None
# Set 'sources_1' fileset file properties for local files
set file "ClockWiz25/ClockWiz25.xci"
set file_obj [get_files -of_objects [get_filesets sources_1] [list "*$file"]]
set_property -name "generate_files_for_reference" -value "0" -objects $file_obj
set_property -name "registered_with_manager" -value "1" -objects $file_obj
if { ![get_property "is_locked" $file_obj] } {
set_property -name "synth_checkpoint_mode" -value "Singular" -objects $file_obj
}
仅基于文件中的该评论,我想这将是我想使用的“远程源”?
解决方案
我可以通过替换像这样的行来做到这一点
set imported_files [import_files -fileset sources_1 $files]
和
add_files -norecurse -fileset $obj $files
这样,文件在生成的项目文件中通过其原始路径引用。
推荐阅读
- angular - 在 Angular 中渲染多个传单地图
- c++ - 如果使用 lambda,std::unique_ptr 如何没有大小开销
- python - 如何打开文件并调用函数来解析列表?
- c# - C#:解决 IServiceProvider.QueryService 缺少的程序集参考
- post - SwiftUI 读取 http 响应代码并可以在控制台中打印,但不会在 if 语句中运行任何其他代码
- mysql - 为什么我的 MariaDB 导入只导入了部分数据行?
- c++ - Cmake execute_process 在构建时获取 git commit hash 在构建时
- python - 如何让 BeautifulSoup 检测到 ul 中的 li?
- android - 为什么在for循环中从应用程序包获取数据会导致stackoverflow错误
- installation - 无法安装 Dynamics ax 2012 - 错误 OpenDatabase