怎么写testbench

1. 如何写TESTBENCH, 给个教程吧 一、基本概念和基础知识Testbench 不仅要产生激励也就是输入,还要验证响应也就是输出 。
当然也可以只产生激励,然后通过波形窗口通过人工的方法去验证波形,这种方法只能适用于小规模的设计 。在ISE 环境中,当前资源操作窗显示了资源管理窗口中选中的资源文件能进行的相关操作 。
在资源管理窗口选中了testbench 文件后,在当前资源操作窗显示的ModelSimSimulator 中显示了4 种能进行的模拟操作,分别是:Simulator Behavioral Model(功能仿真)、Simulator Post-translate VHDL Model(翻译后仿真)、Simulator Post-Map VHDLModel(映射后仿真)、Simulator Post-Place & Route VHDL Model(布局布线后仿真) 。如图1 所示:图1l Simulator Behavioral Model 也就是所说的功能仿真、行为仿真、前仿真 。
验证功能是否正确,这是设计的第一步 。功能仿真正确的程序不一定能被正确综合,也就是硬件实现 。
有的在综合时报错误,有的虽然能综合但结果并不正确 。当然,功能仿真如果都不能通过,以后的步骤也就无法进行 。
这是必做的仿真 。l Simulator Post-translate VHDL Model 也就是翻译后仿真 。
对源程序进行编译后首先排除了语法错误,对一些像类属命令(Generic)、生成语句(Generate)等进行了展开 。不是必做的仿真 。
l Simulator Post-Map VHDL Model也就是映射后仿真 。不同的器件内部结构也不尽相同,映射的作用就是将综合后产生的网表文件对应到实际的器件上去 。
由于映射不包含布线,也就是要用什么类型的逻辑单元虽然已经确定但要用哪个位置的还没有确定,因此,映射后仿真不包含布线延时 。不是必做的仿真 。
l Simulator Post-Place & Route VHDL Model 也就是所说的布局布线后仿真、时序仿真、后仿真 。这是最完整的仿真,既包含逻辑延时又包含布线延时 。
在做布局布线后仿真时要用到一个叫SDF的文件 。SDF文件包含设计中每个单元(Cell)的延时和时序约束数据 。
通过加载这个文件就能得到完整的时序情况 。它是必做的仿真 。
一般必须进行功能仿真和布局布线后仿真 。常见问题:为什么有的testbench在进行功能仿真时能正确进行,而在进行布局布线后仿真时就不能运行 。
有两点要注意的地方:(1)、在做映射后仿真或布局布线后仿真时,都已经经过了综合工具的综合,源程序中的类属命令(Generic)、生成语句(Generate)等都已经进行展开 。例如,如果用Generic 定义了一个参数width,综合工具进行综合时已经按照一个确定的width 值进行了综合 。
它生成的电路已经具有一个确定的结构,不能再随意调整 。所以在映射后仿真和布局布线后仿真的testbench中,往往不能出现Generic 语句 。
(2)映射后仿真和布局布线后仿真都要用到SDF 文件,并且要将SDF文件关联到设计中的实例 。所以在映射后仿真和布局布线后仿真的testbench中,第一,要将你的设计声明成一个元件 。
第二,实例化你设计的元件并且实例名要取为UUT(默认的,当然也可以改) 。关于断言语句在仿真中为了能得到更多信息,经常要用到断言语句(assert) 。
其语法如下:Assert<条件>Report<消息>Severity<出错级别>;出错级别共有5 种:l Notel Warningl Errorl Failurel Fatal在VHDL 模型的模拟过程中,一旦断言语句的条件为假,则发送消息并将出错级别发送给模拟器 。通常可以设置一个中止模拟器运行的出错级别,一般默认的中止运行的出错级别为Failure 。
我们来看一个例子:assert falsereport "********* " & IMAGE(DWIDTH) & "BIT DIVIDER SEQUENCE FINISHEDAT " & IMAGE(now) & " !" & " *********"severity note;断言的条件不是一个条件表达式,而直接是false 。这说明只要程序执行到这里断言就一定会成立,送出消息 。