怎么设计一个Glitch Free的时钟切换电路呢?

电子说

1.3w人已加入

描述

输入sel,clka,clkb,sel为1输出clka,sel为0输出clkb。

一、两个时钟源是倍数的关系

CLK

module Change_Clk_Source(
  input clk1,
  input clk0,
  input select,
  input rst_n,
  output outclk
);
  reg out1;
  reg out0;

  always @(negedge clk1 or negedge rst_n)begin
    if(rst_n == 1'b0)
      out1 <= 0;
    else
      out1 <= ~out0 & select;
  end

  always @(negedge clk0 or negedge rst_n)begin
    if(rst_n == 1'b0)
      out0 <= 0;
    else
      out0 <= ~select & ~out1;
  end

   assign outclk = (out1 & clk1) | (out0 & clk0);


endmodule

二、两个时钟源为异步时钟的关系

CLK

module Change_Clk_Source(
  input clk1,
  input clk0,
  input select,
  input rst_n,
  output outclk
);
  reg out_r1;
  reg out1;
  reg out_r0;
  reg out0;


  always @(posedge clk1 or negedge rst_n)begin
    if(rst_n == 1'b0)
      out_r1 <= 0;
    else 
      out_r1 <= ~out0 & select;
  end


  always @(negedge clk1 or negedge rst_n)begin
    if(rst_n == 1'b0)
      out1 <= 0;
    else 
      out1 <= out_r1;
  end


  always @(posedge clk0 or negedge rst_n)begin
    if(rst_n == 1'b0)
      out_r0 <= 0;
    else 
      out_r0 <= ~select & ~out1;
  end

  always @(negedge clk0 or negedge rst_n)begin
    if(rst_n == 1'b0)
      out0 <= 0;
    else 
      out0 <= out_r0;
  end

  assign outclk = (out1 & clk1) | (out0 & clk0);




endmodule
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分