专利名称:规律性析取的系统方法
背景技术:
发明领域本发明涉及计算机辅助设计(CAD),更具体来说,涉及集成电路设计中的规律性析取。
背景技术:
在高性能常规集成电路设计中,设计者利用在电路中经常存在的高度规律性在面积和性能方面生成高效的布局。数据通路(datapath)电路在宽总线上执行各种算术和多路转接操作。这种电路有高度的规律性。通过确定和析取电路中的规律性,能节省设计工作量,由此提高设计者的生产率。然而,通用微处理器中的数据通路电路目前几乎完全由手工设计。现有的CAD工具不能在有竞争力的设计所必需的程度上析取和利用规律性。
文献中提出过各种析取功能规律性的技术。例如,D.S.Rao等的“最大规律性析取的分组”(IEEE集成电路和系统CAD学报第8期(1993年8月)12卷1198-1208页)中描述了一种串匹配算法,该算法用于寻找电路中用户定义的样板的所有实例,然后试探地选择该样板集合的子集来覆盖电路。最终覆盖是对设计者提供的样板敏感的。M.R.Corazao等的“使用高密度数据通路高级合成的样板匹配进行性能优化”(IEEE集成电路和系统CAD学报第8期(1996年8月)15卷877-887页)也假设提供了一个样板库,但是主张生成电路中给定样板的所有完全的以及部分的实例。在R.D.T.Nijssen等的“逻辑优化数据通路的规律布局生成”(物理设计国际研讨会论文集(1977)42-47页)中描述的另一个方法,选择诸如锁存器的小逻辑部件作为样板,然后扩展它们,以获得更大的样板。这个方法高度依赖于样板的最初选择。
以上列举的文章中的方法或者依赖于用户定义的样板,或者以不完全的或特定的方式生成样板。这些方法丧失了了规律性析取的机会。
所以,需要用于系统的规律性析取的技术。
在有些实施例中,本发明包括一种包括通过对电路的描述的计算机自动化操作生成电路的样板集合的规律性析取方法。该方法也包括以这些样板的子集覆盖电路。
在有些实施例中,样板集合包括单-初级(single-principal)输出样板,其中,单-初级输出样板是这样一种样板-在该样板中,样板的所有输出都在样板的某特定输出的传递扇入(transitive fanin)中。样板集合也可包括树样板。
在有些实施例中,样板集合是给定一定假设的样板的完全集合-这些假设包括,样板集合包括所涉及的各类样板的所有最大样板,并且样板不是通过改序门输入而生成的。
根据以下给出的详细说明和本发明实施例的附图,将能更全面地理解本发明,不过不应认为说明和附图是限制本发明于所述的特定实施例,相反,说明和附图只是为了解释和理解。
图1是一个电路和覆盖电路的不同部分的三个样板的示意性表示;图2是一个2对1多路转接器的示意图;图3是一个与-或门的示意图;图4A是图形G’;图4B示出通过置换图4A的节点的输入边所获得的两个样板;图4示出具有由0(2v)给定的样本数的图形G;图5示出HDL分配(assignment)的表示;图6示出图5A的图的树样板;图7是由两个样板的不同实例覆盖的乘法电路的示意性表示;图8示出对应于图7的乘法器的图;图9A示出两个图8的图的两个功能相当的子图形;图9B示出两个具有重叠节点的样板;图9C示出通过合并图9B的两个样板而形成的样板;图10A示出一个数据通路电路和两个单-P0样板的覆盖;图10B示出一个具有哑节点的数据通路电路和使用单一哑输出总线的单一样板的覆盖;图11示出图1的电路的样板层次;图12示出能在规律性析取中使用的计算机系统。
发明详述1.概述本发明包括一种从诸如硬件描述语言(HDL)说明的高级行为或结构说明中为电路(特别是数据通路电路)析取功能规律性的一般性方法。Verilog或VHDL是HDL的著名例子。本发明的实施例涉及自动生成样板集合,其中,样板是具有电路中至少两个实例的子电路。由于可以将电路表示为图形,所以可以将子电路称为子图形。子图形可以是样板的实例。在有些实施例中,样板集合是在一些简化假设下的所有可能样板的完全集合。样板集合可包括多于一类的样板。例如,在有些实施例中,一类样板是树样板,另一类是特殊的多输出样板(称为单-初级输出(单-P0)样板)类,其中,样板的所有输出都在样板的某特定输出的传递扇入中。可以将树看作是单-P0样板的特例-只有一个输出。然而,树样板被认为是不同于单-P0样板的一类。在有些实施例中,用不同的算法来生成树样板和单-P0样板。
如下所述,该样板集合的一个子集被选择用来覆盖电路。与现有技术水平的技术不同的是,用户不必规定要使用的样板。不过在有些实施例中,用户可以规定一些样板。
短语“有些实施例”指本发明的至少一些实施例。出现的各个“有些实施例”未必指的是相同的实施例。如果说明书指出“可以”、“可能”或“可”包含某部件、特点、结构或特征,则不是要求包含该特定部件、特点、结构或特征。说明书中提及“实施例”或“一个实施例”时,意思是与该实施例相联系描述的个别特点、结构或特征包含在本发明的至少一些实施例中,但未必包含在所有实施例中。
高级描述中的电路的部件可以是逻辑门(诸如“与”、“或”和多路转接器)或算术运算器(诸如加法器和位移器)。规律性析取的任务是确定一个样板集合,用这些样板的子集覆盖该电路,其中的目的可能是使用具有许多实例的大样板。然而,规律性析取经常要进行折衷,因为大样板通常有较少的实例,而小样板则可能有许多实例。好的样板集合的组成,可允许多个准则(诸如面积、定时(timing)和电能)之间的折衷,并允许用户建立多技术设计,诸如使用静态逻辑和动态逻辑的组合。现有技术水平的技术将缺少许多这些折衷,产生次优的覆盖。可能有具有高级语言定义一个差别(例如,样板中部件上的加载)的相同功能描述的不同样板。
下面是一例HDL描述。
Inputs a[30],b[30],c[30],s0;Clock clk;Outputs x[10],y[30];begin mainfor i=0 to 3 do{d[i]=AND y[i];e[i]=d[i]on rising clk;y[i]=if s0 then e[i]else b[i]}for i=0 to 1 do{f[i]=c[i]OR y[i];x[i]=f[i]on falling clk;}end main;图1表示一个可根据以上HDL描述创建的电路10。电路10包括四个位片(0-3)。HDL描述包括两个do循环。第一个样板S1包括第一个do循环的成分。(S1中的字母“S”代表英语单词前缀“sub”。)因为在第一个do循环中,i从0步进到3,S1包含在四个位片(0-3)的每一个中。第二个样板S2包括第二个do循环中的成分。因为在第二个do循环中,i从0步进到1,S2只包含在位片0和1中。第三个样板S3包括位片0和1中的S1和S3。本发明能被用来-通过系统地生成样板S1、S2和S3,然后以这些样板的子集覆盖电路-从HDL描述中析取规律性。一个覆盖包括S1的四个实例和S2的两个实例。另一个覆盖包括S3的两个实例和不包含在S3中的S1的两个实例。在有些实施例中,作为覆盖过程的一部分,S2和包含在S3中的S1的两个实例要在覆盖中从可能的样板列表中去除。样板S1和S2是树样板的例子,样板S3是单-P0样板的例子。从更宽的角度来看,S1和S2也是单-P0样板。
最大样板是它可能的最大大小,仍然是个样板。次最大(submaximal)样板是另一个样板内的样板。例如,有“与”门样板的四个实例,“与”门样板是次最大样板,因为它在样板S1内。在有些实施例中,不生成这种次最大样板。在其它实施例中,这种次最大样板被生成,但是不被考虑作为覆盖过程的一部分。一个样板,对树样板来说可以是个最大样板,但是如果按单-P0样板考虑,则是个次最大样板,例如,对树样板来说,S2是最大样板。对单-P0样板来说,S2是次最大样板,因为它在样板S3内。
给定电路中的规律性,可能是功能的、结构的或拓扑的。给定高级(行为的或结构的)描述,功能规则的电路使用功能相当的操作或子电路(样板)的集合。功能规律性可被用来重新构造HDL码,以便例如通过确定资源共享的机会提高高级合成结果的质量。HDL描述中的结构通常指说明性地定义的块-块中包括能通过对各网(nets)指定水平方向或垂直方向而示意地描述的网表(netlist)。最后,有有序的块集合的拓扑规则的设计为电路给出良好的初始布局。本发明特别关注功能规律性,但可以应用于结构规律性和拓扑规律性。
2.问题描述下面提供与有些实施例相联系的细节。然而,本发明并不限于这些特定细节。规律性析取的输入是由可以是逻辑门或算术运算器的部件构成的电路C。C一般是用HDL描述的。我们可以用有向图形G(V,E)来表示C,其中V中的节点相当于逻辑部件或C的初级输入(primaryinput),E中的边相当于C的部件与初级输入之间的互连。可以将集合V划分成两个子集I和L,分别相当于初级输入的集合和逻辑部件的集合。初级输入的集合0是L的子集。我们用一对函数表示G中C的部件的逻辑功能。我们首先定义逻辑功能lL→{l,…,l0},其中l0是逻辑功能的不同类型的总数。如果l[u]=l[v],则u和v相当于相同的逻辑功能,例如2对1多路转接器。类似地,我们把e中的每一个边与一个下标kE→{l,…,k0}相关联,其中,k(u1,v)=k(u2,v)时,表示v的两个输入边是等同的。例如,图2表示的多路转接器的输入边有全部不同的下标,而图3的“与-或”门有只指定了两个下标的四个边。
G的子图形是使得ViV和EiE的图形Gi(Vi,Ei)。VI被划分成Ii和Li。初始输入的集合Oi又是Li的子集。G的子图形相当于C的子电路。我们只考虑G中那些只满足下述条件的子图形如果v∈Li,则对于由边(u,v)与v相连的每个节点u,u∈IiULi。我们称满足该条件的子图形为G的可行子图形,因为它们相当于C的有意义的子电路。自此开始,子图形将隐含可行子图形的意思。
两个子图形Gi和Gj,当且仅当满足下列条件时,我们认为是功能等同的(a)它们是同形的(就是说,Vi和Vj之间存在一对一的映射φ);(b)对应节点的逻辑功能是相同的(就是说,l[v]=l[φ[v]]);(c)对应边的下标也是相同的(就是说,k[u,v]=k[φ[u],φ[v]])。我们称这个关系的等同类为样板。可以将G的子图形的任何集合S划分成m个样板S1,…,Sm,其中Si含有Si个子图形。我们通过面积[Si]=∑vL Lia[l[v]]来估算对应于样板Si的子电路的面积,其中,a[j]是逻辑功能j的节点的面积估计。
G的覆盖是满足下列条件的C的可行子图形的集合C(G)=(G1,…,Gn}1.G的每一个节点属于C(G)中的至少一个子图形,即VV1U…UVnU。
2.如果节点v是子图形的初始输入,则它或者是G的初始输入,或者是另一个子图形的输出,即,对于所有v∈II,v∈IU01…U0n。
在有些实施例中,规律性析取的问题是按下述方式陈述的。给定一个由图形G表示的电路,寻找一个被划分成m个样板S1,…,Sm的覆盖C(G)={G1,…,Gn},使得子图形的数目n和样板的总面积mi=1area[si]最大。子图形数的最大化,将减少设计电路所需的工作量,而样板面积的最大化则将由于便于在映射和布局期间更好的优化而减少总面积和延迟。以上两个目的是冲突的,因为大样板一般只有少量的子图形。
总之,即使子图形是从给定的集合中选择的,寻找最优的覆盖也是NP-完全的(非多项式时间可解的)。这里,问题更加复杂,因为没有这种子图形的集合用于选择覆盖。在有些实施例中,通过将问题分解成两个部分来降低问题的复杂性首先生成样板集合,然后选择该样板集合的子集用于覆盖G。两个子问题在下面讲述。
在有些实施例中,就图形覆盖(graph covering)而言,给定一个由图形G表示的电路,树和/或单-P0样板的完全集合是在一定的假设下生成的。
在有些实施例中,就图形覆盖而言,给定一个由图形G及其样板的集合ST(G)={S1,…,Sp}表示的电路,寻找被划分成m(≤p)个样板的G的覆盖C(G,ST)={G1,…,Gp},使得子图形的数目n和样板的总面积mi-1area[si]最大。
3.样板生成的复杂性以下是在有些实施例中使用的一些实际假设,它们将把所寻址的(addressed)样板的数目减少在V2(即V×V)的范围内。这些假设将在规律性析取的范围内被证明是正确的。
假设1.样板集合包括给定类的所有最大样板。(样板的定义假设必须至少有两个实例。)在有些实施例中,该集合也可以包括次最大样板,它们可以在覆盖过程中被去除。
即使在考虑了假设1之后,样板的数目也可以是0(2v)(即,数量级是2v)。考察图4A的由两个不相连的树组成的图形G’,其中,每个节点的输入边有相同的下标。它有图4B中所示的两个样板。图4C的图形G由两个不相连的二叉树组成,所有内部节点都有相同的函数1[v]=1,而叶层则由两个子图形G1和G2的其中之一构成。G的样板数是0(2v),因为用图4B的样板的哪一个都能把每一对子图形G1和G2配对。
在有些实施例中,我们作出下列假设即使两个边(u1,v)和(u2,v)有相同的下标k[u1,v]=k[u2,v],也不允许置换节点的输入边。例如,相当于“或”门的节点的两个输入边要指定不同的下标,即使它们是等同的。
假设2.样板不是通过改序门输入生成的。从另一个角度来看,对于有来自节点u1,…,uf的输入边的G的每个节点,对每个边指定一个独有的下标k[ui,v],1≤i≤f。在有些实施例中,样板不是由置换的输入生成的。在其它实施例中,样板是由置换的输入生成的,但是在覆盖过程中被去除。
假设2不允许(图4B中所示的)S2作为图4A的图的样板,因为S2要通过置换节点f和g与节点j和k创建。结果,图4C的图形G’也有单一的样板。以上假设的正确性在于,G是由C的HDL描述构造的,这保证具有相同功能的节点是相同地定义的。例如,如图5中所示,HDL赋值语句“for i=4 to 6{x[i]=a[i]b[i]+c[i]d[i]}”将相当于三个在建立G时被相同地转换的节点。以上假设不排除HDL描述中内在的规律性。由于假设2,边下标与图3中的那些不同。本发明的不同实施例可以遵循假设1和/或假设2和/或其它假设。
现在考察有关有些实施例中树样板和单-P0样板的生成的细节。
4.树样板的生成树样板是有单一输出而没有内部再收敛(reconvergence)的样板。内部再收敛的例子是与并行通路(并行通路的其中一个或两个都有中间节点)分离并再收敛到节点的通路。我们提出一个生成给定图形G的所有树样板的算法(例如伪码样本1)。伪码样本1确保假设2,但可能违反假设1而生成次最大样板。然而,次最大样板可以在覆盖的完成之前被去除。可以看到,在假设1和2下,树样板的数目被减少到V2以内,使这种样本的枚举切实可行。我们将分析G中节点的扇入有界时的情况的复杂性。样板存储在集合ST={S1,…,Sm}中,其中每个样板Si是一类功能等同的子图形。在有些实施例中,我们不是完全地存储每个样板,而是把样板存储为层次结构的样板的集合。样板Si可以由其记为根_fn[i]的根节点的逻辑函数以及根部在根节点的f个扇入节点的子图形所属的样板列表子_样板[i]={S1,…,Sf}完全地定义。
例如,图6表示(图4A中的)图形G’的样板S1,…,S8。样板S8能由根_fn[8]=1和子_样板[8]={S6,S7}精确地定义。我们也通过只在列表根_节点[i]中存储子图形的根节点而减少存储每个样板的子图形所需的空间。就图6中的样板S8来说,根_节点[8]={o,p}。可以显示的是,样板Si的子图形,能用根_fn[i]以及列表子_样板[i]和根_节点[i]重新构造。
为了提高效率,可以将样板列表ST按定义为键={根_fn,子_样板}的大小为f+1的复合键排序,其中f是扇入节点的数目。下面在伪码样本1中给出在本发明的有些实施例中使用的树样板生成算法伪码样本1/*树样板Si完全由下列定义(i)根_fn[i](根节点的逻辑函数);(ii)子_样板[i])(构成Si的子样板列表);(iii)根_节点[n](Si的子图形的根节点列表(Si的所有子图形都能根据这三个域构造))*/01 generate_Template(G(V,E))02 begin03 topologically sort the nodes of G as{V1,…,VN};04 ST=φ;/*ST存储样板列表*/
05 m=0;/*m是至此所生成的样板数*/06 template[V1,…VN,v1…VN]=0/* template[vi,vi]如果非零,则给出以vi和vj为根的节点的功能相同的子图形属于的样板的下标*/07 for i=1 to N08for j=i+1 to N09 m=m+1;/*要在Sm中存储的新样板*/10 Sm=Largest_Template(vi,vj);/*生成具有两个分别以vi和vj为根的最大的功能相同的子图形Gi和Gj的样板*/11 if Sm≠φ12 k=Find_Equivalent_Template(Sm,ST);/*在ST中寻找等同于Sm的Sk*/13template[vi,vi]=k;14if k=m/*Sm是新样板*/15 ST=STU{Sm};/*将Sm加到ST,使其保持有序*/16else17 root_nodes[k]=roots[k]U{vi,vj}18 m=m+119 return ST;20 end/*生成根在u和v的功能相同的最大树*/21 Largest_Template(u,v)22 if 1[u]≠1[v]/*u和v有不同的逻辑功能*/23returnφ;24 else25root_fn[m]=1[u];/*设置样板Sm的域*/26for i=1 to f do/*u和v各自都有f个扇入节点{u1,…,uf}和{v1,…,vf}*/27 if ui and vi have a single fanout each
28 add template[ui,vi]tochildren_template[m];29 else add φ to children_template[m];30 root_nodes[m]={u,v};/*Sm有两个子图形Gu和Gv*/31 return Sm;/*ST是按键(root_fn,children_templates)排序的样板的列表{Si,…Sj}。
该函数通过在ST={Si,…Sj}进行二分搜索而在ST中寻找等同于Sm的样板*/32 Find_Equivalent_Template(Sm,ST)33 if ST=φ34 return m35 if key[m]<key[(i+j)/2]/*查找ST的前半部分*/36returnFind_Equivalent_Template(Sm,{Si,…,S((i+j)/2+1)});37 else if key[m]>key[(i+2)]/*查找ST的后半部分*/38returnFind_Equivalent_Template(Sm,{S((i+j)/2+1),…,Sj});39 return (i+j)/2;/*S((i+j)/2和Sm是等同的*/伪码样本1应当强调的是,本发明可以以不同于伪码样本1中所述的内容来实现。伪码样本1生成一个完全的复合假设2的树样板的集合。有些实施例可使用生成比伪码样本1生成的更小的树样板集合的算法。此外,算法可生成可以包括再收敛的单输出样板的完全列表或部分列表,不过,复杂程度可能会显著地大于伪码样本1。
可以结合图6给出伪码样本1的操作的例子。首先,将G的节点是按拓扑排序(行03)。按拓扑排序的意思是从初始输入至输出(或从左至右地)排序。对每个节点指定一个数字层。例如,在图4A中,第一层包含节点e、f、g、h、I、j、k和l;第二层包含节点a、b、c和d;第三层包含节点o和p。在行06中,样板有两个下标,每个下标代表每个节点。行07和08的循环,使每个节点对都被考虑到。对于每个节点对,函数Largest_Template生成一个有两个子图形的样板,每个节点上固定一个子图形。Largest_Template比较这两个节点的逻辑功能,然后构造子样板的列表。通过用键在ST上进行二分搜索,将由此生成的样板Sm与以前生成的样板比较。如果Sm等同于现有的样板Sk,则将其子图形加到Sk;否则,将Sm作为新样板存储在ST中。参看图4A和6,首先生成平凡样板S1,…,S4。然后从剩余的节点{a,b,c,d,o.p}中,通过比较a和b生成而S5,通过比较a和c而生成S6。通过比较a和d而获得的样板,被发现等同于S5,所以d将存储在S5的根_节点。其余两个节点S7和S8是分别通过比较节点对(b,d)和(o,p)而生成的。在其余节点对的情况下,Largest_Template返回一个空样板。注意每个样板只有两个子图形,只有S5有六个由根_节点{a,d,c,d,o,p}给出的子图形。
Largest_Template递归地运行,从叶(输入)开始,向树样板的根节点(输出)运行,以便由较小的样板构造更大的样板。参看图4A和6,样板S8的根节点是节点o或p,在图6中是S8的最右边的节点。S6的根节点是a或c。S7的根节点是b或d。样板S6和S7是在S8之前构造的。S6和S7的根节点对S8来说是子节点。样板S6和S7的中间根节点与节点a或c和节点b或d连接起来(见图4A和6),以构成样板S8。
行26-28通过不准许置换而确保符合假设2。
在有些实施例中,Largest_Template花费常量时间来构造有界扇入的图。ST上的二分搜索(行32-39)以及ST中Sm的插入(行15)花费0(logV)的时间,对每个节点对都要调用这两种操作。所以,总的时间复杂度是0(V2logV)。我们存储每个样板的根_fn(root_fn)和子_样板(children_templates),这需要0(V2)的存储空间。子图形所需的存储空间也是0(V2),因为子图形是以与其根节点相同的方式存储的。所以,总的存储复杂度是0(V2)。
Find_Equivalent_Template函数(行32-29)用来寻找确定样板的捷径。例如,如果某样板被创建,它可能含有相当大量的用于说明其节点的信息。该样板的另一个实例可以以少得多的信息来表达-只要知道它是与第一个样板相同的。
5.多输出样板样板生成算法伪码样本1给出了对由稀疏地互连的子电路组成的数据通路电路的很好的覆盖,但是可能不适合有大量多扇出(multiple-fanout)节点的电路。更具体来说,除了生成树样板,本发明的有些实施例能生成特殊的一类多输出样板-本文称作单主-输出(P0)子图形(样板)。单-P0子图形是个多输出子图形,其每一个输出都位于某特定输出的传递扇入中。例如在图1中,样板S3就是一例单-P0样板,因为它是个多输出样板(它有输出x和y),但是输出y在输出x的传递扇入中。
单-P0图有几个有意思的特性。它们可能有内部的再收敛以及循环,并且可能有任意数量的输出-这一点与树相反。使用单-P0子图形的重要优点是,尽管它们结构复杂,G的这种子图形的个数在假设1和2的条件下也限制在V2-如果子图形满足凸性质(convexproperty),即,如果u,v∈V(Gi),则u到v的通路上的每一个节点w也属于V(Gi)。
作为另一个例子,图2表示一个4×4乘法器20,其中,样板S1包含对角矩阵,样板S包含“与”门。C/S代表进位(CARRY)和加(SUM)功能。乘法器20由样板S1的三个实例和样板S2的两个实例覆盖。样板S1不是树样板。所以,如果我们将伪码样本1的算法应用到图7的乘法器,就获得三个平凡树样板“与”门、进位(CARRY)和加(SUM)功能的众多实例。样板S1也不是单-P0样板。不过如下文所解释和说明的那样,图7的三个对角矩阵包含单-P0样板。图8是图7的乘法器20的图的形式。图9A中所示的两个子图形是功能相同的单-P0子图形Gp5和Gp6,以P5和P4(见图8)作为各自的初级输出。单-P0样板有单-P0子图形的实例。
如上所述,树样板可以由一系列不重叠的子样板来表示。然而,在单-P0样板中子样板能重叠。图9B表示样板图9A的图的S1和S2。图9C表示有图9A和9B的两个子图形的样板S3。S3有两个子样板S1和S2,它们有重叠的节点,如子图形Gp5的c1和子图形Gp4的c2。所以,S3是不能仅由其子样板的列表完全定义的。相反,每一个节点都是个别地定义的。子图形Gu的节点可以用深度优先的搜索次序由列表节点列表存储。以节点a1为根的样板S1的子图形有节点列表={a1,b1,c1,d1,e1,f1,g1}。对于节点列表中的每一个节点,我们也存储其扇入和扇出连接。所以在在有些实施例中,对于有界扇入的图来说,存储子图形所需的存储空间是0(V)。
下面的伪码样本2可以被用来生成单-P0样板的完全集合。
伪码样本2伪码样本1的行01-20的Repcat/*生成以u和v为根的最大同等单-P0子图形(样板)*/01 Largest_Template(u,v)02 if 1[u]≠1[v]03return φ;04 else05nodelist[Gu]={u};/*根节点是节点列表中的第一个节点*/06nodelist[Gv]={v};07for I=1 to f do/*u和v各有f个扇入节点{u1,…,uf}和({v1,…,vf})*/08 add nodelist[Gui]at the end of nodelist[Gu];09 add nodelist[Gvi]at the end of nodelist[Gv];10for w1∈nodelist[Gui]and for w2∈nodelist[Gvi]/*有从w1(w2)至u(v)通过具有下标I的输入边u(v)的通路*/11 add i to path[w1,u];12 add I to path[w2,v];13 for w1∈nodelist[Gu]and for w2∈nodelist[Gv]14 if path[w1,u]≠path[w2,v]15 delete all copies of w1(w2)fromnodelist[Gu](nodelist[Gv]);16 else if paht[w1,u]has more than one element/*这里,path[w1,u]=path[w2,v]*/17 delete remaining copies of w1(w2)fromnodelist[Gu](nodelist[Gv]);
18 Sm={Gu,Gv}19 return Sm;*ST是k个样板S1,…,Sk的列表。该函数寻找与Sm等同的样板ST,如果没有则返回m*/20 Find_Equivilanet_Tempiate(Sm,ST)21 for i=1 to k22 if nodelist[Si]=nodelist[Sm]23 return I;24 return m;伪码样本2应当强调的是,本发明可以以不同于伪码样本2中所述的内容来实现。单-P0样板的完全集合至少包含电路中那些符合上述假设1和2的单-P0样板。它也可以包含另外的单-P0样板-它们的部分或全部以后可以在例如覆盖电路时或之前被从样板列表中去除。
可以看到,伪码样本2与伪码样本1基本相同-只有(从行10调用的)函数Largest_Tempiate(u,v)与(从行12调用的)函数Find_Equivilanet_Tempiate(Sm,ST)是不同的。如上所述,这种不同的原因是,对于单-P0样板,子样板能重叠(例如见图9C)。
结合图9A、9B和9C给出伪码样本2的操作的一个例子。在调用Largest_Tempiate(P5,P4)之前,样板S1已经被生成,具有子图形Ga1和Ga2。类似地,也生成了具有子图形Gh1和Gh2的S2。将Ga1和Gh1(Ga2和Gh2)的节点列表组合起来,获得Gp5(Gp4)的节点列表。行07-09之后,节点列表[Gp5]={P5,a1,b1,c1,d1,f1,g1,h1,i1,c1,d1,e1,f1},节点列表[Gp4]={P4,a2,b2,c2,d2,f2,g2,h2,i2,c2,d2,e2,f2}。
从节点w到根节点v可以有多个经过v的不同输入边的通路。结果,w在节点列表[Gv]中多次出现。例如,在图9A中,c1通过边(a1,P5)和(h1,P5)与P5相连,于是,它在节点列表[Gp5]中出现两次。我们定义一个通路列表path[w,v](行10-12),它含有w与v相连所经过的v的输入边的下标,例如path[b1,P5]={1},而path[c1,P5]={1,2}。我们然后成对地比较Gu和Gv的节点列表中的节点(行13)。如果对应节点的通路列表不同,则必须将这些节点从各自的子图形中去除(行14-15)。否则,如果这两个通路列表相同,但是有多个下标,则必须将这些节点的其余的拷贝去除。例如,删除Gp5(Gp4)中节点c1(c2)的第二次出现。最后,在行21之后,节点列表[Gp5]={P5,a1,b1,c1,d1,f1,g1,h1,i1},节点列表[Gp4]={P4,a2,b2,c2,d2,f2,g2,h2,i2}。函数Find_Euivilanet_Template将集合ST中的样板与每一个其它样板通过对比两个节点列表中的相应节点而进行比较,因为图的节点的深度优先次序是唯一的。
在有些实施例中,Largest_Template花费0(V)的时间,因为它构造两个节点列表,然后两次遍历它们。Find_Equivilanet_Template花费0(V3)的时间,因为它最多V2次地比较两个节点列表。每一个节点对都调用这两个函数(伪码样本1的行07-08),结果,时间复杂度为0(V5)。每一个子图形的节点列表都需要0(V)的存储空间,结果,存储空间的复杂度是0(V3)。如果G的单-P0样板的数目由S界定,则总的时间和空间复杂度可分别由0(S2V)和0(SV)给出。
如果设计者提供样板GT,我们就能生成输入图形G中它的所有完全的以及部分的匹配-方法是为每一个节点对(vi,vj)调用函数Largest_Template(其中vi和vj分别属于G和GT。这个特点使设计者能按需要控制析取方法和改进电路覆盖。
6.样板的图形覆盖以上描述的算法生成G的ST样板集合。ST可以是假设1和2下的G的所有树样板的集合或者是所有单-P0样板的集合。所生成的所有样板的集合包含不同类样板的样板集合的总和(例如,ST=ST(树样板)+ST=ST(单-P0样板))。
在许多电路中,可以将电路的所有部件和相关通路包含在至少一个样板中。然而,其它电路可能包含不能在一个样板中的一个或多个部件-因为它们只出现一次。所以,短语“覆盖电路“的意思是覆盖电路的那些包含在所生成样板的实例中的部件。在有些实施例中,在有些情况下,某部件可能一开始是样板的实例的一部分,但是可能在覆盖过程中被去除。在许多电路中,将有许多可能的覆盖(包含整个电路的样板实例的组合)。在这种情况下,“样板的子集”将少于所有生成的样板。然而,如果唯一可能的覆盖要使用所有生成样板的实例,则短语“样板的子集”包括所有这些生成样板。
如果生成的是次最大样板,在覆盖过程中要满足假设1(仅最多样板)。
设S表示ST中存储的样板的所有子图形的集合。我们现在提出一个对图形覆盖问题的解决方案,其中,给定G和ST,目标是找出构成G的覆盖的所有子图形的集合S的子集C(G,ST)。
在有些实施例中,用试探法来选择覆盖。在有些实施例中,采用以下过程。首先,在ST的所有样板中寻找具有最大目标函数的样板Si(具有最大目标函数的样板是最符合试探结果的样板或者是如果有限制(tie)时打破限制(tie breaking)的样板)。其次,将属于Si的非重叠子图形的所有节点删除并将ST的其它样板从样板列表中去除。然后,生成对应其余子图形(未覆盖电路)的新样板集合ST,这种重新生成将生成与在ST的不同于Si的样板被从列表中去除之前存在的不同的样板。选择具有最大目标函数的新样板Si。这个过程重复进行,直到G的所有节点都被覆盖,或者发现ST是空的。如果有些节点还未被覆盖时发现ST是空的。则可以将其余的节点存储在具有单一子图形的样板中。(如果是数据通路电路,该样板与其控制逻辑有关联。)注意在为其余图重新生成样板ST的过程中,可能因为没有重复而有节点不被包含在样板中,尽管它们起初是在样板的实例中的。Si的非重叠子图形就是其中没有一个节点(部件)是由两个子图形共享的子图形。例如在图1中,假若将位片1的S1的“与”门删除,但是将位片0的S1的“与”门馈入位片1的S1的锁存器的输入,那么在有些实施例中,它们将是S1的重叠子图形。在覆盖过程中,位片1的锁存器和多路转接器在样板的重新生成之后可能不包含在样板中。
在其它实施例中,首先,选择样板Si。其次,删除样板Si的所有节点,但是保持ST中的其它样板不变。然后,从ST中的其余样板中选择另一个样板Si,而不是为电路的未覆盖部分重新生成新的ST集合。通过重新生成样板集合有可能将获得更好的覆盖,但是这也花费更多的时间。
以下是两个根据可用于选择样板的目标函数的覆盖试探法。
1.最大适合优先(Largest-Fit-First(LFF))试探法选择具有最大面积area[Si]的样板Si。
2.最经常适合优先(Most-Frequent-Fit-First(MFF))试探法选择具有最大数量|Si|的子图形(实例)的样板Si。在有些实施例中,将试探法2作如下的进一步改进。如果两个样板有相同数量的实例,而一个样板大于另一个,则选择较大的样板作为Si。也可以将试探法2修改得使得如果次最大样板的实例包含在具有一个以上节点的样板中,则次最大样板必须有至少两个节点被选择。
MFF和LFF试探法通常给出不同的覆盖,因为面积大的样板的子图形不多,反之亦然。可以使用LFF和MFF以外的试探法(例如LFF和MFF的组合),并且可以有另外的改进(例如如就MFF而言所述的)。
结合图1考察一些例子。如果选择LFF试探法,样板S3被选择作为Si。样板S2和样板S3中样板S1的两个实例被排除在考虑之外。在有些实施例中,样板S1的其它两个实例(位片2和3)将被删除,但要为电路的其余部分重新生成样板(即位片2和3)。在其它实施例中,不删除也不重新生成电路的其余部分(即除S3的实例中的以外的电路)的样板。无论保留还是重新生成,S1的两个实例都要被选择用来覆盖电路的其余部分。结果将是电路由位片0和1的S3的实例和位片2和3的S1的实例覆盖。
如果选择MFF试探法,样板S1将被选择作为Si。也有“与”、锁存器和多路转接器部件的四个实例,但是,(1)S1更大,(2)“与”、锁存器和多路转接器样板每个只有一个节点(部件)。假若S2中的两个锁存器与S1中的锁存器相同,则将有六个锁存器实例。然而在有些实施例中,锁存器不会被选择,因为这样一个样板只会有一个节点,而S1会有一个以上的节点(注意对假设1的修改)。(允许单节点样板的一个缺点是它会分解会更有用的其它更大样板。)一旦选择了样板S1,S1中所有次最大样板就被排除在考虑之外。然后,根据具体实施例,要么将样板S2去除后重新生成,要么就保留样板S2。最终的覆盖将是样板S1的四个实例和样板S2的两个。
用LFF试探法获得的图8的4×4乘法器的覆盖含有六个样板,在图9A和9B中所示的最大样板覆盖电路的一半以上。(图7中所示的两个样板的覆盖不能获得,因为我们的算法限于树样板和单-P0样板)。如果使用MFF试探法,则获得三个小样板-“与”门、CARRY和SUM函数的覆盖。
7.样板生成的应用以下是上述样板算法的一些有用的扩展。
规律性的分层表示考察由上述析取方法生成的图1的电路图的两个覆盖一个各有两个子图形S3和S1,另一个有两个子图形S2和四个子图形S1。这个两个覆盖没有抓住S3是由S1和S2构成的这个事实。我们能通过确定样板的层次而紧凑地表示这两个覆盖。可以概括出样板层次的概念。对于给定的G,每一个样板或者是由其它样板分层地构成的,或者是个叶样板。假设S1,…,Sm是由上述的规律性析取方法生成的覆盖中的样板。完整的样板层次能这样生成递归地从由m个独立子图形S1,…,Sm组成的图中析取规律性,直到只剩下叶样板。图1中的两个覆盖中的样板可由图11中所示的层次紧凑地表示。总之,G的覆盖的任何集合都能用样板层次来表示,这使用户能为随后的物理设计阶段选择最想要的覆盖。
参看图12,计算机相同120包括存储器122、处理器124、显示器126、接口128和打印机130。在有些实施例中,处理器116执行存储器122中进行如本文中所述的规律性析取的程序。存储器122可以保存要根据其析取规律性的描述语言、样板、不同的覆盖等等。覆盖的层次选项例如可以在显示器126上显示或者通过打印机30打印。用户能通过接口128(例如键盘或鼠标)选择选项。存储器122旨在概括地表示存储器,可包括各种形式的存储器,如硬驱、CD-ROM和随机存取存储器(RAM)和有关电路。硬驱、CD-ROM和RAM是包含机器可读介质的产品的例子。例如,可以将进行规律性析取的程序包含在CD-ROM上,从CD-ROM装到硬驱。高级描述例如可以在磁盘上接收,或者远程地例如通过调制解调器接收。
生成用户给定样板的子图形给定样板S’,可以修改样板生成算法,以确定S’的所有子图形及其子样板。例如,如果用户为图1的电路提供样板S3,则能生成S3的所有子图形及其子样板S1和S2。用户也可能指定图7的样板S1。在有些实施例中,对伪码样本1的样板生成算法的唯一修改是,为每一个节点对(vi,vj)调用函数Largest_Template(行10),其中vi和vj分别属于G和S’。可以容易地概括出覆盖,使得G由用户指定的样板和自动生成的样板混合地覆盖。
一般的多输出样板一般来说,数据通路电路的初级输出是由总线规定的。可以将初级输出与相同的总线下标组合成哑节点,由此创建有关相同宽度的哑总线。可以用增加哑输出总线的试探法,使得样板生成算法寻找一般的多输出样板。例如,图10A表示的电路100有位片0和1,它们各由样板S1和S2覆盖。如图10B中所示,可以将电路100修改成电路104,其中的输出总线x和y与哑节点108组合,以创建一个单一的哑总线和取代S1和S2的样板S3。电路104的每个位片都能被单一的样板S3覆盖。在析取了规律性之后,在以后的设计阶段可以忽略哑总线
和哑节点108。
理解了本说明书的本领域的熟练人员知道,在本发明的范围内可以根据以上的说明和附图作出许多其它改变。所以,是下面的包括任何补正的要求定义本发明的范围。
权利要求
1.一种规律性析取的方法,包含通过计算机对电路的描述的自动操作生成电路的样板集合;和以这些样板的子集的实例覆盖电路。
2.权利要求1的方法,其中,样板集合包括单-初级输出样板,后者是这样一种样板-在该样板中,样板的所有输出都在样板的某特定输出的传递扇入中。
3.权利要求1的方法,其中,样板集合包括树样板。
4.权利要求1的方法,其中,样板集合包括树样板和单-初级输出样板。
5.权利要求1的方法,其中,样板集合是给定一定假设的样板的完全集合。
6.权利要求1的方法,其中的假设包括,样板集合包括所涉及的各类样板的所有最大样板,并且样板不是通过改序门输入而生成的。
7.权利要求1的方法,其中,覆盖电路涉及选择样板集合中的一个样板、满足一定的基准和删除所选择样板的实例中的所有节点。
8.权利要求4的方法,其中,覆盖进一步包含删除样板集合中除了所选择样板以外的样板并根据剩余的未覆盖电路重新生成新的样板集合。
9.权利要求1的方法,其中,样板集合中的至少有些样板是部分地通过其中将根节点连接到子节点的递归而生成的。
10.权利要求1的方法,其中覆盖涉及使用选择具有最大面积的样板的最大适合优先试探法。
11.权利要求1的方法,其中覆盖涉及使用选择具有最大数量的子图的最经常适合优先试探法。
12.权利要求1的方法,其中,向用户表示覆盖层次的各种可能,用户能从中选择。
13.权利要求1的方法,其中,样板集合是部分地通过确定最大样板而生成的。
14.权利要求1的方法,其中,样板集合是部分地通过确定同等样板而生成的。
15.权利要求1的方法,其中,电路可包含因为有不重复的部件而没有相应样板的部分。
16.权利要求1的方法,其中,用户可以规定一些样板,而计算机自动化操作规定样板集合的其它样板。
17.一种规律性析取的方法,包含通过计算机对电路的描述的自动操作生成电路的样板集合,样板集合包括单-初级输出样板;和以这些样板的子集的实例覆盖电路。
18.权利要求17的方法,其中,样板集合是给定至少一个假设的样板的完全集合。
19.权利要求17的方法,其中,样板集合也包括树样板。
20.一种产品,包含机器可读的介质,当其包含的指令被执行时使计算机通过计算机对电路的描述的自动操作生成电路的样板集合;和以这些样板的子集的实例覆盖电路。
21.权利要求20的产品,其中,样板集合是给定至少一个假设的样板的完全集合。
22.权利要求20的方法,其中,样板集合包括多于一类的样板。
23.权利要求20的方法,其中,一类是树样板。
24.一种产品,包含机器可读的介质,当其包含的指令被执行时使计算机通过计算机对电路的描述的自动操作生成电路的样板集合,样板集合包括单-初级输出样板;和以这些样板的子集的实例覆盖电路。
25.一种规律性析取的方法,包含接收用户规定的样板;通过计算机对电路的描述的自动操作生成电路的样板集合,其中考虑用户规定的样板;和以这些样板的子集的实例覆盖电路。
26.权利要求25的方法,其中,样板集合包括单-初级输出样板,后者是这样一种样板-在该样板中,样板的所有输出都在样板的某特定输出的传递扇入中。
27.一种规律性析取的方法,包含通过计算机对电路的描述的自动操作生成电路的样板集合,其中通过连接哑节点中的输出而创建多输出样板;和以这些样板的子集的实例覆盖电路。
全文摘要
在有些实施例中,本发明包括一种包括通过对电路(10)的描述的计算机自动化操作生成电路(10)的样板集合(S1、S2、S3)的规律性析取方法。该方法也包括以这些样板的子集覆盖电路。在有些实施例中,样板集合包括单-初级输出样板,其中,单-初级输出样板是这样一种样板-在该样板中,样板的所有输出都在样板的某特定输出的传递扇入中。样板集合也可包括树样板。在有些实施例中,样板集合是给定一定假设的样板的完全集合-这些假设包括,样板集合包括所涉及的各类样板的所有最大样板,并且样板不是通过改序门输入而生成的。在有些实施例中,电路的覆盖涉及选择样板集合中的一个样板、满足一定的基准和删除所选择样板的实例中的所有节点。覆盖可进一步包含删除样板集合中除了所选择样板以外的样板并根据剩余的未覆盖电路重新生成新的样板集合。
文档编号G06F17/50GK1334942SQ99815432
公开日2002年2月6日 申请日期1999年11月3日 优先权日1998年11月6日
发明者A·乔达里, S·S·J·卡勒, P·K·萨里佩拉, N·K·塞加尔, R·K·古普塔 申请人:英特尔公司