当前位置: 首页 > news >正文

关于时钟门控ICG的一切(与门及或门门控)

关于时钟门控ICG的一切(与门及或门门控)

    • 0、前言
    • 一、与门门控
      • (1)一个与门
      • (2)寄存器门控
      • (3)锁存器门控
    • 二、或门门控
      • (1)一个或门
      • (2)锁存器门控
    • 三、为什么与门或门的使用和触发沿有关
    • 四、门控的RTL实现及门控后电路变化
      • (1)RTL写法
      • (2)门控后电路变化
    • 参考

时钟门控属于低功耗的范畴,是其中经常被问到的部分,甚至被面试官问过或门能不能做门控,怎么做。不过当时知识没有学到很深入,也没抽出时间再搜这个问题。
每次画门控的电路图基本都在死记硬背了,这次整理了门控的三种形式以及与门和或门的实现,它们分别对应于不同时钟沿的情况。

0、前言

时钟门控(Clock Gating):通过在数据无效时关闭寄存器的时钟来实现有效减少动态功耗,最主要降低的是寄存器的动态功耗(时钟翻转的功耗)和时钟树功耗。(注意FF的数据本身就是不变了才能做门控,所以没有数据变化的不同)
在这里插入图片描述

对于与门和或门门控有这样一个规则:

对clk上升沿触发的FF,使用与门进行门控,信号只在时钟的低电平区变化(也就是用~clk接锁存器)。
clk下降沿触发的FF,使用或门进行门控,信号只在时钟的高电平区变化。

原因后续会讨论,先来看常说的与门门控。

一、与门门控

(1)一个与门

最简单的就是与门实现,EN=0就不输出时钟,1就输出。
在这里插入图片描述
这里问题很明显,就是没法保证EN对齐时钟,会有毛刺:
在这里插入图片描述

(2)寄存器门控

针对上面的问题,我直接能想到的解决方式就是把EN打拍,打一拍不就能够对齐时钟沿了嘛!
在这里插入图片描述
直接看图好像没啥问题,但是这里有两个问题没考虑:1是采样到EN边沿造成亚稳态的情况,2是与门两个输入的延迟不一样,一个输入直接是clk,延迟很小,另一个是EN采样后的输出,延迟相对大。
1、采样到亚稳态时:
在这里插入图片描述
亚稳态会直接影响到输出
2、clk2q有实际延迟
在这里插入图片描述
延迟的部分会和下一级的时钟正半周期相与,导致出现毛刺。
所以用寄存器直接打拍会有问题

可以发现问题都是出现在clk的正半周期,而实际的延迟和亚稳态的持续时间都很短,如果错位半个周期那么做与运算的就不是clk=1而是clk=0的时候了,也就没有上述问题。
用下降沿采样就可以实现,也就是实际寄存器门控的实现方式:
在这里插入图片描述
波形图如下:
在这里插入图片描述
因为采样前后均对应clk=0,所以即使有延迟或一点亚稳态也不会影响最终结果。
(注意:1、clk2q的延迟问题触发器可以完全解决,因为EN被clk下降沿打一拍之后变化一定在clk的下降沿,实际延迟后也一定位于clk=0的部分,但是后面锁存器门控不能完全解决
2、对于亚稳态问题,两者不能完全保证解决。毕竟单bit信号CDC要打两拍,这里EN可以打两拍之后再传过来)

(3)锁存器门控

实际用的最多的是锁存器门控,因为寄存器由两个锁存器组成,面积更大。一般在公司锁存器门控都封装好可以直接调用。
具体设计其实就是把上面的FF换成latch:
在这里插入图片描述
波形图:
在这里插入图片描述锁存器本身是电平触发,1的时候输出随输入变化,0的时候不变。
因为加了反相器,所以锁存器在clk=0的时候会输出变化的EN,1的时候保证状态不会变化,缓解了上面提到的两个问题。(对于clk2q的延迟问题,如果EN上升沿在clk=0的末端,经过延迟之后EN仍然有可能出现第一个clk周期不足或者毛刺。但因为会做成标准单元,对延迟进行控制,这个问题就不需要我们考虑了)

之前画门控的时候经常搞不清楚与门和latch的关系,其实只要明白是因为EN不对齐时钟沿所以需要对其打拍/锁存即可(注意用下降沿),锁存后的输出再和clk相与。

那上面的方式用做下降沿触发的FF的clk门控不行吗?我认为可以,毕竟就看锁存器的与门实现,里面只涉及时钟的高电平和低电平,和触发沿无关。
为什么下降沿或或门这里先按下不表,先看或门门控的实现。

二、或门门控

(1)一个或门

既然用或门做控制,那输入1的时候输出就恒为1,输入0输出才是clk,但常规的说法都是EN=1的时候传输时钟,所以给EN取反了:
在这里插入图片描述
在这里插入图片描述

很明显的问题也是有毛刺。
和与门明显的不同是或门的门控在时钟不导通的时候始终为高电平,所以第一个沿是下降沿。

(2)锁存器门控

触发器类似,这里直接说锁存器。
锁存器是clk=1的时候透明,所以clk=1的时候锁存到亚稳态或者有延迟都没关系,因为和clk=1或完之后都是1。锁存完的输出记得取反。

在这里插入图片描述

类似的原理,两边虽然都有亚稳态和延迟问题,但都比较安全。
在这里插入图片描述

三、为什么与门或门的使用和触发沿有关

这个问题我目前没有找到官方回答。
我认为其实可以混用,只是用对应了会更有效率,更好。
可以看到与门门控在关闭的时候输出一直为0,打开后的第一个沿为上升沿;或门门控在关闭的时候输出一直为1,打开后的第一个沿为下降沿。问题就在这第一个沿上

这里涉及到触发器的内部结构和采样原理,以上升沿触发的FF为例,采样过程如下:

在这里插入图片描述

clk=0时 s1 s4关闭,s2 s3打开,从锁存器维持原本状态,新状态进到主锁存器中;
clk=1时 s2 s3关闭,s1 s4打开,新状态在主锁存器中维持并输出;
如此循环…
对于上升沿触发的FF,clk=0时主锁存器的的s1关闭,信号可以直接进入主锁存器,当clk=1时遇到上升沿就直接采样到新状态然后输出了。如果采用或门门控的形式,则门控过程中clk一直为1,主锁存器一直维持着一个从前的状态,然后clk=0,新状态才进入主锁存器,比起第一个沿是上升沿的与门门控浪费了时间。(浪费多少应该和变化沿有关)
看起来这点延迟很少,但可能工具自动插了很多门控。

四、门控的RTL实现及门控后电路变化

门控可以在代码直接调用标准单元,或者让综合工具自动插入。

(1)RTL写法

但不是所有的写法都能插入门控,比如下面代码左边可以插入门控,右边就不行。因为门控是把时钟关了,需要保持数据不变,只有A<=A这种才能用门控。所以把数据设成0并不能减少功耗,要保持不变减少toggle才能降低功耗。
在这里插入图片描述

(2)门控后电路变化

插入后不再需要MUX(很多个),所以面积有可能减小。
如果D是单bit信号,节省的功耗就比较少,可能插入的CG面积还比原来的MUX大很多,而bit数越多就越划算。
那么这个临界值是多少呢?不同的工艺可能不一样,但是DC给的默认值是3。如果D的位宽超过了3bit,那么DC就会默认插入CG。
在这里插入图片描述

参考

数字设计–门控时钟与时钟切换
门控时钟
上升沿与下降沿的门控时钟设计
intel推荐的时钟门控方法
画图网站:wavedrom

http://www.dtcms.com/a/319635.html

相关文章:

  • [论文阅读] 人工智能 + 软件工程 | 大型语言模型与静态代码分析工具:漏洞检测能力大比拼
  • 分布式事务与分布式锁
  • PCB布线
  • 大队列CT胰腺癌PANDA 模型 医生结合AI后,病灶检测灵敏度提升 8.5%,胰腺癌识别灵敏度提升 20.5%,住院医师性能接近专家水平
  • 补充一种激活函数:GeGLU
  • 关于AI应用案例计算机视觉、自然语言处理、推荐系统和生成式AI四大领域的详细技术分析。
  • 数学建模——粒子群算法
  • Gradle 全解析:Android 构建系统的核心力量
  • JavaScript构建工具
  • CSS overscroll-behavior:解决滚动穿透的 “边界控制” 专家
  • 《Day3-PyTorch 自动微分入门:从计算图到梯度下降的实践指南》
  • Redis中间件(三):Redis存储原理与数据模型
  • Dokcer创建中间件环境
  • LeetCode:347.前K个高频元素
  • 手写数字识别实战 - 从传统机器学习到深度学习
  • 13-netty基础-手写rpc-消费方生成代理-05
  • Qt——入门
  • 数据赋能(386)——数据挖掘——迭代过程
  • Spring、Spring MVC、MyBatis 和 Spring Boot的关系
  • Ethereum:如何优雅部署 NPM 包中的第三方智能合约?
  • LoadBalancingSpi
  • Beelzebub靶机
  • MyCAT实战环节
  • 动手学深度学习13.10. 转置卷积 -笔记练习(PyTorch)
  • 在新建word中使用以前文件中的列表样式
  • Python调用Shell指令的方法与实践
  • 深海中的类型晨曦
  • Jmeter使用第一节-认识面板(Mac版)
  • 初识C++类的6个默认成员函数
  • 以复合赋值运算符(op=)优化单独运算符(op)的实现