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

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

3天内不再提示

RTL实例化的clock gating cell浅见

sanyue7758 来源:艾思后端实现 2023-07-14 10:14 次阅读

现在的深亚纳米工艺的设计中,低功耗已经是一个日渐总要的主题了,尤其是移动市场蓬勃发展起来之后,功耗的要求越来越严格,据传,在高级的手机系统开发的过程中,系统架构的设计,已经精确到每一个服务模块的毫安时(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的目的

a72f8570-2195-11ee-962d-dac502259ad0.png

这种GC结构,在结构上后端是不用干预的,但是由于这种GC的fanout 都很大,在某种情况下可能会引起比较悲观的setup violation。这个我们会在后边仔细描述

2:综合工具推断出(inferred )clock gating cell

这种推断出的CG是基于综合器对RTL的理解,首先,我们的设计需要遵循一定得大妈风格(coding style),这是工具分析的基础,我们来看下面这段代码

a73e6180-2195-11ee-962d-dac502259ad0.jpg

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

a7520438-2195-11ee-962d-dac502259ad0.jpg

模块输入端的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),这个时候会得到下面的这个结构。

a76574be-2195-11ee-962d-dac502259ad0.jpg

这个时候的网编结构发生了变化,在紧跟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的输出保持不变,类似下图

a7786614-2195-11ee-962d-dac502259ad0.png

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

在使用了gate clock 以后,FF的结构变成了

a79b57a0-2195-11ee-962d-dac502259ad0.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的,由组合逻辑构成。

a7b28e34-2195-11ee-962d-dac502259ad0.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管控测的信号


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

a7befc46-2195-11ee-962d-dac502259ad0.jpg

由于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必须要有一个特殊的属性:

a7d59f14-2195-11ee-962d-dac502259ad0.png


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

a7e36f72-2195-11ee-962d-dac502259ad0.jpg

当然,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如下图示例:

a7f8f194-2195-11ee-962d-dac502259ad0.jpg


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

a80899a0-2195-11ee-962d-dac502259ad0.jpg


如果有一条正面这样的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 问题。




审核编辑:刘清

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

    关注

    112

    文章

    16185

    浏览量

    177342
  • 寄存器
    +关注

    关注

    31

    文章

    5308

    浏览量

    119981
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59693
  • UPF
    UPF
    +关注

    关注

    0

    文章

    49

    浏览量

    13491
  • dff
    dff
    +关注

    关注

    0

    文章

    26

    浏览量

    3397

原文标题:Clock Gating之浅见

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux clock子系统及驱动实例

    在Linux驱动中,操作时钟只需要简单调用内核提供的通用接口即可,clock驱动通常是由芯片厂商开发的,在Linux启动时clock驱动就已经初始完成。
    发表于 05-31 16:10 757次阅读
    Linux <b class='flag-5'>clock</b>子系统及驱动<b class='flag-5'>实例</b>

    clock-gating的综合实现

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

    浅析clock gating模块电路结构

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

    什么是In-cell及On-cell

    In-cell及On-cell的概念、原理、难点及技术实现。
    发表于 02-06 11:18 1.4w次阅读

    in-cell panel_In-Cell触摸屏原理

    in-cell 将触摸面板功能与液晶面板一体。包括In-cell方法和On-cell方法。In-cell是指将触摸面板功能嵌入到液晶像素中
    发表于 09-06 17:13 4359次阅读
    in-<b class='flag-5'>cell</b> panel_In-<b class='flag-5'>Cell</b>触摸屏原理

    分析clock tree的小工具——CCOPT Clock Tree Debugger(一)

    Collapse可以将Sink,ICG,Buffer等cell不展开显示,只以一个简单数字和虚线表示连接关系,下图蓝圈表示该buffer驱动了100个clock sink
    的头像 发表于 05-19 16:20 1.1w次阅读
    分析<b class='flag-5'>clock</b> tree的小工具——CCOPT <b class='flag-5'>Clock</b> Tree Debugger(一)

    低功耗设计之multi-bit cell技术简介

    所谓multi-bit cell,可以理解成把多个完全相同的cell合并在一个cell里,如下图所示,集成2bit的multi-bit cellc
    的头像 发表于 02-12 10:52 4697次阅读

    低功耗设计基础:Clock Gating

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

    AND GATE的clock gating check简析

    一个cell的一个输入为clock信号,另一个输入为gating信号,并且输出作为clock使用,这样的cell
    的头像 发表于 06-29 15:28 3036次阅读
    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 3746次阅读
    低功耗之门控时钟设计

    clock gate时序分析概念介绍

    今天我们要介绍的时序分析概念是clock gate。 clock gate cell是用data signal控制clock信号的cell
    的头像 发表于 07-03 15:06 2908次阅读
    <b class='flag-5'>clock</b> gate时序分析概念介绍

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

    当下这社会,没有几万个Clock Gating,出门都不好意思和别人打招呼!
    的头像 发表于 07-17 16:50 4194次阅读
    <b class='flag-5'>Clock</b> <b class='flag-5'>Gating</b>的特点、原理和初步实现

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

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

    时钟子系统中clock驱动实例

    clock驱动实例 clock驱动在时钟子系统中属于provider,provider是时钟的提供者,即具体的clock驱动。 clock
    的头像 发表于 09-27 14:39 753次阅读
    时钟子系统中<b class='flag-5'>clock</b>驱动<b class='flag-5'>实例</b>

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

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