vivado用于xilinx fpga的设计和验证,VIVADO除了支持传统的rtl to bitfile的设计流程(即输入是rtl代码,通过集成后,用vivado来产生bitfile),还支持了一种称为系统级集成设计流程(基于IP的设计,即可将打包好的IP(或者称为VIP)在VIVADO的block design中直接进行集成,然后产生bitfile的流程),第二种集成的方法其实相当于soc的集成,加速了集成时间,以及降低集成风险。
vivado支持如下feature:
调用VIVADO的方式有两种:1是常见的gui界面,也可以称为IDE界面(integrated design environment);2是更快捷的tcl shell界面,另外在IDE界面下,也可以调用tcl命令来实现,可以调用tcl脚本来跑整个流程,也可以跑流程的一部分;
----综合和实现时有一些使用技巧,可能需要参考ug901和ug904.
----关于嵌入式处理器设计,可能需要参考ug898和ug940.
----关于vivado仿真,可参考ug900.
有些业界常用标准(这个在团队越来越大的时候,会发现这些标准是多么的有用),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
#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
#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
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
......
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