Modelsim/Questasim:未知实体 <entity_name>。使用扩展名

Modelsim/Questasim: Unknown entity <entity_name>. Use expanded name

我正在使用 QuestaSim,它应该与 ModelSim 相同,但是是 64 位的。我正在尝试 运行 明天 class 到期的作业测试台。任务完成了,我只需要测试台,但 QuestaSim 像往常一样烦人。

出于某种原因,测试平台文件将无法编译。尽管我记得上次我在 ModelSim 上尝试过它,但我终究无法弄清楚为什么。

这是测试平台的代码。

library ieee;
use ieee.std_logic_1164.all;

entity test_bench is
end entity test_bench;

architecture lab1atest of test_bench is
signal  X, Y, M: std_logic_vector (7 downto 0);
signal  s: std_logic;
begin
dut : entity lab1a
port map ( X=>X, Y=>Y, s=>s, M=>M);

stimulus : process is
begin
X <= "10101010"; Y <= "01010101"; s <= '0'; wait for 20 ns;
s <= '1'; wait for 20 ns;
X <= "11110000"; wait for 20 ns;
s <= '0'; wait for 20 ns;
Y <= "00001111";
wait;
end process stimulus;
end architecture lab1atest;

lab1a.vhd的代码我不能post因为它要提交作业,我不想因为剽窃自己而被钉,但知道实体"lab1a" 肯定存在于该文件中,我确保首先编译该文件(尽管我已经尝试过其他方法,以防万一)。

除了标准的文件选择和点击编译外,我还尝试了以下方法:

vlib work;
vmap work work;
vcom lab1a.vhd;
vcom lab1atest.vhdl;
vsim work.lab1atest;

两者都产生相同的错误。

如果你们中的任何人知道为什么我会在标题中突出显示错误,请告诉我。我觉得这是一个非常简单的修复程序,我目前正在诅咒该产品的设计者,因为他们把它弄得如此不直观。

我为 lab1a 生成了一个虚拟 entity/architecture,它除了具有正确的连接性外什么都不做。

它不会 'analyze' 的直接问题是实体 lab1a 对 test_bench 不可见。

dut : entity lab1a
port map ( X=>X, Y=>Y, s=>s, M=>M);

应该是

dut: entity work.lab1a
    port map ( ...

或者您应该通过添加 use 子句使工作目录的内容在上下文子句中可见:

use work.all;  -- or some variant form

实施选定名称后(work.lab1a,扩展名称是选定名称的一种形式,参见 IEEE Std 1076-2008, 8.3 Selected names, paragraph 7)使用先前分析的 lab1a 分析代码:

library ieee;
use ieee.std_logic_1164.all;

entity lab1a is
    port (
        X:  in  std_logic_vector (7 downto 0);
        Y:  in  std_logic_vector (7 downto 0);
        s:  in  std_logic;
        M:  out std_logic_vector (7 downto 0)
    );
end entity;
architecture foo of lab1a is
begin
end architecture;

虚拟 lab1a 起作用的原因是架构不需要包含并发语句:

 architecture_body ::=
     architecture identifier of entity_name is
         architecture_declarative_part
     begin
         architecture_statement_part
     end [ architecture ] [ architecture_simple_name ] ;

 architecture_statement_part ::=
      { concurrent_statement }

IEEE 标准 1076-2008。 1.3.2 突触描述,f):

Braces enclose a repeated item or items on the right-hand side of a production. The items may appear zero or more times; the repetitions occur from left to right as with an equivalent left-recursive rule.

标准编号条款中的扩展巴科斯-诺尔范式文本是规范性的。

还有另一种解决方案,使用组件声明和组件实例化而不是直接实体实例化。

这将依赖于默认绑定指示,以在详细说明期间找到先前分析过的 lab1a。 (7.3.3 默认绑定指示)。