如何生成门控时钟?


ICG(integrate clock gating)时钟门控,类似于“受控开关”,通过一个使能信号开启或关闭时钟通路 达到控制后续时序电路工作或停止的目的。

ICG主要用于寄存器的时钟端,当寄存器的数据端的数据无效时,通过控制ICG将寄存器的时钟端赋0或1,从而寄存器的输出端保持不变,避免了信号的翻转,进而降低了动态功耗。

在芯片设计中,可以通过手动在代码中插入门控时钟对某个模块的时钟进行控制。对单个寄存器的时钟一般不通过手动插ICG的方式,而是通过EDA工具自行插入。在HDL设计中,合理的代码编码风格可以通过EDA工具(需要设置自动插入ICG命令set_clock_gating_style -sequential_cell latch)自行推导生成门控时钟模块。


推荐代码方式:

always @ (posedge CLK or negedge rst_n)begin  if(~rst_n)    Dout <= 3'h0;  else if(EN)    Dout <= Din;end

上述代码对应的电路图:


不推荐代码方式:

always @ (posedge CLK or negedge rst_n)begin  if(~rst_n)    Dout <= 3'h0;  else if(EN)    Dout <= Din;  else    Dout <= 3'h0;end

总结:

从上述2段代码中可以看到,在时序逻辑中当条件语句非成对出现(即当某一条件成立时保持不变),如第一段代码中else的缺失,也即是寄存器的输出在~EN条件时保持不变,可以生成ICG单元。反之,第2二段代码中的else不是保持而是输出一个值,因此当~EN条件时Dout还是会翻转的,因此不能产生ICG单元。

综上所述,在时序逻辑中,只有在某一条件下寄存器输出保持不变,EDA才有可能推断出使用ICG时钟门控单元。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章