用verilog语言写一个FIFO
时间: 2023-12-29 21:10:44 浏览: 65
Verilog写的FIFO程序
4星 · 用户满意度95%
以下是一个简单的FIFO的Verilog代码:
module fifo(
input clk, // 时钟信号
input rst, // 复位信号
input wr_en, // 写使能信号
input rd_en, // 读使能信号
input [7:0] data_in, // 写入数据
output [7:0] data_out // 读出数据
);
parameter FIFO_DEPTH = 8; // FIFO深度
reg [7:0] mem[FIFO_DEPTH-1:0]; // FIFO存储器
reg [2:0] wr_ptr = 0; // 写指针
reg [2:0] rd_ptr = 0; // 读指针
reg [2:0] count = 0; // FIFO计数器
// 写入数据
always @(posedge clk) begin
if (rst) begin
wr_ptr <= 0;
count <= 0;
end else if (wr_en && count < FIFO_DEPTH) begin
mem[wr_ptr] <= data_in;
wr_ptr <= wr_ptr + 1;
count <= count + 1;
end
end
// 读出数据
always @(posedge clk) begin
if (rst) begin
rd_ptr <= 0;
count <= 0;
end else if (rd_en && count > 0) begin
data_out <= mem[rd_ptr];
rd_ptr <= rd_ptr + 1;
count <= count - 1;
end
end
endmodule
该FIFO模块有一个8位宽度的输入端口data_in,和一个8位宽度的输出端口data_out。写入和读出数据时,需要分别使能wr_en和rd_en信号。当FIFO已满或已空时,写入和读出操作将被忽略。FIFO的深度由FIFO_DEPTH参数指定,默认为8。
阅读全文