huberyli

Vivado Implementation 1

0
阅读(12003)

Vivado Implementation 1 : Implementation introduction

 

第一次发文,先自我介绍一下,我在某IC公司从事FPGA原型验证工作,使用的都是Virtex7 2000T型的FPGA,所以对Vivado有比较深入的接触。总体来讲,Vivado的功能比ISE要强大很多,但也确实有不少缺陷,而且也比较难上手。

我在Vivado的使用中,主要是用Vivado来实现Implemation,并不用它来synthesis,也不用它来simulationsynthesis tool我选用的是synplify,所以我的这些文章里都是以用synplify synthesisnetlistrun implementation flow的,Vivado版本为2014.4

 

1.Create Project

Create ProjectGUItcl两种模式,我们先介绍GUI模式。对于新手推荐使用GUI,当比较熟悉的时候建议尝试tcl,会极大地提高工作效率。

Create New Project

 

如果勾选“Create project subdirectory”,则会以Project name为名字再创建一级子目录。


 

选择Post-synthesis Project。在这里顺便介绍一下其他几个选项,RTL Project就是以rtlinput,也就是说要使用VivadosynthesisI/O Planning Project比较特殊,无需rtl,在我看来主要是用于项目前期了解一下器件,以及try一下pin脚分布。

 

add netlist source。注意,一定要指定top netlist,在我这个例子里就叫top.edf。另外,”Copy sources into project”,是默认勾选的,建议将netlist copyvivado目录下。

 

add constraints。如果有多个constraint,那么是按照顺序来执行的。另外,同样默认勾选了”Copy constraints files into project”

 

选择器件

 

2.Prepare Implementation

刚刚create project之后,如下图。下方的蓝框,显示不同的信息,比较重要的是Tcl Console,你所做的每一步,都在这个窗口将其对应的tcl显示出来,对于学习vivado tcl有很大帮助。

 

在这里我介绍两个极为重要的概念:Synthesized DesignImplementationed Design

由于我的flow是使用已经综合好的netlist作为input,所以Synthesiszed Design就是input netlist。如果我们要加debug signal或是对netlist作出以下修改等等,就必须Open Synthesiszed Design,也就是红框内的那个按钮,将netlist loadmemory中,才能对其进行操作,比如set up debug

runImplementationnetlist,成为Implementationed Design,基于这份netlist,就可以直接generate bitfile,也可以用它来进行一个ECO

由于我们刚刚创建了project,没有run implementation,所以没有Implementationed Design。因为没有Open Synthesized Design,所以此时memory中没有任何netlist

 

这个时候,在你的目录下,就会自动创建两个文件夹*.cache*.srcs,其中*就是你的project namenetlistconstraint都存放在了srcs目录下,如果你在vivado中修改了netlistconstraint,都是对srcs下的进行修改。而如果你对源文件进行了修改,是不会自动load的,你需要手动reload一下。

 

 

3.Implementation Strategy

如果你的design很简单,那请跳过此节。

点击”Implementation Setting”,就会弹出如下界面。Implementation是一个比较复杂的过程,其中包括若干步骤,具体步骤的介绍我会单独写一篇博文来介绍(内容较多,比较复杂)。在这里我要简要介绍一些,有的步骤是必须的,而有的步骤是非必须的,比如图中的”Post-Place Power Opt Design(power_opt_design)”,如果没有勾选is_enable,那就不做这一步。而其中的”-directive”,则是由用户来指定不同的算法来实现。Vivado内部集成了很多Strategy,也就是图中的红框,用户可以自行选定,也可以自己定制最适用于自己的Strategy,比如我就定制了一个名为hold_advanceskewStrategy。至于如何定制属于自己的专属Strategy,一方面要了解Vivado的各种Strategy,再有就是了解自己的design,多尝试集中Strategy,这样才能找到最适用于自己的Strategy

另一个红框内的Incremental compile,是一个新功能。如果你的design只有很小的改动,那么以之前的checkpoint文件(.dcp)为指导,可以较快的完成Implementation。但我在实际使用中,发现局限较大。因为即使改动很小,一旦重新综合,很多net的名字都变了,这就造成实际的netlist改动并不小,所以并不会提升很多,甚至还会造成布线布不通的情况。不过,对于ECO,还是比较快的。

tcl.pre表示在这一步之前执行某一tcltcl.post表示在这一步之后执行某一tcl,这就给GUI模式下提供加载tcl提供了方便条件。在这里我介绍一个把ERROR降为Warningtcl。在ISE中,不指定pin location是不会报ERROR的,而在Vivado中则不行,那么如果让Vivado对不指定pin location不报ERROR呢?在Bitstreampre.tcl中,load一个tcl,命令如下:

set_property SEVERITY {Warning} [get_drc_check UCIO-1]

 

至于UCIO-1的含义,如下图。我们可以通过Report DRC来查看DRC的规则集。

 

4.Create multiple runs

上一节介绍了Implementation Strategy,如果我们需要对同一netlist同一constraint尝试不同strategy,或者是我们要尝试不同的constraint,是不是我们就要逐个手动run Implementation,记录结果,在进行比较呢?答案显然是否定的。

每次Create project之后,会自动Create一个runs,名字叫impl_1。我们要做的,就是Create多个runs

Design runs窗口右键单击,弹出如下窗口,选择Create runs…

 

之后会弹出如下窗口,我们可以创建runs,并设置不同的constraintStrategy。注意Make Active一项,一个project可以有多个runs,但是能有一个Make Active。导航栏的操作,都是对Make Activeruns进行的。

 

之后界面如下,Vivado可以在一台机器上并行run,也可以串行run,还可以登录远程服务器。点击NextCreate runs就完成了。

 

晚上的时间是极为充裕的,Create多个runs,下班前run上,第二天就都好了。不同的runs都存放在不同的目录,名字以runs的名字命名。我们还能勾选上多个runs,对比其结果有什么不同,如下图。

 

 

5.ECO

FPGA中,有可能我们调试之后,发现只需要进行一处非常小的改动,比如对clock降频呀,把某一个逻辑取反呀等等。就需要修改RTL,重新synthesisimplementationwritebitstream。其实,Vivado的强大功能,使我们无需这么麻烦。

比如我们是用MMCM来产生clock,调试过后发现信号质量不好,想要尝试降频,我们所做的修改,实际上只是修改MMCM的一个参数,并不涉及修改连线。我们可以直接在已经生成bitfile.dcp文件上,稍加修改即可。

刚开始使用Vivado时,我尝试过ECO。我的步骤是这样的,点击GUI中的Open Implementationed Design,然后修改相应的MMCM参数,最后点击GUI中的WriteBitstream按钮。可上板子上一测试,并没有降频。当时schedule比较紧,我就没有在做尝试,后来看了AllyZhou写的一篇Vivado ECO的文章,并阅读了大量的Xilinx User Guide,我才发现其中的问题。

 

首先,我先介绍一个.dcp文件。在Vivado中,记录数据的文件就是checkpoint,也就是.dcp文件。在Vivado Implementationflow中,诸如PlaceRoute等等每一步都会生成一个.dcp文件。

其次,Vivado中,把PlaceRoute等都归入到Implementation中,所以实际上只有两大步:ImplementationWriteBitstream。当Implementation之后,如果我们点击GUI中的WriteBitstream按钮,注意,是点击按钮,这时候Vivadoload最后一个完成routedcp文件。解释一下,首先,得是fully route.dcp才能生成bitfile;其次route之后还有一个可选的步骤phys_opt_design,如果有run这一步,就会用这一步的.dcp,而不是route的。

所以,我之前ECO时,应该点击GUI中的WriteBitstream按钮来生成bitfile,而是应该使用tclwrite_bitstream a.bit。我没有试过修改Implementationed Design之后,保存一个.dcp文件,再点击GUI中的WriteBitstream按钮会怎样,因为我找到了更好的方法。

我们直接在原有的project中修改,database会比较混乱。所以,我将最后一个.dcp文件copy出来,新建一个目录,用Vivado直接打开这个.dcp文件,然后进行修改。在GUIopen checkpoint方法如下:


 

 

客观的说,VivadoECO方面,要比ISE时代的FPGA Editor要强大,但也确实不好入门。其实,这些方法都写在Xilinx那上千份User Guide中,但Xilinx并没有一个User Guide的目录。刚入门时,你可能都不知道如何检索出来,比较遗憾。