第5章_Testbench与Modelsim_第1页
第5章_Testbench与Modelsim_第2页
第5章_Testbench与Modelsim_第3页
第5章_Testbench与Modelsim_第4页
第5章_Testbench与Modelsim_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、FPGA系统设计系统设计第5章 Testbench与ModelSim 1FPGA系统设计系统设计q 数字设计的验证已经成为一个日益困难和繁琐的任务。验证工程师们依靠一些验证工具和方法来应付这个挑战。对于几百万门的大型设计,工程师们一般使用一套形式验证(formal verification)工具。然而对于一些小型的设计,用testbench就可以很好地进行验证。q 通常testbench用工业标准的VHDL或Verilog硬件描述语言来编写。Testbench调用待测功能设计,然后进行仿真。 2FPGA系统设计系统设计Testbench实例qLIBRARY ieee;qUSE ieee.std

2、_logic_1164.all;qENTITY mlu ISqPORT(qNEG_A : IN STD_LOGIC;qNEG_B : IN STD_LOGIC;qNEG_Y : IN STD_LOGIC;qA : IN STD_LOGIC;qB : IN STD_LOGIC;qL1 : IN STD_LOGIC;qL0 : IN STD_LOGIC;qY : OUT STD_LOGICq);qEND mlu; 3FPGA系统设计系统设计qARCHITECTURE mlu_dataflow OF mlu ISqSIGNAL A1 : STD_LOGIC;qSIGNAL B1 : STD_LOGI

3、C;qSIGNAL Y1 : STD_LOGIC;qSIGNAL MUX_0 : STD_LOGIC;qSIGNAL MUX_1 : STD_LOGIC;qSIGNAL MUX_2 : STD_LOGIC;qSIGNAL MUX_3 : STD_LOGIC;qSIGNAL L: STD_LOGIC_VECTOR(1 DOWNTO 0);q qBEGINqA1= NOT A WHEN (NEG_A=1) ELSE A;qB1= NOT B WHEN (NEG_B=1) ELSE B;qY = NOT Y1 WHEN (NEG_Y=1) ELSE Y1;q MUX_0 = A1 AND B1;q

4、MUX_1 = A1 OR B1;q MUX_2 = A1 XOR B1;q MUX_3 = A1 XNOR B1;q L = L1 & L0;qwith (L) selectq Y1 TEST_NEG_A,qNEG_B = TEST_NEG_B,qNEG_Y = TEST_NEG_Y,qA = TEST_AB(1),qB = TEST_AB(0),qL1 = TEST_SEL(1),qL0 = TEST_SEL(0),qY = TEST_Y); 7FPGA系统设计系统设计qTESTING: processqbeginqTEST_NEG_A=0;qTEST_NEG_B=0;qTEST_

5、NEG_Y=0;qTEST_AB=00;qTEST_SEL=00;qfor I in 0 to 3 loopqfor J in 0 to 3 loopqwait for 10 ns;qTEST_AB=TEST_AB+01;qend loop;qTEST_SEL=TEST_SEL+01;qend loop; 8FPGA系统设计系统设计q- Inputs NegatedqTEST_NEG_A=1;qTEST_NEG_B=1;qTEST_NEG_Y=0;qTEST_AB=00;qTEST_SEL=00;qfor I in 0 to 3 loopqfor J in 0 to 3 loopqwait f

6、or 10 ns;qTEST_AB=TEST_AB+01;qend loop;qTEST_SEL=TEST_SEL+01;qend loop;q end process TESTING;qend MLU_TB_ARCHITECTURE; 9FPGA系统设计系统设计 10FPGA系统设计系统设计VHDLVerilogEntity和和Architecture声明声明Module声明信号声明信号声明信号声明实例化顶层设计实例化顶层设计实例化顶层设计提供激励提供激励提供激励 11FPGA系统设计系统设计VHDL的testbenchqlibrary ieee; quse ieee.std_logic_1

7、164.all; qentity test_bench is -测试平台文件的空实体(不需要端口定义) qend test_bench; qarchitecture tb_behavior of test_bench is q component entity_under_test -被测试元件的声明 q port( q list-of-ports-theri-types-and-modes q ); q end component; qbegin q instantiation:entity_under_test port map q ( q port-associations q ); q

8、 q process() -产生时钟信号 q q end process; q q process() -产生激励源 q q end process; qend tb_behavior; 12FPGA系统设计系统设计Verilog HDL的Testbenchqtimescale 1 ns / 1 ps / 时间精度和刻度qmodule test_bench;qDUT输入信号定义; / DUT输入信号一般定义为reg类型qDUT输出信号定义; / DUT输出信号一般定义为wire类型q.q待测模块 dut(端口映射); / 待测module实例化q.qinitial beginq/ 定义相关信号

9、初始值或者定义时钟复位等控制信号q/ 监测、添加约束等qendq.qalways / 处理相关需要变化的值q.qendmodule 13FPGA系统设计系统设计产生时钟信号qVHDL:q- Declare a clock period constant.qConstant ClockPeriod : TIME := 10 ns;q- Clock Generation method 1:qClock = not Clock after ClockPeriod / 2;q- Clock Generation method 2:qGENERATE CLOCK: processqbeginqwait

10、for (ClockPeriod / 2)qClock = 1;qwait for (ClockPeriod / 2)qClock = 0;qend process; 14FPGA系统设计系统设计q Verilog:q / Declare a clock period constant.q Parameter ClockPeriod = 10;q / Clock Generation method 1:q initial beginq Clock = 0;q forever Clock = #(ClockPeriod / 2) Clock;q endq / Clock Generation m

11、ethod 2:q always #(ClockPeriod / 2) Clock = Clock; 15FPGA系统设计系统设计提供激励信号q 在testbench中使用并行激励模块提供必要的激励。激励的产生可以采用两个方法:绝对时间激励和相对时间激励。绝对时间激励依据相对仿真时间开始点的设定延时来执行语句。而相对时间激励先提供初始值,然后等待一个事件来重新触发激励,具体延时是不确定的。根据设计者的需要,两种方法可以在testbench中同时使用。下面的程序段是绝对时间激励的例子。initial beginreset = 1;load = 0;cout_updn = 0;#100 reset

12、 = 0;#20 load = 1;#20 count_updn = 1;end 16FPGA系统设计系统设计q下面的程序段是相对时间激励的例子。qalways (posedge clock)qtb_count = tb_count + 1;q qinitial beginqif(tb_count = 5)qbeginqreset = 1;qload = 0;qcount_updn = 0;qendqelseqbeginq reset = 0;qload = 1;qcount_updn = 1;qendqendq qinitial beginq if(count = 1100) beginqc

13、ount_updn = 0;q$display(“Terminal count Reached,now counting down”);q endqend 17FPGA系统设计系统设计显示结果显示结果q 在Verilog中可以非常方便地使用关键字$display和$monitor显示结果。VHDL没有等效的显示指令,它提供了std_textio标准文本输入输出程序包。它允许文件的i/o重定向到显示终端窗口。下面是verilog示例,它将在终端屏幕上显示一些值。 q initial beginq $timeformat(-9,1,ns,12);q $display( Time Clk Rst L

14、d SftRg Data Sel);q $monitor(%t %b %b %b %b %b %b, $realtime,q clock, reset, load, shiftreg, data, sel);q end 18FPGA系统设计系统设计q $display在终端屏幕上输出引用的附加说明文字。$monitor操作不同,因为它的输出是事件驱动的。例中的变量$realtime(由用户赋值为当前的仿真时间)用于触发信号列表中值的显示。信号表由变量$realtime开始,跟随其它将要显示的信号名(clock, reset, load等)。以%开始的关键字包含格式描述列表,用来控制如何格式化显

15、示信号列表中的每个信号的值。格式列表是位置确定的。每个格式说明有序地与信号列表中的信号顺序相关。比如%t说明规定了$realtime的值是时间格式,%b说明符格式化clock的值是二进制形式。 19FPGA系统设计系统设计qmodule shift_reg (clock, reset, load, sel, data, shiftreg);qinput clock;qinput reset;qinput load;qinput 1:0 sel;qinput 4:0 data;qoutput 4:0 shiftreg;qreg 4:0 shiftreg;qalways (posedge cloc

16、k)qbeginqif (reset)qshiftreg = 0;qelse if (load)qshiftreg = data;qelseqcase (sel)q2b00 : shiftreg = shiftreg;q2b01 : shiftreg = shiftreg 1;qdefault : shiftreg = shiftreg;qendcaseqendqendmodule 20FPGA系统设计系统设计qmodule testbench; / declare testbench nameqreg clock;qreg load;q qreg reset; / declaration o

17、f signalsqwire 4:0 shiftreg;qreg 4:0 data;qreg 1:0 sel;q/ instantiation of the shift_reg design belowqshift_reg dut(.clock (clock),q.load (load),q.reset (reset),q.shiftreg (shiftreg),q.data (data),q.sel (sel);q/this process block sets up the free running clockqinitial beginqclock = 0;qforever #50 cl

18、ock = clock;qend 21initial begin/ this process block specifies the stimulus.reset = 1;data = 5b00000;load = 0;sel = 2b00;#200reset = 0;load = 1;#200data = 5b00001;#100sel = 2b01;load = 0;#200sel = 2b10;#1000 $stop;endinitial begin/ this process block pipes the ASCII results to the/terminal or text e

19、ditor$timeformat(-9,1,ns,12);$display( Time Clk Rst Ld SftRg Data Sel);$monitor(%t %b %b %b %b %b %b, $realtime,clock, reset, load, shiftreg, data, sel);endendmoduleFPGA系统设计系统设计q 以上的testbench首先实例化shift_reg,然后设置时钟,提供激励信号。所有的进程块在仿真时间零点开始。标记(#)说明下一个激励作用前的延迟。$stop命令使仿真器停止测试仿真(所有测试设计中都应该包含一个停止命令)。最后,$mon

20、itor语句返回ASCII格式的结果到屏幕或者管道输出到一个文本编辑器。 22FPGA系统设计系统设计自动验证q 推荐自动实现测试结果的验证,尤其是对于较大的设计来说。自动化减少了检查设计是否正确所要求的时间,也使人可能的犯错最少。q 一般有以下几种常用的自动测试验证的方法:1、数据库比较(database comparison)。首先,要创建一个包含预期输出的数据库文件。然后,仿真输出被捕获并与预期输出数据库文件中参考的向量比较。然而,由于没有提供从输出到输入文件指针,使得很难跟踪一个导致错误输出的来源,是这种方法的一个缺点。2、波形比较(waveform comparison)。波形比较可

21、以自动或是手动的运行。自动的方法使用一个testbench比较器来比较预期输出波形与测试输出波形。3、自我检查测试平台(self-checking testbenches)。自我检查testbench检查预期的结果与运行时的实际结果。因为有用的错误跟踪信息可以内建在一个测试设计中,用来说明哪些地方设计有误,调试时间可以非常明显地缩短。 23FPGA系统设计系统设计编写testbench的准则q在编写在编写testbench前要了解仿真器前要了解仿真器虽然通用仿真工具兼容HDL工业标准,但标准并没有重点强调跟仿真相关的一些主题。不同的仿真器有不同的特点、功能和执行效率。 q避免使用无限循环避免使

22、用无限循环当一个事件添加到基于事件的仿真器,CPU和内存的占用率就大大增加了,仿真过程就会变慢。除非对于testbench非常关键,无限循环不应该用作设计的激励。一般地,只有时钟被描述成一个无限循环(如forever循环)。 q拆分激励到逻辑模块拆分激励到逻辑模块 在测试中,所有initial块(verilog)并行执行。如果无关的激励被分离到独立的块中,测试激励的顺序会变得更容易实现和检查。因为每个并行的块从仿真时间的零点开始执行,对于分离的块传递激励更容易。使用分离激励块使得testbench的建立,维护和升级更加容易。 q避免显示并不重要的数据避免显示并不重要的数据大型设计的测试可能包含

23、10万以上的事件或匿名信号。显示大量的仿真数据会很大程度上降低仿真速度。 24FPGA系统设计系统设计仿真工具Modelsimq Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件,接下来以一个简单的例子介绍Modelsim的基本使用方法。 25FPGA系统设计系统设计qmod

24、ule testbench();q logic clk;q logic a, b, y;q logic 2:0 vectors4:0, currentvec;q logic 3:0 vectornum, errors;q q / The device under testq nand2 dut(a, b, y);q q / read test vector file and initialize testq initial beginq $readmemb(nand2-vectors.txt, vectors);q vectornum = 0; errors = 0;q endq / generate a clock to seq

温馨提示

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

评论

0/150

提交评论