VHDL - Testbench内部信号

时间:2016-02-03 23:12:23

标签: vhdl modelsim quartus

我花了一些时间学习编写测试台来试用我制作的一些模型。有没有人知道监视被测单元架构内部信号的方法。我尝试过使用

LIBRARY MODELSIM_LIB;
USE MODELSIM_LIB.UTIL.ALL;
    spy_process : process begin
        init_signal_spy("Q4/C1/A1/chip_sel","/chip_sel",1);
        wait;
        end process spy_process;

但是我收到了编译错误:

  

错误(10481):Q4.vhd(15)处的VHDL Use Clause错误:设计库“MODELSIM_lib”不包含主要单元“util”

我检查了Quartus II库文件夹,util在正确的位置。 有什么建议? 谢谢D

2 个答案:

答案 0 :(得分:2)

当您开始模拟时,Quartus 会分析项目设置中指定的所有文件(可通过菜单Assignment - > Settings - > Files访问)。但是,它仅详细阐述了从顶级实体开始的DUT所需的实体(请参阅菜单分配 - >设置 - >常规)以找出哪些设计文件(不包括测试平台)是模拟所必需的。 有关详细信息,请参阅my other answer

MODELSIM_LIB仅由ModelSim找到,而不是由Quartus找到。因此,Quartus-II无法分析您的testbench文件,并在问题中发布了错误。但这实际上并不是必需的,因为它(应该)只包含测试平台代码。因此:

  1. 通过菜单Project - >从Quartus项目中删除此testbench文件。 "在项目中添加/删除文件..."和
  2. 仅在通过菜单Assignment - >可访问的模拟设置中添加此文件。设置 - >模拟 - >编译测试台 - >测试台 - >新建/编辑。

答案 1 :(得分:1)

大概你正在使用Modelsim来模拟,在这种情况下你不需要在VHDL中使用信号间谍,这里有一个例子(原谅任何语法错误)... < / p>

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity my_testbench is

end my_testbench;

architecture behavioral of my_testbench is

    signal spy_blob : std_logic := '0';

begin

    my_entity : entity work.my_entity(rtl)
        port map(
            ...
            );

    spy_blob <= << signal .my_testbench.my_entity.w_blob : std_logic >>;

    my_monitor : process(w_clk)
    begin
        if(rising_edge(w_clk)) then
            if(spy_blob = '1') then
                -- do something
            end if;
        end if;
    end process;

end behavioral;

注意:这适用于Quartus / Modelsim包的V13。