集成电路设计验证
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
集成电路设计验证
李晓维吕涛李光辉邵明
摘 要 设计验证(Design Verification)是集成电路设计中不可或缺的重要组成部分。功能验证是设计验证最基本的内容,用于判别设计规范(Specification)和实现(Implementation)之间是否一致。本文介绍模拟验证、形式验证中的等价性检验(Equivalence Checking)和模型检验(Model Checking),介绍设计验证的基本原理以及我们在设计验证方面的基础研究成果和工程应用经验。
1引言
随着集成电路的广泛应用,对功能正确性及速度、功耗、可靠性等都有严格要求。其中,功能正确性是最基本的要求。2003年度的国际半导体技术发展报告(International Technology Roadmap for Semi-conductor, ITRS2003)[1]指出,验证已经成为集成电路设计流程中开销最大的工作。在目前的工程项目中,验证工程师的数目超过了设计工程师,对于复杂的设计更是达到了2:1或者3:1的比率。造成这种局面的原因:一方面,设计的规模正如摩尔定律所指出的呈指数增长。如果用设计中的状态数目来衡量功能复杂度的话,则设计的功能复杂度随着设计规模又呈指数增长。如此惊人的速度,对验证技术的处理能力提出了极大挑战。另一方面,历史上对设计流程中的其它环节(如逻辑综合、布局布线、测试产生等的自动化问题)关注颇多,而对验证重视不够。造成验证成为目前的瓶颈。如果没有重大突破的话,验证将成为未来集成电路设计工业流程中的重大障碍。
验证不仅是研究领域中的热点,它与企业的经济效益也是直接相关的。1994年奔腾处理器浮点处理部分出现瑕疵而被迫召回,Intel为此付出了4.75亿美元的高昂代价。因此,必须要有高效的设计验证方法来将设计错误发生的可能性降低到最小,同时又要缩短产品面市时间,从而实现经济目标。这显然不是哪一种单一的验证工具可以做到的。一般来讲,设计验证方法包括两大类:模拟的方法和形式化的方法。一般的模拟验证流程如图1所示。形式验证使用严格的数学推理来证明一个系统满足全部或部分规范[2]。这就要求设计方案的规范和实现都存在形式化的描述。形式验证方法大体上可分为三类:等价性检验、模型检验、定理证明(Theorem Proving)。
图1 模拟验证流程
2模型检验的变迁
2.1 硬件模型检验
VLSI/SoC设计可以用形式的方法抽象成有限状态机器模型。所谓有限状态机器是指一个状态随着输入而变化的系统。如图2所示,若当前状态为X,而输入为I,系统会从当前状态迁移到Y,相
应的有输出O。在该抽象系统上来验证设计是否合乎设计初衷,一个重要的验证方法就是模型检验。
模型检验概念是Clarke和Emerson在1981年提出的。光阴荏苒,转瞬二十几年,模型检验也从概念雏形逐渐走向成熟,走向工业应用。模型检验所针对的对象是同步的时序设计。系统的设计规范用时态逻辑公式来刻画。而通过对有限状态系统可达状态空间的遍历来证明设计符合规范,增强设计者的信心,或者是通过提供规范的反例,以帮助设计者来发现早期设计的错误。反例给出的方式是从系统的初始状态出发到“坏”的状态的路径。系统的状态空间能够用有效的抽象符号算法来隐含地描述。抽象符号算法包括有向迁移图、二叉决策图(BDD- binary decision diagram)、合取范式(CNF- conjunctive normal form)等有效手段。
模型检验作为重要的形式验证方法有如下三个最基本的特
点[3]:
其一,自动化程度高。只需要给出所要设计的模型描述,
以及所要检验的规范,不需要验证者与工具进行很多复杂交互,
模型检验即自动给出验证的结果。如果一个系统不满足某个属
性,模型检验会自动给出有悖于这个属性的反例。
其二, 假定被验证的对象是有限的。模型检验应用成功的典型例子是数字时序电路以及一些通讯协议。
其三,模型检验所认定的描述系统属性的语言是时态逻辑。可以认为时态逻辑是在逻辑的基础上添加对时间的描述,它所针对的是随着时间的推移,对考察的事件发生与否的认定。
一般说来,可以将模型检验所要验证的时态属性分为活性和安全性两种[3]。所谓活性是指从系统的初始状态出发一定能达到某种所期望的状态,而安全性是指从系统的初始状态出发,不期望的状态始终不会达到。设计的系统活性失败,是指不存在从系统的初始状态到期望状态的路径。模型检验在此种情况下是以状态环路的形式给出反例,即系统陷入到环路之中而不能到达所期望的状态。当检验系统的安全性失败,模型检验会提供从初始状态到不期望的状态的路径。
从模型检验的方法可以看出,它所检验的设计的正确性是相对于规范而言,即在默认规范正确的情况下,来验证所设计的系统是否符合规范。在实际的应用中,所设计的系统的状态空间往往超出能处理的规模。所以模型检验一般用来寻找反例,即用来“证伪”,而不大可能在所能容忍的时间内给出完全性,并且不能排除系统存在错误。正是因此,形式方法不能从真正意义上替代传统的模拟以及测试的方法,只能用来作为一种有效补充。
2.2 符号模型检验
模型检验的发展一直是在克服内存爆炸这一瓶颈所带来的问题,因为它试图在整个系统的状态空间中来对规范寻找反例或者证明符合规范,而状态空间的大小,即系统所能达到的状态数目的尺度是与系统本身的尺度成指数关系的。显然要想对系统进行完全的验证就不得不面对这样的问题:怎样有效的表示状态空间。早期模型检验工具的雏形采用显式的方法来表示状态空间,通过逐个枚举系统可能达到的状态来对设计进行验证。因此处理规模十分有限,仅仅达到几百万状态的容量,这阻碍了模型检验这种验证方法进入工业界。
怎样用一种紧致的隐含方法来表示状态空间是克服内存爆炸问题的第一个途径。九十年代初期,研究者们注意到状态空间集合实际上可以用特征函数来表达。这其实是将状态空间转化为布尔函数。而BDD是布尔函数一种很好的表达方法,它是把布尔函数表示成正则的压缩的图。早在1986年