【FPGA】Vivado的文件结构和配置

少女dtysky

世界Skill

时刻2015.05.08

Vivado是Xilinx公司最新的开发套件,ISE不再支持最新的7系列以及后面将要出的系列,然而Vivado本身也不支持7系列以前的硬件,这就表明它本身是一个分水岭,也或许可以说是一次决意的革新,当然,本人对ISE的坑爹早有耳闻所以以前一直用的是A家的Quartus,不过由于某些原因,嘛,总之Vivado用完了还是很顺手的,尤其是其文件结构值得一提,控制台脚本强大,IP封装比较顺滑并且不得不承认或许先封装IP再图形化连接的确可以提高效率(当然这是在用verilog和vhdl的情况下,抽象强大的sv如果被广泛支持就没他啥事了ww),不过将IP的UI层和IP的逻辑层分离值得赞许,但编辑器还是一如既往的狗屎。


1.目录结构

当我们新建了一个工程并且完成了文件添加和综合、布局布线以及生成bit流生成,最后导出sdk后,整体的目录主要如下,此处假设工程名称为EX:

EX.xpr: 项目管理文件,里面记录了该工程的文件索引。
Ex.srcs: 项目源文件目录,里面又分文sources_n, sim_n,和constrs_n而sources_n和sim_n内又分为import和new,顾名思义,源文件和仿真文件被分离开,但源文件实际上也是参与仿真的,sources_n下属子目录的子目录中除了自己新建的设计文件,又可以分为ip、bd等,ip目录下是ip核生成的文件,bd则是vivado专用图形设计界面的文件(bd的创建和文件解析将会在后面的教程中说到),sim_n内的文件通常是test bench,constrs_n内是XDC约束文件,用于时序约束和引脚约束等。此外,如果使用了ip,将可能生成ipshare目录,此目录中存放了一些保存被引用ip的一个临时副本。
EX.runs: 内部有许多名为(name)_synth_n和(name)_imp_n形式的文件夹,里面是综合和布局布线生成的一些临时文件,对于主模块,其(name)为空,里面生成的文件中包含报告文件和bit流。
EX.hw: 此目录中是存放硬件信息的,包括使用器件和综合后的网表,同时ila的波形调试结果也在此目录中存储。
EX.sdk: 只有在使用了CPU(无论是软核还是硬核)时才会出现这个目录,这个目录下存放的是SDK的工程,内部包括根据硬件生成的BSP和你自己新建的软件工程。
EX.cache: 临时缓存文件,无视即可。

这里需要注意的是,vivado使用的是相对路径,这个相对是相对于.xpr文件而言的,实际上这带来了很大的方便,这意味着我们不必关注绝对路径,只要保证文件结构的基本不变,便可以随意使用,不但如此,xilinx的工程师很欣慰的使用了xml明文方式记录文件架构,无论是xpr文件,还是后面教程中要提到的bd文件,还是后面同样提到的ip管理文件,这意味着如果我们需要创建一系列的工程,比如我做的图像处理库,它们都拥有着相似的结构,那么只需要用文本编辑器对xpr等文件进行编辑基本就可以构建相似的工程。

2.文件结构

xpr等文件遵从由明文的xml语法,如果你打开任意一个新建好的工程的xpr文件,将会看到类似于以下的内容:

<?xml version="1.0" encoding="UTF-8"?>
......
<Project Version="7" Minor="2" Path="......">
    <DefaultLaunch Dir="$PRUNDIR"/>
    <Configuration>
        <Option Name="Id" Val="58d46179d1874f22945d718ae416c55f"/>
        ......
    </Configuration>
    <FileSets Version="1" Minor="31">
    <FileSet Name="sources_1" Type="DesignSrcs" RelSrcDir="$PSRCDIR/sources_1">
        <Filter Type="Srcs"/>
        <File Path="$PSRCDIR/sources_1/new/ContrastTransform.v">
        <FileInfo>
            <Attr Name="UsedIn" Val="synthesis"/>
            <Attr Name="UsedIn" Val="implementation"/>
            <Attr Name="UsedIn" Val="simulation"/>
        </FileInfo>
        </File>
        <Config>
        <Option Name="DesignMode" Val="RTL"/>
        <Option Name="TopModule" Val="ContrastTransform"/>
        <Option Name="TopAutoSet" Val="TRUE"/>
      </Config>
    </FileSet>
......
</Project>

结构一目了然,非常清晰,Project块表示这个项目中所有的元素,Version等属性代表着项目的属性,内部的一些如同Configuration、FileSet等标签则是表明了这个项目的一些配置和文件结构,比如我这个项目拥有一个名为ContrastTransform.v的主要源文件,所以FileSet的sources_1内便有一个File标签内定义着这个文件,随后还给这个文件定义了作用域,比如

Name="UsedIn" Val="synthesis"

就表明这个文件被用于综合。
其他还有一些设置通过名字就能猜得出来,不再多说。
那么,我们如何善用这种结构呢,很简单。
比如我有一个AImage的工程,其中有许多文件,这些文件都是以A_X.v, A_Y.sv形式命名的,新建一个工程再添加未免烦躁,这时候我们可以拷贝整个工程,将所有文件的"A_"改成"B_",并且在xpr文件中将所有的"A_"替换成"B_"即可。
如果你会脚本语言,那就更简单了,写个小脚本处理一下就OK(python死忠www)。

3.配置

文件目录结构以上就说的差不多了,这里再说一些vivado的配置。
众所周知,对于一个程序员,一个优雅的编辑器是多么的重要,当用惯了还算优雅的quartus的编辑器再来使用vivado的编辑器时,我感觉我吃到了什么不好的东西,这里我想对x家的工程师说一下,工程师何苦为难工程师。
当然x家工程师还算有良心,提供了编辑器的可配置选项,在vivado的GUI下,点击标题栏的Tools -> Options -> General -> Text Editor:

Vivado-editor-conf

如果你是高贵的vim党啊,emacs党啊,还有不怎么高贵的notepad++党啊,他有默认配置,当然我用的sublime他也有,不过不知道是不是环境变量的问题并没有啥用,所以我用了一下策略:
在这里选择Custom Editor,并且点击后面的...按钮输入打开编辑器时候的指令:

B:/Poetic_Being/Sublim_Text_3/sublime_text.exe [file name]:[line number]

B:/Poetic_Being/Sublim_Text_3/sublime_text.exe是我的sublime执行文件路径,替换掉就可以了。

其他配置也没什么好说的了,基本都是大家都会的,好,结束。

如果不是自己的创作,少女是会标识出来的,所以要告诉别人是少女写的哦。