首页> 中国专利> 一种实现现场可编程门阵列快速布局布线的方法

一种实现现场可编程门阵列快速布局布线的方法

摘要

本发明公开了一种实现现场可编程门阵列快速布局布线的方法,将退火函数应用于现场可编程门阵列FPGA布局的温度更新;采用了重复退火过程,得到每一次退火过程所能找到的最好解current_best,然后进行下一次退火过程;采用了考虑负载平衡的初始化布线方法,假设P为处理器个数,则创建P个线程,并将芯片分为P个区域,将信号分区域地划分到每个线程的任务集;采用了多线程并行执行布线迭代,P个线程根据并行化的A*寻址算法并发地为各自任务集中每个信号寻找当前最合适的路径进行布线;采用重布线拥挤信号的方法,完成一次布线迭代。本发明实现了对布线过程的加速,使得最终电路的延时和线长两个重要性能指标基本不变的情况下,布局布线速度有了显著加快。

著录项

  • 公开/公告号CN103886137A

    专利类型发明专利

  • 公开/公告日2014-06-25

    原文格式PDF

  • 申请/专利权人 西安电子科技大学;

    申请/专利号CN201410074915.7

  • 申请日2014-03-03

  • 分类号G06F17/50(20060101);

  • 代理机构北京科亿知识产权代理事务所(普通合伙);

  • 代理人汤东凤

  • 地址 710071 陕西省西安市太白南路2号西安电子科技大学

  • 入库时间 2024-02-20 00:15:49

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-02-08

    授权

    授权

  • 2014-07-16

    实质审查的生效 IPC(主分类):G06F17/50 申请日:20140303

    实质审查的生效

  • 2014-06-25

    公开

    公开

说明书

技术领域

本发明属于计算机技术领域,尤其涉及一种实现现场可编程门阵列快速布 局布线的方法。

背景技术

近年来,随着集成电路技术的飞速发展,现场可编程门阵列(FPGA), 因其有集成度高、逻辑资源丰富、设计灵活以及可重构性等特点,在航天领域 和国防领域应用非常广泛,每年我国需要从国外进口大量现场可编程门阵列 (FPGA)芯片以及配套软件,而国内现场可编程门阵列(FPGA)产业有待发 展,制约国内现场可编程门阵列(FPGA)产业发展的因素,主要是缺乏自主研 发的高性能高质量的现场可编程门阵列(FPGA)设计软件。

现场可编程门阵列(FPGA)的设计流程,主要包括设计输入、行为综合、 逻辑综合、工艺映射、单元划分和逻辑单元装箱、布局和布线。其中,布局和 布线是极为重要的环节,它直接耗费了现场可编程门阵列(FPGA)设计流程中 绝大部分CPU时间,并且影响到整个电路的性能。

现场可编程门阵列(FPGA)的布局,就是基于一定的优化条件和约束准 则将经过逻辑单元装箱后的电路网表文件描述的可配置逻辑单元CLB、I/O单 元、异构模块等单元映射到现场可编程门阵列(FPGA)芯片内部物理位置的过 程。现场可编程门阵列(FPGA)的布局问题可以描述为将M个模块放置到N 个位置上,设X为当前的布局状态,成本函数Cost(X)表示每一种布局状态X 的总成本,总成本越小的布局,其质量越好。现场可编程门阵列(FPGA)的布 局问题的解空间非常巨大,用常规的穷举法在有限的时间内难以找到最优解, 是一个NP难问题。现场可编程门阵列(FPGA)布局的成本函数Cost(X)的三 个主要的优化目标是:平衡现场可编程门阵列(FPGA)中布线密度,确保在任 意位置布线都有充足的布线资源;最小化关键路径延时,以提高电路速度;布 局尽量紧密,以减少所需的布线资源。这三个目标并不是相互独立的,而是互 相制约的,通常不能使每个目标都达到最优化,因此在优化过程中要对三个目 标取折中,以取得总体最优的结果。目前学术界和工业界对现场可编程门阵列 (FPGA)布局问题通常使用的是基于传统模拟退火算法的布局方法。

现场可编程门阵列(FPGA)的布线,就是为了按照电路的连接情况成功 地连接现场可编程门阵列(FPGA)芯片中对应的逻辑单元,使这些连线与电路 中的连线相对应,并保证在芯片中的资源没有被重用。现场可编程门阵列 (FPGA)的布线问题可以简单地表述为将现场可编程门阵列(FPGA)的布线 资源及其连接关系转换为布线资源图来描述,假设其为有向图G=(V,E),其中 V就是布线资源图中的节点,E表示连接节点之间的开关;设一个电路由许多 条信号组成,其中Ni表示第i条电路信号,Ni是信号源端节点Si和漏端节点Ti,j的集合,所以Ni是V的一个子集;因此布线问题就是要在有向图G中寻找连 接所有Ni的轨迹,而且要保证所有轨迹不冲突。解决现场可编程门阵列(FPGA) 的布线问题要平衡两个互相竞争的优化目标:消除拥挤与最小化关键路径延。 目前学术界和工业界对现场可编程门阵列(FPGA)布线问题通常使用的是基于 拥挤协商PathFinder算法的布线方法。

现有的解决现场可编程门阵列(FPGA)的布局问题的方法为,首先把可 配置逻辑单元CLB、I/O单元、异构模块等逻辑单元随机地分配到FPGA各个 位置上从而得到一个初始布局。随后,随机地选取一个逻辑单元,然后随机在 Rlimit限定的范围内给它分配一个新的位置,计算由移动该逻辑单元到新位置所 造成的成本函数差值。如果成本函数值减少,则接受逻辑单元的移动。如果成 本函数值增大,虽然移动使得布局变更差,但是仍然存在接受的可能,产生随 机数r,如果小于由Metropolis准则的接受概率exp(-ΔC/T)则接受逻辑单元的 移动,其中ΔC是移动造成的成本函数的变化,否则拒绝。布局时成本函数Cost() 关系到布局的优化方向,在现有的布局方法中成本函数的计算包括线长成本和 时序成本:线长成本是整个电路中每个信号布线线长估计值的和,最小化线长 成本关系到最小化布线资源的消耗并平衡布线密度以保证布线成功;时序成本 是布局时所有布线路径的延时之和,最小化时序成本关系到最小化关键路径延 时。同时成本函数Cost()还要通过权重参数正确地平衡最小化线长和最小化关 键路径延时之间关系。Metropolis准则中的温度参数T,用于控制接受导致布局 变差移动的可能性。一开始,T是非常高的,几乎所有的移动都被接受;随着 布局优化,它的值逐渐减少,这样接受使布局变差的移动的概率是非常低的。 接受一个使布局变差的移动带来的爬坡能力,使得模拟退火避免收敛到成本函 数上的局部最优解。温度下降的速度、在每个温度下试图移动的次数和产生可 能移动的方法、终止退火的退出标准是由退火表所决定。这种方法由于在每个 温度T下必须做足够多的移动才能达到热力学平衡,同时为了取得接近最优的 布局结果,温度T下降非常缓慢,所以会花费非常多的CPU时间。

现有的解决现场可编程门阵列(FPGA)的布线问题的方法为,一种基于 拥挤协商PathFinder算法的迭代式布线方法,该方法使用了一种尝试平衡竞争 目标:消除拥挤与最小化关键路径延时的迭代方法,该迭代方法采用多次布线 迭代来完成,允许信号初步占用布线资源,但随后必须与其他信号协商并决定 哪个信号最需要该布线资源。在每次迭代中都要进行一次时序分析以维持对那 些可能十分关键的信号持续施加影响。在协商中通过让越是关键的信号越具有 更优先的次序,最终将关键路径延时最小化。在每次迭代过程中,每条信号被 拆线并按照预定的顺序布线。在布线资源图中的每一布线资源节点i的成本, 表示节点i被信号占用次数,用以反映每个信号布线后以及一次完整布线迭代 之后的拥挤状况。成本的更新迫使信号布线从器件的拥挤区域迁移至较离散分 布的区域,为当前正处于拥挤区域的其他需求更大的信号腾出空间。由于该方 法在每次布线迭代中,既要考虑最小化成本,即关键路径延时,又要排除布线 资源重用导致的拥挤,使迭代过程必须持续进行直到没有布线资源重用为止, 因而这会耗费大量的CPU时间。

发明内容

本发明实施例的目的在于提供一种实现现场可编程门阵列快速布局布线的 方法,旨在解决现有的现场可编程门阵列布局、布线过程中CPU消耗时间长、 效率低的问题。

本发明实施例是这样实现的,一种实现现场可编程门阵列快速布局布线的 方法,该实现现场可编程门阵列快速布局布线的方法包括以下步骤:

第一步,初始布局,将经过逻辑单元装箱后的电路表示成一个有向图,该 有向图的节点表示一个可配置逻辑单元CLB、I/O单元、异构模块等单元,有 向图的边表示可配置逻辑单元CLB、I/O单元、异构模块等单元之间的连接; 将电路中每一个可配置逻辑单元CLB、I/O单元、异构模块等单元随机地放置 到现场可编程门阵列(FPGA)芯片内部物理位置,得到一个初始布局,设初始 布局为当前布局;

第二步,计算初始温度T0,具体方法为:

步骤一,在当前布局上,通过随机地选择一对可配置逻辑单元CLB、I/O 单元、异构模块等单元交换位置,或者选择一个可配置逻辑单元CLB、I/O单 元、异构模块等单元与一个空白位置进行交换,得到一个新的布局;

步骤二,计算新布局的花费Cost:

Cost=Cost+λ×tc-tctc+(1-λ)×bc-bcbc;

其中Cost'表示当前布局花费,初始布局时Cost'=1.0,tc、tc'、bc、bc'均为 实数,tc和bc分别表示新布局的时序量和拥挤量,tc'和bc'分别表示当前布局的 时序量和拥挤量,λ表示时序量的权重,1-λ表示拥挤量的权重,λ=0.5;

步骤三,用Metropolis准则判断是否接受新布局:设ΔC为新布局的花费 Cost减去当前布局的花费Cost',如果ΔC<0,则接受新布局为当前布局,否则, 设u为区间[0,1]内的一个随机数,如果u<exp(-ΔC/1030),则接受新布局为当前 布局;

步骤四,对步骤一至三过程进行N次迭代,N是电路中可配置逻辑单元 CLB、I/O单元、异构模块等单元的个数,设N次迭代中接受了K次新布局, 该K次新布局的花费分别为Cost1,Cost2,……,CostK

步骤五,计算K次新布局的花费Cost1,Cost2,……,CostK的均方差D:

D=(Σi=1KCosti2-K×avg2)/(K-1);

其中i取值从1到K,avg为K次新布局的花费Cost1,Cost2,……,CostK的 平均值:

第三步,布局迭代,具体步骤为:

步骤一,执行第二步的步骤一至二过程,得到一个新布局,并得到新布局 的花费Cost;

步骤二,根据当前温度T,用新布局的花费Cost与当前布局的花费Cost'之 差ΔC判断是否接受新布局:若ΔC<0,则接受新布局为当前布局,否则,设u 为区间[0,1]内的一个随机数,如果u<exp(-ΔC/T),则接受新布局为当前布局;

步骤三,用VFSR退火函数更新当前温度T:

T=T0exp(-ck),

k为接受新布局的总次数,c为实数常量,c=-log(TRS)×exp(-log(TAS)); TRS为退火尺度系数,TRS=10-9,TAS为最大退火迭代次数,TAS计算方法为:

TAS=log0.8(0.05×H/T0)×M,

其中H为电路中的信号个数,M为马可夫链长度,M=10·N1.33

步骤四,对步骤一至三过程进行M次迭代;

步骤五,如果T<0.05×Cost/H,则执行步骤四,否则转步骤一继续执行;

第四步,局部优化布局,具体方法为:

步骤一,令当前温度T=0,对第三步的步骤一至步骤二过程进行M次迭代, 由于当前温度T为0的情况下,只接受结果比当前布局好的新布局,所以进行 M次迭代之后会找到局部最优布局;

步骤二,如果步骤一获得的局部最优布局的结果好于当前最优布局,则替 换当前最优布局为该局部最优布局,当前最优布局为到目前为止找到的结果最 好的布局;

第五步,如果累计第三步中对步骤一至步骤三过程迭代总次数超过TAS, 则输出当前最优布局并转第六步进行布线;否则令当前温度T为前一次执行第 三步过程中新布局的接受率第一次低于44%时的温度,转第三步开始重复退火;

第六步,布线初始化,具体方法为:

步骤一,将经过布局的电路中H个信号表示成H个有向图,每个有向图包 含一个源节点src和多个目标节点sink,由于布局之后电路中所有可配置逻辑单 元CLB、I/O单元、异构模块等单元都被放置并固定在物理单元上,所以源节 点src和目标节点sink表示连接到物理单元的引脚,有向图的边表示待布线的 线路;

步骤二,将现场可编程门阵列芯片逻辑结构和内部布线资源抽象成一个布 线资源图RG,RG是一个无向图,该无向图的节点表示现场可编程门阵列芯片 上的布线轨道,该无向图的边表示现场可编程门阵列芯片上的开关和引脚;

第七步,为每个线程划分任务集,假设处理器个数为P,则创建P个线程, 并且为每个线程Thd[i]创建任务集SigSet[i],i∈{1,2,…,P};将布线资源图RG划 分为P个大小相等的不交叉区域,对于每个信号,如果其落入区域i的目标节 点sink个数越多,就将其分给区域i对应的任务集SigSet[i],i∈{1,2,…,P},并尽 量保证每个任务集内的sink总数一样多;

第八步,对每个线程任务集SigSet[i]中所有信号按照sink个数从多到少排 列;

第九步,启动P个线程,P个线程并行执行第十步;

第十步,并行布线迭代,具体方法为:

步骤一,线程Thd[i]按序从任务集SigSet[i]中取一个信号j进行拆线,即如 果信号j已布线,则清空信号j在布线资源图RG上的布线路径,并对信号j的 布线路径经历的布线资源节点的占有度减1,P个线程互斥执行此步骤, i∈{1,2,…,P};

步骤二,将信号j的源节点src加入到布线树RT[j],布线树RT[j]用来以树 形结构保存信号j的源节点src到多个目标节点sink的布线路径;

步骤三,对信号j的每一个目标节点sink用A*寻路算法在布线资源图RG 上寻找一条从布线树RT[j]中节点到该目标节点sink的花费最低的路径进行布 线,并保存布线路径:

清空优先队列PQ,并将布线树RT[j]中每个布线资源节点x的路径成本 PathCost(x)置为0,加入到优先队列PQ中,优先队列PQ用来按总成本 TotalCost(x)从小到大排序来存储当前搜索到的布线资源节点,TotalCost(x)定义 为:

TotalCost(x)=PathCost(x)+α·ExpectedCost(x,sink),

其中ExpectedCost(x,sink)代表从当前布线资源节点x到目标端点sink的期 望成本估计值,α为启发式参数,α取值范围为1.0至1.4,路径成本PathCost(x) 表示从源节点src到当前搜索到的节点x的路径上的每一个布线资源节点n的 布线成本Cost(n)之和,Cost(n)表示布线资源节点n的布线成本:

Cost(n)=Crit(src,sink)×delay(n)+[1-Crit(src,sink)]×b(n)×p(n)×h(n),

其中Crit(src,sink)表示时序分析后信号j从源节点src到目标节点sink的边 的关键度,delay(n)表示节点n的时序项,b(n)表示节点n的基本花费,p(n)表 示节点n当前占有度,h(n)表示节点n的历史占有度;

取信号j尚未布线的目标节点中关键度Crit(src,sink)最大的目标节点sink, 如果目标节点sink是优先队列PQ中第一个节点,则表示源节点src到目标节 点sink的最佳路径已找到,否则转从优先级队列PQ中取出队首布线资源节点 y,对与y相连的布线资源节点z计算总成本TotalCost(z),并将z按TotalCost(z) 加入到优先级队列PQ中,重复执行直到找到目标节点sink的路径;

步骤四,对该路径经历的布线资源节点的占有度加1,P个线程互斥执行 此步骤;

步骤五,将该路径加入到布线树RT[j],如果信号j还有目标节点sink,则 转步骤步骤三,对信号j下一个目标节点sink寻路,否则,执行步骤六;

步骤六,如果任务集SigSet[i]中所有信号都完成了步骤一至步骤五过程, 则转第十一步,否则,继续布线下一个信号;

第十一步,同步P个线程,即等待每个线程都执行完第十步;由主线程检 查整个电路的布线是否合法,如果布线合法,即没有重复被占用的布线资源节 点,则转第十四步;否则,对所有重复被占用的布线资源节点的历史占用度加 1,并且加大拥挤惩罚度,进行时序分析,转第十二步;

第十二步,主线程重新布线拥挤的信号:

步骤一,统计拥挤布线资源节点个数占所有布线资源节点个数的比例,如 果这个比例低于一定值,则执行步骤二;否则如果布线迭代次数不超过指定值 Max,则进行时序分析并转第十步执行下一次布线迭代,否则转第十四步;

步骤二,统计所有拥挤的信号,拥挤的信号即为布线后包含了拥挤布线资 源节点的信号,保存原来的拥挤惩罚,并将拥挤惩罚度设成一个很大的数,主 线程串行布线这些拥挤的信号;

步骤三,恢复拥挤惩罚度为原来的值;

第十三步,检查整个电路的布线是否合法,如果布线合法,则转第十四步; 否则如果布线迭代次数不超过指定值Max,则进行时序分析并转第十步执行下 一次布线迭代,否则转第十四步;

第十四步,将其余P-1个线程合并到主线程,输出布线结果并退出布线。

本发明提供的实现现场可编程门阵列快速布局布线的方法,将应用于传统 集成电路布局的超快速模拟重复退火VFSR算法的退火函数应用于现场可编程 门阵列FPGA布局的温度更新,采用了重复退火过程以反复寻找更好的解,实 现了对布局过程的加速;采用多线程方法对现有的基于拥挤协商PathFinder算 法的布线方法进行并行化改进,并采用了重布线拥挤信号的方法缩短了布线的 收敛过程,实现了对布线过程的加速。本发明提供的实现现场可编程门阵列快 速布局布线的方法使得最终电路的时延和线长两个重要性能指标基本不变的情 况下,布局布线速度有了显著加快。本发明方法简单,操作方便,较好的解决 了现有的现场可编程门阵列布局、布线过程中CPU消耗时间长,效率低的问题。

附图说明

图1是本发明实施例提供的实现现场可编程门阵列快速布局布线的方法流 程图;

图2是本发明实施例提供的将超快速模拟重复退火算法VFSR应用到现场 可编程门阵列布局上的实现流程图;

图3是本发明实施例提供的采用多线程的PathFinder算法应用到现场可编 程门阵列布线上的实现流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例, 对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以 解释本发明,并不用于限定本发明。

下面结合附图及具体实施例对本发明的应用原理作进一步描述。

如图1所示,本发明实施例的实现现场可编程门阵列快速布局布线的方法 包括以下步骤:

S101:布局初始化,得到初始布局并确定退火初始温度;

S102:布局迭代,每次迭代对当前布局做一个随机扰动,用Metropolis准 则判断是否接受新布局,将应用于传统集成电路布局的超快速模拟重复退火 VFSR算法的退火函数应用于现场可编程门阵列FPGA布局的温度更新;如果 到达退出条件,则结束退火并进行局部优化布局,否则转入下一次布局迭代; 采用了重复退火过程,得到每一次退火过程所能找到的最好解,然后将温度从 冰点温度恢复到接受率为44%时的温度,进行下一次退火过程,如果碰到了比 更好的解,便用该解替换;

S103:初始化布线,采用了考虑负载平衡的初始化布线方法,假设P为处 理器个数,则创建P个线程,并将芯片分为P个区域,将信号分区域地划分到 每个线程的任务集;

S104:布线迭代,采用了多线程并行执行布线迭代,P个线程根据并行化 的A*寻址算法并发地为各自任务集中每个信号寻找当前最合适的路径进行布 线;采用了重布线拥挤信号的方法,完成一次布线迭代后,如果存在拥挤并且 拥挤布线资源节点比例少,则主线程重布线拥挤的信号;如果不存在拥挤,则 布线成功,否则转入下一次布线迭代。

本发明的具体步骤为:

(1)初始布局:

(1a)将经过逻辑单元装箱后的电路表示成一个有向图,该有向图的节点 表示一个可配置逻辑单元CLB、I/O单元、异构模块等单元,有向图的边表示 可配置逻辑单元CLB、I/O单元、异构模块等单元之间的连接;

(1b)用现场可编程门阵列(FPGA)芯片表示成平面坐标系,该平面坐 标系上每一个坐标位置(x,y)代表现场可编程门阵列(FPGA)芯片对应位置上的 一个物理单元,将电路中每一个可配置逻辑单元CLB、I/O单元、异构模块等 单元随机地放置到现场可编程门阵列(FPGA)芯片内部物理位置,得到一个初 始布局,设初始布局为当前布局;

(2)计算初始温度T0

(2a)在当前布局上,通过随机地选择一对可配置逻辑单元CLB、I/O单 元、异构模块等单元交换位置,或者选择一个可配置逻辑单元CLB、I/O单元、 异构模块等单元与一个空白位置进行交换,得到一个新的布局;

(2b)计算新布局的花费Cost:

实数,tc和bc分别表示新布局的时序量和拥挤量,tc'和bc'分别表示当前布局的 时序量和拥挤量,λ表示时序量的权重,1-λ表示拥挤量的权重,λ=0.5;

(2c)用Metropolis准则判断是否接受新布局:设ΔC为新布局的花费Cost 减去当前布局的花费Cost',如果ΔC<0,则接受新布局为当前布局,否则,设u 为区间[0,1]内的一个随机数,如果u<exp(-ΔC/1030),则接受新布局为当前布局;

(2d)对步骤(2a)至(2c)过程进行N次迭代,N是电路中可配置逻辑 单元CLB、I/O单元、异构模块等单元的个数,设N次迭代中接受了K次新布 局,该K次新布局的花费分别为Cost1,Cost2,……,CostK

(2e)计算K次新布局的花费Cost1,Cost2,……,CostK的均方差D:

D=(Σi=1KCosti2-K×avg2)/(K-1);

其中i取值从1到K,avg为K次新布局的花费Cost1,Cost2,……,CostK的 平均值:

(3)布局迭代:

(3a)执行步骤(2a)至(2b)过程,得到一个新布局,并得到新布局的 花费Cost;

(3b)根据当前温度T,用新布局的花费Cost与当前布局的花费Cost'之差 ΔC判断是否接受新布局:若ΔC<0,则接受新布局为当前布局,否则,设u为 区间[0,1]内的一个随机数,如果u<exp(-ΔC/T),则接受新布局为当前布局;

(3c)用VFSR退火函数更新当前温度T:

T=T0exp(-ck),

k为接受新布局的总次数,c为实数常量,c=-log(TRS)×exp(-log(TAS)); TRS为退火尺度系数,TRS=10-9,TAS为最大退火迭代次数,TAS计算方法为:

TAS=log0.8(0.05×H/T0)×M,

其中H为电路中的信号个数,M为马可夫链长度,M=10·N1.33

(3d)对步骤(3a)至(3c)过程进行M次迭代;

(3e)如果T<0.05×Cost/H,则执行步骤(4),否则转步骤(3a)继续执行;

(4)局部优化布局:

(4a)令当前温度T=0,对步骤(3a)至(3b)过程进行M次迭代,由于 当前温度T为0的情况下,只接受结果比当前布局好的新布局,所以进行M次 迭代之后会找到局部最优布局;

(4b)如果(4a)获得的局部最优布局的结果好于当前最优布局,则替换 当前最优布局为该局部最优布局,当前最优布局为到目前为止找到的结果最好 的布局;

(5)如果累计步骤(3)中对(3a)至(3c)过程迭代总次数超过TAS, 则输出当前最优布局并转步骤(6)进行布线;否则令当前温度T为前一次执行 步骤(3)过程中新布局的接受率第一次低于44%时的温度,转步骤(3)开始 重复退火;

(6)布线初始化:

(6a)将经过布局的电路中H个信号表示成H个有向图,每个有向图包含 一个源节点src和多个目标节点sink,由于布局之后电路中所有可配置逻辑单元 CLB、I/O单元、异构模块等单元都被放置并固定在物理单元上,所以源节点 src和目标节点sink表示连接到物理单元的引脚,有向图的边表示待布线的线 路;

(6b)将现场可编程门阵列(FPGA)芯片逻辑结构和内部布线资源抽象 成一个布线资源图RG,RG是一个无向图,该无向图的节点表示现场可编程门 阵列(FPGA)芯片上的布线轨道,该无向图的边表示现场可编程门阵列(FPGA) 芯片上的开关和引脚;

(7)为每个线程划分任务集:

(7a)假设处理器个数为P,则创建P个线程,并且为每个线程Thd[i] 创建任务集SigSet[i],i∈{1,2,…,P};

(7b)将布线资源图RG划分为P个大小相等的不交叉区域,对于每个信 号,如果其落入区域i的目标节点sink个数越多,就将其分给区域i对应的任 务集SigSet[i],i∈{1,2,…,P},并尽量保证每个任务集内的sink总数一样多;

(8)对每个线程任务集SigSet[i]中所有信号按照sink个数从多到少排列;

(9)启动P个线程,P个线程并行执行步骤(10);

(10)并行布线迭代:

(10a)线程Thd[i]按序从任务集SigSet[i]中取一个信号j进行拆线,即如 果信号j已布线,则清空信号j在布线资源图RG上的布线路径,并对信号j的 布线路径经历的布线资源节点的占有度减1,P个线程互斥执行此步骤, i∈{1,2,…,P};

(10b)将信号j的源节点src加入到布线树RT[j],布线树RT[j]用来以树形 结构保存信号j的源节点src到其多个目标节点sink的布线路径;

(10c)对信号j的每一个目标节点sink用A*寻路算法在布线资源图RG 上寻找一条从布线树RT[j]中节点到该目标节点sink的花费最低的路径进行布 线,并保存布线路径:

(10c1)清空优先队列PQ,并将布线树RT[j]中每个布线资源节点x的路 径成本PathCost(x)置为0,加入到优先队列PQ中,优先队列PQ用来按总成本 TotalCost(x)从小到大排序来存储当前搜索到的布线资源节点,TotalCost(x)定义 为:

TotalCost(x)=PathCost(x)+α·ExpectedCost(x,sink)

其中ExpectedCost(x,sink)代表从当前布线资源节点x到目标端点sink的期 望成本估计值,α为启发式参数,α取值范围为1.0至1.4,路径成本PathCost(x) 表示从源节点src到当前搜索到的节点x的路径上的每一个布线资源节点n的 布线成本Cost(n)之和,Cost(n)表示布线资源节点n的布线成本:

Cost(n)=Crit(src,sink)×delay(n)+[1-Crit(src,sink)]×b(n)×p(n)×h(n),

其中Crit(src,sink)表示时序分析后信号j从源节点src到目标节点sink的边 的关键度,delay(n)表示节点n的时序项,b(n)表示节点n的基本花费,p(n)表 示节点n当前占有度,h(n)表示节点n的历史占有度;

(10c2)取信号j尚未布线的目标节点中关键度Crit(src,sink)最大的目标节 点sink,如果目标节点sink是优先队列PQ中第一个节点,则表示源节点src 到目标节点sink的最佳路径已找到,否则转步骤(10c3);

(10c3)从优先级队列PQ中取出队首布线资源节点y,对与y相连的布线 资源节点z计算总成本TotalCost(z),并将z按TotalCost(z)加入到优先级队列PQ 中,重复执行步骤(10c3)直到找到目标节点sink的路径;

(10d)对该路径经历的布线资源节点的占有度加1,P个线程互斥执行此 步骤;

(10e)将该路径加入到布线树RT[j],如果信号j还有目标节点sink,则 转步骤(10c),对信号j下一个目标节点sink寻路,否则,执行步骤(10f);

(10f)如果任务集SigSet[i]中所有信号都完成了步骤(10a)至(10e)过程,则 转步骤(11),否则,转步骤(10a)继续布线下一个信号;

(11)同步P个线程,即等待每个线程都执行完第(10)步;由主线程检查整 个电路的布线是否合法,如果布线合法,即没有重复被占用的布线资源节点, 则转第(14)步;否则,对所有重复被占用的布线资源节点的历史占用度加1,并 且将拥挤惩罚度乘以一个惩罚因子ρ,ρ取值范围为1.0至1.5,进行时序分析, 转第(12)步;

(12)主线程重新布线拥挤的信号:

(12a)统计拥挤布线资源节点个数占所有布线资源节点个数的比例,如果 这个比例低于一定值,则执行步骤(12b);否则如果布线迭代次数不超过指定值 Max,则进行时序分析并转第(10)步执行下一次布线迭代,否则转第(14)步;

(12b)统计所有拥挤的信号,拥挤的信号即为布线后包含了拥挤布线资源 节点的信号,保存原来的拥挤惩罚,并将拥挤惩罚度设成10000.0,主线程串行 布线这些拥挤的信号;

(12c)恢复拥挤惩罚度为原来的值;

(13)检查整个电路的布线是否合法,如果布线合法,则转第(14)步;否则 如果布线迭代次数不超过指定值Max,则进行时序分析并转第(10)步执行下一 次布线迭代,否则转第(14)步;

(14)将其余P-1个线程合并到主线程,输出布线结果并退出布线。

结合图2和图3和仿真实验对本发明做进一步的说明:

如图2所示,本发明的实现快速布局方法如下:

第一步,初始布局:随机地将经过装箱后的电路中每个可配置逻辑单元 CLB、I/O单元、异构模块等单元随机地分配到现场可编程门阵列(FPGA)芯 片的一个坐标位置,每个坐标最多放一个可配置逻辑单元CLB、I/O单元、异 构模块等单元;

第二步,初始化温度,具体操作如下:

步骤一,在当前布局上,在现场可编程门阵列(FPGA)芯片全局范围内 随机地选择一对可配置逻辑单元CLB、I/O单元、异构模块等单元交换位置, 或者选择一个可配置逻辑单元CLB、I/O单元、异构模块等单元与一个空白位 置进行交换,得到一个新的布局,计算新布局的花费Cost:

实数,tc和bc分别表示新布局的时序量和拥挤量,tc'和bc'分别表示当前布局的 时序量和拥挤量,λ表示时序量的权重,1-λ表示拥挤量的权重,λ=0.5;

步骤二,用Metropolis准则判断是否接受新布局:设ΔC为新布局的花费 Cost减去当前布局的花费Cost',如果ΔC<0,则接受新布局为当前布局,否则, 设u为区间[0,1]内的一个随机数,如果u<exp(-ΔC/1030),则接受新布局为当前 布局;

步骤三,对步骤二至三过程进行N次迭代,N是电路中可配置逻辑单元 CLB、I/O单元、异构模块等单元的个数,设N次迭代中接受了K次新布局, 计算K次新布局的布局成本Cost值的均方差D,初始化温度为T0=20×D,T=T0

第三步,在当前布局上,随机选择可配置逻辑单元A,在以A为中心、边 长为2×Rlim的正方形范围内随机选择可配置逻辑单元B或者空余位置,然后交 换位置产生一个新布局,计算新的布局花费相对于当前布局花费的改变量ΔC;

第四步,根据当前温度T,用Metropolis准则判断是否接受新布局:如果 ΔC<0,那么可以接受这个改变,并且k加1,k为到目前为止接受新布局的总 次数,否则,说明新布局是恶化解,并且k加1,设u为区间[0,1]内的一个随 机数,如果u<exp(-ΔC/T),则接受新布局为当前布局,刚开始温度很高,大部 分新布局都可以接受,等温度逐渐降低,最后很难接受,随着温度不断降低达 到算法退出条件;

第五步,用VFSR退火函数对温度进行更新,这里采用了随迭代次数呈指 数下降的方式:

T=T0exp(-ck);

其中k为到目前为止接受新布局的总次数,常量c的计算方法:

c=-log(TRS)×exp(-log(TAS));

其中TRS设定为10-9,TAS为最大退火迭代次数,TAS=log0.8(0.05×H/T0)×M, M=10·N1.33,H为电路中的信号个数;

第六步,对第三步到第五步过程执行M次迭代,设执行M次迭代,新布 局的接受率为α,更新Rlim为Rlim×(1-0.44+α),Rlim初始值为整个FPGA芯 片的跨度;

第七步,判断退火的退出条件:如果当T<0.05·Cost/H时,表示当前状态下 质量难以再提高,达到退出条件;

第八步,令当前温度T=0,对第三步到第四步过程进行M次迭代,由于当 前温度T为0的情况下,只接受结果比当前布局好的新布局,所以进行M次迭 代之后会找到局部最优布局,如果局部最优布局的结果好于当前最优布局,则 替换当前最优布局为该局部最优布局,当前最优布局为到目前为止找到的结果 最好的布局;

第九步,如果累计第三步到第五步过程迭代总次数超过TAS,则输出当前 最优布局并成功退出布局,否则,令当前温度T为前一次执行第三步到第五步 过程中新布局的接受率α第一次低于44%时的温度,转第三步开始重复退火;

如图3所示,本发明实现现场可编程门阵列(FPGA)快速布线步骤如下:

第一步,创建布线资源图RG,将现场可编程门阵列(FPGA)芯片上的可 编程单元抽象成线,将布线通道中轨道抽象成点;

第二步,将经过布局的电路中H个信号表示成H个有向图,该有向图拓扑 有序,每个有向图包含一个源节点src和多个目标节点sink,对于每个信号,将 源端src到每个目标节点sink的关键度Crit(src,sink)初始化为1.0,表示每个信 号每条边都是关键的;

第三步,假设处理器个数为P,则创建P个线程,将所有信号均匀分配给 P个线程:为每个线程Thd[i]创建任务集SigSet[i],i∈{1,2,…,P},将芯片化分为 P个大小相等的不交叉区域,对于每个信号,如果其落入区域i的目标节点sink 个数越多,就将其分给区域i对应的任务集SigSet[i],并尽量保证每个任务集 内的sink总数一样多;

第四步,并发启动P个线程执行第五步至低十三步;

第五步,布线迭代循环,判断如果超过Max=50次迭代还没找到合法布线, 则布线失败并退出,否则执行第六步;

第六步,每个线程Thd[i]对任务集SigSet[i]中每个信号j进行一次拆线布线 的迭代,迭代第七步到第十四步,任务集SigSet[i]中所有信号布线完毕之后执 行第十五步;

第七步,如果不是第一次布线迭代,则拆除前次迭代对j的布线RT[j],RT[j] 为信号j对应的布线树,该变量以树形结构保存了信号每条布线所经过的布线 资源节点,拆除布线的同时,将所占用的每个布线资源节点n的当前占有度p[n] 减1,p[0...num_nodes]是个全局共享变量,记录了所有布线资源节点当前的占有 次数,所有线程互斥方式更新p[0...num_nodes],num_nodes为布线资源图RG上 的布线资源节点个数;

第九步,获取信号j的源节点src,将src加入到布线树RT[j]当中作为布线 的起始节点;

第十步,如果信号j的所有目标节点布线完毕,则执行第六步,否则,按 关键度Crit(src,sink)从大到小,取信号j的下一个目标节点sink进行布线,布线 目标节点sink的过程采用A*寻路算法,具体过程为第十一步至第十二步;

第十一步,在寻找布线路径时,A*寻路算法维持了一个优先级队列PQ, 该队列中存储了按照总成本TotalCost排序的布线资源节点,TotalCost包含 PathCost和ExpectedCost两部分:

TotalCost(n)=PathCost(n)+α·ExpectedCost(n,sink);

PathCost(n)代表从信号源节点src到当前布线资源节点n的路径成本,而 ExpectedCost(n,sink)代表从当前布线资源节点n到目标端点sink的期望成本估 计值,PathCost和ExpectedCost这两部分经由一个α参数加权获得有方向性的 启发式搜索,加快搜索目标节点sink的过程,α取值范围为1.0至1.4,初始化 并清空PQ,将布线树RT[j]中所有布线资源节点加入到优先队列当中,每个节 点的PathCost(n)设为Crit(src,sink)×delay(n);

第十二步,如果到目标节点sink的路径还没有找到,则算法挑选出优先级 队列中总成本TotalCost(n)最小的布线资源节点n,对与n有边相连的资源点m 计算其TotalCost(m),并将其插入到优先级队列PQ中,循环第十一步, TotalCost(m)计算过程:

Cost(m)=Crit(src,sink)×delay(m)+[1-Crit(src,sink)]×b(m)×p(m)×h(m);

PathCost(m)=Cost(n)+PathCost(n);

TotalCost(m)=PathCost(m)+α×ExpectedCost(m,sink);

其中Crit(src,sink)表示时序分析后信号j从源节点src到目标节点sink的边 的关键度,delay(m)表示节点m的时序项,b(m)表示节点m的基本花费,p(m) 表示节点n当前占有度,h(m)表示节点m的历史占有度;

第十三步,将找到的到sink的路径加入到布线树RT[j]中,并将路径上的 每一个线资源节点n的当前占有度p[n]加1,p[0...num_nodes]是个全局共享变量, 记录了所有布线资源节点当前的占有次数,所有线程互斥方式更新 p[0...num_nodes],执行第十步布线下一个目标节点;

第十四步,同步P个线程,即等待每个线程都开始执行第十四步,由主线 程单独对所有布线节点的历史占有度h(n)进行更新,如果本次布线占用了布线 资源节点n,则对h(n)加1,执行时序分析,更新所有信号到目标节点sink的关 键度Crit(src,sink),布局后的电路是由H个信号组成的拓扑图,时序分析就是 进行拓扑排序从而确定关键路径,然后再根据关键路径确定每个信号每条边的 关键度,Crit(src,sink)计算方法如下:

标节点sink之间连接的延时裕量,η是控制连接裕量对拥挤度和延时折中关系 的参数;

第十五步,由主线程检查整个电路的布线是否合法,如果布线合法,即没 有重复被占用的布线资源节点,则转第十八步;否则,对所有重复被占用的布 线资源节点的历史占用度加1,并且将拥挤惩罚度乘以一个惩罚因子ρ,ρ取值 范围为1.0至1.5,转第十六步;

第十六步,主线程重新布线拥挤的信号:统计拥挤布线资源节点个数占所 有布线资源节点个数的比例,如果这个比例低于一定值,则统计所有拥挤的信 号,拥挤的信号即为布线后包含了拥挤布线资源节点的信号,保存原来的拥挤 惩罚,并将拥挤惩罚度设成10000.0,主线程串行布线这些拥挤的信号,恢复拥 挤惩罚度为原来的值;否则如果布线迭代次数不超过指定值Max,则进行时序 分析并转第十步执行下一次布线迭代,否则转第十八步;

第十七步,检查整个电路的布线是否合法,如果布线合法,则转第十八步; 否则如果布线迭代次数不超过指定值Max,则进行时序分析并转第十步执行下 一次布线迭代,否则转第十八步;

第十八步,将其余P-1个线程合并到主线程,输出布线结果并退出布线。

本发明的效果可以通过以下的仿真进一步的说明:

1、仿真条件,基于在多伦多大学的VPR(Versatile Placement and Routing)6.0 版实现,VPR6.0是当前学术界在现场可编程门阵列(FPGA)布局布线问题上 最好的工具之一,将FPGA快速布局布线算法(VFSR+ParRoute)与VPR6.0 进行比较,仿真采用现场可编程门阵列(FPGA)结构文件为k4n4.xml,即为4 输入的lut,每个可配置逻辑单元CLB中封装4个lut的FPGA结构,选用10 个最大的并经过装箱工具T-VPack处理后的大规模国际标准电路,在HP Z800 四核机器上并发使用四个线程进行布线仿真;

2、仿真内容,将上述经过装箱处理后的大模规电路,分别采用本发明的布 局布线方法和国际上常用的VPR6.0布局布线方法进行仿真实验,对布局布线 过程的CPU耗时进行对比,并统计和对比两种方法布线后电路的延时和线长结 果,其中延时表示最终电路关键路径延时,它决定了这个电路最终的运行时间, 线长表示最终电路所要用到的布线轨道单元个数,延时和线长结果决定了布局 布线后电路的质量;

每次仿真重复10次,对仿真实验结果求平均值,得到本发明的布局布线方 法(VFSR+ParRoute)与现有VPR6.0布局布线方法速度和质量仿真对比;

3、仿真结果,如表1所示:

表1本发明的布局布线方法与现有VPR6.0布局布线方法的速度结果对比

电路名称 VPR6.0(s) VFSR+ParRoute(s) 加速比 apex2 27.03 14.39 1.88 apex4 16.08 8.15 1.97 clma 368.87 132.77 2.78 disp 29.53 11.92 2.48 elliptic 85.14 31.12 2.74 ex5p 12.77 8.23 1.55 ex1010 134.24 64.14 2.09 frisc 88.97 39.97 2.26 pdc 128.44 51.93 2.47 s38417 190.51 126.03 1.51 总计 1081.58 488.65 2.173(平均)

表2本发明的布局布线方法与现有VPR6.0布局布线方法的质量结果对比

从表1可以看出,在耗时方面本发明的布局布线方法优于现有VPR6.0布 局布线方法,平均加速比达到了2.173,从表2可以看出,在延时和线长方面本 发明的布局布线方法和现有VPR6.0布局布线方法基本相当,最终总的延时降 低了1.4%,延时方面的质量有所提高,总的线长增加了1%,线长方面的质量 有所下降,实际应用中延时质量比线长质量优先级更高。

根据以上仿真实验和数据结果表明,本发明采取现有的超快速模拟重复退 火算法VFSR加速布局过程,并采用多线程方法对现有PathFinder算法进行改 进,实现对布线过程的加速,使得最终电路的延时和线长两个重要性能指标基 本不变的情况下,布局布线速度有了显著加快。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发 明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明 的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号