返回介绍

10.3 函数

发布于 2020-09-09 22:55:48 字数 1969 浏览 1041 评论 0 收藏 0

function_data_type ::= data_type | void       // 引用自附录A.2.6

function_data_type_or_implicit ::=
    function_data_type
  | [signing] {packed_dimension}

function_declaration ::= function [lifetime] function_body_declaration

function_body_declaration ::=
    function_data_type_or_implicit
        [interface_identifier.|class_scope]function_identifier;
    {tf_item_declaration}
    {function_statement_or_null}
    endfunction [: function_identifier]
  | function_data_type_or_implicit
    [interface_identifier.|class_scope] function_identifier ([tf_port_list]);
    {block_item_declaration}
    {function_statement_or_null}
    endfunction [: function_identifier]

lifetime ::= static | automatic      // 引用自附录A.2.1.3

signing ::= signed | unsigned        // 引用自附录A.2.2.1

语法10-2 — 函数语法(摘录自附录A)

Verilog函数声明或者在圆括号(向ANSI C一样)中,或者在声明和方向中具有形式参数。

function logic [15:0] myfunc1(int x, int y);
    ...
endfunction

function logic [15:0] myfunc2;
    input int x;
    input int y;
    ...
endfunction

SystemVerilog扩展了Verilog函数的能力,它允许函数具有与任务相同的形式参数。函数参数的方向如下:

input   // 在开始的时候拷贝值
output  // 在结束的时候拷贝值
inout   // 在开始的时候拷贝,在结束的时候输出
ref     // 传递引用(参见10.4.2节)

如果在函数声明中没有指定形式参数的方向,那么形式参数的缺省方向是输入。一旦指定了一个方向,那么它就成为后续参数的缺省方向。在下面的例子中,形式参数ab缺省为输入,uv都是输出:

function logic [15:0] myfunc3(int a, int b, output logic [15:0] u, v);
    ...
endfunction

每一个形式参数都具有一个数据类型,它或者显式声明,或者从一个缺省类型继承。SystemVerilog中任务参数的缺省类型为logic,它与Verilog兼容。SystemVerilog允许将一个数组声明成函数的一个形式参数,例如:

function [3:0][7:0] myfunc4(input [3:0][7:0] a, b[3:0]);
    ...
endfunction

在一个事件表达式中、一个过程连续赋值语句内的表达式中、或者不在一个过程语句中的表达式中调用具有output、inout或ref形式参数的函数是非法的。然而,在这些关联文中将const ref作为函数参数是合法的(参见10.4.2节)。

SystemVerilog允许在函数头和endfunction之间写入多条语句,这也就意味着begin...end可以被忽略。如果begin...end被忽略,这些语句顺序地执行,这与它们被包含在begin...end组中是一样的。任务中没有任何语句也是合法的,在这种情况下,函数返回与函数具有相同名字的隐含变量的当前值。

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

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

发布评论

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