一种基于多fanout逻辑的高效率低耦合的设计拆分方法与流程

文档序号:33630589发布日期:2023-03-28 22:46阅读:83来源:国知局
一种基于多fanout逻辑的高效率低耦合的设计拆分方法与流程

1.本发明公开一种基于多fanout逻辑的高效率低耦合的设计拆分方法,属于芯片设计的技术领域。


背景技术:

2.拆分在eda领域中指将逻辑网表按照一定的方法、规则进行拆分,拆分目的是将大的网表拆分为几个小的模块,以便于对网表进行并行处理或分块处理,拆分的要求通常是各模块之间的耦合关系越小越好,耦合关系通常可以用模块间连接的wire的多少来衡量:模块内部的连接越多,模块间的连接wire数量越少,模块间的独立性越强,拆分结果越理想。
3.现有拆分的方法通常分为两种:一种是直接通过逻辑网表的hierarchy关系进行拆分,优点是拆分边界清晰,缺点是拆分结果很难直接满足拆分要求,比如拆分要求模块间的独立性强,模块间的耦合关系弱一些,即模块间的连接关系尽量少一点;再比如拆分要求各模块的大小相近等等,而hierarchy关系往往根据设计的模块功能进行划分,并不能保证满足上述耦合关系、模块大小的要求,并且若设计本身是flatten的,不是hierarchy的,那么就无法利用hierarchy关系进行拆分,因此利用hierarchy关系进行拆分具有一定的局限性和不足。
4.另外一种拆分方法则是通过分析网表的结构关系进行拆分,优点是可以适用于flatten设计和hierarchy设计,缺点是由于网表间的关系复杂,一般启发式的算法通常具有执行时间较长、效率低、难以找到较好的结果等问题。
5.如附图1所示,展示了一个网表的连接关系举例,整个网表由20个器件相互连接组成,每个器件都有各自的编号,从1到20,器件之间存在复杂的连接关系,举例说明如下:图1中,器件与器件之间的连线(wire)代表二者之间的连接,器件1通过连线(wire)连接到器件4,且连线(wire)的箭头由器件1指向器件4,表示器件1的输出(fanout)去了器件4,即器件1的输出(fanout)器件是器件4,器件4的输入(fanin)来自器件1,即器件4的输入(fanin)器件是器件1。
6.图1中可以看到,有的器件只有输出(fanout)器件,没有输入(fanin)器件,如器件1,此类器件被称为网表的输入;有的器件只有输入(fanin)器件,没有输出(fanout)器件,如器件18,此类器件被称为网表的输出;除了网表的输入输出外的其他器件,可以有1个或多个输入(fanin)器件,一个或多个输出(fanout)器件。
7.fanout和fanin分别指器件的扇入和扇出,如附图1中器件11的fanin器件是器件20,器件11的fanout器件是器件13、14和17,即器件11有1个fanin器件和3个fanout器件,当器件的fanout器件多于1个时,称为多fanout器件。
8.综上,在拆分过程中,拆分后模块间的耦合关系通常是拆分的关键指标之一,不管是在fpga原型验证过程中,还是在数字后端布局布线过程中,拆分后模块之间的连接关系越少,越有利于功能的实现、性能的提升等;对于逻辑优化过程,模块间连接关系越少,可优
化的模块间逻辑就越少,也有利于逻辑优化流程的实现,因此如何高效率的将网表拆分为耦合强度低的模块成为很多场景下需要考虑的重要技术问题。


技术实现要素:

9.针对现有技术的问题,本发明提供了一种基于多fanout逻辑的高效率低耦合的设计拆分方法。基于逻辑网表拆分的耦合关系指标,本发明设计了一种线性复杂度、能够高效的通过较低的耦合强度拆分网表的方法,本发明适用于任何由一组器件构成的网表,可以实现高效率的模块拆分,满足模块低耦合度、模块大小均衡等要求。
10.本发明详细的技术方案如下:一种基于多fanout逻辑的高效率低耦合的设计拆分方法,其特征在于,包括:本发明适用于任何由一组器件构成的网表,拆分方法流程如图2所示,流程中的“器件或模块”中的“器件”是指未被添加进模块的器件;(1)开始并根据多fanout器件构建模块;(2)分析网表的输入和输出;(3)根据器件层级关系构建模块;(4)根据模块的fanout器件数量合并模块;(5)是否调整模块大小:如无需调整,则直接步骤(6);如需调整,则调整模块;(6)结束。
11.根据本发明优选的,所述步骤(1)根据多fanout器件构建模块的具体方法包括:分析步骤如图3所示:(1-1)开始并遍历网表中的每个器件,获取遍历到的器件;(1-2)判断获取到的器件是否有多个fanout器件:如果该器件只有一个fanout器件,继续遍历网表中的其余器件;如果该器件有多个fanout器件,继续执行步骤(1-3);(1-3)判断具有多个fanout的器件是否已经被添加到模块中:如果所述器件已被添加到模块中,则获取当前器件所在的模块;如果所述器件未被添加到模块中,则构建一个新模块,并将当前器件添加到构建的新模块中;(1-4)将当前器件的fanout器件添加到当前器件所在的模块中;(1-5)检查是否遍历完网表中的全部器件:如果尚未遍历完成,则继续遍历;如果遍历完毕,则执行步骤(1-6);(1-6)结束,得到新的网表。
12.上述步骤执行完成之后,获得的新的网表中,未被添加进模块的器件和模块共存;未被添加进模块的器件只会有一个输出,模块可能有多个输出。
13.根据本发明优选的,针对步骤(2)分析网表的输入和输出的具体步骤如下:(2-1)遍历网表中的每个器件或模块,获取遍历到的器件或模块;
(2-2)判断遍历到的器件或模块是否只有fanin器件:如果只有fanin器件,则标记为输出;如果否,继续执行步骤(2-3);(2-3)判断遍历到的器件或模块是否只有fanout器件:如果只有fanout器件,则标记为输入并存放起来,留待后续使用;如果否,继续执行步骤(2-4);(2-4)检查是否遍历完网表中的全部器件:如果尚未遍历完成,则返回步骤(2-1)继续遍历;如果遍历完毕,则执行步骤(2-5)结束;(2-5)结束。
14.上述步骤执行完成之后,标记了网表中的输入和输出,同时得到了网表中的输入器件或模块。
15.根据本发明优选的,所述步骤(3)根据器件层级关系构建模块的具体方法包括:(3-1)开始并创建一个模块a,将步骤(2-3)中标记为输入的输入器件或模块放入其中;(3-2)判断模块a是否有fanout器件或模块:如果没有,则意味着所述模块a是网表的最后一层模块,执行步骤(3-5)结束;如果有,则继续执行步骤(3-3);(3-3)创建一个模块b,将所述模块a的所有fanout器件或模块放入;(3-4)将当前b模块记为a模块,返回步骤(3-2),继续判断a模块是否有fanout器件或模块;(3-5)结束,得到新的网表。
16.上述步骤执行完成之后,获得的新的网表中,没有未被添加到模块的器件,只有模块,模块中存在器件和模块,将模块中的模块拆分为器件。
17.根据本发明优选的,在步骤(4)根据模块的fanout器件数量合并模块的步骤如下:(4-1)获取网表中的一个输入器件,并获得所述输入器件所在的模块,记为模块a;(4-2)判断a模块是否有fanout模块:如果a模块有fanout模块,则执行步骤(4-3);如果a模块没有fanout模块,则意味着网表中的模块已经全部遍历完毕,执行步骤(4-7)结束;(4-3)获取a模块的fanout器件数量num1,作为比较值;(4-4)获得a模块的fanout模块,记为b模块,获得b模块的fanout器件数量num2;(4-5)判断num1是否大于num2:如果是,则合并a模块与b模块,并将其作为b模块,执行步骤(4-6);如果不是,直接执行步骤(4-6);(4-6)将b模块作为a模块,返回步骤(4-2)进行检测;(4-7)结束,得到新的网表。
18.上述步骤执行完成之后,获得的新的网表中,没有未被添加到模块的器件,只有模块,模块中存在器件和模块,将模块中的模块拆分为器件。
19.根据本发明优选的,所述步骤(5)是根据实际要求,选择是否调整模块大小:(5-1)如果选择调整模块大小,则须指定需要调节的两个相邻的模块,并执行下一个操作:调整模块;所述步骤(5-1)中指定的模块一定不一样大,调整模块的目的就是让两个模块尽量相等;(5-2)如果选择不调整模块大小,则整个流程执行完毕。
20.根据本发明优选的,所述步骤(5-1)根据相邻的模块大小,调整模块的步骤如下:(5-1-1)获取(5-1)中指定的两个相邻的模块,根据两个模块包含器件的多少比较两个模块的大小,将两个模块中较小的模块,记为a模块;将两个模块中较大的模块记为b模块;其中,所述a模块和b模块及前面提到的含义都相同,都是一组器件的集合体;(5-1-2)判断a模块是否是b模块的fanin模块:如果是b模块的fanin模块,则记fanout为查找指定类型;如果不是b模块的fanin模块,即为b模块的fanout模块(相邻的两个模块只有这两种情况),则记fanin为查找指定类型;(5-1-3)遍历a模块的查找指定类型的器件;查找指定类型是在步骤(5-1-2)中指定的;(5-1-4)获得遍历到的器件及其对应的查找指定类型的器件的数量,执行步骤(5-1-5);(5-1-5)将步骤(5-1-4)中获得的器件数量排序,获得对应的查找指定类型的器件数量最少的器件:如果对应的查找指定类型的器件数量最少的器件有多个,任意选择一个,执行步骤(5-1-8);(5-1-6)将得到的器件移动到a模块中,判断a模块是否大于b模块:如果大于,则将移动到a模块的器件重新移回b模块,执行结束;如果不大于,返回步骤(5-1-3),继续调整当前a模块和b模块的大小;(5-1-7)结束,指定的两个相邻模块调整完成;(5-1-8)所有操作执行完毕后,网表被拆分为目标模块。
21.上述步骤执行完成之后,给定的网表被拆分为:低耦合度、模块大小相对均衡的几个模块,即目标模块。
22.发明有益效果:本发明针对现有技术通过hierarchy关系进行模块划分通常不能满足eda开发流程的需求,启发式的算法又具有执行效率低的问题。本发明具有执行效率高、模块耦合度低、支持模块大小均衡等特点,可以满足较多对设计网表拆分的场景需要,可以广泛应用于eda工具的研发流程中,如逻辑综合拆分rtl网表实现并行加速或并行优化等。
附图说明
23.图1是现有网表连接关系示意图;图2是本发明所述拆分方法对应的拆分流程示意图;图3是本发明中根据多fanout器件构建模块的流程示意图;图4是本发明中分析网表输入输出的流程示意图;
图5是本发明中根据器件的层级关系构建模块的流程示意图;图6是本发明中合并模块的流程示意图;图7是本发明中调整模块的流程示意图;图8是本发明实施例1中基于多fanout构建模块示例示意图;图9是本发明实施例1中分析网表的输入输出示例示意图;图10是本发明根据器件的层次结构构建模块示例1示意图;图11是本发明根据器件的层次结构构建模块示例2示意图;图12是本发明合并模块示例1示意图;图13是本发明合并模块示例2示意图;图14是本发明调整模块示例示意图。
24.附图标记:在图1-14中,标号1-标号20均为网表中被连接的器件。
具体实施方式
25.下面结合实施例和说明书附图对本发明做详细的说明,但不限于此。
26.以下所述实施例1对将给定的网表分解为低耦合度、模块大小相对均衡的模块,结合附图说明如下:实施例1、如附图2所示,一种基于多fanout逻辑的高效率低耦合的设计拆分方法,包括:(1)开始并根据多fanout器件构建模块;如附图3所示,所述步骤(1)根据多fanout器件构建模块的具体方法包括:(1-1)开始并遍历网表中的每个器件,获取遍历到的器件;(1-2)判断获取到的器件是否有多个fanout器件:如果该器件只有一个fanout器件,继续遍历网表中的其余器件;如果该器件有多个fanout器件,继续执行步骤(1-3);(1-3)判断具有多个fanout的器件是否已经被添加到模块中:如果所述器件已被添加到模块中,则获取当前器件所在的模块;如果所述器件未被添加到模块中,则构建一个新模块,并将当前器件添加到构建的新模块中;(1-4)将当前器件的fanout器件添加到当前器件所在的模块中;(1-5)检查是否遍历完网表中的全部器件:如果尚未遍历完成,则继续遍历;如果遍历完毕,则执行步骤(1-6);(1-6)结束,得到新的网表。
27.上述步骤执行完成之后,获得的新的网表中,未被添加进模块的器件和模块共存;未被添加进模块的器件只会有一个输出,模块可能有多个输出。
28.针对给定的网表如附图1所示,遍历每一个网表中的器件,如果一个器件有多个fanout器件,就将该器件与其fanout器件放到同一个模块中,如图8所示,器件2、器件5、器件6放到同一个模块中,器件8、器件9、器件10放到同一个模块中,器件11、器件13、器件17、
器件14放到同一个模块中。
29.(2)分析网表的输入和输出;如附图4所示,针对步骤(2)分析网表的输入和输出的具体步骤如下:(2-1)遍历网表中的每个器件或模块,获取遍历到的器件或模块;(2-2)判断遍历到的器件或模块是否只有fanin器件:如果只有fanin器件,则标记为输出;如果否,继续执行步骤(2-3);(2-3)判断遍历到的器件或模块是否只有fanout器件:如果只有fanout器件,则标记为输入并存放起来,留待后续使用;如果否,继续执行步骤(2-4);(2-4)检查是否遍历完网表中的全部器件:如果尚未遍历完成,则返回步骤(2-1)继续遍历;如果遍历完毕,则执行步骤(2-5)结束;(2-5)结束。
30.上述步骤执行完成之后,标记了网表中的输入和输出,同时得到了网表中的输入器件或模块。
31.如附图9所示,将步骤(1)中得到的模块看为一个整体,分析网表,如果一个器件或模块只有fanout器件,没有fanin器件,标记为输入。如果一个器件或模块只有fanin器件,没有fanout器件,标记为输出。输入器件或模块分别为器件1、器件3、器件2、器件5、器件6,输出器件或模块分别为器件15、器件16和器件18。
32.(3)根据器件层级关系构建模块;如图5所示,所述步骤(3)根据器件层级关系构建模块的具体方法包括:(3-1)开始并创建一个模块a,将步骤(2-3)中标记为输入的输入器件或模块放入其中;(3-2)判断模块a是否有fanout器件或模块:如果没有,则意味着所述模块a是网表的最后一层模块,执行步骤(3-5)结束;如果有,则继续执行步骤(3-3);(3-3)创建一个模块b,将所述模块a的所有fanout器件或模块放入;(3-4)将当前b模块记为a模块,返回步骤(3-2),继续判断a模块是否有fanout器件或模块;(3-5)结束,得到新的网表。
33.上述步骤执行完成之后,获得的新的网表中,没有未被添加到模块的器件,只有模块,模块中存在器件和模块,将模块中的模块拆分为器件。
34.将所有输入器件或模块放到同一个模块中,作为当前模块。首先将当前模块的fanout器件或模块放到新的模块中,再将新的模块作为当前模块进行处理,直至当前模块没有fanout器件或模块为止。如附图10所示,处理完毕后,出现模块中套模块的情况,此时将模块中套的模块拆分为器件,如附图11所示。
35.(4)根据模块的fanout器件数量合并模块;如图6所示,在步骤(4)根据模块的fanout器件数量合并模块的步骤如下:
(4-1)获取网表中的一个输入器件,并获得所述输入器件所在的模块,记为模块a;(4-2)判断a模块是否有fanout模块:如果a模块有fanout模块,则执行步骤(4-3);如果a模块没有fanout模块,则意味着网表中的模块已经全部遍历完毕,执行步骤(4-7)结束;(4-3)获取a模块的fanout器件数量num1,作为比较值;(4-4)获得a模块的fanout模块,记为b模块,获得b模块的fanout器件数量num2;(4-5)判断num1是否大于num2:如果是,则合并a模块与b模块,并将其作为b模块,执行步骤(4-6);如果不是,直接执行步骤(4-6);(4-6)将b模块作为a模块,返回步骤(4-2)进行检测;(4-7)结束,得到新的网表。
36.上述步骤执行完成之后,获得的新的网表中,没有未被添加到模块的器件,只有模块,模块中存在器件和模块,将模块中的模块拆分为器件。
37.得到输入器件所在的模块,作为当前处理模块。比较当前模块与当前模块的fanout模块的fanout器件多少,如果当前模块的fanout模块的fanout器件较少,则可以将当前模块与当前模块的fanout模块合并起来,再作为当前模块继续处理;如果当前模块的fanout器件较少,则将当前模块的fanout模块作为当前模块继续处理,直到当前模块没有fanout模块为止。如附图12所示,处理完毕后,模块中套着模块,将模块中的模块拆分成单个的器件。模块中的器件还有输入输出标志,清除输入输出标志,最后得到的模块如图13所示。
38.(5)是否调整模块大小:如无需调整,则直接步骤(6);如需调整,则调整模块;如附图7所示:所述步骤(5)是根据实际要求,选择是否调整模块大小:(5-1)如果选择调整模块大小,则须指定需要调节的两个相邻的模块,并执行下一个操作:调整模块;所述步骤(5-1)中指定的模块一定不一样大,调整模块的目的就是让两个模块尽量相等;(5-2)如果选择不调整模块大小,则整个流程执行完毕。
39.所述步骤(5-1)根据相邻的模块大小,调整模块的步骤如下:(5-1-1)获取(5-1)中指定的两个相邻的模块,根据两个模块包含器件的多少比较两个模块的大小,将两个模块中较小的模块,记为a模块;将两个模块中较大的模块记为b模块;其中,所述a模块和b模块及前面提到的含义都相同,都是一组器件的集合体;(5-1-2)判断a模块是否是b模块的fanin模块:如果是b模块的fanin模块,则记fanout为查找指定类型;如果不是b模块的fanin模块,即为b模块的fanout模块(相邻的两个模块只有这两种情况),则记fanin为查找指定类型;(5-1-3)遍历a模块的查找指定类型的器件;查找指定类型是在步骤(5-1-2)中指定的;
(5-1-4)获得遍历到的器件及其对应的查找指定类型的器件的数量,执行步骤(5-1-5);(5-1-5)将步骤(5-1-4)中获得的器件数量排序,获得对应的查找指定类型的器件数量最少的器件:如果对应的查找指定类型的器件数量最少的器件有多个,任意选择一个,执行步骤(5-1-8);(5-1-6)将得到的器件移动到a模块中,判断a模块是否大于b模块:如果大于,则将移动到a模块的器件重新移回b模块,执行结束;如果不大于,返回步骤(5-1-3),继续调整当前a模块和b模块的大小;(5-1-7)结束,指定的两个相邻模块调整完成;(5-1-8)所有操作执行完毕后,网表被拆分为目标模块。
40.上述步骤执行完成之后,给定的网表被拆分为:低耦合度、模块大小相对均衡的几个模块,即目标模块。
41.(6)结束。
42.获取两个指定的模块,并通过比较模块中器件的数量多少,比较两个模块的大小,将较小的模块记为a模块,较大的模块记为b模块。如附图13所示,左侧的模块记为b模块,右侧的模块记为a模块。然后判断a模块和b模块的关系,以调整a模块为例,如果a模块是b模块的fanin模块,记查找指定类型为fanout;如果a模块是b模块的fanout模块,记查找指定类型为fanin。如附图14所示,本示例中a模块是右边的小模块,b模块是左边的大模块,从图中可以看出左边的模块驱动了右边的模块,左边模块是右边模块的fanin,右边模块是左边模块的fanout,则以调整小模块a为例,a模块是b模块的fanout模块,记查找指定类型为fanin。遍历a模块的查找指定类型的器件,获得遍历到的器件及其对应的查找指定类型的器件数量,获得对应的查找指定类型的器件数量最少的器件。如附图13所示,在本实例中就是遍历a模块的fanin器件的fanin器件数量,a模块的fanin器件是器件12和器件20,再获得器件12和器件20对应的fanin器件数量,分别是2、1。则可知,器件20对应的fanin器件数量较少,得到器件20。将得到的器件移动到b模块中,再判断改变后a模块与b模块的大小,如果a模块依旧小于b模块,则继续遍历a模块的查找指定类型的器件,直至a模块大于b模块;如果a模块大于b模块,则将最后一次移动的器件移回a模块,执行结束,经过调整的模块如附图14所示。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1