Git进行Vivado工程管理的教程分享

作者:猫叔
git有多好用我就不用多说了,可谓是程序员必备技能之一。对于一般的软件代码来说,只需把源文件进行git管理即可。但对于fpga工程师来说,使用git多多少少有些蛋疼,主要有下面几个问题:
① 有bd文件的工程中,只把bd文件加入git是不行的;
② 很多公司都会有一些积累下来的hdl文件,放到某个文件夹中,所有的工程目录下都会有这个文件夹,因此这个文件中会有很多不是当前工程的文件,因此git的文件中,必须包含当前工程的files list,否则就得重新添加文件;
③ 如果把整个vivado工程都放入git,非必要文件太多,既浪费git服务器的空间,push和pull的速度也会很慢;
④ 很多fpga工程师有自己的一套git管理vivado的流程,但每次push前和clone后都需要做很多操作。
最近我也一直在研究vivado工程git的管理方式,查了网上很多方法,但有些操作略复杂,有些方法完全不起效,但好在最终综合整理出了一种相对简单的方式进行,也许这种方式不是最合适的,如果你有更好的方法,希望能分享出来。
我们这篇文章只讲vivado的工程,不包括hls或者sdk工程,因为这这两个工具都是纯c/c++/tcl的,git管理起来比较简单
1. 工程目录
我们采用如下的目录结构,这种方式也是xilinx官网某个教程上推荐的,
work目录:vivado的工程全都放在work目录下,包括bd以及它的相关文件;
src目录:放hdl的源文件以及ip core的源文件;
doc目录:放跟工程相关的文档,如果没有的话可以不加;
mcs目录:放工程生成的bit和mcs文件,这个文件也看个人用途,如果觉得bit文件太大不想放在git上也无所谓,但个人觉得在调试的时候经常会用到之前测试好了某个bit;
scripts目录:也是进行git管理的关键,里面放各种tcl脚本;
如果工程中有sdk/hls/ssygen,可以在该目录下再增加文件夹专门放置对应的工程文件。
2. 操作步骤
1. 在打开的vivado工程中,通过tcl console将目录切换到work目录:
cd [get_property directory [current_project ]] 2. 生成新建工程的tcl脚本,执行:
write_project_tcl {./scripts/s1_recreate_project.tcl} 3. 依次生成bd文件的tcl脚本,比如工程中有两个bd文件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文件夹中,就会多出三个文件:
4. 在.gitignore文件中,把整个work目录全部ignore掉,src文件夹中根据实际情况进行ignore即可,hdl文件都保留,ip core只留.xci文件;scripts目录全部保留。
5. 到这一步,就可以进行commit和push了。
6. 把程序clone下来后,首先要修改s1_recreate_project.tcl,需要修改的地方有两个:一个是新建工程时的路径,原始文件为:
替换为:
第二处需要更改的是删除files list中的bd文件信息,如下图中框起来的部分,这部分内容是将文件添加到工程中,但此时我们的bd文件还没有生成,因此这两个要删掉。bd文件是我们通过后面的tcl脚本添加进来的。
7. 切换到scripts目录
8. 依次执行:
source ./s1_recreate_project.tcl source ./s2_aa_bd.tcl source ./s3_bb_bd.tcl ok,到这里工程就clone完成了!!!
下面说一下我操作的过程中碰到的几个问题:
1. 如果是ddr3的mig ip core,会有configuration files,如果我们修改了mig,并重新生成后,就会经常出现这个configuration files找不到的情况,像下面这样:
这样就要我们在导出s1_recreate_project.tcl前要先把这个文件替换成正确的文件。如果mig是放在到bd中,那么在上述的第6步修改s1_recreate_project.tcl中,也要把mig_*.prj文件删掉,因为这个文件是在新建mig时自动生成的。
2. 有些朋友用bd的时候喜欢用wrapper.v的文件来封一层,这个wrapper.v是vivado自动生成的,而且默认目录就是在work的工程目录下,我们可以不用管这个wrapper.v的文件,等bd文件添加进去后,再手动生成一下即可;也可以不使用wrapper.v,直接例化bd文件。
3. 上面这种方法是在vivado2017.2上进行的测试,如果是2017.4及以上的版本,write_project.tcl指令中需要增加-use_bd_files选项,也就是:
write_project_tcl -use_bd_files {./scripts/s1_recreate_project.tcl} 如果不加这个选项,默认会把bd文件信息也导出,这样在运行时会提示么有发现bd文件的错误。
4. 如果是低版本的工程进行git后,要用高版本的vivado打开,我们可以在导出bd时去掉ip的版本信息,也就是:
write_bd_tcl -no_ip_version {./scripts/s2_aa_bd.tcl} 总结
我尝试了网上很多方法基本都不能直接使用,但他们既然把方法放到网上,说明是经过测试的,但可能测试的并不是特别全面,就是mig的ip一样,如果我的工程中没有这个ip,那我也不知道在git时会出现这种问题。我也不能保证在使用别的ip时不会出现问题,但思路都是一样的,就是把工程的tcl脚本和bd的tcl脚本分开,先新建工程把非bd文件的内容加进来,再把bd的文件内容添加进来。


米尔科技MY-UART012U USB转COM线概述
中波红外碲镉汞室温探测器激光辐照饱和特性的仿真
芯片封装形式汇总_介绍各种芯片封装形式的特点和优点
如何在两部SDR接收器之间远程遥控切换天线和音频?
双口RAM概述及Vivado RAM IP核应用
Git进行Vivado工程管理的教程分享
FPGA通过SPI对ADC配置简介(三)3线SPI配置时序分析
机智云D3 Engine服务,“拖拉拽”轻松完成数据处理开发
智能化浪潮下的光电传感器
荣耀V40系列将用上联发科的旗舰芯片
充电桩收费运营云平台系统结构及功能
第十五讲 组合逻辑电路的分析方法和设计方法
VH6501基本使用介绍
如何通过SIG进行开源贡献
iphone8什么时候上市?iphone8最新消息:华为的概念机比iphone8更值得期待
未来的人工智能可以显着的提高经济生产率
智慧校园人脸识别通行解决方案介绍
RFID技术在制造工业中的应用优势及其特点
VIVO在屏幕指纹触控技术上处于领先地位
2020高交会亮点不容错过 5G商用 人工智能芯片 火爆的裸眼3D