相比于,上一篇FPGA版本管理(一)Quartus自动版本号所述,实现Vivado的自动版本号,会稍微麻烦一点点。
对比与Quartus的实现,Vivado的实现,前两步基本一模一样的,区别主要在Step 3.
- Step 1.使用宏定义赋值版本号寄存器
- Step 2.制作TCL脚本
- Step 3.修改QSF文件
下面介绍详细的步骤:
Step 1. 使用宏定义赋值版本号寄存器
使用宏定义的方式写RTL中的版本号。
//版本号
assign version = `VERSION;
assign compile_date = `COMPILE_DATE;
assign compile_time = `COMPILE_TIME;
将版本号的宏定义单独放在1个.h文件中,如:version.h
`define VERSION 32'hAAAA_BBBB
`define COMPILE_DATE 32'h2020_0423
`define COMPILE_TIME 32'hFF23_2325
Step 2. 制作TCL脚本
使用TCL自动化脚本,用于生成版本号。TCL每运行一次,重新更改一次version.h中的内容。
version_gen.tcl脚本如下:
#version_gen.tcl
set dat [clock format [clock seconds] -format{%Y-%m-%d %H:%M:%S}]
puts stdout $dat
set date [clock format [clock seconds] -format{%Y%m%d}]
set tiem [clock format [clock seconds] -format{%H%M%S}]
#注意修改version.h的路径
set file "./version.h"
set fileid [open $file w+]
seek $fileid 0 start
puts $fileid "`define VERSION 32'hAAAABBBB"
puts $fileid "`define COMPILE_DATE 32'h$date "
puts $fileid "`define COMPILE_TIME 32'hFF$time "
close $fileid
Step 3. Vivado工程配置
Vivado要在综合前,运行tcl脚本,重点需要关注的是其脚本的路径问题。有两种设置方式:
3.1在VIVADO的GUI中设置
在vivado的Settings中,Synthesis一栏中的tcl.pre中设置需要执行的tcl的路径。
按上文设置后,每次综合开始前便会运行tcl脚本。但是这里有个问题,运行tcl脚本生成的version.h文件不在预想的位置。默认生成文件的位置在<project>/<project.runs>/<run_name>
。
所以需要更改version.h的位置。以我的工程目录结构为例:
my_fpga_prj
-ipcore
-src
-xdc
-prj
-my_fpga_prj.runs
-synth_1
默认的路径在synth_1中,但我需要verison.h放在src目录下。所以,在version.tcl脚本中需要修改version.h生成的路径为
#注意修改version.h的路径
set file "./../../../src/version.h"
或者说,不修改version.h的路径,在引用version.h的时候添加对应的路径亦可。
3.2直接在tcl脚本中进行设置
也可以不再GUI中设置,直接在工程的运行脚本中添加相应的tcl命令。
set obj [get_runs synth_1]
set_property -name "part" -value "xczu4cg-fbvb900-1-e" -objects $obj
set_property -name "strategy" -value "Vivado Synthesis Defaults" -objects $obj
#在这里添加
set_property -name "steps.synth_design.tcl.pre" -value "[file normalize "$origin_dir/../tcl/version_gen.tcl"]" -objects $obj