一文详解门控时钟

门控时钟
当寄存器组的输出端没有驱动或没有变化时,可以关掉寄存器组的时钟来减少动态功耗,此谓门控时钟 (clock gating, cg) 技术。
最简单的一个带 en 端的 d 触发器的 verilog 逻辑描述如下:
always @(posedge clk) if (en) q <= d ;当不采用门控时钟结构时,dc 综合时会在触发器的输入端增加为带反馈端的多路选择器电路,如下图 (1) 所示。
当采用门控时钟结构时,dc 综合时仅会在触发器的时钟端增加一个时钟门控单元 (cg cell),而没有多路选择器结构,如下图 (2) 所示。
当多个寄存器组共用一个控制端时,结构上的优化尤为明显,如下图所示:
综上所述,门控时钟的优点有:
(1) 寄存器时钟端翻转率降低,动态功耗降低。
(2) 时钟树网络开关率降低,动态功耗降低。
(3) cg 扇出越大,结构上节省的选择器越多,硬件资源消耗越少。
(4) 相比于 pg (power gating),cg 结构相对简单,在综合时可自动插入。
产生门控时钟
产生门控时钟的条件为:
寄存器组共用同一个时钟;
寄存器组的控制端都是同步的;
寄存器组都是由同一个变量中推断而来的。
自动插入 cg
dc 综合时,使用以下命令与参数,设计中符合要求的寄存器便会被综合成带 cg 结构的触发器。
compile_ultra -gate_clkdc 综合时插入的 cg 又分为离散的 cg cell 与集成的 cg cell (icg)。离散的 cg cell 使用 latch 与基本逻辑门单元组合而成,集成的 cg cell 是工艺厂家提供的一个带有时钟门控功能的特殊单元。
dc 中插入离散的 cg 命令为:
# 使用带 latch 结构的离散的 cgset_clock_gating_style -sequential_cell latch# 离散的 cg 中指定具体的 latch cell lib_cellset_clock_gating_style -sequential_cell latch:lib_celldc 中插入没有 latch 结构的离散 cg 时,命令如下:
# 使用或门逻辑,生成上升沿工作的寄存器的时钟门控set_clock_gating_style -sequential_cell none -pos {or}因为使用与门生成 cg 时在时钟上升沿容易出现毛刺,使用或门生成 cg 时在时钟下降沿容易出现毛刺,所以参数 -pos 一般配合 {or} 使用,-neg 一般配合 {and} 使用。
# 使用与门逻辑,生成下升沿工作的寄存器的时钟门控set_clock_gating_style -sequential_cell none -neg {and}假如 -sequential_cell 与 -pos/-neg 选项同时使用,那么两个选项指定的 cg 电路结构应该保持一致,例如:
set_clock_gating_style -sequential_cell latch -neg {latch and}set_clock_gating_style -sequential_cell none -neg {and}dc 中插入 icg 时,命令如下:
# 使用集成的 cg cellset_clock_gating_style -negative_edge_logic {integrated}# 指定使用具体的集成 cg cell lib_cellset_clock_gating_style -negative_edge_logic {integrated:lib_cell}手动插入 cg
如果设置了自动产生时钟门控(-gate_clk),dc 综合时会对 rtl 设计中符合要求的寄存器进行时钟门控。但如果在 rtl 设计中,人为的编写时钟门控逻辑,dc 对此不会插入 cg ,如以下 verilog 描述。
assign gated_clk = clk & en ;always @(posedge gated_clk or negedge rstn) begin if (!rstn) data_out <= 8'b0 ; else data_out <= data_out + 1'b1;end人为编写的时钟门控逻辑中,时钟很容易出现毛刺,增加了设计的不稳定性。
为了消除人为编写时钟门控逻辑带来的隐患,dc 中需要使用以下命令对手动编写的 cg 进行识别与替换。
replace_clock_gates此命令实现的优化结果示意图如下:
禁止使用 cg
由于面积、时序等原因,需要禁止使用 lib 中的某一种 cg cell 时,可以使用以下命令:
#禁止使用指定的 cg cell:lib_cell,set_dont_use -power {lib_cell}其中,-power 选项不可或缺,否则 icg cell 的 dont_use 属性会被忽略。
门控时钟报告
可以使用以下命令,查看时钟门控单元的插入情况,以便确认是否需要对电路进行修改。
report_clock_gating但是如果 rtl 设计中,存在人为例化的 cg cell,命令 report_clock_gating 是不能识别的,需要设置以下命令:
set power_cg_auto_identify true

2220和2230系列的多通道可编程直流电源的介绍
SingleSON开启多制式网络自动化时代
CPU移植到32平台有必要吗?低成本32位CPU移植案例分享
华为打造分布式低时延核心交易网 加快金融机构数字化转型
行业趋势:物联网爆发的前夜,国产替代优势明显
一文详解门控时钟
pcb线路板发展新趋势“互联网技术+”逻辑思维
雷尼绍发布新软件,通过声音便可监控3D打印过程
称重传感器将会在智能化生产产业中拥有美好的发展前景
iDol无人机评测 基本上该有的都有了不该有的也有了
RFID读卡器助力工具管理,进一步提高工作效率
高通骁龙855芯片发布 5G大战即将上演
ZYNQ学习案例分析:PL流水灯设计方案
工业互联网的脉搏怎样才可以摸得准
数字绝缘电阻表的使用方法
单片机与MMC卡的接口
苹果发布iOS12.1.4更新 修复FaceTime群聊漏洞
PyTorch开源深度学习框架简介
分析一下串口发送与接收模块的设计代码
台积电与三星下重金,ASML 2019年EUV产量订单有望全满