强制VHDL使用泛型超常量

时间:2014-06-16 10:50:46

标签: vhdl register-transfer-level

我有一些VHDL,其中泛型与导入包中的常量同名。 NCSIM似乎使用了包中的常量值而不是泛型。

我可以通过某种方式强制范围获取泛型,而不是重命名泛型。

1 个答案:

答案 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避免污染,然后强制限定名称以引用包中的标识符,除非该方法不实用。