假设我有两个包:
package_1
和package_2
以及一个实体:my_entity
。
实体使用第一个包
-- This is my_entity
USE WORK.package_1.ALL;
package_1 使用第二个包;
-- This is package_1
USE WORK.package_2.ALL;
package_2 实现了一个名为 ...
my_procedure
(y) 的过程
-- This is package_2
PROCEDURE my_procedure IS ...
现在有办法从
my_procedure
打电话给my_entity
吗?当前版本无法在 Modelsim 中编译。
您的实体还需要参考:
USE WORK.package_2.ALL;
在VHDL中,包引用是指库中的已编译映像,并且仅获取包的相应声明部分中的内容。 IE:与 C 不同,它不会从包引用的包中获取任何内容。
这很好,因为它有助于隔离声明 - 只包含您需要的内容,这就是您得到的全部。
从 @user1818839 的注释中,您可以通过执行以下操作使 my_procedure 可见:
USE work.package_2.my_procedure;
或者,如果您想在引用 package_1 时访问 my_procedure,那么别名也可以很好地工作:
alias my_procedure is work.package_2.my_procedure[TypeOfParam1];
有关此示例,请参阅 std_logic_textio 的 VHDL-2008 版本,它别名为 std_logic_1164(没有歧义,因为它们是相同的过程)。