随机化
随着设计变得越来越大,要产生一个完整的激励集合来测试设计的功能也变得越来越难。编写定向的测试集来检查所有功能项变得不太可能。解决的办法是采用受约束的随机测试法(CRT)自动产生测试集。
准备CRT的环境要比准备定向测试集的环境复杂。简单的定向测试集只需要施加激励,然后人工检查输出结果。正确的输出结果随后可以保存为标准日志文件(golden logfile),用来和今后的仿真结果进行比较,以判断仿真结果的正确性。
CRT环境不仅需要产生激励,还需要通过参考模型、传输函数或其他方法预测输出结果。然而,只要准备好了这个环境,你就可以运行上百次的仿真而无需手工检查结果,从而提高工作效率。这种用CPU时间(计算机的工作)来换取人工检查的时间(设计人员的工作)的方法是CRT的优势。
CRT由两部分组成:使用随机的数据流为DUT产生输入的测试代码,以及伪随机数发生器(PRNG)的种子(seed)。只要改变种子的值,就可以改变CRT的行为。这样仅仅通过改变种子的值,就可以调整每次测试,使得每次测试可以达到很多次定向测试的效果。这种方法还可以产生更多的和定向测试等效的测试集。怎么才能知道是否覆盖了设计的所有方面?通常激励空间是非常大的,以至于无法用for循环来产生各种可能的输人,所以必须采用产生子集的方式来解决这个问题。
SystemVerilog中的随机化
当和OOP同时使用时,SystemVerilog中的随机激励产生是最有效的。首先建立一个具有一组相关的随机