数字IC设计学习笔记
门控电路
1 作用
2 门控时钟的结构
3 门控时钟的选择
4 门控时钟电路的RTL
1 作用
- 时钟树由大量的缓冲器和反相器组成,时钟信号为设计中翻转率最高的信号,时钟树的功耗可能高达整个设计功耗40%。加入门控时钟电路后,减少了时钟树的翻转,节省翻转功耗。同时,由于减少了寄存器时钟引脚的翻转行为,寄存器的内部功耗也减少了。可以非常有效地降低设计的功耗,一般情况下能够节省20%~60%的功耗。
2 门控时钟的结构
(1). 与门门控
1). 原理图
2). 波形图
3). 缺点
- EN=0,正常;EN=1,产生毛刺
- 原因:EN是不受控的,随时可能跳变,输出易产生毛刺
- 解决方法:(EN在CLK的高低电平间保持不变)
1>. 触发器: EN用CLK寄存,输出以CLK为基准
2>. 锁存器:EN用锁存器所存的输出,以CLK为基准
(2). 锁存器门控
1). 原理图
2). 波形图
3). 缺点
-
1>. 锁存器与与门相隔远:到达与门的时钟与到达锁存器的时钟延迟差别大毛刺‘
2>. 锁存器与与门相隔太近:可能不满足锁存器的建立时间锁存器亚稳态 -
原因:
1>. A点的时钟早于B点:skew>delay毛刺
解决办法:控制clock skew,clock skew < latch delay(锁存器CLK-Q的延时);
2>. B点时钟早于A点:|skew|>EN setup
(D-Q) 毛刺
解决办法:控制clock skew, clock skew < EN setup(D-Q的延时)
锁存器门控更适用于ASIC,原因:1. FPGA内部没有锁存器资源,需要利用其他的组合逻辑外加寄存器实现,不经济;2. 锁存器本身的特性无法进行时序分析,不易排查错误。
(3). 寄存器门控
1). 原理图
2). 波形图
3). 缺点
- A早于B:无毛刺
B早于A:若时间差很多,约半个周期:有毛刺;(DFF输出会delay一个周期,故很难发生)
若DFF1不满足setup 亚稳态
适用于FPGA,只有FPGA工程需要大量的降低工号是,才有必要引进门控时钟。
3 门控时钟的选择
- 结论:SoC内使用最多的是锁存器门控电路。
原因:
1>. 实际SOC芯片中,门控时钟会由工艺厂商制作成一个标准单元锁存器结构的线延时问题不存在,且可控,不变。可以通过挑选锁存器和增加延时,满足锁存器的建立时间。
2>. 面积问题:DFF=2* D-Latch
注:若在FPGA,寄存器+setup约束更加稳妥
4 门控时钟电路的RTL
1). 综合工具可自动插入门控时钟;
- 注:
1>. 插入CG,不再需要MUX,若D为多比特面积减小;
2>. 插入CG,D为单比特,节省的功耗比较小,面积可能比MUX大;若D为32bit,节省的功耗比较多
3>. DC默认D的最小位宽是3.若>3,插入CG就会有收益
4>. DC命令:set_clock_gating_style -minimum_bitwidth 3
2). 代码: (锁存器门控电路)
always@(posedge clk_s or negedge rst_n)
if(!rst_n)
dout <= 1'b0;
else if(en)
dout <= din;
always@(posedge clk_s or negedge rst_n)
if(!rst_n)
dout <= 1'b0;
else if(en)
dout <= din;
else
dout <= 1'b0;
-
第一个RTL代码能够在综合时自动插入CG电路;
-
第二个代码RTL不能综合成插入CG的电路;
原因:en=0时:dout也会一直变化,无真正的数据有效只是信号,门口空始终的意义在于,当数据无效时,保存寄存器的值,所以无法综合出CG电路。
注:在不用时将数据设置为0并不能减少功耗,保持不变才能减少变化,降低功耗。 -
FPGA代码实现:(寄存器门控电路)
module clockgating_r0(
input clk_s,
input rst_n,
input en,
output wire clk_en
);
reg en1;
always@(posedge clk_s or negedge rst_n)
if(!rst_n)
en1 <= 1'b0;
else
en1 <= en;
assign clk_en = en1 & clk_s;
endmodule
学习内容源于: https://mp.weixin.qq.com/s/sFpjTx1kVhxzhdWFfbioaQ
【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~