riple

Stay Hungry, Stay Foolish.

采用Signal Spy增强VHDL的测试能力

0
阅读(3369)

可观测性和可控制性是对testbench的基本要求。与Verilog相比,VHDL语言缺少层次化路径访问的能力;但是在VHDL语言中可以通 过全局变量进行entity之间的通讯,这里的全局变量就是在package中定义的signal。在实际应用中,Verilog的层次化路径访问是真正 的“无损探测”;VHDL的全局变量更适合用于测试组件之间通信,不适于在DUT组件内部使用(需要在设计中添加测试专用的语句)。

最初发现Signal Spy这一功能,始于riple和“蔡晃悠”大哥的一段讨论。开始使用这一功能还是最近的事。

Signal Spy给VHDL语言增加了等价于Verilog语言的层次化路径访问能力,再加上VHDL语言的全局变量通信能力,VHDL似乎比Verilog更适合 用作HDL测试语言。

Signal Spy是Modelsim专用的工具,不是VHDL语言内置的特性。添加这一功能对Modelsim来说不是什么难事,因为不论是Verilog,还是 VHDL,在Modelsim编译后得到的数据库都是支持层次化路径访问的。

使用Signal Spy需要:

1. 包含modelsim_lib中的Util Package

library modelsim_lib;
use modelsim_lib.util.all;

2. 初始化Signal Spy

init_signal_spy( , , , )

炒一个栗子在此:

library ieee;
library modelsim_lib;
use ieee.std_logic_1164.all;
use modelsim_lib.util.all;

entity top is
end;

architecture only of top is
signal top_sig1 : std_logic;
begin
...
spy_process : process
begin
init_signal_spy("/top/uut/inst1/sig1","/top/top_sig1",1,1);
wait;\
end process spy_process;
...
spy_enable_disable : process(enable_sig)
begin
if (enable_sig = '1') then
enable_signal_spy("/top/uut/inst1/sig1","/top/top_sig1",0);
elseif (enable_sig = '0')
disable_signal_spy("/top/uut/inst1/sig1","/top/top_sig1",0);
end if;
end process spy_enable_disable;
...
end;

Baidu
map