System verilog 什么是虚拟访问器?

System verilog 什么是虚拟访问器?,system-verilog,uvm,System Verilog,Uvm,此短语摘自“uvm用户指南1.1”第20页: “在SystemVerilog中,一个重要的使用模型是向事务类型添加随机化约束。这通常是通过继承、获取派生对象和向基类添加约束来完成的。这些 通过派生一个新类等,可以进一步修改或扩展约束 型号,访问器功能是虚拟的,成员受保护而不是本地的。” 什么是存取器?为什么它必须是虚拟的?访问器意味着一个get.*函数,它只返回一个值,而不改变对象的状态。返回的值可以是成员变量,也可以是更复杂的表达式,具体取决于成员变量。例如,点类,它可以提供笛卡尔坐标和极坐标

此短语摘自“uvm用户指南1.1”第20页:

“在SystemVerilog中,一个重要的使用模型是向事务类型添加随机化约束。这通常是通过继承、获取派生对象和向基类添加约束来完成的。这些 通过派生一个新类等,可以进一步修改或扩展约束 型号,访问器功能是虚拟的,成员受保护而不是本地的。”


什么是存取器?为什么它必须是虚拟的?

访问器意味着一个
get.*
函数,它只返回一个值,而不改变对象的状态。返回的值可以是成员变量,也可以是更复杂的表达式,具体取决于成员变量。例如,
类,它可以提供笛卡尔坐标和极坐标():

如果函数是虚拟函数,则可以在子类中重写它


您提到的访问器是虚拟的,这一点的重要性在您的问题中并不明显。

访问器意味着一个
get.*
函数,它只返回一个值,而不改变对象的状态。返回的值可以是成员变量,也可以是更复杂的表达式,具体取决于成员变量。例如,
类,它可以提供笛卡尔坐标和极坐标():

如果函数是虚拟函数,则可以在子类中重写它

为什么你提到的访问者必须是虚拟的,这一点从你的问题中并不明显

class point;

  local int x;
  local int y;

  // Accessor for x coordinate, cartesian
  function int get_x();
    return x;
  endfunction

  // Accessor for r coordinate, polar
  function int get_r();
    return sqrt(x**2 + y**2);
  endfunction

  // accessors would also exist for y and phi

endclass