专栏首页科学计算如何使用Git进行Vivado工程的管理

如何使用Git进行Vivado工程的管理

  git有多好用我就不用多说了,可谓是程序员必备技能之一。对于一般的软件代码来说,只需把源文件进行git管理即可。但对于FPGA工程师来说,使用git多多少少有些蛋疼,主要有下面几个问题:

  1. 有bd文件的工程中,只把bd文件加入git是不行的;
  2. 很多公司都会有一些积累下来的hdl文件,放到某个文件夹中,所有的工程目录下都会有这个文件夹,因此这个文件中会有很多不是当前工程的文件,因此git的文件中,必须包含当前工程的files list,否则就得重新添加文件;
  3. 如果把整个Vivado工程都放入git,非必要文件太多,既浪费git服务器的空间,Push和Pull的速度也会很慢;
  4. 很多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,可以在该目录下再增加文件夹专门放置对应的工程文件。

image

2. 操作步骤

  1. 在打开的Vivado工程中,通过Tcl Console将目录切换到Work目录:
cd [get_property directory [current_project ]]
  1. 生成新建工程的Tcl脚本,执行:
write_project_tcl {./Scripts/s1_recreate_project.tcl}
  1. 依次生成bd文件的tcl脚本,比如工程中有两个bd文件aa.bdbb.bd,打开aa.bd,并执行:
write_bd_tcl {./Scripts/s2_aa_bd.tcl}

打开bb.bd,并执行:

write_bd_tcl {./Scripts/s3_bb_bd.tcl}

这样,在Scripts文件夹中,就会多出三个文件:

image

  1. .gitignore文件中,把整个Work目录全部ignore掉,Src文件夹中根据实际情况进行ignore即可,HDL文件都保留,IP Core只留.xci文件;Scripts目录全部保留。
  2. 到这一步,就可以进行Commit和Push了。
  3. 把程序Clone下来后,首先要修改s1_recreate_project.tcl,需要修改的地方有两个:一个是新建工程时的路径,原始文件为:

image

替换为:

image

第二处需要更改的是删除files list中的bd文件信息,如下图中框起来的部分,这部分内容是将文件添加到工程中,但此时我们的bd文件还没有生成,因此这两个要删掉。bd文件是我们通过后面的tcl脚本添加进来的。

image

  1. 切换到Scripts目录

image

  1. 依次执行:
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找不到的情况,像下面这样:

image

这样就要我们在导出s1_recreate_project.tcl前要先把这个文件替换成正确的文件。如果MIG是放在到bd中,那么在上述的第6步修改s1_recreate_project.tcl中,也要把mig_*.prj文件删掉,因为这个文件是在新建MIG时自动生成的。

  1. 有些朋友用bd的时候喜欢用wrapper.v的文件来封一层,这个wrapper.v是Vivado自动生成的,而且默认目录就是在Work的工程目录下,我们可以不用管这个wrapper.v的文件,等bd文件添加进去后,再手动生成一下即可;也可以不使用wrapper.v,直接例化bd文件。
  2. 上面这种方法是在Vivado2017.2上进行的测试,如果是2017.4及以上的版本,write_project.tcl指令中需要增加-use_bd_files选项,也就是:
write_project_tcl -use_bd_files {./Scripts/s1_recreate_project.tcl}

如果不加这个选项,默认会把bd文件信息也导出,这样在运行时会提示么有发现bd文件的错误。

  1. 如果是低版本的工程进行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的文件内容添加进来。

本文分享自微信公众号 - 科学计算technomania(Quant_Times),作者:猫叔

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 10 元编程

    元编程(英语:Metaprogramming),又译超编程,是指某类计算机程序的编写,这类计算机程序编写或者操纵其它程序(或者自身)作为它们的资料,或者在运行时...

    猫叔Rex
  • Vivado生成HDL例化模板

      在ISE的开发中,可以很方便的生成HDL文件的例化模板,但vivado中,很多同学并没有找到这个功能,其实功能还是有的,只不过在vivado中很多功能可以通...

    猫叔Rex
  • Vivado调试小结:ILA debug中的数据也许并不可信

    FPGA的调试是个很蛋疼的事,即便Vivado已经比ISE好用了很多,但调试起来依旧蛋疼。即便是同一个程序,FPGA每次重新综合、实现后结果都多多少少会有所不同...

    猫叔Rex
  • 【AI核心技术】课程十四:序列场景分析

    UAI与PaddlePaddle联合推出的【AI核心技术掌握】系列课程持续更新中!

    用户1386409
  • 彻底理清重载函数匹配

    前面我们讲到了《什么是函数重载?》,有了函数重载之后,就需要确定某次调用需要选用哪个函数。这个过程可以称之为函数匹配或者重载确定。大多数情况下,我们都很容易能够...

    编程珠玑
  • Python数据处理(5)-NumPy的随机化操作

    下面介绍np.random中常用的函数: (1)seed (2) permutation/shuffle (3)rand/randint/randn 利用上述的...

    企鹅号小编
  • 博世小功率变频器拆解

    变频器在工业生产中应用非常的广泛,橡胶行业的轮胎产线就有很多,而且轮胎产线环境恶劣,灰尘大,今天帮朋友修理一台力士乐的变频器,因为长期使用加上环境恶劣,变频器里...

    用户1605515
  • SpringMVC+GSON 对象序列化--日期格式的处理

    用户2193479
  • 程序员带你学习安卓开发系列-Android文件存储

    输入帐号密码,并勾选记住帐号 ,点击登录时,保存帐号信息。下次登陆可以直接显示上次保存的QQ帐号。

    做全栈攻城狮
  • 实现类似“添加扩展程序…”的设计时支持

    Ajax Control Toolkit这个控件库内包含一些扩展控件,利用这些扩展控件,可以非常方便的为普通的控件添加Ajax效果,例如,利用AutoComp...

    明年我18

扫码关注云+社区

领取腾讯云代金券