一种基于汇节点的并行布线方法与流程

文档序号:11155684阅读:235来源:国知局
一种基于汇节点的并行布线方法与制造工艺

本发明涉及集成电路设计领域,尤其涉及一种基于汇节点的并行布线方法。



背景技术:

现场可编程门阵列(Field-Programmable Gate Array,FPGA)是一种具有丰富硬件资源、强大并行处理能力和灵活可重配置能力的逻辑器件,与其相对应的电子设计自动化(electrical design automatic,EDA)工具需要花费大量运行时间来综合处理这些大规模的电路设计。

在FPGA的整套EDA设计流程,布线(Route)是指根据布局的物理位置信息,利用FPGA内部的各种连线资源,合理正确连接各个元件的过程,该步骤是整个设计流程中占用时间最长的步骤之一,占用时间比例往往在50%以上,而传统的基于目标节点的布线算法都是基于单处理器单线程的方法,在传统方法中,布线过程为:将目标节点(sink node)加入队列,从源节点布线到目标节点,直至队列为空完成布线过程,结束布线。但随着多核处理器的普及,传统方法布线运行时间过长,如何提供一种适用于单核以及多核处理器,并且能减少布线时间的布线方法,是现阶段亟待解决的问题。



技术实现要素:

一方面,本发明实施例提供一种基于汇节点的并行布线方法,该方法包括:开始布线,并主线程将当前布线的线网中的所有汇节点添加到主线程的第一队列中,并启动多个子线程;主线程在接收到子线程的布线请求后,判断第一队列是否为空,当第一队列不为空时,主线程将第一队列中的一个汇节点发送给对应布线请求的子线程,子线程在完成汇节点的布线后,向主线程发送布线成功报告以及布线请求;或者当第一队列为空时,主线程对多个子线程发送结束通知,以便子线程结束进程或在完成当前布线任务后结束进程,并子线程在结束进程后向主线程发送进程结束通知;主线程根据进程结束通知判断布线进度,当多个子线程均结束进程之后,结束布线。

可选地,在上述方法中,子线程在完成汇节点的布线,包括:子线程在接收到汇节点后,从源节点布线到汇节点;判断汇节点的布线是否成功,若成功则向主线程发送布线成功报告以及布线请求;若失败,则向主线程发送布线失败报告,以便主线程根据布线失败报告结束此次布线。

可选地,在上述方法中,主线程在接收到布线成功报告后,更新布线资源占用信息。

一方面,本发明实施例提供另一种基于汇节点的并行布线方法,该方法包括:开始布线,主线程将当前布线的线网中的所有汇节点添加到主线程的第一队列中,并多个子线程;主线程在接收到子线程的布线请求后,判断第一队列是否为空,当队列不为空时,主线程将队列中的多个汇节点发送给对应布线请求的子线程,子线程在完成多个汇节点的布线后,向主线程发送布线成功报告以及布线请求;或者当队列为空时,主线程对多个子线程发送结束通知,以便子线程结束进程或在完成当前布线任务后结束进程,并在结束进程后向主线程发送进程结束通知;主线程根据进程结束通知判断多个子线程的布线进度,当所多个子线程均结束进程之后,结束布线。

可选地,在上述方法中,子线程在完成多个汇节点的布线,包括:子线程在接收到多个汇节点后,将多个汇节点加入第二队列;根据第二队列,依次从源节点布线到多个汇节点;在每个汇节点布线完成后,判断汇节点的布线是否成功,若成功,则继续根据第二队列进行布线,或者第二队列为空,则向主线程发送布线成功报告以及布线请求;若第二队列中任意汇节点布线失败,则向主线程发送布线失败报告,以便主线程根据布线失败报告结束此次布线。

可选地,在上述方法中,当第二队列中任意汇节点布线成功后,子线程更新布线资源占用信息。

可选地,在上述方法中,主线程在接收到布线成功报告后,更新布线资源占用信息。

本发明实施例提供的基于汇节点的并行布线方法,适用于单核以及多核处理器布线过程,提高了布线的速度,简化了布线过程。

附图说明

图1为本发明实施例提供的一种基于汇节点的并行布线方法流程示意图;

图2为本发明实施例提供的一种子线程的布线流程示意图;

图3为本发明实施例提供的另一种基于汇节点的并行布线方法流程示意图;

图4为本发明实施例提供的另一种子线程的布线流程示意图;

图5为实施例一中主线程与子线程1的布线流程示意图。

具体实施方式

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

本发明实施例提供一种基于汇节点的并行布线方法,采用多个线程同时从源节点向汇节点进行布线的方式完成布线过程。

图1为本发明实施例提供的一种基于汇节点的并行布线方法流程示意图,如图1所示,该方法包括步骤S101-步骤S108;具体地:

步骤S101,开始布线,主线程将当前布线的线网中的所有汇节点添加到所述主线程的第一队列中,并启动多个子线程。

需要说明的是,子线程的个数根据处理器核数、布线速度要求进行设定。

步骤S102,主线程在接收到所述子线程的布线请求后,执行步骤S103.

步骤S103,判断第一队列是否为空,若为空,则执行步骤S105,否则执行步骤S104。

步骤S104,主线程将第一队列中的一个汇节点发送给对应布线请求的子线程,以便子线程在接收该汇节点,并在完成汇节点的布线后,向主线程发送布线成功报告以及布线请求。子线程的具体布线过程详见图2以及相关文字说明。

步骤S105,主线程向每个子线程方式结束通知,以便子线程根据结束通知结束进程或在完成当前布线任务后结束进程,并且子线程在结束进程后向主线程发送进程结束通知。

步骤S106,主线程根据接收到的进程结束通知,确定每个子线程的布线进度。

步骤S107,判断是否所有子线程均结束进程,若是,则执行步骤S108,结束布线;若否,则执行步骤S106。

在上述方法中,主线程启动了多个子线程,由于子线程的工作过程及原理相同,下面结合附图仅对单个子线程的具体工作流程进行更为详细的介绍。

图2为本发明实施例提供的一种子线程的布线流程示意图,如图2所示,对于一个子线程其布线主要包括步骤S201-步骤S209,具体地:

步骤S201,在被主线程启动后,开始布线。

步骤S202,向主线程发送布线请求,以便主线程根据布线请求为子线程分发汇节点。

步骤S103,核查子线程自身是否接到主线程发送的结束通知,若有,则执行步骤S204;若无,则执行步骤S205。

步骤S204,结束子线程进程,并向主线程发送进程结束通知,以便主线程确定子线程的布线进度。

步骤S205,确定是否接收到主线程分发的汇节点,若有,则执行步骤S206;若无,则执行步骤S202。

步骤S206,从源节点布线到汇节点,并在布线结束后执行步骤S207.

步骤S207,判断上述布线是否成功,若成功,则执行步骤S209;否则,执行步骤S208。

步骤S208,由于布线失败,则向主线程发送布线失败报告,以便主线程在接收到布线失败报告后,向每个子线程发送结束通知,结束此次布线;或者将该汇节点重新分配给其他子线程,并关闭该失败子线程。

步骤S209,结束子线程此次布线,并向主线程发送布线成功报告,以便主线程根据布线成功报告更新布线资源占用信息,防止主线程对已经布线结束的汇节点进行二次分发。

本发明实施例还提供了另一种基于汇节点的并行布线方法,图3为本发明实施例提供的另一种基于汇节点的并行布线方法流程示意图,如图3所示,该方法包括步骤S301-步骤S308;具体地:

步骤S301,开始布线,主线程将当前布线的线网中的所有汇节点添加到所述主线程的第一队列中,并启动多个子线程。

需要说明的是,子线程的个数根据处理器核数、布线速度要求进行设定。

步骤S302,主线程在接收到所述子线程的布线请求后,执行步骤S303.

步骤S303,判断第一队列是否为空,若为空,则执行步骤S305,否则执行步骤S304。

步骤S304,主线程将第一队列中的多个汇节点发送给对应布线请求的子线程,以便子线程在接收上述多个汇节点,并在完成多个汇节点的布线后,向主线程发送布线成功报告以及布线请求。子线程的具体布线过程详见图4以及相关文字说明。

需要说明的是,为了方便描述,在本发明实施例中用Si表示汇节点,i为正整数,则多个汇节点表示为:S1、S2……Sn;主线程向子线程发送的汇节点的数目依据实际经验以及布线要求等进行设定,具体数目本发明实施例不予限制。

步骤S305,主线程向每个子线程方式结束通知,以便子线程根据结束通知结束进程或在完成当前布线任务后结束进程,并且子线程在结束进程后向主线程发送进程结束通知。

步骤S306,主线程根据接收到的进程结束通知,确定每个子线程的布线进度。

步骤S307,判断是否所有子线程均结束进程,若是,则执行步骤S308,结束布线;若否,则执行步骤S306。

在上述方法中,主线程启动了多个子线程,由于子线程的工作过程及原理相同,下面结合附图仅对单个子线程的具体工作流程进行更为详细的介绍。

图4为本发明实施例提供的另一种子线程的布线流程示意图,如图4所示,对于一个子线程其布线主要包括步骤S401-步骤S412,具体地:

步骤S401,在被主线程启动后,开始布线。

步骤S402,向主线程发送布线请求,以便主线程根据布线请求为子线程分发多个汇节点。

步骤S403,核查子线程自身是否接到主线程发送的结束通知,若有,则执行步骤S404;若无,则执行步骤S405。

步骤S404,结束子线程进程,并向主线程发送进程结束通知,以便主线程确定子线程的布线进度。

步骤S405,确定是否接收到主线程分发的多个汇节点(S1、S2……Sn),若有,则执行步骤S406;若无,则执行步骤S402。

步骤S406,将多个汇节点加入第二队列,以便子线程根据第二队列依次完成第二队列中汇节点的布线。

步骤S407,完成第二队列中汇节点Si的布线,具体的,从源节点布线到汇节点Si;其中,i的初始值为1。

步骤S404,判断上述布线是否成功,若成功,则执行步骤S410;否则,执行步骤S409。

步骤S409,由于布线失败,则向主线程发送布线失败报告,以便主线程在接收到布线失败报告后,向每个子线程发送结束通知,结束此次布线;或者将该汇节点重新分配给其他子线程,并关闭该失败子线程。

步骤S410,更新布线资源占用信息,防止子线程对已经布线结束的汇节点进行二次布线。

步骤S411,判断第二队列是否为空,若为空,则执行步骤S412;若不为空,则令i=i+1,并执行步骤S407.

步骤S412,结束子线程此次布线,并向主线程发送布线成功报告,以便主线程根据布线成功报告更新布线资源占用信息,防止主线程对已经布线结束的汇节点进行二次分发。

为了更具体的阐述本发明实施例所提供的方法,下面通过具体的实例对本发明所提供的方法进行进一步的阐述。

实施例一

本发明提供实施例一,在实施例一中,处理器为4核,具有四个汇节点(汇节点A、汇节点B、汇节点C、汇节点D),采用主线程与三个子线程(子线程1、子线程2、子线程3)来实现布线,图5为实施例一中主线程与子线程1的布线流程示意图,如图5所示,由于子线程2、子线程3的具体布线过程与子线程1相同,图5中仅显示了子线程1的具体布线过程,具体地:

步骤S01,主线程启动子线程1,同时启动子线程2、子线程;

步骤S02,将四个汇节点(汇节点A、汇节点B、汇节点C、汇节点D)接入到第一队列;

步骤S03,子线程1在启动后向主线程发送布线请求;

步骤S04,主线程在接收到子线程1的布线请求后将汇节点A发送给子线程1;同时,由于主线程还接收到子线程2、3的布线请求,将汇节点、C分别发送给子线程2、3;

步骤S05,子线程1完成汇节点A的布线,即从源节点布线到汇节点A;

步骤S06,子线程1成功完成汇节点A的布线,再次向主线程发布线请求;

步骤S07,主线程在接收到子线程1的布线请求后将汇节点D发送给子线程1;

步骤S08,子线程1完成汇节点D的布线,即从源节点布线到汇节点D;

步骤S09,子线程1成功完成汇节点D的布线,第三次向主线程发布线请求;

步骤S10,主线程判断得知第一队列已经为空,则向子线程1、2、3发送结束通知;

步骤S11,子线程1再接收到结束通知后,结束进程,并向主线程发送进程结束通知;

步骤S12,主线程结束子线程1、2、3的进程结束通知后,结束布线。

专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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