4、复位树设计:复位树的扇出、复位缓冲器链、低功耗复位策略
好,咱们接着聊复位。前面几章我们把同步复位、异步复位、异步置位/复位这些基本概念捋了一遍。但说实话,这些只是“单点”的知识。真正到了大规模芯片设计里,你面对的是一个庞大的复位网络——成千上万个触发器,怎么让它们同时、可靠地复位?
这就引出了我们今天的主角:复位树。
我个人习惯把复位树想象成一颗倒着长的树。根是复位源(比如芯片的复位引脚),然后通过一级一级的缓冲器,像树枝一样分叉出去,最终连接到每一个触发器的复位端。这颗树设计得好不好,直接决定了芯片能不能稳定启动。
4.1 复位树的扇出问题
先说说扇出。扇出,就是一个驱动单元能带多少个负载。你想想看,一个复位信号要驱动几千、几万个触发器,这扇出得多大?
扇出太大,最直接的问题就是信号边沿变缓。复位信号从0变1,或者从1变0,上升/下降时间会变得很长。这会导致什么?
- 时序违规:复位信号到达不同触发器的时间差太大,造成复位不同步。
- 功耗增加:信号在中间电平停留时间过长,导致短路电流增大。
- 可靠性下降:慢边沿信号更容易受噪声干扰。
我在一个项目里就吃过这个亏。当时为了省事,直接把复位信号连到了一个巨大的缓冲器上,然后一股脑全部分出去。结果后仿真一看,复位信号从芯片一端到另一端,延迟差了将近2ns。嗯,那版芯片直接废了。
4.2 复位缓冲器链的设计
既然扇出不能太大,那我们就得用缓冲器链来“接力”。说白了,就是一级一级地放大驱动能力,把复位信号送到每个角落。
设计缓冲器链,有几个关键点:
- 平衡延迟:每一级缓冲器的延迟要尽量一致,这样复位信号到达各个分支的时间差才能最小。
- 驱动能力递增:越靠近根部的缓冲器,驱动能力可以小一点;越靠近叶子节点,驱动能力要越大。
- 时钟树同步:复位树最好和时钟树的结构对齐。你想想看,如果复位信号和时钟信号走的路径不一样,那复位释放的时序就很难控制。
我曾经在一个项目中,为了追求极致的复位同步,把复位树做成了和时钟树一模一样的H树结构。效果确实好,复位偏差控制在50ps以内。但代价是面积和功耗都翻了一倍。所以,平衡才是关键。
4.3 低功耗复位策略
现在芯片越来越复杂,功耗成了大问题。复位树这么大,动不动就几千个缓冲器,功耗自然不小。怎么降低复位树的功耗?
我总结了几个常用的策略:
| 策略 | 描述 | 适用场景 |
|---|---|---|
| 门控复位 | 在复位树的根部加一个与门,用使能信号控制复位是否生效。当芯片正常工作时,关闭复位树,减少动态功耗。 | 需要频繁复位/唤醒的模块 |
| 局部复位 | 只对需要复位的模块生成复位树,其他模块保持原状态。避免全局复位树一直翻转。 | 多电源域、多时钟域设计 |
| 低摆幅复位 | 使用低电压摆幅的复位信号(比如0.3V到0.7V),减少每次翻转的功耗。但需要专门的电平转换器。 | 超低功耗IoT芯片 |
| 异步复位同步释放 | 这个我们上一章讲过。它本身就能减少复位树的翻转次数,因为复位释放是同步的,不会产生毛刺。 | 所有同步设计 |
我个人最常用的是门控复位。你想想看,芯片99%的时间都在正常工作,复位树根本不需要动。加一个简单的与门,就能省下不少动态功耗。我在一个AI加速器项目里,用门控复位把复位树的功耗降低了40%以上。
4.4 复位树的结构图
说了这么多,不如画张图来得直观。下面这张图展示了一个典型的复位树结构:
从这张图可以看得很清楚:复位信号从根出发,经过三级缓冲器,最终到达8个触发器。每一级缓冲器都控制了扇出,保证了信号质量。而且,你注意到没有?缓冲器2a和2b的负载是平衡的,都带了2个下一级缓冲器。这就是我们说的平衡延迟。
好了,关于复位树的设计,今天就聊这么多。记住,复位树不是小事,它关系到芯片能不能正常启动。下次你设计复位树的时候,多想想扇出、缓冲器链和低功耗策略。嗯,这些经验都是我用流片失败换来的,希望你能少走弯路。
可可精品资料库