DC里的门控时钟方案

1.业界两种门控时钟的做法
门控时钟用于低功耗设计。但是业界通常有两种做法,一种是在所有always块中加enable信号(如下所示);另一种是专门写个门控时钟模块,这个模块输出新的时钟信号,然后再驱动其他模块。

always@(posedge clk)
    if(enable)
       Q <= D;

很显然,如果所有always块都加上enable,那工作量实在是太大了。用第二种方法的话,模块设计人员不用在设计的时候考虑enable信号(写代码的时候,写着写着就很容易遗忘)。

2.DC对于第一种做法是可以自动识别的,在compile命令执行之前,需要用两个命令才能识别出来(如下)。

先来看下,不自动识别成门控时钟和识别成门控时钟这两种情况的电路结构有什么区别:

在这里插入图片描述

由上面的图可以看出,插入门控时钟单元后,原有电路中的MUX就不需要了,如果数据位宽是多bit的,插入clock_gating后,电路面积可能会减少;但如果数据是单bit信号,那么节省的功耗就比较少。

因此,工具可以根据位宽来决定是否增加门控时钟。如果位宽很小,那么插入的clock_gating面积比原来的MUX有可能大很多,但节省的功耗又很少,性价比不高;只有当位宽超过了一定的bit数后,才有必要插入clock_gating。这个门限在DC综合时可以由-minimum_bitwidth进行设置。

. 离散的CG单元
1.基于Latch的CG
set_clock_gating_style -sequential latch
2.不用Latch的CG
set_clock_gating_style -sequential none -pos "or". 集成的CG单元
//在.lib的文件中搜clock_gating_integrated_cell,会搜出很多cell,
//这些都是工艺库中提供的,根据不同驱动能力而分的多个门控时钟单元。
//cell里有面积,一般面积越大驱动能力越强,可以选择面积处于中间大小的cell,
//然后直接在RTL代码中替换即可。

set_clock_gating_style命令的配置:
-global:可以使门控时钟穿越层次结构。如果不用选项“-global",在每个模块里都会产生一个门控时钟单元;
-minimum_bitwidth:用于设置进行时钟门控的寄存器阵列的最小宽度。对于宽度小于该设置的寄存器阵列,不进行时钟门控;然而当电路由有公共使能时,会对电路进行分解进行集体门控;
-max_fanout:设置一个门控单元所驱动的最大负载数目,定义CG单元最大扇出的一个目的是减少CG后面的时钟延迟,门控时钟单元的扇出越大,它到达寄存器的延迟越长;此外,还有用来约束重新平衡;
-num_stages:用于设置一个多级门控的级数。在有些设计中,顶层的门控信号会分解成不同的子门控信号。在缺省情况下,仅对跟寄存器阵列相连的门控制信号生成门控逻辑;
-sequential_cell,该选项设置采用何种门控时钟风格:

-sequential_cell latch:基于锁存器的离散门控单元,该配置为默认值;
-sequential_cell none:采用不适用锁存器的门控单元;

-positive_edg_logic:简写为-positive或-pos,设置在RTL代码中用上升沿锁存的寄存器(也就是上升沿沿触发的寄存器)采用何种门控逻辑,如-pos “or”表示对于上升沿触发的寄存器,采用或门逻辑进行门控,-pos "integrated"表示对于上升沿触发的寄存器采用集成门控单元进行门控;
-negative_edg_logic:简写为-negative或-neg,设置在RTL代码中用下降沿锁存的寄存器(也就是下降沿触发的寄存器)采用何种门控逻辑;
-control_point和-control_signal:这两个开关和DFT有关,用于设置该门控单元在DFT时是否可控,DFT控制信号是scan-enable还是test-mode,以及DFT控制信号与EN信号的组合逻辑是放在门逻辑中的锁存器之前还是之后。通常,将DFT控制信号与EN信号进行或操作,这样在DFT时,可以控制该门控逻辑;
-observation_point:该开关和DFT有关,用于设置是否要插入观测逻辑,以便在DFT时能看到门控逻辑内部的信号;
-setup:设置建立时间约束;
-hold:设置保持时间约束;
-observation_logic_depth:设置观察电路中异或门的数目。

3.但是对于第二种做法,DC是不能自动识别的,需要我们手动做映射,也就是手动将RTL代码改成工艺库里的器件。
具体的做法可以这样:自己写一段代码,代码中加上enable信号,或者找一个具有类型code style的模块文件(我用的是公司DP550这个IP),然后DC综合的时候让它自动插入门控时钟,综合完之后start_gui打开图形化界面,打开自动插入的门控时钟的电路原理图,原理图上会显示门控时钟用到的器件名。打开综合后的网表.v文件,从中把自动生成的时钟门控模块代码拷贝出来就可以了。
在这里插入图片描述
4. 还有一种不分器件库的门级代码,是从一本书中看到的。

module SNPS_CLOCK_GATE_HIGH_cg1 (CLK, EN, ENCLK);
input CLK;
input EN;
output ENCLK;

wire n3;

ldf1b3 latch (
	.D(EN),
	.G(CLK),
	.Q(n3)
);

and2a3 main_latch (
	.A(n3),
	.B(CLK),
	.Y(ENCLK)
);

endmodule
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值