功能验证是一个自动化学科的术语。功能验证是电子设计自动化中验证数字电路是否与预定规范功能相符的一个验证过程,通常所说的功能验证、功能仿真是指不考虑实际器件的延迟时间,只考虑逻辑功能的一个流程。功能验证的目标是达到尽可能高的测试覆盖率,被测试的内容要尽可能覆盖所有的语句、逻辑分支、条件、路径、触发、状态机的状态等,同时在某些阶段还必须包括对时序的检查。
功能验证定义
在较小型的电路设计中,设计人员可以利用硬件描述语言来建立测试平台(通常这是一个顶级模块),通过指定测试向量来检验被测模块在各种输入情况下,检验对应的输出是符合要求。但是,在更大型集成电路设计项目中,该过程会耗费设计人员较大的时间和精力。许多项目都采用计算机辅助工程工具来协助验证人员创建随机测试激励向量。其中,硬件验证语言在建立随机测试和功能覆盖方面具有显著的优势,它们通常提供了专门用来进行功能覆盖和产生可约束随机测试激励向量的数据结构。
除了上面讲述的这种通过输入测试向量的方式,功能验证还可以通过
形式等效性检查(形式验证)、断言等方式来进行,达到更高的功能覆盖率。
五大验证技术
功能验证技术有静态验证、功能仿真、
FPGA原型验证、硬件仿真、与UVM等。
功能验证流程
功能验证流程主要分为三部分:1、制定验证策略和验证计划;2、创建验证平台,运行和调试;3、回归测试和覆盖率分析。
制定验证策略和验证计划
制定验证策略和验证技术主要处理以下三个问题:
(1) 主要测试点和测试用例
首先需要从设计中提取出有实际意义的、可管理的测试空间集合,并且没有损害其期望的功能;然后根据这些测试点,拟定验证策略和验证用例;最后具体化到一个详细的、可执行的验证计划中,作为整个验证功能的指导。
(2) 验证平台的抽象层次
验证平台的抽象层次将决定它主要的处理对象:比特、包或者更高层次的数据类型。高层次的抽象建模需要让验证平台中低层次的功能自动化。
(3) 激励生成和结果检查原则
这些原则定义了输入到验证平台的激励是如何提供的,结果是如何检查的,并判断测试是否通过。
验证平台的搭建和调试
验证平台的搭建要以可重用为基本原则,而且方便设计工程师和验证工程师添加测试用例。在该阶段,需要搭建验证平台,书写测试用例并调试。
回归测试和覆盖率分析
回归测试要求能够周期的批处理运行,激励必须能够容易得到重现,成功或失败能够自动检查。覆盖率显示出该设计被测试的程度,是验证收敛的重要标准。