fifo.v
module fifo( input rstn , input clk , input wr_en , input rd_en , input [7:0] wr_dat , output reg [7:0] rd_dat , output empty , output full ); reg [7:0] mem [0:255]; reg [8:0] wr_addr; reg [8:0] rd_addr; always @(posedge clk or negedge rstn) begin if(!rstn) wr_addr <= 9'd0; else if(wr_en && ~full) wr_addr <= wr_addr + 9'd1; end always @(posedge clk or negedge rstn) begin if(!rstn) rd_addr <= 9'd0; else if(rd_en && ~empty) rd_addr <= rd_addr + 9'd1; end assign full = (wr_addr[8]^rd_addr[8])&(wr_addr[7:0] == rd_addr[7:0]); assign empty = (wr_addr==rd_addr); integer i; always @(posedge clk or negedge rstn) begin if(!rstn) begin for(i=0;i<=255;i=i+1) mem[i] <= 8'd0; end else if(wr_en && ~full) mem[wr_addr] <= wr_dat; end always @(posedge clk or negedge rstn) begin if(!rstn) rd_dat <= 8'd0; else if(rd_en && ~empty) rd_dat <= mem[rd_addr]; end endmodule

该博客详细介绍了FIFO(先进先出)存储器的Verilog HDL实现。模块包含输入信号rstn、clk、wr_en、rd_en、wr_dat,以及输出信号rd_dat、empty、full。通过两个always块分别处理写地址和读地址的更新,并使用位宽为8的内存阵列存储数据。full和empty信号根据写入和读取地址的比较得出。此外,还提供了写入和读取数据的逻辑。这个设计适用于数字逻辑和VLSI领域的FIFO存储解决方案。
1278

被折叠的 条评论
为什么被折叠?



