Testbench设计技巧研究.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Testbench设计技巧研究   摘要:Testbench的设计是仿真和验证数字逻辑设计的标准方法也是设计过程中的必要环节,简单高效的Testbench可以帮助设计者完成复杂工作。该文主要从Testbench的功能结构入手,研究了如何将文件化分为功能模块和实现模块的设计技巧,并通过一个FIFO的实例将这些功能模块组合成一个完整的Testbench。   关键词:Testbench;仿真;验证;功能模块   中图分类号:TP311文献标识码:A文章编号:1009-3044(2009)13-3560-04      1 引言   Testbench是数字设计的仿真验证的主要手段。编写Testbench的主要目的是为了对使用硬件描述语言设计的电路仿真验证,测试设计电路的功能、部分性能是否与预期的目标相符,从而对设计的正确性进行验证。由于设计的规模越来越大也越来越复杂,数字设计的验证已经成为一个日益困难和繁琐的任务。   本文结合设计工作实践,研究了Testbench的功能结构、常用功能模块的实现方法以及一些测试技巧以提高验证效率,期望能对广大设计者的仿真和验证工作有所帮助。      2 Testbench的功能结构   Testbench是由HDL硬件描述语言编写的文件与一般的设计文件类似,从图1总可以看出Testbench应该是待测试设计(Design Under Test)的顶层设计。   下面以示例性质的Testbench.v来说明文件的一般功能结构。   // filename: Testbench.v   `define MACRO 20 // 宏定义   `include dut.v//包含待测试模块,如果在同一目录下省略   `timescale 1n/10ps//指定仿真时间精度   module testbench(); //定义仿真模块名   reg a; //声明线型和寄存器型变量   wire b;   parameter test_parameter =10; //定义相关测试参数   Dut dut(.a(a),.b(b)); //实例化DUT   initial begin //仿真激励信号   a = 0 ;   #30 a = 1 ;   end   #MAX $display(At time %d a is %b, $time, a);//利用系统任务显示调试信息   `undef MACRO //取消宏定义,防止冲突发生。   endmodule //模块结束   从Testbench.v文件可以看出Testbench完成了以下任务:在测试中实例化设计Design Under Test(DUT);仿真测试的设计(DUT)激励信号;通过使用仿真激励信号测试DUT;仿真结果输出到终端或波形窗口以观察结果。   2.1 仿真激励信号   首先我们知道Testbench是一个自封闭顶层设计,没有输入输出。所以为了实现测试模块的正常工作,Testbench就必须仿真激励信号。激励信号一般可以分为:系统时钟信号;复位信号;具体DUT仿真信号。   2.2 系统时钟信号   使用系统时钟控制逻辑工作的时序逻辑设计必然需要一个时钟。 重复的时钟信号可以很容易地用Veilog代码实现。   ■   除了这种常用的系统时钟信号之外,有时候我们在设计中会用到占空比不是50%的时钟,比如用always语句实现占空比40%的时钟;如果需要产生固定数目的时钟脉冲,可以在initial语句中使用repeat语句来实现,代码如下:   ■   2.3 复位信号   除了时钟信号,通用的激励信号就是复位信号了。由于复位信号不是周期信号,我们可以用intial来产生。   ■   2.4 DUT激励信号   要得到测试验证的结构,除了要为测试的设计模块提供时钟和复位信号,我们还要编写一系列DUT的信号仿真。一般的写法就是在initial语句模块中根据时间顺序向仿真向量赋值,因为在每一个进程块或初始块中事件是按照代码书写的顺序依次执行的,就是说各个模块是在仿真的零时刻同时启动的。   我们可以将复杂的激励序列分解为多个模块编写以保障代码的可读性和可维护性,比如将一些常用操作封装成任务或者函数。但需要注意的是,激励信号在不同的模块的赋值写法只可以用于仿真,无法进行综合。   2.5 系统任务   在我们编写Testbench时,一些系统任务可以帮助我们显示调试信息,例如使用 $display()可以显示文字信号;使用$monitor()监控参数的变化。为了仿真数据保存下来,可以将数据写入文件,代码如下:   integer WriteFile;

文档评论(0)

yingzhiguo + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5243141323000000

1亿VIP精品文档

相关文档