SystemVerilog硬件验证语言具有的典型性质:
(1)受约束的随机激励生成。
(2)功能覆盖率。
(3)更高层次的结构,尤其是面向对象的编程。
(4)多线程及线程问的通信。
(5)支持HDL数据类型例如Verilog的四状态数值。
(6)集成了事件仿真器便于对设计施加控制。
验证计划
它描述了需要验证什么样的特性,以及采用哪些技术。这些步骤可能包含有定向或随机的测试,断言、软硬件协同验证、硬件仿真、形式验证,以及对验证IP的使用等等。
验证方法学
基本测试平台的功能
测试平台的用途在于确定待测设计的正确性。包含下列步骤:
(1)产生激励。
(2)把激励施加到DUT 上。
(3)捕捉响应。
(4)检验正确性。
(5) 对照整个验证目标测算进展情况。
定向测试
首先需要阅读硬件规范,然后写下验证计划,计划上列有各种测试,每个测试针对一系列相关的特性。按照这个计划,接着编写出针对待测设计具体特性的激励向量,然后使用这些向量对待测设计进行仿真。仿真结束后,手工查看一下结果文件和波形,确保设计的行为与预期的一致。一旦测试结果正确,你就可以在验证计划中把它勾掉,然后开始下一个测试。这种测试方法容易取得稳步的进展,但是其效率不高。
受约束的随机激励
利用仿真器产生随机激励,但是这些激励数值不是完全随机,受一定的约束。对于少数随机测试达不到的特性,编写定向测试。
功能覆盖率
对功能覆盖率的测量和使用包含了几个步骤。首先,需要在测试平台中加入代码,用于监控进入设备中的激励,以及设备对激励的反应,并椐此确定哪些功能已经被验证过。运行几次仿真,每次使用不同的种子。接下来,把这些仿真的结果合并到一个报告中。然后,你需要对结果进行分析,最后决定如何采用新的激励来达到那些尚未被测试到的条件和逻辑。
从功能覆盖率到激励的反馈
随着功能覆盖率逐渐接近极限﹐你需要改变测试,以期能找出新的方法去达到那些尚未被覆盖的区域。这被称为“覆盖率驱动的验证”
仿真环境阶段
三个基本的阶段:建立(build)、运行(run)、收尾(wrap-up)
建立阶段可以分为如下步骤:
(1)生成配置:把待测设计的配置和周围的环境随机化。
(2)建立环境:基于配置来分配和连接测试平台构件。测试平台构件指的是存在于测试平台中的部分,注意与设计中的物理构件区分开,后者是采用RTL代码描述的。
(3)对待测设计进行复位。
(4)配置待测设计:基于第一步中生成的配置,载入待测设计的命令寄存器。
运行阶段是指测试实际运行的阶段,可分为以下步骤:
(1)启动环境:运行测试平台构件,例如各种BFM和激励发生器。
(2)运行测试:启动测试然后等待测试完成。定向测试的完成很容易判断.但随机浏试却比较困难。应该同时使用超时检测以确保待测设计或测试平台不出现死锁。
收尾阶段包含如下两个步骤。
(1)清空:在最下层完成以后,你需要等待待测设计清空最后的事务。
(2)报告:一且待测设计空闲下来,你就可以清空遗留在测试平台中的数据了。有时候保存在记分板里面的数据从来就没有送出来过,这些数据可能是被待测设计丢弃掉的。你可以根据这些信息创建最终报告,说明测试通过或者失败。如果测试失败,务必把相应的功能覆盖率结果删除,因为它们可能是不正确的。