基于verilog的同步FIFO设计

基于verilog的同步FIFO设计

工具 vivado2016.2

同步fifo

FIFO的英文全称为first in first out,顾名思义就是先进先出的意思。fifo又分为同步fifo与异步fifo,fifo通常作为不同时钟域之间的数据传递,以及不同数据接口之间数据匹配。这次主要进行同步FIFO的研究。

  • 同步fifo原理框图
    fifo 框图
    由上图可知fifo主要有输入:clk,rst_n,read,write,data_in.输出:full,emty,data_out。与普通存储器不同的是fifo没有外部读写地址的输入,因此fifo使用较为简单,同样这也造成无法无法随意访问任意地址,只能顺序输出。

FIFO设计难点以及主要参数

fifo主要参数有,fifo深度,fifo宽度,空标志,满状态。
fifo设计的主要难点:
fifo设计主要难点在于如何判断fifo的满状态以及空标志。如果不能准确判断fifo的满状态可能造成写的数据被覆盖。同样如果不能准确判断fifo的空可能造成读书的数据错误。博主在设计这两个状态是就出现了相应的问题,最后进行修改才能正确进行读写。
以下是博主第一次进行设计的同步fifo,代码如下:

`timescale 1ns / 1ps

//
module snfifo1(
									input clk,
									input rst_n,
									input[3:0] data_in,
									input write,
									input read,
									output[3:0] data_out,
									output  full,
									output   emty
								);
								
reg[3:0] fifo_reg[3:0];//depth4
reg[1:0] w_head,R_tail;
reg[1:0] count;
reg [3:0] dout;
reg f,e;
parameter MAX = 3;
//*************update w_head*************		
always @ (posedge clk)
	if(!rst_n)
		w_head <= 2'd0;
	else if(write && !full)
		w_head <= w_head +  1'b1;
		//else if(full) w_head <= 3'd0;
//*************update R_tail*************		
always @ (posedge clk)
	if(!rst_n)
		R_tail <= 2'd0;
	else if(read && !emty)
		R_tail <= R_tail +  1'b1;
		//else if(emty) R_tail <= 3'd0;
		
//**************count************
always @(posedge clk)
	if(!rst_n)
	begin
		count <= 2'd0;
		
    end
	else
	 case({read,write})
	 
  • 7
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值