这篇文章学习所谓的门控时钟。
门控时钟有两种:与门控时钟和或门控时钟。
1.与门控时钟
门控时钟结构=低电平选通的锁存器+一个与门。保证了经过与门的使能信号不会在时钟高电平的时候翻转,从原理上消除了由于使能信号的不确定性导致门控时钟产生毛刺的情况。
与门控时钟在使能无效的时候保持低电平,使能后输出时钟。与门控时钟一般用于后续寄存器的上升沿采样。
2.或门控时钟
或门控时钟=高电平选通的锁存器+反相门+或门。
或门控的输出在不使能时输出高电平,一般用于后续寄存器的下降沿采样。
3.能够产生门控时钟的代码。
//可以产生门控时钟 见下图compile with clock gating insertion
always @ (posedge clk or negedge rstn)begin
if(!rstn)
q<=1'b0;
else begin
if (en)
q<=d;
end
end
//无法产生门控时钟,会产生MUX电路,MUX的一个输入是d,另一个输入是0。下见图typical compile
always @ (posedge clk or negedge rstn)begin
if(!rstn)
q<=1'b0;
else begin
if (en)
q<=d;
else
q<=0
end
end
//见下图typical compile
//此代码也无法产生门控时钟,也会产生MUX,MUX的一个输入是d,另一个输入是q。该代码尤其要注意。
always @ (posedge clk or negedge rstn)begin
if(!rstn)
q<=1'b0;
else begin
if (en)
q<=d;
else
q<=q;//保持原值也是需要时钟去触发的,和第一种代码有所区别。
end
end
4.其他一些思考。
①一般而言,与门控时钟用于后续的上升沿采样电路,而或门控时钟一般用于下降沿采样。
我个人觉得这样的说法不绝对,与门控时钟也可以用它的下降沿,同理,或门控时钟也可以用上升沿,有下降沿就有上升沿,王侯将相宁有种乎?为什么只能用其中一种边沿呢?只能说工程实践的时候是惯例。
②同①,门控时钟能够消除毛刺的说法也是不绝对的,源时钟信号一边用于锁存器的选通,一边又接到了与门(或门),他们之间可能是有skew的,同时锁存器的D到Q也是有延迟的,如果考虑到这些那么是仍可能出现毛刺的。该问题的解决方法是将门控时钟实现成为基本单元,尽量减少skew和锁存器输出延迟。
③关于门控时钟的效益。
如下图,第一种代码带门控时钟,对应compile with clock gating insertion,第2、3种代码对应typical compiile。区别在于少了mux,多了锁存器和与门。对于单个信号而言,门控时钟并不会降面积和功耗,一个mux之于一个锁存器+一个与门,就面积和功耗而言孰轻孰重尚未可知。
只有当信号数量变多时,由于mux电路的大量减少,面积和功耗才会降下来。
参考文献:
(44条消息) 门控时钟方法学_Starry丶的博客-CSDN博客_门控时钟的实现
(44条消息) 低功耗设计之门控时钟_yang)的博客-CSDN博客_门控时钟设计
(44条消息) 【Verilog基础】一文搞懂 时钟门控(Clock-Gating) 电路_ReCclay的博客-CSDN博客_verilog 门控时钟