riple

Stay Hungry, Stay Foolish.

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

0
阅读(4890)

可观测性和可控制性是对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;