当前位置:   article > 正文

IC基础——CDC(单bit)_集成电路中cdc是什么意思?

集成电路中cdc是什么意思?

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

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

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

在这里插入图片描述

3、时序分析

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

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

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

4、总结

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

参考资料

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号