原创 TimeQuest User Guide 翻译4

2015-4-6 09:47 1593 23 26 分类: FPGA/CPLD
Analyzing Results

这部分算是最重要的一个环节了,不是因为它很难,而因为其他的文档都会跳过分析的环节。
我已经无数次看到设计者花大力气在.sdc上,但却不了解它在final analysis下是什么样的。而这个是一个很重要的技巧。因为可以完善设计者对设计的理解,并帮助设计者完善该.sdc文件。

The Iterative Methodology
当输入约束时,设计者可能会输入错误,所以希望有一个快速的修正、分析、并报告出.sdc文件错误的方法。
首先,进入TimeQuest:
20150401221617837.jpg
首先推荐点击”Report all Summaries“:
20150401221634868.jpg

这个操作将会执行以下命令:
1)创建Timing Netlist。默认会创建一个slow timing model netlist。如果设计这想要有一个不同的netlist,可以使用Netlist下拉菜单去 Create Timing Netlist。
2)读取SDC文档。如果有SDC文件被添加入工程(即Assignment->Setting->TimeQuest->Files),那么就被读入,否则系统会搜索和项目名称相符的.sdc文件。如果设计者修改了.sdc文件,则必须重新加载TimeQuest;
3)Update Timing Netlist接下来会将SDC约束加载到设计好的netlist中。
4)Report All Summaries命令会运行Setup, Hold, Recovery, Removal Summaries,Minimum Pulse Width 检查。这只是基本的概要分析(Device Specific checks are not run…)

一旦设计者修改了.sdc并保存后,则需要双击Reset Design。这将会退回到TimeQuest创建了netlist但还没读取SDC文件的状态。再双击 Report All Summaries 将会重新读入sdc文件并进行时序分析。

本质来说,方法如下:
1) Open TimeQuest
2) Double-click "Report All Summaries"
3) Analyze results
4) Make changes to .sdc file and save
5) Double-click "Reset Design"
6) Double-click “Report All Summaries”
7) Analyze results
8) Repeat steps 4-7 as necessary

注意这个方法仅仅是在新的约束下重新开展时序分析,但是布线(Fitter)并没有改变。布线仍然是由老的sdc约束决定的,只不过设计者使用新的约束 来分析在原来约束下的布线。所以即使时序约束报错了,那也仅仅代表这设计者需要重新运行place-and-route来重新布线。

A diving tool

之前的章节已经让设计者们运行了“Report All Summaries”,
这一操作将会运行4个主要的时序分析:
setup
hold
recovery
removal
20150401221655391.jpg
左上角的任务框叫做Reports。
面框显示了每一个时钟域的Slack。举例来说,第五行,对于每个由sys_clk驱动的目的寄存器,最差的setup slack是6.975ns。
slack是正的,表示这些路径满足了时序要求。End Point TNS代表了所有的Toltal Negative Slack。
当然,这些仅仅是概述。想要了解更多细节,那么设计者需要右击当前行,然后选择Report Timing……
20150401221718878.jpg
report timing 对话框弹出的时候会自动选择setup Radio并填好To clock的内容。这个例子中,10条最差的路径会被显示出来,设计者可以随意修改这里的 Tcl command 命令。
注意到,任何report_timing命令都可以从console中复制到用户自己的Tcl 文件中,所以设计者可以在将来的设计中,直接手动输入命令,而不用按这么多按钮。

report_timing
     
report_timing
    -from <source_nodes>
    -from_clock <source_clock_names>
    -rise_from_clock <source_clock_names>
    -fall_from_clock <source_clock_names>
    -through <thru_node>
    -to <destination_nodes>
    -to_clock <destination_clock_names>
    -rise_to_clock <destination_clock_names>
    -fall_to_clock <destination_clock_names>
    -setup | - hold| -recovery| -removal
    -detail <summary|path_only|path_and_clock |full_path>
    -file <file_name>
    -append
    -panel_name <report_name>
    -stdout
    -less_than_slack <slack_limit>
    -npaths <#_of_paths_to_display> //number of paths to report; defaults to 10
    -nworst <max_#_of_paths_per_endpoint>
    -false_path
    -pairs_only
    -show_routing
     TimeQuest中的report_timing命令是非常重要的一个工具。让我们看上面的那个截图,主要的选项已经显示出来了。From clock 和 To Clock可以将所选时钟的路径过滤出来。下拉菜单允许我们选择已经存在的时钟。
     Targets框中的From 和To允许我们只报告特定的点到点路径,也可以使用通配符 “*”指定多路径。看下面的一个例子:
          report_timing -from *|egress:egress_inst|* -to *|egress:egress_inst|* -(other options)
     如果-from/-to/-through 选项是空着的,那么将被默认为“*”,即所有可能的设备对象都包含在内。
     -through选项是为了限制 经过组合逻辑或特定cell引脚的路径。我的个人设计经验指出,这个是很少用到的,而且有时候用起来很麻烦。所以我一直尝试尽可能只使用- from 和-to选项。同时,在每个选项后的[……]中括号将会开启name finder,这是GUI用来找寻指定name的。这能够保证输入的name和设计中的nodes是匹配的。
     我们可以去分析-setup,-hold,-recovery,-removal。这些将会在之后被讨论。
     -detail 选项是一个需要被重点关注的项,它有四个options,这里只讨论其中三个。首先讨论summary,选这个只会列出概要信息,即Source Register, Destination Register, Source Clock,Destination Clock, Slack, Setup Relationship, Clock Skew and Data Delay. summary report会报告出更多的细节,如果我们不想要这些细节信息,那么可以使用summary option。一个很好的示例是,将report写到txt文档中,-detail summary可以让文档变得很简洁。
     下一个level就是 -path_only。这样就能报告出所有信息,除了clock tree是被报告成一行。当设计者知道所有的clock tree 是正确的,而不想关注它的信息,则可以用这种report。我们可以看summary report中Clock Skew 这一列,如果数值很小,比如比+-150ps小,那么我们就可以认为clock tree在目标和源之间是平衡的。
     如果存在时钟偏斜clock skew,那么应当使用-detail full_path来report。这样就能把clock tree的细节详细的报告出来,显示经过的每一个cell,包括input buffer,pll,global buffer(叫做CLKCTRL)等等。如果有clock skew,这样报告出来的细节就可以让设计者知道clock skew 是怎么产生的。-detail full_path选项也推荐在IO分析中使用,因为只有source clock 或者destination clock在FPGA中,其延时在满足时序要求中起了很大作用。
     下面是一副对比截图,对比了-detail summary 、-detail path_only 和-detail full_path。注意到clock delay在path_only和full_path命令中都是完全相同的,只是full_path有更多的细节。
20150401221813876.jpg
quartus II 添加了 +/- 展开功能在Data Path report中。这样我们就可以,即使在使用-detail full_path命令下,也不会被一大堆信息搞的头晕脑胀。
report_timing命令会显示出所有的路径,两点之间可能会存在许多不同的路径。同样的,一个目的地也会包含很多抵达它的路径。因为这样,设计者就可能需要列出很多很多的路径。而checkbox 选项则可以源、目的地间的一条路径。甚至可以通过限制到达目的寄存器的最大点数来过滤report。
最后,在底部,是Tcl 命令输入输出窗口。它可以显示在TimeQuest中运行的Tcl语句的语法。我经常会添加-false_path命令。这样就只有false path被列出来。

Correlating Constraints to the Timing Report
让我们接下来看看一些特定路径的时序报告,上面是setup analysis,下面则是hold analysis:

20150406094444974.jpg
我们关注上图第一列。这里我们得到一个8ns的 setup relationship和0ns的hold relationship。中间一列,我们通过添加多周期来open the window,这样setup relationship就变成16ns,而hold relationship仍然是0ns。第三列,我们使用set_max_delay和set_min_delay命令,注意到唯一变化的是setup hold 分析时候Launch edge和latch Edge的时间点。
对于IO口的约束来说,除了要添加 -max -min的值,其他都和上面一样。
20150406094706545.jpg
setup关系会减去 -max的值,这样就让setup relationship更难满足了,因为Data需要比之前更早到达。而-min值也是被减去的,负值让hold timing 更加严格,因为我们想让数据到达时间在数据要求时间之后。(The -min value is also subtracted, which is why a negative numbermakes hold timing more restrictive, since we want the Data Arrival Path to be longer than theData Required Path.)

     
     





PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户377235 2015-10-25 22:09

Hey, good to find soeonme who agrees with me. GMTA.

用户1736901 2015-4-10 14:27

翻译的有点晦涩,建议看文章里的英文原文。

用户377235 2015-4-7 12:15

看不懂

相关推荐阅读
用户1736901 2015-06-26 16:06
KinomaJS Overview
2 About KinomaJSKinomaJS 中提供了Javascript API ,XML 编程接口。Javascript是该环境的编程语言,而XML通过 一个编程框架,和Javascript结...
用户1736901 2015-05-08 11:25
mnl_timequest_cookbook翻译详解
附件里面把TimeQuest cookbook的翻译重新整理了一遍,并配上的详细的注释已经自己的一些理解,分享给广大学习FPGA时序约束的盆友们,一起学习,一起进步...
用户1736901 2015-04-10 15:16
【博客大赛】多级放大器稳定性分析及自激矫正
、...
用户1736901 2015-04-06 18:51
传输线物理基础
...
用户1736901 2015-04-03 09:37
电感测量注意事项
电感由缠绕在磁芯上的导线构成,特性由磁芯材料决定。空气是构成电感器的最简单磁芯材料。为了使电感具有更高的电感量,经常使用铁,铍镆合金,铁氧体这类磁性材料。电感的典型等效电路如下图: ...
我要评论
3
23
关闭 站长推荐上一条 /3 下一条