当前位置:   article > 正文

FIFO设计

fifo设计

1 同步FIFO

下图展示了一个同步fifo的通用架构。
在这里插入图片描述
其中双端口ROM(DPRAM)作为同步FIFO的存储器使用,由于读写控制时钟均为同一个clk故称为同步fifo,另外fifo_full和fifo_empty为fifo空满状态标志位,wr_en和rd_en控制fifo的读写使能,内部寄存器wr_ptr与rd_ptr受上述三组信号控制,并且作为存储器的地址,控制DPRAM的读写。
同步FIFO代码:

module FIFO4_4(
output reg fifo_full = 1'b1,
output reg fifo_empty = 1'b0,
output reg [3 : 0] fifo_dout,
input fifo_clk,
input fifo_rstn,
input fifo_rd_en,
input fifo_wr_en,
input [3 : 0] fifo_din
);

parameter width = 4, depth = 4;
reg [width - 1 : 0] fifo_mem [depth - 1 : 0];
reg [3 : 0] rdp, wrp;
//counter
always @(posedge fifo_clk) begin
    if( !fifo_rstn ) wrp <= 1'b0;
    else if( (!fifo_full) || (fifo_wr_en) ) wrp <= wrp;
    else if( wrp < depth - 1 ) wrp <= wrp + 1'b1;
    else wrp <= 1'b0;
end
always @(posedge fifo_clk) begin
    if( !fifo_rstn ) rdp <= 1'b0;
    else if( (!fifo_empty) || (fifo_rd_en) ) rdp <= rdp;
    else if( rdp < depth - 1 ) rdp <= rdp + 1'b1;
    else rdp <= 1'b0;
end
//detect full or empty
always @(posedge fifo_clk) begin
    if( !fifo_rstn ) fifo_full <= 1'b1;
    else if( !fifo_rd_en ) fifo_full <= 1'b1;
    else if( (wrp - rdp) == (depth - 1) || wrp + 1'b1 == rdp ) fifo_full <= 1'b0;
    else if( wrp == rdp ) fifo_full <= fifo_full;
    else fifo_full <= 1'b1;
end
always @(posedge fifo_clk) begin
    if( !fifo_rstn ) fifo_empty <= 1'b0;
    else if( !fifo_wr_en ) fifo_empty <= 1'b1;
    else if( (rdp - wrp) == (depth - 1) || rdp + 1'b1 == wrp ) fifo_empty <= 1'b0;
    else if( wrp == rdp ) fifo_empty <= fifo_empty;
    else fifo_empty <= 1'b1;
end
//write or read data
always @(posedge fifo_clk) begin
    if( !fifo_rstn ) begin
        fifo_mem[0] <= 4'b0;
        fifo_mem[1] <= 4'b0;
        fifo_mem[2] <= 4'b0;
        fifo_mem[3] <= 4'b0;
    end
    else if( (!fifo_wr_en) && (fifo_full) ) fifo_mem[wrp] <= fifo_din;
    else fifo_mem[wrp] <= fifo_mem[wrp];
end
always @(posedge fifo_clk) begin
    if( !fifo_rstn ) fifo_dout <= 4'b0;
    else if( (!fifo_rd_en) && (fifo_empty) ) fifo_dout <= fifo_mem[rdp];
    else fifo_dout <= 4'b0;
end
endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

仿真结果(布局后时序仿真):
在这里插入图片描述
FIFO IP coreÿ

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/1009787
推荐阅读
相关标签
  

闽ICP备14008679号