verilog设计-CDC:单bit脉冲快时钟域到慢时钟域

本文详细介绍了单bit信号从快时钟域到慢时钟域时可能出现的数据丢失问题,着重讨论了脉冲同步器的工作原理、电路结构以及代码实现,强调了脉冲信号的正确同步和恢复过程中的关键条件。
摘要由CSDN通过智能技术生成

一、前言

当单bit信号由快时钟域传递给慢时钟域时,快时钟域的异步信号最小可为快时钟信号的一个时钟周期脉冲,快时钟域的单时钟周期脉冲长度小于慢时钟域的时钟周期,很有可能该脉冲信号在慢时钟域的两个时钟上升沿之间,导致该脉冲没有被慢时钟域采集到,从而导致信号数据丢失。

因此与单bit信号从慢时钟域到快时钟域直接打两拍不同,单bit信号从快时钟域到慢时钟域还需要特殊的处理。

二、脉冲同步器

脉冲同步器的原理为将快时钟域的脉冲拓展为电平信号,使得该电平的宽度大于慢时钟域的时钟周期,从而可以使用两级同步器进行同步,然后在同步后的时钟域进行脉冲恢复,从而完成将信号(尤其是脉冲信号)从快时钟域传递到慢时钟域。

脉冲同步器的电路结构如上图所示。

在快时钟域,待同步信号低电平,寄存器Q端输出保持不变,待同步信号高电平时,寄存器的输出取反。在慢时钟域,首先进行两级寄存器同步,接着通过双边沿检测电路将脉冲信号恢复出来。

该电路具有如下特点:

1.该电路只能传递脉冲信号(也还能传递一直是0的信号,只不过工程意义不大),对于输入信号一直是1,或是只有0到1阶跃信号,只有1到0的变化的信号均无法正确传输;

2.该电路将输入端的脉冲传输给慢时钟域,无论输入端的脉冲有多宽,都只能在慢时钟域恢复成一个时钟周期宽度的脉冲;

3.输入信号的脉冲之间间隔要大于1倍的慢时钟周期,否则连着的两个脉冲问题会在慢时钟域合并为一个脉宽为2个慢时钟周期的脉冲,导致丢失一个脉冲。

三、脉冲同步器代码

`timescale 1ns/1ns

module pulse_detect(
  input         clk_fast  , 
  input         clk_slow  ,   
  input         rst_n    ,
  input        data_in    ,

  output         dataout
);
    
    //第一部分,脉冲电平转换
    reg data_in_r;
    always@(posedge clk_fast or negedge rst_n)begin
        if(~rst_n) 
            data_in_r <= 1'b0;
        else if(data_in)
            data_in_r <= ~data_in_r;
        else
            data_in_r <= data_in_r;
    end
    
    //第二部分,两级同步
    reg data_in_rt0,data_in_rt1;
    always@(posedge clk_slow or negedge rst_n)begin
        if(~rst_n) begin
            data_in_rt0 <= 1'b0;
            data_in_rt1 <= 1'b0;
        end
        else begin
            data_in_rt0 <= data_in_r;
            data_in_rt1 <= data_in_rt0;
        end
    end
    
    //第三部分,电平转换脉冲(边沿检测)
    reg data_in_m;
     always@(posedge clk_slow or negedge rst_n)begin
        if(~rst_n)
            data_in_m <= 1'b0;
         else
             data_in_m <= data_in_rt1;
     end
    
    assign dataout = data_in_m ^ data_in_rt1;

endmodule

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
bit时钟时钟的处理涉及到信号采样和处理。在时钟中,信号变化,因此在时钟的采样过程中容易造成采样丢失或者直接采不到信号,特别是对时钟脉冲检测等情况。为了解决这个问题,可以使用特殊的处理方法来确保信号被正确采样到。 一种常见的处理方法是对脉冲进行展开。通常,这里会遵循“三时钟沿”的要求,也就是要持续3个时钟沿以上(包括上升沿和下降沿)。通过这种方式,可以保证信号在时钟中得到正确的采样。同时,还可以通过“握手”的方式来确保数据被准确地传输和采样到。 总结来说,bit时钟时钟的处理需要采取一些特殊的措施,如对脉冲进行展开,并遵循“三时钟沿”的要求来保证信号的正确采样。此外,通过使用“握手”的方式确保数据的准确传输也是很重要的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [verilog基础设计5-bit信号跨时钟处理(时钟时钟)](https://blog.csdn.net/weixin_45590981/article/details/118410622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值