1.同时启动100个线程
//第一种写法
fork
a();
a();
a();
...
a();
join
//第二种写法
for(int i = 0; i < 100; i++) begin
fork
a();
join_none
end
wait fork;
2.写一个断言,判断:信号a每隔0-5个cycle就翻转一次
//通过看断言覆盖率判断有没有收到
property p2;
@(posedge clk) changed(a) |-> ##[0:5] (a == !a);
endproperty
ass2 : assert property(p2)
else
`uvm_error("assert", "a did not flip within 0-5 cycles");
3.生成若干个小于100且互不相同的数
//第一种方法
class randc_C;
parameter N = 10;
randc bit [N-1:0] a;
constraint c{
a < 100;
};
endclass
//第二种方法
class randc_Q;
parameter N = 10;
rand bit [N-1:0] a;
bit [N-1:0] q[$];
constraint c{
unique {a, q};
a < 100;
}
function void post_randomize();
q.push_back(a);
if (q.size() == 2**N) begin
q.delete();
end
endfunction
endclass
如有问题,欢迎评论区交流~