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

一、建立时间和保持时间

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

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

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

跨时钟域信号处理-Clock Domain Crossing(CDC)_第1张图片

二、亚稳态

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

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

跨时钟域信号处理-Clock Domain Crossing(CDC)_第2张图片

三、CDC

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

跨时钟域信号处理-Clock Domain Crossing(CDC)_第3张图片

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

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

跨时钟域信号处理-Clock Domain Crossing(CDC)_第4张图片

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

四、CDC影响之解决办法

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

跨时钟域信号处理-Clock Domain Crossing(CDC)_第5张图片

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

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

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

跨时钟域信号处理-Clock Domain Crossing(CDC)_第6张图片

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

跨时钟域信号处理-Clock Domain Crossing(CDC)_第7张图片

 三、多路扇出:

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

跨时钟域信号处理-Clock Domain Crossing(CDC)_第8张图片

 四、异步复位:

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

跨时钟域信号处理-Clock Domain Crossing(CDC)_第9张图片

 

 

你可能感兴趣的:(UVM实战学习笔记,fpga开发,单片机,c语言)