同步FIFO
特点:无地址信号,先入先出,适合做缓存(对比ram有一个地址线控制读或写)
- 连续写入写满后回到首单元:使能信号为1,未满,写地址就可以加1。
- 典型设计方法中 扩展一位用来区别:
写满(waddr-raddr=FIFO深度)(写地址-读地址=FIFO深度)
- 读空(waddr=raddr):(写地址=读地址)
- 比如:4深度加1位扩展成8深度,3bit中扩展的高1位用来判断空还是满,原来的低2bit用于RAM地址索引,100-000=4(写满)。1表示满,00是地址。
异步FIFO
特点:读写具有不同clk频率
空:读指针追上写指针。
满:写指针追上空指针。
问题1:读慢写快,避免过写。读指针通过两级触发器同步器到写时域中。
例子:比如实际读到了位置5,数据由于两级触发器会有延迟,写时钟域得到的是上一个周期传过去的值,读到了4。因为读数据频率慢,比如出现“相同时间读一个数写入两个数”的情况,这样就余出来一个读的位置保证不会过写入覆盖的问题产生。
问题2:读快写慢,避免过读。写指针通过两级触发器同步器到读时域中。
例子:同理
总结:都是慢时钟到快时钟域时增加两级触发器同步器,可以认为在快时钟域中获得更早期慢时钟域的值,这样避免过写过读。