1. 在进行随机化约束的时候,不能把一个随机变量直接付给另一个随机变量,必须通过一个非随机的中间面料进行传递。
比如:
assert( req_seq.randomized with {addr == xxx})
那么xx不能是rand属性,如果想要将一个随机变量给到另一个,可以中间定义一个非随机的属性,进行传递。
2.随机化约束
随机化策略——随机变量rand、约束constraint、权重dist、随机数产生示例_constraint dist_SD.ZHAI的博客-CSDN博客
3.fork join_none+for循环避免踩坑
IC验证中for循环+fork-join_none结构的坑,你有注意到吗? - 知乎 (zhihu.com)
4.@和wait的区别
注意@多个信号的操作,比如@(a,b,c);
SV学习笔记—wait和@的区别_sv wait_Verification_White的博客-CSDN博客
5.covergroup多次例化:
(1)可以在interface里创建covergroup 然后在内部加入initial begin end语句,在initial中对这个变量covergroup进行多次例化,大致的格式如下:
interface xx//实际上这里的interface也是充当一个monitor的作用
covergroup A;
/*....*/
endgroup
A a[10];
initial begin
foreach(a[i])begin
a[i] = new();
end
end
//sample
//1.采用initial函数的方式
initial begin
xxx//条件判断
end
//2.采用sequence的方式
sequence 123
//条件
endsequence
cover property(123) begin
//采样
end
endinterface
6.参数化的类:
(1)参数可以是类也可以是变量
(2)一个#和两个#的在继承该类的时候的区别:
#小程序://CSDN/yNIlnNA39EsLMai
(3)子类有#和父类有#的区别
(4)两个参数但是仅仅指定了一个参数是什么意思?
(5)几个变量:
super不仅仅可以调用父类的方法,也可以调用父类的变量;
this也是,不仅仅可以找方法也可以找变量,不同的是this会优先找自己的类,递归的查找,从当前的类往上去找,采用就近原则,而super只能找自己的父类的东西;
lcoal::的用法;
(6)数组的约束
(7)动态复位
[UVM] kill sequence_uvm sequence kill_lbt_dvshare的博客-CSDN博客
kill_sequence
stop_sequence(单独在sqr里面用,不用seq.stop_sequence的方式)
(8)循环体总结
SV之流程控制_sv while_bleauchat的博客-CSDN博客
break continue return
事件合并的操作,参考上面的连接。(上面连接仅仅只是在sv中使用的)
(9)
rand bit signed [31:0] a = -1;
rand bit unsigned [31:0] b = 1;
rand int signed c = -1;
rand int unsigned d = 1;