我想写这个约束:
A、B 和 C 均为 1 位宽
50% time all 3 are disabled.
10% time A enabled alone.
10% time B and C enabled together.
30% for all 3 enabled together
我只知道如何在一堆
if/else
条件下做到这一点。 但是,如果我希望它是可扩展的,有没有更好、更优雅的方法?
使用
dist
。 请参阅 IEEE Std 1800-2023,第 18.5.3 节 Distribution:
class d;
rand bit a, b, c;
constraint ccc {
{a, b, c} dist {
3'b000 := 50, // 50% time all 3 are disabled.
3'b100 := 10, // 10% time A enabled alone.
2'b011 := 10, // 10% time B and C enabled together.
3'b111 := 30 // 30% for all 3 enabled together.
};
}
endclass
module tb;
d d;
initial begin
d = new();
repeat (1000) begin
if (!d.randomize()) $fatal(2, "RAND FAIL");
$display("result", , d.a, , d.b, , d.c);
end
end
endmodule
在一个模拟器上打印:
507 result 0 0 0
103 result 0 1 1
105 result 1 0 0
285 result 1 1 1