大家好,我是数字小熊饼干,一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结,并通过汇总成文章的形式进行输出,相信无论你是在职的还是已经还准备入行,看过之后都会有有一些收获,如果看完后喜欢的话就请关注我吧~谢谢~
在前面的文章里,我们讨论了许多关于时序分析的知识,了解到了在时序路径中需要满足建立时间和保持时间,在这篇文章中我们主要聊聊在时序分析中的一些特例,这些时序特例不需要满足建立时间和保持时间,或者是要求没有那么严格的时序例外。
一、false path
false path即伪路径,指的是芯片实际工作并不真实存在或经过的路径,比如一些比如测试逻辑,静态或准静态逻辑,这些与电路正常工作不相关的路径,或者是异步路径。
在我们指定某条路径为false path之后,eda工具就不会这条路径进行时序分析,且在综合布局布线也会比较快速,不会在这些伪路径的优化上浪费太多时间。指定某条路径为false path的方式如下:
set_false_path –from [get_pins reg0/CK]–to [get_pins reg1/D]
二、multi cycle
multi cycle即多周期路径,当某些信号不需要在一个周期后被下一触发器捕获时,我们就可以设置这条路径为multi cycle。我们可以按照以下方式设置multi cycle:
set_multicycle_path -setup 3 -from [get_cells FF0] -to [get_cells FF1]
上述例子是设置了FF0到FF1这条路径是多周期路径,其建立时间需要的周期数变为了3周期,如下图所示:
对于DATA1原本的建立时间检查在T1时刻(图中虚线所示),而在我们定义了multi cycle后,建立时间检查就被延后到了T3时刻。
在了解了设置multi cycle后的建立时间检查后,我们将目光转回保持时间检查,在默认的时序检查中,保持时间的检查总是比建立时间检查早一周期,例如,在上图中默认的保持时间是在T2时刻。我们再回想一下保持时间检查的要求:保持时间检查需要确保一个触发器输出值在变化时不会传递到一个触发器,并且在捕获触发器有机会捕获它原来的值之前,不会覆盖掉它的的输出值。
因此合理的保持时间检查应该是再T0时刻,FF0在输出新的数据DATA1时,需要保持不影响FF1捕获原来的数据DATA0。因此,合理的保持时间的多周期设置如下:
set_multicycle_path -hold 2 -from [get_cells FF0] -to [get_cells FF1]
这里的-hold 2,指的是从默认的保持时间检查点T2,向前移两个周期,即于T0处进行保持时间检查。如下图所示:
最后还需要说一下,在设置了multi cycle后,下游的捕获寄存器还得加上控制使能,以控制其何时采集上游的输入数据,因为如果下游的捕获触发器不加以使能进行控制,还是会在一拍后采集到上游的输入数据,就很有可能出现亚稳态。
换句话说就是说因为时序检查中由于multi cycle的设置,改变了建立时间和保持时间的检查点,为了配合这个改变,我们得控制捕获使能,以控制捕获捕获触发器的采集时间点,以避免和multi cycle的设置不一致。
三、max delay与min delay
我们可以使用set_max_delay与set_min_delay来设置某些路径的最大延时与最小延时,具体设置方式如下:
set_max_delay 12 -from UFF0/Q -to UFF1/D
set_max_delay 4 -from UFF0/Q -to UFF1/D
在设置了最大延时后,若路径延迟超过这个值(例子中为12)则违例,类似的,若在设置了最小延时后,若延时小于这个值(例子中为4)则违例。
如果你喜欢这篇文章的话,请关注我的公众号-熊熊的ic车间,里面还有ic设计和ic验证的学习资料和书籍等着你呢~欢迎您的关注!