VERDVANA'S BLOG Verdvana

Vivado入门


1 前言

        在Qualcomm接触了一下Vivado,确实比Quartus牛逼一些。


2 Vivado FPGA Design Flow

2.1 Logic Design Flow

        Design Flow如下图:

img1

        设计输入可以是Verilog、VHDL、SystemVerilog,也可以是IP、DSP和嵌入式处理器;

        综合时可以加入第三方的网表文件,同时也可以加入约束文件(不支持.ucf,支持.xdc);

        综合之后进行时序分析;

        实现过程中“opt_desgin”、“place_design”和“route_design”是必须的;

        实现之后再次进行时序分析;最终生成bit流。

        紫色部分都会生成相应的.dcp文件。

2.2 System Level Design Flow

        系统级设计流程如下:

img2

        IP Package可以把自己设计的代码封装成新的IP放入IP Catalog中。

2.3 Design Checkpoint

        Design Checkpoint由三部分构成:

  • Logical Netlist(EDIF);
  • Constraints(XDC);
  • Physical Data(XDEF)。

        如果工程文件名为top,那么生成的Design Checkpoint分别为:

  • Synthesis:top.dcp;
  • Opt:top_opt.dcp;
  • Place:top_placed.dcp;
  • Route:top_routed.dcp。

        也可以用相应的tcl脚本生成或读取Design Checkpoint文件:

write_checkpoint
read_checkpoint

2.4 Design Database

        可以按照以下结构创建工程目录:

img3

        以Project Mode运行,会生成以下三个文件夹和最后一个工程文件:

  • project.data:存放floorplan和网表数据;
  • project.runs:存放综合和实现时生成的文件;
  • project.srcs:存放HDL代码、约束、网表和XDC文件;
  • project.xpr;工程文件。

3 IP Design

3.1 Vivado IP Overview

        在Vivado下调用IP会生成以下文件:

img4

        首先是例化的模板,verilog的后缀为.veo,VHDL的后缀为.vho。

        然后就是综合网表文件、行为级仿真文件和Testbench。

        对于第三方的仿真工具(Cadence的IES和Synopsys的VCS)会生成HDL文件。

        对于第三方综合工具,会生成.v或.vho的黑盒文件。

        有的IP会生成Example Design,它是独立的以IP为顶层的工程,方便仿真和综合。

        在Vivado下通常有两种方式创建IP,一种是创建独立的IP工程,一种是在工程内创建IP。这两种方式对于IP的综合都可以采用OOC(out of context)或Globally的方式。OOC是先对IP综合,生成相应的.dcp文件;Globally是只生成相应的RYL代码,最后与整个工程一起综合。

        IP的版本既可以锁定,禁止更新;也可以更新到最新版本。

        把IP交给第三方综合工具综合的步骤如下:

  • 创建IP工程;
  • 生成每个IP的.scp文件;
  • 把生成的_stub.v或.vho文件加入到第三方综合工具的工程里;
  • 生成.edf网表文件;
  • 把.edf和.dcp文件加入到Vivado的工程中;
  • 使用Vivado进行实现。

3.2 Vivado IP Design Flow

        Vivado的设计理念是以IP为核心的。设计流程如下图: img5

        在IP Catalog里除了赛灵思的IP之外,还可以有第三方的IP或者用户自定义的IP,这些都可以用IP Pacjager工具加入到IP Catalog里。


4 Simulation

4.1 Simulation Flow

        仿真的基本流程如下:

img6

        RTL代码设计好之后会有行为级仿真;综合完之后会有综合后的仿真;实现之后会有时序仿真。

        通常情况下行为级仿真个和时序仿真是必须的。

4.2 Simulation Tool

        Vivado自带的仿真工具是Xsim。当然也可以使用第三方的仿真工具。

4.3 Scope & Objects

        Scope可以是模块、进程或函数。相关命令:

current_scope
get_scope
report_scope

        Objects可以是HDL中的信号、变量或常数。相关命令:

get_objects
report_objects

5 Synthesis

5.1 Synthesis Setting

        Project Mode下可以使用一下指令进行综合:

launch_runs synth_1

        Non-Project Mode下使用如下命令:

synth_design [-name arg] [-part arg] [-constrset arg] [-top arg]
[-include_dirs args] [-generic args] [-verilog_define args]
[-flatten_hierarchy arg] [-gated_clock_conversion arg]
[-directive arg] [-rtl] [-bufg arg] [-no_lc] [-fanout_limit arg]
[-shreg_min_size arg] [-mode arg] [-fsm_extraction arg]
[-keep_equivalent_regiters] [-resource_sharing arg]
[-control_set_opt_threshild arg] [-quiet] [-verbose]

5.2 Synthesis Attributes

        有很多综合属性,具体看Vivado文档。

5.3 Create Multiple Runs

        多个Runs既可以是综合,也可以是实现,也可以两者兼具。如下图所示:

img7

        可以在一种综合下面有不同的实现方式,或不同综合不同实现配对的方式,或者有的是综合实现配对,有的只有综合。

        每种Run可以有不同的约束,不同的芯片和不同的策略。

        再多个Runs都有的情况下,只有一个Run是激活状态。可以用一下命令指定当前激活的Run:

current_run [gets_runs synth_1]

        查看当前Run的结果的命令如下:

current_design

        删除某个Run命令如下:

delete_run synth_2

6 Implementation

6.1


        告辞。