【芯片前端】关于门控电路和逻辑做在D端还是EN端的思考

最近在看《硬件架构的艺术——数字电路的设计方法与技术》,学习细化了很多之前模棱两可的知识点,偶尔来总结输出一下,今天就是这个主题——门控电路;

门控结构

相传在很多年前,时序逻辑里是没有门控电路的;

这句话我是听说的,估计我是没赶上那个时候,那时候最流行的触发器综合方式可能还是同步时钟使能结构:

【芯片前端】关于门控电路和逻辑做在D端还是EN端的思考

这种结构呢在没有使能的情况下,触发器的D端是不会有信号跳变的。但是呢,此时时钟信号保持翻转触发器的内部电路也保持活跃,因此没有降低功耗的效果,于是后来进一步出现了门控时钟的结构;

最简单容易想到的门控时钟触发器的结构如下图:

【芯片前端】关于门控电路和逻辑做在D端还是EN端的思考

通过en信号来控制时钟开关,当en信号当拍为0是,触发器时钟电路不翻转,Q端输出信号保持,功耗降低。但是这样做存在一个明显的问题,en信号显然是逻辑电路生成的,其满足建立时间和保持时间要求,但是当en信号维持时间过短时,时钟会被过早的关断:

【芯片前端】关于门控电路和逻辑做在D端还是EN端的思考

 或者说也有这种可能,产生时钟毛刺或误产生时钟脉冲:

【芯片前端】关于门控电路和逻辑做在D端还是EN端的思考

 因此作用clk1的en信号必须要能在时钟上升沿到时钟下降沿这个区间保持为一个常量,所以需要引入一个锁存结构:

【芯片前端】关于门控电路和逻辑做在D端还是EN端的思考

clk信号作为锁存器的控制端,en信号为被锁存信号,当clk为1时锁存en信号,clk为0是透传en信号,对应的波形如下:

【芯片前端】关于门控电路和逻辑做在D端还是EN端的思考

通过锁存器的锁存功能,en信号只要在上升沿附近保持稳定,即可保证产生完整的时钟脉冲;大部分的厂商会在标准单元库中提供“时钟门控单元”,比上面的结构会多一个test_se信号,在扫描测试时候使用:

【芯片前端】关于门控电路和逻辑做在D端还是EN端的思考

当然,刚刚所说的只是在触发器级的时钟门控,门控时钟可以处于整个时钟树的任何节点,越靠近根部的门控时钟对于降低功耗的作用越明显,原因显而易见,整个电路结构的功耗整体由三部分组成:组合逻辑产生的功耗+触发器产生的功耗+时钟树功耗;靠近根部的门控结构不仅降低了大量触发器的功耗,同时降低了区域的时钟树功耗(时钟树功耗几乎占到了芯片功耗的50%);

逻辑做在D端还是EN端

复习完门控时钟后,回到我之前就思考的一个问题:组合逻辑是应该做在触发器的D端还是EN端?实话实说,目前我也没有答案,只能把我的认识写一下;

把信号更多的做在EN端使之为1的条件更为苛刻带来的好处是显而易见的:时钟被开启的概率更低,触发器的功耗更低;而困难的地方在于EN端的信号时序更加紧张,时序收敛更加困难;

关于EN端的信号时序更加紧张,时序收敛更加困难这个事情,看一下通常综合完的clk timing.rpt和clk gating timing.rpt对比下就会发现,gating的timing路径中一般会减去一个时间比如-100ps,那这个时间减的是什么呢?

说实话我不是非常确定,初步分析,D端的信号是相对clk_gating收时序,逻辑由clk_gating采样触发,在下一拍的clk_gating做建立和保持时间分析;而EN端的信号是相对clk收时序,由clk_gating采样触发,在下一拍的clk做建立和保持时间分析。而clk_gating相对clk是有向后的偏移量的,因此EN端信号由clk_gating触发在clk处收时序,减去100ps是不是合情合理的?

因此我的第一个认识就是:在EN端时序可以收敛的情况下,尽可能的把逻辑做在EN端,以降低功耗;

然而,插入门控电路是有面积和功耗损失的,毕竟平白无故的多了一个与门、一个或门、一个锁存器,因此一般只有在大于等于四个触发器共用一个门控结构才会有正收益;同时,越多的触发器共用一个门控结构,门控电路本身带来的面积与功耗代价就越小。那么,如果EN端逻辑做的过于复杂和专一,必然不利于触发器共用门控结构,因此如果一组信号EN信号相近,那么可以提取他们的公共EN部分逻辑做在EN端,其他逻辑做在各自的D端,来减少门控结构的数量

当然了,EN端越共用一般意味着控制粒度越粗,时钟开启的频率越高触发器功耗也更高,这两个方面本身相互制约,有时需要靠经验来选择了。

上一篇:uniapp canvas 安卓真机不显示draw


下一篇:苹果回应新款 Mac 安装 Windows 问题