关于异步fifo的讲解太多了,而且基本上都讲解的很清楚,本文记录的代码调试工具为VCS和Verdi,有问题可以帮忙指正一下,欢迎交流。
fifo文章参考链接:https://blog.csdn.net/alangaixiaoxiao/article/details/81432144
代码参考链接:https://zhuanlan.zhihu.com/p/111049581
格雷码转换模块:
module b2g(b, g);
input[3:0] b;
output[3:0] g;
wire[3:0] b;
reg[3:0] g;
always @(*) begin
g = {b[3], b[2]^b[3], b[1]^b[2], b[0]^b[1]};
end
endmodule
写地址控制模块:
module wr_ctrl(input wr_clk,
input wr_rst_n,
input wr_en,
input[3:0] rd_add_glay,
output[3:0] wr_add_bin,
output[3:0] wr_add_glay,
output reg wr_full);
reg[3:0] wr_add_bin_r;
wire[3:0] wr_add_glay_r;
reg[3:0] rd_add_glay_r1;
reg[3:0] rd_add_glay_r2;
always @(posedge wr_clk or negedge wr_rst_n)begin
if(!wr_rst_n)begin
wr_add_bin_r <= 0;
wr_full <= 0;
end
else begin
if((~wr_full) && (wr_en))begin
wr_add_bin_r <= wr_add_bin_r +