博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Verilog实现同步FIFO
阅读量:4681 次
发布时间:2019-06-09

本文共 1916 字,大约阅读时间需要 6 分钟。

作为实现RS232串行通信的Verilog实现的预备工作,使用Verilog实现了同步FIFO的功能,其代码段如下

//this program segment realize the function of fifo IPcore//synchronous fifomodule fifo_ip #( parameter Addr_Width=8,Bit_Width=8)(clk,rst,wren,rden,full,empty,din,dout,counter);input clk,rst,wren,rden;input[Bit_Width-1:0] din;output full,empty;output reg[Bit_Width-1:0] dout;output reg[2:0] counter;reg[3:0] addr_wr,addr_rd;reg[Bit_Width-1:0] buf_mem[0:Addr_Width-1];parameter s0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;always @(posedge clk or negedge rst)beginif(!rst)    begin        dout<=0;        counter<=0;        addr_wr<=0;        addr_rd<=0;    endelse    begin        case({rden,wren})        s1:begin                if(!full)                    begin                        buf_mem[addr_wr]<=din;                        addr_wr<=addr_wr+1;                        counter<=counter+1;                    end            end        s2:begin                if(!empty)                    begin                        dout<=buf_mem[addr_rd];                        addr_rd<=addr_rd+1;                        counter<=counter-1;                    end            end        s3:begin                if(!empty)                    begin                        dout<=buf_mem[addr_rd];                        addr_rd<=addr_rd+1;                        if(full) counter<=counter-1;                    end                if(!full)                    begin                        buf_mem[addr_wr]<=din;                        addr_wr<=addr_wr+1;                        if(empty) counter<=counter+1;                    end            end        endcase    endendassign full=({~addr_wr[3],addr_wr[2:0]}==addr_rd[3:0])?1:0;assign empty=(addr_rd[3:0]==addr_wr[3:0])?1:0;endmodule

主要思想是通过两个输入对读写进行控制,创建一个数组向量,存储每次写入的值,采用先进先出(即FIFO)的思想,当写满时,发送满指令,读空时发送空指令。

此法与网络上能够搜到的其他方法大同小异,纯属记录coding的结果,还没有优化与重构,各位看官见谅!

以上,互相学习!!!

转载于:https://www.cnblogs.com/lightmonster/p/10198233.html

你可能感兴趣的文章
mysql sql语句大全
查看>>
oracle 权限
查看>>
移动前端开发之viewport的深入理解
查看>>
锁对象-条件对象-synchronized关键字
查看>>
金s办公软件web前端笔试题
查看>>
刷面经笔记2019.02.09
查看>>
Spring核心框架:(1)spring容器工厂
查看>>
windows server 2016 安装iis
查看>>
以空间换时间编程策略的细节问题以及解决方案
查看>>
libco几点体会
查看>>
2.cadence制板流程[原创]
查看>>
linux上进程状态查询
查看>>
Python 日常学习
查看>>
poj 3683: Priest John's Busiest Day(2-sat 输出解)
查看>>
分析求一个整型数组的最大值
查看>>
Digital Roots 分类: HDU 2...
查看>>
Core Animation中的关键帧动画
查看>>
service
查看>>
nodejs之入门
查看>>
5、linux上安装zookeeper
查看>>