FPGA之FIFO篇

原文链接: https://www.cnblogs.com/ant2012/archive/2012/02/22/2362328.html

作为一种特殊的寄存器,FIFO使用及其常用,同步异步的,一级多级的,当然了FIFO只有单口,毕竟先入先出,SRAM还有双口的,两者很像。一般来说存储器有,DRAM,SRAM,SD卡,ROM,寄存器/寄存器堆,FIFO,DDR,控制器有RISC-V,CPU(软核microblaze,硬核arm等),DMA控制器,以及自己写的互联控制器等等。同样的,FIFO也有对应的深度(地址,指针),数据端口,使能信号flag,位宽等,网上其实也有很多对应的读写FIFO的verilog代码,比如·:https://download.csdn.net/download/qq_25370363/9042439,虽然有些代码优化不大,但是作为参考学习还是可以的。

Verilog整理笔记之FIFO篇

  我想大家都知道,队列是计算机系统中一种比较基本的数据结构。作为队列中的一种,先进先出的FIFO是一种比较常用的存储器单元。FIFO通常有读允许端口、写允许端口、数据输入端口、数据输出端口、FIFO状态端口等信号端口。其中,FIFO状态端口输出当前FIFO的状态——满、未满或空。

  16*16位FIFO的功能框图如下。其中,clock为系统时钟信号输入,reset为系统复位信号,read为读数据信号允许信号,write为写入FIFO允许信号,fifo_in[15:0]为数据输入,fifo_out[15:0]为数据输出,fifo_empty为指示FIFO当前是空的,这种情况下,只能对FIFO进行写入数据操作;fifo_full指示当前FIFO是满的,这种情况下,当然只能对FIFO进行读数据操作,是不能写入数据的;fifo_half指示当前FIFO队列中没空也没满,这种情况下,既可以对FIFO进行写入数据操作,也能进行读数据操作。

16*16位FIFO读写数据操作的Verilog HDL的代码整理如下。

module FIFO_16_16(
      clock,reset,
      read,write,fifo_in,fifo_out,
      fifo_empty,fifo_full,fifo_half);
input clock,reset,read,write;
input [15:0] fifo_in;
output [15:0] fifo_out;
output fifo_empty,fifo_full,fifo_half;

reg [15:0] fifo_out;
reg [3:0] read_ptr,write_ptr,counter;
reg [15:0] ram [15:0];
wire fifo_empty,fifo_full,fifo_half;

always @(posedge clock)
 if(reset)
  begin
  read_ptr=0;
  write_ptr=0;
  counter=0;
  fifo_out=0;
  end
 else
 case({read,write})
  2'b00: counter=counter;
  2'b01: begin
     ram[write_ptr]=fifo_in;
     counter=counter+1;
     write_ptr=(write_ptr==15)?0:write_ptr+1;
     end
  2'b10: begin
     fifo_out=ram[read_ptr];
     counter=counter-1;
     read_ptr=(read_ptr==15)?0:read_ptr+1;
     end
  2'b11: begin
     if(counter==0)
      fifo_out=fifo_in;
     else
      begin
       ram[write_ptr]=fifo_in;
       fifo_out=ram[read_ptr];
       write_ptr=(write_ptr==15)?0:write_ptr+1;
       read_ptr=(read_ptr==15)?0:read_ptr+1;
      end
     end
 endcase
assign fifo_empty=(counter==0);
assign fifo_full=(counter==15);
assign fifo_half=(counter==8);
endmodule

  至此,我整理了Verilog HDL语言在基本逻辑电路设计中关于存储器设计的ROM、SRAM和FIFO的设计实例,其中的代码都是笔者亲自测试过的,希望朋友们能指出不足之处,以便笔者在FPGA和Verilog的学习中取得进步。

【推荐】超50万C++/C#源码: 大型实时仿真组态图形源码
【推荐】零基础轻松玩转云上产品,获壕礼加返百元大礼
【推荐】华为IoT平台开发者套餐9.9元起,购买即送免费课程
相关博文:
· 同步fifo 的verilog程序(z)
· Verilog学习笔记简单功能实现(八)...............同步FIFO
· Verilog简单功能实现--同步FIFO
· Verilong 同步FIFO的Verilog 实现方式1
· Verilog 学习笔记之—FIFO
最新 IT 新闻:
· Android 10正式版发布时间敲定:9月3日,支持Pixel全系列
· 三六零上半年净利润40.52亿元 同比增163.7%
· Linux Kernel 宣布 28 周年
· 消灭山寨的不是高端制造,而是普惠制造
· AMD给锐龙7 3700X“恢复名誉”:游戏性能也是最强的了
» 更多新闻...

更多参考:

https://www.cnblogs.com/jason-tian-lei/p/4302849.html
https://www.cnblogs.com/kingstacker/p/7666358.html
https://www.cnblogs.com/ylsm-kb/p/9068449.html
https://blog.csdn.net/xffjpf/article/details/80494377
https://blog.csdn.net/u013701860/article/details/24470157

你可能感兴趣的:(Verilog)