SV-随机化问题(大疆2019笔试)
1、原题
2、代码
class class_a; rand bit signed [7:0] a[4]; bit [1:0] mode; function new(bit [1:0] mode); // 注意分号结尾 mode = mode; endfunction constraint reasonable_a{ // 注意约束中用{}而不是begin end foreach(a[i]) { a[i]>$signed(8'hEF); // 系统函数的使用 a[i]<$signed(8'h11); } } constraint valid_a{ if(mode==2'b00){ a.sum() == 64; // 如果a元素位宽为6bit,其和范围则为-32-31, // 所有要想和能到64,位宽至少8bit // 注意用==而不是= } else{ a[2]>a[0]; a[2]>a[1]; a[2]>a[3]; } } endclass program test; initial begin // 注意放在begin……end块 class_a ca; ca = new(2'b00); assert(ca.randomize()) $display("a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d,mode=%d", ca.a[0],ca.a[1],ca.a[2],ca.a[3], ca.mode); end endprogram
3、输出
a[0]= 16,a[1]= 16,a[2]= 16,a[3]= 16,mode=0