我有一些VHDL,其中泛型与导入包中的常量同名。 NCSIM似乎使用了包中的常量值而不是泛型。
我可以通过某种方式强制范围获取泛型,而不是重命名泛型。
答案 0 :(得分:2)
可以使用包名或实体名限定标识符以进行指定 应该使用哪些重叠标识符。例如与 代码:
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
避免污染,然后强制限定名称以引用包中的标识符,除非该方法不实用。