数字IC设计中的异步FIFO简介_第1页
数字IC设计中的异步FIFO简介_第2页
数字IC设计中的异步FIFO简介_第3页
数字IC设计中的异步FIFO简介_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页数字IC设计中的异步FIFO简介

“在数字(IC设计)中异步FIFO常用来解决多比特数据跨(时钟)域的数据传输与同步问题,就像一个蓄水池,用于调节上下游水量”

01

异步FIFO简介

在大规模(ASIC)设计中,多时钟系统通常是不可避免的,这会导致不同时钟域中的数据传输问题。其中一个好的解决方案是使用异步FIFO来缓冲不同时钟域中的数据,并改善它们之间的传输效率。数据从一个时钟域写入FIFO缓冲区,并从另一个时钟域中读取,该缓冲区彼此异步。异步FIFO允许数据从一个时钟域安全地传输到另一个时钟域。

如果没有采取适当的预防措施,那么我们最终可能会遇到这样的情况:写入FIFO尚未完成,我们正在尝试读取它,反之亦然。这种情况通常会导致数据丢失和不稳定性问题。

为了避免这种情况,读取和写入是通过同步器完成的。同步器确保读写指针计算一致,并且FIFO中的数据不会被意外覆盖或读取两次。但是,对于跨时钟域,我们需要确保FIFO满和空条件都考虑到跨时钟周期。换句话说,需要添加悲观的满空条件。

异步FIFO的操作:

写入操作:

此操作涉及将数据写入或存储到FIFO中,直到它出现不再写入的任何标志条件。

要执行写入操作,输入端给出要写入的数据,并且要将写使能设置为高电平,然后在写入时钟的下一个上升沿写入数据。

读取操作:

当我们必须从FIFO存储器中获取数据时,执行读取操作,直到它通知没有更多的数据要从存储器中读取。

要执行读取操作,我们需要将读取使能设置为高电平,然后在读取时钟的下一个上升沿,输出读取的数据

控制操作的指针:

写指针:此指针控制FIFO的写入操作。它指向要写入下一个数据的内存位置。

读取指针:读取操作由读取指针控制。它指向要从中读取下一个数据的位置。

FIFO中的标志:

异步FIFO为我们提供了以下两个标志,用于确定状态并中断FIFO的操作。

空标志:此标志可用于避免在FIFO已为空时出现读取操作请求无效的情况。满标志:此标志可用于避免在FIFO已满时出现无效的写入操作请求的情况。将二进制计数值从一个时钟域同步到另一个时钟域将出现亚稳态问题,因为n位计数器的每个位都可以同时更改(例如,二进制数7->8的值为0111->1000,并且所有位都已更改)。而使用格雷码相邻数据只有一位变化,因此在两个时钟域间同步多个位不会产生问题。所以需要一个二进制到gray码的转换电路,将地址值转换为相应的gray码,然后将该gray码同步到另一个时钟域进行对比,作为空满状态的(检测)。二进制转为格雷码代码如下:

使用gray码解决了一个问题,但同时也带来另一个问题,即使用格雷码如何判断空满状态。判断读空状态时:需要在读时钟域的格雷码gray_code和被同步到读时钟域的写指针每一位完全相同;判断写满时:需要写时钟域的格雷码和被同步到写时钟域的读指针高两位不相同,其余各位完全相同;

由于读指针是属于读时钟域的,写指针是属于写时钟域的,而异步FIFO的读写时钟域不同,是异步的,要是将读时钟域的读指针与写时钟域的写指针不做任何处理直接比较肯定是错误的,因此我们需要进行同步处理以后再进行比较,常用的方法采用两级(寄存器)进行同步(简单点就是在另外一个时钟域打2拍)。

综上,编写异步FIFO主要有以下几点:

将二进制地址转换为格雷码;将写时钟域转换后格雷码的写地址同步到读时钟域,进行读空判断;将读时钟域转换后格雷码的读地址同步到写时钟域,进行写满判断;02

(Verilog)代码

modulefifo_asyn(c#)(pa(ram)eterdata_width=16,parameterdata_depth=256,parameter(ad)dr_width=8)(input(rs)t,inputwr_clk,inputwr_en,input[data_width-1:0]din,inputrd_clk,inputrd_en,outputregvalid,outputreg[data_width-1:0]dout,outputempty,outputfull);reg[addr_width:0]wr_addr_ptr;//地址指针,比地址多一位,MSB用于检测在同一圈reg[addr_width:0]rd_addr_ptr;wire[addr_width-1:0]wr_addr;//RAM地址wire[addr_width-1:0]rd_addr;wire[addr_width:0]wr_addr_gray;//地址指针对应的格雷码reg[addr_width:0]wr_addr_gray_d1;reg[addr_width:0]wr_addr_gray_d2;wire[addr_width:0]rd_addr_gray;reg[addr_width:0]rd_addr_gray_d1;reg[addr_width:0]rd_addr_gray_d2;reg[data_width-1:0]fifo_ram[data_depth-1:0];//数据写入fifogenvari;genera(te)f(or)(i=0;i>1)^wr_addr_ptr;assignrd_addr_gray=(rd_addr_ptr>>1)^rd_addr_ptr;assignfull=(wr_addr_gray=={~

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论