首页 > 其他分享 >四位计数器testbench的设计

四位计数器testbench的设计

时间:2023-03-11 13:48:24浏览次数:30  
标签:ld clk negedge init 计数器 四位 testbench clr CYCLE

简单介绍一下四位计数器所要满足的条件:

 1.4bit循环计数;

           1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,1,.......

2.能同步清零;

             高电平有效

3.有加载功能;

            高电平加载

4.优先级:清零信号 > 加载信号;

 

给出计数器的设计代码:

 1 module count4(clk, reset, clr, ld, init, out);
 2 
 3 input clk, reset;
 4 input clr;
 5 input ld;
 6 input [3:0] init;
 7 output [3:0] out;
 8 reg [3:0] out; 
 9 
10 always @(posedge clk or posedge reset)
11 begin if(reset)
12                    out <= 0;
13          else if(clr)
14                    out <= 0;
15          else if(ld)
16                    out <= init;
17           else
18                    out <= out+1;
19 end
20 endmodule

 

计数器的testbench设计:

对clr信号进行验证:

          1. 一个周期;

          2.二个周期(多个周期);

          3.毛刺

 1 `timescale    1ns/1ns
 2 
 3 module tb_a;
 4 
 5 parameter CYCLE=10;
 6 
 7 reg clk;
 8 reg reset;
 9 reg clr;
10 reg ld;
11 reg[3:0]    init;
12 wire[3:0]      out;
13 
14 //RTL instance
15 count4 count4(
16         .clk(clk),
17         .reset(reset),
18         .ld(ld),
19      .init(init),
20         .clr(clr),
21      .out(out)
22 );
23 
24 //generate input-clk
25 initial     begin
26                     clk=0;
27       forever begin
28                      #(CYCLE/2);
29                         clk=1;
30                      #(CYCLE/2);
31                         clk=0;
32                end
33               end
34     
35 initial   begin
36                     reset=1;
37                        #(5*CYCLE);
38                     reset=0;
39            end
40 
41 initial begin
42                   clr=0;
43                   ld=0;
44                   init=0;
45                     #(6*CYCLE);
46 
47 
48                  
49                 @(negedge clk);
50                  
51                     clr=1;
52                     ld=0;  
53                     init=0;                
54                     #(CYCLE);
55                                        
56                 @(negedge clk);
57                     clr=0;
58                     ld=0;
59                     init=0;
60                     #(5*CYCLE);
61 
62                 @(negedge clk);
63                     clr=1;
64                     ld=0;
65                     init=0;
66                     #(2*CYCLE);
67               
68                 @(negedge clk);
69                     clr=0;
70                     ld=0;
71                     init=0;
72                     #(5*CYCLE);
73                  
74                   @(negedge clk)
75                        clr=1;
76                        ld=0;
77                        init=0;
78                        #(CYCLE/8);
79                   
80                       
81                        clr=0;
82                        ld=0;
83                        init=0;
84                           #(20*CYCLE);
85                 
86                    $finish;
87                      
88   
89          end
90 
91 endmodule

波形图:

 

 对ld加载信号进行验证:

         1. 一个周期;

          2.二个周期(多个周期);

          3.毛刺

注意:写在一个initial块里面;

           测试ld信号时,clr信号为0.

testbench:

  1 `timescale    1ns/1ns
  2 
  3 module tb_a;
  4 
  5 parameter CYCLE=10;
  6 
  7 reg clk;
  8 reg reset;
  9 reg clr;
 10 reg ld;
 11 reg[3:0]    init;
 12 wire[3:0]      out;
 13 
 14 //RTL instance
 15 count4 count4(
 16         .clk(clk),
 17         .reset(reset),
 18         .ld(ld),
 19         .init(init),
 20         .clr(clr),
 21         .out(out)
 22 );
 23 
 24 //generate input-clk
 25 initial     begin
 26                     clk=0;
 27       forever begin
 28                      #(CYCLE/2);
 29                         clk=1;
 30                      #(CYCLE/2);
 31                         clk=0;
 32                end
 33               end
 34     
 35 initial   begin
 36                     reset=1;
 37                        #(5*CYCLE);
 38                     reset=0;
 39            end
 40 
 41 initial begin
 42                   clr=0;
 43                   ld=0;
 44                   init=0;
 45                     #(6*CYCLE);
 46 
 47 
 48                  
 49                 @(negedge clk);
 50                  
 51                     clr=1;
 52                     ld=0;  
 53                     init=0;                
 54                     #(CYCLE);
 55                                        
 56                 @(negedge clk);
 57                     clr=0;
 58                     ld=0;
 59                     init=0;
 60                     #(5*CYCLE);
 61 
 62                 @(negedge clk);
 63                     clr=1;
 64                     ld=0;
 65                     init=0;
 66                     #(2*CYCLE);
 67               
 68                 @(negedge clk);
 69                     clr=0;
 70                     ld=0;
 71                     init=0;
 72                     #(5*CYCLE);
 73                  
 74                   @(negedge clk)
 75                        clr=1;
 76                        ld=0;
 77                        init=0;
 78                        #(CYCLE/8);
 79                   
 80                       
 81                        clr=0;
 82                        ld=0;
 83                        init=0;
 84                           #(10*CYCLE);
 85               //clr_testbench
 86               @(negedge clk);
 87                      clr=0;
 88                      ld=1;
 89                      init=5;
 90                     #(CYCLE);
 91                        
 92                      clr=0;
 93                      ld=0;
 94                      init=0;
 95                     #(2*CYCLE);
 96 
 97                @(negedge clk);
 98                      clr=0;
 99                      ld=1;
100                      init=5;
101                     #(2*CYCLE);
102                        
103                      clr=0;
104                      ld=0;
105                      init=0;
106                     #(2*CYCLE);
107  
108                 @(negedge clk);
109                      clr=0;
110                      ld=1;
111                      init=5;
112                     #(CYCLE/8);
113                        
114                      clr=0;
115                      ld=0;
116                      init=0;
117                     #(10*CYCLE);
118 
119                  $finish;
120                      
121   
122          end
123 
124 endmodule

波形图:

 

 

对计数器功能进行验证:

         1. 极值测试(最大值,最小值);

          2.优先级测试;

testbench:

  1 `timescale    1ns/1ns
  2 
  3 module tb_a;
  4 
  5 parameter CYCLE=10;
  6 
  7 reg clk;
  8 reg reset;
  9 reg clr;
 10 reg ld;
 11 reg[3:0]    init;
 12 wire[3:0]      out;
 13 
 14 //RTL instance
 15 count4 count4(
 16         .clk(clk),
 17         .reset(reset),
 18         .ld(ld),
 19      .init(init),
 20         .clr(clr),
 21      .out(out)
 22 );
 23 
 24 //generate input-clk
 25 initial     begin
 26                     clk=0;
 27       forever begin
 28                      #(CYCLE/2);
 29                         clk=1;
 30                      #(CYCLE/2);
 31                         clk=0;
 32                end
 33               end
 34     
 35 initial   begin
 36                     reset=1;
 37                        #(5*CYCLE);
 38                     reset=0;
 39            end
 40 
 41 initial begin
 42                   clr=0;
 43                   ld=0;
 44                   init=0;
 45                     #(6*CYCLE);
 46 
 47 
 48                  
 49                 @(negedge clk);
 50                  
 51                     clr=1;
 52                     ld=0;  
 53                     init=0;                
 54                     #(CYCLE);
 55                                        
 56                 @(negedge clk);
 57                     clr=0;
 58                     ld=0;
 59                     init=0;
 60                     #(5*CYCLE);
 61 
 62                 @(negedge clk);
 63                     clr=1;
 64                     ld=0;
 65                     init=0;
 66                     #(2*CYCLE);
 67               
 68                 @(negedge clk);
 69                     clr=0;
 70                     ld=0;
 71                     init=0;
 72                     #(5*CYCLE);
 73                  
 74                   @(negedge clk)
 75                        clr=1;
 76                        ld=0;
 77                        init=0;
 78                        #(CYCLE/8);
 79                   
 80                       
 81                        clr=0;
 82                        ld=0;
 83                        init=0;
 84                           #(10*CYCLE);
 85               //clr_testbench
 86               @(negedge clk);
 87                      clr=0;
 88                      ld=1;
 89                      init=5;
 90                     #(CYCLE);
 91                        
 92                      clr=0;
 93                      ld=0;
 94                      init=0;
 95                     #(2*CYCLE);
 96 
 97                @(negedge clk);
 98                      clr=0;
 99                      ld=1;
100                      init=5;
101                     #(2*CYCLE);
102                        
103                      clr=0;
104                      ld=0;
105                      init=0;
106                     #(2*CYCLE);
107  
108                 @(negedge clk);
109                      clr=0;
110                      ld=1;
111                      init=5;
112                     #(CYCLE/8);
113                        
114                      clr=0;
115                      ld=0;
116                      init=0;
117                     #(10*CYCLE);
118           //function testbench
119                        @(negedge clk);
120                              clr=0;
121                              ld=1;
122                              init=0;
123                             #(CYCLE);
124 
125                                 clr=0;
126                                 ld=0;
127                                 init=0;
128                             #(2*CYCLE);
129 
130                            @(negedge clk);
131                              clr=0;
132                              ld=1;
133                              init=15;
134                             #(CYCLE);
135 
136                                 clr=0;
137                                 ld=0;
138                                 init=0;
139                                #(2*CYCLE);
140 
141                           @(negedge clk);
142                              clr=1;
143                              ld=1;
144                              init=5;
145                             #(CYCLE);
146 
147                                 clr=0;
148                                 ld=0;
149                                 init=0;
150                                #(2*CYCLE);
151 
152 
153                       
154                       
155 
156                  
157                   
158 
159 
160                 
161 
162                  
163                    $finish;
164                      
165   
166          end
167 
168 endmodule

波形图:

 

 

 

 

编写中一个小错误:

             是#(CYCLE),不是(#CYCLE).

 

标签:ld,clk,negedge,init,计数器,四位,testbench,clr,CYCLE
From: https://www.cnblogs.com/love-dog/p/17205756.html

相关文章