一、为什么需要随机化?
当一个项目的功能越来越复杂,功能项成倍增加时,依靠定向测试集的编写来检查功能点未免压力过大了;
其次,各个功能点之间的关系才是大多数bug的来源,但这种bug很难用定向测试的编写来筛查。只使用定向测试对回归测试也没有意义。
采用受约束的随机测试法(CRT)产生测试集是项目复杂化测试的解决办法,但是CRT的环境建立比普通定向测试环境建立要更加复杂,并且要通过参考模型的建立和线上比较的形式进行对比来验证设计的正确性。参考模型多采用matlab,c,或v语言编写。然而只要搭建好验证环境,便可以进行成百上千次仿真无需检查仿真结果,从而提高工作效率,以CPU工作时间换取人工检查时间------CRT的优势。以此减少测试代码量,产生的激励也更加多样化。通过使用随机的数据流为DUT产生输入的测试代码,并且通过伪随机数发生器(PUNG)改变随机种子的值就可以改变CRT的行为。
二、随机化的语法主要有以下几个方面:
1. 在class中声明随机变量+采用randomize()函数来进行随机化
2. rand或randc型变量的声明只能在class中实现;rand和randc的区别在于是否为有放回抽样随机;
3. 随机化时必须添加约束,如果添加约束后,通过句柄调用随机函数randomize()随机化求解失败,那么不管是哪个随机变量随机化失败,所有变量均不被随机化。
4. 随机化所添加的约束必须和变量位宽相匹配。
例如: