欢迎大家加入2022届数字IC交流群,QQ群号 1060380138
//<object>.constraint_mode(0) :: 关闭对象中的所有约束
//<constraint>.constraint_mode(0) :: 选择性关闭某一个约束
class ABC;
rand int length;
rand byte SA;
constraint c_length { length inside [1:64];}
constraint c_sa {SA inside [1:16];}
endclass ABC abc = new();
abc.constraint_mode(0) // 关闭所有约束
abc.c_length.constraint_mode(0) // 只关闭约束c_length
class Packet;
rand bit[31:0] addr;
constraint c_addr { addr inside [0:100];}
endclass
大于200与内置约束冲突,所以需要先关闭内置约束,然后通过内联约束进行随机化
Packet p = new();
p.c_addr.constraint_mode(0);
p.randomize with {addr > 200;};
这些是systemverilog内建的回调函数。在调用randomize之前会自动调用pre_randomize函数,之后会自动调用post_randomize函数。可以通过定义这两个函数,完成在随机化之前或者之后进行某些操作。
class dynamic_array;
rand unsigned int abc[];
endclass
constraint c_abc_len {
abc.size() < 10;
foreach (abc[i])
abc[i] < 10;
}
class array_abc;
rand unsigned int myarray[];
endclass
constraint c_abc_val {
myarray.size inside { [10:16] };
foreach (myarray[i])
if (i>0) myarray[i] < myarray[i-1];
}
你答对了吗
class TestClass;
rand bit[3:0] my_array[];//dynamic array of bit[3:0]
endclass
initial begin
for (int j=0; j<3; j++) begin
fork
automatic int result;
begin
result= j*j;
$display("Thread=%0d value=%0d", j, value);
end
join_none
wait
fork;
end
end
正确答案将在下一期公布,或者到下面的文章获取答案
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有