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;
|