学习FPGA也有一段时间了,现在工程相较于以前,一个工程的可能所需要占据的空间有几百兆甚至更大,也在想着有没有什么好的办法来管理这些工程。常见的版本控制就是git了,因此使用git来管理vivado工程,能够给工作提升一定效率(大概)。
使用git管理vivado工程的时候,需要使用到TCL,对于我这种小白,TCL是万万看不懂的。好在vivado就有那种可以生成这些脚本的命令,直接用就好了。但是,好的目录结构,才能让管理工作更加高效。
刚好那天看到了fpgadeveloper的,一个vivado管理的博客,感觉写得很好,就照着他说的试了一下,确实可以起到管理工程的作用。目录结构如下:
Vivado 文件夹就是工作目录;
src 文件夹下有多个子文件夹:包括存放约束文件的 xdc, 存放源码的 hdl 文件夹,存放block design的 TCL 脚本的 bd 文件夹。
ip_repo 这个文件夹是用来存放IP的,用户自定义的IP,HLS生成IP等,都可以放在这个文件夹当中。
在 Vivado 文件夹下还有用于生成整个工程的 TCL 脚本。
在使用Vivado的GUI界面进行开发的时候,就按照这些文件夹来存放对应的文件就可以了。在之后,只需要使用Git对这些文件和文件夹进行管理就可以了。
以一个简单的例子为例,这个例子里面,包含了用户自己的hdl文件,xdc文件,用户自定义的IP。block design如下:
其中有一个HLS的IP,一个用户自定义的IP。
文件结构如下:
有一个用户自己生成的顶层文件,一个用户的xdc文件,这些文件都是存放在上面说管理工程的对应目录里面。
首先点击Export block design,导出block design的tcl脚本,脚本导出的路径就是前面的src/bd
目录下。
然后再导出整个工程的 TCL 脚本。点击file => project =>Write Tcl,将TCL导出到对应的工程目录下。
将刚刚生成的整个工程的脚本打开对其中的一些地方进行简单的修改。
将
# Set the reference directory for source file relative paths (by default the value is script directory path)
set origin_dir "."
替换为
# Set the reference directory to where the script is
set origin_dir [file dirname [info script]]
将原始脚本中有关block design的文件删除,然后进行替换
# Import local files from the original project
set files [list \
[file normalize "${origin_dir}/Lab_5_AXILITE/Lab_5_AXILITE.srcs/sources_1/bd/design_1/design_1.bd" ]\
[file normalize "${origin_dir}/Lab_5_AXILITE/Lab_5_AXILITE.srcs/sources_1/bd/design_1/hdl/design_1_wrapper.v" ]\
]
set imported_files [import_files -fileset sources_1 $files]
# Set 'sources_1' fileset file properties for remote files
# None
# Set 'sources_1' fileset file properties for local files
set file "design_1/design_1.bd"
set file_obj [get_files -of_objects [get_filesets sources_1] [list "*$file"]]
set_property -name "registered_with_manager" -value "1" -objects $file_obj
替换为:
# Create block design
source $origin_dir/src/bd/design_1.tcl
# Generate the wrapper
set design_name [get_bd_designs]
make_wrapper -files [get_files $design_name.bd] -top -import
再之后就可以通过这些脚本和对应的文件,将工程恢复出来了。
新建一个文件夹,将这些源文件和脚本复制过来。准备开始复原工程。
打开vivado,然后cd到对应的文件夹
最后执行更改过后的脚本。
最终就将工程复原了。到这里就证明使用脚本是可以恢复工程的。那么在之后进行vivao的版本管理的时候,只需要管理这些源文件和脚本就可以了。
使用git就没有什么太多说的。
git init
git add ip_repo src demo.tcl
git commit -m "vivado version control"
现在就可以像管理软件那样来管理vivado工程了。
参考
fpga developer blog