一、概述
在开展验证时有一整套的工具箱,根据设计的特点选用不同的验证方法,最终取得满意的效果。
实际的验证工作中,需要通过多种语言、方法、工具实现验证,比如仿真验证会协同形式验证一同来完善功能覆盖率,也有可能通过语言和脚本之间的整合来最终完成一项验证流程。
目前的阶段,已经无法依赖单一的工具、语言或者方法来达到验证的完备性。
二、主要方法分类
1、动态仿真
该方式是通过测试序列和激励生成器给入待测设计适当的激励,伴随着仿真时间,进而判断输出是否符合预期。
需要仿真器配合,比较结果和仿真波形,最终判定测试用例是否通过。
按照激励生成方式和检查方法,可以将动态仿真进一步划分为定向测试、随机测试、参考模型检查、断言检查。
2、静态检查
不需要仿真、波形激励,通过工具的辅助即可发现设计中存在的问题。
语法检查:
如大多数编译器自带的功能一样,验证工具一旦需要建立模型,无论是针对动态仿真还是静态检查,都需编译器对目标语言提供语法检查。
仿真编译器会帮助检查语法错误,如拼写、声明、引用、例化、连接、定义等等常见的语法错误。
不同的仿真工具对于语言标准的解释也可能存在偏差。
语义检查:
语义检查是在设计可行性上做深入检查的。
语义检查是通过专用的工具来协助完成的,语义检查包括的范围有常见的设计错误、影响覆盖率收敛的问题、可能会产生X值以及受其影响的设计部分。
静态检查可以在早期发现一些功能实现以外的设计问题,而且有助于完善设计代码,以便提高有效覆盖率以及RTL与网表的逻辑一致性(例如寄存器未初始化或者固定赋值)。
跨时钟域检查:
大多数复杂的设计都拥有不止一个时钟,多个时钟之间也常表现为异步地关系,对于设