实例十 — FIFO

本文介绍了如何使用Robei EDA工具和Verilog设计一个8位8深度的FIFO,详细阐述了设计流程,包括模型设计、测试模块设计和约束模块设计。在VIVADO平台上进行后端设计和板级验证,通过模拟读写操作和状态判断,验证了FIFO的正确性。设计中重点讨论了FIFO的工作原理、满空信号的判断和双口RAM的选择。
摘要由CSDN通过智能技术生成

5.1 实例十 FIFO(基于Robei的EDA工具实验案例)

5.1.1. 本章导读

FIFO(First in First out)使用在需要产生数据接口的部分,用来存储、缓冲在两个异步时钟之间的数据传输。在异步电路中,由于时钟之间周期和相位完全独立,因此数据丢失概率不为零。使用FIFO可以在两个不同时钟域系统之间快速而方便地传输实时数据。这次的设计我们就来学习一下如何用Robei和Verilog设计一个8位8深度的FIFO,并通过VIVADO设计平台进行板级验证。
设计准备
FIFO的原理框图如下图5-1-1所示:
在这里插入图片描述
通过分析,我们看到图5-1-1中有一个具有独立的读端口和独立的写端口的 RAM存储器。这样选择是为了分析方便。如果是一个单端口的存储器,还应包含一个仲裁器,保证同一时刻只能进行一项操作(读或写),我们选择双口RAM(无需真正的双口RAM,因为我们只是希望有一个简单的相互独立的读写端口)是因为这些实例非常接近实际情况。读、写端口拥有两个计数器(wr_ptr、rd_ptr)产生的互相独立的读、写地址。计数器的值在读写使能信号来临时传递给“读指针”(rd)和“写指针”(wr)。写指针指向下一个将要写入的位置,读指针指向下一个将要读取的位置。每次写操作使写指针加1,读操作使读指针加1。左右两侧的模块为读写指针与满空信号产生模块。这两个模块的任务是给 FIFO提供“空”(empty)和“满”(full)信号。这些信号告诉外部电路FIFO已经达到了临界条件:如果出现“满”信号,那么FIFO为写操作的临界状态,如果出现“空”信号,则FIFO为读操作的临界状态。写操作的临界状态表示FIFO已经没有空间来存储更多的数据,读操作的临界表示FIFO没有更多的数据可以读出。读写指针与满空信号产生模块还可告诉FIFO中“满”或“空”位置的数值。这是由指针的算术运算来完成了。实际的“满”或“空”位置计算并不是为FIFO自身提供的。它是作为一个报告机构给外部电路用的。但是,“满”和“空”信号在FIFO中却扮演着非常重要的角色,它为了能实现读与写操作各自的独立运行而阻塞性的管理数据的存取。这种阻塞性管理的重要性不是将数据复写(或重读),而是指针位置可以控制整个FIFO,并且使读、写操作改变着指针数值。如果我们不阻止指针在临界状态下改变状态,FIFO还能都一边“吃”着数据一边“产生”数据,这简直是不可能的。
从功能上看,FIFO的工作原理如下所述:复位时,读、写指针均为0。这是FIFO的空状态,空标志(empty)为高电平,此时满标志(full)为低电平。当FIFO出现空标志(empty)时,不允许读操作,只能允许写操作。写操作写入到位置0,并使写指针加1。此时,空标志(empty)变为低电平。假设没有发生读操作且随后的一段时间中FIFO只有写操作,一定时间后,写指针的值等于7。这就意味着在存储器中,要写入数据的最后一个位置就是下一个位置。在这种情况下,写操作将写指针变为0,并将输出满标志(full)。
为了更好地判断空状态和满状态,这里设置一个四位的计数器(fifo_cnt),代表存储器(mem)中写入但还未读取的数据个数。当FIFO未进行任何读写操作时,计数器保持不变;当进行写操作时,计数器加1;当进行读操作时,计数器减1;当同时进行写操作和读操作时,计数器值保持不变。这样就可以根据计数器中的值来判断状态的空与满,即:当计时器fifo_cnt=0时,表示存储器处于空状态,输出空标志(empty);当计数器fifo_cnt=8时,表示存储器处于满状态,输出满标志(full)。
设计要求
读写指针都指向一个内存的初始位置,每进行一次读写操作,相应的指针就递增一次,指向下一个内存位置。当指针移动到了内存的最后一个位置时,它又重新跳回初始位置。在FIFO非满或非空的情况下,这个过程将随着读写控制信号的变化一直进行下去。如果FIFO处于空的状态,下一个读动作将会导致向下溢(underflow),一个无效的数据被读入;同样,对于一个满了的FIFO,进行写动作将会导致向上溢出(overflow),一个有用的数据被新写入的数据覆盖。这两种情况都属于误动作,因此需要设置满和空两个信号,对满信号置位表示FIFO处于满状态,对满信号复位表示FIFO非满,还有空间可以写入数据;对空信号置位表示FIFO处于空状态,对空信号复位表示FIFO非空,还有有效的数据可以读出。设计波形如图5-1-2所示。
在这里插入图片描述

5.1.2. 设计流程

1. 模型设计

(1)新建一个模型。点击软件工具栏上面的在这里插入图片描述图标,或者点击“File”下拉菜单中的“New”,会有一个对话框弹出来(如图5-1-3所示)。在弹出的对话框中设置你所设计的模型。
在这里插入图片描述
参数填写完成后点击“OK”按钮,Robei就会生成一个新的模块,名字就是 fifo,如图 5-1-4 所示:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值