Loading

Vivado工程管理

版本记录


版本号 描述 日期 作者
v1.0 初版 Vivado 工程管理文档 2026.6.1 winkiliang




1. 文件目录


project
	00_proj/									# 工程文件夹
		my_project/
			vu13p_top.xpr
	01_src/										# 代码文件夹
		00_hdl/									# HDL源代码
			top/								# 顶层文件夹
				filelist.f						# 顶层文件列表
				vu13p_top.v
				vu13p_top.vh
				core_top.v
				macro_top.v
			module_a/							# 模块A文件夹
				filelist.f						# 模块A文件列表
				module_a_top.v
				module_a_sub_1.v
				module_a_sub_2.v
			module_b/							# 模块B文件夹
				filelist.f						# 模块B文件列表
				module_b_top.v
				module_b_sub_1.v
				module_b_sub_2.v

		01_xdc/									# 约束文件夹
			pin.xdc
			timing.xdc
			pblock.xdc
		02_ip/									# IP Core文件夹
	02_sim/										# 仿真文件夹
	script/										# 脚本文件夹
		create_project.tcl						# 建立工程脚本
		auto_modify_data.tcl					# 自动更新版本时间脚本
	.gitignore									# Git忽略规则文件
	README.txt									# 说明文档




2. Vivado 工程管理脚本


create_project. tcl

脚本介绍

  1. 我们正常使用 Vivado 去创建工程或者添加文件时,在 tcl 命令窗中都有对应的 tcl 命令,而该脚本就是基于该 tcl 命令编写的
  2. 脚本主要是在管理 Vivado 工程时,通过执行 run.sh 脚本即可搭建一个一模一样的 Vivado 工程出来,这样就不需要上传工程的 xpr 文件到 Git 中

使用教程

只需要按照注释中有表明 1. 2. 3. 这样的步骤注释行去修改对应的路径和参数即可
第一步:设置变量

  1. 配置源代码路径
  2. 设置工程名称,工程将以该 project_name 进行命名
  3. 设置顶层模块,模块名需对应最顶层的 module
  4. 设置头文件,头文件需包含后缀 .v.vh.svh,路径必须放到 ${GITLAB}/01_src/00_hdl/top/ 下,否则自己找到对应设置头文件的代码中修改路径
  5. 设置 FPGA 型号

第二步:添加文件

  1. 使用脚本内部定义的 read_filelist 函数,该函数用于读取 filelist.f 里面文件路径,并添加到 Vivado 工程中(Vivado 不支持读取 .f 文件,因此需要借助自定义函数去获取文件)主要是使仿真和 Vivado 工程管理使用同一份 filelist 文件列表
  2. 添加 IP Core 中的 xci 文件
  3. 添加 xdc 文件

第三步:执行脚本

  1. 在 script/路径下,source run.sh 即可通过 Vivado 无 GUI 界面的方式执行 tcl 脚本
  2. 若想同步打开 Vivado 去搭建工程,修改 run.sh 代码,使用不带 -mode batch 的代码行去执行 tcl 脚本
########################################################################
#																	   #
#                   Localparameter									   #
#																	   #
########################################################################
set tcl_dir			[file dirname [file normalize [info script]]]
set	project_dir		[file normalize "${tcl_dir}/../00_proj"]

proc read_filelist {filename} {
global GITLAB
set fp		[open $filename r]
set lines 	[split [read $fp] "\n"]
close $fp

foreach line $lines {
if {[string match "*\${GITLAB}" $line]} {
set new_line	[string map [list "\${GITLAB}" "$GITLAB"] $line]
set cmd			"add_files -norecurse $new_line"
eval $cmd
}
}
}



########################################################################
#																	   #
#                   Set Variables									   #
#																	   #
########################################################################
# ---------------- 1.Set Gitlab Path -----------------------------------
set GITLAB			/proj/winkiliang
set	source_dir		/proj/winkiliang/ifpga
set	common_dir		/proj/winkiliang/common

# ---------------- 2.Set Project Name ----------------------------------
set project_name    "my_project"

# ---------------- 3.Set Top Module ------------------------------------
set top_module    	"VU13P_TOP"

# ---------------- 4.Set Header File -----------------------------------
set header_name    	"glb_header.vh"

# ---------------- 5.Set FPGA Part Name --------------------------------
set target_device   "xcvu13p-flga2577-2-i"




########################################################################
#																	   #
#                   Creat Vivado Project							   #
#																	   #
########################################################################
create_project $project_name ${project_dir}/${project_name} -part $target_device -force




########################################################################
#																	   #
#                   Import Source File								   #
#																	   #
########################################################################
# ---------------- 1.source code ---------------------------------------
read_filelist ${source_dir}/00_hdl/top/filelist.f
read_filelist ${source_dir}/00_hdl/gpio/filelist.f
read_filelist ${source_dir}/00_hdl/ddr/filelist.f
read_filelist ${source_dir}/00_hdl/clock/filelist.f


# ---------------- 2.IP core -------------------------------------------
add_files -norecurse ${source_dir}/01_ipcore/MMCM/MMCM.xci
add_files -norecurse ${source_dir}/01_ipcore/SERDES/SERDES.xci
add_files -norecurse ${source_dir}/01_ipcore/DDR4_MIG/DDR4_MIG.xci


# ---------------- 3.xdc file ------------------------------------------
add_files -fileset constrs_1 -norecurse ${source_dir}/02_xdc/pblock.xdc
add_files -fileset constrs_1 -norecurse ${source_dir}/02_xdc/vu13p_pin.xdc
add_files -fileset constrs_1 -norecurse ${source_dir}/02_xdc/vu13p_timing.xdc




########################################################################
#																	   #
#                   Auto Set Vivado	Property						   #
#																	   #
########################################################################
set_property top $top_module [current_fileset]
set_property is_global_include true [get_files ${source_dir}/00_hdl/top/${header_name}]
add_files -fileset utils_1 -norecurse ${tcl_dir}/auto_modify_data.tcl
set_property STEPS.WRITE_BIESTREAM.TCL.PRE [ get_files ${tcl_dir}/auto_modify_data.tcl of [get_fileset utils_1] ] [get_runs impl_1]



puts "########################################################################"
puts "#"
puts "# 	Project $project_name created successfully in $project_dir ~	  "
puts "#"
puts "########################################################################"

run. sh

  1. 只要按照该文档中说的文件目录搭建,该脚本不需要改动
  2. 如果想搭建 Vivado 工程的时候以 GUI 的形式运行,那么就选择不带 -mode batch 的代码行
#!/bin/bash
########################################################################
#                   Auto Create Vivado Project 			  			   #
#																	   #
#																	   #
# How to use ?														   #
# 1.Modify internal parameters in " create_project.tcl " 			   #
# 2.Execute " source run.sh " in the terminal						   #
#																	   #
########################################################################
PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

cd ../00_proj
module add Vivado/2023.2.1
#vivado -source $PATH/create_project.tcl
vivado -mode batch -source $PATH/create_project.tcl
cd -

auto_modify_data. tcl

  1. 该脚本是添加到 Vivado 工程综合之前运行的脚本
  2. 其本质是识别 header_file 中是否有匹配对应字段的代码行,从而替换当前编译的时间点
  3. 这里建议把所有相关的全局参数配置都放在头文件 header_file.vh 中,统一管理
########################################################################
#																	   #
#                   Auto Modify Version Data						   #
#																	   #
########################################################################
set	tcl_path		[file dirname [info script]]

# ---------------- 1.Set header file -----------------------------------
set header_file		${tcl_path}/../01_src/hdl/top/glb_header.vh

set rd_file			[open $header_file r]
set lines			[split [read $rd_file] "\n"]
set timestamp		[clock format [clock seconds] -format %m%d%H%M]
close $rd_file

set wr_file			[open $header_file w]
foreach line $lines {
# ---------------- 2.Set Match filed -----------------------------------
if {[string match "*parameter*VERSION_DATA*" $line]} {
puts $wr_file "    parameter 						VERSION_DATA = 32'h${timestamp}"
} else {
puts $wr_file $line
}
}
close $wr_file




3. 工程要求


filelist.f

  1. 每个功能模块中都需要有一个包含该功能所有子模块的文件列表
  2. 路径的前缀必须是 ${GITLAB} ,由于开发人员的文件路径不同,使用相对路径可统一文件路径的获取
  3. 另外在建立工程时,tcl 脚本是通过识别 ${GITLAB} 字段把文件添加到 Vivado 中。统一路径前缀后,可只在每个功能模块中添加一个 filelist. f 表即可在仿真Vivado工程中使用

文件格式如下

[!example]+

${GITLAB}/ifpga/ebus/ebus_sds_pcs.v
${GITLAB}/ifpga/ebus/ebus_sds_tx.v
${GITLAB}/ifpga/ebus/ebus_sds_rx.v
...
${GITLAB}/common/reg_op/rw_reg.v
${GITLAB}/common/reg_op/ntest.v

.gitignore

  1. 在使用 Git 管理工程时,.gitignore 是用来忽略某些不需要 track 的文件夹和文件
  2. 当我们使用 ALE 去辅助编码时(检测语法是否正确),通常会产生一些临时的 work/ xsim.dir/ xvlog.log xvlog.pb 这些临时文件,那么在查看 git status 时不想看到这些临时文件,就可以通过 .gitignore 给忽略掉
  3. 由于 Vivado 工程可通过 create_project.tcl 脚本去搭建,因此在使用 Git 的时候就不需要上传工程的 xpr 文件
########################################################################
#																	   #
#                   Folder									           #
#																	   #
########################################################################
work/
xsim.dir/
00_proj/



########################################################################
#																	   #
#                   File									           #
#																	   #
########################################################################
.gitignore
xvlog.log
xvlog.pb

  • [ ]
posted @ 2026-06-09 08:12  winki_0213  阅读(2)  评论(0)    收藏  举报