saber 酱的抱枕

Fly me to the moon

08/22
2020
学习

关于异步异宽FIFO

目前没有找到更好的,所以就按这个同步+异步方案写了个。整理下思路吧:
假设一个700MHz的clk domain,向500MHz的clk domain传数据,700M那边data位宽5 bits,500M这边是7 bits。大时间尺度上讲这两边的传输速度是一样的。
按照这个思路,在700MHz那边数据过来后加一个同步fifo,转为700MHz 7 bits。虽然看起来这下传的数据变多了,但是由于700MHz 7 bits并不是每个周期都会有数据可读,可能会因为空而暂停。就比如第一个周期,同步fifo收到5 bits,但此时还不够7 bits读的,就只能再等一个周期。因此大时间尺度上还是一样的。
然后将这个700MHz 7 bits经过异步fifo转到500MHz 7 bits,这时候就好办了。
需要注意两点,第一是显而易见,两个fifo的深度可能需要适当深一些……
第二是,同步fifo判断空/满时,不能仅仅用地址相等了(不算MSB),而是要用>=。毕竟不是整数倍,指针不一定凑得到一起。因此就要既判断MSB,又判断剩余位数。读域直接两指针相等的取巧没法用了。

关于异步异宽FIFO