异步fifo笔记

来源:互联网 发布:淘宝十大名店 编辑:程序博客网 时间:2024/05/29 04:50

    异步fifo的设计难点主要有三个,一个是fifo的深度确定,一个是满空标识的判断,还有一个是fifo主要解决的跨时钟域问题。

    异步fifo内部一般采用读地址指针rd_ptr和写地址指针wr_ptr来判断满空,每写入fifo一个数据,wr_ptr加1,每从fifo中读出一个数据,rd_ptr加1。空状态是指fifo读指针指向了最后一个写入的地址,也就是说继续读取数据就会读取出没有写入的数据;满状态是指,如果继续像fifo中写入数据就会覆盖之前写入的数据。因此,fifo的空状态应该是wr_ptr = rd_ptr,而满状态则是wr_ptr第二次遇到rd_prt。因此为了判断满空通常将读/写指针增加一位。

                                                      assign empty  = wr_ptr == rd_ptr;

                                                      assign full = (wr_prt[MSB] == ~rd_prt[MSB]) && (wr_ptr[MSB-1:0] == rd_ptr[MSB-1:0]);

    对于异步fifo来说,由于读时钟和写时钟往往频率、相位不同,因此需要将读时钟域与写时钟域同步之后再进行比较。