《数字系统EDA技术》由会员分享,可在线阅读,更多相关《数字系统EDA技术(34页珍藏版)》请在金锄头文库上搜索。
1、3.11 测试平台(TestBench)设计1. 仿真验证的重要性(1)仿真验证是必要的仿真验证是FPGA设计过程中非常重要的环节,贯穿于 系统设计实现的整个流程之中。恰当的验证论证了设计的 可信度,验证是证明设计品质的惟一方法。 (2)仿真验证工作占设计总工作量的70%“在这个设计规模达数百万门的ASIC、可复用的知识产 权(IP)和系统芯片(SOC)的时代,仿真验证占到了设计 总工作量的70%左右。设计团队应该配备能够正确描述仿真 验证需求的工程师和专门进行验证的工程师。仿真验证工 程师的数量甚至是RTL设计人员的两倍。” -Writing Testbenches【美】Janick Ber
2、geron2. 验证方法在现代EDA工程中,通常利用EDA工具进行仿真来实现系统功能的验证。 (1)交互式仿真方法大多数的VHDL仿真器允许进行实时交互式的操作,允许在仿真期间对输入信号赋值,指定仿真执行时间,并观察输出波形。 (2)测试平台(TestBench)方法利用测试平台,可以实现自动地对被测试单元输入信号测试矢量,并且通过波形输出、文件记录输出或与测试平台中设定的预期输出进行比较。测试平台待测设计测试平台(TestBench)通常指一段仿真代码,用来为设计产生特定的输入序列,也用来观测设计输出 的响应。测试平台是一个封闭的系统:系统没有来自外部的输入信号,也没有输出信号。测试平台是系
3、统的控 制中心。与交互式仿真方法比较,测试平台具有以下优点 :1、可以简便地对输入和输出矢量进行记录归 档;2、相对于手工方式(逐个处理输入和输出矢 量)而言,它提供了一种更为系统的仿真途径;3、针对原理性模型建立的测试平台,同样可 以应用在实现设计的时序仿真中;4、测试平台与设计实现可以并行进行;5、验证工作可以在更高抽象的层次中进行, 而不是在底层直接和0、1打交道,可以缩短设计 周期。53. 基于VHDL的测试平台VHDL的可综合性和可仿真性VHDL作为一种硬件描述语言,可综合设计只是它的一个子集;VHDL强大的行为建模能力使其能够方便、简洁地用于仿真测试。(1)VHDL的可综合性硬件电
4、路设计的综合是指将HDL或原理图转化为与 门、或门、非门等基本的逻辑单元组成的门级网表。可综合的VHDL语句就是指能够通过EDA工具自动 转化为硬件逻辑的语句。6例如:描述除法行为C ; 时间值表示time类型的数据,可以指定单位为fs ,ps, ns,ms和s等,默认的单位是ns。time类型在standard数据包中的定义为:Type time is range -2147483647 to 2147483647;units fs; ps = 1000 fs; min = 60 sec; hr = 60 min; end uints;11在VHDL仿真程序中,时钟信号经常用 wait fo
5、r语句来描述:constant clk_period: time :=10 ns; clk_process: process beginclk report severity 当执行到assert语句时,若条件为真,则继续 往下执行其它语句;若条件为假,则输出报告信息 和错误级别。报告信息是一段字符;错误级别是VHDL中预定义好的四个级别:FAILURE, ERROR, WARNING, NOTE。14assert (a =1) report “a is not equal to 1” severity ERROR;例如:Assert语句与if语句是相反的,if语句在条件成 立时执行,而ass
6、ert语句在条件不成立的时候执行。if (a /=1) thenassert falsereport “a is not equal to 1”severity ERROR; end if;15仿真激励的产生一般情况下,测试代码的最主要工作就是 描述待测试模块的激励信号。 (1)初始化对于测试代码中的变量和信号,定义时如 果不指定初始值仿真器默认为“X”。初始化原则:待测模块内部的信号和变量由待测模块初 始化;测试代码定义的信号和变量由测试代码完 成初始化。信号和变量的初始化只对仿真有效,综合时被忽略 。16(2)时钟信号constant clk_period: time :=10ns; cl
7、k_process: process beginclk = 0;wait for clk_period/2;clk = 1;wait for clk_period/2; end process; clk_process: process(clk) beginclk = NOT clk after period/2; end process; clk = NOT clk after period/2; 17(3)复位信号复位信号不是周期信号,通常通过延迟赋值语句产生 的值序列来描述。 constant reset_period: time :=20ns; reset = 1,0after res
8、et_period;constant reset_period: time :=20ns; process beginreset = 0;wait until clkevent and clk=1;reset = 1;wait until clkevent and clk=1;reset = 0;wait; end process; 18(4)数据数据既可以通过VHDL时序控制语句来产生 ,也可以通过TEXT IO从文件中读取。使用VHDL语句产生数据主要有两种方式:1)通过延时赋值语句产生的值序列来描述;2)通过进程语句来描述。不规则数据序列,且长度有限有规律的数据序列,长度不限19sign
9、al tmp: std_logic_vector(3 downto 0); Tmp = “0000”,“0010” after 10ns;“0101” after 20ns;stim_proc: process beginwait for 10ns;if (a=255) thena=0;elsea=a+1; end process;stim_proc: process(clk) beginif (clkevent and clk=1) thenif (a=255) then a=0;else a=a+1; end if;end if; end process;基于TEXT IO产生数据的方法见
10、后。20测试程序的设计方法VHDL TestBench是一段专门设计的用于测试 VHDL模块功能是否正确的VHDL代码。主要应该包括: I.例化待验证的模块(Unit Under Test,UUT) II. 通过VHDL语言的行为描述,为UUT提供激励信号; III. 收集UUT的输出结果,必要时将该结果与期望的理想结果进行比较; IV. 根据比较结果自动判断UUT的内部功能结构是否正确。21Resulting Output FileMonitor Program that generates outputProgram that generates StimuliUnit Under Tes
11、tHuman Eye or External Program22例1:验证下述模块功能:4. 应用举例23实体声明, 简单,无外部输 入,端口声明处 空白待测元件 声明24待测元件的 输入输出信 号:称为 testbench的 内部信号元件例化25时钟进程激励信号a在 0255间循环复位信号如何描述?略26在实际应用中,设计者经常面临着测试向量数据量庞大而难以实现的问题。例如,在数字图像处理中,一帧320*240的图 像所产生的测试向量达到320*240*2=1536000个。采用之前的任一种测试方法都难以进行仿真测试4. 基于TEXT IO的VHDL的测试平台应用TEXT IO和Matlab
12、或C语言等来辅助仿真测试27 TEXT IO?TEXT IO是标准库中的一个程序包,包中定义了三个类型:pline类型ptext类型pSide类型访问文件的操作过程:read()、 readline()、write()、writeline()use std.TextIO.all28(1)line类型定义line是Text IO中所有操作的基本单元。读文 件时,先按行(line)读出一行数据,再对行进行操作,以各种数据类型读取其中的数据;写文 件时,先将各种数据组合成line,再将line写入文件。Line类型只能定义变量,不能定义信号variable Dline: line;signal Dl
13、ine: line;29(2)text类型定义text为ASCII文件类型。定义为text类型的文件(file)是长度可变的ASCII文件。(3)side类型两种状态,即right和left,分别表示将数据从左边还是右边写入行变量。file input: TEXT open read_mode is “STD_INPUT”file output: TEXT open write_mode is “STD_OUTPUT”30(4)文件操作过程l procedure READLINE(文件变量;行变量)l procedure WRITELINE(文件变量;行变量)l procedure READ(行变量;数据类型)l procedure WRITE(行变量;数据变量;写入方 式;位宽)write(OutLine, OutData, left, 2) 31 基于Text IO的测试仿真方案Matlab或C语言Test Vectors.inpResult.out (仿真结果输出)测试平台Text IOUUT32例3:Text IO应用3334