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

Subversion Repositories yifive

[/] [yifive/] [trunk/] [caravel_yifive/] [verilog/] [rtl/] [lib/] [sync_fifo.sv] - Diff between revs 11 and 18

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 11 Rev 18
Line 62... Line 62...
 
 
reg [DATA_WIDTH-1:0] ram [FIFO_DEPTH-1:0];
reg [DATA_WIDTH-1:0] ram [FIFO_DEPTH-1:0];
reg [ADDR_WIDTH-1:0]  wptr; // write ptr
reg [ADDR_WIDTH-1:0]  wptr; // write ptr
reg [ADDR_WIDTH-1:0]  rptr; // write ptr
reg [ADDR_WIDTH-1:0]  rptr; // write ptr
reg [ADDR_WIDTH:0]    status_cnt; // status counter
reg [ADDR_WIDTH:0]    status_cnt; // status counter
 
reg                   empty;
 
reg                   full;
 
 
 //-----------Variable assignments---------------
 
 assign full  = (status_cnt == FIFO_DEPTH);
 
 assign empty = (status_cnt == 0);
 
 
 
 //-----------Code Start---------------------------
 //-----------Code Start---------------------------
 always @ (negedge rstn or posedge clk)
 always @ (negedge rstn or posedge clk)
 begin : WRITE_POINTER
 begin : WRITE_POINTER
   if (rstn==1'b0) begin
   if (rstn==1'b0) begin
Line 99... Line 98...
  end else if (wr_en &&  (!rd_en) && (status_cnt  != FIFO_DEPTH)) begin
  end else if (wr_en &&  (!rd_en) && (status_cnt  != FIFO_DEPTH)) begin
    status_cnt <= status_cnt + 1;
    status_cnt <= status_cnt + 1;
  end
  end
end
end
 
 
 
// underflow is not handled
 
always @ (negedge rstn or posedge clk)
 
begin : EMPTY_FLAG
 
  if (rstn==1'b0) begin
 
       empty <= 1;
 
  // Read but no write.
 
  end else if (rd_en &&   (!wr_en) && (status_cnt  == 1)) begin
 
    empty <= 1;
 
  // Write
 
  end else if (wr_en) begin
 
    empty <= 0;
 
  end else if (status_cnt  == 0) begin
 
     empty <= 1;
 
  end
 
end
 
 
 
// overflow is not handled
 
always @ (negedge rstn or posedge clk)
 
begin : FULL_FLAG
 
  if (rstn==1'b0) begin
 
       full <= 0;
 
  // Write but no read.
 
  end else if (wr_en &&  (!rd_en) && (status_cnt  == (FIFO_DEPTH-1))) begin
 
    full <= 1;
 
  // Read
 
  end else if (rd_en &&  (!wr_en) ) begin
 
    full <= 0;
 
  end else if (status_cnt  == FIFO_DEPTH) begin
 
     full <= 1;
 
  end
 
end
assign dout = ram[rptr];
assign dout = ram[rptr];
 
 
always @ (posedge clk)
always @ (posedge clk)
begin
begin
  if (wr_en) ram[wptr] <= din;
  if (wr_en) ram[wptr] <= din;

powered by: WebSVN 2.1.0

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