IC基础——CDC(单bit)

文章介绍了亚稳态现象及其在多时钟设计中的影响,详细阐述了CDC(ClockDomainCrossing)的基本概念,包括快到慢和慢到快的跨时钟域处理策略,如信号展宽和握手协议。同时,讨论了时序分析的重要性,提出了防止漏采的解决方案,如增加拍数或使用同步FIFO。文章强调了实际应用中需深入理解背后原理并灵活应对。
摘要由CSDN通过智能技术生成

0、亚稳态概念

亚稳态:亚稳态是设计正常运行中,在某些时间点(在某段时间内),信号不能呈现稳定的0或1状态。对于多时钟设计,亚稳态是无法避免的,只能减小发生概率。
在这里插入图片描述

1、CDC(clock domain crossing)基本概念

CDC就是为了减少亚稳态传播,所实现的方式,具体的可以联想下异步FIFO的设计,那是多bit数据实现跨时钟域的传播;而这里主要讲下单bit的跨时钟域的处理。

2、两种典型的跨时钟域处理

a、快到慢
存在的问题:信号可能会被漏采,两方面原因,一个是在采之前,信号又变化了;另一个是信号太靠近采样时钟的边沿了。
具体的:快时钟的信号脉冲宽度小于慢速时钟一个周期,此时信号不会被慢速时钟采到,而如果信号脉冲的边沿太靠近慢速时钟的变沿,就有可能采到不确定的信号,导致亚稳态。
通常的处理方式:展宽信号,让采样时钟能够采样到。
展宽信号的方式有两种:

1、在发送时钟域对发送信号打拍,然后相或来实现展宽到能被采样时钟采到;
2、通过握手的方式

这里以握手为例说明:
先看示意图:
在这里插入图片描述
简单说下上图握手的意思:
本质上是为了拓展发送时钟域的信号,问题是在发送时钟域什么时候将发送信号拉低;上图的设计是加上了一个握手信号;
具体的:发送时钟域采样发送信号,然后同步到采样时钟,采样时钟再将同步信号同步回发送时钟域,发送时钟通过采样反馈回的信号,来拉低发送信号。设计代码如下:

 //展宽clka时钟域的输入信号a
always @ (posedge clka or negedge rst_n)
begin
    if (rst_n == 1'b0)
        signal_a <= 1'b0 ;
    else if (pulse_a_in)
        signal_a <= 1'b1 ;
    else if (signal_b1_a2)
        signal_a <= 1'b0 ;
    else ;
end
//展宽的信号同步到clkb时钟域
always @ (posedge clkb or negedge rst_n)
begin
    if (rst_n == 1'b0) begin
        signal_b <= 1'b0;
        signal_b_b1 <= 1'b0 ;
        signal_b_b2 <= 1'b0 ;
    end
    else begin
        signal_b <= signal_a;
        signal_b_b1 <= signal_b ;
        signal_b_b2 <= signal_b_b1 ;
        //{signal_b_b2,signal_b_b1,signal_b} <= {signal_b_b1,signal_b,signal_a};
    end
end
//反馈信号,同步到clka时钟域
always @ (posedge clka or negedge rst_n)
begin
    if (rst_n == 1'b0) begin
        signal_b1_a1 <= 1'b0 ;
        signal_b1_a2 <= 1'b0 ;
    end
    else begin
        signal_b1_a1 <=  signal_b_b1 ;
        signal_b1_a2 <=  signal_b1_a1 ;
    end
end

b、慢到快
这里有两种情况:

1、两个时钟频率相差很大,一般快是慢的两倍以上,直接两级同步即可(这比较简单,不展现代码了)
2、如果两个时钟频率相差不大,可能会采到亚稳态的值,就需要采用先展宽再握手的方式,保证数据的稳定,与上面快时钟信号被慢时钟信号采是一样的方法。

在这里插入图片描述

3、时序分析

快到慢
在这里插入图片描述
在一开始写tb的时候,发送信号是随机的,后来通过波形图一看,这不出现漏采的情况了吗(实际的设计中也有可能出现这种情况)。为了解决这个问题,有两种方式:

1、反馈信号是打两拍所得,改成打3拍,然后通过边沿检测获得一个脉冲信号,通过这个脉冲信号来控制发送信号的发送;
2、1法的设计思路低效,中间需要等待较长时间去发送下一笔,可以通过添加一个同步fifo来实现outstanding发送;

其实上述两种方法都存在一些问题,具体问题还是要具体分析:面积功耗性能的考虑等等。
慢到快
在这里插入图片描述
这里展现的是慢到快的跨时钟域传输,两个时钟域的频率相差较大,所以直接打拍即可,如果相差不大,就需要通过握手的方式来实现信号正确的传输。

4、总结

上述的CDC(单bit)的基本概念基本就这些,但在实际应用的还需多练习,深入理解背后的原因,而不是拘泥于这样的设计。

参考资料

[1]Clock Domain Crossing (CDC) Design & Verification Techniques Using SystemVerilog

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值