目录
一、前言
在大型工程设计中,为了设计时序收敛,往往需要对初步运行的结果进行调试,调试的很重要的依据就是各种报告的分析,下面将介绍一些常用的分析报告,演示的器件为xcku3p-ffvb676-2-i
二、分析报告
2.1 时钟分析
时钟分析主要包含四部分:时钟,时钟网络,时钟利用率,跨时钟域
2.1.1 时钟报告
Tcl console使用命令report_clocks可以报告设计中使用的时钟信息(名称,周期,波形,属性,来源),包括主时钟和生成时钟
report_clocks "clk_name"命令可以对指定名称的时钟进行报告,此时示例时钟名称为clk1
2.1.2 时钟网络报告
时钟网络报告使用界面的report_clock_networks生成,也可以tcl console窗口执行report_clock_networks命令生成,报告与时钟周期约束无关,为物理存在的,通过时钟网络报告可以查看时钟是否遗漏约束以及时钟驱动的load的信息。
2.1.3 时钟利用率报告
使用命令report_clock_utilization -name utilizer即会打开一个名称为utilizer的窗口,显示设计的时钟资源利用率,内容为时钟原语利用率,全局时钟资源利用率,全局时钟资源使用细节,本地时钟细节,时钟区域(时钟资源按区域分布的情况),全局时钟
2.1.4 跨时钟域报告
通过左侧综合与实现栏中的report_clock_interaction或tcl console输入report_clock_interaction都可进行源时钟和目标时钟关系分析,分析结果如下图
各颜色块名称含义如下
No path(黑色):指定的两个时钟间无时序路径
Timed(绿色):源时钟和目的时钟有同步关系,该路径的时序是安全的
User Ignored path(蓝色):在该源时钟与目的时钟的路径上,用户设置了false path或时钟组约束,
Partial False Path (淡蓝色):用户对源时钟和目的时钟间的部分路径设置false path约束,并且目的时钟与源时钟是同步时钟
Timed (Unsafe) (红色):源时钟和目的时钟是异步关系,它们没有共同的主时钟
Partial False Path (Unsafe) (橘黄色):源时钟和目的时钟至少有一条路径设置了false path约束
Max Delay Datapath Only (灰色):源时钟和目的时钟间的路径都设置了set_max_delay -datapath_only约束。
2.2 时序分析
时序分析主要是通过report_timing或report_timing_summary产生,后者是生成时序总结报告,report_timing更多的是用于指定路径进行时序分析。同时report_timing还可将时序报告以指定格式输出,可指定为.rpx和.rpt,其中.rpx是和网表文件dcp同时打开。
关于report_timing_summary可参见文章https://blog.csdn.net/zyp626/article/details/136436191?spm=1001.2014.3001.5501
2.3 约束分析
在时序例外约束中,如set_clock_groups,set_false_path,set_max_path,set_min_path,set_multicycle_path中,存在着优先级关系,一步小心就被覆盖,vivado使用report_exceptions来检查是否存在覆盖或合并的情况,可通过菜单栏路径“Reports->Timing->Report Exceptions”运行,也可tcl console窗口执行report_exceptions -name exception运行。
如下图,exceptions中显示了用户设置的约束,右侧为约束的实际情况,在position为24的status可以看到,该条约束已被第14条约束所覆盖。
在status列看到有缩写FP表示set_false_path,同时可能出现其他缩写,CG(set_clock_groups),MXD(set_max_path),MND(set_min_path),MCP(set_multicycle_path),DPO(set_max_path -datapath_only)。
2.4 资源分析
资源分析可以通过综合和实现中的Report Utiliation运行,也可以在tcl console窗口执行命令report_utilization -name utiliza运行,其中utiliza为自定义的窗口标签名称,结果如下图,包含CLB资源,I/O,时钟,BlockRAM等
在summary中已直方图形式展示了LUT,FF,IO,BUFG,MMCM的使用率,primitive则展示了使用资源对应的原语。
2.5 逻辑级数分析
逻辑级数是指时序路径中起点与终点中间的组合逻辑门个数,包括LUT,进位链,和Slice中的F7MUX/F8MUX/F9MUX,通常,逻辑级数越大,传输的延迟就越大。假设LUT和连接的网线的延迟为tns,时钟周期为Tns,则最大的LUT级数不能超过T/t,即在一个时钟周期内数据必须到达终点。
逻辑级数的分析使用命令report_design_analysis -name design_name来分析,以下图为例
Setup_Path_Characteristics显示时序路径中setup最差的信息,在schematic中,显示了起点到终点的连接关系
在logic level distribution中,右侧0-5分别为逻辑级数,下面的数字表示对应逻辑级数下时序路径的数量。
2.6 扇出分析
Vivado中针对扇出也有专门的分析报告,通过执行report_high_fanout_nets生成报告,下图报告中,summary中显示了具体信息,包含了设计中所有net的fanout数量以及对应的Driver类型
也可以通过参数-fanout_greater_than和-fanout_lesser_than来设置显示指定fanout数量范围的net,以显示fanout大于4的位列,执行report_high_fanout_nets -name fanout -fanout_greater_than 4
也可以显示指定时钟的fanout,report_high_fanout_nets -name fanout -clocks clk1
更多的设置参数可以在tcl console使用help report_high_fanout_nets查看使用
2.7 进位链分析
进位链分析使用命令report_carry_chains进行报告,不同于扇出和逻辑级数可以窗口显示,进位链分析结果只能tcl窗口显示,报告中统计了进位链的数量,长度
2.8 控制集分析
通常,由同一组控制信号,如时钟信号,使能信号,置位/复位信号相同的触发器为一个控制集,这些触发器可以放置在一个slice中,时序效果将更好,但需要更多的LUT资源。使用命令report_control_sets来报告,下图为添加了参数-hierarchical按层级展示控制集,下图为使用参数-hierarchical按层级来显示控制集的结果。报告中由四类信息
1. Summary
2. Histogram
3. Control Sets by Hierarchy
4. Flip-Flop Distribution
主要看Flip-Flop Distribution,Total registers类即显示对应控制集下的寄存器数量,Total slices为占用的slice数目
2.9 复杂度分析
复杂度分析主要用于评估设计的收敛难度,使用report_design_analysis命令可以生成对应报告。
setup path characteristics显示setup值最差的路径
logic level distribution中按时钟展示对应的logic level
在命令后再加入参数-complexity,会计算设计的rent value,该值表示模块之间的关联性强弱,越大则关联性越大,此处因为工程太小,所以未计算rent value
rent value值在0-0.65表示正常范围,在0.65-0.85时则要关注了,收敛存在一定难度,如果大于0.85并且模块的total instances也超过15000,表示布局布线将失败
2.10 pipeline分析
对于较长的组合逻辑,可以通过插入寄存器改善时序,对于插入的位置,可以参考pipeline报告的Pipeline insertion startpoint,Clock 为分析路径的时钟,Added Latency 为增加的pipeline阶段的数目,Ideal Fmax 为当前的最大频率,Ideal Delay 为当前最小的时钟周期,
Added Pipe Reg 在给定的added latency下,需要添加pipeline寄存器的最大数目,Requirement为在当前时序约束下需要的最大时延,WNS 为要求的最小时延,Pipeline Insertion Startpoint 为最长时延路径的起点单元,Pipeline Insertion Endpoint 为最长时延路径的终点。
2.11 时序分析配置报告
使用report_config_timing 查看时序分析的配置项
2.12 参数配置报告
使用命令report_param查看设计中参数相关的配置,description由参数功能的描述
三、参考资料
《Vivado/tcl 零基础入门与案例实战》