FIFO基本原理可见:异步FIFO基本原理(基于Verilog的简单实现)_别再出error了的博客-CSDN博客_两级同步电路
题目描述
请根据题目中给出的双口RAM代码和接口描述,实现异步FIFO,要求FIFO位宽和深度参数化可配置。
电路的接口如下图所示。
代码及详解注释如下 :
`timescale 1ns/1ns
/***************************************RAM*****************************************/
module dual_port_RAM #(parameter DEPTH = 16,
parameter WIDTH = 8)(
input wclk
,input wenc
,input [$clog2(DEPTH)-1:0] waddr //深度对2取对数,得到地址的位宽。深度d = 2^n;
,input [WIDTH-1:0] wdata //数据写入
,input rclk
,input renc
,input [$clog2(DEPTH)-1:0] raddr //深度对2取对数,得到地址的位宽。
,output reg [WIDTH-1:0] rdata //数据输出
);
reg [WIDTH-1:0] RAM_MEM [0:DEPTH-1];
always @(posedge wclk) begin
if(wenc) //写操作使能信号到来时,数据写入
RAM_MEM[waddr] <= wdata;
end
always @(posedge rclk) begin
if(renc) //读操作使能信号到来时,数据读出
rdata <= RAM_MEM[raddr];
end
endmodule
/***************************************AFIFO*****************************************/
module asyn_fifo#(
parameter WIDTH = 8,
parameter DEPTH = 16
)(
input wclk , //写时钟
input rclk , //读时钟
input wrstn , //写异步重置
input rrstn , //读异步重置
input winc , //写操作使能信号
input rinc , //读操作使能信号
input [WIDTH-1:0] wdata , //写入数据
output wire wfull , //满信号
output wire rempty , //空信号
output wire [WIDTH-1:0] rdata //读出数据
);
always @(posedge wclk or posedge ) begin
end
endmodule