对同步数字电路做 STA 的时候,经常会遇到异步复位的相关时序检查。最常见的就是 Recovery 时序检查和 Removal 时序检查。
关于异步复位,首先我们知道有些触发器不支持异步复位;有些触发器支持异步复位(Reset,复位后为0)或者异步置位(Set,复位后为1);有些触发器同时支持异步复位和异步置位,但这种触发器不太常用,因为异步复位和异步置位之间也需要满足一定的时序要求,通常是由于不规范的 HDL 写法造成综合生成的。
下文用异步复位指代异步复位和异步置位,因为二者在时序约束上没有区别。
异步复位涉及的 Recovery 和 Removal 两种时序,容易和异步复位在功能上的复位生效(Reset 或者 Assert)或者复位释放(Release 或者 De-assert)发生混淆。尤其是 Removal 和 Release 字面含义有些接近,更易产生概念上的混淆。
常见的异步复位一般都是采用大家耳熟能详的“异步复位、同步释放”的电路设计,异步复位的复位过程是不依赖于时钟而存在的,这是其称之为“异步”的原因。
但在我们经常打交道的同步电路设计中,异步复位的释放通常是依赖于时钟存在的,异步复位发生后,如果时钟一直不来,异步复位电路产生的复位信号会一直处于复位电平,直到时钟来了,才会产生同步于时钟的翻转电平,即同步释放,从而保证它带的所有触发器同步(即在同一个时钟周期内)退出复位状态,才能保证这部分数字电路的启动具有同步性。
所以说,对于一般数字电路的异步复位信号的复位翻转来说,其完全是异步事件,没有检查时序的必要性。
但是异步复位信号的释放翻转有同步性,所以需要检查它和时钟的时序关系。如果有违例,可能造成这个复位信号驱动的触发器不在同一个时钟周期启动,从而可能产生逻辑错误。
Recovery 和 Removal 就是针对异步复位信号的释放翻转相对于时钟有效沿的时序关系,和异步复位信号的复位翻转没有关系。
可以理解为触发器的异步复位端释放时的翻转相对于时钟端的建立时间(setup),只是因为异步复位的异步特性,为了区别于触发器数据端两种翻转(从0到1,从1到0)相对时钟都要检查的建立时间,所以单独起个名字叫做 Recovery。
类似地,可以理解为触发器的异步复位端释放时的翻转相对于时钟端的保持时间(hold)。
需要强调一下的是,Recovery 不是指发生复位,Removal 也不是复位的撤销。
另外,大家可以打开自己手头的标准单元的 Liberty 文件,找到一个带异步复位的触发器,看看其中异步复位端的时序描述,通常它的 related_pin 是触发器的时钟端;时序类型通常是 recovery_rising 或者 recovery_falling,rising 或者 falling 是指 related_pin 也就是触发器时钟的有效沿;约束部分通常是 rise_constraints (低有效的异步复位,rise 是释放翻转方向)或者 fall_constraints (高有效的异步复位,fall 是释放翻转方向)。
有些早期工艺的 Liberty 文件中,触发器异步复位端的时序描述不那么严谨,可能包含了复位翻转时的检查,这样的场合通常需要在 SDC 中对这些路径设置 false path。比较新的工艺,通常时序描述都很精确,没有必要特意设置复位翻转为 false path。不过在大型芯片设计中,如果涉及到 block 级别的时序模型抽取(ETM),有些抽取工具不能很好的识别 block 内的时序类型,可能会把异步复位的复位翻转相关的时序类型也提取出来,给顶层的时序分析造成困扰,这时候也需要人为设置一些 false path 以避免错误提取。
有些电路的设计确实是真正的异步复位,尤其是模拟电路中的一些触发器的复位控制。它能够保证异步复位信号的复位翻转和释放翻转在完成相当长一段时间后,时钟才会开始翻转。这样的电路,确实就没有做 Recovery 和 Removal 时序检查的必要。
前面提到的同时带有异步复位和异步置位的触发器,如果在功能上能够保证二者在一段时间内不会同时发生,其实也可以拿来使用,它在某些电路实现中有其独特的作用。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有