实验室自研工具Vivado Batch Mode Tool介绍!

2019-10-29 10:16:40 浏览数 (1)

在之前本公众号写过两篇关于工具更新对仿真调试提高效率的文章,《【干货】推荐一款FPGA仿真调试鸟枪换炮的工具!》以及《NCVerilog SimVision Vivado仿真环境搭建》,详细描述了Linux环境下仿真环境搭建可以缩短五倍以上的仿真时间。本文仍是实验室学生张仲禹所写,介绍了自己开发的小工具Vivado Batch Mode Tool,通过使用它可以很简单的做到从GUI过渡到命令行使用,希望大家都能用上更好更快的工具,在紧张的工作时间里创造更多的价值!

手点Vivado GUI也太低效了,关注“Z胖实验室”公众号,公众号内回复 Vivado脚本 获得链接

Vivado Batch Mode就如其字面意思,就是Vivado的批处理模式,用另一种说法也就是使用shell的非GUI(图形界面)交互模式。但是要注意,非GUI模式还有一种tcl Mode,也就是使用tcl命令的交互模式,这不等同于我们这里所说的Batch mode。或者你可以更简单的把它理解为通过命令行与Vivado进行交互。

在Batch mode下Vivado使用起来更加快速,操作更加明确简洁,可以大大的提高工作效率,提高生产力。

为此,为了实验室同学们能更加方便的使用Vivado Batch mode,我写了这个小工具Vivado Batch Mode Tool,通过使用它就可以很简单的做到从GUI过渡到命令行使用,希望大家都能用上更好更快的工具,在紧张的工作时间里创造更多的价值!

需要一提的是,本工具仅仅是一个简单的脚本,使用Shell和tcl进行实现(十分简陋且结构简单),主要用于实现我们日常开发的基础功能,这里作为抛砖引玉的作用,希望大家有更好的想法也可以动手去实现,推荐大家学习使用Python进行脚本编写,这样更有助于编写更加强大的脚本。

为什么要使用Batch Mode?

这里从两个方面分别进行说明,为什么要使用Vivado的Batch mode。

1、流程操作效率

我所谓的流程操作效率,是指在使用Vivado时,通过键盘输入、鼠标点击以及进行等待等实际外部操作的效率。例如我需要打开一个Vivado工程,并进行Synthesis,那么在GUI下是这样的流程操作:点击打开Vivado GUI并等待----用Vivado点击打开对应的.xpr文件并等待----点击run Synthesis并点击确认----等待----Synthesis完成。

而如果使用Batch mode,那么只需要在Terminal输入以下命令:

Vivado -mode batch -source syn.tcl XXX.xpr

其中syn.tcl是一个提前写好了tcl命令用于指示Vivado进行Synthesis操作的tcl文件,这也仅需要几行简单的代码即可。

从这里已经可以看出,在有一个提前准备好的脚本的情况下,通过脚本指挥,自动的去下达命令,可以极大地减少流程操作,可能只需要输入几个字母再按一下回车,就可以执行一套较为复杂的操作。

上面举例中的进行Synthesis还算是一个较为简单的操作,很明显在越复杂的操作中,使用Batch mode越能带来更高的流程操作效率提升。

一种简单的理解方式是,你提前将需要做的事情都告诉了电脑,然后你就玩去了,电脑按照你提供给他的事务列表逐个逐个自己去进行,这期间不会再来烦你。

更为生动的GUI和Batch mode在流程操作上的对比就像这样:

GUI模式:

第一天

妈妈:你快回屋里去。 我:好的。

妈妈:坐下来。 我:好的。

妈妈:快写作业。 我:好的。

我:我能玩电脑吗? 妈妈:不行。

第二天、第三天……

相同的对话每天重复。

Batch 模式:

第一天

妈妈:你快回屋里去写作业,不准玩电脑。

我:好的。

第二天、第三天……

妈妈:我之前说的你忘了?快去。

我:好的。

原本每天重复的长对话后面都只能用一句就代替了。

经过上面的对比,相信你已经对Batch mode在流程操作效率上的提升有了明确的认识,那么接下来再说说另一方面。

2、运行效率

运行效率指的就是Vivado在执行具体操作的时候其自身运行计算的效率、速度。这里我并没有深究让运行效率提升的具体原因,个人猜测一部分原因是因为不使用GUI而释放了很多原先被GUI占用的资源,可能还有跟GUI占用的系统中断更多有关吧(把这一条归到前一条也没问题),有兴趣的同学可以去具体研究一下,我这里只说对比实验的结果。

我用一台CPU为i7-8700,16G DDR4 2666MHz 内存的PC,分别使用GUI和Batch mode对同一个Vivado工程从Synthesis跑到Write Bitstream这样一个完整的过程。

GUI花了45分钟时间,Batch mode花了18分钟。

GUI:“我起了,被秒了,有什么好说的。”

Batch mode在运行效率上的优势太明显,不需要再说更多了吧。

综合以上两点,使用Batch mode既能提高流程操作效率,解放自己的双手,还可以大幅提高运行效率,缩短运行等待时间,直接有效的提高使用Vivado的整体效率,使开发速度大大加快。这些,就是我推荐使用Batch mode的原因。

要使用Batch Mode的一些不便

正如前面提到的syn.tcl文件,要指挥Vivado执行任何操作,都需要用tcl语言来下达命令,也就是说你还需要会用tcl语言把要做的事情告诉Vivado才行,这就增加了难度。

TCL语言全称是Tool Command Language,一般简写成tcl(读音同tickle),它是许多的EDA工具都使用的一种语言,既有tcl原生的语法,也有各家EDA自己定义的语法,Vivado的tcl语法可以参照Xilinx UG835文档,很全面的手册。或者你也可以参照着平常使用Vivado工程时出现的vivado.jou这个文件,它里面记录了你这一次从打开到关上Vivado整个过程中按顺序每一步使用的tcl命令,我个人更偏向于用后者作为主要材料学习,然后随时翻看UG835文档作为补充讲解。

另外,除了需要tcl语言来写具体的命令,还需要一个框架来进行流程控制,就好像你知道Synthesis的命令是什么,也知道Implement的命令是什么样,但是你还需要什么时候用什么命令,用完之后再做什么,什么时候停止......等等这些都要考虑在内。这个框架根据需求可以很简单也可以很复杂,同时它也需要再使用另一种语言来搭建,常见的有Shell、Perl以及Python。这些就又为写一个脚本增加了难度。

因为这些原因,许多人对Batch mode望而却步,毕竟都是从Windows过来的人,不看图形界面就发慌,关GUI是不可能关的,这辈子都不可能关的,写脚本又不会,就只有点来点去才能勉强应付的了生活这样子。

但是,不用担心!

我给你都准备好了,我把一切都放在那里了,One Piece是......(不好意思串场了)这是一个一个简陋但是又能实现基本功能的脚本,暂且叫它Vivado Batch Mode Tool吧,我尽可能让它的在Terminal中能显示出一个类似GUI的操作界面。可能你用了之后会觉得“Batch mode比GUI好多了!里面各个东西都实用,界面又简洁,我超喜欢Batch Mode的!”

Vivado Batch Mode Tool

介绍与使用方法

1、Vivado Batch Mode Tool功能介绍

本工具的初衷是能为本人所在实验室的各位同学们提供一个方便的途径去接触使用Vivado Batch mode,因此需要方便的与Vivado工程配合使用,于是便设计成了类似外置助手工具这样的框架。

Vivado Batch Mode Tool可以使用户方便的使用Vivado的Batch mode,仅需要输入提供的选项就可以做到基础的Synthesis、Implement、Write Bitstream以及Program Device这些操作,相当于为用户准备了一个不同于GUI的操作界面,可以较好的服务于习惯GUI的用户。本工具仅能实现一些基础必要的功能,一些更为复杂的特别是需要用户自己定义的(例如Debug Core)仍然需要通过GUI完成,在工具中也提供了进入GUI的选项。

2、Vivado Batch Mode Tool文件总览

Vivado Batch Mode Tool我将其放入一个文件夹内,如下图。

其中包含了这样的一个文件夹和两个文件,如下图。这其中Vivado_init.tcl的作用我已经写在它的注释里了,不希望每一次打开vivado都产生两个备份的.log和.jou的同学可以看一看它。

在tcl_dir内有7个.tcl文件,如下图。

这些就是这个脚本的全貌。

3、Vivado Batch Mode Tool使用介绍

1)将Vivado_bat_mod_tool文件夹放置在与你的Vivado工程的.xpr同一级目录下,如下图。

2)修改文件夹内的Vivado_batch_mode_tool这个文件的权限为允许作为可执行文件,可以使用chmod命令,也可以右键----Properties----Permission----下方勾选Allow executing file as program。

3)在Vivado_bat_mod_tool文件夹这一级使用Terminal,运行Vivado_batch_mode_tool:

./Vivado_batch_mode_tool

4)如果文件夹放置正确,则会检测到Vivado工程,显示如下的界面:

如果文件夹放置不正确,则会报错,如下图:

5)下面介绍各个选项的使用,请根据需要,输入相应的选项并回车即可。

syn:仅执行Synthesis操作,执行完会询问是否需要打开 Synthesis Design的GUI界面,请输入y/n来决定是否打开。这里是为了当一些工程需要添加debug core的时候,可以在综合完成后,进入GUI去set Debug,设置完成后再手动关闭GUI即可。

imp:仅执行Implement操作,执行完会询问是否需要打开 Implemention Design的GUI界面,请输入y/n来决定是否打开。这里是为了有时需要在实现完成后检查布线图。

bit:仅执行Write Bitstream操作,会将生成的.bit文件和.ltx文件(如果有的话)放置在Vivado_bat_mod_tool文件夹中的bitstream文件夹内。

syn_imp:连续执行Synthesis和Implement,执行完会询问是否需要打开 Implemention Design的GUI界面,请输入y/n来决定是否打开。

all:连续执行Synthesis、Implement和Write Bitstream。

prog:将bitstream内的[current_project].bit下载入FPGA。如果没有发现匹配的Device则会报错。注意,目前此脚本还仅能下载.bit文件,如果有.ltx文件请进入GUI去下载,毕竟抓信号有时候还是需要用GUI观察。

gui:使用GUI打开这个Vivado工程。

exit:退出脚本。

6)每一次执行完之后只需要按回车就可以返回主界面,不要反复开关脚本。

使用实例

接下来,我将通过讲解一次完整的从Synthesis到Program Device的操作来为大家提供一个使用这个脚本的实例。

1)如前文描述一样放置正确路径并打开脚本,得到下图:

2)单独执行Synthesis(当然也可以一步到位执行all),输入syn并回车得到下图。

然后Vivado就会开始对你当前的工程进行Synthesis,完成之后会有询问是否要打开Synthesis Design,如下图。

不需要就输入n然后回车,如下图。

需要打开Synthesis Design则输入y并回车,然后就会打开Synthesis Design的GUI。

下图是打开的Synthesis Design GUI界面。

之后关掉GUI时也会显示

只需要按回车就可以返回主界面。

3)直接执行all,从Synthesis跑到Write Bitstream,输入all并回车,如下图。

然后Vivado就会开始自动的先执行Synthesis,再执行Implemention,最后执行Write Bitstream。完成后会有如下图的提示。

同时bitstream文件夹下会出现.bit文件,有debug core时还会出现.ltx文件。

4)最后我要进行Program Device操作

此时我的PC上没有连接任何FPGA板,如果此时执行prog,则会出现下图的报错。

我现在就去拿块板子插上。

好的板子插上了,我们现在再来prog一下。

Program完成后会有提示,如下图。

并且此时开发板上是这样的

没错它就是个流水灯。

全程完成,操作少,速度快,易掌握。

只需要执行all和prog就能完成这一系列的操作。

写在最后

希望看完了以上内容的你能够掌握这种Vivado的Batch mode用法,并能够去开发自己的脚本工具。

希望本工具能够起到抛砖引玉的作用,带给以前没有接触过使用脚本进行开发的同学们一个新的体验,然后打开一个新的大门,提高更多的能力。

目前这个Vivado Batch Mode Tool V1.0也是我关于Vivado Batch mode的第一个脚本,比较简陋的shell脚本,也希望后面我也加强学习,等到V2.0的时候给大家带来更功能强大的Python版本的脚本。

0 人点赞