发明内容
本发明的目的是针对现有技术的缺陷,提供了一种FPGA芯片的局部布局的优化方法,通过增量式的移动FPGA芯片中的基本单元,并对线网长度代价函数、逻辑单元密度代价函数和时间余量代价函数综合计算得到当前布局下的综合代价,通过判断基本单元移动后综合代价是否得到优化而确定是否接受移动后的布局,从而确定了各基本单元在FPGA芯片中的最优位置,实现了FPGA布局的优化,并通过增量式的方法兼顾了布局优化的效率。
本发明实施例提供了一种FPGA芯片的局部布局的优化方法,包括:
根据所述第一布局下的FPGA芯片的线网长度代价函数、逻辑单元密度代价函数和时间余量代价函数进行加权计算,得到第一布局下的综合代价;
将所述第一布局下的综合代价设定为基准综合代价;
对所述第一布局下的一个基本单元的位置进行调整,得到第二布局;其中,所述基本单元包括查找表和/或寄存器;
根据所述第二布局下的FPGA芯片的线网长度代价函数、逻辑单元密度代价函数和时间余量代价函数进行加权计算,得到第二布局下的综合代价;
当所述第二布局下的综合代价小于基准综合代价时,接受对所述一个基本单元位置的调整;
将所述第二布局下的综合代价设为基准综合代价;并对所述第一布局下的下一个基本单元的位置进行调整。
优选的,在所述根据所述第一布局下的FPGA芯片的线网长度代价函数、逻辑单元密度代价函数和时间余量代价函数进行加权计算之前,所述方法还包括:
获取全局布局后的基本单元的信息;
根据布局合法化约束条件对所述基本单元进行布局调整,得到所述第一布局;所述第一布局中,所述基本单元的布局位置满足布局合法化约束条件。
优选的,所述加权计算具体为:
C=α×W+β×T+(1-α-β)×D
其中,C为综合代价、α为线网长度代价函数的权重、β为时间余量代价函数的权重、W为线网长度代价函数、T为时间余量代价函数、D为逻辑单元密度代价函数。
进一步优选的,所述线网长度代价函数W具体为:
W=总线网长度/基准总线网长度。
进一步优选的,所述时间余量代价函数T具体为:
T=Δ时间余量/基准时间余量。
进一步优选的,所述逻辑单元密度代价函数D具体为:
逻辑单元中,查找表和寄存器的使用百分比。
进一步优选的,所述逻辑单元密度代价函数D具体为:
每个逻辑单元的输入输出线网的数量占芯片的每个逻辑单元的总的可用线网数量的百分比。
优选的,所述对所述第一布局下的一个基本单元的位置进行调整具体为:
对所述第一布局的全部路径中的所述一个基本单元的位置进行调整;或者
对所述第一布局的关键路径中的所述一个基本单元的位置进行调整。
进一步优选的,当所述第二布局下的综合代价不小于基准综合代价时,所述方法还包括:
对所述第一布局下的下一个基本单元的位置进行调整。
本发明实施例提供的FPGA芯片的局部布局的优化方法,通过增量式的移动FPGA芯片中的基本单元,并对线网长度代价函数、逻辑单元密度代价函数和时间余量代价函数综合计算得到当前布局下的综合代价,通过判断基本单元移动后综合代价是否得到优化而确定是否接受移动后的布局,从而确定了各基本单元在FPGA芯片中的最优位置,实现了FPGA布局的优化,并通过增量式的方法兼顾了布局优化的效率。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
图1为本发明实施例提供的FPGA芯片的局部布局的优化方法的流程图。如图所示,所述方法包括如下步骤:
步骤110,获取全局布局后的基本单元的信息;
具体的,根据用户设计,对用户设计进行电路综合,以及库映射,得到全局布局的基本单元。在一个例子中,基本单元可以包括:四输入的查找表(LUT4、LUT4C)和寄存器(REG)、单独的四输入查找表、单独的寄存器这三种基本形式。
在全局布局后,FPGA芯片内部的逻辑单元(Logic Element,LE)之间、逻辑单元之内的查找表和寄存器是允许存在重叠的。
步骤120,根据布局合法化约束条件对所述基本单元进行布局调整,得到所述第一布局;所述第一布局中,所述基本单元的布局位置满足布局合法化约束条件;
具体的,布局合法化步骤是将各逻辑单元中的基本单元的重叠进行消除,并进行各种的约束检查和逻辑单元位置的调整,然后得到满足布局合法化约束条件的一个合法解布局,即为第一布局。
步骤130,根据所述第一布局下的FPGA芯片的线网长度代价函数、逻辑单元密度代价函数和时间余量代价函数进行加权计算,得到第一布局下的综合代价;
具体的,综合代价是用于评价FPGA设计的优化程度的一个量化指标。
设定第一布局下的FPGA芯片的总线网长度为基准总线网长度、设定第一布局下的FPGA芯片的逻辑单元密度为基准逻辑单元密度、设定第一布局下的FPGA芯片的基本单元的时间余量(slack)为基准时间余量;则,第一布局下的综合代价具体可以通过如下公式进行加权计算获得:
C1=α×W1+β×T1+(1-α-β)×D1 (公式1)
其中,C1为第一布局下的综合代价、α为线网长度代价函数的权重、β为时间余量代价函数的权重、W1为第一布局下的线网长度代价函数、T1为第一布局下的时间余量代价函数、D1为第一布局下的逻辑单元密度代价函数;α、β分别为正数,并且α+β≤1。在一个例子中,α、β分别取值0.3。当然根据不同的芯片设计需求,本领域技术人员可以根据设计需求自行设定适合的权重。
进一步的,
第一布局下的线网长度代价函数D1具体可以通过以下方式来计算:
W1=第一布局下的总线网长度/基准总线网长度 (公式2)
在第一布局下,总线网长度与基准总线长度相等,因此,第一布局下的W=1。
第一布局下的时间余量代价函数T1具体可以通过以下方式来计算:
T1=Δ时间余量/基准时间余量 (公式3)
在第一布局下,Δ时间余量为0,因此第一布局下的时间余量代价函数T1=0。
当时间余量(Slack)的值为正时,表示满足约束延迟;当时间余量(Slack)的值为负时,表示不满足约束延迟。因此在优化时,需要对Slack最小的先进行优化,使这个值尽量的大,最终满足每个基本单元的端口相对于约束时序的Slack都大于等于0。
因为基准时间余量为负值,而当时序代价函数得到优化时,Δ时间余量为正值,因此综合代价会因为时序代价函数的优化而减小。
第一布局下的逻辑单元密度代价函数D1具体可以通过以下两种方式中的任意一种来计算:
计算方法1:通过第一布局下的逻辑单元中,查找表和寄存器的使用百分比。
具体的,在一个例子中,如图2所示。一个LE由4个基本的可编程逻辑单元(Logic Parcel,LP)、快速跳跃进位链输入(Carry skip in)、快速跳跃进位链输出(Carry skip out)及局部缓冲(LBUF)组成。每个LP中包括两个LUT4、1个LUT4C(带进位链的LUT4)和两个寄存器。1个LE中共计有12个LUT4(其中包括LUT4C)和8个寄存器,LUT4和寄存器的比例为3:2,快速跳跃进位链输入和快速跳跃进位链输出用于实现快速跳跃进位链功能,LBUF用于产生逻辑单元中寄存器的控制信号时钟。
在图2中,查找表的总数为12个,寄存器为8个,查找表LUT4和LUT4C被使用了10个,寄存器被使用了8个。因此在这个逻辑单元中,逻辑单元密度代价函数D1为:
D1=(10+8)/(12+8)=90%
计算方法2:第一布局下的每个逻辑单元的输入输出线网的数量占芯片的每个逻辑单元的总的可用线网数量的百分比。
步骤140,对所述第一布局下的一个基本单元的位置进行调整,得到第二布局;
具体的,在第一布局中,选择一个基本单元,对其位置进行调整。被调整的基本单元可以是在第一布局的关键路径中的一个基本单元,或者也可以是在第一布局中任意选取一个基本单元对其位置进行调整。
优选的,在局部布局优化中,对于基本单元的调整,通常是在一定的范围内进行的。比如,在一个具体的例子中,基本单元的调整,是在与被调整基本单元周围的三个同类型基本单元的位置上,寻找一个新的位置,将被调整的基本单元移动至新的位置。当在相邻的三个同类型基本单元的位置上找不到合适的位置时,可以再扩大范围至相邻的四个逻辑单元。
以图3中示出的结构为例,说明基本单元调整的几种可能的方式。
比如,图3中LE1左上方的LUT4在LP3内部移动,向下移动两个位置;
又比如,图3中LE1中部的LUT4C,与相邻的LE2中相应的LUT4C的位置进行互换;
再比如,图3中LE1下部的LUT4,移动到LE2中相应的LUT4C的位置上。
对基本单元调整的位置选择按照使调整后芯片中总线网长度减小的原则进行,使调整后线网连接的基本单元离近其时钟信号源。
步骤150,根据所述第二布局下的FPGA芯片的线网长度代价函数、逻辑单元密度代价函数和时间余量代价函数进行加权计算,得到第二布局下的综合代价;
具体的,根据公式
C2=α×W2+β×T2+(1-α-β)×D2 (公式4)
计算第二布局下的综合代价。
其中,C2为第二布局下的综合代价、W2为第二布局下的线网长度代价函数、T2为第二布局下的时间余量代价函数、D2为第二布局下的逻辑单元密度代价函数。
具体的,W2、T2、D2的具体计算方式参照上述步骤130中W1、T1、D1的计算方式,此处不再赘述。
步骤160,判断所述第二布局下的综合代价是否小于基准综合代价;
当所述第二布局下的综合代价小于基准综合代价时,执行:
步骤170,接受对所述一个基本单元位置的调整;
具体的,当第二布局下的综合代价比基准综合代价小时,说明芯片的局部布局是被优化了的,第二布局下的线网长度或者逻辑单元密度或者时间余量其中的一个或多个得到了优化。因此当第二布局下的综合代价比基准综合代价小时,接受对所述一个基本单元位置的调整。使后续的优化是在当前基本单元位置调整后的基础上进行的。即是采用了一种增量的优化方法。
步骤180,将所述第二布局下的综合代价设为基准综合代价;
具体的,在接收了上述基本单元位置调整之后,将所述第二布局下的综合代价设为基准综合代价,以便在对所述第一布局下的下一个基本单元的位置进行调整之后,根据下次调整计算的综合代价来判定下次调整是否是相对于本次调整后的布局又进行了优化。
步骤200,判断判断全部基本单元的位置是否都调整完毕,如果完毕,则结束;否则返回步骤140,继续进行后续其他基本单元的位置调整。
后续的调整中每一次都移动FPGA芯片中一个基本单元的位置,然后按照上述步骤140-180的方法进行当前调整后的综合代价与当前布局调整前的综合代价的比较,直至FPGA芯片中所有的基本单元都被移动了一次,或者FPGA芯片的关键路径中的基本单元都被移动了一次。
此外,在步骤160之后,当所述第二布局下的综合代价不小于基准综合代价时,该方法还包括:
步骤190,拒绝对所述一个基本单元位置的调整。
当第二布局下的综合代价不小于基准综合代价时,认为该步调整后的局部布局没有被优化,因此拒绝当前的调整,还将这个基本单元的位置放在原来的位置上不动。
步骤200,判断全部基本单元的位置是否都调整完毕;如果没有,则返回步骤140,对所述第一布局下的下一个基本单元的位置进行调整。
在一个具体的例子中,对FPGA芯片局部布局的优化采用四步调整的方法进行。
第一步,采用上述实施例的方法,对FPGA芯片中的全部基本单元的位置进行调整,每次移动一个基本单元,直至所有的基本单元都被移动了一次。
第二步,采用上述实施例的方法,对FPGA芯片中的全部基本单元的位置进行调整,每次移动一个基本单元,直至所有的基本单元都被移动了一次。
第三步,采用上述实施例的方法,对FPGA芯片中的关键路径的基本单元的位置进行调整,每次移动一个基本单元,直至所有关键路径上的基本单元都被移动了一次。
第四步,采用上述实施例的方法,对FPGA芯片中的关键路径的基本单元的位置进行调整,每次移动一个基本单元,直至所有关键路径上的基本单元都被移动了一次。
经过上述四步之后,可以认为FPGA芯片的局部布局优化已经完成,所得到的是各基本单元在FPGA芯片中的最优位置。
此外,芯片的局部布局优化也可以是,对FPGA芯片中的基本单元的位置进行调整,每次移动一个基本单元,直至所有的基本单元都被移动了至少一次。具体的次数可以由用户设定,或者也可以按照达到约束条件作为局部布局优化的终止条件。
本发明实施例提供的FPGA芯片的局部布局的优化方法,通过增量式的移动FPGA芯片中的基本单元,并对线网长度代价函数、逻辑单元密度代价函数和时间余量代价函数综合计算得到当前布局下的综合代价,通过判断基本单元移动后综合代价是否得到优化而确定是否接受移动后的布局,从而确定了各基本单元在FPGA芯片中的最优位置,实现了FPGA布局的优化,并通过增量式的方法兼顾了布局优化的效率。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。