【S003】glitch free Verilog实现

本文介绍了一种使用Verilog实现的无毛刺时钟切换电路设计方法。该设计通过控制两个选择信号sel_sclk1和sel_sclk2,确保在不同时钟源间进行平滑切换,避免了因信号竞争而产生的毛刺问题。此外,还讨论了如何通过增加额外的寄存器来解决跨时钟域问题导致的亚稳态现象。

//我们需要做的就是让sel_sclk1和sel_slck2信号不能同时有效。
module test(
     input   wire    sclk1  ,
     input   wire    sclk2  ,
     input   wire    rst_n  ,
     input   wire    sel    ,
    
     output  wire    clk_out     
);
 
reg sel_sclk1;
reg sel_sclk2;

//复位之后依据sel状态选择一个信号
always@(posedge sclk1 or negedge rst_n)//注意上升沿或者下降沿
     if(rst_n ==1'b0)
         sel_sclk1 <=1'b0;
     else     
         sel_sclk1 <= sel &~sel_sclk2;//等待sel_sclk2无效再选择sel_sclk1

always@(posedge sclk2 or negedge rst_n)
     if(rst_n ==1'b0)
         sel_sclk2 <=1'b0;
     else     
         sel_sclk2 <=~sel &~sel_sclk1;//等待sel_sclk1无效再选择sel_sclk2

assign clk_out =(sel_sclk1 & sclk1)|(sel_sclk2 & sclk2);

endmodule

我们可以观察到sel_sclk1信号在sclk1时钟域产生,需要取反后再和sel信号相与到sclk2时钟域,这样会出现跨时钟域问题产生亚稳态现象,所以我们可以在sclk2时钟域多加一级寄存器通过打拍的方式处理亚稳态问题(sel_sclk2信号同理)。

参考

时钟切换逻辑 glitch free_时钟信号的翻转和逻辑cell-CSDN博客

求职攻略| 异步电路中的时钟无毛刺切换(Glitch-Free)

glitch-free的两个时钟切换电路_两路时钟选择-CSDN博客

无毛刺的时钟切换电路(Glitch-free clock switching circuit)设计(Verilog)_verilog无毛刺时钟切换电路-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值