Verilog中FIFO实现的示例代码
// 定义FIFO深度
parameter DEPTH = 16;
// 定义FIFO接口
interface fifo_if;
logic clk, rst_n; // 时钟和复位信号
logic wr_en, rd_en; // 写入和读取使能信号
logic [7:0] data_in, data_out; // 数据输入和输出
endinterface
// FIFO实现
module fifo #
(
parameter DEPTH = 16
)
(fifo_if fifo);
logic [(DEPTH-1):0] mem [1:0]; // FIFO存储器
logic [($clog2(DEPTH)+1):0] wr_ptr = 2'h0; // 写指针
logic [($clog2(DEPTH)+1):0] rd_ptr = 2'h0; // 读指针
always @(posedge fifo.clk) begin
if (!fifo.rst_n) begin
wr_ptr <= 2'h0;
rd_ptr <= 2'h0;
end else begin
if (fifo.wr_en && fifo.rd_en) begin
mem[wr_ptr] <= fifo.data_in;
wr_ptr <= wr_ptr + 1'b1;
rd_ptr <= rd_ptr + 1'b1;
end else if (fifo.wr_en) begin
mem[wr_ptr] <= fifo.data_in;
wr_ptr <= wr_ptr + 1'b1;
end else if (fifo.rd_en) begin
fifo.data_out <= mem[rd_ptr];
rd_ptr <= rd_ptr + 1'b1;
end
end
end
endmodule
用户评论