vivado时序分析

vivado时序分析

1.Tsu问题常见原因及解决方法

1.1 组合逻辑过于庞大复杂

组合逻辑过大时会增加信号的到达时间。
解决方式:
1.如果设计允许,可以添加多周期路径。
2.添加流水线寄存器,切分组合逻辑,降低延迟。
3.优化组合逻辑,减小时延。

1.2 扇出过大

降低扇出最好不要在综合设置中指定,过低的扇出限制会造成设计堵塞反而不利于时序收敛,最好的方法是根据设计中时序最差路径的扇出进行针对性的优化。
解决方式:
1.寄存器复制
通过复制几个相同的寄存器来分担由原先一个寄存器驱动所有模块的任务,继而达到减小扇出的目的。
2.max_fanout属性
在代码中可以设置信号属性,将对应信号的max_fanout属性设置成一个合理的值,当实际的设计中该信号的fanout超过了这个值,综合器就会自动对该信号采用优化手段,常用的手段其实就是寄存器复制。属性设置如下代码所示:

(* max_fanout = "3" *)reg  signed [15:0] din_d;

3.BUFG
通常BUFG是用于全局时钟的资源,可以解决信号因为高扇出产生的问题。但是其一般用于时钟或者复位之类扇出超级大的信号,此类信号涉及的逻辑遍布整个芯片,而BUFG可以从全局的角度优化布线。

2.Th问题常见原因及解决方法

保持时间问题的问题往往是异步处理的问题。
可通过约束set_faulse_path解决。

3.如何在vivado中快速定位、分析时序

方法一:图形界面

点击“Report Timing Summary”,在“Timing”界面中可以看到“Design Timing Summary”,点击红色感叹号可以筛选出时序违例路径,双击路径可以看到详细时序报告,点击路径按F4可以以电路图形式看到时序路径,方便在设计中定位问题。

方法二:tcl脚本

首先确定要分析的时序(可通过电路图查找或自行定位)
电路图查找:先选中要分析的时序路线,之后

set mylut [get_cells [get_selected_objects]]	//找到选中lut
join [get_timing_paths -through $mylut -max_paths 100 -nworst 100 -unique_pins -setup ] \n	//列举穿过选中lut的所有时序路径。 -max_paths表示最多显示多少路径。 -nworst表示显示最差的多少条路径。 -unique_pins表示相同路径只显示一次。 -setup表示显示建立时间时序报告。
report_property [lindex $mypath 1]		//显示时序路径特性
set mypath [get_timing_paths -through $mylut -max_paths 100 -nworst 100 -unique_pins]	//将时序路径保存入mypath。
report_timing -of_objects [lindex $mypath 0]	//生成时序路径报告。

你可能感兴趣的:(fpga)