低功耗之门控时钟设计

clock gating和power gating是降低芯片功耗的常用手段,相比power gating设计,clock gating的设计和实现更为简单,多在微架构、rtl coding阶段即可充分考虑,在综合时(compile_ultra -gate_clock)即可自动mapping到clock gating结构上去。本文先讲解clock gating,icg的基本结构如下图所示:
门控时钟电路有效的降低了动态功耗,因为其减少了时钟树的翻转行为、减少了寄存器clock pin的翻转行为、减少了大量mux逻辑消耗的功耗,一般可以节省20%-60%的功耗,同时也节省了mux面积。
门控时钟单元分成两种,一种是带锁存器(latch based)的门控时钟单元,一种是不带有锁存器(latch free)的门控时钟单元。latch based的门控时钟单元能避免毛刺,因此更推荐使用。
门控时钟又分为离散的和集成的(icg)两种:
离散的cg单元
1)带latch的cg(默认)
set_clock_gating_style -sequential_cell latch
2)不带latch的cg
set_clock_gating_style -sequential_cell none集成的cg单元(icg)
set_clock_gating_style -negtive_edge_logic integrated通常,在执行命令compile_ultra -gate_clock前需要设置好clock gating的相关配置选项,具体选项如下:
set_clock_gating_style的options解析如下:
-sequential_cell none | latch1)-sequential_cell latch(默认)指带latch的cg(latch based style), 并可指定使用具体某个latch cell,比如:-sequential_cell latch:lib_cell。
2)-sequential_cell none指不带latch的cg(latch free style),比如:
与门做cg,时钟使能为1时钟穿透and,但posedge trigger存在毛刺;
或门做cg,时钟使能为0时钟穿透or,但negesge trigger存在毛刺;
-minimum_bitwidth minsize_value为了节省gating cell的数量,需达到一定寄存器数量的register bank才使用gating cell。
-setup setup_value 指定建立时间
-hold hold_value 指定保持时间
-positive_edge_logic {cell_list | integrated [active_low_enable]
[invert_gclk]}
{cell_list}用于指定“上升沿”触发使用的cg单元。需要注意的是-sequential_cell指定的是否有latch应该和cell_list的对应电路是否含有latch保持一致,如:
set_clock_gating_style -sequential_cell latch -positive_edge_logic { latch and }
set_clock_gating_style -sequential_cell none -positive_edge_logic { or }
{integrated}用于表明使用上升沿触发的icg单元。
如下图所示,该icg单元就是一个pre-conctrolled positive-edge triggered clock gating latch。
-negative_edge_logic {cell_list | integrated [active_low_enable]
[invert_gclk]}
{cell_list}用于指定下降沿”触发使用的cg单元。需要注意的是-sequential_cell指定的是否有latch应该和cell_list的对应电路是否含有latch保持一致,如:
set_clock_gating_style -sequential_cell **latch ** -negtive_edge_logic { latch or }
set_clock_gating_style -sequential_cell ** none ** -negtive_edge_logic { and }
如下图,-sequential_cell none指定latch-free模式,但是cell_list却指定了latch、and/or, 这种情况下,dc工具仍然会综合出latch-based clock-gating的电路。
{integrated}用于表明使用下降沿触发的icg单元。
如下图所示,该icg单元就是一个pre-conctrolled negative-edge triggered clock gating latch。
-control_point none | before | after
对于dft测试电路,为了满足电路可控,需要引入te信号来控制latch的使能端。before就是在latch之前插入或门,将te信号和时钟使能信号或起来然后连接到latch的d端。同理,after就是在latch之后插入或门,将te信号和latch的q端或起来然后连接到igg的and门。-num_stages num_stages_count
工具默认只使用一级门控时钟,而使用多级门控时钟可进一步节省面积、降低功耗。如下图,a信号被三个cg单元共享,那么将a信号做成第一级cg,b、c、d做成第二级cg。这样,增加了一个cg但减少了3个与门,同时节省了组合逻辑和第二级的cg的功耗。
set_clock_gating_style -num_stages 2
那么如何编写门控时钟的rtl代码风格呢?
第一种风格:
综合出来电路有32个mux2选择器:
我们换一种写法,dc工具就可将load_cond作为latch的使能,从而一个clock gating cell便取代了32个mux2,节省了大量面积的同时,还节省了32个寄存器的动态功耗,32mux2组合逻辑的功耗,也节省了时钟树上buffer的功耗。
那么如何保证icg中latch的时序呢?
除in2reg、reg2reg、reg2out、in2out类型路径外,我们会经常看到reg2cgate的setu/hold检查,即clock gate上enable信号要比clock信号提前到达一段时间setup和保持一段时间hold。
通常clock gate上的setup较难收敛,如下图
register ck端作为launch clock发起端,latch的ck端作为capture捕获端,它们之间天然会存在skew k,即clock tree必然不balance。latch的时序检查只有半个时钟周期;register q到latch en的combo逻辑延迟;解决办法:
一般将clock gate 单元放在寄存器附近以减小skew。也可以采用set_clock_gating_check,加大对clock gating时序约束。
对于clock gating cell,synthesis时就会插入,和cts没太大关系,一般只要确保clock timing check打开的就行。
另外,cts工具会对其做clone、declone操作。
icg cell clone: 同一个icg单元控制的寄存器较多或者分布不均匀时,就会导致icg时钟连线过长,可通过clone icg cell进行优化;icg cell de-clone: 同一个icg单元控制的寄存器较少,导致icg cell数量过多,可通过de-clone icg cell进行优化;

微雪电子QFN-24B-0.5-01 QFN24测试座介绍
Littelfuse扩展PolySwitch低Rho SMD系列,为现有产品组合增加了23个新等级
此车号称开一年亏5万! 众泰保时捷, 在二手车市场是否吃得开
嵌入式和互联网行业应该如何选择
如何实现Typec手机在充电的同时又能进行OTG数据传输方案
低功耗之门控时钟设计
网格化水环境监测——看凯米斯如何实现水质情况全面掌握
目前绝缘栅器件(IGBT)驱动技术现状
单片机实现EMC设计时的三点细节建议
克罗诺思劳动力管理解决方案优化门店运营效率
特斯拉锂离子电池研究新成果公布
交换机的端口数
对称三相电路中的高次谐波
艾迈斯半导体三刺激颜色传感器精确测量具有重大生物学意义的蓝光
剖析单片机各种复位电路原理
这场淋透成都的暴雨音乐节,艾比森占了C位!
Maxim推出具有2.3A GSM测试模式的Li+电池充电器
不支持毫米波就不是真5G?高通为什么这么怼华为
博通状告Netflix侵犯八项技术专利
国外新能源汽车进入量产阶段,宁德时代动力电池出口量大增