一种快速FPGA布线方法技术

技术编号:15355672 阅读:172 留言:0更新日期:2017-05-17 13:59
本发明专利技术公开了一种快速FPGA布线方法,该方法采用新的重布线策略和波前扩展方法。该FPGA布线方法迭代地对所有线网进行布线直到找到一个合法的布线结果或者达到最大迭代次数。在每次布线迭代过程中,新的重布线策略只对非法的路径进行重布,保留合法的路径,从而减少每次布线迭代的时间。在对每一个线网漏端点进行布线时,布线树上距离目标漏端点t相对较远的节点出现在连接t的最优路径上的概率较低,因此在对波前进行初始化时只使用距离t相对较近的布线树节点,当布线树较大时,可以显著减少波前初始化的时间。本发明专利技术在保持关键路径延时和线长均有优化的前提下,明显减少了布线运行时间。

【技术实现步骤摘要】

本专利技术涉及计算机
,尤其涉及一种快速FPGA布线方法
技术介绍
近年来,随着集成电路技术的飞速发展,现场可编程门阵列(FPGA),因其有集成度高、逻辑资源丰富、设计灵活以及可重构性等特点,在航天领域和国防领域应用非常广泛,每年我国需要从国外进口大量FPGA芯片以及配套软件,而国内FPGA产业有待发展,制约国内FPGA产业发展的因素,主要是缺乏自主研发的高性能高质量的FPGA设计软件。FPGA的设计流程,主要包括设计输入、行为综合、工艺映射、打包、布局和布线。其中,布线是极为重要的一个环节,它直接影响到整个电路的质量和性能。FPGA的布线就是在布局的基础上将布线资源合理的分配给电路中的线网,通过对布线资源进行编程从而连通所有线网的起点和终点,并保证芯片中的资源没有被重用。在布线之前首先要为FPGA芯片建立有向的布线资源图G<V,E>,其中V是节点的集合,金属连线、输入/输出引脚和逻辑单元引脚等资源;E是边的集合,表示用来连接这些资源的可编程开关盒。一个布线资源图可以用来表示任意的布线结构,从而布线器可以独立于实际的FPGA芯片进行布线。因此,FPGA布线实际上是在布线资源图中搜索可行路径的过程。布线需要解决两个问题:(1)布通电路中所有的线网。当FPGA的布线资源较少时,在布线过程中可能存在资源冲突从而导致布线不合法。因此布线需要合理分配布线资源,解决线网之间的拥塞问题,布通电路中所有的线网。(2)优化电路质量。电路的时序性能是由关键路径延时决定的,所以要求布线后的关键路径延时尽量小。因此,布线问题也是一个多目标优化问题,布线算法需要同时解决两个相互影响和相互竞争的子问题。目前学术界和工业界对FPGA布线问题通常使用的是基于拥挤协商PathFinder算法的布线方法。该方法迭代地为所有线网进行拆线-重布直到没有拥挤或者达到最大迭代次数。在每一次迭代过程中,拆除上次布线迭代的结果并调用波前扩展对每个线网的所有漏端进行布线,其中允许多个线网使用相同的布线资源;在所有的线网完成重布后,更新所有的布线资源的花费,并对被多个线网同时占用的布线资源进行惩罚,从而在下一次布线迭代时以较小的概率使用该资源。其中,波前扩展是基于拥挤协商PathFinder算法的核心,同时需要很大的计算量,并且波前扩展占了布线过程的很大一部分时间。如前面提到的,FPGA布线算法以布线资源图为基础对线网进行布线。当对线网的漏端点进行布线时,首先将该线网当前布线树上所有的节点添加到波前,然后从优先队列中选择花费cost最小的节点v出队,如果v是漏断节点则波前扩展结束。否则计算v的邻居节点的花费cost并加入到波前。其中cost包含两部分:pathcost和expectedcost,两部分通过权值α实现A*算法。pathcost表示从源节点到当前节点的花费,而expectedcost表示从当前节点到漏端节点的预期花费。波前扩展直到从源节点到漏断节点的路径找到时才结束。由于该方法在每次迭代中,根据重布线策略需要对每个线网所有的漏端点进行重布;另外,在波前初始化时,需要将当前布线树上所有节点添加到波前,因而这会耗费大量的CPU时间。
技术实现思路
本专利技术为克服上述传统PathFinder布线算法在FPGA布线应用中CPU消耗时间较长的缺陷,通过对重布线策略和波前扩展进行改进,并解决布线质量和耗时相互制约的问题,提出一种快速FPGA布线方法,在不降低布线结果质量的情况下减少FPGA布线的时间。为实现上述目的,本专利技术提供了一种快速FPGA布线方法,其特征在于,该快速FPGA布线方法包括以下步骤:第一步,电路网表中每一个线网由一个源端source和多个漏端sink构成,首先为线网的每一对source和sink分配一个边界盒sink-box,每一个sink-box大小设置为对应的source和sink的边界盒往外扩展一个单位;第二步,初始化布线,对每一个线网的每一个漏端t,调用布线器在布线资源图上为目标漏端t寻找成本最低的一条路径;第三步,定义一个整型变量i作为线网集合N的索引,将i初始化为0,将集合SinkSet置空,从线网集合N取第1个线网N[i];第四步,检查上次迭代的线网N[i]建立的布线树RT,拆除RT上非法的路径,将这些路径上的布线资源节点的占有度减1并将对应的漏端sink添加到集合SinkSet中;第五步,对当前布线树RT重新进行时序分析,布线树根节点root的延时Tdel(root)定义为:Tdel(root)=0.5*rootC*rootR其中,rootC表示根节点root的电容,rootR表示根节点root的电阻,对于RT上的每一个节点n,该节点n的延时Tdel(n)定义为:Tdel(n)=Tdel(npre)+sT+sC*sR+0.5*nC*nR其中,npre表示节点n的前驱节点,Tdel(npre)表示npre的延时,s表示连接节点npre和n的开关,sT、sC和sR分别表示s的固有延时、电容和电阻,nC和nR分别表示节点n的电容和电阻;第六步,对SinkSet中的每一个漏端,调用布线器在布线资源图上为目标漏端t寻找成本最低的一条路径;第七步,将变量i加1,从线网集合N取第i个线网N[i],如果N[i]为空,即不存在N[i],执行第八步,否则转到第四步继续执行;第八步,检查布线结果是否存在拥挤,如果存在拥挤,则更新所有布线资源的拥挤度,转第三步继续执行;如果不存在拥挤,则布线成功,算法结束;如果布线资源图上存在节点v,其中v的occupancy的值大于capacity值,则节点v存在拥挤且布线结果不合法,v的occupancy表示节点v被使用的次数,capacity表示节点v的容量;在更新布线资源拥挤度时,节点v的当前拥挤度为:PresentCost(v)=1+pres_fac*(1+occupancy-capacity)其中pres_fac表示当前拥挤惩罚因子,如果节点v存在拥挤,则v的历史拥挤度为:HistoryCost(v)+=hist_fac*(occupancy-capacity)其中hist_fac表示历史拥挤惩罚因子。进一步地,在第二步和第六步中,调用布线器在布线资源图上为目标漏端t寻找成本最低的一条路径的具体方法为:步骤一,用当前布线树对波前进行初始化,对于布线树上的节点n,如果n在sink对应的边界盒sink-box内,则计算从线网源点source到n的路径成本Bcost(n)以及source到目标漏端点t的路径成本Tcost(n),将节点n加入到波前;如果n不在sink-box范围内,则不将其加入到波前,Bcost(n)和Tcost(n)定义为:Bcost(n)=critt*Tdel(n)Tcost(n)=Bcost(n)+α*estn,t其中critt表示目标端点t的关键度,Tdel(n)表示节点n的延时,estn,t表示从节点n到t的路径估计成本,参数α用来平衡路径估计成本在总路径成本中的影响;步骤二,从波前中选出成本最小的节点vmin,如果vmin是目标漏端点t,转步骤四;步骤三,对于vmin的邻居节点v,计算从线网源点source到v的路径成本Bcost(v)以及sour本文档来自技高网
...
一种快速FPGA布线方法

【技术保护点】
一种快速FPGA布线方法,其特征在于,该快速FPGA布线方法包括以下步骤:第一步,电路网表中每一个线网由一个源端source和多个漏端sink构成,首先为线网的每一对source和sink分配一个边界盒sink‑box,每一个sink‑box大小设置为对应的source和sink的边界盒往外扩展一个单位;第二步,初始化布线,对每一个线网的每一个漏端t,调用布线器在布线资源图上为目标漏端t寻找成本最低的一条路径;第三步,定义一个整型变量i作为线网集合N的索引,将i初始化为0,将集合SinkSet置空,从线网集合N取第1个线网N[i];第四步,检查上次迭代的线网N[i]建立的布线树RT,拆除RT上非法的路径,将这些路径上的布线资源节点的占有度减1并将对应的漏端sink添加到集合SinkSet中;第五步,对当前布线树RT重新进行时序分析,布线树根节点root的延时Tdel(root)定义为:Tdel(root)=0.5*rootC*rootR其中,rootC表示根节点root的电容,rootR表示根节点root的电阻,对于RT上的每一个节点n,该节点n的延时Tdel(n)定义为:Tdel(n)=Tdel(npre)+sT+sC*sR+0.5*nC*nR其中,npre表示节点n的前驱节点,Tdel(npre)表示npre的延时,s表示连接节点npre和n的开关,sT、sC和sR分别表示s的固有延时、电容和电阻,nC和nR分别表示节点n的电容和电阻;第六步,对SinkSet中的每一个漏端,调用布线器在布线资源图上为目标漏端t寻找成本最低的一条路径;第七步,将变量i加1,从线网集合N取第i个线网N[i],如果N[i]为空,即不存在N[i],执行第八步,否则转到第四步继续执行;第八步,检查布线结果是否存在拥挤,如果存在拥挤,则更新所有布线资源的拥挤度,转第三步继续执行;如果不存在拥挤,则布线成功,算法结束;如果布线资源图上存在节点v,其中v的occupancy的值大于capacity值,则节点v存在拥挤且布线结果不合法,v的occupancy表示节点v被使用的次数,capacity表示节点v的容量;在更新布线资源拥挤度时,节点v的当前拥挤度为:PresentCost(v)=1+pres_fac*(1+occupancy‑capacity)其中pres_fac表示当前拥挤惩罚因子,如果节点v存在拥挤,则v的历史拥挤度为:HistoryCost(v)+=hist_fac*(occupancy‑capacity)其中hist_fac表示历史拥挤惩罚因子。...

【技术特征摘要】
1.一种快速FPGA布线方法,其特征在于,该快速FPGA布线方法包括以下步骤:第一步,电路网表中每一个线网由一个源端source和多个漏端sink构成,首先为线网的每一对source和sink分配一个边界盒sink-box,每一个sink-box大小设置为对应的source和sink的边界盒往外扩展一个单位;第二步,初始化布线,对每一个线网的每一个漏端t,调用布线器在布线资源图上为目标漏端t寻找成本最低的一条路径;第三步,定义一个整型变量i作为线网集合N的索引,将i初始化为0,将集合SinkSet置空,从线网集合N取第1个线网N[i];第四步,检查上次迭代的线网N[i]建立的布线树RT,拆除RT上非法的路径,将这些路径上的布线资源节点的占有度减1并将对应的漏端sink添加到集合SinkSet中;第五步,对当前布线树RT重新进行时序分析,布线树根节点root的延时Tdel(root)定义为:Tdel(root)=0.5*rootC*rootR其中,rootC表示根节点root的电容,rootR表示根节点root的电阻,对于RT上的每一个节点n,该节点n的延时Tdel(n)定义为:Tdel(n)=Tdel(npre)+sT+sC*sR+0.5*nC*nR其中,npre表示节点n的前驱节点,Tdel(npre)表示npre的延时,s表示连接节点npre和n的开关,sT、sC和sR分别表示s的固有延时、电容和电阻,nC和nR分别表示节点n的电容和电阻;第六步,对SinkSet中的每一个漏端,调用布线器在布线资源图上为目标漏端t寻找成本最低的一条路径;第七步,将变量i加1,从线网集合N取第i个线网N[i],如果N[i]为空,即不存在N[i],执行第八步,否则转到第四步继续执行;第八步,检查布线结果是否存在拥挤,如果存在拥挤,则更新所有布线资源的拥挤度,转第三步继续执行;如果不存在拥挤,则布线成功,算法结束;如果布线资源图上存在节点v,其中v的occupancy的值大于capacity值,则节点v存在拥挤且布线结果不合法,v的occupancy表示节点v被使用的次数,capacity表示节点v的容量;在更新布线资源拥挤度时,节点v的当前拥挤度为:PresentCost(v)=1+pres_fac*(1+occupancy-capacity)其中pres_fac表示当前拥挤惩罚因子,如果节点v存在拥挤,则v的历史拥挤度为:HistoryCost(v)+=hist_fac*(occupancy-capacity)其中hist_fac表示历史拥挤惩罚因子。2.如权利要求1所述的快速FPGA布线方法,其特征在于,在第二步和第六步中,调用布线器在布线资源图上为目标漏端t寻找成本最低的一条路径的具体方法为:步骤一,用当前布线树对波前进行初始化,对于布线树上的节点n,如果n在sink对应的边界盒si...

【专利技术属性】
技术研发人员:段振华王德奎田聪黄伯虎张南王小兵
申请(专利权)人:西安电子科技大学
类型:发明
国别省市:陕西;61

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1