当前位置:   article > 正文

刷完这套题,我才发现Verilog原来如此简单----HDLBits答案系列 -- Writing Testbenches

writing testbench

写在前面

全部答案汇总:刷完这套题,我才发现Verilog原来如此简单----HDLBits答案汇总

今天更新Circuits章节中Verification:Writing Testbenches

这个章节的内容根据要求编写对应的Testbenches文件,Testbenches是测试激励,是对写好的Verilog module进行测试的一种激励手段,这里大致说一下格式:

  • 设定仿真时间单位/精度
  • 编写输入 reg,输出wire变量
  • 例化被测试的module
  • 设置激励(时钟、输入)

Clock

【题目】:

        提供给你如下的模块。编写一个Testbenches对该模块进行例化并测试,同时设置激励时钟clk,周期10ps,该信号初始为0。

                module dut ( input clk ) ;

【个人思路】:

        需要写一个Testbenches对提供dut模块进行测试,该模块只有一个输入激励clk,根据上图要求编写clk就可以了。clk是周期性变化的信号,每隔5ps就翻转一次。

  1. `timescale 1ps/1ps //时间单位/精度
  2. module top_module ( ); //测试module
  3. reg clk; //端口声明
  4. //------------<例化被测试模块>----------------------------
  5. dut dut_inst(
  6. .clk (clk)
  7. );
  8. //------------<设置初始测试条件>--------------------------
  9. initial begin
  10. clk = 1'b0; //初始化为0
  11. end
  12. always #5 clk <= ~clk; //时钟周期10ps
  13. endmodule

Testbench1

【题目】:

        根据A、B的波形设计测试输入激励。

【个人思路】:

        这题只要对着波形写A、B的激励就行了。

  1. module top_module ( output reg A, output reg B );//
  2. // generate input patterns here
  3. initial begin
  4. A <= 1'b0; //初始为0
  5. B <= 1'b0; //初始为0
  6. #10 //10ns后
  7. A <= 1'b1;
  8. #5 //5ns后
  9. B <= 1'b1;
  10. #5 //5ns后
  11. A <= 1'b0;
  12. #20 //20ns后
  13. B <= 1'b0;
  14. end
  15. endmodule

AND gate

【题目】:

        提供下面的与模块给你,设计一个testbench进行验证,要将两输入的4种可能的输入情况全部验证。

【个人思路】:

        写激励的输入,分别让输入in为00、01、10、11,这样就验证到了所有的可能情况。

  1. `timescale 1ps/1ps //时间单位/精度
  2. module top_module(); //测试module
  3. reg [1:0] in; //端口声明
  4. wire out; //端口声明
  5. //------------<例化被测试模块>----------------------------
  6. andgate andgate_inst(
  7. .in(in),
  8. .out(out)
  9. );
  10. //------------<设置初始测试条件>--------------------------
  11. initial begin
  12. in <= 2'b00;
  13. #10 in <= 2'b01;
  14. #10 in <= 2'b10;
  15. #10 in <= 2'b11;
  16. end
  17. endmodule

Testbench2

【题目】:

        输入信号时序图如下:

        被测试模块q7如下,根据上图设计testbench对q7模块进行测试。

module q7 (
    input clk,
    input in,
    input [2:0] s,
    output out
);

【个人思路】:

        题目意思是要根据时序图来设计输入激励信号,从而完成被被测试模块q7的测试,所以我们需要做的就是根据时序图来设计输入激励。

  1. `timescale 1ps/1ps //时间单位/精度
  2. //测试module
  3. module top_module();
  4. //端口声明
  5. reg in;
  6. reg [2:0] s;
  7. reg clk;
  8. wire out;
  9. //------------<例化被测试模块>----------------------------
  10. q7 q7_inst(
  11. .in (in),
  12. .clk (clk),
  13. .s (s),
  14. .out (out)
  15. );
  16. //------------<设置初始测试条件>--------------------------
  17. initial begin
  18. clk = 1'b0;
  19. in <= 1'b0;
  20. s <= 3'd2;
  21. #10 s <= 3'd6;
  22. #10 s <= 3'd2;
  23. in <= 1'b1;
  24. #10 s <= 3'd7;
  25. in <= 1'b0;
  26. #10 s <= 3'd0;
  27. in <= 1'b1;
  28. #30 in <= 1'b0;
  29. end
  30. always #5 clk <= ~clk; //CLK周期为10ps
  31. endmodule

T Flip-Flop

【题目】:

        提供如下TFF模块给你,例化TFF模块并对器进行测试。    

module tff (
    input clk,
    input reset,   // active-high synchronous reset
    input t,       // toggle
    output q
);

 【个人思路】:

        只要例化一下tff模块,设计一下输入clk,reset,t就可以了。

  1. `timescale 1ps/1ps //时间单位/精度
  2. module top_module (); //测试module
  3. //端口声明
  4. reg clk;
  5. reg reset;
  6. reg t;
  7. wire q;
  8. //------------<例化被测试模块>----------------------------
  9. tff u_tff(
  10. .clk (clk ),
  11. .reset (reset ),
  12. .t (t ),
  13. .q (q )
  14. );
  15. //------------<设置初始测试条件>--------------------------
  16. initial begin
  17. clk=1'b0;
  18. reset <= 1'b1;
  19. #10;
  20. reset <= 1'b0;
  21. t <= 1'b1;
  22. end
  23. always #5 clk=~clk; //CLK周期为10ps
  24. endmodule

        

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/648829
推荐阅读
相关标签
  

闽ICP备14008679号