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
脚本介绍
- 我们正常使用 Vivado 去创建工程或者添加文件时,在 tcl 命令窗中都有对应的 tcl 命令,而该脚本就是基于该 tcl 命令编写的
- 该脚本主要是在管理 Vivado 工程时,通过执行
run.sh脚本即可搭建一个一模一样的 Vivado 工程出来,这样就不需要上传工程的 xpr 文件到 Git 中
使用教程
只需要按照注释中有表明 1. 2. 3. 这样的步骤注释行去修改对应的路径和参数即可
第一步:设置变量
- 配置源代码路径
- 设置工程名称,工程将以该
project_name进行命名 - 设置顶层模块,模块名需对应最顶层的
module名 - 设置头文件,头文件需包含后缀
.v、.vh、.svh,路径必须放到${GITLAB}/01_src/00_hdl/top/下,否则自己找到对应设置头文件的代码中修改路径 - 设置 FPGA 型号
第二步:添加文件
- 使用脚本内部定义的
read_filelist函数,该函数用于读取 filelist.f 里面文件路径,并添加到 Vivado 工程中(Vivado 不支持读取 .f 文件,因此需要借助自定义函数去获取文件)主要是使仿真和 Vivado 工程管理使用同一份 filelist 文件列表 - 添加 IP Core 中的 xci 文件
- 添加 xdc 文件
第三步:执行脚本
- 在 script/路径下,
source run.sh即可通过 Vivado 无 GUI 界面的方式执行 tcl 脚本 - 若想同步打开 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
- 只要按照该文档中说的文件目录搭建,该脚本不需要改动
- 如果想搭建 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
- 该脚本是添加到 Vivado 工程综合之前运行的脚本
- 其本质是识别
header_file中是否有匹配对应字段的代码行,从而替换当前编译的时间点 - 这里建议把所有相关的全局参数配置都放在头文件
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
- 每个功能模块中都需要有一个包含该功能所有子模块的文件列表
- 路径的前缀必须是
${GITLAB},由于开发人员的文件路径不同,使用相对路径可统一文件路径的获取 - 另外在建立工程时,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
- 在使用 Git 管理工程时,
.gitignore是用来忽略某些不需要 track 的文件夹和文件 - 当我们使用 ALE 去辅助编码时(检测语法是否正确),通常会产生一些临时的
work/xsim.dir/xvlog.logxvlog.pb这些临时文件,那么在查看git status时不想看到这些临时文件,就可以通过.gitignore给忽略掉 - 由于 Vivado 工程可通过
create_project.tcl脚本去搭建,因此在使用 Git 的时候就不需要上传工程的 xpr 文件
########################################################################
# #
# Folder #
# #
########################################################################
work/
xsim.dir/
00_proj/
########################################################################
# #
# File #
# #
########################################################################
.gitignore
xvlog.log
xvlog.pb
- [ ]

浙公网安备 33010602011771号