返回介绍

18.2 包

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

SystemVerilog包提供了额外的机制在多个SystemVerilog模块、接口和程序间共享参数、数据、类型、任务、函数、序列以及特性的声明。包是显式命名的作用域,它出现在源文本的最外层(与顶层模块和原语处于同一层次)。类型、变量、任务、函数以及特性都可以在一个包中声明。这些声明可以在模块、宏模块、接口、程序和其它包中通过导入或完整解析的名字来引用。

package_declaration ::=              // 引用自附录A.1.3
    {attribute_instance} package package_identifier;
        [timeunits_declaration] {{attribute_instance} package_item}
    endpackage [: package_identifier]

package_item ::=                    // 引用自附录A.1.10
    package_or_generate_item_declaration
  | specparam_declaration
  | anonymous_program
  | timeunits_declaration

package_or_generate_item_declaration ::=
    net_declaration
  | data_declaration
  | task_declaration
  | function_declaration
  | dpi_import_export
  | extern_constraint_declaration
  | class_declaration
  | class_constructor_declaration
  | parameter_declaration;
  | local_parameter_declaration
  | covergroup_declaration
  | overload_declaration
  | concurrent_assertion_item_declaration
  | ;

anonymous_program ::= program; {anonymous_program_item} endprogram

anonymous_program_item ::=
    task_declaration
  | function_declaration
  | class_declaration
  | covergroup_declaration
  | class_constructor_declaration
  | ;

语法18-1 — 包声明语法(摘录自附录A)

包声明产生了一个作用域,它包含了用于在一个或多个编译单元、模块、宏模块、接口或程序间共享的声明。位于包内的项目通常是类型定义、任务、以及函数。位于包内的项目不能具有层次化的引用。包还可能包含参数、变量和线网。对于那些不方便通过层次向下传递的全局项目,这种方式可能有用。与在一个编译单元或模块内声明的变量相同,位于包内的变量声明赋值应该出现在任何initial、always、always_comb、always_latch或always_ff块被启动之前。

下面是包的一个例子:

package ComplexPkg;
    typedef struct {
        float i, r;
    } Complex;

    function Complex add(Complex a, b);
        add.r = a.r + b.r;
        add.i = a.i + b.i;
    endfunction

    function Complex mul(Complex a, b);
        mul.r = (a.r * b.r) - (a.i * b.i);
        mul.i = (a.r * b.i) + (a.i * b.r);
    endfunction
endpackage : ComplexPkg

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

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

发布评论

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