验证测试集分类:
理解为验证环境搭建好的基本测试集(autrosmoke), 普通维护版本需要全pass的测试集(release_gate). 测试全覆盖需要的测试集(regression).
1,autrosmoke 测试集。
作为基本测试集,主要验证环境走不走的通。一般包括基本的reg读写测试,每个block有一个基本的功能测试,
2. release_gate测试集
2-1.不同配置下的tb.
有reset的tb, 没有reset的tb,有low power的tb, 没有low power的tb。
2-2.每个tb下都有的功能测试
包括autrosmoke的测试集以及关心的每个block主要细节测试集
3.regression测试集
包含#1和#2,以及每个block所关心的所有细节的随机序列的测试集。
随机:
1. 随机序列生成器,一般用在上电后,去替换掉上电默认值的寄存器配置。主要是约束寄存器取值的有效范围以及寄存器与寄存器之间的依赖关系。
2.在test测试集中进行随机
3.在uvc的cfg file里面随机
4. 用$value$args 传递cmd参数来随机
随机的常用语法举例:
静态约束
rand int a; constraint c_dist { a dist {0:=40,[1:3]:=60};}
动态约束
typedef enum {BYTE,WORD,LWRD} length_e;
rand length_e len;
bit[31:0] w_byte=1,w_word=3,w_lwrd=5;
constraint c_len { len dist {BYTE:=w_byte, WORD:=w_word, LWRD:=w_lwrd};}
确定上下限的约束
rand int a;
int 10,20;
constraint c_range {c inside {[10:20]};}
还有很多约束方式。请参考sv语法书约束一章节。
依赖关系的solve before使用。除非对某些值出现的概率不满意,否则不要用。