最近在写一个异步FIFO的时候,从网上找了许多资料,文章都写的相当不错,只是附在后面的代码都多多少少有些小错误。

于是自己写了一个调试成功的代码,放上来供大家参考。

非原创 原理参考下面:

原文 https://www.cnblogs.com/SYoong/p/6110328.html

 

上代码:

 1 module Asyn_FIFO_tb;
 2 
 3     parameter WIDTH = 8;
 4 
 5     reg clk_wr;
 6     reg clk_rd;
 7     reg rst_n_rd;
 8     reg rst_n_wr;
 9 
10     reg  [WIDTH-1:0] data_wr;
11     reg  wr_en;
12     wire wr_full;
13 
14     wire [WIDTH-1:0] data_rd;
15     reg  rd_en;
16     wire rd_empty;
17 
18 
19     Asyn_FIFO fifo_inst(
20     .clk_wr(clk_wr), 
21     .rst_n_rd(rst_n_rd),
22     .rst_n_wr(rst_n_wr),
23     .wr_en(wr_en), 
24     .data_wr(data_wr), 
25     .clk_rd(clk_rd), 
26     .rd_en(rd_en), 
27     .data_rd(data_rd), 
28     .rd_empty(rd_empty), 
29     .wr_full(wr_full)
30     );
31     
32     initial begin
33         rst_n_rd = 0;
34         rst_n_wr = 0;
35         clk_wr = 0;
36         clk_rd = 0;
37         wr_en = 0;
38         rd_en = 0;
39         
40         #20
41         rst_n_rd = 1;
42         rst_n_wr = 1;
43         
44         #80
45         wr_en = 1;
46         rd_en = 0;
47         
48         #10000
49         wr_en = 0;
50         rd_en = 1;
51     end
52 
53     always #10 clk_wr = ~clk_wr;
54     always #20 clk_rd = ~clk_rd;
55     
56 /*     always @(posedge clk_rd)
57         rd_en <= ($random) % 2;
58 
59     always @(posedge clk_wr)
60         wr_en <= ($random) % 2; */
61     
62     always @(posedge clk_wr)
63         data_wr <= ($random) % 256;
64     
65 endmodule
Asyn_FIFO_tb.v

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-18
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-24
  • 2021-12-20
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-19
相关资源
相似解决方案