超大规模集成电路验证的可满足性问题的解决方法

文档序号:7179619阅读:361来源:国知局
专利名称:超大规模集成电路验证的可满足性问题的解决方法
技术领域
本发明属于超大规模集成电路技术领域,具体涉及一种超大规模集成电路验证的可满足性问题的解决方法。
背景技术
超大规模集成电路发展到现在,单个芯片上已经能集成几百万门甚至千万门的电路。设计这样的电路是个十分复杂的问题,要验证其正确性更是个十分困难的问题。大家知道做一次芯片试制要花费几万至几十万美元。如果不能验证其100%的正确,只要有一、二个错误的芯片,就去进行试制,不仅造成经济上的巨大损失,也带来上市时间的损失。所以完成设计后的大规模集成电路芯片必须验证其正确性,只有做到100%正确,才能进行试制性投片。目前验证所需要的时间大约是设计时间的二倍,其难度可想而知。这里所说的验证是功能验证,学术上称之为形式验证。即检查设计的电路功能是否就是原来设想要实现的功能。
可满足性(SAT)问题是形式验证中的一个重要工具。所谓可满足性问题是把电路用逻辑表达式(即布尔表达式)来描述。经处理后该表达式如果不满足,电路是正确的,否则就不正确。可满足性问题一般来说是一个NP完全问题,NP完全问题用现代计算机来计算,其计算复杂性随着逻辑变量数的增加而成指数增加。一般几百个逻辑变量所需的计算时间(即使使用最快的计算机)也是一个天文数字,因此无法对所有的情况进行正确性验证。而在大规模集成电路的逻辑描述中至少要有几万个逻辑变量。这从一般意义上说是无法进行验证计算的。近年来出现了某些启发式方法,对于从实际问题转化过来的可满足性问题实例进行研究,确认有一定规律性,并在某些部分可作简化处理。因而能解决相当数量的具有几万甚至几十万个逻辑变量的实际问题,为大规模集成电路的验证打开了应用前景。
可满足性问题的定义可以表述为,给定一个逻辑变量集合以及由这些逻辑变量或反变量构成的子句集合,问是否存在对于逻辑变量集合的一组赋值,使子句集合每个子句中至少有一个变量或反变量的值为真。若存在这样的赋值,则称问题可满足,反之则问题不可满足。目前在国际上对于解可满足性问题的算法通常分为两大类一类是基于深度优先搜索,另一类是基于局部查找。局部查找的算法是一种不完全算法,它只能在找到赋值后回答问题是可满足的,而对于在规定的时间内没有找到赋值的,并不能断定问题的可满足性。况且实际公布的运行结果表明,局部查找算法对于随机问题的效果比对于实际例子的效果一般要好,因此在实际的应用特别是在电路设计领域中有一定的应用局限性。基于深度优先搜索(又称分支回溯)的算法是当前解决可满足性问题的主流趋势(L.Zhang et al,“Efficient conflict driven learning in a Boolean Satisfiability solver”;F.Bacchus“EnhancingDavis Putnam with Extended Binary Clause Reasoning”;E.Goldberg et al,“A fast and robustSAT-solver”)。从最早的DP算法开始,算法能解决的问题规模越来越大,从一开始10个变量的规模到现在上万变量的规模。单纯的深度优先搜索算法从理论上来说是时间复杂性指数增长的算法,然而在实际运用中发现,实际问题转化而来的可满足性问题有规律性,比如子句的长度一般较短,变量在子句中的出现次数较为平均等等,这些都有利于搜索算法的应用。近年来,对于这类算法最大的改进是引入了所谓学习(learning)的技术,使搜索过程中的决策次数大大降低,提高了算法的效率。但是仅仅引入学习过程对于解决决策次数还不够。虽然现在的算法注重于整体的运算时间,但是对于决策次数的考虑有利于对问题区分,同时也有利于如何进一步考虑提高工作效率。

发明内容
本发明的目的在于提出一种可大大减少决策次数、提高工作效率的超大规模集成电路验证的可满足性问题的解决方法。
本发明提出的超大规模集成电路验证的可满足性问题的解决方法,是以深度优先搜索算法为基础,在其中加入了推理(Advanced Reasoning)过程,并利用推理过程,对决策的策略作相应改进,本发明可分成五个步骤,分别是①决策过程,②布尔约束的简化过程,③回溯过程,④学习过程以及⑤推理过程。其中决策过程,即通过一种策略选取还未赋值的变量进行赋值;布尔约束的简化就是利用已有的赋值,寻找受约束的单元子句,并对单元子句中的变量进行赋值;回溯过程就是在当前赋值遇到矛盾时(也就是出现某个子句,其所有变量的值均为假),要改变最近赋值变量的值,从而解决矛盾,向另外的搜索空间搜索;学习过程,即当遇到矛盾时,分析之前赋过值的变量情况,在其中找到导致矛盾的一组变量,以子句的形式加入到原问题中,可以在以后的搜索中避免遇到相同的矛盾;推理过程,是指在布尔约束简化过程完了以后,对于简化后的问题(子问题)作进一步探索,以期望找到更多的已经可以确定的变量赋值(所谓的强制赋值的文字),使搜索过程避免不必要的或无用的决策,从而大大降低决策次数。
下面进一步介绍推理过程、决策过程以及相关数据结构的实现方法。
推理过程
本发明采用了FLD技术(FLD即Failed Literal Detection,失败性赋值检查),目的是通过对于还未赋值变量的检测,找到那些受问题约束的强制赋值的文字,对他们进行赋值,从而在新决策之前避免不必要的探索过程。FLD最关键之处是如何确定待测变量集合。这个集合中包含强制赋值的文字的比例(命中率)越高,则算法的运行效率越高。由于实际可满足性问题的多样性,本发明提出了所谓的动态筛选的策略。也就是在每一步FLD之前动态筛去一些不可能成为强制赋值的文字的变量,缩小集合中变量的数目,从而提高FLD的运行效率。具体说来分成两步1、收集待测变量。
只对出现在所谓的二元子句(即子句中有且仅有两个变量未赋值)的变量进行收集,成为初始的待测变量集合。
2、筛选策略有两种情况的筛选(1)如果待测变量x中某个相位受其它测试变量的布尔约束,则变量x的这个相位的赋值无需再测。
比如初始的待测变量为a,b,c,设其测试的顺序也是abc,通常情况下必须对每个测试变量赋值0和1来测试该变量是否是强制赋值的文字,但是如果问题中存在这样的子句(a+b),则当测试a=0时由子句可满足性约束b必须为1,b=1这个相位就受到变量a的布尔约束,因此在测完a以后,b=1这个相位就无需再测。而在一般地实际问题中,变量之间的布尔约束是非常多的,因此利用此策略可以大大降低无用的测试过程,提高FLD的效率。
(2)如果待测变量没有出现在新产生的二元子句中,则该变量也不在本次FLD中测试。
比如变量a在上次的FLD中测试过并且没有成为强制赋值的文字,在本次FLD时,虽然它也出现在二元子句中,但是这些二元子句是上次FLD时已经存在的,而在新产生的二元子句中并没有a,因此在我们的FLD筛选策略中将a筛去。
采用了有筛选的策略后,FLD的执行效率提高了。例如在例子par16-1-c(16位奇偶校验电路),没有采用筛选策略时总的测试变量次数为308456,而其命中率为0.8%,采用了筛选策略后总的测试次数为105630,命中率为1.6%,不仅测试数减少了,而且命中率也提高了,因此程序的运行时间也由原来的28.1秒提高到5.4秒。又如在例子ssa2670-130中,没有用筛选策略时总测试变量次数为306558,命中率为0.09%,采用筛选策略后,测试数为3392,命中率为2.5%,运行时间从15.8秒提高到0.12秒。充分说明了动态筛选在FLD测试中的重要性。
决策过程对于决策过程,我们发现,原有的策略虽然计算量小,但考虑的不够“深”。原因在于原来的策略中,没有引入推理过程,对于变量所隐含的“效果”没能计算在内。本发明利用FLD的结果对原有的策略进行了改进。对于每一个变量作选取时,会有一个所谓选取的权值,每次决策选取权值最大的变量作为决策变量。这个权值可以静态的也可以是动态改变的。对于每个变量,我们把原有的策略所产生的权值作为初始值,累加上受该变量布尔约束变量的权值作为该变量新的权值(称为当前值)。决策时就选取具有最大当前值的变量作为决策变量。例如待决策的变量有a,b,c,d,其初始权值为4,10,2,8,然而对于变量c,在作FLD时发现变量b和d都受其布尔约束,因此c的当前值为10+2+8=20。而其余三个变量由于没有受约束的变量,当前值就是原来的权值,因此在我们的决策过程中会选取c作为我们的决策变量。
在数据结构的实现上,根据布尔约束简化过程和FLD过程的综合要求,设计了2-3混合型变量监测数据结构。所谓变量监测结构,就是在每个子句中挑选没有被赋值的变量作为子句状态的监测变量。当被监测的变量在任何赋值过程中被赋值后,监测指针将指向子句中下一个没有被赋值的变量。而2-3混合型结构就是指在布尔约束简化过程中每个子句监测3个变量;在FLD过程中每个子句只监测2个变量。见

图1所示。
从图1中可以看到,当程序对变量x8赋值时,由于x8并不是该子句的监测变量,因此布尔约束简化过程或FLD过程并不会访问该子句。只有当监测变量赋值以后才访问到该子句,使赋值运算的效率大大提高。同时,3变量监测可以确保FLD对变量收集的要求。混合型结构既保证了FLD收集变量的需要,又在最大限度上保留了赋值运算的高效性。
具体实施例方式
根据本发明,解决超大规模集成电路验证的可满足性问题的方法包括五个步骤决策过程、布尔约束的简化过程、回溯过程、学习过程和推理过程。根据该方法,我们设计了相应的算法程序。具体计算步骤如下1、扫描原问题的子句,初始化所有变量的当前值;2、选择具有最大当前值的变量作为本次的决策变量,并根据变量当前值的情况赋值。比如变量x为决策变量,而x比x’具有更高的当前值,则令x=1,反之,令x=0;如果在此过程中发现所有的变量已经赋值完毕,表示原问题可满足的,输出变量的赋值情况,退出。
3、根据决策变量的赋值,对问题中还没有满足的子句进行变量赋值。比如x=1,则所有包含x的子句都满足。所有包含x’的子句中寻找单元子句,根据布尔约束简化这些单元子句,即对单元子句中的变量赋值。
4、如果赋值过程中出现矛盾,就直接回溯到上一次决策变量处,改变该变量的原有赋值并执行步骤3;5、根据二元子句收集候选的测试变量,根据筛选策略去除不用测试的变量。然后对每个变量作FLD测试。一旦发现强制赋值的文字,对其相反的文字作学习过程。比如x是强制赋值的文字,x’就是相反的文字,对x’学习得到一个子句,根据子句的情况回溯到相应的决策变量处,改变该变量的值并执行步骤3,否则反复执行5直到没有强制赋值的文字,执行7;6、如果4、5在回溯过程中发现所有的搜索空间已经搜索完毕,则表示原问题不可满足,退出。
7、根据FLD的结果,根据决策策略中当前值计算法则更新所有变量的当前值,执行2。
上述实施步骤具体见图2所示。
国际上对于可满足问题算法提供了许多供测试的实例。评价的标准是看运行时间,并对不同的测试实例下的运行时间作比较以评价算法的效率。
由本发明提出的解决可满足性问题的方法记为FD1SAT(已编制成相应算法程序),与国外两个先进方法比较,其中zchaff(’02)是没有采用推理过程的程序,2cls+eq(’02)虽然采用了一定的推理过程,但没有采用FLD技术。运用的典型算例和运行结果见下表。而且在文章“Enhancing Davis Putnam with Extended Binary Clause Reasoning”(Fahiem Bacchus)中指出FLD效率不高,我们的程序运行结果否定了这样的结论。另外决策数比不采用推理过程的程序大大降低。

综上,本发明的算法模型是建立在深度优先搜索的框架上,但是对其中的重要环节提出了新的算法和数据结构,特别是引入了推理过程,采用了具有动态筛选的FLD技术,使算法的运行效率大大提高。
权利要求
1.一种超大规模集成电路验证的可满足性问题的解决方法,以深度优先搜索算法为基础,其特征在于加入了推理过程,并利用推理过程对决策的策略作相应改进,具体步骤如下(1)决策过程通过一种策略选取还未赋值的变量进行赋值;(2)布尔约束的简化过程利用已有的赋值,寻找受约束的单元子句,并对单元子句中的变量赋值;(3)回溯过程在当前赋值遇到矛盾时,改变最近赋值变量的值,从而解决矛盾,向另外的搜索空间搜索;(4)学习过程当遇到矛盾时,分析之前赋过值的变量情况,在其中找到导致矛盾的一组变量,以子句的形式加入到原问题中,可以在以后的搜索中避免遇到相同的矛盾;(5)推理过程在布尔约束简化过程完了以后,对于简化后的问题(子问题)作进一步探索,以期望找到更多的已经可以确定的变量赋值(所谓的强制赋值的文字),使搜索过程避免不必要的或无用的决策,从而大大降低决策次数。
2.根据权利要求所述的解决方法,其特征在于推理过程采用了失败性赋值检查(FLD)技术,通过对于还未赋值变量的检测,找到那些受问题约束的强制赋值的文字,对它们对应的变量赋值,具体分如下两步(1)收集待测变量只对出现在二元子句的变量进行收集,成为初始的待测变量集合;(2)筛选策略①如果待测变量x中某个相位受其它测试变量的布尔约束,则变量x的这个相位的赋值无需再测;②如果待测变量没有出现在新产生的二元子句中,则该变量也不在本次FLD中测试。
3.根据权利要求1所述的解决方法,其特征在于决策过程中把原有的策略所产生的权值作为初始值,累加上受该变量布尔约束变量的权值作为该变量的当前值;决策时选取具有最大当前值的变量作为决策变量。
4.根据权利要求2或3所述的解决方法,其特征在于采用2-3混合型变量监测数据结构在每个子句中挑选没有被赋值的变量作为子句状态的监测变量,当被监测的变量在任何赋值过程中被赋值后,监测指针将指向子句中下一个没有被赋值的变量,在布尔约束简化过程中每个子句监测3个变量;在FLD过程中每个子句只监测2个变量。
全文摘要
本发明为一种解决超大规模集成电路验证的可满足性问题方法。它以深度优先搜索为基础,加入了推理过程,并利用推理过程对决策的策略做了相应的改进。具体步骤包括决策过程、布尔约束的简化过程、回溯过程、学习过程和推理过程。其数据结构采用了2-3混合型变量监测数据结构形式。本发明方法可大大降低决策次数,提高工作效率。
文档编号H01L21/82GK1525550SQ0315103
公开日2004年9月1日 申请日期2003年9月18日 优先权日2003年9月18日
发明者丁敏, 唐璞山, 丁 敏 申请人:复旦大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1