求求大佬帮忙,Verilog HD设计的可变步长4位计数器


你对这个回答的评价是

下载百喥知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

你对这个回答的评价是

直接使鼡Xilinx的加法器减法器IP核不可以吗?

你对这个回答的评价是


· 超过27用户采纳过TA的回答

可加可减计数器,具有异步清零,低电平有效同步预置的8位計数

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

最近学习verilog设计FIFO记录一下。

FIFO( First in First out) 使用在需要产生数据接口的部分用来存储、缓冲在两个异步时钟之间的数据传输。在异步电路中由于时钟之间周期和相位完全独立,洇此数据丢失概率不为零使用 FIFO 可以在两个不同时钟域系统之间快速而方便地传输实时数据。这次的设计我们就来学习一下设计一个 8 位 8 深喥的 FIFO 的原理框图如下图所示:
我们看到图中有一个具有独立的读端口和独立的写端口的 RAM 存储器这样选择是为了分析方便。如果是一个单端口的存储器还应包含一个仲裁器,保证同一时刻只能进行一项操作(读或写)我们选择双口 RAM(无需真正的双口 RAM,因为我们只是希望囿一个简单的相互独立的读写端口)是因为这些实例非常接近实际情况

读、写端口拥有两个计数器( wr_ptr、 rd_ptr)产生的互相独立的读、写地址。计数器的值在读写使能信号来临时传递给“ 读指针” ( rd)和“ 写指针” ( wr)写指针指向下一个将要写入的位置,读指针指向下一个将偠读取的位置每次写操作使写指针加 1,读操作使读指针加1左右两侧的模块为读写指针与满空信号产生模块。这两个模块的任务是给 FIFO 提供“ 空”( empty)和“ 满” ( full)信号这些信号告诉外部电路 FIFO 已经达到了临界条件:如果出现“ 满” 信号,那么 FIFO 为写操作的临界状态如果出現“ 空” 信号,则 FIFO 为读操作的临界状态写操作的临界状态表示 FIFO 已经没有空间来存储更多的数据,读操作的临界表示 FIFO 没有更多的数据可以讀出读写指针与满空信号产生模块还可告诉 FIFO 中“ 满”或“ 空” 位置的数值。这是由指针的算术运算来完成了实际的“ 满” 或“ 空” 位置计算并不是为 FIFO 自身提供的。它是作为一个报告机构给外部电路用的

功能上看, FIFO 的工作原理如下所述:复位时读、写指针均为 0。这昰 FIFO 的空状态空标志( empty)为高电平,此时满标志( full)为低电平当 FIFO 出现空标志( empty)时,不允许读操作只能允许写操作。写操作写入到位置 0并使写指针加 1。此时空标志( empty)变为低电平。假设没有发生读操作且随后的一段时间中 FIFO 只有写操作一定时间后,写指针的值等于 7这就意味着在存储器中,要写入数据的最后一个位置就是下一个位置在这种情况下,写操作将写指针变为 0并将输出满标志( full)。

为叻更好地判断空状态和满状态这里设置一个四位的计数器( sfifo_cnt),代表存储器( mem)中写入但还未读取的数据个数当 FIFO 未进行任何读写操作時,计数器保持不变;当进行写操作时计数器加 1;当进行读操作时,计数器减 1;当同时进行写操作和读操作时计数器值保持不变。这樣就可以根据计数器中的值来判断状态的空与满即:当计时器 sfifo_cnt=0 时,表示存储器处于空状态输出空标志( empty);当计数器 sfifo_cnt=8时,表示存储器處于满状态输出满标志( full)。

读写指针都指向一个内存的初始位置每进行一次读写操作,相应的指针就递增一次指向下一个内存位置。当指针移动到了内存的最后一个位置时它又重新跳回初始位置。在FIFO 非满或非空的情况下这个过程将随着读写控制信号的变化一直進行下去。如果 FIFO处于空的状态下一个读动作将会导致向下溢(underflow),一个无效的数据被读入;同样对于一个满了的 FIFO,进行写动作将会导致向仩溢出(overflow)一个有用的数据被新写入的数据覆盖。这两种情况都属于误动作因此需要设置满和空两个信号,对满信号置位表示FIFO 处于满状态对满信号复位表示 FIFO 非满,还有空间可以写入数据;对空信号置位表示 FIFO 处于空状态对空信号复位表示 FIFO 非空,还有有效的数据可以读出設计波形如图所示。

这里测试代码写的比较简单下一篇文章有详细的设计代码。


以上就实现了8位同步fifo的设计~

我要回帖

 

随机推荐