一种FPGA详细布局的模拟退火方法与流程

文档序号:14519299阅读:277来源:国知局
一种FPGA详细布局的模拟退火方法与流程

本发明涉及集成电路设计领域,尤其涉及一种fpga详细布局的模拟退火方法。



背景技术:

fpga采用了逻辑单元阵列lca(logiccellarray)这样一个概念,内部包括可配置逻辑模块clb(configurablelogicblock)、输入输出模块iob(inputoutputblock)和内部连线(interconnect)三个部分。现场可编程门阵列(fpga)是可编程器件,与传统逻辑电路和门阵列(如pal,gal及cpld器件)相比,fpga具有不同的结构。fpga利用小型查找表(16×1ram)来实现组合逻辑,每个查找表连接到一个d触发器的输入端,触发器再来驱动其他逻辑电路或驱动i/o,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到i/o模块。fpga的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与i/o间的联接方式,并最终决定了fpga所能实现的功能,fpga允许无限次的编程。

典型fpga的开发流程一般包括功能定义/器件选型、设计输入、功能仿真、综合优化、综合后仿真、布局、布线、后仿真、板级仿真以及芯片编程与调试等主要步骤。

fpga芯片的自动化布局包含以下步骤:输入输出布局,全局时钟布局,初始布局,总体布局,合法化布局和详细布局。

布局是整个流程中比较费时的一步,其将逻辑网表中的硬件原语和底层单元合理地配置到芯片内部的固有硬件结构上,并且往往需要在速度最优和面积最优之间做出选择。目前,fpga的规模越来越大,结构越来越复杂,其中逻辑单元模块的类型越来越多,且包含像dsp和ram这种大的逻辑单元,并且有些单元之间的走线都是固定(hard)连接,如进位链(carrychain)和移位寄存器(shiftregister)等等,这些都限制了逻辑单元的随意摆放,特别是在有时序约束条件时,由于布局对fpga版图速度的快慢起到决定性作用,从在布局过程中就要将时序约束考虑进去,否则通过后续的布线等优化很难满足时序的约束。因此,如何快速有效的进行自动化布局,对fpga版图设计起到至关重要的作用。

传统的模拟退火方法很难保证多目标优化函数只优化单一目标与单目标优化函数优化单一目标结果的一致性,传统模拟退火方法中降温策略的不合理对布局的质量和速度造成影响。



技术实现要素:

本发明提供一种fpga详细布局的模拟退火方法,在单目标优化的基础上,对多目标优化进行了归一化处理和比例系数调节,保证了优化结果的一致性和多目标优化的有效性,消除了传统模拟退火方法中降温策略的不合理对布局的质量和速度造成的影响,调节后的温度更利于布局质量和速度的提高。

为了达到上述目的,本发明提供一种fpga详细布局的模拟退火方法,包含以下步骤:

根据合法化布局后形成的初始布局计算模拟退火的初始温度,移动单元模块对当前布局进行优化,根据单元模块移动的接受率,在初始温度基础上对单目标的温度值进行固定比例的迭代调节,采用归一化系数对多目标的目标值进行归一化,采用温度比例系数对经过迭代调节后的单目标温度值进行修正迭代计算,得到多目标的温度值。

计算模拟退火的初始温度的方法包含以下步骤:

步骤s1.1、选取多个单元模块进行移动或交换;

步骤s1.2、计算目标函数值total_cost;

total_cost=v1×优化目标1的目标函数值+v2×优化目标2的目标函数值+…+vn×优化目标n的目标函数值;

其中,v1~vn是每个优化目标的比重系数,v1+v2+…+vn=1;

步骤s1.3、计算每一个单元模块的移动对目标函数值的改变量;

目标函数值的改变量=移动后的目标函数值-移动前的目标函数值;

步骤s1.4、计算所有改变量的均方差,将该均方差作为模拟退火的初始温度。

针对单目标优化,以线长为例,单目标的目标函数值简化为:

total_cost=bb_cost(1)

其中,bb_cost是线长的代价,线长的代价等于线网连接所有单元模块所在位置的外包络矩形的半周长;

针对双目标优化,以线长和时延为例,双目标的目标函数值简化为:

其中,td_cost是时延的代价;pin是线网的引脚,num_pin是引脚的数目,weight(num_pins)是线长的权重,与pin引脚的num数目相关;delay是线网的驱动到各个被驱动点的时延;slack是线网时延的松弛度;require_time是线网最大允许的时延值;max_cirt是最大关键度;exponent是指数,x_length是外包络矩形沿x轴方向的宽度;y_length是外包络矩形沿y轴方向的宽度;tradeoff是线长和时延的比重系数;prev_total_bb_cost是上一轮迭代的线长的目标函数值;prev_total_td_cost是上一轮迭代的时延的目标函数值。

所述的计算单元模块移动的接受率的方法包含以下步骤:

步骤s2.1、选取多个单元模块进行移动或交换;

步骤s2.2、计算每一个单元模块的移动对目标函数值的改变量;

目标函数值的改变量=移动后的目标函数值-移动前的目标函数值;

步骤s2.3、判断目标函数值的改变量的数值,如果改变量的数值为负值,则接受此次对单元模块的移动,如果改变量的数值为正值,则进一步判断改变量的数值大小,如果改变量的数值小于移动后的目标函数值的1%,则接受此次对单元模块的移动,如果改变量的数值大于等于移动后的目标函数值的1%,则拒绝此次对单元模块的移动,将单元模块恢复到移动前的位置;被接受的移动是成功移动,未被接受的移动是无效移动;

步骤s2.4、统计成功移动的次数及目标函数总的改变量;

所述的目标函数总的改变量等于所有单元模块的移动对目标函数值的改变量之和。

所述的移动或交换的单元模块包含随机移动序列和特定移动序列,所述的随机移动序列是随机产生的移动序列,所述的特定移动序列的移动能够使目标函数值减小。

所述的单元模块的移动或交换都需要保证布局的合法性。

所述的对单目标的温度值进行固定比例的迭代调节的方法包含:

t(iter)=t(prev_iter)×scale(success_move_rate)

0.5<scale(success_move_rate)<1

其中,t是单目标温度;iter是当前迭代次数;prev_iter是上一轮迭代次数,如果本轮是第一次迭代,则t(prev_iter)是模拟退火的初始温度;scale是温度降低的比例函数;success_move_rate是单元模块移动的接受率,移动接受率=成功移动的次数/总移动次数。

所述的归一化系数是上一轮迭代的目标函数值。

所述的对经过迭代调节后的单目标温度值进行修正迭代计算的方法包含:

其中,是温度比例系数,current_total_cost是上一轮迭代的总目标函数值,previous_total_cost是本轮迭代的总目标函数值。

当迭代满足任意一个终止条件,则停止布局;

所述的终止条件包含:迭代次数大于设定阈值,或者迭代后目标函数总的改变量小于迭代前目标函数值的2%,或者温度值小于1e-5,或者成功移动的次数小于移动总次数的5%。

本发明在单目标优化的基础上,对多目标优化进行了归一化处理和比例系数调节,保证了优化结果的一致性和多目标优化的有效性,消除了传统模拟退火方法中降温策略的不合理对布局的质量和速度造成的影响,调节后的温度更利于布局质量和速度的提高。

附图说明

图1是本发明提供的一种fpga详细布局的模拟退火方法的流程图。

图2是单元模块的移动示意图。

图3是单元模块移动次数示意图。

具体实施方式

以下根据图1~图3,具体说明本发明的较佳实施例。

如图1所示,本发明提供一种fpga详细布局的模拟退火方法,包含以下步骤:

步骤s1、根据合法化布局后形成的初始布局计算模拟退火的初始温度;

所述的步骤s1中,计算模拟退火的初始温度的方法包含以下步骤:

步骤s1.1、选取多个单元模块进行移动或交换(如图2中黑色实线标示的单元模块移动或交换);

选取的单元模块的数量根据具体情况进行设定,比如:可以设定为所有单元模块数量的1.5倍;

选取的多个单元模块包含两个部分:一大部分是随机产生的移动序列,另外极小部分是根据目标函数产生的特定移动序列,这些特定移动序列的移动方向能够使目标函数值降低(比如所有连接的单元都在这个单元上方,就直接向上移动,其余三个方向就直接忽略掉);

每一步单元模块的移动都需要保证布局的合法性,包括单元模块的类型和与设备相关的一些硬性约束等等;

步骤s1.2、计算目标函数值total_cost;

total_cost=v1×优化目标1的目标函数值+v2×优化目标2的目标函数值+…+vn×优化目标n的目标函数值;

其中,v1~vn是每个优化目标的比重系数,v1+v2+…+vn=1;所述的优化目标为线长、时延、功耗和散热等等,优化目标是归一化之后的形式,保证多目标具有可比性;

针对单目标优化(只优化线长,或只优化时延),单目标的目标函数值简化为(以线长为例):

total_cost=bb_cost(1)

其中,bb_cost是线长的代价,线长的代价等于线网连接所有单元模块所在位置的外包络矩形的半周长;

针对双目标优化(同时优化线长和时延),双目标的目标函数值简化为:

其中,td_cost是时延的代价;pin是线网的引脚,num_pin是引脚的数目,weight(num_pins)是线长的权重,与pin引脚的num数目相关;delay是线网的驱动到各个被驱动点的时延;slack是线网时延的松弛度;require_time是线网最大允许的时延值;max_cirt是最大关键度;exponent是指数,可以根据情况选择,如2次方,3次方等;x_length是外包络矩形沿x轴方向的宽度;y_length是外包络矩形沿y轴方向的宽度;tradeoff是线长和时延的比重系数;prev_total_bb_cost是上一轮迭代的线长的目标函数值;prev_total_td_cost是上一轮迭代的时延的目标函数值;

步骤s1.3、计算每一个单元模块的移动对目标函数值的改变量;

目标函数值的改变量=移动后的目标函数值-移动前的目标函数值;

其中,无论移动或交换使目标函数值增大还是减小,都将该移动或交换作为成功移动;

步骤s1.4、计算所有改变量的均方差,将该均方差作为模拟退火的初始温度;

均方差越大,布局结果越差,布局状态越不稳定;

步骤s2、移动单元模块对当前布局进行优化以获得更优的布局;

所述的步骤s2中,优化布局的方法包含以下步骤:

步骤s2.1、选取多个单元模块进行移动或交换;

选取的单元模块的数量根据具体情况进行设定,比如:可以设定为所有单元模块数量的1.5倍;

选取的多个单元模块包含两个部分:一大部分是随机产生的移动序列,另外极小部分是根据目标函数产生的特定移动序列,这些特定移动序列的移动方向能够使目标函数值降低(比如所有连接的单元都在这个单元上方,就直接向上移动,其余三个方向就直接忽略掉);

每一步单元模块的移动都需要保证布局的合法性,包括单元模块的类型和与设备相关的一些硬性约束等等;

步骤s2.2、计算每一个单元模块的移动对目标函数值的改变量;

目标函数值的改变量=移动后的目标函数值-移动前的目标函数值;

步骤s2.3、判断目标函数值的改变量的数值,如果改变量的数值为负值(表示目标函数值减小了),则接受此次对单元模块的移动,如果改变量的数值为正值(表示目标函数值增大了),则进一步判断改变量的数值大小,如果改变量的数值小于移动后的目标函数值的1%,则接受此次对单元模块的移动,如果改变量的数值大于等于移动后的目标函数值的1%,则拒绝此次对单元模块的移动,将单元模块恢复到移动前的位置;

被接受的移动是成功移动,未被接受的移动是无效移动;

步骤s2.4、统计成功移动的次数及目标函数总的改变量;

所述的目标函数总的改变量等于所有单元模块的移动对目标函数值的改变量之和;

步骤s3、判断迭代是否满足终止条件,若满足,则停止布局,若不满足,则进行步骤s4;

所述的终止条件包含:迭代次数大于设定阈值(本实施例中可将迭代阈值设定为30次),或者迭代后目标函数总的改变量小于迭代前目标函数值的2%,或者温度值小于1e-5,或者成功移动的次数小于移动总次数的5%等等;

只要满足终止条件中的任意一个条件,就停止布局,如果终止条件中的所有条件都不满足,则进行步骤s4,继续进行迭代计算;

步骤s4、更新模拟退火的温度值,进行步骤s2;

所述的步骤s4中,更新模拟退火的温度值的方法具体包含以下步骤:

步骤s4.1、进行固定比例的温度调节,根据单元模块移动的接受率对单目标的温度值进行迭代计算:

t(iter)=t(prev_iter)×scale(success_move_rate)

0.5<scale(success_move_rate)<1

其中,t是单目标温度;iter是当前迭代次数;prev_iter是上一轮迭代次数,如果本轮是第一次迭代,则t(prev_iter)是模拟退火的初始温度;scale是温度降低的比例函数,可以根据实际情况调节比例函数的比例系数;success_move_rate是单元模块移动的接受率,移动接受率=成功移动的次数/总移动次数;

在高温阶段,单元模块成功移动的次数也高,但使目标函数值变小的移动次数相对较低,此时也应该保证高的降温比例,参见图3中高温部分;

在中温阶段,当温度降低到一定程度以后,单元模块移动的范围变小,成功移动的虽然次数减少,但此时使目标函数值减少的单元移动次数相对较高,故应该维持现有的状态一段时间,从而应保证低的降温比例,参见图3中温部分;

在低温阶段,当温度进一步降低时,单元模块移动的范围比较小,有效的单元模块移动进一步降低,从而使目标函数值减少的单元移动次数保持在较低的状态,此阶段应该适当加快降温,保证模拟退火快速收敛,参见图3中低温部分;

步骤s4.2、将上一轮迭代的目标函数值作为归一化系数,对多目标的目标值进行归一化;

当进行时延驱动等多目标优化过程中,由于多个目标函数的不一致性,如线网的时延减少线长可能变大,或者线长减少线网的时延不一定减少,并且多个目标的变化量不在同一量纲上,所以首先应归一化各个目标值,如线网的cost和时延的cost值,统一两个目标的量纲,保证结果的可比性和迭代步数之间结果的一致性;

步骤s4.3、以步骤s4.1得到的单目标温度为基础,采用温度比例系数对多目标的温度值进行修正的迭代计算:

其中,是温度比例系数,current_total_cost是上一轮迭代的总目标函数值,previous_total_cost是本轮迭代的总目标函数值;

在本发明的一个实施例中,以双目标为例,进行温度比例系数的推导:

对两个目标值进行归一化,将前一轮迭代的目标函数值作为归一化系数,计算本轮迭代的双目标的目标函数值;

其中,td_cost是时延的代价;pin是线网的引脚,num_pin是引脚的数目,weight(num_pins)是线长的权重,与pin引脚的num数目相关;delay是线网的驱动到各个被驱动点的时延;slack是线网时延的松弛度;require_time是线网最大允许的时延值;max_cirt是最大关键度;exponent是指数,x_length是外包络矩形沿x轴方向的宽度;y_length是外包络矩形沿y轴方向的宽度;tradeoff是线长和时延的比重系数;prev_total_bb_cost是上一轮迭代的线长的目标函数值;prev_total_td_cost是上一轮迭代的时延的目标函数值;

根据单目标温度计算双目标的温度迭代值;

由于多个目标函数的不一致性,如果直接将单目标的温度迭代方法应用到双目标的温度迭代方法中,会导致双目标优化结果与单目标优化结果不一致;

将单目标温度值乘上一个双目标比例系数,获得双目标的温度迭代值:

其中,bbn-2/bbn-1是双目标比例系数,bbn-2是上一轮迭代的总目标函数值,bbn-1是本轮迭代的总目标函数值,所述的双目标比例系数的推导方法包含:

给定初始布局,线长的代价都为bb_init,如公式(3)所示:线长驱动:total_cost=bb_init

时延驱动:total_cost=bb_init/bb_init=1.0

(3)

获取初始温度的过程中,每个单元模块的移动被接受的概率如公式(4)所示:

线长驱动:

时延驱动:

bb_driven:δbb=δbb0,t=t0,δbb/t=δbb0/t0

td_driven:δbb=δbb0/bb_init,t=t0/bb_init,δbb/t=δbb0/t0

线长驱动和时延驱动获得相同的接受概率,故此步布局结果仍然保持一致;

第一轮布局优化中,单元模块移动的接受概率如公式(5)所示:

线长驱动:

时延驱动:

时延驱动多出一项比例系数bb0/bb_init,故导致线长驱动和时延驱动单元移动的接受率不一样,从而导致结果产生差异;

第二轮布局优化中,单元模块移动的接受概率如公式(6)所示:

线长驱动:

时延驱动:

时延驱动多出一项比例系数bb1/bb_init,故导致线长驱动和时延驱动单元移动的接受率不一样,从而导致结果产生差异;

第n轮布局优化中,以此类推,此时时延驱动多出比例系数bbn-1/bb_init,虽说这个比例由于布局结果的优化而逐渐减少,但总会使两种优化的单元移动接受率不一样,导致布局结果差异;

故为了保持目标优化降温策略的有效性,在时延驱动布局的降温策略中,要对温度或者线长的变化量的计算方式有所改变,为了使其很容易的扩展到多目标,对温度的调节使其更加容易,从而在时延驱动每步温度降低一定比例之后,再乘以一个比例系数bbn-2/bbn-1,从而每轮迭代温度调节之后,当tradeoff=0时,时延驱动布局结果与线长驱动布局结果一样。

本发明在单目标优化的基础上,对多目标优化进行了归一化处理和比例系数调节,保证了优化结果的一致性和多目标优化的有效性,消除了传统模拟退火方法中降温策略的不合理对布局的质量和速度造成的影响,调节后的温度更利于布局质量和速度的提高。本发明不仅可以应用在双目标优化的时延驱动布局中,很容易的扩展到多目标(如功耗和散热等等)的优化过程当中。

尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1