在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4811|回复: 14

[原创] Verilog Testbench的结构

[复制链接]
发表于 2010-12-5 13:05:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
请多指教,欢迎访问我的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.

发表于 2010-12-5 13:22:08 | 显示全部楼层
really very good,tks for your kindly share!
 楼主| 发表于 2010-12-5 13:28:02 | 显示全部楼层
回复 2# huqiaqia


   thanks for your reply.
发表于 2010-12-6 08:13:12 | 显示全部楼层
good for sharing
发表于 2010-12-6 09:37:48 | 显示全部楼层
大侠这么热情啊,不错
发表于 2010-12-7 11:19:55 | 显示全部楼层
发表于 2010-12-7 19:47:58 | 显示全部楼层
学习ing
发表于 2010-12-7 23:36:09 | 显示全部楼层
大侠这么热情啊,不错
发表于 2010-12-8 08:46:59 | 显示全部楼层
原以为你VMM或者OVM或者UVM,失望
发表于 2010-12-8 13:17:14 | 显示全部楼层
学习,学习.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-23 07:13 , Processed in 0.024780 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表