Заставить VHDL использовать общий над константой

У меня есть несколько VHDL, где универсальный это то же имя, что и константа в импортированном пакете. NCSIM, кажется, использует значение константы из пакета вместо универсального.

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

1 ответ

Решение

Идентификатор может быть дополнен именем пакета или объекта, чтобы указать, какой из перекрывающихся идентификаторов следует использовать. Например с кодом:

package pkg is
  constant CONST : integer := 17;
end package;

...

use work.pkg;
use work.pkg.all;

entity mdl is
  generic(
    CONST : integer := 42);
end entity;

architecture sim of mdl is
begin
  process is
  begin
    report "CONST = " & integer'image(CONST);
    report "pkg.CONST = " & integer'image(pkg.CONST);
    report "mdl.CONST = " & integer'image(mdl.CONST);
    wait;
  end process;
end architecture;

Результат с ModelSim:

# ** Note: CONST = 42
# ** Note: pkg.CONST = 17
# ** Note: mdl.CONST = 42

Однако проблема возникает из-за "загрязнения" пространства имен use work.pkg.allТаким образом, более чистое решение состоит в том, чтобы избежать загрязнения в первую очередь use work.pkg, а затем принудительно указывать квалифицированные имена для ссылок на идентификаторы в пакете, за исключением случаев, когда такой подход непрактичен.

Другие вопросы по тегам