跨时钟域(clka,clkb)

1.跨时钟会发生竞争和冒险
竞争:逻辑电路中,不同路线汇聚到一个一点时有先后时序,称为逻辑竞争
冒险:竞争产生的电平不稳定的现象称为冒险

跨时钟域的主要问题是阻止竞争冒险的发生,杜绝亚稳态在电路当中的传播

2.单比特数据解决竞争和冒险
2.1 cdc时将数据打两拍,第一拍输出的结果可能有亚稳态,但是到了第二拍处理之后输出结果会杜绝亚稳态的传播。但是这样但比特的数据可能会有丢失。

慢时钟到快时钟:打两拍
快时钟到慢时钟:可以在快时钟中将慢时钟展宽到快时钟的1.5倍及以上的长度,然后再跨时钟运输,打两拍(可以加一个握手协议)
跨时钟域(clka,clkb)_第1张图片

3.多比特数据跨时钟域
3.1 使用格雷码
格雷码计数时每次只变换一个数字,这样跨时钟的时候不会出现意想不到的数字,比如2’b01 -> 2’b10, 如果传输过程中出现问题,可能出现2’b11这种不也该出现的结果,使用格雷码,可以将用2’b11来表示2’b10,这样传输过去的结果要么时2’b01,要么是2’b11,不会出现不该出现的结果 。
异步fifo会使用到格雷码来传输cnt

3.2 异步fifo
跨时钟域(clka,clkb)_第2张图片

异步fifo,深度为8,只需要3bit就能表示,但是由于需要验证是读空还是写满,那么需要再加一位来做标志位,就是类似作用就是是计数写了或者读了几个来回,所以需要4bit来表示。
读空(读clk):当读写地址和标志位完全相等的时候,为读空;
写满(写clk):当读写地址完全相等,但是标志位不相等的时候,为写满(写地址把读地址套圈了)
(通常,格雷码的转换方法是比较标准的,比如二进制转格雷码的公式是G = B ^ (B >> 1))

fifo深度一般默认为2^n

你可能感兴趣的:(cdc)