通过VHDL中的不同包进行过程调用

问题描述 投票:0回答:1

假设我有两个包:

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 中编译。

vhdl
1个回答
2
投票

您的实体还需要参考:

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(没有歧义,因为它们是相同的过程)。

© www.soinside.com 2019 - 2024. All rights reserved.