返回介绍

17.9 在一个序列匹配时调用子程序

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

任务、任务方法、void函数、void函数方法以及系统任务可以在一个序列成功匹配的结束处调用。子程序调用,例如局部变量赋值,出现在紧跟着序列的以逗号分割的列表中。子程序调用被称为附加到序列。序列以及之后的列表以括号包围。

sequence_expr ::=         // 引用自附录A.2.10
    ...
  | (expression_or_dist{, sequence_match_item }) [boolean_abbrev]
  | (sequence_expr{, sequence_match_item}) [sequence_abbrev]
    ...

sequence_match_item ::=
    operator_assignment
  | inc_or_dec_expression
  | subroutine_call

语法17-13 — 序列中子程序调用的语法(摘录自附录A)

例如:

sequence s1;
    logic v, w;
    (a, v = e) ##1
    (b[->1], w = f, $display("b after a with v = %h, w = %h\n", v, w));
endsequence

上面的例子定义了一个序列s1,它在一次a出现后第一次出现b的时候匹配。在匹配的时候,执行系统任务$display来写入一条消息,它声明这次匹配并显示赋给局部变量v和w的值。

所有被附加到一个序列的子程序调用均在序列的每一次成功匹配处执行。对于每一次成功的匹配,附加调用以它们在列表中出现的顺序调用。与一个动作块一样,子程序调用在Reactive区域调度。

一个附加到了一个序列的子程序调用的每一个参数必须或者作为一个输入通过值传递,或者通过引用传递(ref或const ref;参见10.4.2节)。通过值传递的实参表达式使用底层变量的采样值并且与用来计算序列匹配的变量值一致。

局部变量可以被传递到附加到了一个序列的子程序调用。任何流出序列或者在紧跟序列的列表中但在子程序调用之前进行赋值的局部变量都可以用在调用的实参表达式中。如果一个局部变量出现在了一个实参表达式中,那么参数必须通过值传递。

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

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

发布评论

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