承接上一篇,FIFO的基础理论,理论基础参考《VerilogHDL高级数字设计》,Clifford的论文Simulation and Synthesis Techniques for Asynchronous FIFO Design以及张波的硕士论文:基于SOC异步FIFO的设计与形式验证。
代码为自己独立完成。
顶层代码:
module (
clk_w,rst_w,b_w,full_w,
clk_r,rst_r,b_r,empty_r,
data_in,data_out,rst_n
);
parameter WIDTH_A=8;
parameter WIDTH_D=16;
parameter DEPTH=256;
input clk_w,rst_w,b_w;
input clk_r,rst_r,b_r;
input [WIDTH_D-1:0] data_in;
input rst_n;
output empty_r;
output full_w;
output [WIDTH_D-1:0]data_out;
//write wire
wire [WIDTH_A:0] addr_w,addr_w_g;
wire [WIDTH_A:0] syn_data_w,addr_w_syn;
//read
wire [WIDTH_A:0] addr_r,addr_r_g,syn_data_r,addr_r_syn;
//RAM
wire en_r,en_w;
write_controll #(
.WIDTH_A(WIDTH_A)
)write_control( .clk_w(clk_w),
.rst_w(rst_w),
.b_w(b_w),
.addr_r_syn(addr_r_syn),
.addr_w(addr_w),
.full_w(full_w));
b2g #(
.WIDTH_A(WIDTH_A)
)bin_gray_w(.bin(addr_w),
.gray(addr_w_g));
generate
genvar i;
for (i=0;i<=WIDTH_A;i=i+1) begin:
fast_syn_slow write_syn_read(
.vcc(1'b1),
.data_in(addr_w_g[i]),
.clk_s(clk_r),
.rst_s(rst_r),
.syn_data