1. 首页
  2. 操作系统
  3. 其他
  4. Verilog中FIFO实现的示例代码

Verilog中FIFO实现的示例代码

上传者: 2023-03-11 09:11:45上传 SV文件 9.03KB 热度 10次
// 定义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
用户评论