OOPS的Systemverilog多态性特征表现出约束

时间:2016-07-01 02:07:04

标签: oop system-verilog

我正在努力通过约束检查我对多态性的理解。我写了一个示例代码

class parent;
  rand int unsigned a;
  constraint a_c { a < 1000;}
  function print();
    $display("The randomized data is %d\n", a);
  endfunction
endclass

class child extends parent;
  constraint a_c { a > 50;}
endclass

module m;
  child c = new();

  initial begin
    c.randomize();
    c.print;
  end
endmodule

输出

The randomized data is 2567677

这里出了什么问题?

1 个答案:

答案 0 :(得分:5)

这是一个满足constraint a_c { a > 50;}的有效结果。因为扩展了约束a_c,它会覆盖基类中的约束。如果您希望约束是加法的,则需要为其提供与基类不同的名称。

BTW,我建议在引用OOP继承时避免使用术语 parent child 。这些术语意味着不同的对象。请改用 base / super 派生的 / 扩展类。