我们可以在 类 中有 print 语句,而在系统 verilog 中没有任何 function/task

Can we can have print statement in classes without any function/task in system verilog

我们可以在 类 中使用 print 语句而不在 SystemVerilog 中使用任何 function/task 吗?

http://www.edaplayground.com/x/8Y8

class A;
 int x=10;
 $display("x=%d",x);
 endclass

module abc;
 A a;
 initial begin
   a=new();
 end
endmodule

没有。根据 IEEE Std 1800-2012,第 8.3 节 "Syntax",一个 class 可能只包含以下项目:

class_item ::= 
{ attribute_instance } class_property
| { attribute_instance } class_method
| { attribute_instance } class_constraint
| { attribute_instance } class_declaration
| { attribute_instance } covergroup_declaration
| local_parameter_declaration ;
| parameter_declaration7 ;
| ;

$display 语句只能出现在程序块(初始、始终、最终)或 task/function 主体中。

通常,您需要在 class 中创建一个显示函数,然后显式调用它。

这是不可能的。您必须在专用 task/function 或 class 构造函数 .

中打印

LRM 指出: display/monitor/strobe/write 语句只能出现在程序块或 task/function 正文中。

我们可以在创建对象时显示变量的默认值,如下所示。更好的选择是在构造函数本身中使用显示。

class A; 
int x=10; 
function void new(); // constructor
  $display("x=%d",x); 
endfunction
endclass