精选推荐
彻底理解Intel FPGA时序约束—解决方案篇(二)
2021-04-23
上面,我们介绍了如何分析时序的方法,并且验证了我们第一篇的公式。并且我重点介绍了report timing。
下面,我们要开始正式来学习GUI界面下的约束命令了。
以上默认是占空比50%,如果要指定占空比,请指定-waveform option.
The Derive PLL Clocks (derive_pll_clocks) constraint automatically creates clocks for each output of any PLL in your design.
Allows you to specify the expected clock setup or hold uncertainty associated with jitter, skew, and a guard band when performing setup and hold checks for clocks or clock-to-clock transfers. You can specify separate clock uncertainty for setup (-setup) and hold (-hold). The Timing Analyzer subtracts the setup uncertainty from the data required time Definition for each applicable path, and adds the hold uncertainty to the data required time for each applicable path.
从上面的官方文档,我们可以知道这个clock uncertainty正式时钟的不确定性的约束,其实也是我们建立时间余量和保持时间余量的不确定性的值。
设置时钟组允许你指定在设计中不相关的时钟,默认情况下,时需分析器件会假定所有的时钟都是通过共有的时钟而相关的,因此所有在时钟域间的传递对于时序分析来说都是有效的,你可以通过切分成时钟组来排除时钟域之间的传递。
比如说,如果有两个时钟8ns和10ns的时钟,即使时钟是完全异步的,这个时序分析器件仍然企图建立2ns的建立时间关系,除非你用时钟组来指定这两个时钟是不相互关联的。另外时钟组并不是只能设置两个,你也可以继续无限制的添加。
此约束用于内部生成的时钟约束,比如说PLL,或者分频生成的时钟,但是分频生成的时钟我们一般不建议用来作为时钟信号。source指的是时钟源,比如说将clk进行倍频,那么clk就是时钟源。
set_false_path指的是不做时序检查,比如一些跨时钟域之间的数据传输可以不做时序检查,因此可以设置为set_false_path
● 更改分析和综合的设置选项,第一种为速度型,就会更加兼顾速度,第三种将更加兼顾布线的面积。更改这些值后,重新编译,如果时序伪劣较小,很可能,更改后,时序伪例就消失了。
● 综合种子,这个值默认是1,但是也可以更改为1~12等都可以尝试,不同的值可能会影响最后的布线,可能最后伪劣会消失。
●更改布线的预计最坏slack,如果时序违规在在0.5ns左右,可以通过此方法,如果违规太严重,那可能用此方法也未必生效。
以上三种方法都属于工程经验,记住即可,没有什么理由可以说的。都是试出来的,有可能你三个方法都用了会适得其反。
设置为3,虽然编译时间会增加,但是可以以运行时间为代价寻找到更好的路由。
并且把router Timing optimization level 更改为max
更改前的fmax:
通过减少阻塞逻辑,减少rigister-to-register 的数据延时,所以最好就是if语句里面不要写太多的组合逻辑了,如果写了很多组合逻辑,我们可以输出flag标志的寄存器来处理,从而实现路径的分割。这也是插入pipeline的方法。
一般来说解决hold violation的情况是比较少见的,如果遇到,可以通过加一个lockup latch来解决。
来源于CSDN,内容仅代表作者观点,文章有删减。作者:李瑞锋,中国电科电子科学研究院硕士毕业生,苏州瑞晟微电子(realtek半导体集团)芯片工程师。