【VIVADO使用1】设计流程介绍(重点是project mode和non-project mode)

马权
2023-12-01

1.vivado介绍


vivado用于xilinx fpga的设计和验证,VIVADO除了支持传统的rtl to bitfile的设计流程(即输入是rtl代码,通过集成后,用vivado来产生bitfile),还支持了一种称为系统级集成设计流程(基于IP的设计,即可将打包好的IP(或者称为VIP)在VIVADO的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: 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;


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命令;

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












 类似资料: