git有多好用我就不用多说了,可谓是程序员必备技能之一。对于一般的软件代码来说,只需把源文件进行git管理即可。但对于FPGA工程师来说,使用git多多少少有些蛋疼,主要有下面几个问题:
最近我也一直在研究Vivado工程git的管理方式,查了网上很多方法,但有些操作略复杂,有些方法完全不起效,但好在最终综合整理出了一种相对简单的方式进行,也许这种方式不是最合适的,如果你有更好的方法,希望能分享出来。
我们这篇文章只讲Vivado的工程,不包括HLS或者Sdk工程,因为这这两个工具都是纯C/C++/TCL的,git管理起来比较简单
我们采用如下的目录结构,这种方式也是Xilinx官网某个教程上推荐的,
image
cd [get_property directory [current_project ]]
write_project_tcl {./Scripts/s1_recreate_project.tcl}
aa.bd
和bb.bd
,打开aa.bd
,并执行:write_bd_tcl {./Scripts/s2_aa_bd.tcl}
打开bb.bd
,并执行:
write_bd_tcl {./Scripts/s3_bb_bd.tcl}
这样,在Scripts文件夹中,就会多出三个文件:
image
.gitignore
文件中,把整个Work目录全部ignore掉,Src文件夹中根据实际情况进行ignore即可,HDL文件都保留,IP Core只留.xci
文件;Scripts目录全部保留。s1_recreate_project.tcl
,需要修改的地方有两个:一个是新建工程时的路径,原始文件为:image
替换为:
image
第二处需要更改的是删除files list中的bd文件信息,如下图中框起来的部分,这部分内容是将文件添加到工程中,但此时我们的bd文件还没有生成,因此这两个要删掉。bd文件是我们通过后面的tcl脚本添加进来的。
image
image
source ./s1_recreate_project.tcl
source ./s2_aa_bd.tcl
source ./s3_bb_bd.tcl
OK,到这里工程就Clone完成了!!!
下面说一下我操作的过程中碰到的几个问题:
image
这样就要我们在导出s1_recreate_project.tcl
前要先把这个文件替换成正确的文件。如果MIG是放在到bd中,那么在上述的第6步修改s1_recreate_project.tcl
中,也要把mig_*.prj
文件删掉,因为这个文件是在新建MIG时自动生成的。
write_project.tcl
指令中需要增加-use_bd_files
选项,也就是:write_project_tcl -use_bd_files {./Scripts/s1_recreate_project.tcl}
如果不加这个选项,默认会把bd文件信息也导出,这样在运行时会提示么有发现bd文件的错误。
write_bd_tcl -no_ip_version {./Scripts/s2_aa_bd.tcl}
总结
我尝试了网上很多方法基本都不能直接使用,但他们既然把方法放到网上,说明是经过测试的,但可能测试的并不是特别全面,就是MIG的IP一样,如果我的工程中没有这个IP,那我也不知道在git时会出现这种问题。我也不能保证在使用别的IP时不会出现问题,但思路都是一样的,就是把工程的tcl脚本和bd的tcl脚本分开,先新建工程把非bd文件的内容加进来,再把bd的文件内容添加进来。