Заставить 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
, а затем принудительно указывать квалифицированные имена для ссылок на идентификаторы в пакете, за исключением случаев, когда такой подход непрактичен.