功能验证已经成为制约高度复杂的
电子系统和
芯片设计的主要瓶颈。随着芯片管脚数目的急速上升和芯片尺寸的不断缩小,功能验证已经成为影响总体设计成本的首要因素。
一个高效的功能验证解决方案,除了要有灵活有效的验证过程自动化技术和经过检验的验证方法外,验证语言的重要作用也在业界引起了广泛的关注。本文集中探讨了如何将语言用于高效的功能验证之中,其中,SystemVerilog有可能将RTL设计空间扩展至抽象级,并包括test bench功能; SystemC虽然也有test bench功能,但本文未予述及,因为它主要用于比RTL更高抽象级的架构设计。e语言支持面向方面编程(AOP),可以解决多个抽象级的验证问题。
高效功能验证中的关键问题
集成电路设计的高度复杂性和层次性为高效功能验证带来了新的挑战,其中包括可扩展性、复用和验证管理等问题。可扩展性的重要性在于,层次化设计需要一个通用的验证方法,能够适用于模块级、芯片级、系统级乃至项目级的验证问题。复用也很重要,只有尽可能地复用testbench,验证IP(VIP),其它在验证过程中需要的组件才能被有效地维护。验证管理的重要
性虽然不是那么明显,但也同样事关重大,只有仔细地管理和监测设计过程才能保证可预测性和高效地利用资源。第四个挑战不是来自于设计本身,而是当前的设计环境。验证方法必须能够处理多语言(包括Verilog、VHDL、SystemVerilog、SystemC和e)的混合设计。以下各节将会详细讨论这些挑战。
混合语言验证
每一种新标准语言的兴起都会引发电子设计自动化(EDA)厂商的开发热潮,并引领用户验证策略的转变。在20世纪90年代,VHDL (IEEE 1076)和Verilog HDL (IEEE 1364)成为了RTL到门级设计的并存标准,并终获得了所有EDA厂商的支持。由于有数量众多的ASIC库,很多设计团体在使用VHDL用于RTL级设计的同时仍采用Verilog用于门级验证。有些公司将Verilog作为标准设计语言用于整个设计流程,但仍旧需要使用由
半导体厂商提供的VHDL IP模型。在软件开发环节,工程师们很少在具有创造性的工作中仅使用一种语言,相反,在同一公司中,甚至是在同一项目中,多语言共存和互操作是很常见的。
SystemC、 SystemVerilog和e语言的兴起是近期工业标准化工作的成果。SystemC已经成为架构验证的标准,它使EDA厂商能够将VPA从RTL物理实现级扩展至架构系统级。同样,SystemVerilog被视为一种同时适用于设计和验证的硬件描述语言,它让更多的设计人员参与到验证过程中来。,在IEEE P1647标准中确立的e语言可以保证基于e语言的软件工具和验证IP的生存发展,同时也会促使厂商推出互操作性解决方案以支持Verilog、VHDL、e语言、SystemC和SystemVerilog等语言的各种组合。图1显示了以上语言可能被用于的领域。

适用于功能验证的两种标准语言
随着IC设计向深亚微米技术过渡,传统的思考模式开始从以设计为中心转变到以验证为中心。为了实现5千万门级以上规模的芯片设计并缩短产品上市时间,设计人员们一方面严格限制新逻辑模块的规模,另一方面将主要精力集中在对现有功能模块和嵌入式存储器的复用上以期尽快实现芯片功能。这就使对大规模芯片的验证工作变得更加困难。
为了解决这些日益严峻的问题,芯片设计公司和EDA厂商开始采用专用语言(以及支持这些语言的工具)来改善验证过程的效率。过去,验证是通过用硬件描述语言(Verilog 或 VHDL)编写testbench来实现的。在设计和验证中使用同一种语言可以保证整个过程的连续统一。这种作法看起来简单,似乎不需要专门的培训,但在解决复杂问题时就暴露出很多缺陷。实际上,大型项目不仅会混合采用各种专用语言,有些情况下甚至会将验证工程师从设计团队中独立出来。因此,在20世纪中期诞生了两门验证语言,Verisity公司推出的e语言和Systems Science公司的Vera语言(该语言已被结合/演进为SystemVerilog语言)。