掌桥专利:专业的专利平台
掌桥专利
首页

基于时序的多裸片FPGA的网表分割方法

文献发布时间:2023-06-19 11:52:33


基于时序的多裸片FPGA的网表分割方法

技术领域

本发明涉及FPGA技术领域,尤其是一种基于时序的多裸片FPGA的网表分割方法。

背景技术

FPGA(Field Programmable Gate Array,现场可编程逻辑门阵列)是一种硬件可编程的逻辑器件,除了应用于移动通信、数据中心等领域,还广泛应用于集成电路设计中的原型验证,能够有效验证电路功能的正确性,同时加快电路设计速度。

随着集成电路规模的不断增大及复杂功能的实现,对FPGA的可编程逻辑资源的数量的需求不断提高,为了避免芯片面积增大所带来的加工难度的增大和生产良率的降低,目前会利用硅堆叠互连技术(SSI)、CoWoS技术(Chip on Wafer on Substrate)或其他技术来实现多个FPGA裸片的互连设计,从而构成多裸片FPGA,利用多个FPGA裸片上的逻辑资源共同实现所需的电路结构。

但这又给多裸片FPGA的布局布线带来了挑战,因此如何将复杂的电路合理排布到多个芯片上以获得较优的性能是多裸片FPGA设计流程中的一个关键问题。在对多裸片FPGA进行布局布线之前,首先需要将多裸片FPGA对应的用户网表分割成多个相连的子网表,每个子网表分别对应一个FPGA裸片,然后根据每个子网表对对应的FPGA裸片进行布局布线。因此对用户网表的分割方式会直接影响多裸片FPGA的布局布线过程,也会影响多裸片FPGA的最终性能。目前在分割用户网表时,通常只会考虑与FPGA裸片所包含的逻辑资源数量之间的匹配度,也即仅需保证对应的FPGA裸片可以满足子网表的逻辑资源需求即可,但这种做法往往使得多裸片FPGA的性能难以保证。

发明内容

本发明人针对上述问题及技术需求,提出了一种基于时序的多裸片FPGA的网表分割方法,本发明的技术方案如下:

一种基于时序的多裸片FPGA的网表分割方法,该方法包括:

获取用户输入网表,并根据预定算法将用户输入网表中的各个实例模块分配到多裸片FPGA中每个FPGA裸片对应的子网表中得到初始分配结果;

根据初始分配结果确定用户输入网表中各个待优化节点的时序代价值;

按照各个待优化节点的时序代价值从大到小的顺序依次遍历各个待优化节点,对于每个待优化节点,根据待优化节点及其存在直接连接关系的相邻节点的分配结果之间的关系确定将待优化节点重新分配到其他各个子网表后的时序代价值,待优化节点及其存在直接连接关系的相邻节点分别为用户输入网表中的实例模块;

调整各个待优化节点的分配结果使其分配到时序代价值最小的子网表中,时序代价值越小、对应的待优化节点所在路径的跨子网表次数越小,跨子网表数是路径上存在直接连接关系的两个实例模块分别在两个不同的子网表内的数量;

根据调整后的分配结果更新各个待优化节点的时序代价值,并重新执行按照各个待优化节点的时序代价值从大到小的顺序依次遍历各个待优化节点的步骤,直到达到预定循环条件时,分割得到每个FPGA裸片对应的子网表,每个子网表包括分配到的所有实例模块以及实例模块之间的网表线网;

其中,每个FPGA裸片上的逻辑资源数量满足分割得到的对应的子网表的逻辑资源需求,FPGA裸片上的输入信号连接点引出端满足对应的子网表的输入信号数量,FPGA裸片上的输出信号连接点引出端满足对应的子网表的输出信号数量,与多裸片FPGA的IO管脚所连接的FPGA裸片满足对应的子网表的IO口需求。

其进一步的技术方案,每个待优化节点的时序代价值根据其各个可达寄存器节点的辅助时序代价进行更新,每个待优化节点及其存在直接连接关系的相邻节点的分配结果之间的关系用于更新其各个可达寄存器节点的辅助时序代价;

其中,每个待优化节点的可达寄存器节点包括与待优化节点在同一路径上且位于待优化节点的信号传输方向下游的、类型为寄存器的实例模块。

其进一步的技术方案,每个待优化节点的时序代价值根据其各个可达寄存器节点的辅助时序代价进行更新,包括:

将待优化节点的时序代价值更新为自身当前的时序代价值和各个可达寄存器节点的辅助时序代价之间的最大值:C1=max(C1,C2_1,C2_2…C2_k),其中,C1是待优化节点的时序代价值,C2_1,C2_2…C2_k为待优化节点的各个可达寄存器节点的辅助时序代价。

其进一步的技术方案,每个待优化节点的时序代价值根据其各个可达寄存器节点的辅助时序代价进行更新,包括:

将待优化节点的时序代价值及其对应的各个可达寄存器节点的辅助时序代价分别按各自对应的权重加权后的最大值作为待优化节点的更新后的时序代价值:C1=max(C1×w

其进一步的技术方案,每个节点的权重根据节点所在路径的预估时序余量确定,路径的预估时序余量越小、对应的时序紧张程度越高、节点的权重越大。

其进一步的技术方案,根据待优化节点及其存在直接连接关系的相邻节点的分配结果之间的关系确定将待优化节点重新分配到其他各个子网表后的时序代价值,包括:

对于待优化节点的任意一个可重新分配的待重分配子网表,依次遍历与待优化节点存在直接连接关系的所有相邻节点,并在每次遍历时更新待优化节点的时序代价值,确定遍历完所有相邻节点后更新得到的待优化节点的时序代价值为待优化节点重新分配到待重分配子网表时的时序代价值,每次遍历时:

若待优化节点及其存在直接连接关系的相邻节点在当前分配结果下在同一个子网表中、将待优化节点重新分配到待重分配子网表后与其相邻节点在不同的子网表中,则增大待优化节点的各个可达寄存器节点的辅助时序代价,并更新得到将待优化节点的时序代价值为自身当前的时序代价值和各个可达寄存器节点的辅助时序代价之间的最大值;

若待优化节点及其存在直接连接关系的相邻节点在当前分配结果下在不同子网表中、将待优化节点重新分配到待重分配子网表后与其相邻节点在同一子网表中,则减小待优化节点的各个可达寄存器节点的辅助时序代价,并更新得到将待优化节点的时序代价值为自身当前的时序代价值和各个可达寄存器节点的辅助时序代价之间的最大值;

否则保持待优化节点在当前分配结果下的时序代价值不变。

其进一步的技术方案,按照待优化节点所在路径对应的变化量改变待优化节点的各个可达寄存器节点的辅助时序代价,不同路径对应的变化量相同或不同。

其进一步的技术方案,按照待优化节点在所在路径中所处的信号段对应的变化量改变待优化节点的各个可达寄存器节点的辅助时序代价,同一路径中的不同信号段对应的变化量相同或不同。

其进一步的技术方案,根据调整后的分配结果更新各个待优化节点的时序代价值,包括对于每个待优化节点:

遍历待优化节点的所有父节点,对于待优化节点的每个父节点,若待优化节点与其父节点在当前分配结果下不在同一个子网表中,则增大待优化节点的各个可达寄存器节点的辅助时序代价,并将待优化节点的时序代价值更新为自身当前的时序代价值和各个可达寄存器节点的辅助时序代价之间的最大值;

和/或,遍历待优化节点的所有子节点,对于待优化节点的每个子节点,若待优化节点与其子节点在当前分配结果下不在同一个子网表中,则增大待优化节点的子节点的各个可达寄存器节点的辅助时序代价,将待优化节点的时序代价值更新为自身当前的时序代价值和各个可达寄存器节点的辅助时序代价之间的最大值;

其中待优化节点的父节点是与待优化节点存在直接连接关系且位于信号传输方向上游的实例模块,待优化节点的子节点是与待优化节点存在直接连接关系且位于信号传输方向下游的实例模块。

其进一步的技术方案,当利用待优化节点的各个可达寄存器节点的辅助时序代价更新待优化节点的时序代价值时,在更新每个可达寄存器节点的辅助时序代价时同步更新待优化节点的时序代价值。

其进一步的技术方案,每个待优化节点的可达寄存器节点包括与待优化节点在同一路径上且位于待优化节点的信号传输方向下游的、类型为寄存器的所有实例模块;

或者,每个待优化节点的可达寄存器节点包括与待优化节点在同一路径上且位于待优化节点的信号传输方向下游的、类型为寄存器、且满足预定条件的部分实例模块。

其进一步的技术方案,当实例模块与待优化节点在同一个时钟域时,确定实例模块满足预定条件。

其进一步的技术方案,当实例模块与待优化节点不在同一个虚假路径上时,确定实例模块满足预定条件,虚假路径是传输信号无法通过的路径。

其进一步的技术方案,待优化节点包括用户输入网表中的所有实例模块,或者,包括用户输入网表中的位于预定路径上的部分实例模块。

其进一步的技术方案,在按照各个待优化节点的时序代价值从大到小的顺序依次遍历各个待优化节点时,若存在至少两个待优化节点的时序代价值相等,则按照待优化节点的拓扑次序从先至后的顺序依次遍历各个时序代价值相等的待优化节点。

其进一步的技术方案,根据预定算法将用户输入网表中的各个实例模块分配到多裸片FPGA中每个FPGA裸片对应的子网表中得到初始分配结果,包括:

按照目标函数计算将各个实例模块分配到各个可容纳实例模块的子网表中的得分,并将各个实例模块分配到各自对应的得分最高的子网表中;

其中,目标函数基于与布局目标对应的至少一项芯片性能参数构建,将实例模块分配到子网表中实现的芯片性能参数越优、对应的得分越高;每个子网表的容纳能力由对应的FPGA裸片包含的逻辑资源决定,子网表的容纳能力包括子网表可容纳的实例模块的类型及数量范围。

其进一步的技术方案,布局目标对应若干项芯片性能参数,则目标函数包括多个子目标函数,每个子目标函数分别基于一项或多项芯片性能参数构建;

则在分配各个实例模块时,按照各个子目标函数分阶段分别计算将各个实例模块分配到各个可容纳实例模块的子网表中的得分并进行分配。

其进一步的技术方案,在利用各个子目标函数分阶段分配实例模块时,同一个子网表在不同阶段下的容纳能力相同或不同。

其进一步的技术方案,对应的FPGA裸片包含的逻辑资源相同的两个子网表的容纳能力相同或不同。

本发明的有益技术效果是:

本申请公开了一种基于时序的多裸片FPGA的网表分割方法,该方法在得到初始分配结果后,基于待优化节点的时序代价值调整分配结果,以减少预定路径(通常指关键路径)的跨子网表次数,这是因为跨子网表次数需要由多裸片FPGA的硅连接层内的跨裸片连线实现,而跨裸片连线的时延比其他连线大很多,跨裸片连线的时延通常在1.0ns,而其他连线的时延约为0.2ns~0.3ns,因此跨子网表次数多会影响多裸片FPGA实现的速度。而本申请这种网表分割方法可以减少跨子网表次数,尤其减少关键路径的跨子网表次数,进而减少关键路径时延,优化设计的时序,提升整体设计的速度。

而且在基于待优化节点的时序代价值调整分配结果时,待优化节点的时序代价值由可达寄存器节点的辅助时序代价进行更新,因此更新时无需每次都追踪网表图,简化了更新方法,提升优化效率。

虽然现在一些多FPGA系统(由多个FPGA芯片构成)也会涉及到网表分割,但多FPGA系统中不同FPGA芯片之间通过FPGA芯片的IO相连,因此跨分割信号数受限于单个FPGA芯片的IO数量(大约最多在2000个IO左右),在分割网表时,跨分割信号数的约束条件达成难度较大。而本申请的多裸片FPGA中不同FPGA裸片之间通过硅堆叠连接点相连,因此跨分割信号数受限于单个FPGA裸片的硅堆叠连接点数量,该数量远远大于FPGA芯片的IO数量,通常有40000个左右,因此使得在分割网表时,跨分割信号数的约束条件达成难度较低且还有余力考虑其余的约束条件,使得本申请公开的方法在多裸片FPGA的场景中得以实现以及实际应用。

附图说明

图1是本申请公开的网表分割方法的一个实施例的方法流程图。

图2是本申请所针对的多裸片FPGA的部分结构示意图。

图3是本申请公开的网表分割方法的另一个实施例的方法流程图。

图4是本申请公开的网表分割方法的又一个实施例的方法流程图。

具体实施方式

下面结合附图对本发明的具体实施方式做进一步说明。

本申请公开了一种基于时序的多裸片FPGA的网表分割方法,包括如下步骤,请参考图1:

步骤S1,获取用户输入网表,并根据预定算法将用户输入网表中的各个实例模块分配到多裸片FPGA中每个FPGA裸片对应的子网表中得到初始分配结果。本申请涉及的多裸片FPGA的部分结构示意图请参考图2,其主要包括从下至上依次层叠设置的基板1、硅连接层2和若干个FPGA裸片(图2包括FPGA裸片1和FPGA裸片2),硅连接层2覆盖所有FPGA裸片。每个FPGA裸片内包含若干不同类型和数量的逻辑资源,包括IOB、LUT、REG、DSP、BRAM、Clocks、CMT和GTP中的至少一种,不同FPGA裸片内包含的逻辑资源的类型和/或数量相同或者不同。在本申请中,多裸片FPGA中存在至少一个FPGA裸片有一种逻辑资源的数目与其他FPGA裸片不同,和/或,存在至少一个FPGA裸片有一种逻辑资源的种类与其他FPGA裸片不同。

每个FPGA裸片还包括若干个用于输入信号的输入信号连接点和若干个用于输出信号的输出信号连接点,输入信号连接点和输出信号连接点由布设在FPGA裸片上的硅堆叠连接点3实现,FPGA裸片内部的逻辑资源直接会间接的连接至输入信号连接点和/或输出信号连接点进行信号的输入输出。不同的FPGA裸片之间通过输入信号连接点和/或输出信号连接点利用硅连接层2内的跨裸片连线4相连,构成FPGA裸片之间的信号级联结构。硅连接层2层叠设置在基板1上,具体的,硅连接层2远离FPGA裸片的一侧生长有微凸球,硅连接层2通过微凸球连接基板1。硅连接层2上还开设有硅通孔5,FPGA裸片上的相应的输入信号连接点和/或输出信号连接点通过硅连接层2上的硅通孔5连接至基板1继而连接至与基板相连的用于信号引出的管脚。

本申请获取到的获取到的用户输入网表是针对整个多裸片FPGA的,其总的逻辑资源需求超过其中任意一个FPGA裸片上的逻辑资源数量,但小于等于所有FPGA裸片的逻辑资源数量的总和。本申请提供的网表分割方法在于将针对整个多裸片FPGA的用户输入网表分割成多个子网表,每个子网表对应一个FPGA裸片,从而可以分别按照每个FPGA裸片对应的子网表对相应的FPGA裸片进行布局布线,完成整个多裸片FPGA的布线。用户输入网表包括若干个实例模块以及不同实例模块之间的网表线网,常见的实例模块有GTP、查照表、寄存器、PCIE、EMAC、CMT、BRAM、DSP、IOB等,用户输入网表中包含的实例模块的类型不多于多裸片FPGA内的逻辑资源的类型。分割得到的每个子网表也包括若干个实例模块以及不同实例模块之间的网表线网,而在按照子网表对相应的FPGA裸片进行布局布线时,需要利用FPGA裸片来实现相应子网表的功能,因此网表分割时最基础的要求是,FPGA裸片可以满足分割得到的相应的子网表的逻辑资源需求。主要包括如下两个方面:需要利用FPGA裸片内的逻辑资源实现子网表的实例模块,以及,需要利用FPGA裸片上的输入信号连接点和/或输出信号连接点实现子网表的信号连接功能。除此之外,还会存在如下一个方面:需要利用FPGA裸片连接的管脚实现子网表的IO口。

因此本申请首先确定每个FPGA裸片对应的子网表的限制条件,在如下分割过程中必须在满足该限制条件的基础下进行,包括:每个FPGA裸片上的逻辑资源数量满足分割得到的对应的子网表的逻辑资源需求,FPGA裸片上的输入信号连接点引出端满足对应的子网表的输入信号数量,FPGA裸片上的输出信号连接点引出端满足对应的子网表的输出信号数量,与多裸片FPGA的IO管脚所连接的FPGA裸片满足对应的子网表的IO口需求。对于其中FPGA裸片上的逻辑资源数量满足分割得到的对应的子网表的逻辑资源需求这一要求主要包括:本申请根据多裸片FPGA中每个FPGA裸片包含的逻辑资源确定对应的子网表的容纳能力,子网表的容纳能力包括子网表可容纳的实例模块的类型及数量范围,该数量范围包括最大数量和/或最小数量,子网表所能包含的实例模块的类型不多于对应的FPGA裸片内包含的逻辑资源的类型,每种类型的实例模块的数量在对应的FPGA裸片内包含的该类型的逻辑资源的数量范围内。比如举例说明,可以确定一个子网表的容纳能力为:包括最多一个GTP、最多2个PCIE以及最少一个、最多3个EMAC。实际应用时,可以根据设定的模块使用率来确定每种类型的实例模块的数量范围,比如设定模块使用率为0~80%,则每种类型的实例模块的最大数量为对应的FPGA裸片内包含的该类型的逻辑资源的数量的80%。

本申请可以按照如下任一种顺序对实例模块依次分配:(1)按照读入用户输入网表时各个实例模块的读入顺序对所有实例模块依次分配,也即在依次读入实例模块时,每当读入到实例模块时即进行分配。(2)在读入用户输入网表中的所有实例模块后,按照预定规则对所有实例模块进行排序并按照排序的次序依次对实例模块进行分配,预定规则根据实际需要设定,比如可以所有实例模块的某一项芯片性能参数进行排序后依次分配。

用户输入网表中包括IO口,这些IO口需要使用多裸片FPGA上的管脚来实现,可选的,本申请在分割用户输入网表之前,首先将用户输入网表中的IO口分配给多裸片FPGA上的相应管脚作为IO管脚。本申请分配IO口的方法包括:根据用户指令将至少一个IO口分配给多裸片FPGA的相应管脚,或者,按任意序排列将至少一个IO口分配给多裸片FPGA的相应管脚,或者,按照IO自动排布算法将至少一个IO口分配给多裸片FPGA的相应管脚。

本申请根据预定算法将用户输入网表中的各个实例模块分配到多裸片FPGA中每个FPGA裸片对应的子网表中得到初始分配结果时的做法是:按照目标函数计算将各个实例模块分配到各个可容纳该实例模块的子网表中的得分,并将各个实例模块分配到各自对应的得分最高的子网表中。其中,目标函数基于与布局目标对应的至少一项芯片性能参数构建,将实例模块分配到子网表中实现的芯片性能参数越优、对应的得分越高。芯片性能参数包括单个FPGA裸片的功耗、多裸片FPGA的功耗、时序余量、跨FPGA裸片信号数量和时钟参数中的至少一种。比如假设目标函数基于单个FPGA裸片的功耗构建,则将实例模块分配到子网表中使得单个FPGA裸片的功耗越低时、对应的得分越高,因此实现的分配效果是将实例模块分配到使得单个FPGA裸片的功耗最小的子网表中。

如上所述,每个子网表的容纳能力由对应的FPGA裸片包含的逻辑资源决定,在本申请中,对应的FPGA裸片包含的逻辑资源相同的两个子网表的容纳能力相同或不同,比如对于两个分别总共包含10个GTP的FPGA裸片所对应的子网表1和子网表2来说,子网表1的容纳能力为最多包含8个GTP,而子网表2的容纳能力为最多包含6个GTP;或者比如,子网表1的容纳能力为包含3~8个GTP,而子网表2的容纳能力为包含5~8个GTP。

可选的,当布局目标对应若干项芯片性能参数时,则基于与布局目标对应的多个芯片性能参数构建的目标函数包括多个子目标函数,每个子目标函数分别基于一项或多项芯片性能参数构建,可以表示为:目标函数=子目标函数1+子目标函数2+子目标函数3……,此时基于目标函数分配实例模块的做法包括如下两种:

(1)直接利用目标函数在同一个阶段实现各个子目标函数所对应的约束条件,也即直接按照整个目标函数计算将各个实例模块分配到各个可容纳该实例模块的子网表中的得分并进行分配。在这种情况中,对每个实例模块只需计算得到一次对应得分并做一次分配,分配得到的结果即可以满足布局目标所对应的所有芯片性能参数。

(2)利用目标函数在不同阶段实现不同子目标函数所对应的约束条件,也即按照各个子目标函数分阶段分别计算将各个实例模块分配到各个可容纳实例模块的子网表中的得分并进行分配。在这种情况中,对每个实例模块在每个阶段内计算得到一次对应得分并做一次分配,该阶段分配得到的结果在上一次分配结果的基础上又满足该阶段的子目标函数所对应的所有芯片性能参数。比如在第一个阶段按照子目标函数1计算各个实例模块对应得分进行分配,分配得到的结果满足子目标函数1对应的芯片性能参数。然后在第二个阶段按照子目标函数2计算各个实例模块对应得分重新进行分配,分配得到的结果在第一个阶段的分配结果的基础上又满足子目标函数2对应的芯片性能参数,以此类推。

在这种情况中,基于多项芯片性能参数构建得到的多个子目标函数具有多种不同的组合方式和排列顺序,包括(1)具有多种数量的子目标函数,也即比如基于4项芯片性能参数构建的目标函数可以基于2个子目标函数实现,也可以基于3个或更多个子目标函数实现,例如当目标函数需要基于跨FPGA裸片信号数量、时序余量、单个FPGA裸片的功耗和时钟参数构建时,可以构建得到目标函数=子目标函数1(跨FPGA裸片信号数量)+子目标函数2(时序余量+单个FPGA裸片的功耗+时钟参数),或者,也可以构建得到目标函数=子目标函数1(跨FPGA裸片信号数量)+子目标函数2(时序余量+单个FPGA裸片的功耗)+子目标函数3(时钟参数)。(2)每个子目标函数基于多种不同组合的芯片性能参数构建,比如上述举例中,在同样由子目标函数1和子目标函数2实现时,可以构建得到目标函数=子目标函数1(跨FPGA裸片信号数量)+子目标函数2(时序余量+单个FPGA裸片的功耗+时钟参数),或者,可以构建得到目标函数=子目标函数1(跨FPGA裸片信号数量+时序余量)+子目标函数2(单个FPGA裸片的功耗+时钟参数)。(3)不同的子目标函数具有不同的先后执行顺序,比如当目标函数由子目标函数1(跨FPGA裸片信号数量)、子目标函数2(时序余量+单个FPGA裸片的功耗+时钟参数)实现时,可以构建得到目标函数=子目标函数1+子目标函数2(先基于子目标函数1进行分配),或者可以构建得到目标函数=子目标函数2+子目标函数1(先基于子目标函数2进行分配)。上述三种情况还可以互相组合,从而使得构建得到的子目标函数具有多种不同的组合方式和排列顺序,从而具有不同的分配过程。

在上述过程中,无论每个阶段所使用的子目标函数具体形式如何,在利用各个子目标函数分阶段分配实例模块时,都需要将实例模块分配到各个可容纳该实例模块的子网表中,可选的,同一个子网表在不同阶段下的容纳能力相同或不同。比如对于容纳能力不同的情况,对于一个总共包含10个GTP的FPGA裸片所对应的子网表来说,在第一个阶段利用子目标函数1进行分配时,该子网表的容纳能力为最多包含8个GTP,而在第二个阶段利用子目标函数2进行分配时,该子网表的容纳能力为最多包含6个GTP。

步骤S2,根据初始分配结果确定用户输入网表中各个待优化节点的时序代价值C1,请参考图3所示的流程图。

可选的在本申请中,待优化节点包括用户输入网表中的所有实例模块,或者,包括用户输入网表中的位于预定路径上的部分实例模块,预定路径通常是用户预先设定的关键路径。

在该步骤中,首先初始化每个实例模块的时序代价值C1,通常是初始化为0。除此之外,还初始化每个实例模块的辅助时序代价C2,同样通常初始化为0。对于每个待优化节点V

可选的,每个待优化节点V

RRS(V

其中V

根据所述初始分配结果、基于每个实例模块时序代价值的初始化值和辅助时序代价的初始化值,结合每个待优化节点V

遍历该待优化节点V

和/或,遍历该待优化节点V

其中,待优化节点V

在增大待优化节点V

(a)按照待优化节点V

(b)按照待优化节点V

类似的,在增大待优化节点V

在对待优化节点V

更新机制一、非权重更新

待优化节点V

更新机制二、按权重更新

待优化节点V

可选的,无论是采用上述哪种更新机制更新待优化节点V

对于每个待优化节点V

步骤S3,按照各个待优化节点的时序代价值C1从大到小的顺序依次遍历各个待优化节点。在按照各个待优化节点的时序代价值从大到小的顺序依次遍历各个待优化节点时,若存在至少两个待优化节点的时序代价值相等,则按照待优化节点的拓扑次序从先至后的顺序依次遍历各个时序代价值相等的待优化节点。

对于遍历到的每个待优化节点V

将其他所有子网表中可容纳该待优化节点的子网表作为该待优化节点的待重分配子网表,对于该待优化节点的任意一个可重新分配的待重分配子网表,确定该将该待优化节点重新分配到该待重分配子网表后的时序代价值C1的做法是,请参考图4:依次遍历与该待优化节点存在直接连接关系的所有相邻节点,并在每次遍历时更新待优化节点的时序代价值,确定遍历完所有相邻节点后更新得到的待优化节点的时序代价值为待优化节点重新分配到待重分配子网表时的时序代价值,每次遍历时:

(1)若待优化节点及其存在直接连接关系的相邻节点在当前分配结果下在同一个子网表中、将该待优化节点重新分配到待重分配子网表后与其相邻节点在不同的子网表中,则增大该待优化节点的各个可达寄存器节点的辅助时序代价C2,并更新得到将待优化节点的时序代价值C1为自身当前的时序代价值C1和各个可达寄存器节点的辅助时序代价C2之间的最大值。

(2)若待优化节点及其存在直接连接关系的相邻节点在当前分配结果下在不同子网表中、将待优化节点重新分配到待重分配子网表后与其相邻节点在同一子网表中,则减小待优化节点的各个可达寄存器节点的辅助时序代价C2,并更新得到将待优化节点的时序代价值C1为自身当前的时序代价值C1和各个可达寄存器节点的辅助时序代价C2之间的最大值。

(3)若待优化节点及其存在直接连接关系的相邻节点在当前分配结果下与将待优化节点重新分配到待重分配子网表后均在同一个子网表中或者均不在同一个子网表中,则保持该待优化节点的时序代价值C1不变。

在上述情况(1)和(2)中都需要改变待优化节点的各个可达寄存器节点的辅助时序代价C2,具体在情况(1)中表现为增大、在情况(2)中表现为减小,无论是哪一种情况,在改变可达寄存器节点的辅助时序代价C2时都需要按照相应的变化量来改变,本申请提供如下两种改变原则:(a)按照待优化节点所在路径对应的变化量改变该待优化节点的各个可达寄存器节点的辅助时序代价C2,不同路径对应的变化量相同或不同。(b)按照待优化节点在所在路径中所处的信号段对应的变化量改变待优化节点的各个可达寄存器节点的辅助时序代价,同一路径中的不同信号段对应的变化量相同或不同。具体内容与上述步骤S2中相应内容类似,本申请不再赘述。

在该步骤中,待优化节点及其存在直接连接关系的相邻节点分别为用户输入网表中的实例模块,与待优化节点存在直接连接关系的相邻节点包括该待优化节点的父节点和/或子节点,待优化节点的父节点和子节点的定义如上所述。因此该步骤中与待优化节点存在直接连接关系的相邻节点包括待优化节点的所有父节点和子节点中的其中一个节点,则该步骤实际实现为:依次遍历待优化节点的所有父节点和子节点中的每一个节点作为与待优化节点存在直接连接关系的相邻节点,在每一次遍历时,通过上述方法依次更新待优化节点的时序代价值,在遍历完待优化节点的所有父节点和子节点之后,得到将该待优化节点重新分配到该待重分配子网表时的时序代价值C1,所有相邻节点的遍历顺序可以预先设定。在每一次遍历时按照上述情况(1)、(2)和(3)中的任意一种对待优化节点的时序代价值进行更新,不同相邻节点对待优化节点的时序代价值的更新情况相同或不同,比如父节点1按照上述情况(1)进行更新,父节点2按照上述情况(2)进行更新……。

在每一次遍历时,若按照情况(1)或(2)对待优化节点的时序代价值进行更新,则同样有非权重更新和按权重更新两种更新机制,与上述步骤S2的具体操作类似,本申请不再赘述。

步骤S4,调整各个待优化节点的分配结果使其分配到时序代价值最小的子网表中,时序代价值越小、对应的待优化节点所在路径的跨子网表次数越小,跨子网表数是路径上存在直接连接关系的两个实例模块分别在两个不同的子网表内的数量。

步骤S5,根据调整后的分配结果更新各个待优化节点的时序代价值,对于每个待优化节点V

更新得到各个待优化节点V

分割得到的每个子网表包括分配到的所有实例模块以及实例模块之间的网表线网,而且基于本申请提供的上述网表分割方法可知,每个FPGA裸片上的逻辑资源数量满足分割得到的对应的子网表的逻辑资源需求,FPGA裸片上的输入信号连接点引出端满足对应的子网表的输入信号数量,FPGA裸片上的输出信号连接点引出端满足对应的子网表的输出信号数量,多裸片FPGA的IO口满足对应的子网表的IO口需求。

以上的仅是本申请的优选实施方式,本发明不限于以上实施例。可以理解,本领域技术人员在不脱离本发明的精神和构思的前提下直接导出或联想到的其他改进和变化,均应认为包含在本发明的保护范围之内。

相关技术
  • 基于时序的多裸片FPGA的网表分割方法
  • 针对多裸片FPGA的基于时钟域的网表分割方法
技术分类

06120113083349