VIVADO 设计流程介绍

1.vivado介绍

      vivado用于xilinx fpga的设计和验证,VIVADO除了支持传统的rtl to bitfile的设计流程(即输入是rtl代码,通过集成后,用vivado来产生bitfile),还支持了一种称为系统级集成设计流程(基于IP的设计,即可将打包好的IP(或者称为VIP)在VIVADO的block design中直接进行集成,然后产生bitfile的流程),第二种集成的方法其实相当于soc的集成,加速了集成时间,以及降低集成风险。

vivado支持如下feature:

逻辑仿真;
IO管脚约束;----ug899
power分析;
timing分析;
DRC检查;
对implementation结果进行分析和修改(ECO?);
烧写bitfile以及在线调试;----ug908
partial reconfiguration;--ug909和ug947

调用VIVADO的方式有两种:
      1是常见的gui界面,也可以称为IDE界面(integrated design environment);
      2是更快捷的tcl shell界面,另外在IDE界面下,也可以调用tcl命令来实现,可以调用tcl脚本来跑整个流程,也可以跑流程的一部分;

      ----综合和实现时有一些使用技巧,可能需要参考ug901和ug904.

      ----关于嵌入式处理器设计,可能需要参考ug898和ug940.

      ----关于vivado仿真,可参考ug900.

      有些业界常用标准(这个在团队越来越大的时候,会发现这些标准是多么的有用),vivado提供了支持:

vivado支持tcl脚本执行方式,其对设计的约束支持XDC(xilinx design
constraints),但是XDC得基础语法来源于业界统一的约束规范SDC(synopsys design
constraints),XDC和SDC本质上都是tcl语言,但是XDC和SDC只支持了tcl语言的一部分(例如变量,列表和运算符等),这个也可以参考《Vivado使用误区与进阶》系列;
AXI4, IP-XACT,这个可能需要参考ug1118和ug896手册(用户IP是根据IP-XACT协议进行封装的);
支持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: create_project......add_files......import_files.....

non-project mode : read_verilog......read_vhdl......read_ip......read_xdc......read_edif......
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;
  1. 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命令;

      3.tcl shell下运行tcl 脚本,这种方法其实可以应用到自动化流程中,如果用批处理方式,则可直接得到bit file,然后如果需要查看报告,重新打开tcl shell去查看,批处理方式为:“vivado -mode batch -source ”,需要注意的批处理方式下vivado执行完脚本会自动退出;

      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”不能包含“init.tcl”,所以init.tcl有可能也需要提交。

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文件,可以:

1.restore设计,如果需要的话;

2.设计分析;

3.定义约束;

4.继续执行;

      在设计的每个阶段,都最好保存dcp文件,可以用来调试问题。读写dcp文件的命令是“write_checkpoint *.dcp”和"read_checkpoint *.dcp",在gui界面下可以用“open_checkpoint *.dcp”命令来打开。

      举个例子:将已生成的dcp文件放到一个独立的文件夹,然后用tcl shell打开start_gui,然后read dcp文件,是可以看到网表文件和约束文件,并且可以report_timing得到时序信息,并且也可以write_bit来产生bitfile,所以dcp文件对设计使用还是很方便的。

ug892

作者:carlsun80
来源:CSDN
原文:https://blog.csdn.net/carlsun80/article/details/77800178
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(FPGA)