0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Clock Gating的特点、原理和初步实现

冬至子 来源:艾思后端实现 作者:艾思后端设计 2023-07-17 16:50 次阅读

当下这社会,没有几万个Clock Gating,出门都不好意思和别人打招呼!

现在的深亚纳米工艺的设计中,低功耗已经是一个日渐总要的主题了,尤其是移动市场蓬勃发展起来之后,功耗的要求越来越严格,据传,在高级的手机系统开发的过程中,系统架构的设计,已经精确到每一个服务模块的毫安时(mAH)的级别,所以如果你的芯片功耗控制不下来,很有可能会被手机生产厂家踢出局。

在低功耗的世界里,我们有很多方法可做,譬如提高设计工艺(工艺节点越高,功耗就越小)UPF策略,代码优化等等。其中的clock gating方法就是一个解决内部功耗的有效办法

Clock gating从原理上讲,就是在FF的clock 的输入通路上,加入额外的逻辑,来使得FF在不发生变化的情况下,clock端没有反转,如果不采取这个策略,那么FF的clock pin是长时间翻转的,在D/Q都不翻生变化的时候,带来了额外功耗消耗,采用clock gating就可以有效境地这种损耗

从用途上讲,一般将Clock gating分为如下两类:
1:RTL实例化的clock gating cell
在很多的前端设计中,我们都会认为的实例化primitive clock gating cell,这里是按照前端的设计要求来的,一般这样的GC都是接近于clock 的源头,譬如一个模块的输入clock,我们使用一个实例化的GC来作为这个clock 的控制端,在不需要的时候,可以直接使用寄存器把他关断,从而达到节省模块级power的目的

image.png

这种GC结构,在结构上后端是不用干预的,但是由于这种GC的fanout 都很大,在某种情况下可能会引起比较悲观的setup violation。这个我们会在后边仔细描述
2:综合工具推断出(inferred )clock gating cell
这种推断出的CG是基于综合器对RTL的理解,首先,我们的设计需要遵循一定得大妈风格(coding style),这是工具分析的基础,我们来看下面这段代码

image.png

蓝色箭头所指是clock的edge检测,这里是一个if 语句的开始,而后如橙色箭头所指,在clock edge的这个function里边,使用EN来做判别,如果EN为1的时候,产生赋值操作,这是一个标准的带同步enable的寄存器语法。
综合器会按照约定的规则来解析rtl code,然后产生对应的网表。按照通常的综合结果(compile_ultra),会得到下面这个结果

image.png

模块输入端的clock port会直接连接到所有的FF clock pin 上边,通常的器件库里边,没有带EN端的DFF,这是一种简化设计,因为所有的FF EN pin,都可以和D pin做组合逻辑,从而达到控制输出的结果。从土里可以看到,这里的EN也是被拉到了FF’D pin前级的组合逻辑的输入端,从而达到控制FF输出的结果。

这个时候,是没有clock gating的设计的,工具严格遵守RTL的设计产生了这段网表结构。

如果在综合的时候,打开inferred clock gating 选项(compile_ultra –gate_clock),这个时候会得到下面的这个结构。

image.png

这个时候的网编结构发生了变化,在紧跟clock port的后面,多了一个CG,EN的port 从之前的链接到各个FF 的D pin,到现在只连接到了clock gating cell的en pin上,通过控制FF的clk pin,来达到仅在EN使能的时候翻转clock来刷新FF的输出,从而达到省电。

由于在没有使用CG之前,由于FF需要不停地刷新,DC为了保障FF的输出在EN端非使能的时候保持当前状态,所以一定有一条从Q到D的回路来保证FF的输出保持不变,类似下图

image.png

FF’D pin 前面的是一个四输入与或门,在EN为0的时候,FF会把Q的值反复刷新,尽管输出Q不改变,但是短路功耗是少不了的。
在使用了gate clock 以后,FF的结构变成了

image.png

可以看到,这里的FF的D输入端,变得更为简单了,以为所有前后级都被挂载到了同样的CG下面,只有当CG有输出clock的时候,这些FF才进行工作,工具就不用创建那些组合逻辑来考虑EN不使能的情况了。
就相同设计的面积比较,采用inferred CG策略的结果还可以节省面积

Area with CG: 8.0997
Area without CG: 8.3790

在一个3M gate-count的完整设计里边,可以看到,当打开gate_clock选项的时候,会增加大约7k的CG cell,时序逻辑大概增加了6%的面积,但是整个设计的std-cell的面积(组合加时序)反而降低了4%,从这方面看,综合器的这个功能对绝对面积和功耗都是有贡献的

讨论完CG的好处后,我们再来看一下Clock gating 的类别:

先看一下这个表格。通常上来讲,CG分为两类,一种是带latch的,另外一种是不带latch的,由组合逻辑构成。

image.png

这里的模型规则如下

Posedge:
o Latch based:clk负沿敏感的latch
o None-latch:非或门结构的CG
Negedge:
o Latch based:clk正沿敏感的latch CG
o None-latch:与门结构CG
Pre-control:
o Latch based : latch的EN输入前插入一个或门,从而带入TE的管控
o None-latch: 在组合逻辑的EN输入侧插入一个或门,从而带入TE的管控
Post-control:
o Latch based : latch的output输出后插入一个或门,从而带入TE的管控
o None-latch: 不支持
Observe:
o 再有pre/post control的设计中监控与门中非TS管控测的信号

借用新思的电路图来给大家详细的示例(侵删)

image.png

由于clock是敏感信号 ,一般推荐使用latch-based gating CG,这要可以有效地过滤EN上的毛刺。

有了上边的知识,那么工具是如何识别和插入CG的的呢?

在综合的时候,需要在你的综合环境里边定义工具自动插入时可已使用的CG cell类型,然后唤起compile_ultra命令即可完成CG插入:

set_clock_gating_style -pos {integrated:CG_CELL_NAME} -control_point before -num_stages 4
compile_ultra –gate_clock

用户可以在compile结束后,使用report_clock_gating命令来查看数据库里边的CG情况。
这个报告很有意思,他可以打印出数据库里所有被CG控制的FF的情况,同时也会列出来没有被CG控制的FF的情况,并且会生成一些比率报告,有兴趣的同学可以仔细了解一下。

此外,这里边的CG_CELL_NAME,这个cell是一个真实存在在你的std-cell库里的实际CG,并且这个lib_cell必须要有一个特殊的属性:

image.png

DC只有看到这个属性的时候,才会认为这是一个真实可信的CG。而后按照他后边属性说明来进行inferred CG insertion,后面的属性无外乎我们前面表格里边罗列的那些属性,具体名词如下:

image.png

当然,DC也支持一些组合逻辑的CG的创建,如果你使用如下命令,DC会插入相应的none-lath结构的CG

set_clock_gating_style -pos {buf nand inv}

在同步设计的架构下,不推荐使用这样的gating 结构,由于这是拿两三个苏合逻辑器件搭乘的,后期的timing closure是很难做的,推荐使用library里边latch-based的CG。

上边用了一定的篇幅讲述了一下CG的特点、原理和初步实现。但是这还没有结束,应为还有layout的实现要考虑

Clock_gating作为clock tree的一部分,在做layout的时候,有更多的因素需要考量
首先,所有的latch based CG都有一组setup/hold timing arc,就是clk –> EN的timing check
其次,在CTS的时候,clock-gating被当作了一个none-stop pin而非一个stop pin如下图示例:

image.png

工具会balance 后面四个被gating 驱动的FF(stop pin)之间的skew,但是CG是它们的clock 的driver,不难想象,CG EN的latency(T_latch)一定小于CG fanout FF的clock latency(T_FF),这是一个永远不能改变的事实。在某些情况下会带来CG setup violaoiton,如下图:

image.png

如果有一条正面这样的data path存在,那么launch clk (FF) 一定是晚于capture clk (CG),在高频和复杂datapath的情况下,这样的timing是很难修复的
所以要在CTS之前解决或者简化这个问题,

解决这个问题的关键就是,让CG clock latency(T_latch)和fanout FF clk latency(T_FF) 尽可能的足够小。

要让前后两级的clock latency的差值足够小,其中有一个方法就是让他们的摆放足够近,在综合结束后,通过report_clock_gating的report可以看到所有CG和他的fanout的列表,这个时候,我们通过第一版的CTS结果,可以评估出那些FF-CG的timing是有困难的,这些FF以及他们的CG使用relative placement的方法,让工具在place 的阶段就把他们摆放的足够近,从而在物理距离上来解决这个CG 的setup 问题。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动器
    +关注

    关注

    52

    文章

    8208

    浏览量

    146225
  • 寄存器
    +关注

    关注

    31

    文章

    5334

    浏览量

    120208
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59752
  • CTS
    CTS
    +关注

    关注

    0

    文章

    35

    浏览量

    14101
收藏 人收藏

    评论

    相关推荐

    DFT设计实战案例解读

    test_mode接TE的缺点是capture mode下无法测试到functional clock-gating logic,就是functional clock-gating logic完全被
    的头像 发表于 01-16 13:49 7734次阅读
    DFT设计实战案例解读

    RTL实例化的clock gating cell浅见

    现在的深亚纳米工艺的设计中,低功耗已经是一个日渐总要的主题了,尤其是移动市场蓬勃发展起来之后,功耗的要求越来越严格,据传,在高级的手机系统开发的过程中,系统架构的设计,已经精确到每一个服务模块的毫安时(mAH)的级别,所以如果你的芯片功耗控制不下来,很有可能会被手机生产厂家踢出局。
    的头像 发表于 07-14 10:14 2060次阅读
    RTL实例化的<b class='flag-5'>clock</b> <b class='flag-5'>gating</b> cell浅见

    clock-gating的综合实现

    在ASIC设计中,项目会期望设计将代码写成clk-gating风格,以便于DC综合时将寄存器综合成clk-gating结构,其目的是为了降低翻转功耗。
    的头像 发表于 09-04 15:55 1866次阅读
    <b class='flag-5'>clock-gating</b>的综合<b class='flag-5'>实现</b>

    浅析clock gating模块电路结构

    ICG(integrated latch clock gate)就是一个gating时钟的模块,通过使能信号能够关闭时钟。
    的头像 发表于 09-11 12:24 2350次阅读
    浅析<b class='flag-5'>clock</b> <b class='flag-5'>gating</b>模块电路结构

    FPGA的时钟门控是好还是坏?

    queries regarding clock gating. from what i've read/learnt - clock gating can be used for l
    发表于 02-21 10:21

    天启物联网星座实现初步组网运行

    国内首个物联网星座初步实现组网运行。
    的头像 发表于 08-20 09:11 3100次阅读

    通常有两种不同的时钟门控实现技术

    constrained,mobile端不能够充更多的电就只能尽可能地降低功耗了(无法开源只能节流呀),也因为时钟门控是降低芯片动态功耗最简单,最常用的方法之一。 时钟门控技术分类:通常,有两种不同的时钟门控实现技术。 combinational clock
    的头像 发表于 06-13 16:48 2646次阅读

    低功耗设计基础:Clock Gating

    大多数低功耗设计手法在严格意义上说并不是由后端控制的,Clock Gating也不例外。
    的头像 发表于 06-27 15:47 1799次阅读
    低功耗设计基础:<b class='flag-5'>Clock</b> <b class='flag-5'>Gating</b>

    AND GATE的clock gating check简析

    一个cell的一个输入为clock信号,另一个输入为gating信号,并且输出作为clock使用,这样的cell为gating cell。
    的头像 发表于 06-29 15:28 3137次阅读
    AND GATE的<b class='flag-5'>clock</b> <b class='flag-5'>gating</b> check简析

    低功耗之门控时钟设计

    clock gating和power gating是降低芯片功耗的常用手段,相比power gating设计,clock
    的头像 发表于 06-29 17:23 3899次阅读
    低功耗之门控时钟设计

    ASIC的clock gating在FPGA里面实现是什么结果呢?

    首先,ASIC芯片的clock gating绝对不能采用下面结构,原因是会产生时钟毛刺
    发表于 08-25 09:53 1030次阅读
    ASIC的<b class='flag-5'>clock</b> <b class='flag-5'>gating</b>在FPGA里面<b class='flag-5'>实现</b>是什么结果呢?

    时钟子系统中clock驱动实例

    都要早期,因此clock驱动是在内核中进行实现。 在内核的 drivers/clk 目录下,可以看到各个芯片厂商对各自芯片clock驱动的实现: 下面以一个简单的时钟树,举例说明一个
    的头像 发表于 09-27 14:39 794次阅读
    时钟子系统中<b class='flag-5'>clock</b>驱动实例

    什么是Clock Gating技术?Clock Gating在SoC设计中的重要性

    随着集成电路技术的不断发展,芯片中的晶体管数量呈现出爆炸性增长。为了提高性能,降低功耗,SoC设计中采用了各种优化技术
    的头像 发表于 10-07 11:39 2849次阅读

    IC设计:clock-gating综合实现方案

    当CK为0时,ECK 恒定为0, q值为E:如果E为1,则q为1,如果E为0,则q为0。 当CK为1时,ECK 恒定为q(n),即对应的上一次CK为0时,锁存的E值。 因此最终的效果就是,只要E配置成了0,那么ECK会在CK的下降沿跳变成0,随后只要E保持为0,那么ECK一直为0。
    发表于 10-16 09:43 1630次阅读
    IC设计:<b class='flag-5'>clock-gating</b>综合<b class='flag-5'>实现</b>方案

    SOC设计中Clock Gating的基本原理与应用讲解

    SOC(System on Chip,片上系统)设计中,时钟信号的控制对于整个系统的性能和功耗至关重要。本文将带您了解SOC设计中的一种时钟控制技术——Clock Gating,通过Verilog代码实例的讲解,让您对其有更深入的认识。
    的头像 发表于 04-28 09:12 2133次阅读