【VIVADO使⽤1】设计流程介绍(重点是projectmode和non-
projectmode)
1.vivado介绍
vivado⽤于xilinx fpga的设计和验证,VIVADO除了⽀持传统的rtl to bitfile的设计流程(即输⼊是rtl代码,通过集成后,⽤vivado来产⽣bitfile),还⽀持了⼀种称为系统级集成设计流程(基于IP的设计,即可将打包好的IP(或者称为VIP)在VIV ADO的block design中直接进⾏集成,然后产⽣bitfile的流程),第⼆种集成的⽅法其实相当于soc的集成,加速了集成时间,以及降低集成风险。
vivado⽀持如下feature:
1. 逻辑仿真;
2. IO管脚约束;----ug899
3. power分析;
4. timing分析;
5. DRC检查;
6. 对implementation结果进⾏分析和修改(ECO?);
7. 烧写bitfile以及在线调试;----ug908
8. partial reconfiguration;--ug909和ug947
调⽤VIVADO的⽅式有两种:1是常见的gui界⾯,也可以称为IDE界⾯(integrated design environment);2是更快捷的tcl shell界⾯,另外在IDE界⾯下,也可以调⽤tcl命令来实现,可以调⽤tcl脚本来跑整个流程,也可以跑流程的⼀部分;
----综合和实现时有⼀些使⽤技巧,可能需要参考ug901和ug904.
----关于嵌⼊式处理器设计,可能需要参考ug898和ug940.
----关于vivado仿真,可参考ug900.
有些业界常⽤标准(这个在团队越来越⼤的时候,会发现这些标准是多么的有⽤),vivado提供了⽀持:
1. vivado⽀持tcl脚本执⾏⽅式,其对设计的约束⽀持XDC(xilinx design constraints),但是XDC得基础语法来源于业界统⼀的约
束规范SDC(synopsys design constraints),XDC和SDC本质上都是tcl语⾔,但是XDC和SDC只⽀持了tcl语⾔的⼀部分(例如变量,列表和运算符等),这个也可以参考《Vivado使⽤误区与进阶》系列;
2. AXI4, IP-XACT,这个可能需要参考ug1118和ug896⼿册(⽤户IP是根据IP-XACT协议进⾏封装的);
3. ⽀持verilog,vhdl以及system verilog语法,HLS⼯具增加⽀持system C,C,C++,OpenCL;
2. VIVADO使⽤
简单来说,vivado只有两种⽅式:project mode和non-project mode。project mode下的有些feature(例如代码和结果管理,配置保存,设计状态,ip集成)在non-project mode下是没有的。
在non-project mode下,每⼀步都需要由tcl命令执⾏,每⼀次编译设计时,必须指定所有的设计⽂件,设置⼯具配置参数,执⾏综合和实现,产⽣bitfile和report⽂件。
project mode和non-project mode下的tcl命令不是完全⼀样的,有些project mode的命令是个wrapper,举例说明:
1. project mode下,可以使⽤add_file命令去添加代码。⽽non-project mode下,只能使⽤read_verilog,read_vhdl,read_xdc以及其他read_*命令去读进去各种代码⽂件;
2.project mode下,可以使⽤launch_runs命令去加载预定义的run策略;在non-project mode下,wrapper下的各个命令opt_design, place_design,route_design必须要单独依次执⾏;
3.绝⼤多数命令在两种model下都可以使⽤,例如report命令;但是有些命令例如synth_design命令只存在在non-project mode,所以要⼩⼼不要混⽤;
在gui界⾯下执⾏的操作,会产⽣⼀个vivado.jou⽂件,这个⽂件内容是gui下执⾏ 的tcl命令,可以⽤来作为参考。
举例说明project mode和non-project mode下使⽤的tcl命令:
1. 项⽬创建,导⼊⽂件
project mode:
non-project mode :
2.综合
project mode: launch_run synth_1, wait_on_run synth_1, open_run synth_1, report_timing_summary
non-project mode: synth_design, report_timing_summary, write_checkpoint;
3.实现
project mode: launch_run impl_1, wait_on_run impl_1, open_run impl_1, report_timing_summary
non-project mode: opt_design, write_checkpoint, place_design, write_checkpoint, route_design, report_timing_summary,
write_checkpoint
4.bitfile产⽣
project mode: launch_run_impl_1 -to_step_write_bitstream, wait_on_run impl_1
non-project mode: write_bitstream;
3. tcl使⽤
⽤tcl来调⽤vivado的基本⽅法有如下⼏种:
1.不⽤打开gui界⾯,直接调⽤vivado⾃带的tcl shell,打开的⽅法有两种,⼀种是“vivado -mode  tcl”,另外⼀种是“start>all programs>xilinx design tools>vivado 201x.x>vivado 201x.x tcl shell”;
2.打开vivado gui界⾯(“vivado -mode gui”),在界⾯下⾯的tcl console下输⼊tcl命令;shell界面
4.gui界⾯下,在界⾯下⾯的tcl console下运⾏tcl脚本;
即使使⽤了tcl shell去跑vivado流程,但是还是可以⽤gui界⾯的好处的。
4.vivado和版本控制⼯具
为了便于代码的版本控制,最⽅便的⽅式是使⽤non-project tcl脚本流程,设计者把代码check out到本
地,然后修改代码,以及增加代码,然后通过read_* tcl命令读进设计,进⾏综合和实现,结束后,再把代码提交到版本库⾥。
需要提交到版本库的内容有:修改后的rtl代码,另外像design checkpoint,report,bitstream也可以根据需要提交。
除了上⾯这些需要提交,另外run脚本也有可能需要提交,可以通
过“write_project_tcl”命令(file>write project tcl)来产⽣,但是“write_project_tcl”不能包含“l”,所以l有可能也需要提交。
project mode下如果还想⽤版本控制,就⽐较蛋疼,不⽤考虑了。
关于xilinx ip的版本控制:
这个需要完善。
5 pcb设计交互
io管脚配置可以通过csv spreadsheet,rtl header,xdcfile作为交互⽂件。---可参考ug899
6. project mode使⽤
这个略
7. non project mode使⽤
non project mode下,整个流程都会只使⽤tcl命令去编译放在内存中设计,但是在non-projcet mode下,设计者必须要⾃⼰⼿动管理source file,report,perform drc,write dcp。
vip增加或者修改怎么办?
non project mode下,设计者需要⾃⼰掌控整个设计流程,设计者必须管理如下⽂件:
1.hdl 代码,约束,IP;
2.管理依赖关系;
3.产⽣和保存综合和实现结果;
non project mode下tcl命令,基本命令有如下:
read_edif:读进edif,ngc王彪⽂件;
read_verilog:读进verilog 和system verilog⽂件;
read_vhdl:读进vhdl⽂件;
read_ip:读进ip⽂件(xci,xco);
read_checkpoint:加载⼀个checkpoint到memory;
read_xdc:读进sdc或者xdc约束⽂件;
set_param和set_property:多种功能,例如可以⽤来定义设计配置,tool设置,等等;link_design:如果要使⽤⽹表⽂件?
synth_design:综合;
opt_design:high-level 设计优化;
power_opt_design:插⼊clock gating降低功耗,可选;
place_design:
phys_opt_design:执⾏物理优化,优化时序,可选;
route_design:
report_*: 产⽣各种报告;
write_bitstream:产⽣bitstream,运⾏DRCs;
write_checkpoint:保存流程中的design。⼀个design checkpoint由⽹表和优化约束,以及实现结果组成;
start_gui:
stop_gui:
⼀个non-project模式下tcl脚本(bft设计项⽬)如下:
7.1 step 0 定义⽬录
#step 0: define output directory area
set outputDir ./Tutorial_Created_Data/bft_output
file mkdir $outputDir
7.2 step 1 读进设计和约束
#step 1: setup design sources and constraints
read_vhdl -library bftLib [ glob ./Sources/hdl/bftLib/*.vhdl ]
read_verilog [ glob ./Sources/hdl/*.v ]
read_xdc ./Sources/bft_full.xdc
7.3 step 2 综合,report利⽤率,timing,写checkpoint design
#step 2: run synthesis, report utilization and timing estimates, write checkpoint design
synth_design -top bft -part xxxx-2 -flatten rebuilt
write_checkpoint -force $outputDir/post_synth
report_timing_summary -file $outputDir/post_synth_timing_summary.rpt
report_power -file $outputDir/post_synth_power.rpt
7.4 step 3 place和优化,report 利⽤率,timing,写checkpoint design
opt_design
power_opt_design
place_design
phys_opt_design
write_checkpoint -force $outputDir/post_place
report_timing_summary -file $outputDir/post_place_timing_summary.rpt
7.5 step 4 route和优化,report实际利⽤率,timing,写checkpoint design,drc,写verilog和xdc out
#step 4 run router, report actual utilization and timing, write checkpoint design, run drc, write verilog and xdc out
route_design
write_checkpoint -force $outputDir/post_route
report_timing_summary -file $outputDir/post_route_timing_summary.rpt
report_timing -sort_by group -max_paths 100 -path_type summary -file $outputDir/post_route_timing.rpt
......
7.6 step 5 产⽣bitfile
write_bitstream -force $outputDir/bft.bit
dcp⽂件使⽤:
dcp⽂件相当于对当前设计做了⼀个snapshort,包含了⽹表,约束,实现结果。
通过dcp⽂件,可以: