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

use*_*273 1 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
Run Code Online (Sandbox Code Playgroud)

输出是

The randomized data is 2567677
Run Code Online (Sandbox Code Playgroud)

这里出了什么问题?

dav*_*_59 5

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

顺便说一下,我建议在引用OOP继承时避免使用这两个术语.这些术语意味着不同的对象.请改用base/superderived/extended类.