testbench怎么写_testbench经典教程VHDL

来源:网络整理 作者:2017年12月01日 17:22
关键词:testbenchvhdl

  testbench是一种验证的手段。首先,任何设计都是会有输入输出的。但是在软环境中没有激励输入,也不会对你设计的输出正确性进行评估。那么此时便有一种,模拟实际环境的输入激励和输出校验的一种“虚拟平台”的产生。在这个平台上你可以对你的设计从软件层面上进行分析和校验,这个就是testbench的含义。

  testbench怎么写

  一个最基本的Testbench包含三个部分,信号定义、模块接口和功能代码。借用一下特权同学总结的编写Testbench的三个基本步骤:

  1、对被测试设计的顶层接口进行例化;

  2、给被测试设计的输入接口添加激励;

  3、判断被测试设计的输出相应是否满足设计要求。

  逐步解决编写Testbench的这三点:

  首先“对被测试设计的顶层接口进行例化”,这一步相对比较简单,例化就是,但端口多时也够喝一壶的,而且要分wire、reg,有时会弄错,别难过,其实可以偷个懒,通过Quartus II自动生成一个Testbench的模板,选择Processing -》 Start -》 Start Test Bench Template Writer,等待完成后打开刚才生成的Testbench,默认是保存在simulaTIon\Modelsim文件夹下的.vt格式文件。这一步就不多讲了,偷懒就挺好。

  其次“给被测试设计的输入接口添加激励”,一般时序设计必然涉及到最基本的两个信号——clk、rst_n(时钟、复位),肯定有童鞋会讲可以没有rst_n,是可以没有,但何必呢,让代码更健壮一点不很好嘛,别钻牛角尖。下面攻克clk、rst_n的写法:

  首先先讲一下TImescale,因为想要进行仿真首先要规定时间单位,而且最好在Testbench里面统一规定时间单位,而不要在工程代码里定义,因为不同的模块如果时间单位不同可能会为仿真带来一些问题,而TImescale本身对综合也就是实际电路没有影响。 `TImescale 1ns/ 1ps表示仿真的单位时间为1ns,精度为1ps。

  testbench怎么写_testbench经典教程VHDL

  上述三种代码的目的就是产生系统时钟,给clk一个初值后,不断重复执行:每10ns翻转一次clk,从而生成一个周期为20ns,频率50MHz的方波信号。第一、二种基本类似,第三种比较简单,少了一个initial,放在了always里初始化。

  三种方法都无一例外地给clk赋了初值,因为信号的缺省值为Z,如果不赋初值,则反相后还是Z,时钟就一直处于高阻Z状态。小编同学一般选中第一种,看个人喜欢。

  根据复位方式的不同,rst_n一般有两种写法:

  testbench怎么写_testbench经典教程VHDL

  上述两种代码的目的基本都是延时复位,但一个异步复位,一个同步复位,用途不同,小编同学一般使用异步复位。

  最后“判断被测试设计的输出相应是否满足设计要求”。首先介绍最常用的两个系统任务函数$stop和$finish。$stop代表暂停仿真后返回软件操作主窗口,将控制权交给user;$finish代表终止仿真后关闭软件操作主窗口。其他任务函数如$monitor、$display 、$time、$fwrite等也比较重要,用到的时候再一一介绍。为直观介绍,使用一个例程来描述,下面是加法器的RTL代码及Testbench:

  testbench怎么写_testbench经典教程VHDL

 

 testbench怎么写_testbench经典教程VHDL 

  注意了clk、rst_n后,其他端口根据需要相应加测试信号即可,然后把RTL代码及Testbench添加到Modelsim仿真观察输出波形等,以验证RTL代码的正确与否,若与预期相符则验证结束,反之则修改代码至与预期相符。

  好了,Testbench就写到这里,但没有结束,实践是检验真理的唯一标准,下一篇将结合Modelsim,以可视化的方式继续探讨Testbench,深入了解仿真的意义。

12下一页全文

本文导航

关注电子发烧友微信

有趣有料的资讯及技术干货

下载发烧友APP

打造属于您的人脉电子圈

关注发烧友课堂

锁定最新课程活动及技术直播
声明:电子发烧友网转载作品均尽可能注明出处,该作品所有人的一切权利均不因本站而转移。
作者如不同意转载,既请通知本站予以删除或改正。转载的作品可能在标题或内容上或许有所改动。
收藏 人收藏
分享:

相关阅读

发表评论

elecfans网友

分享到:

用户评论(0