跨时钟域信号处理-Clock Domain Crossing(CDC)

本文探讨了建立时间和保持时间在数字电路中的重要性,以及它们如何影响亚稳态的产生。亚稳态可能导致信号失真和电路不稳定。解决跨时钟域数据传输问题的方法包括使用额外的D触发器、握手协议和FIFO。此外,针对多路扇出和异步复位,提出了同步后再扇出和满足复位时间要求的策略。
摘要由CSDN通过智能技术生成

一、建立时间和保持时间

如图所示为建立时间和保持时间的定义。

建立时间:在有效时钟到来之前,输入端的输入信号必须保持稳定,输入信号从不稳定到稳定状态需要的时间称为建立时间。试想,如果有效时间到来的时候意味着需要开始获取输入信号,这个时候如果输入信号还没有稳定,那么获取的输入信息将会在0-1之间随机,进而导致信号异常,并传递到后续电路造成亚稳态

保持时间:在时钟到来以后,后级电路会获取输入信号,需要输入信号保持一定的时间,后级模块开始获取信号。试想如果保持时间足够短,或者低于要求的保持时间,那么后级模块获取的输入信息也是残缺的。

二、亚稳态

亚稳态产生的过程:如图为亚稳态产生的具体过程。输入信号D在clk到来之前并没有保持稳定,任然在信号的上升沿,这就会导致在clk上升沿到来的时候后级模块从D众读取信号是并没有获取到稳定的数据。而是获取到了0-1之间的随机数(我们并不确定获取的具体数值)并且将这个随机值传递下去,进而造成后级模块的震荡,信号失真。

静态时序分析工具:如果设计采用的时同一种时序,那么我们可以使用静态时序分析工具,对电路进行分析,从而确保电路不会产生亚稳态。但是随着科技的发展,越来越多的电路需要使用不同的时钟,因此需要采取措施避免亚稳态给电路带来的负面影响。

三、CDC

对于F2而言,输入Q1属于异步信号(CLK1),所以这就属于跨时钟域传输

跨时钟域带来的问题(罪魁祸首基本上亚稳态):

  1. 亚稳态
  2. 数据收敛(一组同步的信号经过一个时钟后如何确保这组数据的正确性)如下图由于X--->X1和Y---->Y1之间存在电路延迟造成在clkB取值时,Y2取到0从而在后续电路中造成Y的值错误

  1. 多路扇出(同一个信号经过多跨时钟域传递以后确保多个信号正确)
  2. 数据丢失
  3. 异步复位(系统是否都完成复位)

四、CDC影响之解决办法

1. 亚稳态:单一信号增加两级D触发器:如图所示,在AC之间增加一个两级D触发器F2,当A进入B的时候如果发生亚稳态,会获取到0-1之间的任意随机数,进入C以后由于C本身的稳定的,因此信号B经过C以后会再次稳定,输出的信号C可以得到稳定,但是C的值无法确定。也就是说,F3因为满足建立时间和保持时间之间的相互关系,可以使得B信号不在震荡,但是因为B信号已经失真,所以经过C以后的信号还是失真,只是不在震荡。因此这种方法的本质只是避免对后续电路带来震荡。

2. 数据收敛-握手协议/FIFO

格雷码校验:使用格雷码(相邻格雷码只有一位不同)对X,Y进行校验,校验结束以后再进行传输,在传输结束以后先检查格雷码是否一致,格雷码一致说明数据传输正确,这种方法适用连续变化的信号

握手协议:如图数据发送端通过发送信号REQ经两级D触发器给到数据接收端,数据接收端接收数据,接收数据,数据接收结束以后数据接收端通过两级D触发器发送ACK信号给到数据发送端,完成一次握手,从而确保数据传输

使用FIFO:将数据先存入FIFO,数据接收端需要的时候直接从fifo读取从而避免CDC,但是在数据存入和读取的时候需要判断FIFO是否空满。因此需要借助读写指针判断FIFO的空满状态。所以数据传输的CDC转变成了读写指针的CDC。但是读写指针是连续变化的,可以借助格雷码实现读写指针正确性的判读

 三、多路扇出:

同步之后再进行多路扇出,确保扇出的信号正确

 四、异步复位:

复位信号需要满足回复时间和移除时间(本质就是建立时间和保持时间)

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值