I.引文
简介
Tcl(Tool Command Language)是一种简单易学、高效的脚本语言,可用于多种应用程序和操作系统。Xilinx Vivado是一款用于FPGA开发的综合软件平台,其内部集成了Tcl Shell,可以通过编写Tcl脚本自动化完成Vivado的工程创建和配置,从而提高工作效率和代码复用性。本文将介绍如何使用Tcl脚本创建整个Vivado工程,并通过Git对Tcl脚本进行管理。
目的
本文的目的是介绍如何使用Tcl脚本自动化完成Vivado工程的创建和配置,并使用Git对Tcl脚本进行管理,以提高工作效率和代码复用性。
优势
使用Tcl脚本和Git管理Vivado工程有以下优势:
- 提高工作效率,省去手动创建和配置工程的繁琐过程。
- 方便维护,通过Git可以方便地追踪修改历史、协作开发和版本控制,避免出现冲突和错误。
- 可复用性强,通过Tcl脚本和Git可以轻松地复用已有的代码和工程,避免重复工作和浪费资源。
- 灵活性高,使用Tcl脚本可以自定义各种Vivado工程配置选项,使得工程的配置更加灵活,满足不同的项目需求。
II.Vivado Tcl Shell介绍
Tcl Shell是什么
Vivado Tcl Shell是一种内置在Vivado中的交互式解释器,它支持Tcl语言和Vivado Shell命令,用户可以通过Tcl脚本在Vivado Tcl Shell中执行各种命令,自动化地完成Vivado工程的创建、配置、仿真等操作。
Tcl Shell的优势
Vivado Tcl Shell有以下优势:
- 方便快捷,Tcl语言简单易学,用户可以通过Tcl脚本快速完成复杂的Vivado工程配置和操作。
- 高效准确,Tcl脚本可以保证配置的准确性和一致性,避免人为疏漏和错误。
- 可扩展性强,用户可以编写自己的Tcl脚本和命令,根据实际需求扩展Vivado Tcl Shell的功能
Tcl Shell命令举例
以下是一些常用的Vivado Tcl Shell命令:
- create_project:创建一个新的Vivado工程。
- add_files:向工程中添加源文件或IP核。
- set_property:设置某个对象的属性。
- add_bd_design:在Vivado Block Design中添加一个新的设计。
- start_gui:启动Vivado GUI界面。
- open_project:打开一个已存在的Vivado工程。
- write_bd_tcl:将当前的Block Design保存为Tcl脚本文件。
- write_project_tcl:将整个Vivado工程保存为Tcl脚本文件。
- synthesize:对设计进行综合。
- implement:对综合后的设计进行实现。
- export_ip_user_files:导出IP核的用户文件。
- run_simulation:运行仿真。
III. Tcl脚本创建Vivado工程
工程创建流程
创建Vivado工程通常需要以下步骤:
- 创建一个新的Vivado工程。
**以下是本项目的项目结构: **
01_led_project
├── .git #git generation
├── led.bat
├── led.tcl # Project generator script
├── src/ # Tracked source files
│ ├── design/
│ │ ├── *.v
│ │ └── *.vhd
│ ├── testbench/
│ │ ├── *.v
│ │ └── *.vhd
│ ├── constraints/
│ │ └── *.xdc
│ └── ...
├── ips/ # Tracked project-specific IP repository
│ ├── sys_ip/
│ │ │
│ │ └─.xci
│ ├── my_ip/
│ └── ...
└── vivado_led_project/ # Untracked generated files
├── project_name.xpr
├── project_name.cache/
├── project_name.hw/
├── project_name.sim/
├── project_name.srcs/
│ ├── sources_1/
│ │ ├── bd/ # BDs are regenerated from script
│ │ │ ├── my_bd/
│ │ │ └── ...
│ │ └── new/ # .v file
│ │ │ ├── .{v,vhd}
│ │ │ └── ...
│ │ └──ip/
│ └── ...
└── ...
- 向工程中添加需要的源文件和IP核。
- 编写Tcl脚本用于生成vivado工程。
- vivado工具中的Tcl控制台进行工程项目的创建。
这样就算是创建工程完成了,可以发现源文件已经添加并且已经综合、生成bit流可以直接下板了
以下是vivado工程创建完成后文件夹的变化:
- 也可以双击运行.bat文件进行工程的创建,只是不会进入Vivado工具的GUI界面。
右键使用编辑器编辑.bat文件
Tcl脚本实现步骤
使用Tcl脚本自动化完成Vivado工程创建的步骤,一般需要以下步骤:
- 定义变量和路径,包括项目名称、工程路径、IP核路径等。
- 创建工程并设置工程属性,包括工程名称、工程路径、Vivado版本等。
- 添加源文件和IP核,可以使用add_files、add_ip等命令。
- 配置工程选项,包括综合、实现、仿真等选项,可以使用set_property等命令。
- 生成比特流文件和仿真波形,可以使用write_bitstream、run_simulation等命令。
- 如果需要从0到1添加一个IP,以ILA为例
# 创建一个新的 ILA IP
create_ip -name ila -vendor xilinx.com -library ip -version 6.2 -module_name ila -dir $work_dir/$proj_name/$proj_name.srcs/sources_1/ip
set_property -dict [list CONFIG.C_PROBE0_WIDTH {32} CONFIG.C_NUM_OF_PROBES {2} CONFIG.Component_Name {ila}] [get_ips ila]
#set_property -dict [list CONFIG.C_PROBE4_WIDTH {128} CONFIG.C_PROBE3_WIDTH {8} CONFIG.C_PROBE2_WIDTH {32} CONFIG.C_PROBE1_WIDTH {16} CONFIG.C_DATA_DEPTH {2048} CONFIG.C_NUM_OF_PROBES {5} CONFIG.C_ENABLE_ILA_AXI_MON {false} CONFIG.C_MONITOR_TYPE {Native}] [get_ips ila_0]
generate_target {instantiation_template} [get_files $work_dir/$proj_name/$proj_name.srcs/sources_1/ip/ila/ila.xci]
update_compile_order -fileset sources_1
generate_target all [get_files $work_dir/$proj_name/$proj_name.srcs/sources_1/ip/ila/ila.xci]
catch { config_ip_cache -export [get_ips -all ila] }
export_ip_user_files -of_objects [get_files $work_dir/$proj_name/$proj_name.srcs/sources_1/ip/ila/ila.xci] -no_script -sync -force -quiet
create_ip_run [get_files -of_objects [get_fileset sources_1] $work_dir/$proj_name/$proj_name.srcs/sources_1/ip/ila/ila.xci]
launch_runs ila_synth_1 -jobs 5
export_simulation -of_objects [get_files $work_dir/$proj_name/$proj_name.srcs/sources_1/ip/ila/ila.xci] -directory $work_dir/$proj_name/vivado_led.ip_user_files/sim_scripts -ip_user_files_dir $work_dir/$proj_name/vivado_led.ip_user_files -ipstatic_source_dir $work_dir/$proj_name/vivado_led.ip_user_files/ipstatic -lib_map_path [list {modelsim=$work_dir/$proj_name/vivado_led.cache/compile_simlib/modelsim} {questa=$work_dir/$proj_name/vivado_led.cache/compile_simlib/questa} {riviera=$work_dir/$proj_name/vivado_led.cache/compile_simlib/riviera} {activehdl=$work_dir/$proj_name/vivado_led.cache/compile_simlib/activehdl}] -use_ip_compiled_libs -force -quiet
代码示例
下面是一个简单的Tcl脚本示例,演示了如何创建一个新的led的Vivado工程以及详细的注释。
#设置项目名称和工作目录
set proj_name "vivado_led"
set work_dir [pwd]
#创建工程
#**********************************************************************************************************
create_project -force $proj_name $work_dir/$proj_name -part xazu3eg-sfvc784-1-i
# Create 'sources_1' fileset (if not found);file mkdir创建ip、new、bd三个子文件
if {[string equal [get_filesets -quiet sources_1] ""]} {
create_fileset -srcset sources_1
}
file mkdir $work_dir/$proj_name/$proj_name.srcs/sources_1/ip
file mkdir $work_dir/$proj_name/$proj_name.srcs/sources_1/new
file mkdir $work_dir/$proj_name/$proj_name.srcs/sources_1/bd
# Create 'constrs_1' fileset (if not found)
if {[string equal [get_filesets -quiet constrs_1] ""]} {
create_fileset -constrset constrs_1
}
file mkdir $work_dir/$proj_name/$proj_name.srcs/constrs_1/new
# Create 'sim_1' fileset (if not found)
if {[string equal [get_filesets -quiet sim_1] ""]} {
create_fileset -simset sim_1
}
file mkdir $work_dir/$proj_name/$proj_name.srcs/sim_1/new
#************************************************************************************************************
#添加源文件
add_files -fileset sources_1 -copy_to $work_dir/$proj_name/$proj_name.srcs/sources_1/new -force -quiet [glob -nocomplain $work_dir/src/design/*.v]
add_files -fileset sim_1 -copy_to $work_dir/$proj_name/$proj_name.srcs/sim_1/new -force -quiet [glob -nocomplain $work_dir/src/testbench/*.v]
#添加约束文件
add_files -fileset constrs_1 -copy_to $work_dir/$proj_name/$proj_name.srcs/constrs_1/new -force -quiet [glob -nocomplain $work_dir/src/constraints/*.xdc]
# 添加IP的.xci文件
add_files -fileset sources_1 -copy_to $work_dir/$proj_name/$proj_name.srcs/sources_1/ip -force -quiet [glob -nocomplain $work_dir/ips/sys_ip/*.xci]
#生成Block Design
#source $work_dir/vivado_project/$proj_name.srcs/sources_1/bd/my_bd/my_bd.tcl
#*************************************************************************************************************
# 综合
launch_runs synth_1 -jobs 5
wait_on_run synth_1
# 设置顶层文件属性
#set_property top_auto_detect true [current_project]
set_property top_file "/$work_dir/$proj_name/$proj_name.srcs/sources_1/new/led.v" [current_fileset]
#运行综合、实现和生成比特流
#synth_design -to_current_top
#指定综合顶层模块为“led”
synth_design -top led
#执行逻辑综合优化,主要是优化逻辑电路的面积、时钟频率、功耗等指标
opt_design
#执行布局,将逻辑元素映射到物理位置,并考虑时序约束
place_design
#执行布线,将物理电路中的逻辑元素通过信号线连接在一起
route_design
#将比特流写入到指定的文件中,即生成.bit文件。-force参数用于强制覆盖已有的文件
write_bitstream -force $work_dir/$proj_name.bit
#生成用于调试的信号探针,将信号探针写入到指定的文件中,即生成.ltx文件
write_debug_probes -file $work_dir/$proj_name.ltx
IV. Git管理Tcl脚本和Vivado工程
Git是什么
Git是一种分布式版本控制系统,可以记录文件的修改历史、协作开发和版本控制。Git的核心思想是将文件的修改历史保存在一个本地或远程的代码库中,每次修改都会生成一个新的提交,提交可以被视为文件的一个快照。Git还支持分支、合并等高级功能,使得协作开发变得更加灵活和效。
Git的优势
使用Git进行版本控制有以下优势:
- 完整的版本历史记录,可以回溯每一个版本的修改记录,方便排查错误和恢复代码。
- 多人协作开发,可以方便地管理多个开发者的代码贡献,协作开发更加高效。
- 分支管理,可以方便地管理和合并不同的代码分支,使得代码的开发和维护更加灵活和高效。
- 远程仓库,可以将代码仓库上传到远程服务器,方便协作开发和备份。
Git与Vivado工程集成
将Git与Vivado工程集成需要以下步骤:
- 创建Git仓库:在Vivado工程所在的目录下创建一个新的Git仓库。
- 添加文件:将Vivado工程的文件和Tcl脚本添加到Git仓库中。
- 提交更改:在对工程进行更改后,将更改提交到本地仓库。
- 推送到远程仓库:将本地仓库的更改推送到远程仓库中,以便多人协作开发和备份。
代码管理流程
使用Git进行代码管理的基本流程如下:
- 克隆代码仓库:从远程仓库中克隆代码到本地。
- 创建分支:在本地创建一个新的分支,以便进行新的代码开发或修改。
- 修改代码:对代码进行修改或添加新的功能。
- 提交代码:将代码更改提交到本地仓库中。
- 合并分支:将新的代码合并到主分支中。
- 推送到远程仓库:将本地仓库的更改推送到远程仓库中。
分支管理
使用Git进行分支管理可以使得代码的开发和维护更加灵活和高效。以下是一些常用分支管理令:
- 创建分支:git branch [branch_name]
- 切换分支:git checkout [branch_name]
- 合并分支:git merge [branch_name]
- 删除分支:git branch -d [branch_name]
提交代码
使用Git提交代码需要以下步骤:
- 添加修改文件到暂存区:git add [file_name]
- 提交更改到本地仓库:git commit -m "commit message"
- 推送更改到远程仓库:git push origin [branch_name]
V. 总结
本文介绍了如何使用Tcl脚本自动化完成Vivado工程的创建和配置,并通过Git进行代码管理,以提高工作效率和代码复用性。使用Tcl脚本和Git管理Vivado工程可以方便地追踪修改历史、协作开发和版本控制,避免出现冲突和错误,同时也可以实现工程代码的复用。在本文中,我们讨论了Vivado Tcl Shell的优势和常用命令,并介绍了如何使用Tcl脚本自动创建Vivado工程,并使用Git进行代码管理。
在实际项目中,使用Tcl脚本和Git管理Vivado工程可以极大地提高开发效率和代码质量,特别是对于重复性工作和多人协作开发场景。然而,在使用Tcl脚本自动化创建Vivado工程时,需要注意配置选项的正确性和一致性,以避免出现不可预期的错误。
总的来说,Tcl脚本和Git管理是Vivado工程开发中不可或缺的技术,能够帮助开发者提高工作效率和代码质量,同时也促进了代码的可重用性和协作开发的便捷性。
由此本文分享结束!
欢迎指正!
VI. 参考博客
作者:Jeff Johnson
Version control for Vivado projects - FPGA Developer
版权归原作者 JunFN8 所有, 如有侵权,请联系我们删除。