多个VHDL包中常量同名,如何选择正确的常量?

Qua*_*xE7 1 vhdl

我使用 TCL 脚本为每个子模块存储库生成一个 VHDL pkg,该存储库存储子模块的编译日期时间和 git 哈希值。存储 32 位 git hash 的常量称为 MAIN_GIT_HASH,是一个 std_logic_vector。

我现在有多个包,它们都包含一个名为 MAIN_GIT_HASH 的常量,我需要使用 VHDL“use”指令将它们包含到同一个源文件中。现在的问题是,从每个包中选择正确常量的正确方法是什么,因为只写“MAIN_GIT_HASH”会产生歧义?

Jim*_*wis 6

每个包要么需要有唯一的名称,要么需要分析到单独的库中。

如果您使用单独的库,则只需使用包路径引用它:

library Submodule1 ; 
use Submodule1.HashPkg.MAIN_GIT_HASH ;  -- just get the relevant constant
Run Code Online (Sandbox Code Playgroud)

如果设计需要引用多个 HashPkg(如您的用例),那么您可以使用与上面相同的符号来引用常量:

HashReg <= Submodule1.HashPkg.MAIN_GIT_HASH ;
Run Code Online (Sandbox Code Playgroud)

如果您使用唯一命名的包,那么它们可以全部放入同一个库中。假设该库与您正在编译当前设计单元的库相同,那么您可以在工作中引用它:

use work.Submodule1HashPkg.MAIN_GIT_HASH ;
. . . 
HashReg <= work.Submodule1HashPkg.MAIN_GIT_HASH ;
Run Code Online (Sandbox Code Playgroud)