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

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

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


门控结构

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


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



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


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



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



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



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



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



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



当然,刚刚所说的只是在触发器级的时钟门控,门控时钟可以处于整个时钟树的任何节点,越靠近根部的门控时钟对于降低功耗的作用越明显,原因显而易见,整个电路结构的功耗整体由三部分组成:组合逻辑产生的功耗+触发器产生的功耗+时钟树功耗;靠近根部的门控结构不仅降低了大量触发器的功耗,同时降低了区域的时钟树功耗(时钟树功耗几乎占到了芯片功耗的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端越共用一般意味着控制粒度越粗,时钟开启的频率越高触发器功耗也更高,这两个方面本身相互制约,有时需要靠经验来选择了。


相关文章
|
9月前
|
前端开发
【前端设计】寄存器与主功能电路为异步时钟时的功能影响探索
【前端设计】寄存器与主功能电路为异步时钟时的功能影响探索
|
1月前
|
应用服务中间件 开发工具 nginx
Mac M1/M2/M3 芯片环境配置以及常用软件安装-前端
Mac M1/M2/M3 芯片环境配置以及常用软件安装-前端 最近换了台新 Mac,所有的配置和软件就重新安装下,顺便写个文章。
108 1
|
10天前
|
前端开发 JavaScript Linux
若依修改之后,无法访问前端项目如何解决,只能访问后端的接口,我的接口8083,端不显示咋解决?在vue.config.js文件中的映射路径要跟后端匹配,到软件商店里找到Ngnix配置代理,设80不用加
若依修改之后,无法访问前端项目如何解决,只能访问后端的接口,我的接口8083,端不显示咋解决?在vue.config.js文件中的映射路径要跟后端匹配,到软件商店里找到Ngnix配置代理,设80不用加
|
13天前
|
JavaScript 前端开发
前端 JS 经典:统一 Vite 中图片转换逻辑
前端 JS 经典:统一 Vite 中图片转换逻辑
12 0
|
20天前
|
前端开发 JavaScript API
Python前端与后端的完美融合
【6月更文挑战第20天】文章探讨全栈开发趋势,指出Python因其简洁语法和丰富生态在全栈领域受青睐。讲解全栈概念,强调Python的易学性、广泛适用性和高开发效率。通过Flask和HTML/JS示例展示前后端融合,介绍数据库集成、前端扩展技术及自动化测试。强调安全性、性能优化和社区资源的重要性,鼓励开发者持续学习和实践,以应对全栈开发中的挑战。
14 0
|
28天前
|
算法 前端开发 安全
面试官:前端加密怎么做?这,这,这不是后端的活儿吗?
前端加密技术概述: 前端加密主要用来保护数据在传输过程中的安全,但因浏览器环境开放性,仅能提供有限的安全性,真正安全策略需结合服务器端加密和安全协议。
|
2月前
|
JavaScript 前端开发 NoSQL
构建基于Node.js的全栈应用:从前端到后端的完整指南
【5月更文挑战第24天】本文是关于使用Node.js构建全栈应用的指南,涵盖前端(React或Vue)、后端(Node.js + Express)和数据库(MongoDB)的选型与实现。文章介绍了项目结构、前端组件化开发、后端API接口编写、前后端联调及部署上线的注意事项,帮助读者掌握全栈开发流程。
|
2月前
|
存储 缓存 负载均衡
跨越界限:前端与后端的协同优化
在当今快节奏的技术环境下,前端与后端的协同优化成为了提升应用性能和用户体验的关键。本文探讨了如何通过前后端的紧密合作,实现更高效的数据传输、渲染优化以及系统性能提升,从而构建出更加流畅、响应迅速的应用程序。
|
2月前
|
小程序 前端开发 JavaScript
小程序全栈开发:前端与后端的完美结合
【4月更文挑战第12天】本文介绍了小程序全栈开发,涵盖前端和后端的关键点。前端使用WXML和WXSS进行页面结构和样式设计,JavaScript处理逻辑及组件使用;后端采用Node.js等语言处理业务逻辑、数据库设计和API接口开发。前端与后端通过数据交互实现结合,采用前后端分离模式,支持跨平台运行。调试测试后,提交微信审核并上线运营。掌握前端后端结合是小程序成功的关键。
|
9月前
|
前端开发 芯片
【芯片前端】延迟一拍出数的握手型ram结构的一次探索
【芯片前端】延迟一拍出数的握手型ram结构的一次探索