Vivado入门
12 Oct 2020 1221745字 4073分 次 FPGA打赏作者 CC BY 4.0 (除特别声明或转载文章外)
1 前言
在Qualcomm接触了一下Vivado,确实比Quartus牛逼一些。
2 Vivado FPGA Design Flow
2.1 Logic Design Flow
Design Flow如下图:
设计输入可以是Verilog、VHDL、SystemVerilog,也可以是IP、DSP和嵌入式处理器;
综合时可以加入第三方的网表文件,同时也可以加入约束文件(不支持.ucf,支持.xdc);
综合之后进行时序分析;
实现过程中“opt_desgin”、“place_design”和“route_design”是必须的;
实现之后再次进行时序分析;最终生成bit流。
紫色部分都会生成相应的.dcp文件。
2.2 System Level Design Flow
系统级设计流程如下:
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
可以按照以下结构创建工程目录:
以Project Mode运行,会生成以下三个文件夹和最后一个工程文件:
- project.data:存放floorplan和网表数据;
- project.runs:存放综合和实现时生成的文件;
- project.srcs:存放HDL代码、约束、网表和XDC文件;
- project.xpr;工程文件。
3 IP Design
3.1 Vivado IP Overview
在Vivado下调用IP会生成以下文件:
首先是例化的模板,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为核心的。设计流程如下图:
在IP Catalog里除了赛灵思的IP之外,还可以有第三方的IP或者用户自定义的IP,这些都可以用IP Pacjager工具加入到IP Catalog里。
4 Simulation
4.1 Simulation Flow
仿真的基本流程如下:
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既可以是综合,也可以是实现,也可以两者兼具。如下图所示:
可以在一种综合下面有不同的实现方式,或不同综合不同实现配对的方式,或者有的是综合实现配对,有的只有综合。
每种Run可以有不同的约束,不同的芯片和不同的策略。
再多个Runs都有的情况下,只有一个Run是激活状态。可以用一下命令指定当前激活的Run:
current_run [gets_runs synth_1]
查看当前Run的结果的命令如下:
current_design
删除某个Run命令如下:
delete_run synth_2
6 Implementation
6.1
告辞。