OpenCores
URL https://opencores.org/ocsvn/firewire/firewire/trunk

Subversion Repositories firewire

[/] [firewire/] [trunk/] [bench/] [verilog/] [fifo_beh.v] - Diff between revs 13 and 22

Only display areas with differences | Details | Blame | View Log

Rev 13 Rev 22
/******************************************************************************
/******************************************************************************
  $Id: fifo_beh.v,v 1.1 2002-03-10 17:18:37 johnsonw10 Exp $
  $Id: fifo_beh.v,v 1.1 2002-03-10 17:18:37 johnsonw10 Exp $
 
 
  Author(s): Johnsonw10@opencors.org
  Author(s): Johnsonw10@opencors.org
 
 
  Revision History:
  Revision History:
  $Log: not supported by cvs2svn $
  $Log: not supported by cvs2svn $
 
 
******************************************************************************/
******************************************************************************/
`timescale 1 ns / 100 ps
`timescale 1 ns / 100 ps
module fifo_beh (
module fifo_beh (
                 clk,
                 clk,
                 reset_n,
                 reset_n,
                 wr,
                 wr,
                 din,
                 din,
 
 
                 rd,
                 rd,
                 dout,
                 dout,
 
 
                 empty,
                 empty,
                 full
                 full
);
);
 
 
parameter DATA_WIDTH   = 32;
parameter DATA_WIDTH   = 32;
parameter FIFO_SIZE    = 64;
parameter FIFO_SIZE    = 64;
 
 
input reset_n;
input reset_n;
input clk;
input clk;
 
 
input wr;
input wr;
input [0:DATA_WIDTH-1] din;
input [0:DATA_WIDTH-1] din;
 
 
input rd;
input rd;
output [0:DATA_WIDTH-1] dout;
output [0:DATA_WIDTH-1] dout;
reg [0:DATA_WIDTH-1] dout;
reg [0:DATA_WIDTH-1] dout;
output empty;
output empty;
output full;
output full;
 
 
reg [0:DATA_WIDTH-1] mem[0:FIFO_SIZE-1];
reg [0:DATA_WIDTH-1] mem[0:FIFO_SIZE-1];
integer rd_ptr, wr_ptr, dcnt;
integer rd_ptr, wr_ptr, dcnt;
 
 
wire empty_o, full_o;
wire empty_o, full_o;
wire rd_i = rd & (!empty_o);
wire rd_i = rd & (!empty_o);
wire wr_i = wr & (!full_o);
wire wr_i = wr & (!full_o);
 
 
always @ (negedge reset_n or posedge clk) begin
always @ (negedge reset_n or posedge clk) begin
    if (!reset_n) begin
    if (!reset_n) begin
        rd_ptr <= 0;
        rd_ptr <= 0;
        wr_ptr <= 0;
        wr_ptr <= 0;
        dcnt <= 0;
        dcnt <= 0;
    end
    end
    else begin
    else begin
        if (rd_i) begin
        if (rd_i) begin
            dout <= mem[rd_ptr];
            dout <= mem[rd_ptr];
            rd_ptr <= rd_ptr + 1;
            rd_ptr <= rd_ptr + 1;
        end
        end
 
 
        if (wr_i) begin
        if (wr_i) begin
            mem[wr_ptr] <= din;
            mem[wr_ptr] <= din;
            wr_ptr <= wr_ptr + 1;
            wr_ptr <= wr_ptr + 1;
        end
        end
 
 
        if (rd_i && wr_i)
        if (rd_i && wr_i)
            dcnt <= dcnt;
            dcnt <= dcnt;
        else if (rd_i)
        else if (rd_i)
            dcnt <= dcnt - 1;
            dcnt <= dcnt - 1;
        else if (wr_i)
        else if (wr_i)
            dcnt <= dcnt + 1;
            dcnt <= dcnt + 1;
    end
    end
end
end
 
 
assign empty_o = (dcnt == 0);
assign empty_o = (dcnt == 0);
assign full_o  = (dcnt == FIFO_SIZE);
assign full_o  = (dcnt == FIFO_SIZE);
 
 
assign empty = empty_o;
assign empty = empty_o;
assign full  = full_o;
assign full  = full_o;
 
 
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.