强制VHDL在常量上使用泛型

强制VHDL在常量上使用泛型,vhdl,register-transfer-level,Vhdl,Register Transfer Level,我有一些VHDL,其中泛型与导入包中的常量同名。NCSIM似乎在泛型上使用包中的常量值 我没有重命名泛型,而是有一种方法可以强制作用域拾取泛型 标识符可以用包或实体名称限定,以便指定 应该使用哪些重叠标识符。例如 代码: ModelSim的结果是: # ** Note: CONST = 42 # ** Note: pkg.CONST = 17 # ** Note: mdl.CONST = 42 然而,这个问题源于使用对名称空间的“污染” work.pkg.all,因此一个更干净的解决方案是首先

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


我没有重命名泛型,而是有一种方法可以强制作用域拾取泛型

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

ModelSim的结果是:

# ** Note: CONST = 42
# ** Note: pkg.CONST = 17
# ** Note: mdl.CONST = 42
然而,这个问题源于
使用对名称空间的“污染”

work.pkg.all
,因此一个更干净的解决方案是首先使用
use work.pkg
避免污染,然后强制限定名称引用包中的标识符,除非该方法不实用。

删除行
use imported_package.all-用特定使用条款替换它
使用导入的\u package.foo除了泛型之外的其他项目,使用限定名<代码> x:=导入包。FoO < /代码>代替基本名称,或者将使用子句保持在您需要的地方而不是泛型的地方。尝试使用更精确的语言,并考虑提供示例的情况。我希望泛型声明已经位于上下文子句后面的内部声明区域中。
# ** Note: CONST = 42
# ** Note: pkg.CONST = 17
# ** Note: mdl.CONST = 42