通过加载这个文件就能得到完整的时序情况 。它是必做的仿真 。
一般必须进行功能仿真和布局布线后仿真 。常见问题:为什么有的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 。这说明只要程序执行到这里断言就一定会成立,送出消息 。
出错级别为note,在模拟器的输出窗口将会显示:图2再看一个例子:assert (s_cyi((DWIDTH-1)/4) = '0')and (s_ovi = '0')and (s_qutnt = conv_std_logic_vector(v_quot,DWIDTH))and (s_rmndr = conv_std_logic_vector(v_remd,DWIDTH))report "ERROR in division!"severity failure;断言的条件有4 个并且是与的关系,只要其中一个条件不成立则整个表达式为假,断言成立 。如果断言成立将输出“ERROR in division!“这个消息 。
并且通知模拟器出错级别为failure,这一般会停止模拟 。这个断言实际是在对结果进行验证 。
二、实际testbench分析下面将详细分析一个实际的testbench,它是用来测试8051 的ALU单元的除法功能的 。8 位的除法器,被除数和除数的组合共有256*256=65536 种 。
我们采用的方法是穷举所有的输入组合,这样的代码覆盖率可以达到100% 。它的验证必须通过程序自动完成,否则通过人工方法工作量太大 。
把要测试的程序当作一个元件,例如想象成一个74 系列数字电路 。Testbench 的作用是在被测试电路的输入端加上激励,然后比较被测试电路的输出和计算出来的期望值是否一致 。
对我们这个例子来说,在要仿真的ALU 输入端产生65536 种输入组合,然后将ALU产生的对应输出值和testbench 算出的期望值相比较,如果有错误产生则停止模拟并输出信息 。ALU 的除法单元的输入有4 个,分别是被除数、除 。
3.testbench与vhdl源程序有啥区别你买了个黑古隆冬的东西,有几个引脚. 人家说那叫芯片,是USB转UART芯片.
你可以往FPGA/CPLD里写程序,让他跟那个转换芯片一样的逻辑去工作,这里的程序就是你所谓的VHDL程序.
可写好了,谁知道是是正宗是水货还是山寨啊,总得测试鉴定一下吧. 于是你又用C语言写了个上位机程序,往USB发,用UART收,调USB1.0/1.1/2.0,调UART速率2400/9600/115200,反正是双向通测了一遍. 恩,没问题. 数据准确,性能稳定,那是什么山寨还是水货已经不重要了. 是你的VHDL写对了.
- 转正申请自我评价怎么写
- bootloader怎么写
- 手机申请宣言怎么写
- 市场与竞争分析怎么写
- 论文选题背景和意义怎么写
- 牌匾申请书怎么写
- 文献综述要怎么写
- 武汉国立大学几个字怎么写
- 送领导卡片怎么写
- 魏碑方笔怎么写
