时序命令与报告
Vivado中用于时序分析的命令主要有以下两条,且都有对应的图形化设置界面。
report_timing_summary 主要用于实现后的timing sigh-offreport_timing 主要用于交互式的约束验证以及更细致具体的时序报告与分析report_timing_summary
我们先看看report_timing_summary ,实际上,不仅在布局布线后,在综合后甚至是更具体的实现过程中的每一小步之后都可以运行,从而得到一个全局的时序报告。
在Vivado IDE中点击Report Timing Summary后可以改变报告的内容,例如每个时钟域报告的路径条数,是否setup和hold全都报告等等。每改变一个选项都可以看到窗口下方的Command一栏显示出对应的Tcl命令。修改完设置后可以直接按OK键确认执行,也可以拷贝Command栏显示的命令到Tcl脚本中稍后执行。
这里有个小窍门,通过-name 指定一个名字,就可以在Vivado IDE中新开一个窗口显示这条命令的执行结果,这个窗口还可以用来跟其他诸如Device View或是Schematic View等窗口之间cross probing。这一点也同样适用于包括report_timing 在内的绝大部分Vivado中的report命令。
在设置窗口中还有Timer Settings一栏(report_timing中也有),可以用来改变报告时采用的具体corner、速度等级以及计算布线延时的方式。很多时候我们可以借助Timer的设置来快速验证和调试设计需求。
举例来说,在实现后的报告中显示时序违例比较严重,我们可以直接在Timer设置中改变速度等级后重新报告时序,来验证把当前这个已经布局布线完毕的设计切换到更快一档的芯片中是否可以满足时序要求。
另外,在布局布线后的设计上报告时序,往往不能更直观地发现那些扇出较大或是逻辑级数较高的路径。此时我们可以修改连线模型为estimated,报告出布局后布线前的时序而无需另外打开对应阶段的 DCP并重新运行时序报告命令来操作,这么做节约时间的同时,也更容易找到那些高扇出路径以及由于布局不佳而导致的时序违例。我们也可以修改连线模型为none,这样可以快速报告出那些逻辑延时较大以及逻辑级数较高的路径。以上这些改变Timer设置的方法可以帮助我们快速定位设计中可能存在的问题和缺陷。
report_timing_summary实际上隐含了report_timing、report_clocks 、check_timing 以及部分的report_clock_interaction命令,所以我们最终看到的报告中也包含了这几部分的内容。另外自Vivado 2014.3版起,打开实现后的结果时会直接打开一个预先产生好的报告。
Timing Summary报告把路径按照时钟域分类,每个组别下缺省会报告Setup、Hold以及Pulse Width检查最差的各10条路径,还可以看到每条路径的具体延时报告,并支持与Device View、Schematic View等窗口之间的交互。
每条路径具体的报告会分为Summary、Source Clock Path、Data Path和Destination Clock Path几部分,详细报告每部分的逻辑延时与连线延时。用户首先要关注的就是Summary中的几部分内容,发现问题后再根据具体情况来检查详细的延时数据。其中,Slack显示路径是否有时序违例,Source和Destination显示源驱动时钟和目的驱动时钟及其时钟频率, Requirement显示这条路径的时序要求是多少,Data Path显示数据路径上的延时,Logic Level显示这条路径的逻辑级数,而Clock Path Skew和 Clock Uncertainty则显示时钟路径上的不确定性。
以上图这条路径来举例,通过Summary我们可以得到这样的信息:这是一条clk时钟域内的路径,时钟周期为3.125ns,这条路径有0.268ns的时序违例。违例的主要原因是逻辑级数较高导致的数据链路延时较大,但连线延时的比例也较高,所以可以仔细看看这条路径的数据路径上有没有可能改进布局、降低扇出或者是减少逻辑级数的优化方向。
report_timing
report_timing是更具体的时序报告命令,经常用来报告某一条或是某些共享特定节点的路径。用户可以在设计的任何阶段使用report_timing,甚至是一边设置XDC,一边用其来验证约束的可行性与优先级。在Vivado IDE中可以由Tools > Timing > Report Timing 调出其图形化设置窗口。
与report_timing_summary类似,调整选项后对应的Tcl命令也会在Command栏生成,在Targets一栏还可以设置需要报告路径的起始点/途经点/结束点,可以三个都设置或是仅设置其中任何一项,每一项都支持通配符匹配甚至是正则表达式查找。report_timing报告出的路径延时与report_timing_summary中具体到每根路径上的报告一致,可以以此为依据帮助我们定位时序失败的原因。
用report_timing来报告时序其实还有一些更常见的应用场景,用来帮助我们设置和验证约束,尤其是那些时序例外约束。 |