微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > Verilog Testbench的结构

Verilog Testbench的结构

时间:10-02 整理:3721RD 点击:

请多指教,欢迎访问我的blog:http://www.cnblogs.com/Sivar

你的testbench是怎样的呢?


刚开始学习verilog时,我的testbench大概如下:

  1. // ------------------------------------------------------------
  2. // (C) 2010  Sivar  http://www.cnblogs.com/Sivar/
  3. // Author             : SivarH@gmail.com
  4. // Filename           : code1.v
  5. // Created On         : 2010-12-05 11:57
  6. // Description        :
  7. //
  8. // ------------------------------------------------------------

  9. module test ;
  10. reg clk , rst ;
  11. reg [7:0]  din ;
  12. reg en ;
  13. wire [7:0] dout ;

  14. initial
  15. begin
  16.   clk=0;
  17.   rst=0;
  18.   en=0;
  19.   din=8'b0;
  20.   #10;
  21.   rst=1;
  22.   en=1;
  23.   din=8'b1;
  24.   #10 din=8'b2;
  25.   .......
  26.   end
  27. always
  28. begin
  29.       #10 clk=~clk;
  30.     end
  31.   
  32. dut u1(clk,rst,en,din,dout);


  33. endmodule

复制代码


之后,知道一些coding style之类的,有一些改进:

  1. // ------------------------------------------------------------
  2. // (C) 2010  Sivar  http://www.cnblogs.com/Sivar/
  3. // Author             : SivarH@gmail.com
  4. // Filename           : code2.v
  5. // Created On         : 2010-12-05 12:02
  6. // Description        :
  7. //
  8. // ------------------------------------------------------------
  9. `timescale 1ns/1ns

  10. module test ;
  11. reg clk , rst ;
  12. reg [7:0]  din ;
  13. reg en ;
  14. wire [7:0] dout ;

  15. initial
  16. begin
  17.   rst=0;
  18.   en=0;
  19.   din=8'b0;
  20.   #10;
  21.   rst=1;
  22.   en=1;
  23.   din=8'b1;
  24.   #10 din=8'b2;
  25.   .......
  26.   end
  27. initial
  28. begin
  29.       clk=0;
  30.       forever #10 clk=~clk;
  31.     end
  32.   
  33. dut u1
  34. (.clk(clk),
  35.   .rst(rst),
  36.   .en(en),
  37.   .din(din),
  38.   .dout(dout)
  39. );


  40. endmodule

复制代码



再后来,学着将重复的操作封装起来:

  1. // ------------------------------------------------------------
  2. // (C) 2010  Sivar  http://www.cnblogs.com/Sivar/
  3. // Author             : SivarH@gmail.com
  4. // Filename           : code3.v
  5. // Created On         : 2010-12-05 12:05
  6. // Description        :
  7. //
  8. // ------------------------------------------------------------


  9. `timescale 1ns/1ns

  10. module test ;
  11. reg clk , rst ;
  12. reg [7:0]  din ;
  13. reg en ;
  14. wire [7:0] dout ;

  15. // sim
  16. initial
  17. begin
  18.     reset ( 0 ) ;
  19.     #20;
  20.     reset ( 1 ) ;
  21.     datain ( 1 ) ;
  22.     datain ( 2 ) ;
  23.     .......
  24.     end
  25. // clk
  26. initial
  27. begin
  28.       clk =0 ;
  29.       forever #10 clk =~clk ;
  30.     end
  31. // tasks
  32. task datain ;
  33.   input [7:0] data ;
  34.    @ ( posedge clk )
  35.     din = data ;
  36. endtask

  37. task reset ;
  38.   input rst_i ;
  39.    rst = rst_i ;
  40. endtask

  41. dut u1
  42. (.clk(clk),
  43.   .rst(rst),
  44.   .en(en),
  45.   .din(din),
  46.   .dout(dout)
  47. );


  48. endmodule

复制代码

后来,学着划模块,clk_gen模块产生时钟,dut模块生成待测的DUT,log模块记录错误信息,test是测试平台顶层:

  1. // ------------------------------------------------------------
  2. // (C) 2010  Sivar  http://www.cnblogs.com/Sivar/
  3. // Author             : SivarH@gmail.com
  4. // Filename           : test.v
  5. // Created On         : 2010-12-05 12:18
  6. // Description        :
  7. //
  8. // ------------------------------------------------------------

  9. `timescale 1ns/1ns
  10. module test ;
  11.    
  12.   initial
  13. begin
  14.       ctrl.init ;
  15.       log.init ;
  16.       ctrl.reset ;
  17.       repeat ( 10 )
  18.         ctrl.datain ;
  19.       end
  20. always @ ( ... )
  21.      log.error("err @ %t" , $time ) ;


  22.     ctrl        ctrl (  ) ;
  23.     log         log ( ) ;
  24.     clk_gen     clkgen ( ... ) ;

  25. endmodule

复制代码



log模块如下:《设计与验证verilog HDL》


  1. // ------------------------------------------------------------
  2. // (C) 2010  Sivar  http://www.cnblogs.com/Sivar/
  3. // Author             : SivarH@gmail.com
  4. // Filename           : log.v
  5. // Created On         : 2010-12-05 12:25
  6. // Description        :
  7. //
  8. // ------------------------------------------------------------
  9. `timescale 1ns/1ns
  10. module log ;

  11. integer cnt =
  12. 0 ;
  13. ...

  14.   task error ;
  15.     input [50*8:0] str ;
  16.     begin
  17.     $display ( "error : %s" , str ) ;
  18.     $display ( "@time%0t" , $time ) ;
  19.     cnt = cnt + 1 ;
  20.   end

复制代码


之后会怎么样呢?
期待ing……

>>>> From Sivar's: http://www.cnblogs.com/Sivar Thanks for your reading.

really very good,tks for your kindly share!



   thanks for your reply.

good for sharing

大侠这么热情啊,不错

学习ing

大侠这么热情啊,不错

原以为你VMM或者OVM或者UVM,失望

学习,学习.

对学习很有帮助

谢谢分享······

每个图片有解释就好了

good good thanks.

進化史 !

上一篇:FPGA选型
下一篇:买一个sdio的ip要多少钱

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top