我花了一些时间学习编写测试台来试用我制作的一些模型。有没有人知道监视被测单元架构内部信号的方法。我尝试过使用
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
答案 0 :(得分:2)
当您开始模拟时,Quartus 会分析项目设置中指定的所有文件(可通过菜单Assignment - > Settings - > Files访问)。但是,它仅详细阐述了从顶级实体开始的DUT所需的实体(请参阅菜单分配 - >设置 - >常规)以找出哪些设计文件(不包括测试平台)是模拟所必需的。 有关详细信息,请参阅my other answer。
库MODELSIM_LIB
仅由ModelSim找到,而不是由Quartus找到。因此,Quartus-II无法分析您的testbench文件,并在问题中发布了错误。但这实际上并不是必需的,因为它(应该)只包含测试平台代码。因此:
答案 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。