赞
踩
Tcl(Tool Command Language)是一种简单易学、高效的脚本语言,可用于多种应用程序和操作系统。Xilinx Vivado是一款用于FPGA开发的综合软件平台,其内部集成了Tcl Shell,可以通过编写Tcl脚本自动化完成Vivado的工程创建和配置,从而提高工作效率和代码复用性。本文将介绍如何使用Tcl脚本创建整个Vivado工程,并通过Git对Tcl脚本进行管理。
本文的目的是介绍如何使用Tcl脚本自动化完成Vivado工程的创建和配置,并使用Git对Tcl脚本进行管理,以提高工作效率和代码复用性。
使用Tcl脚本和Git管理Vivado工程有以下优势:
Vivado Tcl Shell是一种内置在Vivado中的交互式解释器,它支持Tcl语言和Vivado Shell命令,用户可以通过Tcl脚本在Vivado Tcl Shell中执行各种命令,自动化地完成Vivado工程的创建、配置、仿真等操作。
Vivado Tcl Shell有以下优势:
以下是一些常用的Vivado Tcl Shell命令:
创建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/
- │ └── ...
- └── ...
这样就算是创建工程完成了,可以发现源文件已经添加并且已经综合、生成bit流可以直接下板了
以下是vivado工程创建完成后文件夹的变化:
右键使用编辑器编辑.bat文件
使用Tcl脚本自动化完成Vivado工程创建的步骤,一般需要以下步骤:
- # 创建一个新的 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
Git是一种分布式版本控制系统,可以记录文件的修改历史、协作开发和版本控制。Git的核心思想是将文件的修改历史保存在一个本地或远程的代码库中,每次修改都会生成一个新的提交,提交可以被视为文件的一个快照。Git还支持分支、合并等高级功能,使得协作开发变得更加灵活和效。
使用Git进行版本控制有以下优势:
将Git与Vivado工程集成需要以下步骤:
使用Git进行代码管理的基本流程如下:
使用Git进行分支管理可以使得代码的开发和维护更加灵活和高效。以下是一些常用分支管理令:
使用Git提交代码需要以下步骤:
本文介绍了如何使用Tcl脚本自动化完成Vivado工程的创建和配置,并通过Git进行代码管理,以提高工作效率和代码复用性。使用Tcl脚本和Git管理Vivado工程可以方便地追踪修改历史、协作开发和版本控制,避免出现冲突和错误,同时也可以实现工程代码的复用。在本文中,我们讨论了Vivado Tcl Shell的优势和常用命令,并介绍了如何使用Tcl脚本自动创建Vivado工程,并使用Git进行代码管理。
在实际项目中,使用Tcl脚本和Git管理Vivado工程可以极大地提高开发效率和代码质量,特别是对于重复性工作和多人协作开发场景。然而,在使用Tcl脚本自动化创建Vivado工程时,需要注意配置选项的正确性和一致性,以避免出现不可预期的错误。
总的来说,Tcl脚本和Git管理是Vivado工程开发中不可或缺的技术,能够帮助开发者提高工作效率和代码质量,同时也促进了代码的可重用性和协作开发的便捷性。
由此本文分享结束!
欢迎指正!
作者:Jeff Johnson
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。