levi 发布于 2007-2-9 1:15:54
我的一点小经验 之2
介绍testbench的设计方法,最好是用实例来说明。附件里面提供了我编写的一个小的程序。
包括如下文件: (1) cnt4: 4位计数器 (2) testbench: 测试模块。 cnt4定义为: entity cnt4 is port(reset, clock, clocken: in STD_LOGIC; qout: out STD_LOGIC_VECTOR(3 downto 0) ); end cnt4; 波形为: 为了测试cnt4这个实体,采用了一个testbench实体专用作测试cnt4之用。定义很简单: entity testbench is end testbench;
可以看到,定义里面是空的。当然也可以不是空的。根据需要吧。 先看看testbench的仿真结果,也用波形描述: 可以看到,上面两张图,描述的是同一个计数器功能,只是变量表示不太一样。 下面介绍testbench的实现原理。 (1)需要定义测试向量表,test_vector_list即是(请参考源代码,以下略)。 (2)定义待测元件: component cnt4 is port(reset, clock, clocken: in STD_LOGIC; qout: out STD_LOGIC_VECTOR(3 downto 0) ); end component; (3)待测元件实例化 u1: cnt4 port map(reset => reset, clocken => clocken, clock => clock, qout => qout); (4)顺序读出测试向量表 reset <= test_vector_list(index).reset; clocken <= test_vector_list(index).clocken; clock <= test_vector_list(index).clock; q_var := test_vector_list(index).qout; (5)激活计数器: wait for 10ns; (6)校验 ASSERT qout = q_var report "invalid state" severity Warning; ok 以上只是testbench实现的方法之一,还有多种实现方法,以后有机会再描述。
「该帖子被 levi 在 2007-2-10 0:14:58 编辑过」 天上人间 发布于 2007-11-9 20:33:12
好东东呀,我喜欢,学习中 |