vivado tcl 全流程

本文档介绍了如何使用TCL脚本实现Vivado设计流程的自动化,包括从现有工程中获取IP和BlockDesign的TCL脚本,以及更新后的TCL全流程代码,增加了参数传递功能。更新后的脚本适用于已有GUI工程转换为TCL模式,详细阐述了各个步骤,并提供了测试环境和相关参考文档。
摘要由CSDN通过智能技术生成

更新

2021-12-23_v1

更新TCL全流程代码,增加参数传递的功能。
增加参考文献6。

前言

之前都在用gui,后来项目要求用tcl脚本。网上的教程大都不涉及IP和block design。所以把自己的脚本放上来。
脚本适用于已经有GUI的工程,然后想转TCL模式
测试环境

系统:Windows 10 专业版 64位 
版本号:21H1
Vivado版本:2020.2

从现有工程得到IP和BlockDesign的TCL脚本

  • 打开现有工程。
  • 生成IP tcl
write_ip_tcl -force [get_ips]  create_ip.tcl
  • 生成BlockDesign tcl
open_bd_design bd_design_name
write_bd_tcl -force create_bd.tcl

最初的TCL 全流程代码

简要的说明

  • E:/JTAG_BRAM_TCL 是工程运行目录, 根据需要修改
  • src_dir 是源文件所在目录
  • xdc_dir 是约束文件所在目录
  • output_dir 是所有生成的报告和位流所在的目录

代码

cd E:/JTAG_BRAM_TCL
file delete -force .gen
file delete -force .srcs
file delete -force .Xil
# 0 basic config
	## 0.1 set dir
	set src_dir "E:/JTAG_BRAM/project_JTAG_BRAM/project_JTAG_BRAM.srcs/sources_1/new"
    set xdc_dir "E:/JTAG_BRAM/project_JTAG_BRAM/project_JTAG_BRAM.srcs/constrs_1/new"
	set output_dir "output_dir"

	file mkdir $output_dir

	## 0.2 set design parameter
	set top_design_name "top"
	set target_part "xcvu9p-flga2104-2L-e"
	set target_board_part "xilinx.com:vcu118:part0:2.4"
	set ip_name "blk_mem_gen_0"
	set bd_name "design_1"
	set ip_xci_path .srcs/sources_1/ip/$ip_name/$ip_name.xci
	set bd_path .srcs/sources_1/bd/$bd_name/$bd_name.bd
	set bd_wrapper_path .gen/sources_1/bd/$bd_name/hdl/${bd_name}_wrapper.v

	set_part $target_part
	set_property TARGET_LANGUAGE "Verilog" [current_project]
	set_property BOARD_PART $target_board_part [current_project]
	set_property DEFAULT_LIB work [current_project]

# 1 read source file
	# 1.1 read_ip
    source create_ip.tcl
	read_ip $ip_xci_path
	generate_target all [get_ips $ip_name]
	synth_ip [get_ips $ip_name]
	
	add_files $ip_xci_path

	# 1.2 read block design
	source create_bd.tcl
	read_bd $bd_path
	open_bd_design $bd_path
	make_wrapper -files [get_files  $bd_path] -top
	read_verilog  $bd_wrapper_path
	set_property synth_checkpoint_mode None [get_files $bd_path]
	generate_target all [get_files $bd_path]	
	# 1.3 read 
	read_verilog $src_dir/top.v
	read_xdc $xdc_dir/top.xdc


# 2 run synthesis, report utilization and timing estimates, write checkpoint design

	synth_design -top $top_design_name -part $target_part
	write_checkpoint -force $output_dir/post_synth
	report_timing_summary -file $output_dir/post_synth_timing_summary.rpt
	report_power -file $output_dir/post_synth_power.rpt

# 3 run placement and logic optimzation, report utilization and timing estimates, write checkpoint design
	opt_design
	place_design
	phys_opt_design
	write_checkpoint -force $output_dir/post_place
	report_timing_summary -file $output_dir/post_place_timing_summary.rpt

#4: run router, report actual utilization and timing, write checkpoint design, run drc, write verilog and xdc out
	route_design
	write_checkpoint -force $output_dir/post_route
	report_timing_summary -file $output_dir/post_route_timing_summary.rpt
	report_timing -sort_by group -max_paths 100 -path_type summary -file $output_dir/post_route_timing.rpt
	report_clock_utilization -file $output_dir/clock_util.rpt
	report_utilization -file $output_dir/post_route_util.rpt
	report_power -file $output_dir/post_route_power.rpt
	report_drc -file $output_dir/post_imp_drc.rpt
	write_verilog -force $output_dir/${top_design_name}_impl_netlist.v
	write_xdc -no_fixed_only -force $output_dir/${top_design_name}_impl.xdc

#5: generate a bitstream
	write_bitstream -force $output_dir/${top_design_name}.bit
	write_debug_probes -force $output_dir/${top_design_name}.ltx

2021-12-23_v1更新后TCL 全流程代码

参数传递用到一些函数的说明:$argc 表示参数的个数,$argv 表示参数列表。lindex $argv 0 表示取出 参数列表里面第一个参数

#cd /net/dellr740b/home/soc/fengbh/work/soc_fpga_v1_13
# file delete -force output_dir
# get args
if { $argc != 2 } {
        puts "The script requires two argv to be input."
        puts "For example, vivado -mode batch -source fpga_no_project.tcl <soc_dir> <src_tcl>".
        puts "Please try again."
    } else {
        puts [lindex $argv 0]
        puts [lindex $argv 1]
        }
##############################################################
file delete -force .gen
file delete -force .srcs
file delete -force .Xil
# 0 basic config
	## 0.1 set dir
	set project_dir "."
	set soc_dir [lindex $argv 0]
	set src_tcl [lindex $argv 1]
	set src_dir ${soc_dir}/modules_fpga/scripts/src_dir
	set python_dir ${soc_dir}/modules_fpga/scripts/python_dir
	set output_dir ${project_dir}/output_dir
	
	file mkdir $project_dir
	file mkdir $output_dir

	## 0.2 set design parameter
	set top_design_name "chip_fpga_top"
	set target_part "xcvu9p-flga2104-2L-e"
	set target_board_part "xilinx.com:vcu118:part0:2.0"
	set bram_ip_name "blk_mem_gen_0"
	set clk_ip_name "clk_wiz_0"
	set bd_1_name "design_1"
	set bd_2_name "design_2"
	set bram_ip_xci_path ${project_dir}/.srcs/sources_1/ip/$bram_ip_name/$bram_ip_name.xci
	set clk_ip_xci_path ${project_dir}/.srcs/sources_1/ip/$clk_ip_name/$clk_ip_name.xci
	set bd_1_path ${project_dir}/.srcs/sources_1/bd/$bd_1_name/$bd_1_name.bd
	set bd_2_path ${project_dir}/.srcs/sources_1/bd/$bd_2_name/$bd_2_name.bd
	set bd_1_wrapper_path ${project_dir}/.srcs/sources_1/bd/$bd_1_name/hdl/${bd_1_name}_wrapper.v
	set bd_2_wrapper_path ${project_dir}/.srcs/sources_1/bd/$bd_2_name/hdl/${bd_2_name}_wrapper.v

	set_part $target_part
	set_property TARGET_LANGUAGE "Verilog" [current_project]
	set_property BOARD_PART $target_board_part [current_project]
	set_property DEFAULT_LIB work [current_project]

# 1 read source file
	# 1.1 read_ip
    	source $src_dir/create_ip.tcl
	read_ip $bram_ip_xci_path
	read_ip $clk_ip_xci_path
	generate_target all [get_ips $bram_ip_name]
	generate_target all [get_ips $clk_ip_name]
	synth_ip [get_ips $bram_ip_name]
	synth_ip [get_ips $clk_ip_name]
	
	add_files $bram_ip_xci_path
	add_files $clk_ip_xci_path

	# 1.2 read block design
	source $src_dir/create_bd_1.tcl
	read_bd $bd_1_path
	open_bd_design $bd_1_path
	make_wrapper -files [get_files  $bd_1_path] -top
	read_verilog  $bd_1_wrapper_path
	set_property synth_checkpoint_mode None [get_files $bd_1_path]
	generate_target all [get_files $bd_1_path]
	
	source $src_dir/create_bd_2.tcl
	read_bd $bd_2_path
	open_bd_design $bd_2_path
	make_wrapper -files [get_files  $bd_2_path] -top
	read_verilog  $bd_2_wrapper_path
	set_property synth_checkpoint_mode None [get_files $bd_2_path]
	generate_target all [get_files $bd_2_path]
	# 1.2 read 
	source ${python_dir}/output/fpga_stub.tcl
	read_xdc $src_dir/top.xdc
	#read_xdc $src_dir/top_timing.xdc


# 2 run synthesis, report utilization and timing estimates, write checkpoint design

	synth_design -top $top_design_name -part $target_part -gated_clock_conversion on -retiming
	write_checkpoint -force $output_dir/post_synth
	report_timing_summary -file $output_dir/post_synth_timing_summary.rpt
	report_power -file $output_dir/post_synth_power.rpt

# 3 run placement and logic optimzation, report utilization and timing estimates, write checkpoint design
	opt_design
	place_design -directive ExtraTimingOpt
	phys_opt_design -directive ExploreWithHoldFix
	write_checkpoint -force $output_dir/post_place
	report_timing_summary -file $output_dir/post_place_timing_summary.rpt

#4: run router, report actual utilization and timing, write checkpoint design, run drc, write verilog and xdc out
	route_design -directive NoTimingRelaxation
	write_checkpoint -force $output_dir/post_route
	report_timing_summary -file $output_dir/post_route_timing_summary.rpt
	report_timing -sort_by group -max_paths 100 -path_type summary -file $output_dir/post_route_timing.rpt
	report_clock_utilization -file $output_dir/clock_util.rpt
	report_utilization -file $output_dir/post_route_util.rpt
	report_power -file $output_dir/post_route_power.rpt
	report_drc -file $output_dir/post_imp_drc.rpt
	write_verilog -force $output_dir/${top_design_name}_impl_netlist.v
	write_xdc -no_fixed_only -force $output_dir/${top_design_name}_impl.xdc

#5: generate a bitstream
	write_bitstream -force $output_dir/${top_design_name}.bit
	write_debug_probes -force $output_dir/${top_design_name}.ltx

参考文档

  1. UG 892-Vivado Design Suite UserGuideDesign Flows Overview
  2. UG 894-Vivado Design Suite UserGuideUsing Tcl Scripting
  3. UG 835-Vivado Design Suite TclCommand Reference Guide
  4. UG 896-Vivado Design Suite User GuideDesigning with IP
  5. UG 994-Vivado Design Suite UserGuideDesigning IP Subsystems Using IPIntegrator
  6. Vivado - 如何在 Vivado 命令行模式下将 argv/argc 传递给 TCL?
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vivado是一款由Xilinx开发的集成电路设计软件。TclVivado中使用的一种脚本语言,可以用于对文件进行操作、对字符串进行处理等。通过使用Tcl脚本,可以实现对Vivado软件的各种功能进行自动化控制和扩展。 要在Vivado中获取Tcl的帮助信息,可以使用命令"help"。在Tcl命令行或者Tcl脚本中,输入"help"命令将显示Tcl的帮助文档,其中包含了Tcl的命令列表以及每个命令的说明和用法。 在Vivado中,可以通过在Setting中的综合、实现、生成比特流设置中添加tcl.pre和tcl.post的路径,来插入自己的Tcl脚本。这样,在执行相应的流程之前或之后,Vivado会自动执行这些Tcl脚本。通过编写Tcl脚本,可以实现自定义的流程控制和功能扩展。 关于如何编写Tcl脚本的方法,可以参考Tcl的语法规则和命令使用。Tcl脚本由一系列命令组成,可以使用变量、条件语句、循环结构等来实现复杂的逻辑操作。可以通过学习Tcl的基本语法和查阅相关资料来掌握Tcl脚本的编写方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [在vivado中使用tcl脚本(UG894)](https://blog.csdn.net/qq_42322644/article/details/122791274)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值