天天看点

门控时钟:Clock fating1.门控时钟定义2.普通门控时钟电路3.改进的门控电路  4.生成寄存器门控的代码风格

1.门控时钟定义

门控时钟是低功耗设计的一种方法,在数据无效时将寄存器的时钟关闭,以此来降低动态功耗。主要应用于低功耗领域。具体实现为:在寄存器输入数据无效时,将寄存器输入时钟置0。 门控时钟在 ASIC 中使用较多,在 FPGA 使用较少,使用门控时钟会影响时序分析。

2.普通门控时钟电路

1.与门门控

CLK上升沿有效,en为高电平时,时钟开启,为了避免输出时钟不完整,en应该在低电平跳变,否则门控时钟输出质量变差,比如占空比不良或产生毛刺。

门控时钟:Clock fating1.门控时钟定义2.普通门控时钟电路3.改进的门控电路  4.生成寄存器门控的代码风格

2.或门门控

CLK下降沿有效,en为高时,时钟开启,为了避免输出时钟不完整,en应该在高电平跳变。 否则门控时钟输出质量变差,比如占空比不良或产生毛刺。

门控时钟:Clock fating1.门控时钟定义2.普通门控时钟电路3.改进的门控电路  4.生成寄存器门控的代码风格

 因此:

    对上升沿有效的 clk,使用与门进行门控,ena 使能信号跳变只能发生在时钟的低电平区;

    对下降沿有效的 clk,使用或门进行门控,ena 使能信号跳变只能发生在时钟的高电平区;

3.改进的门控电路 

 已知,要想提高输出时钟质量,en信号需要在特定的电平区才能发生跳变,如何控制en在特定条件下跳变?以下给出了锁存门控与寄存门控两种方法:

3.1锁存门控

对于与门门控,需要控制en在低电平跳变,因此使用锁存器对en进行锁存,clk取反作为锁存器使能端 。

门控时钟:Clock fating1.门控时钟定义2.普通门控时钟电路3.改进的门控电路  4.生成寄存器门控的代码风格

同理,对于或门门控,要使en跳变发生在clk的高电平区间,也要对en信号锁存,使用clk信号作为锁存器使能端。

门控时钟:Clock fating1.门控时钟定义2.普通门控时钟电路3.改进的门控电路  4.生成寄存器门控的代码风格

 尽管锁存门控可以消除毛刺,但是en信号是一个异步信号,en变化时可能会不满足锁存器的建立时间或保持时间,进而造成输出亚稳态。此外,如果锁存器和与门相隔很远,到达锁存器的时钟与到达与门的时钟有较大的延迟,则仍会出现毛刺。

3.2寄存门控

 将锁存门控的锁存器换成D触发器即可。

门控时钟:Clock fating1.门控时钟定义2.普通门控时钟电路3.改进的门控电路  4.生成寄存器门控的代码风格

 4.生成寄存器门控的代码风格

always@(posedge clk or negedge rst_n)begin
  if(!rst_n)
    data_out<=0;
  else if(data_vld)//该if是实现门控的主要代码
    data_out<=data_in;
end
           
门控时钟:Clock fating1.门控时钟定义2.普通门控时钟电路3.改进的门控电路  4.生成寄存器门控的代码风格

 注意:下面的代码不能实现门控时钟

always@(posedge clk or negedge rst_n)
if(!rst_n)
  data_out<=8’b0;
else if(data_vld)
   data_out<=data_in;
else
    data_out<=8’b0;//该else多余,因为寄存门控实现的功能是,当使能信号无效时,输出不变,而非置零。
           

继续阅读