clock gate spec
clock gate distribution
clock gate 有两种实现技术, combinational clock gating 和 sequential clock gating,其中 combinational clock gating 是由dc工具在综合时自动添加的,而sequential clock gating 则是designer在设计的时候自己添加的逻辑。
combinational clock gating
常见的实现方式为通过 add 门来实现,如下图所示:
其中 comb clock control logic 为 时钟使能的控制逻辑,gated_clk 为进行时钟门控之后的时钟,如图所示:
RTL 实现为:
module clk_gate1 (
input clk_en,
input clk,
output gated_clk
);
assign gated_clk = clk & clk_en;
endmodule
src_en 为 1 时将时钟信号传递给FF,src_en为0时则关闭时钟信号。但是这种方法优缺点,在src_en拉高时容易产生毛刺,继而将毛刺传递给gated_clk,如图所示:
改进版的 clk_gate 将 clk_en 的输出端添加一个低电平敏感的锁存器,就可以解决毛刺问题,如下图所示:
RTL 实现为:
module clk_gate2 (
input clk,
input clk_en,
output gated_clk
);
reg latch_en;
always @ (clk or clk_en) begin
if (clk | clk_en) begin
if (~clk)
latch_en = clk_en;
end
end
assign gated_clk = clk & latch_en;
endmodule
使用这种方法不会将毛刺引入到下一级的时钟里,如图所示 :
Integrated Gated Clock Cells(ICG Cell)
要实现这种时钟门控可以实例化标准单元库中的两个Cell(Latch和AND门),秉着不重复造轮子的思想以及方便工具进行后续的时序分析更建议使用库中的ICG Cell并且由工具自动综合插入。
文章的部分概念转载于—知乎Goblin