这两天学习了复位相关的知识,结合实际工作经验,在这里总结一下 同步复位 与 异步复位 的那些事儿吧!(synchronous reset/ asynchronous reset)同步复位特性: 需要时钟,保证复位成功(只要复位信号长于1cycle), 可能会增加delay on data path

异步复位特性:不需要时钟,不proper design可能会有glitch

复位的实际应用场景:

在芯片启动的时候,需要reset保证所有的寄存器处于初始状态

实际的芯片复位方式:

async reset, sync de-reset 异步复位,同步解除复位。

异步复位可以保证芯片在给时钟之前就被reset干净。只有同步解除复位才能保证复位的操作是完整有效的。如果没有异步解除,一定会有glitch,无法保证复位后所有寄存器的值是已知的。

-> Question: 如何异步复位,同步解除复位?

用 double sync (special cell needed) 来sync 这个async reset

因为reset信号是给整个芯片的,fanout巨大,所以和clock tree是类似的,需要小心处理。

几件需要处理的事:

-> 多时钟域的电路如何复位?

double sync to different clock domain + correct reset sequence. 正确的复位顺序的意思是要梳理好block之间的dependency

-> timing closure好难,怎么办?use pipelined reset ,就多搞些reset减少单一reset signal的fanout

在reset/de-reset的时候把clock关掉,等一段时间reset/de-reset完全到了整个电路后再打开clock

-> 因为async,被别人一碰就直接reset然而人家没想reset你咋整?i.e. possible Single Event Transient (SET) or A noisy reset button, generating multiple toggles

搞个glitch filter:就多个连续cycle有reset才reset: 纯组合逻辑的话就搞个and(reset,reset_delay_10ns) 组合逻辑可以搞的更长点

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐