Modelsim / Questasim: Неизвестная сущность ‹entity_name›. Использовать развернутое имя

Я использую QuestaSim, который предположительно совпадает с ModelSim, но 64-разрядный. Я пытаюсь запустить тестовый стенд для завтрашнего задания в классе. Задание выполнено, и все, что мне нужно, это испытательный стенд, но 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 я не могу опубликовать, потому что он должен быть отправлен для выполнения задания, и я не хочу, чтобы меня обвиняли в плагиате, но я знаю, что сущность lab1a наверняка существует в этом файле, и я делаю обязательно сначала скомпилируйте этот файл (хотя на всякий случай я пробовал и наоборот).

В дополнение к стандартному выбору файлов и запуску компиляции я также пробовал следующее:

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

Оба вызывают одну и ту же ошибку.

Если кто-нибудь из вас знает, почему я получаю сообщение об ошибке, выделенное в заголовке, дайте мне знать. Мне кажется, что это невероятно простое решение, и в настоящее время я проклинаю дизайнеров указанного продукта за то, что они сделали его настолько неинтуитивным.


person PowerOfKaishin    schedule 03.02.2015    source источник


Ответы (1)


Я создал фиктивную сущность / архитектуру для lab1a, которая ничего не делает, но имеет надлежащие возможности подключения.

Непосредственная проблема, почему он не будет «анализировать», заключается в том, что объект lab1a не становится видимым для test_bench.

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

должно быть

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

или вы должны сделать содержимое вашего рабочего каталога видимым в предложении контекста, добавив предложение использования:

use work.all;  -- or some variant form

После реализации выбранного имени (work.lab1a, расширенное имя является формой выбранного имени, см. IEEE Std 1076-2008, 8.3 Выбранные имена, параграф 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 Std 1076-2008. 1.3.2 Синаптическое описание, е):

Скобки заключают повторяющийся элемент или элементы в правой части производства. Элементы могут появляться ноль или более раз; повторения происходят слева направо, как с эквивалентным правилом левой рекурсии.

Текст расширенной формы Бэкуса-Наура в пронумерованных разделах стандарта является нормативным.

И есть еще одно решение - использование объявления компонента и создания экземпляра компонента вместо прямого создания экземпляра сущности.

Это будет рассчитывать на указание привязки по умолчанию, чтобы найти ранее проанализированный lab1a во время разработки. (7.3.3 Индикация привязки по умолчанию).

person Community    schedule 03.02.2015