2

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

与其重命名泛型,还有一种方法可以强制范围选择泛型。

4

1 回答 1

3

标识符可以用包或实体名称进行限定,以指定应使用哪些重叠标识符。例如使用代码:

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,然后强制使用限定名称来引用包中的标识符,除非这种方法不切实际。

于 2014-06-16T11:24:19.380 回答