基础知识学习-1.异步 FIFO 的设计(1)理论
1.Random Access Memory:ram 特点:随时存取,速度快
RAM 存储器可以进一步分为静态随机存取存储器(SRAM)和动态随机存取存储器(DRAM)两大类。SRAM 具有快速访问的优点,但生产成本较为昂贵,一个典型的应用是缓存。而 DRAM 由于具有较低的单位容量价格,所以被大量的采用作为系统的主存。
2.读写指针
异步FIFO由于读写时钟独立,使用RAM作为缓冲区,引入读指针和写指针,写指针指向下一个要被写入的地址,读指针指向下一次要被读出的地址。同步FIFO是wptr和rptr在同一时钟上升沿变化,异步FIFO则是各自独立的时钟上升沿变化

3.判断标志
FULL、EMPTY。在缓冲区满时,产生 FULL 信号,以阻塞数据继续向 FIFO 写入。而在缓冲区空时,产生 EMPTY 信号,以阻塞数据继续从 FIFO 中读出。外部的读写控制器将从标志信号 FULL、EMPTY 决定继续写入或读出。
初始想法空信号:读指针追上写指针,满信号:写指针追上读指针。具体如何设计是FIFO设计的重点
异步FIFO有两种解决方案
1). 采用握手协议来保证在采样过程中指针不变,但是这样的做法效率很低
2). 通过读时钟来采样写指针,写时钟来采样读指针,然后通过采样的写指针和读指针判断是否为 EMPTY,采样的读指针和写指针判断是否为 FULL


4.深入考虑-亚稳态问题
写时钟采用读时钟(或者反过来)会涉及到亚稳态问题,造成标志位判断错误的问题,用下图的一个采样电路举例-类比读写时钟的相互采样

两个是D触发器,图中的a_clk和b_clk是异步的时钟,b_clk在采样data_a时,如果data_a数据发生改变,set-hold时间内触发器的输入信号发生变化,输出结果是不可知,就是亚稳态(metastability),下图中b_clk上升沿采样时data_a处在s-h time中,会导致得到的data_b产生亚稳态。

亚稳态发生的概率用参数MTBF(mean time between failures平均无故障时间间隔)来衡量,MTBF表示触发器采样失败的时间间隔,

其中分辨率指metastability resolution time,公式就不具体展开讲解,解决方法是采用双锁存器(b_clk多加一个d触发器),MTBF*MTBF


双锁存器的问题:引入两级锁存器的同时带来了对输入信号的一级延时,再如 a_clk 的频率比 b_clk 的频率高,将可能出现因为 dat 变化太快,而使 b_clk 无法采样的问题。即在信号从快时钟域向慢时钟域过渡的时候,如果信号变化太快,慢时钟将可能无法对该信号进行正确的采样,所以在使用双锁存器法的时候,应该使原始信号保持足够长的时间,以便另一个时钟域的锁存器可以正确地对其进行采样。之后再分析这个问题