利用网表局部再综合实现布局合法化的fpga布局方法
技术领域
本发明涉及FPGA
技术领域
,尤其是一种利用网表局部再综合实现布局合法化的FPGA布局方法。背景技术
现场可编程逻辑门阵列(Field-Programmable Gate Array,FPGA)是一种在日用家电、大型机械乃至航空航天都有广泛使用的芯片。FPGA芯片的使用离不开电子设计自动化(Electronic Design Automation,EDA)工具。布局则是EDA工具中重要的一环,其对EDA工具本身运行速度、所处理电路的最终质量有着很大影响。近年来,FPGA芯片的电路规模快速增长,使其功能更加强大,但同时也给相应的EDA工具带来了挑战。
布局的主要作用就是在优化目标下将用户网表中的实例一一映射到FPGA芯片具有实际物理坐标的布局位置上,解析型布局算法以其可以使用数学方法快速求得全局最优解的特性成为当今布局算法的主流方向之一。但是解析型布局算法的求解结果往往存在实例的重叠问题,而布局合法的前提条件是实例之间不能存在重叠,一般情况下解析型布局算法前几次求解得到的布局结果会存在大量的重叠,需要多次迭代对求解结果进行展开直至达到一个较为理想的低重叠度,但即使是最后一次迭代也往往不能完全消除布局结果的重叠,因此解析型布局算法后续通常仍需要结合合法化处理才能获得一个合理的布局结果。现阶段的用户网表的电路结构往往体积庞大,往往需要多次尝试迭代才能将过分拥挤的区域的实例向外展开,但拥挤度降低速度缓慢会导致如下常见问题:展开过慢、导致迭代展开过程的处理时间通常较长,降低布局效率;以及,展开过度,增加绕线时延未能达成时序目标。
发明内容
本发明人针对上述问题及技术需求,提出了一种利用网表局部再综合实现布局合法化的FPGA布局方法,本发明的技术方案如下:
一种利用网表局部再综合实现布局合法化的FPGA布局方法,该方法包括:
获取用户设计并将用户设计进行逻辑综合处理得到对应的全局用户网表,全局用户网表中包括形成层次化结构的若干个功能模块,每个功能模块内分别包括若干个实例;
基于全局用户网表对FPGA芯片进行布局,并确定FPGA芯片上的目标区域,目标区域是布局结果不符合布局目标的区域;
根据当前的布局结果中位于目标区域内的实例确定当前的全局用户网表中的待优化功能模块;
对待优化功能模块根据布局目标对应的优化目标重新进行逻辑综合处理得到优化后局部网表;
利用优化后局部网表更新当前的全局布局网表,并利用更新后的全局布局网表重新执行基于全局用户网表对FPGA芯片进行布局的步骤,直至FPGA芯片全部区域满足布局目标。
其进一步的技术方案为,根据当前的布局结果中位于目标区域内的实例确定当前的全局用户网表中的待优化功能模块,包括:
确定当前的全局用户网表的所有功能模块中、内部包含的待优化实例的数量满足预设条件的功能模块作为待优化功能模块,待优化实例是位于目标区域内的实例。
其进一步的技术方案为,预设条件包括:包含的待优化实例的数量达到第一预定阈值,和/或,内部包含的待优化实例在所有实例中的占比达到第二预定阈值。
其进一步的技术方案为,当存在至少两个功能模块内部包含的待优化实例的数量都满足预设条件时,选取满足预设条件且内部包含的待优化实例在所有实例中的占比最高的功能模块作为待优化功能模块,和/或,选取满足预设条件且位于层次化结构的预设层次的功能模块作为待优化功能模块。
其进一步的技术方案为,该方法还包括:
若当前的全局用户网表的所有功能模块内部包含的待优化实例的数量都不满足预设条件,则扩大目标区域所包含的区域范围,并利用新的目标区域再次执行根据当前的布局结果中位于目标区域内的实例确定当前的全局用户网表中的待优化功能模块的步骤。
其进一步的技术方案为,布局目标包括FPGA芯片上所有区域的布局拥挤度都小于拥挤度阈值,对应的逻辑综合处理时的优化目标为减少待优化功能模块的布局面积;
则确定FPGA芯片上的目标区域,包括:确定FPGA芯片上包含预定区域范围且布局拥挤度到达拥挤度阈值的区域为目标区域。
其进一步的技术方案为,布局目标包括FPGA芯片内的预定路径满足对应的时序要求,对应的逻辑综合处理时的优化目标为减少待优化功能模块的层次化结构和/或减少待优化功能模块的信号扇出;
则确定FPGA芯片上的目标区域,包括:确定FPGA芯片上包含预定区域范围且包含不满足对应的时序要求的预定路径的区域为目标区域。
其进一步的技术方案为,当FPGA芯片为包含多个互相连接的FPGA裸片的多裸片FPGA结构时,FPGA芯片内的预定路径还包括不同FPGA裸片之间的跨裸片信号所在的路径。
其进一步的技术方案为,在基于全局用户网表对FPGA芯片进行布局得到的一个布局结果下,确定得到的FPGA芯片上的目标区域包括一个或多个,多个目标区域对应的布局目标均相同,或者存在至少两个目标区域对应的布局目标不同。
其进一步的技术方案为,在基于不同的全局用户网表对FPGA芯片进行布局得到的多个布局结果下确定得到的目标区域对应的布局目标均相同,或者,存在至少两次布局结果下确定得到的目标区域对应的布局目标不同。
其进一步的技术方案为,在对待优化功能模块重新进行逻辑综合处理时,对待优化功能模块中的寄存器和查找表重新进行逻辑综合处理。
其进一步的技术方案为,利用优化后局部网表更新当前的全局布局网表,包括:
利用优化后实例替代当前的全局布局网表中的优化前实例并更新所有实例之间的连线,优化后实例为优化后局部网表中包含的实例,优化前实例为待优化功能模块包含的实例。
其进一步的技术方案为,若优化前实例在上一次布局结果下的布局位置为合法位置,则在利用更新后的全局布局网表对FPGA芯片进行布局时,将优化后实例指定摆放于优化前实例在上一次布局结果下的布局位置处,否则,将优化后实例指定摆放于FPGA芯片上的其他合法位置处,优化后实例为优化后局部网表中包含的实例,优化前实例为待优化功能模块包含的实例。
本发明的有益技术效果是:
本申请公开了一种利用网表局部再综合实现布局合法化的FPGA布局方法,该方法根据布局目标选定目标区域,由目标区域内部的实例根据相应的方法选出适当层次的待优化功能模块,对待优化功能模块单独重新进行逻辑综合,也即对全局用户网表进行增量式优化更新,可以使得目标区域尽快展开达成布局目标,而且可以减少每次处理量,从而提高布局过程中的局部区域展开效率,尽快达成布局目标。
附图说明
图1是本申请的FPGA布局方法的流程图。
图2是本申请一个举例中的全局用户网表的层次化结构的示意图。
图3是一个实施例中确定待优化功能模块的流程示意图。
具体实施方式
下面结合附图对本发明的具体实施方式做进一步说明。
本申请公开了一种利用网表局部再综合实现布局合法化的FPGA布局方法,该方法包括如下步骤,请参考图1:
步骤1,获取用户设计并将用户设计进行逻辑综合处理得到对应的全局用户网表。逻辑综合处理主要包括读入、翻译、优化和映射四个过程,是利用EDA对FPGA芯片进行开发的一个常规过程,本申请对逻辑综合处理的具体操作不再展开。
全局用户网表中包括形成层次化结构的若干个功能模块,全局用户网表的层次化结构在读入的用户设计(RTL级描述文件)中已经定义。全局用户网表的层次化结构通常是基于功能模块之间的调用关系所形成的树形结构,该层次化结构指示各个功能模块之间的调用关系,该层次化结构的最底层是若干实例,沿着层次化结构从最顶层到最底层的方向,每个功能模块可以调用位于下一层次的一个或多个功能模块也可以不调用,因此每个功能模块内分别包括若干个实例,可以直接包括最底层的实例和/或包括位于下一层次的一个或多个功能模块的实例。将仅直接包括最底层的实例、而不调用其他任何功能模块的功能模块定义为最底层的功能模块,其他功能模块所在的层次是其调用的所有功能模块中最高层次的上一层。
比如全局用户网表形成的层次化结构请参考图2,该层次化结构的最底层是实例A~K,除此之外还包括功能模块V1~V6。功能模块V4、V5和V6都仅直接包括最底层的实例、而不调用其他任何功能模块,因此这三个功能模块为最底层的功能模块。功能模块V2调用的V4和V5都位于最底层,因此功能模块V2位于从底至顶的第二层,同理功能模块V3也是。而功能模块V1位于层次化结构的最高层。
如图2所示,功能模块V3调用下层的功能模块V6同时还包括最底层的实例J,因此功能模块V3内包括的实例有实例J以及功能模块V6内的实例K。功能模块V5不调用下层的功能模块,直接包括4个最底层的实例,因此功能模块V5内包括的实例有实例E、实例F、实例G和实例H。其他以此类推。
在实际应用时,全局用户网表需要被扁平化(Flatten)后才适合后续进行布局,但扁平化后的全局用户网表同样可以体现层次化结构,可以在扁平化时将层次化信息置入使其成为实例名字的一部分,从而根据实例名即可推定实例在层次化结构所属的层次,例如可以将图2中的实例A命名为V1/V2/InstA,V1和V2即表示实例A(InstA)的层次。
步骤2,基于全局用户网表对FPGA芯片进行布局,布局以后可以得到全芯片的布局结果,也即在将全局用户网表中的实例一一映射到FPGA芯片具有实际物理坐标的布局位置上,可以采用现有的各种布局方法来实现布局,比如目前较为常用的解析型布局算法。
在完成布局得到当前的布局结果后,可以确定FPGA芯片上的目标区域,目标区域是布局结果不符合布局目标的区域,布局目标是预先设定的,目标区域包含的区域范围的大小也是预先设定的。
在本申请中,目标区域所包含的区域范围以FPGA内部的基本模块为边界,FPGA中的基本模块主要包括CLB(基本逻辑单元)、BRAM、IOB、DSP和PC等,比如目标区域的区域范围为6*8个CLB。
步骤3,根据当前的布局结果中位于目标区域内的实例确定当前的全局用户网表中的待优化功能模块,请参考图3所示流程图。
在一个实施例中,该步骤的实现方法为:确定当前的全局用户网表的所有功能模块中、内部包含的待优化实例的数量满足预设条件的功能模块作为待优化功能模块,待优化实例是位于目标区域内的实例。比如图2中,阴影表示的实例A、B、D、E、F、G是位于目标区域内的待优化实例,功能模块V4、V5、V2和V1内均包含待优化实例,且各个功能模块中包含的待优化实例的情况如下表所示,然后根据功能模块V4、V5、V2和V1内包含的待优化实例的数量从中选出待优化功能模块。
可选的,当一个功能模块包含的待优化实例的数量达到第一预定阈值,和/或,该功能模块内部包含的待优化实例在该功能模块内部所有实例中的占比达到第二预定阈值时,确定该功能模块内部包含的待优化实例的数量满足预设条件。比如设定第一预定阈值为4,设定第二预定阈值为0.7,则结合上表的数据可以确定功能模块V2内部包含的待优化实例的数量满足预设条件。若设定第一预定阈值为2,设定第二预定阈值为0.7,则结合上表的数据可以确定功能模块V5和功能模块V2内部包含的待优化实例的数量都满足预设条件。
当存在至少两个功能模块内部包含的待优化实例的数量都满足预设条件时,选取满足预设条件且内部包含的待优化实例在功能模块内所有实例中的占比最高的功能模块作为待优化功能模块,和/或,选取满足预设条件且位于层次化结构的预设层次的功能模块作为待优化功能模块。其中,预设层次为预先定义的,比如通常选取预设层次为所有满足预设条件的功能模块中的最高层次,或者,选取预设层次为所有满足预设条件的功能模块中的最低层次。比如在上述举例中,在第一预定阈值为2、第二预定阈值为0.7、确定功能模块V5和功能模块V2内部包含的待优化实例的数量都满足预设条件的基础上,而功能模块V5和功能模块V2内的待优化实例的占比相等,则可以选取位于更低层次的功能模块V5作为待优化功能模块。
若当前的全局用户网表的所有功能模块内部包含的待优化实例的数量都不满足预设条件,则可选的,扩大目标区域所包含的区域范围,并利用新的目标区域再次执行根据当前的布局结果中位于目标区域内的实例确定当前的全局用户网表中的待优化功能模块的步骤,也即重新返回步骤2中确定新的目标区域,直至找到待优化功能模块。比如设定第二预定阈值为0.8,则结合上表的数据可以确定所有功能模块内部包含的待优化实例的数量都不满足预设条件,此时可以扩大目标区域的区域范围,比如将目标区域的区域范围由6*8个CLB扩大到8*8个CLB,然后重新确定待优化功能模块。和/或,可选的,调整第一预定阈值和/或第二预定阈值直至找到待优化功能模块。
步骤4,对待优化功能模块根据布局目标对应的优化目标重新进行逻辑综合处理得到优化后局部网表。
在对待优化功能模块重新进行逻辑综合处理后,待优化功能模块中包含的实例会发生变化,本申请将待优化功能模块在重新进行逻辑综合处理前包含的实例称为优化前实例、在重新进行逻辑综合处理后包含的实例称为优化后实例,而优化后局部网表是待优化功能模块所对应的局部网表,因此优化后局部网表也包含优化后实例。
可选的,在对待优化功能模块重新进行逻辑综合处理时,对待优化功能模块中的基本逻辑单元CLB内部的寄存器和查找表重新进行逻辑综合处理的,对其他基本模块不作处理。
步骤5,利用优化后局部网表更新当前的全局布局网表,也即将优化后局部网表与当前的全局布局网表中其余未重新进行逻辑综合处理的部分进行合并,形成更新后的全局布局网表。具体的,利用优化后实例替代当前的全局布局网表中的优化前实例,并根据电路结构更新所有实例之间的连线。然后利用更新后的全局布局网表重新执行基于全局用户网表对FPGA芯片进行布局的步骤,也即重新执行步骤2-5,直至FPGA芯片全部区域满足布局目标,也即FPGA芯片上不存在不符合布局目标的目标区域时,进行后续的详细布局得到最终的布局结果。在利用更新后的全局布局网表重新布局时,同样需要对更新后的全局布局网表进行扁平化处理。
在利用更新后的全局布局网表重新进行布局时,若优化前实例在上一次布局结果下的布局位置为合法位置,则在利用更新后的全局布局网表对FPGA芯片进行布局时,将优化后实例指定摆放于优化前实例在上一次布局结果下的布局位置处,否则,将优化后实例指定摆放于FPGA芯片上的其他合法位置处。
在上述布局方法中,布局目标根据实际情况确定,当布局目标不同时,对待优化功能模块重新进行逻辑综合处理时使用的优化目标也不同,且优化目标是与布局目标相对应的。
可选的,在一个实施例中,上述布局方法中的布局目标包括FPGA芯片上所有区域的布局拥挤度都小于拥挤度阈值,则在确定FPGA芯片上的目标区域时,确定FPGA芯片上包含预定区域范围且布局拥挤度到达拥挤度阈值的区域为目标区域。预定区域范围为预设的区域范围,比如上述举例的6*8个CLB。对应的逻辑综合处理时的优化目标为减少待优化功能模块的布局面积。在该实施例中,在对待优化功能模块重新进行逻辑综合处理后,待优化功能模块内部的实例数目会减少,也即优化后实例的数目少于优化前实例的数目。
可选的,在另一个实施例中,上述布局方法中的布局目标包括FPGA芯片内的预定路径满足对应的时序要求,则在确定FPGA芯片上的目标区域时:确定FPGA芯片上包含预定区域范围且包含不满足对应的时序要求的预定路径的区域为目标区域。对应的逻辑综合处理时的优化目标为减少待优化功能模块的层次化结构和/或减少待优化功能模块的信号扇出。
在上述实施例中,FPGA芯片内的预定路径包括FPGA芯片内的所有路径或者部分路径,常见的,FPGA芯片内的预定路径包括FPGA芯片内具有特殊时序特征的路径和/或FPGA芯片内具有特殊信号特征的路径,通常可以预先配置。不同预定路径对应的时序要求可以相同也可以不同,通常也可以预先配置。比如选取特殊时序特征的路径作为预定路径时,可以选定FPGA芯片内的关键路径作为预定路径。再比如选取特殊信号特征的路径作为预定路径时,可以选定FPGA芯片内传输时钟信号的路径作为预定路径。该实施例的FPGA布局方法可以适用于单裸片FPGA结构也可以适用于多裸片FPGA结构,多裸片FPGA结构内包括若干个相连的FPGA裸片,则对于多裸片FPGA结构来说,当选取特殊信号特征的路径作为预定路径时,FPGA芯片内的预定路径还包括不同FPGA裸片之间的跨裸片信号所在的路径。
如上所述,本申请提供的FPGA布局方法中的布局目标具有多种不同的含义,则在FPGA布局方法的循环迭代过程中,始终使用同一种布局目标或者融合使用多种不同的布局目标,按照不同情况分别介绍如下:
在一个实施例中,在基于全局用户网表对FPGA芯片进行布局得到的一个布局结果下,确定得到的FPGA芯片上的目标区域包括一个或多个,多个目标区域对应的布局目标均相同,或者存在至少两个目标区域对应的布局目标不同。也即在该实施例中,单次迭代过程中可以使用一种布局目标或者多种不同的布局目标,比如在得到一个布局结果后,确定目标区域A的布局拥挤度到达拥挤度阈值、确定目标区域B内包含不满足对应的时序要求的预定路径,则在对目标区域A确定的待优化功能模块重新进行逻辑综合处理时、减少待优化功能模块的布局面积,在对目标区域B确定的待优化功能模块重新进行逻辑综合处理时、减少待优化功能模块的层次化结构和/或减少待优化功能模块的信号扇出。
在另一个实施例中,在基于不同的全局用户网表对FPGA芯片进行布局得到的多个布局结果下确定得到的目标区域对应的布局目标均相同,或者,存在至少两次布局结果下确定得到的目标区域对应的布局目标不同。也即在该实施例中,不同迭代过程使用相同的布局目标或者不同的布局目标,比如可以在多次迭代下均对布局拥挤度达到拥挤度阈值的目标区域进行优化,也可以在多次迭代下首先对布局拥挤度达到拥挤度阈值的目标区域进行优化、再对包含不满足时序要求的关键路径的目标区域进行优化、再对包含不满足时序要求的跨裸片信号所在的路径的目标区域进行优化。
以上所述的仅是本申请的优选实施方式,本发明不限于以上实施例。可以理解,本领域技术人员在不脱离本发明的精神和构思的前提下直接导出或联想到的其他改进和变化,均应认为包含在本发明的保护范围之内。
- 上一篇:石墨接头机器人自动装卡簧、装栓机
- 下一篇:一种提升运行速度的FPGA芯片设计方法