写一个FIFO用Verilog
时间: 2024-05-25 10:16:35 浏览: 74
module fifo(clk, reset, data_in, data_out, wr_en, rd_en);
parameter WIDTH = 8; // 数据宽度
parameter DEPTH = 16; // 深度
input clk, reset, wr_en, rd_en;
input [WIDTH-1:0] data_in;
output [WIDTH-1:0] data_out;
reg [WIDTH-1:0] mem [0:DEPTH-1]; // 存储器数组
reg [4:0] wr_ptr = 0; // 写指针
reg [4:0] rd_ptr = 0; // 读指针
reg [4:0] count = 0; // 元素计数器
always @(posedge clk) begin
if (reset) begin
wr_ptr <= 0;
rd_ptr <= 0;
count <= 0;
end else begin
if (wr_en && count < DEPTH) begin // 写入数据
mem[wr_ptr] <= data_in;
wr_ptr <= wr_ptr + 1;
count <= count + 1;
end
if (rd_en && count > 0) begin // 读取数据
data_out <= mem[rd_ptr];
rd_ptr <= rd_ptr + 1;
count <= count - 1;
end
end
end
endmodule
阅读全文