随机约束和分布
1、为什么需要随机化
芯片体积日渐增大,复杂度越来越高,定向测试已经无法满足测试的需求,而随机测试产生的激励多样,更能满足测试的需求。而且随机测试相对于定向测试的代码量会减少很多,但是激励会更丰富。我们需要的约束是合法的约束,需要限定激励的合法范围。所进行的约束不但可以指定数据的取值范围,还可以指定各个随机数值的权重分布。所要随机的内容为:器件配置、环境配置、原始输入数据、延时、异常协议等等。
2、什么可以被随机化
可以随机化整形变量,即由位组构成的变量,尽管可以随机化2值数据类型,但位也可以是2值或者4值类型。
3、声明随机变量的类
rand关键词可以表明随机属性;randc可以表示周期随机性,所有的值赋值以后才可以重复。类的随机函数:std::randomize() 前提是需要通过rand变量声明,在后续的通过对象调用randomize()函数才能随机化变量。constraint约束也可以同随机变量一同在类里面声明。
4、权重分布
关键词dist可以在约束里面产生随机数值的权重分布,dist操作符带有一个值得列表以及相应的权重,用:= 或者:/分开,值或者权重可以是常数或者变量,最主要的是权重不用百分比表示,权重的和也不必是100。:=操作符表示值范围内的每一个值的权重是相同的,:/操作符表示权重要平均分到值范围内的每一个值。

5、inside运算符
inside是常见的约束运算符,表示变量应该属于某一个值的集合,除非还存在其他约束,否则随机变量在集合重取值的概率是相等的。集合里面也可以使用变量。除此之外还可以使用“$”来表示最大值和最小值
rand int c ;
int lo, hi;
constraint c_range{
c insede {[lo:hi]}; //lo<=c<=hi
}
rand bit [6:0] b; //0<=b<=127
rand bit [5:0] e; //0<=b<=63
constraint c_range{
b insede {[$:4],[20:$]}; //0<=b<=4 ||20<=b<=127
e insede {[$:4],[20:$]}; //0<=b<=4 ||20<=b<=63
}
6、条件约束
可以通过—>或者if-else来让一个约束表达式在特定的时间有效

6、双向约束
约束块是声明性的代码,是并行的,所有的约束表达式同时有效。同时,约束也是

本文探讨了在现代芯片测试中,为何需要随机化测试,如何通过随机变量、权重分布和约束条件实现多样化测试,包括随机整型变量、随机数组和随机序列的应用。还介绍了随机控制方法、随机序列生成、约束块管理和控制,以及关键的随机函数和预定义操作。
最低0.47元/天 解锁文章
1975

被折叠的 条评论
为什么被折叠?



