编写高效的测试设计(testbenches) - 图文 联系客服

发布时间 : 星期一 文章编写高效的测试设计(testbenches) - 图文更新完毕开始阅读df9935f7f90f76c661371a55

end endmodule

以上的测试设计实例化设计,设置时钟,提供激励信号。所有的进程块在仿真时间零点开始。英镑标记(#)说明下一个激励作用前的延迟。$stop命令使仿真器停止测试仿真(所有测试设计中都应该包含一个停止命令)。最后,$monitor语句返回ascII格式的结果到屏幕或者管道输出到一个文本编辑器。接后的是一个vhdl描述的的测试设计,它实例化设计并提供激励到上述用verilog描述的移位寄存器. VHDL 测试设计示例:

library IEEE;

use IEEE.std_logic_1164.all; entity testbench is end entity testbench;

architecture test_reg of testbench is component shift_reg is port (clock : in std_logic;

reset : in std_logic; load : in std_logic;

sel : in std_logic_vector(1 downto 0);

data : in std_logic_vector(4 downto 0); shiftreg : out std_logic_vector(4 downto 0)); end component;

signal clock, reset, load: std_logic;

signal shiftreg, data: std_logic_vector(4 downto 0); signal sel: std_logic_vector(1 downto 0); constant ClockPeriod : TIME := 50 ns; begin

UUT : shift_reg port map (clock => clock, reset => reset,

load => load, data => data, shiftreg => shiftreg); process begin

clock <= not clock after (ClockPeriod / 2); end process; process begin reset <= ’1’; data <= \load <= ’0’; set <= \wait for 200 ns; reset <= ’0’;

load <= ’1’; wait for 200 ns; data <= \wait for 100 ns; sel <= \load <= ’0’; wait for 200 ns; sel <= \wait for 1000 ns; end process;

end architecture test_reg;

上述vhdl测试设计与之前提到的verilog测试设计的功能是相似的,如希望用一个命令来返回输出到终端。在vhdl中,std_textio程序包被用于在终端上显示信息,它将被搁到下一节说明。

自动验证

推荐自动实现测试结果的验证,尤其是对于较大的设计来说。自动化减少了检查设计是否正确所要求的时间,也使人可能的犯错最少。

一般有以下几种常用的自动测试验证的方法:

1、数据库比较。首先,要创建一个包含预期输出(一个黄金向量文件)的数据库文件。然后,仿真输出被捕获并与黄金向量文件中参考的向量比较(在unix中的diff 工具可以用来比较ascii数据文件)。然而,因为从输出到输入文件指针没有提供,是这种方法的一个缺点,使得跟踪一个导致错误输出的原因比较困难。

2、波形比较。波形比较可以自动或是手动的运行。自动的方法使用一个测试比较器来比较黄金波形与测试输出波形。xilinx的hdl bencher工具可以用于执行一个自动波形比较(关于hdl bencher的相关信息,请参看

http://www.xilinx.com/products/software/statecad/index.htm)

3、自较验测试。一个自较验测试检查预期的结果与运行时间的实际结果,并不是在仿真结束以后。因为有用的错误跟踪信息可以内建在一个测试设计中,用来说明哪些地方设计有误,调试时间可以非常明显地缩短。更多的关于自较验测试的信息在下一节说明。

自较验测试