编写高效的测试设计(testbenches)

上传人:自*** 文档编号:80993167 上传时间:2019-02-20 格式:DOC 页数:33 大小:404.51KB
返回 下载 相关 举报
编写高效的测试设计(testbenches)_第1页
第1页 / 共33页
编写高效的测试设计(testbenches)_第2页
第2页 / 共33页
编写高效的测试设计(testbenches)_第3页
第3页 / 共33页
编写高效的测试设计(testbenches)_第4页
第4页 / 共33页
编写高效的测试设计(testbenches)_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《编写高效的测试设计(testbenches)》由会员分享,可在线阅读,更多相关《编写高效的测试设计(testbenches)(33页珍藏版)》请在金锄头文库上搜索。

1、编写高效的测试设计(testbenches)中国半导体设备及材料网整理 更多教程请访问:Writing Efficient Testbenches编写高效的测试设计(testbenches)原文作者:Mujtaba Hamid注:一个设计的测试验证是非常重要的。有效的测试可以助我们快速的完成或改善设计。Testbenches建议编写有效的测试代码来通过软件实现可靠的验证。无意中发现,顺手译为中文,以备将来方便。也贴给没有找到更好中文版本的同道人。Testbenches本意应该是测试平台更合理,但是在中文中阅读起来很不舒服。所以本文中有时译为“测试设计”,“测试代码”,有时干脆是“测试”。摘要:

2、应用笔记为HDL验证设计的新手,或者是没有丰富的测试设计经验的逻辑设计者而编写。测试设计是验证HDL设计的主要手段。本应用笔记为创建或准备和构建有效的测试设计提供准则。它也提供一个为任何设计开发自较验测的测试设计的一个代数方法。涉及的所有设计文件可以从以下的站点获得:PC: ftp:/ ftp:/ (High-Level Language) 的标准方法。典型的,测试设计完成以下任务:实现测试设计;仿真通过使用模块的测试向量来仿真测试设计;输出结果到终端或波形窗口以检视;可选择的将实际结果和预期结果进行比较。一般测试设计使用工业标准的VHDL或verilog硬件描述语言来编写。测试设计调用功能设

3、计,然后仿真。复杂的测试设计完成一些附加的功能-如它们包含逻辑来为设计决定适当的设计激励或比较实际结果和预期结果。后续的章节说明了一个非常稳定的测试设计的结构,并且提供了一个自较验测例子-它将自动比较实际结果和测试设计的预期结果。图1说明一个基于以上基本要求的标准的hdl验证流程。由于测试设计使用VHDL或verilogHDL来描述,测试设计的验证过程可以在不同的平台或不同公司的软件工具环境完成。另外,由于VHDL或verilogHDL是公开的通用标准语言,使用VHDL或verilogHDL来描述验证设计可以毫无困难的在将来重用。图1使用测试设计的HDL测试验证流程构建测试设计:测试设计可以用

4、VHDL或verilogHDL来描述.因为测试设计只用来进行仿真,它们没有那些适应综合中仅应用的rtl语言子集的语法约束的限制.而是所有的行为结构都可以使用。从而测试设计可以编写的更为通用,使得它们可以更容易维护。所有的测试设计包含了如表1的基本程序段块。正如上面所提到的,测试设计一般包含更多的附加功能,如在终端上可视的结果和内建的错误检测。表1 测试设计的基本程序段下面的例子说明经常使用的测试设计的结构。产生时钟信号使用系统时钟来的时序逻辑设计必须产生时钟。重复的时钟信号可以很容易的在vhdl或verilog源码中实现。以下是vhdl和verilog的时钟发生示例。VHDL:- Declar

5、e a clock period constant.Constant ClockPeriod : TIME := 10 ns;- Clock Generation method 1:Clock = not Clock after ClockPeriod / 2;- Clock Generation method 2:GENERATE CLOCK: processbeginwait for (ClockPeriod / 2)Clock = 1;wait for (ClockPeriod / 2)Clock = 0;end process;Verilog:/ Declare a clock per

6、iod constant.Parameter ClockPeriod = 10;/ Clock Generation method 1:initial beginforever Clock = #(ClockPeriod / 2) Clock;end/ Clock Generation method 2:initial beginalways #(ClockPeriod / 2) Clock = Clock;end准备激励信号为了获得测试设计的验证结果,激励必须在测试设计中提供。在测试设计中使用的并行激励块提供必要的激励。两个方法被考虑:绝对时间激励和相对时间激励。在第一个方法里,仿真变量被详

7、细描述为相对于仿真时间零点。通过比较,相对时间激励提供初始值,然后在重触发激励前等待一个事件。根据设计者的需要,两种方法可以在测试设计中组合使用。表2绝对时间激励表2和表3分别以vhdl和verilog提供了一个绝对时间激励和相对时间激励的源代码。表3相对时间激励VHDL进程块和Verilog初始块与设计文件中的其他的进程块或初始块同时执行。然而,在每一个进程块或初始块中,事件是按照书写的顺序有序的规划的。这说明在仿真时间零点并发的每一个块激励的顺序。多模块应该被用来将复杂的激励顺序分解为有更好的可读性和方便维护的代码。显示结果在verilog中推荐使用关键字$display 和 $monit

8、or 显示结果。虽然vhdl没有等效的显示指令,它提供了std_textio标准文本输入输出程序包。它允许文件的i/o重定向到显示终端窗口(作为这个技术的示例,参看下面的自较验查验证设计)下面是verilog示例,它将在终端屏幕上显示一些值。/ pipes the ASCII results to the terminal or text editorinitial begin$timeformat(-9,1,ns,12);$display( Time Clk Rst Ld SftRg Data Sel);$monitor(%t %b %b %b %b %b %b, $realtime,clo

9、ck, reset, load, shiftreg, data, sel);end关键字 $display在终端屏幕上输出引用的附加的说明文字(“。”).关键字$monitor操作不同。因为它的输出是事件驱动的。例中的变量$realtime(由用户赋值到当前的仿真时间)用于触发信号列表中值的显示。信号表由变量 $realtime开始,跟随其他将要显示的信号名(clock, reset, load等)。以%开始的关键字包含一个格式描述的表,用来控制如何格式化显示信号列表中的每个信号的值。格式列表是位置确定的。每个格式说明有序地与信号列表中的信号顺序相关。比如%t说明规定了$realtime的值是

10、时间格式。并且第一个%b说明符格式化clock的值是二进制形式。verilog提供附加的格式说明,比如%h用于说明十六进制,%d说明十进制,%c说明显示为八进制。(参见verilog准则了解完整的关键字及格式描述符)图2说明格式显示结果图2仿真结果返回结果简单的测试设计简单的测试设计实例化用户设计,然后提供相应的激励。测试输出被图形化显示在仿真器的波形窗口里或者作为文本发送到用户的终端或者是管道输出文本。以下是一个简单的用Verilog实现的设计,它实现了一个移位寄存器的功能。module shift_reg (clock, reset, load, sel, data, shiftreg);

11、input clock;input reset;input load;input 1:0 sel;input 4:0 data;output 4:0 shiftreg;reg 4:0 shiftreg;always (posedge clock)beginif (reset)shiftreg = 0;else if (load)shiftreg = data;elsecase (sel)2b00 : shiftreg = shiftreg;2b01 : shiftreg = shiftreg 1;default : shiftreg = shiftreg;endcaseendendmodule

12、以下是简单的测试设计示例移位寄存器设计的例子,verilog描述。module testbench; / declare testbench namereg clock;reg load;reg reset; / declaration of signalswire 4:0 shiftreg;reg 4:0 data;reg 1:0 sel;/ instantiation of the shift_reg design belowshift_reg dut(.clock (clock),.load (load),.reset (reset),.shiftreg (shiftreg),.data

13、 (data),.sel (sel);/this process block sets up the free running clockinitial beginclock = 0;forever #50 clock = clock;endinitial 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 = 2

14、b10;#1000 $stop;endinitial begin/ this process block pipes the ASCII results to the/terminal or text editor$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);endendmodule以上的测试设计实例化设计,设置时钟,提供激励信号。所有的进程块在仿真时间零点开始。英镑标记(#)说明下一个激励作用前的延迟。$stop命令使仿真器停止测试仿真(所有测试设计中都应该包含一个停止命令)。最后,$mon

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号