0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

454398 来源:科学计算technomania 作者:猫叔 2020-11-16 14:59 次阅读

作者:猫叔

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的文件内容添加进来。

编辑:hfy


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Git
    Git
    +关注

    关注

    0

    文章

    201

    浏览量

    15783
  • Vivado
    +关注

    关注

    19

    文章

    812

    浏览量

    66642
收藏 人收藏

    评论

    相关推荐

    云服务器 Flexus X 实例:部署 Gitea,拥有自己的 Git 仓库,管理本地代码

    、零售、金融、游戏等众多领域的通用工作负载需求。本文旨在详细阐述如何高效利用“云服务器 Flexus X 实例”,包括如何在其中从零开始,通过安装相关依赖、安装 Docker、安装 Gitea 等步骤,实现自己的 Git 仓库,管理本地代码。精彩内容,不容错过,快来一探究
    的头像 发表于 01-07 16:59 18次阅读
    云服务器 Flexus X 实例:部署 Gitea,拥有自己的 <b class='flag-5'>Git</b> 仓库,<b class='flag-5'>管理</b>本地代码

    Flexus X 实例 C#/.Net Core 结合(git 代码管理、docker 自定义镜像)快速发布部署 - 让你的项目飞起来~

    与 Docker 容器化部署,实现代码高效管理与无缝迁移。即刻行动,让您的 Web 服务更加稳定、高效,领跑数字化转型之路! ���本实验深入演示了如何在 Ubuntu 环境中,利用 Git 进行版本控制
    的头像 发表于 12-25 21:15 160次阅读
    Flexus X 实例 C#/.Net Core 结合(<b class='flag-5'>git</b> 代码<b class='flag-5'>管理</b>、docker 自定义镜像)快速发布部署 - 让你的项目飞起来~

    Xilinx_Vivado_SDK的安装教程

    完之后,就进行解压。(最好在解压和安装之前都关闭所有的杀毒软件以防万一) 解压完之后,双击 xsetup.exe 进行安装...... 等待一会儿之后,就会跳出如下安装界面: 点击 Next: 全选
    的头像 发表于 11-16 09:53 1183次阅读
    Xilinx_<b class='flag-5'>Vivado</b>_SDK的安装教程

    每次Vivado编译的结果都一样吗

    很多FPGA工程师都有这种困惑,Vivado每次编译的结果都一样吗? 在AMD官网上,有这样一个帖子: Are Vivado results repeatable for identical
    的头像 发表于 11-11 11:23 420次阅读
    每次<b class='flag-5'>Vivado</b>编译的结果都一样吗

    使用Vivado通过AXI Quad SPI实现XIP功能

    本博客提供了基于2023.2 Vivado的参考工程,展示如何使用Microblaze 地执行(XIP)程序,并提供一个简单的bootloader。
    的头像 发表于 10-29 14:23 399次阅读
    使用<b class='flag-5'>Vivado</b>通过AXI Quad SPI实现XIP功能

    Vivado使用小技巧

    有时我们对时序约束进行了一些调整,希望能够快速看到对应的时序报告,而又不希望重新布局布线。这时,我们可以打开布线后的dcp,直接在Vivado Tcl Console里输入更新后的时序约束。如果调整
    的头像 发表于 10-24 15:08 375次阅读
    <b class='flag-5'>Vivado</b>使用小技巧

    智能记录隐蔽工程管理系统

          隐蔽工程管理是现代建筑工程中一个至关重要的环节。为了提高工程质量和管理效率,智能记录隐蔽工程
    的头像 发表于 10-18 10:18 170次阅读
    智能记录隐蔽<b class='flag-5'>工程</b><b class='flag-5'>管理</b>系统

    Vivado编辑器乱码问题

    我们在日常开发中经常使用sublime、vim、vs code等第三方的编辑器,这些编辑器可以使用很多插件来提高我们的编码效率,但是也往往会带来乱码的问题。我一般使用的是sublime来进行编码
    的头像 发表于 10-15 17:24 837次阅读
    <b class='flag-5'>Vivado</b>编辑器乱码问题

    PMS系统是什么?PMS工程生产管理系统的功能

    企业实现生产过程的优化、资源的有效配置、生产计划的制定与执行、生产进度的监控、生产质量的保障等。 工程生产管理系统通常包括以下几个核心组件: 1. 生产计划管理:制定生产计划,包括产品的生产顺序、生产数量、生产时间等,确保生产按
    的头像 发表于 06-12 11:23 4479次阅读

    如何在AMD Vivado™ Design Tool中用工程模式使用DFX流程?

    本文介绍了在 AMD Vivado™ Design Tool 中用工程模式使用 DFX 流程以及需要注意的地方。在使用 DFX 工程模式的过程中要把具体步骤映射到相应的 DFX 非工程
    的头像 发表于 04-17 09:28 910次阅读
    如何在AMD <b class='flag-5'>Vivado</b>™ Design Tool中用<b class='flag-5'>工程</b>模式使用DFX流程?

    深入探索Vivado工程模式FPGA设计流程

    在设计过程的每个阶段,设计者均可以打开Vivado集成开发环境,对存储器中保存的当前设计进行分析和操作。
    发表于 04-03 09:36 1054次阅读
    深入探索<b class='flag-5'>Vivado</b>非<b class='flag-5'>工程</b>模式FPGA设计流程

    详解Vivado工程模式的精细设计过程

    将设置设计的输出路径,设置设计输出路径的步骤如下所示。 第一步:如图4.3所示,在“Vivado%”提示符后输入命令“set outputDir ./gate_Created_Data/top_output”。
    发表于 04-03 09:34 1774次阅读
    详解<b class='flag-5'>Vivado</b>非<b class='flag-5'>工程</b>模式的精细设计过程

    蓝牙 | 软件:Git管理高通的ChipCode项目

    处理卡住了,我们只能从git下手。Git有优秀的项目管理,代码管理的能力,所以学一学git管理
    的头像 发表于 01-26 08:29 415次阅读
    蓝牙 | 软件:<b class='flag-5'>Git</b><b class='flag-5'>管理</b>高通的ChipCode项目

    克服PLC编程的难题—基于Git的软件

    Git是一种分布式版本控制系统,它可以记录文件的修改历史和版本变化,并可以支持多人协同开发。
    的头像 发表于 01-22 09:30 972次阅读
    克服PLC编程的难题—基于<b class='flag-5'>Git</b>的软件

    Git开发者关注内存安全问题,探讨引入Rust语言

    根据最新披露的邮件讨论,Git开发团队热议在Git项目中引入Rust的可行性。作为一种开源的分布式代码版本管理工具,广泛运用于各种开发项目。尽管现在Git项目主要以C与Python为主
    的头像 发表于 01-15 14:23 637次阅读
    <b class='flag-5'>Git</b>开发者关注内存安全问题,探讨引入Rust语言