返回介绍

18.2.1 引用包中的数据

发布于 2020-09-09 22:55:54 字数 1057 浏览 928 评论 0 收藏 0

为了在包被导入的作用域内能够识别包中定义的项目,包必须存在。

使用一个包中所作声明的一种方法是使用域解析操作符“::”进行引用。

ComplexPkg::Complex cout = ComplexPkg::mul(a, b);

使用包声明的另外一个方法是通过import语句。

data_declaration ::=        // 引用自附录A.2.1.3
    ...
  | package_import_declaration

package_import_declaration ::=
    import package_import_item {, package_import_item};

package_import_item ::=
    package_identifier :: identifier
  | package_identifier :: *

语法 18-2 — 包导入语法(摘录自附录A)

import语句为包内的标识符提供了直接的可视性。它使得在包内声明的标识符能够不需要一个包名字限定符就可以在当前的作用域内可见。SystemVerilog提供了两种格式的导入语句:显式导入和通配导入。显式导入能够精确地控制哪些符号被导入:

import ComplexPkg::Complex;
import ComplexPkg::add;

如果被导入的标识符已经在相同的作用域内被声明或者已经显式地从另外一个包中被导入,那么这个显式导入是非法的,但SystemVerilog允许从相同的包中多次导入一个标识符。

通配导入使得一个包内声明的所有标识符都被导入,只要标识符在导入作用域内没有被定义:

import ComplexPkg::*;

通配导入使得包内的每一个标识符都成为导入的候选者。每一个这样的标识符只有当它在导入作用域内被引用并且它既没有被声明也没有被显式地导入作用域的时候才被导入。类似地,一个标识符的通配导入会被相同作用域内相同标识符的后续声明所过载。如果相同的标识符被从两个不同的包通配导入到一个作用域,那么这个标识符应该在作用域是未定义的,并且如果标识符被使用的话会导致一个错误。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文