静态时序分析之——关于PAR_ADJ的补充说明
0赞静态时序相关博文连载目录篇:http://blog.chinaaet.com/justlxy/p/5100052092
前面的文章中,有提到过(http://blog.chinaaet.com/justlxy/p/5100052121):
一般情况下,使用实际需求的FREQUENCY/PERIOD值作为约束条件是一个很好的习惯和选择。但是也有的场合,需要将约束设置得高一点,以测试当前的设计的最高性能等参数。此时,设计者在设置时钟约束的时候,可以使用PAR_ADJ选项,以避免过约束带来的问题。
其实关于PAR_ADJ的理解,我刚开始也是存在误区的,在向公司的同事请教了之后,总算是弄明白了,这里和大家分享一下:
首先举一个例子:FREQUENCY NET "clk1" 300.000000 MHz PAR_ADJ 30;表示PAR的时候工具会使用330M作为时序约束,但是在静态时序分析的时候,TRACE会使用300M来分析建立时间和保持时间等时序信息。
那么问题来了,此时PAR出来的结果一定能到330M吗?如不不能达到330M,PAR会不会不通过?或者PAR会不会认为这是一个错误的约束?
我之前的理解是,此时PAR会严格按照330M的约束进行Place & Route,如果PAR做不到330M的结果,则会认为这是一个错误。
实际上,这种理解是不正确的,因为我发现,300+30M,PAR不会提示错误,300+3000M,PAR仍然不会提示错误。很显然,按照上面的理解,这是不可能的。因为PAR不可能做到3300M的频率……
在请教了公司的同事,并反复的验证之后,我认为,关于PAR_ADJ应当这样理解:
首先,要知道ADJ实际上是Adjust的缩写,也就是微调的,PAR_ADJ的值相对于原有的频率约束值不应该太大(当然过大的话,IDE也不会提示错误,但是会影响PAR的效果)。
其次,PAR_ADJ参数对于PAR来说只是建议性的,比如在上面的例子中,PAR工具会在保证300M的前提下,尽力往330M去优化,但是不保证会一定做到330M!此时的PAR的结果可能和没有加ADJ参数是有区别的……
实际上,PAR_ADJ参数。主要有两个目的,一个是上面介绍的,测试当前时钟能够达到的最高频率;还有就是,用户可以通过PAR_ADJ对原有的时钟约束进行微调,并通过TRACE的报告,观察此时模块其他的部分是否受到了较大的影响,这对于跨时钟域分析来说,也算是一种很好的测试方式。
如果不足,请指正!