编写Tcl脚本创建整个Vivado工程并通过Git对Tcl脚本进行管理

这篇具有很好参考价值的文章主要介绍了编写Tcl脚本创建整个Vivado工程并通过Git对Tcl脚本进行管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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工程。

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

以下是本项目的项目结构: 

 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,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

  • 编写Tcl脚本用于生成vivado工程。

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

  • vivado工具中的Tcl控制台进行工程项目的创建。

 tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

 tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

 tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

 tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发 这样就算是创建工程完成了,可以发现源文件已经添加并且已经综合、生成bit流可以直接下板了

 以下是vivado工程创建完成后文件夹的变化:

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

  •  也可以双击运行.bat文件进行工程的创建,只是不会进入Vivado工具的GUI界面。

右键使用编辑器编辑.bat文件

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发

Tcl脚本实现步骤 

使用Tcl脚本自动化完成Vivado工程创建的步骤,一般需要以下步骤:

  • 定义变量和路径,包括项目名称、工程路径、IP核路径等。tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发
  • 创建工程并设置工程属性,包括工程名称、工程路径、Vivado版本等。tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发
  • 添加源文件和IP核,可以使用add_files、add_ip等命令。tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发
  • 配置工程选项,包括综合、实现、仿真等选项,可以使用set_property等命令。tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发
  • 生成比特流文件和仿真波形,可以使用write_bitstream、run_simulation等命令。tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发
  • 如果需要从0到1添加一个IP,以ILA为例tcl脚本 vivado,FPGA 【Xilinx】,git,github,全文检索,搜索引擎,fpga开发
# 创建一个新的 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文章来源地址https://www.toymoban.com/news/detail-588884.html

到了这里,关于编写Tcl脚本创建整个Vivado工程并通过Git对Tcl脚本进行管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vivado SDK工程创建指南

    在完成工程创建后,详见: Vivado使用指南 第一步先选择主页左侧菜单栏中的模块创建,如下图所示: 可自定义模块名称,然后选择ok即可。 输入zynq后,双击该IP核完成创建。 最后我们可以得到如下图所示模块: 接着双击该IP核进行设置,我们可以看到ZYNQ模块的结构框图。

    2023年04月08日
    浏览(39)
  • VIVADO2022 sdk 工程创建流程

    正点原子uart历程复现 create block design(起名 为System) - open block design - +号/IP catalog 中搜索zynq 双击打开, 将和pl相关的时钟都干掉 再auto 布线一下 把herarchy中的sources 中的system.bd右键、 无脑下一步导出 如果不能无脑下一步,生成遇到错误,找其他的工程试试,大概率工程的问

    2024年02月14日
    浏览(39)
  • Vivado工程创建、仿真、下载与固化全流程

    本文以一个简单工程为例,介绍使用Vivado新建工程、代码的编写、Testbench代码的编写、波形仿真分析、引脚约束、生成bit流文件、通过JTAG将网表下载到开发板、程序的固化与下载全流程。 选自 野火《FPGA Verilog开发实战指南——基于Xilinx Artix7》

    2024年02月02日
    浏览(39)
  • 什么?通过 Prometheus 编写巡检脚本

    原文来源: https://tidb.net/blog/894d0118 笔者最近在驻场,发现这里的 tidb 集群是真的多,有将近150套集群。而且集群少则6个节点起步,多则有200多个节点。在这么庞大的集群体量下,巡检就变得非常的繁琐了。 那么有没有什么办法能够代替手动巡检,并且能够快速准确的获取到

    2024年02月04日
    浏览(34)
  • FPGA实现 TCP/IP 协议栈 纯VHDL代码编写 提供3套vivado工程源码和技术支持

    FPGA实现 TCP/IP 协议栈 服务器 纯VHDL代码编写 提供4套vivado工程源码和技术支持 没玩过TCP网络通信都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。目前网上fpga实现udp协议的源码满天飞,我这里也有不少,但用FPGA纯源码实现TCP的项目却很少,能上

    2024年02月04日
    浏览(86)
  • Tcl在Vivado中的使用

    Vivado是Xilinx最新的FPGA设计工具,支持7系列以后的FPGA及Zynq 7000的开发。与之前的ISE设计套件相比,Vivado可以说是全新设计的。无论从界面、设置、算法,还是从对使用者思路的要求,都是全新的。看了大家很多的博文,基本上都是用GUI创建工程,那我就简单介绍一下Vivado的脚

    2024年02月08日
    浏览(38)
  • 通过 Prometheus 编写 TiDB 巡检脚本(脚本已开源,内附链接)

    作者丨 caiyfc 来自神州数码钛合金战队 神州数码钛合金战队是一支致力于为企业提供分布式数据库 TiDB 整体解决方案的专业技术团队。团队成员拥有丰富的数据库从业背景,全部拥有 TiDB 高级资格证书,并活跃于 TiDB 开源社区,是官方认证合作伙伴。目前已为 10+ 客户提供了

    2024年02月20日
    浏览(41)
  • tcl学习之路(五)(Vivado时序约束)

      主时钟通常是FPGA器件外部的板机时钟或FPGA的高速收发器输出数据的同步恢复时钟信号等。下面这句语法大家一定不会陌生。该语句用于对主时钟的名称、周期、占空比以及对应物理引脚进行约束。   在设计中,未约束的时钟可以通过时钟网络报告和时钟确认报告查看

    2024年02月12日
    浏览(46)
  • tcl学习之路(二)(vivado设计流程管理)

    对于vivado的实现阶段有以下步骤 1.设计初始化阶段 init_design 2.设计优化 opt_design 默认执行 3.功耗优化 power_opt_design 4.布局 place_design 默认执行 5.布局后功耗优化 power_opt_design(post_place_power_opt_design) 6.布局后物理优化 phys_opt_design 默认执行 7.布线 route_design 默认执行 8.布线后物理

    2024年02月11日
    浏览(49)
  • 【运维工程师学习三】Linux中Shell脚本编写

    Shell程序有很多, 如 Korn shell(ksh)、Bourne Again shell(bash)、C shell(包括csh与tcsh) 等等, 各主要操作系统下缺省的shell: AIX下是 Korn Shell Solaris缺省的是 Bourne shell FreeBSD缺省的是 C shell HP-UX缺省的是 POSIX shell Linux缺省的是 Bourne Again shell 但这种在命令行中的命令是即时输出结果的,不

    2024年02月11日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包