系统级芯片设计语言和验证语言的发展
简 介:由于微电子技术的迅速发展和系统芯片的出现,包含微处理器和存储器甚至模拟电路和射频电路在内的系统芯片的规模日益庞大,复杂度日益增加。人们用传统的模拟方法难以完成设计验证工作,出现了所谓“验证危机”。为了适应这种形势,电子设计和验证工具正在发生迅速而深刻的变革。现在基于RTL级的设计和验证方法必须向系统级的设计和验证方法过渡,导致了验证语言的出现和标准化,本文将对当前出现的系统级设计和验证语言进行全面综述,并论述验证语言标准化的情况。分析他们的优缺点和发展趋势。最后简单评述当前的验证方法,说明基于断言的验证是结合形式化验证和传统模拟验证可行的途径。
1 引言
在二十多年前中小规模集成电路的设计向大规模和超大规模集成电路过渡时,设计方法经历了由门级向寄存器传输级过渡。当时各种硬件描述语言如DDL,CDL层出不穷,在RTL级的设计描述语言曾经历了“春秋战国”时代,逐渐形成了VHDL和Verilog称 霸的局面。随着微电子技术的发展,集成在一个芯片上的电路的功能日益复杂化。系统芯片的时代已经到来, 在RTL级硬件设计的抽象层次上已经无法应付数以百万和千万门系统的设计和验证。据统计,两年来,一次投片成功率已经由50%降低到39%。不能一次成功的 设计必须再投入几个月的设计验证时间和数十万美元的费用。这种风险已经变得不可接受了。因此设计验证出现了所谓的“验证危机”。现在基于RTL级的设计和验证方法必须向系统级的设计和验证方法过渡。 解决系统级设计问题首先要解决系统及功能的描述问题。系统级设计语言的竞争正在如火如荼的展开。需要一种语言能够描述包括嵌入的软件和模拟电路在内的整个系统。而现在的寄存器级的硬件描述语言将成为硬件设计的汇编语言。设计和验证工程师将只在关键的部分利用他们取得较高的性能,而一般情况下将主要利用系统及语言进行设计和验证。 本文将对当前出现的系统级设计和验证语言及其发展趋势进行全面地综述,在第2节和第3节将分别综述系统及设计语言和验证语言的发展情况。第4节论述当前主流的验证方法。 2 系统级设计语言 2.1 对系统级设计语言的要求 系统级设计的特点是:更多更复杂的功能集成和综合、功能模块或IP核,包含存储器、处理器、模拟模块、接口模块和高速、高频输入输出及软件模块,因此要考虑软件和硬件的划分、优化等协同设计和协同验证问题。根据系统级设计的特点,人们普遍认为系统级设计语言应当具有如下的特点: 1)具有形式化的语义。 2)支持特别领域规范的集成。 3)支持描述系统和部件的计算模型的复合。 4)支持更加抽象的建模。 5)支持对于限制信息的表示和集成。 6)从设计规范到设计实现整个设计过程中一致地、连续地探索设计空间。 7)支持在具体领域和多个交叉领域的预先分析和验证。 2.2 系统级设计语言的发展 21世纪初期是系统级设计语言发展变化最迅速的时期。各种系统设计语言 如雨后春笋,已经出现的系统级语言可以分成3类。 第一类是通过对于经典语言的扩展得到的语言如SystemVerilog[1]。SystemVerilog 在向高层次发展方面,对于原来的Verilog进行了根本性的修改。他混合了Verilog, C/C++和 CoDesign Automation′s SuperLog 给设计者提供了最强的能力。SystemVerilog是对于IEEE 13642001 Verilog的扩展,以便辅助提供产生并验证抽象的系统结构级的模型。在接口方面突出的特点是在高层抽象可以实现模块的连接。类似于C语言的结构,如断言结构支持性质的检验。主要扩展的目的是使得Verilog语言能够支持大规模的设计并达到更高级的抽象。他还借用了C的数据类型“char”,“int”等。凡是C的编码可以直接用在Verilog模型和验证程序中。这类对传统语言扩展的方法的优点是有利于设计者的平稳过渡,但是主张完全用C语言作为系统级语言的人们怀疑这种“改良”的方法在进行模拟时的效率不能得到满意结果。 第二类是利用软件领域的语言和方法,如C/C++,Java,UML等等。主张用C/C++作为系统级设计语言的人们认为随着时间的推移,最终将会利用C的自动编译程序和其他自动化的工具来实现从C/C++的模型到芯片的编译。在目前工具不完善的情况下必须进行人工逐步求精的设计。也就是说,目前C/C++要扩展硬件表达成分而不是只在算法级描述。例如 SpecC(the University of California, Irvine),ardwareC(Stanford University)HandelC(原先是在 Oxford University,现在转移到Embedded Solutions Ltd)SystemC++(C Level Design Inc)SystemC(Synopsys Inc)Cynlib(CynApps)等。可以把这些语言分成2类:一类是在标准C语言上进行扩充,以SpecC为代表;另一类是利用C++可扩充性,以SystemC为代表,他提供一组硬件的基本元件,这些元件可以扩充,以便在更高的层次上支持硬件。这2种互补的方法都在4个层次上即算法、模块、按照周期(cycle accurate)和寄存器传输(RTL)级别上支持硬件描述。在SystemC20之前,有些人认为SystemC是侧重于模拟,SpecC是侧重于规范和结构建模,以综合和验证为目标,但是在SystemC20之后,这些说法也不准确了,因为现在的SystemC2.0已经能够支持所有系统级的要求。SystemC填补了在传统的HDL和基于C/C++的软件开发方法之间的鸿沟。他包含C++类库和一个模拟内核,这个内核用来产生行为级和寄存器级的模型。有领先的EDA厂家管理和支持,并与商用的综合工具相结合。他支持通用的软件和硬件开发环境。 我们认为,和C相比,C++显然是比较好的选择。因为C++是可以扩展的,也因为硬件中的并发概念易于用类库表示,C++面向对象的本质与HDL的分层次特性可以很好地对应。 人们也在讨论Java是否可以作为系统及语言和高级硬件描述语言的问题[2]。例如LavaLogic先提出JHDL,他把Java语言的描述转换成为综合的HDL程序,再用所提供的工具变成门级的描述。拥护Java作为系统级描述语言的人认为Java可以提高描述和运行效率,与现在的HDL相比,能够以很简短的程序表达高层的概念。C/C++具有内在的表达并发能力,相反Java可以用线程显式的表达并发。但是Java不支持模板和操作符过载,因此可能产生大量的过程调用。 第三类是全新的系统级语言。例如Rosetta,用这一个语言,用户可以描述几乎任何工程领域的行为和限制,包括模拟、数字、软件、微流体和机械等。但是并不能代替和实现Verilog,VHDL和C等。他由美国DARPA开发,目的是给设计者提供描述大型的、复杂的计算系统,特别是混合多种技术的系统的能力,他可以在高层次上定义、捕获和验证系统的限制条件和需求条件及其部件。他提供定义和结合多个领域的语义模型,进行建模和分析。他的语义是形式化的、可以扩展的,并且能适应新系统的要求。 Rosetta 的设计方法学是基于一种多面体的小平面(facet)的概念。facet是部件或系统的模型,他提供所关心领域具体的信息。为了支持异构系统的设计,每个小平面提供具体领域的词汇和语义。他用来从不同角度定义系统的视图,然后把不同的小平面组合起来构成部件的模型。部件的模型再组合成系统的模型。 Rosetta的 facets语法对于现有的硬件描述语言的用户来说,应当是容易熟悉的。他的语法和VHDL几乎是一样的。该语言设计的主要难点是要把多个领域的信息统一在一种设计活动中。对于不同的领域,例如模拟、数字、机械、和光部件,Rosetta 提供了定义和理解系统的机制。不仅如此,他还提供对于扩展新领域进行建模的技术,这对于将来语言的发展非常重要。不能正确理解不同领域的交互作用经常是引起系统失败的根源。因此Rosetta提供显式的交互建模和评价这些交互的方法。 3 系统级验证语言 3.1 基于事务的验证和基于断言的验证 验证语言的提出需要说明基于事务的验证和基于断言的验证。解决所谓系统芯片的“验证危机”,策略之一是基于事务处理的验证(TBV),事务是概念上单一的数据或控制的转移,这种转移有事务的开始时间,结束时间和所有相关的信息确定,这些信息和事务一起存储,作为事务的属性。事务处理可以是简单的存储器读写,也可以是具有复杂的结构数据报在网络信道中的传送。把验证的层次从信号层次提高到事务处理层次,让测试具有更直观的方式,有利于测试产生、纠错过程和功能覆盖的度量。设计系统结构不是想象使能信号和地址总线如何工作,而是想象数据如何在系统中流动和存储。TBV就是这种高层次设计过程的自然展开。定性的验证过程包含3个步骤:测试生成、设计查错和功能覆盖分析。每个阶段都要提高到事务处理的抽象层次。可以用Verilog语言的task 来构成事务。这对于基本的测试也许还可以接受,但是当要产生复杂的数据结构、复杂的测试方案,动态的测试生成时,就会产生太多的限制。高级验证语言(HLV)例如近年来开发TestBuilder(C++)、Vera和 E等,就是要解决这些复杂的问题。 基于断言的验证(ABV)是把形式化方法集成到传统模拟流程中的一种有效的方法。设计团队在RTL设计中插入设计意图(断言)并且进行模拟,然后用形式化技术检查断言,限制条件,也就是合法接口行为的断言,和其他断言同时一同参加模拟。断言检查的结果改进模拟的有效性。即使利用传统的模拟验证,断言也可以大大提高模拟的效率。基于断言的验证要由用户写出断言,断言表示要验证的性质,因此需要性质描述语言。例如逻辑和时序方面的性质。这些也是验证语言要解决的问题。 3.2 目前的系统级验证语言概况 IC设计和EDA界需要一种标准化的具有公开接口的验证方法学,在2000年,Open Verilog International和VHDL International联合,组成了Accellera组织。其目的就是在系统、半导体和设计工具企业,推动、开发和培育新的国际标准。以便加强以语言为基础的设计自动化进程。面对几个在语法和语义方面都不够完善的形式性质描述语言,Accellera进行了一个选举过程,4个候选的语言是 Motorola的CBV,IBM的 Sugar,Intel的 ForSpec 和Verisity的e 语言。经过讨论,集中到Sugar和 CBV上,在2002年4月选定了IBM的Sugar 2.0[3]。Sugar 2.0的获胜造成了Accellera组织的分裂,包括Cadence在内的多数EDA工具供应商支持Accellera 的决定。另外一部分则转向支持Syopsys的 OpenVera 2.0。作为一种真正的工业标准语言,Sugar 2.0语法和语义很简单明了。基本上是基于线性时态逻辑语言(LTL),他是由基于分支时态逻辑(计算树逻辑CTL)的Sugar1.0演化而来的。其关键思想是利用一种扩展的正则表达式的构件。因此对于形式验证领域来说,理解Sugar是很容易的。 Sugar语言是由IBM的Haifa 实验是经过8年研究开发的[4],是一种说明性的形式化性质规范语言。其语义是严格的,但是易于理解和使用。可以用类似定理的形式 描述要验证 的属性,这些描述可以作为模型检验和定理证明的输入,也可以做模拟程序中检查程序的输入。Sugar由4层结构组成: 布尔层由布尔表达式构成。 时态层描述逻辑值随时间变化的性质。 验证层由一些指示词描述验证软件如何利用时态的性质。还有 些验证指示词假设某种性质成立。验证层也提供把Sugar的语句分成验证单元的方式。 模型层提供对于输入行为进行建模的方法,对于辅助信号和变量进行 说明并定义其行为。模型层也可以定义为时态层的性质和实体的名字。 Sugar具有3种风格,分别对应于硬件描述语言Verilog,VHDL和环境描述语言EDL( IBM的RuleBase 模型检验器使用的语言)。采用不同风格时,在布尔层和模型层的 语法可以不同,但是在时态层和验证层相同。 OpenVera 1.0 是Synopsys捐献出来公开的验证语言。对于模拟,他已经具有描述断言的能力。Synopsys公司和Intel公司的ForSpec相结合后产生的OpenVera 2.0也能够支持形式化验证。和Intel公司联合推出OpenVeraForespec 作为工业标准的断言语言,但是因为对于工程师来说难以接受,因此被拒绝。但是其概念还是有特点的。他的目标是作为一种支持模拟和形式验证的性质描述语言。从ForSpec借用的构件和操作包括“assume”,“restrict”,“model”,“assert” 等,这些都为形式化验证服务。语言成分“ assumeguarantee”可以把断言作为模块的性质,在高层上又作为监视器。OpenVera 用来描述断言时可以精确的描述在多个周期时间的时序行为。硬件描述语言例如Verilog和 VHDL是用来描述硬件的过程行为。这种过程模型难以有效地表述在多周期的时态行为。利用Ope nVera的断言语言OVA,用户可以方便直观地描述输入输出行为、总线协议以及其他复杂的硬件行为和关系。和硬件描述语言的描述比较,要简洁3~5倍。和Sugar语言的4级结构相比,OpenVera 2.0分为5个主要的级别: 上下文(环境)帮助定义断言的辖域(或作用域)。 指示词描述所要检查或监视的性质。 布尔表达式。 事件表达式表示时间序列。 公式表示表述时间序列之间的关系。 Sugar和 Open Vera 2.0 有2个层次是相同的,即布尔层和时态层。这些层构成了断言的核心。他们的差别在其他层次上面。OpenVera 2.0 重视性质的细致结构,用户能和断言深入交互,以便考察和探索形式验证的知识。Sugar的另外2个层次服务于性质的“格式化”,而简化与用户的交互。总之,不管用那种语言,Open Vera 2.0 或者Sugar,他们都提供了高效验证复杂系统芯片的手段。 4 对于当前验证方法的评述 目前的设计验证方法迅速发展,设计和验证语言层出不穷。但是以下的观点和结论是明确的: ②缺乏商业化的工具。 ③至今缺乏有效地使用形式化方法学的指导原则。 ④在改变验证方法带来的收益是否明显的问题上还在观望。 2)形式化方法还需要和传统的方法相结合才能发挥作用。设计和验证方法的进步应当是渐进的,不可能革命性的改变。因此在可以预见的几年内,混合验证方法应当成为主流的验证方法。断言对于表示接口限制、设计性质和设计假设都具有很深刻的作用和影响。这些会对发现过去的方法不能发现的设计错误做出贡献。特别适合测试覆盖结合起来可以极大的改进验证效率。 3)基于断言的验证是结合形式化验证和传统的模拟验证可行的途径[5]。支持这种途径的统一的设计和验证语言是SystemVerilog。他是在新的Verilog语言标准上扩充系统描述构件而开发的一种过渡性的系统级设计语言。该语言可以统一的描述复杂的设计和测试方案( testbenches)。SystemVerilog支持多级接口设计和断言,充分利用了当前的设计验证技术和实践。他后向兼容verilog,具有继承性,与其同时成为一个结合设计和验证的语言。该语言已经得到很多EDA厂商和用户的支持,预计将会流行起来。 参考文献 【1】Goering R.Nextgeneration Verilog Rises to Higher Abstraction LevelsEE Times, March 2002 【2】Habibi A,Tahar S.A Survey:Systemonachip Design and Verification Technical Report, Electrical & Computer Engineering Department, Concordia University,Montreal, Quebec, Canada, January 2003 【3】Assertionbased Verification Synopsys,Inchttp://www.synopsys.com/products/simulation/ova_wp.html,March, 2003 【4】Goering R. Accellera Picks IBM′s Formal Property Language as StandardEE Times, April, 2002 【5】韩俊刚,杜慧敏.数字硬件的形式化验证[M].北京:北京大学出版社,2001 【6】Habibi A,Tahar S. A Survey on Systemonachip Design Languages.Technical Report, Electrical & Computer Engineering Department, Concordia University,Montreal,Quebec,Canada,January 2003.Canada,2003 |