概述
随着设计变得越来越大,要产生一个完整的激励来测试设计的功能也变得越来越困难。
定向激励的测试方法早已经无法满足检查功能完整性的要求。
SoC的集成度提高带来的模块之间交互的复杂度也是指数攀升,这就使得验证工程师无法预测接下来用户使用过程中会发生什么样的状况。
目前动态仿真验证的主流方法: 随机-约束
随机约束测试(CRT,Constrained-Random Test)
随机约束测试即能够产生你感兴趣的、你想不到的的测试向量,通过回归测试、替换随机种子的方式来提高单位测试用例的覆盖率收集效率。
覆盖率是为了量化随机的效率和结果所指定出来的量化标准。
随机测试带来的负担:
随机测试带来的额外负担是环境的复杂度会提高,因为从环境组件上考虑不再只需要发送激励的组件,而且还包括监测器、比较器等。
随机测试带来的环境复杂度还包括由于对环境复用和测试复用带来的组件封装要求,这会使得代码量加大。
这种额外的代码量、环境集成要求也随之带来了更加灵活、更易集成复用的验证环境。
在引入了随机特性和功能覆盖率以后,这增加了环境的复杂的度和实现难度,但也使得环境和测试用例在复用和验证效率方面更有优势 。
基于MCDT的SV实验主要目的在于帮助同学建立验证环境结构的概念以及理解测试激励的生成及发送过程。
如何简单的产生一个随机数
在我们学习如何定义一个“随机”属性类之前,先了解一下如何利用系统函数产生一个随机数吧。
module _stim;
bit [15:0] addr ;
bit [31:0] data ;
function bit gen_stim() ;
bit success