"); //-->
如何选择正确的芯片验证方法
众所周知,功能验证在芯片的整个设计周期中占用的时间最多。尽管目前有许多技术可用于减少验证时间,但最终应当如何选择?答案并不简单明了,而且经常令人迷惑并要付出高昂的代价。
一个项目中需要使用的工具和技术必须在设计周期的初期就确定下来,以便获得新验证方法费用预算的准确信息。经常有公司因为错误估计了运转这些新型工具和技术所需的设计和技术的复杂性而浪费大量的资金和资源。
产品的抽象级越高,越容易设计;同样的,抽象级越高,越容易犯严重的错误。一个架构上的缺陷可能会导致整个芯片的损害,而在门级网表中的连线错误可以通过重制解决。
例如,Verilog 为设计者提供了一种相对容易的接口,以便他们在相当抽象的层次上进行设计。当设计曾经作为制约性的瓶颈时,Verilog 为设计生产率带来了指数增长,并且大大推动了复杂芯片的发展。但是如果设计者不了解在复杂的设计周期中语言上的细微差别,就很容易犯错。在验证成为瓶颈的今天,同样的观点也适用于许多验证技术和语言。
本文将对时下流行的验证技术(形式验证、随机、定向、有约束的随机、断言、属性检验)与语言(SystemC、C/C++、 SystemVerilog、Open-VERA、E 等)进行全面评述,还将分析在传统的数字ASIC 设计流程中应当在何时采用何种验证技术和语言。
验证瓶颈
尽管事实表明如今设计生产率的增长速度仍然低于芯片复杂度的增长速度,然而现在需要面对的瓶颈已不再是设计时间,而是验证时间。最近的统计数据表明,对一个复杂逻辑芯片而言,整个产品周期中 60_70% 的时间都用于验证工作。如何使用新的工具和技术对设计中的复杂功能进行验证已经成为缩短总体的产品时间所需要面对的挑战。
由于以下原因,可以说验证瓶颈在某种程度上是设计抽象级逐步提高造成的结果:
1) 在较高的抽象水平上进行设计,易于构建高度复杂的产品功能。设计复杂度的提高造成验证工作的成倍增加;
2) 在设计、转换以及映射到最终产品的过程中,应用更高的抽象级进行设计会带来信息损失和解释错误的问题。例如,采用HDL 级设计并将其转换到门级的综合过程,需要进行验证以确保转换的正确性以及使设计意图完全得到体现。提高抽象级还带来了代码解释问题,在仿真时要通过这些代码对设计进行描述,以确保所写的代码真实反映了功能规范。
其它影响验证问题的因素还包括:
1) 由于设计中硬件与软件、模拟与数字等共存而造成的功能复杂度增加;
2) 对系统可靠性的要求增高,使得对验证工作的要求也增加,以确保在系统环境下,芯片功能可以顺利执行。
统计数据表明,验证问题现实存在,而且让公司付出了高昂的成本:
1)由于设计错误造成的芯片缺陷:在需要进行重制的芯片中,有82%是由于逻辑与功能缺陷设计错误。这意味着验证过程没有覆盖边角情况,缺陷一直隐藏在设计过程中直到流片。
2)由于规范错误造成的芯片缺陷:在需要进行重制的芯片中,有47%是由于逻辑与功能规范不正确或不完整,有32%是由于规范发生了改变。
3)重用IP 和外来IP 的问题:所有失败的芯片中,有14%是由于在重用或外来的IP 中存在错误。
4)重制的后果:重制费会高达10 万美元,还会延误产品的推出,由于使用这些有缺陷的芯片而导致的系统失败也会增加成本。
为了提高验证生产率,EDA 行业提出了一个与解决设计瓶颈类似的解决方案——抽象化的理念。诸如 Verilog 和 VHDL 等高层次的语言被用于验证芯片,这些语言包括各种指令如任务指令和线程指令(fork/join 语句),以及控制结构(while 语句)。
这提供了更强的数据控制力,以便对所有边角设计进行充分验证。然而,这些指令不能被综合,因此不会被用作实际设计代码的一部分。
随着复杂度与日俱增,能够验证具有不同抽象级的复杂设计的新语言被创建出来,支持这些新的验证语言的技术和工具也随之诞生。
所有这一切意味着芯片厂商必须对新的工具作出评估,必须针对这些新的工具和技术对工程师进行培训,在公司的研发费用成本结构中必须包括新的工具和资源,公司在总体上必须在短时间内克服学习曲线问题,另外,还需要对这些工具进行风险评估,以及考虑新工具与已有技术的集成和协同工作的能力。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。