最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

【世界新要闻】四位计数器testbench的设计

来源:博客园

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

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           else18                    out <= out+1;19 end20 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 instance15 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-clk25 initial     begin26                     clk=0;27       forever begin28                      #(CYCLE/2);29                         clk=1;30                      #(CYCLE/2);31                         clk=0;32                end33               end34     35 initial   begin36                     reset=1;37                        #(5*CYCLE);38                     reset=0;39            end40 41 initial begin42                   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          end90 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          end123 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 testbench119                        @(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          end167 168 endmodule

波形图:

编写中一个小错误:

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

关键词: