使用verilog编写一个同步fifo,不考虑地址full,empty,cnt等非组要信号。
同步fifo,不考虑地址full,empty,cnt等非组要信号。
可用于考试时,现场编写的代码。
Module fifo # (
Parameter FIFO_WIDTH =32,
Parameter FIFO_DEPTH =16,
)(
Input i_clk,
Input i_rst,
Input i_wr_en,
Input [FIFO_WIDTH-1:0] i_wr_data,
Input i_rd_en,
Output reg [FIFO_WIDTH-1:0] o_rd_data
);
Reg [FIFO_WIDTH-1:0] fifo_data [FIFO_DEPTH-1:0];
Reg [3:0] wr_ptr,rd_ptr;
Always @ (posedge i_clk , posedge i_rst)
If(i_rst)begin
Wr_ptr <= 4'd0;
Rd_ptr <= 4'd0;
End
Else begin
Case(i_wr_en,i_rd_en)
2'b01:begin
o_rd_data <= fifo_data[rd_ptr];
Rd_ptr <= (rd_ptr==4'd15)?4'd0:(rd_ptr+1);
End
2'b10:begin
Fifo_data[wr_ptr] <= i_wr_data;
wr_ptr <= (wr_ptr==4'd15)?4'd0:(wr_ptr+1);
End
2'b11:begin
Fifo_data[wr_ptr] <= i_wr_data;
o_rd_data <= fifo_data[rd_ptr];
Rd_ptr <= (rd_ptr==4'd15)?4'd0:(rd_ptr+1);
wr_ptr <= (wr_ptr==4'd15)?4'd0:(wr_ptr+1);
End
Default:;
endcase
End
endmodule