数字系统EDA技术:第三章 Testbench_第1页
数字系统EDA技术:第三章 Testbench_第2页
数字系统EDA技术:第三章 Testbench_第3页
数字系统EDA技术:第三章 Testbench_第4页
数字系统EDA技术:第三章 Testbench_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字系统EDA技术

每个人都知道调试的难度是编程的一倍。——BrainKernighan,“ElementsofProgrammingStyle”,1974年§3.11

系统仿真及验证平台EDA设计的基本流程验证是必不可少的没有人会使用不信任的东西恰当的验证论证了设计的可信度可信度可以通过恰当的验证过程来证明。通过向客户展示已经详细深入地按照设计规范进行了验证,可以迅速取得客户的信任。功能验证是证明设计品质的惟一方法。验证工作占设计工作量的70%在这个设计规模达数百万门甚至更多的ASIC、可复用的知识产权核(IntellectualPropertyCore)和片上系统(SOC)的时代,设计团队应该配备专门的验证工程师,数量甚至应该是设计人员的两倍。1.验证的重要性在现代EDA工程中,通常利用EDA工具进行仿真来实现系统功能的验证。(1)交互式仿真方法大多数的VHDL仿真器允许进行实时交互式的操作,允许在仿真期间对输入信号赋值,指定仿真执行时间,并观察输出波形。(2)测试平台(testbench)方法利用测试平台,可以实现自动地对被测试单元输入信号测试矢量,并且通过波形输出、文件记录输出或与测试平台中设定的预期输出进行比较。2.验证方法测试平台待测设计测试平台(testbench)通常指一段仿真代码,用来为设计产生特定的输入序列,也用来观测设计输出的响应。VHDLVerilogeOpenVera外部数据文件C程序PerlSystemCC++TCL测试平台是一个封闭的系统:系统没有来自外部的输入信号,也没有输出信号。测试平台是系统的控制中心。与交互式仿真方法比较,测试平台具有以下优点:可以简便地对输入和输出矢量进行记录归档;相对于手工方式(逐个处理输入和输出矢量)而言,它提供了一种更为系统的仿真途径;针对原理性模型建立的测试平台,同样可以应用在实现设计的时序仿真中;测试平台与设计实现可以并行进行;验证工作可以再更高抽象的层次中进行,而不是在底层直接和0、1打交道,可以缩短设计周期。VHDL的可综合性和可仿真性VHDL作为一种硬件描述语言,可综合设计只是它的一个子集;VHDL强大的行为建模能力使其能够方便、简洁地用于仿真测试。(1)VHDL的可综合性

3.基于VHDL的测试平台硬件电路设计的综合是指将HDL或原理图转化为与门、或门、非门等基本的逻辑单元组成的门级网表。可综合的VHDL语句就是指能够通过EDA工具自动转化为硬件逻辑的语句。例如:描述除法行为C<=a/b除了满足特定的条件,否则上面的描述很难被现有的EDA工具转化为硬件电路。

除法要从高位到低位逐次试除、求余、移位,需要多次运算才能得到最终结果,同时试除和求余需要用到减法器,商和余数的中间结果需要寄存器存储。这么多的运算不可能在一个时钟周期内完成。如果b为常数,且取值为2的N次幂(N为自然数)则该语句可以被综合。小技巧—如何写出可以综合的程序通常来讲,如果设计者本身都不能想象出一个比较直观的硬件实现方法,那么EDA工具可能就无法综合。常见的可综合的逻辑功能模块有:利用逻辑运算操作符书写组成的纯组合逻辑运算电路;加法器、减法器、乘法器、特定的除法器、多路选择器和比较器;触发器、计数器;存储器;有限状态机一般情况下,数字逻辑电路均可以有以上基本逻辑模块组成。(2)VHDL的可仿真特性VHDL程序中,所有可以综合的语句都可以用于仿真,而用于仿真的语句虽然能够描述电路行为,但却不一定可以综合成硬件电路。所有用于硬件实现的描述都必须使用可综合的语句,仿真语句的作用是为了验证设计模块的正确性。常用的VHDL仿真语句

(1)VHDL中所有的语句和数据类型都可以用于仿真;

(2)after语句

after语句用于描述延迟信息,因而常与time类型一起用。通过after给信号赋值,可以描述信号在确定延迟时间后取值的变化。

Signal_name<=value1,value2aftert1,value3aftert2,

…;适用于非循环变化的有限变化的信号赋值例如对复位信号的描述可以为:Reset<=‘1’,

‘0’afterreset_period;上述语句表示,信号reset初始值为‘1’,经过一个复位时长后变为‘0’。变量赋值是立即生效的,不像信号赋值具有延迟性,因此,变量不能用after语句指定延迟时间。(3)waitfor语句waitfor语句功能与after类似,表示仿真程序延迟一定的时间,但是waitfor语句只能在进程(process)或过程(procedure)内使用。waitfor<时间值>;时间值表示time类型的数据,可以指定单位为ps,ns,ms和s等,默认的单位是ns。time类型在standard数据包中的定义为:Typetimeisrange-2147483647to2147483647unitsfs;ps=1000fs;…min=60sec;hr=60min;enduints;在VHDL仿真程序中,时钟信号经常用waitfor语句来描述:constantclk_period:time:=10ns;clk_process:processbeginclk<=‘0’;waitforclk_period/2;clk<=‘1’;waitforclk_period/2;endprocess;(4)wait语句wait语句也只能用于进程和过程中,表示无条件等待,相当于挂起。例如,上述reset信号的赋值可以改写为:

reset_process:processbeginreset<=‘1’;waitforreset_period;reset<=‘0’;wait;endprocess;(5)assert语句assert语句专门用于程序仿真和调试过程中的人机会话。assert<条件>report<报告信息>severity<出错级别>当执行到assert语句时,若条件为真,则继续往下执行其它语句;若条件为假,则输出报告信息和错误级别。报告信息是一段字符;错误级别是VHDL中预定义好的四个级别:FAILURE,ERROR,WARNING,NOTE。assert(a=‘1’)report“aisnotequalto‘1’”severityERROR;例如:Assert语句与if语句时相反的,if语句在条件成立时执行,而assert语句在条件不成立的时候执行。if(a=‘1’)thenassertfalsereport“aisnotequalto‘1’”severityERROR;endif;仿真激励的产生一般情况下,测试代码的最主要工作就是描述待测试模块的激励信号。(1)初始化对于测试代码中的变量和信号,定义时如果不指定初始值仿真器默认为“X”。初始化原则:待测模块内部的信号和变量由待测模块初始化;测试代码定义的信号和变量由测试代码完成初始化。信号和变量的初始化只对仿真有效,综合时被忽略。(2)时钟信号constantclk_period:time:=10ns;clk_process:processbeginclk<=‘0’;waitforclk_period/2;clk<=‘1’;waitforclk_period/2;endprocess;clk_process:process(clk)beginclk<=NOTclkafterperiod/2;endprocess;(3)复位信号复位信号不是周期信号,通常通过延迟赋值语句产生的值序列来描述。constantreset_period:time:=20ns;reset<=‘1’,

‘0’afterreset_period;constantreset_period:time:=20ns;processbeginreset<=‘0’;waituntilclk’eventandclk=‘1’;reset<=‘1’;

waituntilclk’eventandclk=‘1’;reset<=‘0’;wait;endprocess;(4)数据数据既可以通过VHDL时序控制语句来产生,也可以通过TEXTIO从文件中读取。使用VHDL语句产生数据主要有两种方式:通过延时赋值语句产生的值序列来描述;通过进程语句来描述。不规则数据序列,且长度有限有规律的数据序列,长度不限signaltmp:std_logic_vector(3downto0);Tmp<=“0000”,

“0010”after10ns;

“0101”after10ns;stim_proc:processbeginwaitfor10ns;if(a=255)thena<=0;elsea<=a+1;endprocess;stim_proc:process(clk)beginif(clk’eventandclk=‘1’)then

if(a=255)thena<=0;elsea<=a+1;

endif;endif;endprocess;测试程序的设计方法VHDLtestbench是一段专门设计的用于测试VHDL模块功能是否正确的VHDL代码。主要应该包括:例化待验证的模块(UnitUnderTest,UUT)通过VHDL语言的行为描述,为UUT提供激励信号;收集UUT的输出结果,必要时将该结果与期望的理想结果进行比较;根据比较结果自动判断UUT的内部功能结构是否正确。ResultingOutputFileMonitorProgramthatgeneratesoutputProgramthatgeneratesStimuliUnitUnderTestHumanEyeorExternalProgram例1:验证下述模块功能:

4.应用举例实体声明,简单,无外部输入,端口声明处空白待测元件声明待测元件的输入输出信号称为testbench的内部信号元件例化时钟进程激励信号a在0~255间循环复位信号如何描述?例2:具有输出处理模块的测试平台在实际应用中,设计者经常面临着测试向量数据量庞大而难以实现的问题。例如,在数字图像处理中,一帧320*240的图像所产生的测试向量达到320*240*2=1536000个。采用之前的任一种测试方法都难以进行仿真测试4.基于TEXTIO的VHDL的测试平台应用TEXTIO和Matlab或C语言等来辅助仿真测试TEXTIO?TEXTIO是标准库中的一个程序包,包中定义了三个类型:line类型text类型Side类型访问文件的操作过程:read(…)、readline(…)、write(…)、writeline(…)usestd.TextIO.all(1)line类型定义line是TextIO中所有操作的基本单元。读文件时,先按行(line)读出一行数据,再对行进行操作,以各种数据类型读取其中的数据;写文件时,先将各种数据组合成line,再将line写入文件。Line类型只能定义变量,不能定义信号variableDline:line;signalDline:line;(2)text类型定义text为ASCII文件类型。定义为text类型的文件(file)是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论