一种FPGA布线方法及装置
技术领域
本发明涉及现场可编程门阵列(FPGA)技术领域,尤其涉及一种FPGA布线方法及装置。
背景技术
随着电子技术的飞速发展,数字电路的设计脚步也逐渐加快,FPGA的问世使得数字电路的设计变得简单快速。随着应用场景和市场需求的多样化,数字电路的设计规模不断扩大,FPGA设计软件的逻辑处理能力受到挑战,运行时间和内存开销的控制成为了一个重要的课题。
目前布线算法中比较通用的是A*算法,这是一种以代价值函数驱动的图搜索算法。A*算法的基本公式为:
f(n)=g(n)+h(n)
其中,n为中间节点,g(n)为从起始节点到节点n的实际代价值,h(n)为从节点n到终点节点的预估代价值。
A*算法在布线过程的总运行时间和内存均与搜索节点的数目有关,搜索的节点数目越多,所需时间越长,占用内存也越大。
在A*布线算法中,对一个net而言,其各终点的布线过程是相互独立的,代价值驱动的算法使得各个终点在布线过程中趋向各自不同的最优解,因此,针对每个终点都要建立一条从起点到终点的路径进行布线。这就导致在大规模、复杂的电路设计中,布线过程会花费大量的运算时间,并且可能产生严重的布线路径冲突,解决这些冲突同样将花费大量的运行时间和内存。
发明内容
本发明提供一种FPGA布线方法及装置,解决现有大规模电路设计中布线运行时间长和内存消耗较大的问题。
为解决上述技术问题,本发明提供了一种FPGA布线方法,包括:
确定作为布线起点的起始节点,将起始节点对应的各终点节点划分为至少一个终点集合;
将一个终点集合作为一个逻辑终点,建立所述起始节点到各所述逻辑终点的布线路径;
将所述终点集合内的各终点节点连接到所述布线路径上。
可选地,所述将起始节点对应的各终点节点划分为至少一个终点集合包括:
获取每一个终点节点的坐标值;
根据所述坐标值将所述终点节点划分为至少一个集合;
或者,
将具有至少一个共用中间节点的终点节点划分到一个集合中。
可选地,所述建立所述起始节点到各所述终点集合的布线路径包括:
确定各终点集合对应的中间节点;
对所述起始节点到各所述中间节点进行布线。
可选地,所述确定各终点集合对应的中间节点包括:
利用布线算法分别计算出所述起始节点到各终点集合的多个布线路径的代价值;
确定最小代价值所对应的节点为该终点集合的中间节点。
可选地,所述建立所述起始节点到各所述终点集合的布线路径之后还包括:
当所述起始节点到各所述终点集合的布线路径存在相同的布线路径时,将所述相同的布线路径对应的终点集合合并成一个集合。
本发明还提供了一种FPGA布线装置,包括:
确定模块,用于确定作为布线起点的起始节点;
集合划分模块,用于将起始节点对应的各终点节点划分为至少一个终点集合;
布线模块,用于将一个终点集合作为一个逻辑终点,建立所述起始节点到各所述逻辑终点的布线路径;还用于将所述终点集合内的各终点节点连接到所述布线路径上。
可选地,所述集合划分模块具体用于获取每一个终点节点的坐标值,根据所述坐标值将所述终点节点划分为至少一个集合;或者,所述集合划分模块具体还用于将具有至少一个共用中间节点的终点节点划分到一个集合中。
可选地,所述确定模块还用于确定各终点集合对应的中间节点;所述布线模块用于对所述起始节点到各所述中间节点进行布线。
可选地,所述确定模块还包括:
计算模块,用于利用布线算法分别计算出所述起始节点到各终点集合的多个布线路径的代价值,则确定最小代价值所对应的节点为该终点集合的中间节点。
可选地,FPGA布线装置还包括:
集合合并模块,用于当所述起始节点到各所述终点集合的布线路径存在相同的布线路径时,将所述相同的布线路径对应的终点集合合并成一个集合。
有益效果
本发明针对现有技术大规模电路设计中布线运行时间长和内存消耗较大的问题,提供了一种FPGA布线方法及装置,通过确定作为布线起点的起始节点,将起始节点对应的各终点节点划分为至少一个终点集合,将一个终点集合作为一个逻辑终点,建立起始节点到各终点集合的布线路径,再将终点集合内的各终点节点连接到该布线路径上,这种布线方式避免针对每一个终点都要建立一条布线路径,使得在尽量少的节点遍历过程中完成布线,提高布线资源的使用效率,从而减小布线冲突,提高布线速度并降低内存开销。
附图说明
图1为现有FPGA布线逻辑示意图;
图2为本发明实施例一提供的FPGA布线逻辑示意图;
图3为本发明实施例一提供的FPGA布线方法的基本流程图;
图4为本发明实施例一提供的FPGA布线方法的集合划分的示意图;
图5为本发明实施例一提供的FPGA布线方法的集合合并的示意图;
图6为本发明实施例一提供的FPGA布线方法的示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,下面通过具体实施方式结合附图对本发明实施例作进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
实施例一:
为了减少现有大规模电路设计中布线运行时长和内存的消耗,本发明提供了一种FPGA布线方法。
参见图1所示,图1为现有FPGA中一条net的布线逻辑示意图。该net有8个终点(实际可能多达几千个),需要分别从起点D布8条路径到对应的终点,同时这8条布线路径需要与其他net的布线路径竞争布线资源。这种布线方式在在大规模、复杂的电路设计中,会花费大量的运算时间,并且可能产生严重的布线路径冲突,同时为了解决这些冲突也将花费大量的运行时间和内存。
本实施例中,为了解决现有技术大规模电路设计中布线运行时间长和内存消耗较大的问题,对FPGA中的布线方法进行了优化。优化后的布线逻辑示意图参见图2,将该net的终点按照特定规则划分为3个集合,布线时从起点D布三条路径到三个终点集合附近,再分别处理从中间节点到终点之间的短距离布线,这样可以节省布线资源,减少布线冲突,从而缩短布线时间。
本实施例中,FPGA布线方法的具体流程参见图3:
S301、确定作为布线起点的起始节点,将起始节点对应的各终点节点划分为至少一个终点集合。
应当理解的是,FPGA为一种可编程的器件,可以根据实现的功能来选择布线资源,也就是说,不同功能的实现其布线起点可能是不同的,因此,要确定好布线起点,将该布线起点则为起始节点。
本实施例中,将布线过程中起始节点对应的各终点节点划分为至少一个终点集合的方法包括但不限于根据终点节点的坐标来划分终点集合或者将具有至少一个共用中间节点的终点节点划分到一个终点集合中。
本实施例中,以根据终点节点的坐标来划分终点集合作为示例,对终点集合的划分做进一步详细说明。
参见图4,图4为终点集合划分的示意图。布线起点确定后,获取布线起点对应的各终点节点的坐标,根据坐标将在FPGA中位置临近的终点节点划分到一个终点集合中,如图所示,将布线起点对应的各终点节点划分为了5个集合。
需要说明的是,判断位置临近的终点节点可以为判断各相邻终点节点间的距离是否大于预设阈值,具体的,根据坐标计算出各相邻节点间的距离,判断该距离是否大于预设阈值,若小于等于预设阈值,则将对应的终点节点划分到一个终点集合中;还可以为将相对布线起点一定角度内的终点节点与布线起点之间的距离小于等于预设阈值的终点节点划分到一个终点集合中。
应当理解的是,根据终点节点的坐标划分好终点集合后,可能存在终点集合内的终点节点与确定的中间节点没有对应的布线资源,因此,本实施例中还可以将具有至少一个共用中间节点的终点节点划分到一个终点集合中,方便后续工作的进行。
S302、将一个终点集合作为一个逻辑终点,建立起始节点到各逻辑终点的布线路径。
本实施例中,将各终点节点划分为至少一个终点集合,可以将每一个终点集合看作与起始节点对应的一个逻辑终点,则FPGA布线过程相当于对起始节点到各逻辑终点进行布线。建立的这条起始节点到逻辑终点的布线路径为起始节点到对应终点集合内各终点节点的共用路径。
本实施例中,建立起始节点到各逻辑终点的布线路径具体为确定各终点集合对应的各中间节点,对起始节点到各中间节点进行布线。
本实施例中,采用的布线算法为A*算法,这是一种以代价值函数驱动的图搜索算法,因此基于A*算法的布线器可以根据代价值函数灵活选择最优的路径。
需要说明的是,起始节点到一个逻辑终点可能存在多条路径,利用A*算法算出每条路径相应的代价值,选择代价值最小的确定为该逻辑终点的中间节点,即该中间节点为该逻辑终点对应的终点集合的中间节点。本实施例中,要分别计算出各终点集合对应的中间节点。
本实施例中,各终点集合对应的中间节点确定好后,将起始节点和所有的中间节点组成一个新的net,这些中间节点是这个新net的终点。可以认为这个net是原始net的主干,称之为主干net。
需要说明的是,起始节点到各逻辑终点的布线路径建立好之后,可能存在布线路径相同的情况,这时候,可以将相同布线路径对应的终点集合合并成为一个集合。具体的,参见图5,将终点节点划分为三个终点集合,分别为终点集合1、终点集合2以及终点集合3,将每一个终点集合分别作为一个逻辑终点,根据A*算法确定出每一个终点集合对应的中间节点,终点集合1对应的中间节点为节点B,终点集合2对应的中间节点为中间节点B,终点集合3对应的中间节点为中间节点C,中间节点确定好后,对起始节点A到中间节点B和起始节点A到中间节点C分别进行布线,由此可知,起始节点A到终点集合1以及起始节点A到终点集合2的布线路径相同,因此将终点集合1和终点集合2合并成为一个集合。
S303、将终点集合内的各终点节点连接到布线路径上。
本实施例中,起始节点到中间节点的布线路径建好后,对中间节点到与之对应的终点集合内的各终点节点进行布线。中间节点到各中间节点的布线也遵循A*算法。
本实施例中,对每一个终点集合,使用对应的中间节点作为起点构造一个新net,称之为子net。
需要说明的是,主干net和各子net均作为一个独立的net进行布线,将这些布线路径拼接即得到原始net的完整布线结果。具体参见图6,图6为FPGA布线方法的完整布线路径示意图。
图6中,原始的net被划分为一个终点节点数目较少的主干net和多个小范围的子net。中间节点H、C、K三个节点同时作为主干net的终点和三个子net的起点;对拆分后的主干net和子net分别进行布线,得到对应的布线结果。如图所示,每一个方框都表示布线过程中的一个独立net布线结果;布线完成后,对属于同一个原始net的主干net和子net,将其布线结果进行拼接,得到原始net的完整布线结果。
本发明提供了一种FPGA布线方法,通过确定作为布线起点的起始节点,将起始节点对应的各终点节点划分为至少一个终点集合,将一个终点集合作为一个逻辑终点,建立起始节点到各终点集合的布线路径,再将终点集合内的各终点节点连接到该布线路径上,这种布线方式避免针对每一个终点都要建立一条布线路径,使得在尽量少的节点遍历过程中完成布线,提高布线资源的使用效率,从而减小布线冲突,提高布线速度并降低内存开销。
实施例二:
本实施例还提供了一种FPGA布线装置,该装置用于实现如上述实施例的FPGA布线方法至少一个步骤。
该FPGA布线装置包括确定模块、集合划分模块以及布线模块,其中,确定模块用于确定作为布线起点的起始节点,集合划分模块用于将起始节点对应的各终点节点划分为至少一个终点集合,布线模块用于将一个终点集合作为一个逻辑终点,建立起始节点到各逻辑终点的布线路径以及将终点集合内的各终点节点连接到该布线路径上。
可选的,本实施例中,集合划分模块可以用于获取每一个终点节点的坐标,根据坐标将终点节点划分为至少一个集合;还可以用于将具有至少一个共用中间节点的终点节点划分到一个集合中。
可选的,本实施例中,确定模块还用于确定各终点集合对应的中间节点;布线模块用于对起始节点到各所述中间节点进行布线。
可选的,本实施例中,确定模块还包括计算模块,用于利用布线算法分别计算出起始节点到各终点集合的多个布线路径的代价值,则确定最小代价值所对应的节点为该终点集合的中间节点。
需要说明的是,布线算法为A*算法,基于A*算法的布线器可以根据代价值函数灵活选择最优的路径。
可选的,FPGA布线装置还包括集合合并模块,用于当起始节点到各终点集合的布线路径存在相同的布线路径时,将相同的布线路径对应的终点集合合并成一个集合。
本发明提供了一种FPGA布线装置,该装置通过确定作为布线起点的起始节点,将起始节点对应的各终点节点划分为至少一个终点集合,将一个终点集合作为一个逻辑终点,建立起始节点到各终点集合的布线路径,再将终点集合内的各终点节点连接到该布线路径上,这种布线方式避免针对每一个终点都要建立一条布线路径,使得在尽量少的节点遍历过程中完成布线,提高布线资源的使用效率,从而减小布线冲突,提高布线速度并降低内存开销。
以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。