SystemVerilog:不带括号的类函数 - 调用或范围

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

我一直在尝试查看 SystemVerilog 中调用什么类函数而无需括号解析成。

说,这应该解析成什么:class_inst.func_name.abc

情况 1:func_name 返回一个结构体,其中 abc 是其中的成员。

情况 2:func_name 有一个名为 abc 的静态变量。

案例3:以上均为真。

情况 4:func_name 有一个名为 abc 的非静态变量。

PS:我们可以假设 abc 始终是类型兼容的。

VCS 在情况 1-3 中没有给出错误,但在情况 4 中给出错误。

问题:

  1. 在情况 3 中,class_inst.func_name.abc 会解析成什么?静态变量或返回类型?
  2. VCS 行为正确吗?
  3. 还有其他我遗漏的案例吗?
system-verilog class-method
1个回答
0
投票

拟议的 1800-2023 SystemVerilog LRM 最近澄清了这一点,作为允许函数调用链的增强功能的一部分。

如果没有括号,这是一个分层范围引用。这与传统 Verilog 向后兼容。允许对静态变量和网络进行分层引用。您不能从声明范围之外引用自动变量。该引用来自函数的范围内,而不是返回值的类型内。我在 EDAPlayground 上的所有模拟器上都遇到第 1 种情况的错误。

如果

func_name

后面跟着括号,则始终是函数调用。

module top; typedef struct {int A,B;} AB_t; function AB_t foo; static int B = 3; foo = '{1,2}; endfunction initial begin void'(foo()); // $display(foo.A); // case 1 is an error $display(foo.B); // case 2 & 3 end endmodule
    
© www.soinside.com 2019 - 2024. All rights reserved.