Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

How to generate a checker for fifo

Status
Not open for further replies.

sai685

Junior Member level 2
Joined
Sep 4, 2015
Messages
23
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
292
I have a code of testbench for fifo in the below. please tell me how to generate a checker \
  • wr_full is asserted when the fifo has 32 element.
  • rd_empty is asserted when the fifo has 0 element.

Code Verilog - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
module fifo_top_tb;
  reg wr_clk,rd_clk;
  reg[31:0] data_in;
  wire[31:0] data_out;
  wire rd_empty,wr_full;
  reg reset_w;
  reg reset_r;
  reg write_enable,read_enable;
  reg rptr,wptr;
  bit [:0] que [$]; 
  
  fifo_top top1(.wdata(data_in),
    .rdata(data_out),
    .wclk(wr_clk),
    .rclk(rd_clk),
    .wreset_b(reset_w),
    .rreset_b(reset_r),
    .write(write_enable),
    .read(read_enable),
    .rempty(rd_empty),
    .wfull(wr_full));
 
  task reset;
    write_enable =0;
    read_enable =0; 
    wr_clk=0;
    rd_clk=0;
    data_in=0;
    reset_w=0;
    reset_r=0;           // asserted
  endtask
 
  task write; //TODO: random, value (input );
    @(posedge wr_clk)
      begin
      data_in =$random;
      write_enable=1;
      if(!wr_full)
      begin  
          que.push_back(data_in);
 $display ("%t - queue write data = %d", $time, data_in);
 $display("que.size=%d",que.size);
      end
      end
    endtask 
    always
        #5 wr_clk= ~wr_clk;
 
    always @(posedge wr_clk or posedge rd_clk)
      begin
        if(que.size==1)
      begin
         $display("empty");
      end
        else if(que.size==32)
      begin
         $display("full");
      end 
      end
      
  task read; //TODO: random, value ;
      @(posedge rd_clk)
      begin
      read_enable=1;
      if(!rd_empty)
      begin
      que.pop_front();
   $display (" queue data = %d", que.pop_front() );
   $display("que.size=%d",que.size); 
      end
      end
      endtask
      always
        #5 rd_clk=~rd_clk;
     
  initial
  begin
      reset;
      #20 reset_w =~reset_w;
      #20 reset_r =~reset_r;
 
    repeat(32)write;
    fork
    
     read;
     write;   
   join
 
  end
 
  //C H E C K E R
  
  initial
  fork                  
     assert (wr_full==que[32])
     else
     $error("it is wrong");
     assert (rd_empty==que[0])
     else
     $error("it is wrong");
  join
 
  
  
  initial   
                                      $monitor("wr_clk=%d,reset_w=%d,reset_r=%d,write_enable=%d,read_enable=%d,data_in=%d,data_out=%d,wr_full=%d,rd_empty=%d",wr_clk,reset_w,reset_r,write_enable,read_enable,data_in,data_out,wr_full,rd_empty);
 
  initial  #1200 $finish;
    
  initial
  
  begin
   
$dumpfile("fifo_top_tb.vcd");
 $dumpvars(wr_clk,reset_w,reset_r,write_enable,read_enable,data_in,data_out,wr_full,rd_empty);
 
  end
 
   
endmodule

 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top