一、概述
- 在开展验证时有一整套的工具箱,根据设计的特点选用不同的验证方法,最终取得满意的效果。
- 实际的验证工作中,需要通过多种语言、方法、工具实现验证,比如仿真验证会协同形式验证一同来完善功能覆盖率,也有可能通过语言和脚本之间的整合来最终完成一项验证流程。
- 目前的阶段,已经无法依赖单一的工具、语言或者方法来达到验证的完备性。
二、主要方法分类
1、动态仿真
- 该方式是通过测试序列和激励生成器给入待测设计适当的激励,伴随着仿真时间,进而判断输出是否符合预期。
- 需要仿真器配合,比较结果和仿真波形,最终判定测试用例是否通过。
- 按照激励生成方式和检查方法,可以将动态仿真进一步划分为定向测试、随机测试、参考模型检查、断言检查。
2、静态检查
不需要仿真、波形激励,通过工具的辅助即可发现设计中存在的问题。
语法检查:
- 如大多数编译器自带的功能一样,验证工具一旦需要建立模型,无论是针对动态仿真还是静态检查,都需编译器对目标语言提供语法检查。
- 仿真编译器会帮助检查语法错误,如拼写、声明、引用、例化、连接、定义等等常见的语法错误。
- 不同的仿真工具对于语言标准的解释也可能存在偏差。
语义检查:
- 语义检查是在设计可行性上做深入检查的。
- 语义检查是通过专用的工具来协助完成的,语义检查包括的范围有常见的设计错误、影响覆盖率收敛的问题、可能会产生X值以及受其影响的设计部分。
- 静态检查可以在早期发现一些功能实现以外的设计问题,而且有助于完善设计代码,以便提高有效覆盖率以及RTL与网表的逻辑一致性(例如寄存器未初始化或者固定赋值)。
跨时钟域检查:
- 大多数复杂的设计都拥有不止一个时钟,多个时钟之间也常表现为异步地关系,对于设计中的不同功能模块如果被不同的时钟驱动,那么就会形成不同的时钟域。
- 对于单一时钟域的模块而言,它的设计方式和验证环境都较为简单。拥有多时钟域的硬件,它的跨时钟域的逻辑通讯就需要考虑同步的问题。
- 之所以需要考虑到不同时钟域的信号采样问题,是因为当时钟域A的信号进入时钟域B被采样时,每个周期都会有相对时钟B不同的延迟,这种随机性可能会导致建立时间或者保持时间无法满足,进而导致不可预期的功能失败。
- 跨时钟域问题无法通过常规的验证方法分析,例如动态仿真,也不能被静态时序分析判断出来。
- 跨时钟域检查方法可以在早期的RTL阶段来识别出跨时钟域的通信电路上面是否有合适的同步处理,所以跨时钟域(CDC)就是为了保证所有的CDC信号都能够得到正确的同步。
形式验证:
- 等价检查(EC):用来保证两个电路的行为是等价的,可以用来检查不同抽象级的电路是否一致,例如RTL级和网表。
- 属性检查(PC):又称为模型检查(MC)。电路的行为通过验证语言来描述其属性,随后通过静态方式来证明在所有状态空间下都满足该条件,否则举出反例来证明设计行为不符合属性描述。
3、虚拟模型
- 虚拟模型即高抽象级的硬件模型,软件模型可依赖虚拟模型在早期开发,并且将反馈交给硬件设计。
- 通过虚拟模型,硬件可以更早地获取软件反馈而对设计进行修改。这种硬件和软件更紧密的协作方式,可以贡献体现更多的优势,例如利用虚拟模型获取的性能数据可以对硬件早期结构提供参考意见,或者判断硬件和软件的协同任务是否可以满足功耗目标。
- 在目前多核的手机移动平台上,一个增长的需求就是将不同的任务合理分配到多核上面来取得更好的性能,而这种软件层面的评估就可以在虚拟建模阶段完成。
- 通过多项虚拟建模的技术,例如协同设计、协同仿真和验证,在早期就可以发现设计缺陷,使得修改这些缺陷可以在相对容易实施的阶段完成。
4、硬件加速
- SoC的设计体量越来越大,仿真速度成为制约验证进度的重要障碍。
- 由于仿真速度的限制,一些真实的用例也无法在RTL级仿真很快地呈现结果。硬件团队需要将耗时很长的软件进行分析。
- 一般需要等到硬件设计初步稳定,进而将其映射到可配置的硬件加速平台上面,这种方式相比于RTL仿真速度已经有了质的提升。
- 目前硬件加速方式分为两种,即FPGA和专用的模拟器。
- FPGA主要是为了软件开发提供平台,而模拟器是为了硬件和软件协同验证和整个系统的测试。
5、效能验证
移动时代,硬件提升性能的方式:
- 提升原有处理器性能、存储器空间、数据总线带宽或者采取多核处理方式。
- 增加额外的协处理器,或者新的功能模块(例如Video/GPU单元)。
- 在后端允许的情况下提高工作时钟频率。
- 提升工艺流程。
随着性能的提升,能耗也会逐步提高。主要针对硅前设计阶段进行效能验证,涉及的流程可分为两个部分:
- 功能验证:主要采用PA(主要包括有UPF或者CPF)方式,提高与仿真器结合,模拟电源域的开关进行设计检查。
- 功耗预测与优化:通过第三方功耗分析工具,结合仿真数据,进行功耗预测,并且给出分析结果。
技能技术
6、性能验证
- 性能验证中离不开大量的运算或者数据传输。
- 在产品定义过程中,对于系统的运算和数据传输都有要求,如果可以在产品实现阶段尽早地得出一些性能有关数据,不但可以帮助提前验证硬件性能是否满足要求,在进度允许的情况下还可以修改硬件设计完善其性能。
- 这种将性能测试提前的方式也可以使得硅前验证与硅后测试采用一致的测试用例,从而得出可比对的性能数据。
- 性能验证是用来衡量一个系统在特定工作负载下它的响应能力和稳定性,同时性能报告也可以用来分析和优化系统的质量标准,例如可靠性和资源使用能力。
- 性能验证是一门实用的计算机科学工程方法,在软件工程测试中分类较多,譬如有负载测试、压力测试、浸泡测试、尖峰冲击测试、配置测试、隔断测试等。