我有一些 VHDL,其中泛型与导入包中的常量同名。NCSIM 似乎使用包中的常量值而不是泛型。
与其重命名泛型,还有一种方法可以强制范围选择泛型。
我有一些 VHDL,其中泛型与导入包中的常量同名。NCSIM 似乎使用包中的常量值而不是泛型。
与其重命名泛型,还有一种方法可以强制范围选择泛型。
标识符可以用包或实体名称进行限定,以指定应使用哪些重叠标识符。例如使用代码:
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
,然后强制使用限定名称来引用包中的标识符,除非这种方法不切实际。