目录
异步FIFO的verilog代码实现(包含将满和将空逻辑)
代码参考来源:
Clifford E. Cummings, "Simulation and Synthesis Techniques for Asynchronous FIFO Design".
https://www.cnblogs.com/IClearner/p/6579754.html
异步FIFO简介
使用场景:在有大量的数据需要进行跨时钟域传输, 并且对数据传输速度要求比较高的场合 。
一个异步 FIFO 一般由如下部分组成:
1. Memory, 作为数据的存储器;
2. 写逻辑部分,主要负责产生写信号和地址;
3. 读逻辑部分,主要负责产生读信号和地址;
4. 地址比较部分,主要负责产生 FIFO 空、满的标志。
跟普通的FIFO相比,异步FIFO实际上多了读写地址的跨时钟域同步的逻辑,以及两个时钟域中读写信号的比较逻辑。
异步FIFO关键技术1 -- 读写信号跨时钟域同步
首先,FIFO的关键是需要判断读空和写满,而这两个信号的产生依赖读地址和写地址。在异步FIFO中,读和写是分在两个时钟域中的,在写时钟域,需要得到读地址的信息进而判断是否写满(写指针是否追上读指针),同理,在读时钟域,也需要写地址的信息。我们知道跨时钟域的单比特数据一般可以用双寄存器法进行同步,但读写地址通常都是多比特的信号,此时如何进行同步呢?
当然,多比特的同步肯定可以通过增加握手信号来解决