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