同步时序电路时序深度计算方法

文档序号:6522827阅读:279来源:国知局
专利名称:同步时序电路时序深度计算方法
技术领域
本发明属于超大规模集成电路技术领域,具体涉及一种超大规模集成电路的模型验证中为保证验证的完备性而计算同步时序电路时序深度问题的解决方法。
背景技术
目前,电子硬件系统已经广泛应用于各种关键领域,例如电子商务领域,电话交换网络,高速公路和空中交通的控制系统等等。在这些领域中,系统发生错误所带来的损失通常是不可接受的,但是还是经常发生一些由于硬件系统出错而导致系统发生错误的事件。因此可靠的硬件系统是至关重要的。在当今的硬件设计小组中尽管有70-80%人从事验证工作,但是有错误的芯片还是会被生产出来,并且直到用户遇到后才会被发现,从而导致重大的商业损失。
在超大规模集成电路的验证领域中,最常使用的验证方法是基于信号模拟的方法。但是由于设计复杂度的不断提高,这种验证策略变得越来越缺乏效率。例如,据Intel公司报道,在奔腾四微处理器的验证过程中,共模拟了超过2000亿个时钟周期,但是如果当微处理器运行在1GHz的主频下时,这只相当于微处理器运行了两分钟。此外,基于模拟的验证策略也不能保证验证的完备性在最好的状态下,基于模拟的验证方法也只能将设计出错的可能性降低到一个可以接受的水平,而不能保证设计功能百分之百的正确性。
作为替代方法,形式验证方法被提出并且在许多工程项目中得到使用。为了能在设计早期发现设计中的错误,模型校验的方法被广泛的使用。基于有界模型校验的方法在设计达到10万门数量级时仍可以得到非常好的结果。
但是有界模型校验方法存在一个算法本身固有的问题,即在给定的界限内,不能给出完备性的证明。为了解决这个问题,用于计算电路时序深度的算法被提出。在得到电路的时序深度后,就可以给出有界模型校验的所需计算的最大深度,从而给出完备性解释。
目前,时序深度算法主要是基于可满足性引擎的。在其他算法中,首先将时序深度的计算问题转化为一个定量布尔方程式QBF(Quantified Boolean Formula)。但是QBF的计算有两个主要的障碍。首先,量词和取反操作不能简单的用于可满足性算法引擎。其次,路径的查询运算有遍历操作,过于费时。因此人们对QBF进行了化简,将一步QBF运算变为两步可满足性运算[1]。虽然步骤增加了,但是由于运算变得更简单了,从实验结果来看,速度还是可接受的。但是该算法还有一个很大的缺点,当时序深度很深的时候,运算规模往往会超过可满足性算法引擎的处理能力。因此从实际处理能力上来讲,单纯使用可满足引擎的算法应用范围受到很大的限制。

发明内容
本发明的目的在于提出一种速度快的基于可满足性算法引擎的计算同步时序电路时序深度的方法。
本发明提出的时序电路的时序深度的计算方法,以可满足性算法引擎为基础,数据结构采用状态显式存储方式,来降低可满足性算法引擎的负担。由于状态空间的显式存储,降低了算法中可满足性引擎的运算规模。虽然可满足性算法引擎的调用次数增加了,但是由于每次调用时问题的规模都不大,所以速度仍然快于单独使用可满足性引擎的算法。
根据本发明,解决时序电路设计的时序深度计算的方法包括如下步骤状态的初始化、后续状态的计算、历史状态的遍历、新状态的存储、冗余状态的剔除和算法引擎的复位。具体内容如下1、状态的初始化读取实际的设计电路,从中抽取出有限状态机模型,该模型至少包含状态转换方程和系统初始状态集合,然后完成初始化任务,如内部变量的初始化;2、后续状态的计算建立一个表示系统状态转换方程的CNF式,用该CNF式来计算某一当前状态的后续状态;3、历史状态的遍历与冗余状态的剔除遍历历史状态空间,确定后续状态是否为新出现的状态,如果是,则在历史状态中存储该状态;如果不是,则将该状态加入用于计算后续状态的CNF式中,用于剔除冗余状态;4、新状态的存储记录是否有新的状态出现,如果有,清空当前状态的集合并将出现的新状态变为下一深度的当前状态;如果没有新的状态出现,则当前的电路深度就是该有限状态机的时序深度,返回该值;5、算法引擎的复位将可满足性引擎复位,其中包括将状态变量和输入变量置位;继续重复步骤3、4,直至没有新状态出现。
上述实施步骤具体见图1所示。
下面进一步介绍本方法中的两个算法点,即后续状态计算和历史状态遍历的实现方法。
后续状态计算
首先得到各个状态变量的状态转换函数。然后再根据设计中所列基本门逻辑到交集普通方程式(CNF)表达式的转换关系,将状态转换函数变为CNF式。在本发明算法中,将当前状态的赋值加入CNF中,然后调用可满足性算法引擎。每一个CNF式所得到的可满足赋值结果都给出一组后续状态的赋值。将该后续状态赋值变为一个CNF式的子句加到原始的CNF式中,以避免重复。然后判断该后续状态是否为新状态,如果是新状态,则把该状态加入到历史状态集合中,反之则不做任何操作。当不再有新状态出现时,结束迭代运算操作。在实际电路中,状态转换函数一般不会特别复杂,所以可满足性算法的引擎一般总能达到非常高的速度。
由于本算法在每一次计算后续状态的运算中不用大幅修改CNF式,因此寻找新状态的时间大概保持在一个常数的量级。这样即使时序深度非常的大,CNF式的规模不会超过目前所有可满足性算法引擎的计算能力。
历史状态的存储为了高效地存储的系统的历史状态,本发明的存储的数据结构采用二叉搜索树形式。由于预先很难预测到历史状态的数量等重要信息,因此采用链表存储表示的二叉树。并且由于每个状态的编码都不同,而我们仅需要快速的查找功能,因此本发明初始实现的数据结构为二叉搜索树(Binary Search Tree),其定义如下二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树1.每个结点都有一个作为搜索依据的关键码(key),所有结点的关键码互不相同;2.左子树(如果存在)上所有结点的关键码都小于根结点的关键码;3.右子树(如果存在)上所有结点的关键码都大于根结点的关键码;4.左子树和右子树也是二叉搜索树。
为了提高二叉搜索树的效率,减少树的平均搜索长度。我们在改进的实施中采用了高度平衡二叉搜索树的算法。该算法在插入一个新结点时调整树的结构,使得二叉搜索树保持平衡,从而尽可能降低树的高度,减少树的平均搜索长度。高度平衡二叉搜索树的定义如下一棵高度平衡二叉搜索树或者是一个空树,或者是具有下列性质的二叉搜索树它的左子树和右子树都是高度平衡二叉搜索树,且左子树和右子树的高度之差的绝对值不超过1。
若设在新结点插入前高度平衡二叉搜索树的高度为h,结点个数为n,则插入一个新结点的时间是O(h)。这与一般的二叉搜索树相同。在最坏情况下,在一般二叉搜索树中插入一个新结点所需的时间为O(n)。而对于高度平衡二叉搜索树来说,最坏搜索高度为

完全可以满足本发明方法的要求。
国际上对于时序电路的验证给出了许多供测试的实例。评价的标准是看不同的测试实例下的运行时间,为保证公平性,一般选择相同的平台。
由本发明提出的解决可满足问题的方法记为FDSDC(已编制成相应算法程序),与国外最新的方法比较SDC03(2003年)。算法的实现采用C++语言,并利用Zchaff作为SAT-Solver来计算电路的后续状态。程序在主频为2GHz的P4PC上运行,物理内存1GBytes,测试实例为ISCAS’89的10个实例。该测试环境与SDC03相同,具体运行结果见下表。

综上,本发明的算法模型使用成熟的可满足性引擎作为运算的核心,辅助于历史状态的存储,减少了可满足算法引擎的压力。由于状态空间的显式存储,降低了算法中可满足性引擎的运算规模。虽然可满足性算法引擎的调用次数增加了,但是由于每次调用时问题的规模都不大,因此使算法的运行效率大大提高。


图1为本发明方法的流程框图。
图2为一个同步时序电路。
图3为状态计算的具体流程。
具体实施例方式
图1给出一个小例子来说明如何将状态转换函数转变为布尔方程。
按照上节所述,首先得到各个状态变量的状态转换函数,即 然后根据所列基本门逻辑到CNF表达式的转换关系,将状态转换函数展开成如下CNF式T(y+,y,x)=(y‾1++y2)(y‾1++x1)(y1++x‾1+y‾2)(y2++x‾2)]]>(y2++y‾1)(y‾2++x2+y1)·······(1)]]>在得到系统状态转换函数的CNF式后,就可以非常方便的通过调用可满足性算法引擎来计算在给定当前状态的所有后续状态。
在本发明所提到的算法中,首先将当前状态的赋值加入CNF中,然后调用可满足性算法引擎。每一个CNF式所得到的可满足赋值结果都给出一组后续状态的赋值。首先将该后续状态赋值变为一个CNF式的子句加到原始的CNF式中以避免重复。然后判断该后续状态是否为新状态,如果是新状态,则把该状态加入到历史状态集合中,反之则不做任何操作。当不再有新状态出现时,结束迭代运算操作。在实际电路中,状态转换函数一般不会特别复杂,所以可满足性算法的引擎一般总能达到非常高的速度。
为了更清楚的解释本发明方法,下面以图2电路为例给出状态计算具体流程,见图3所示。
首先把电路的初始状态,设为y1=0,y2=0,然后将电路深度置为0。将子句y1和y2加到式(1)中,得到下式T(y+,y,x)=y‾1y‾2(y‾1++y2)(y‾1++x1)(y1++x‾1+y‾2)]]>(y2++x‾2)(y2++y‾1)(y‾2++x2+y1)······(2)]]>调用可满足性算法引擎计算初始状态下的后续状态,得到新的后续状态y1+=0,]]>y2+=1,]]>为了避免状态y1+=0,y2+=1]]>的重复出现,我们将子句(y1++y2+)加入式(1)中。此时状态转换函数变为下式T(y+,y,x)=y‾1y‾2(y‾1++y2)(y‾1++x1)(y1++x‾1+y‾2)]]>(y2++x‾2)(y2++y‾1)(y‾2++x2+y1)(y1++y‾2+)······(3)]]>继续调用可满足性算法引擎,得到该式为不可满足式,说明初始状态y1=0,y2=0再无后续状态,结束该状态的后续状态的计算。由于有新的状态出现,因此需要进行下一层的运算,将电路深度增1,重置可满足性算法引擎。将当前状态置为新的状态y1=0,y2=1,将子句y1和y2加到式(3)中,得到下式T(y+,y,x)=y‾1y2(y‾1++y2)(y‾1++x1)(y1++x‾1+y‾2)]]>
(y2++x‾2)(y2++y‾1)(y‾2++x2+y1)(y1++y‾2+)······(4)]]>调用可满足性算法引擎计算后续状态可得新的状态y1+=1,y2+=0.]]>同理为了避免状态的重复出现,我们将子句(y1++y2+)加入式(4)中。此时状态转换函数变为下式T(y+,y,x)=y‾1y2(y‾1++y2)(y‾1++x1)(y1++x‾1+y‾2)]]>(y2++x‾2)(y2++y‾1)(y‾2++x2+y1)(y1++y‾2+)]]>(y‾1++y2+)······(5)]]>继续调用可满足性算法引擎计算后续状态又可得新的状态y1+=1,y2+=1.]]>同理为了避免状态的重复出现我们将子句(y1++y2+)加入式(5)中。此时状态转换函数变为下式T(y+,y,x)=y‾1y2(y‾1++y2)(y‾1++x1)(y1++x‾1+y‾2)]]>(y2++x‾2)(y2++y‾1)(y‾2++x2+y1)(y1++y‾2+)]]>(y‾1++y2+)(y‾1++y‾2+)······(6)]]>继续调用可满足性算法引擎,得到该式为不可满足式,说明初始状态y1=0,y2=1再无后续状态,结束该状态的后续状态的计算。由于又有新的状态出现,因此继续进行下一层的运算,将电路深度增1,重置可满足性算法引擎。将当前状态依次置为y1=1,y2=0和y1=1,y2=1,继续按上述方法分别进行后续状态的计算,由于没有新状态的出现,因此运算终止,该电路的时序深度应该为2。
由于本发明算法在每一次计算后续状态的运算中不用大幅修改CNF式,因此寻找新状态的时间大概保持在一个常数的量级。而SDC03(2003年)的算法使用了增量算法,为了计算时序深度,该文把电路按时间帧展开,导致对于每次后续状态的计算时,都会以线性增长的速度增加CNF的规模。如果时序深度过深的话,CNF式的规模很快就会超过目前所有可满足性算法引擎的计算能力。
权利要求
1.一种同步时序电路时序深度计算方法,其特征在于以可满足性算法引擎为基础,数据结构采用可达状态的显式存储方式,来降低可满足性算法引擎的负担,具体步骤如下(1)状态的初始化读取实际的设计电路,从中抽取出有限状态机模型,该模型至少包含状态转换方程和系统初始状态集合,然后完成初始化任务化;(2)后续状态的计算建立一个表示系统状态转换方程的CNF式,用该CNF式来计算某一当前状态的后续状态;(3)历史状态的遍历与冗余状态的剔除遍历历史状态空间,确定后续状态是否为新出现的状态,如果是,则在历史状态中存储该状态;如果不是,则将该状态加入用于计算后续状态的CNF式中,用于剔除冗余状态;(4)新状态的存储记录是否有新的状态出现,如果有,清空当前状态的集合并将出现的新状态变为下一深度的当前状态;如果没有新的状态出现,则当前的电路深度就是该有限状态机的时序深度,返回该值;(5)算法引擎的复位将可满足性引擎复位,其中包括将状态变量和输入变量置位;继续重复步骤3、4,直至没有新状态出现。
2.根据权利要求1所述的方法,其特征在于所述用CNF式计算某一当前状态的后续状态,其步骤是将当前状态变量的赋值加入到CNF中,然后调用可满足性算法引擎,每一个CNF式所得到的可满足赋值结果都给出一组后续状态的赋值;将该后续状态赋值变为一个CNF式的子句加到原始的CNF式中,以避免重复;然后判断该后续状态是否为新状态,如果是新状态,则把该状态加入到历史状态集合中,反之则不做任何操作。
3.根据权利要求1所述的方法,其特征在于所述历史状态的存储,其数据结构采用二叉搜索树形式(1)每个结点都有一个作为搜索依据的关键码,所有结点的关键码互不相同;(2)左子树上所有结点的关键码都小于根结点的关键码;(3)右子树上所有结点的关键码都大于根结点的关键码;(4)左子树和右子树也是二叉搜索树。
4.根据权利要求3所述的方法,其特征在于采用高度平衡二叉搜索树算法,该高度平衡二叉搜索树或者是一个空树,或者是具有下列性质的二叉搜索树它的左子树和右子树都是高度平衡二叉搜索树,且左子树和右子树的高度之差的绝对值不超过1。
全文摘要
本发明属超大规模集成电路技术领域,具体为一种同步时序电路时序深度计算方法,该方法以可满足性算法引擎为基础,数据结构采用可达状态的显式存储方式来降低可满足性算法的负担,具体步骤包括状态的初始化、后续状态的计算、历史状态的遍历、新状态的存储、冗余状态的剔除和算法引擎的复位等。本发明方法的运行效率大大提高。
文档编号G06F17/50GK1710568SQ20051002760
公开日2005年12月21日 申请日期2005年7月7日 优先权日2005年7月7日
发明者张忠林, 唐璞山 申请人:复旦大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1