我正在努力通过约束检查我对多态性的理解。我写了一个示例代码
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
这里出了什么问题?
答案 0 :(得分:5)
这是一个满足constraint a_c { a > 50;}
的有效结果。因为扩展了约束a_c
,它会覆盖基类中的约束。如果您希望约束是加法的,则需要为其提供与基类不同的名称。
BTW,我建议在引用OOP继承时避免使用术语 parent 和 child 。这些术语意味着不同的对象。请改用 base / super 和派生的 / 扩展类。