当前位置: 首页 > 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.xdnf.cn/news/1256419.html

相关文章:

  • 紫光同创Logos2+RK3568JHF开发板:国产异构计算平台的破局者
  • Mongodb常用命令简介
  • 将Excel数据导入SQL Server数据库,并更新源表数据
  • 超全的软件测试项目平台,10多个项目部署在线上环境,浏览器直接访问
  • 树莓派安装OpenCV环境
  • 8、Redis的HyperLogLog、事务Multi、管道Pipeline,以及Redis7.0特性
  • STM32 HAL库外设编程学习笔记
  • iOS 文件管理实战指南,用户文件、安全访问与开发调试方案
  • npm 与 npx 区别详解。以及mcp中npx加载原理。
  • 多线程 future.get()的线程阻塞是什么意思?
  • [无需 Mac] 使用 GitHub Actions 构建 iOS 应用
  • 全栈:如何操作在SQLserver里面CRUD(增删改查)
  • stm32cubeide memory analyzer 不显示BUG
  • 使用Puppeteer轻松自动化浏览器操作
  • 高并发内存池 设计PageCache(4)
  • W25Q64模块
  • jetson上使用opencv的gstreamer进行MIPI和USB摄像头的连接以及udp推流
  • 网站IP被劫持?三步自建防护盾
  • 【基础知识】springboot+vue 基础框架搭建(更新中)
  • 数据库入门:从零开始构建你的第一个数据库
  • [Oracle] DECODE()函数
  • oracle 11G安装大概率遇到问题
  • Java面试宝典:JVM的垃圾收集算法
  • c++之 栈浅析
  • 如何提高云手机中数据信息的安全性?
  • 数字取证:可以恢复手机上被覆盖的数据吗?
  • PostgreSQL 数据库 设置90天密码过期时间的完整方案
  • 数据结构(五):顺序循环队列与哈希表
  • 僵尸进程问题排查
  • 安卓10.0系统修改定制化____修改系统固件 实现刷写完成 开机默认关闭桌面搜索框