一种FPGA布局布线的方法、系统及设备与流程

文档序号:17741380发布日期:2019-05-24 20:08阅读:402来源:国知局
一种FPGA布局布线的方法、系统及设备与流程

本申请涉及fpga布局布线领域,特别涉及一种fpga布局布线的方法、系统、设备及计算机可读存储介质。



背景技术:

近年来,机器学习不断兴起,fpga由于具有并行性结构以及相对降低的功耗被广泛使用,其中,cnn卷积神经网络算法等在fpga中实现成为研究热点。算法的加速在fpga中实现通常利用的架构如图1所示。fpga一端通过pcie接口与host主机相连,外部挂着多片ddr等存储器件。其中cnn等算法加速的实现,基于fpga的逻辑部分通常包含pcie部分(包含dma部分)、ddr部分、kernel部分以及板卡其他功能控制部分。其中kernel部分主要是用来实现cnn算法的功能。如何将逻辑在fpga中进行布局布线进行映射以满足时序收敛并且充分利用fpga资源成为关键课题。

现在的解决方法,大部分是自动布局布线,这种方法的缺点是,当逻辑规模较大时,布局布线的结果有时不满足时序收敛,需要人工手动调整,极大的浪费了人力资源,使得布局布线的效率较低。

因此,如何提高fpga中布局布线的效率是本领域技术人员目前需要解决的技术问题。



技术实现要素:

本申请的目的是提供一种fpga布局布线的方法、系统、设备及计算机可读存储介质,用于提高fpga中布局布线的效率。

为解决上述技术问题,本申请提供一种fpga布局布线的方法,该方法包括:

接收输入的布局布线请求;

执行所述布局布线请求对各模块进行布局布线,得到布局布线结果;

判断所述布局布线结果的时序是否收敛;

若未收敛,则根据预设布局布线调整策略对所述布局布线结果进行调整,直至所述布局布线结果的时序收敛;

若收敛,则结束此次布局布线。

可选的,执行所述布局布线请求对各模块进行布局布线,得到布局布线结果,包括:

根据fpga引脚位置划分pcie模块和ddr模块的布局位置区域,并确定所述pcie模块和所述ddr模块的布局位置,得到初始布局;

判断所述初始布局的时序是否收敛;

若否,则对所述pcie模块和所述ddr模块的布局位置进行调整,直至所述初始布局的时序收敛;

若是,则在所述ddr模块的周围为kernel中与ddr存储交互的模块划分布局位置区域,并确定所述与ddr存储交互的模块的布局位置,得到二次布局;

完成所述二次布局内各所述模块的布线,得到所述布局布线结果。

可选的,所述根据fpga引脚位置划分pcie模块和ddr模块的布局位置区域,包括:

调用xilinx或altera的布局布线工具,根据fpga引脚位置为所述pcie模块和所述ddr模块设定相应的物理位置约束。

可选的,在所述结束此次布局布线之后,还包括:

记录当前布局布线次数,并生成布局布线报告。

本申请还提供一种fpga布局布线的系统,该系统包括:

接收模块,用于接收输入的布局布线请求;

布局布线模块,用于执行所述布局布线请求对各模块进行布局布线,得到布局布线结果;

判断模块,用于判断所述布局布线结果的时序是否收敛;

布局布线调整模块,用于当所述布局布线结果的时序未收敛时,根据预设布局布线调整策略对所述布局布线结果进行调整,直至所述布局布线结果的时序收敛;

结束模块,用于当所述布局布线结果的时序收敛时,结束此次布局布线。

可选的,所述布局布线模块包括:

第一布局子模块,用于根据fpga引脚位置划分pcie模块和ddr模块的布局位置区域,并确定所述pcie模块和所述ddr模块的布局位置,得到初始布局;

第一判断子模块,用于判断所述初始布局的时序是否收敛;

调整子模块,用于当所述初始布局的时序不收敛时,对所述pcie模块和所述ddr模块的布局位置进行调整,直至所述初始布局的时序收敛;

第二布局子模块,用于当所述初始布局的时序收敛时,在所述ddr模块的周围为kernel中与ddr存储交互的模块划分布局位置区域,并确定所述与ddr存储交互的模块的布局位置,得到二次布局;

布线子模块,用于完成所述二次布局内各所述模块的布线,得到所述布局布线结果。

可选的,所述第一布局子模块包括:

调用单元,用于调用xilinx或altera的布局布线工具,根据fpga引脚位置为所述pcie模块和所述ddr模块设定相应的物理位置约束。

可选的,所述系统还包括:

记录模块,用于记录当前布局布线次数,并生成布局布线报告。

本申请还提供一种fpga布局布线设备,该fpga布局布线设备包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上述任一项所述fpga布局布线的方法的步骤。

本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述fpga布局布线的方法的步骤。

本申请所提供fpga布局布线的方法,包括:接收输入的布局布线请求;执行布局布线请求对各模块进行布局布线,得到布局布线结果;判断布局布线结果的时序是否收敛;若未收敛,则根据预设布局布线调整策略对布局布线结果进行调整,直至布局布线结果的时序收敛;若收敛,则结束此次布局布线。

本申请所提供的技术方案,先执行接收到的布局布线请求对各模块进行布局布线,得到布局布线结果;然后判断布局布线结果的时序是否收敛;若未收敛,则根据预设布局布线调整策略对布局布线结果进行调整,直至布局布线结果的时序收敛;若收敛,则结束此次布局布线;在面对布局布线结果不满足时序收敛时,本申请不需要用户去手动调整,而是自行根据预设布局布线调整策略对布局布线结果进行调整,避免了人力资源的浪费,同时提高了布局布线的效率。本申请同时还提供了一种fpga布局布线的系统、设备及计算机可读存储介质,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为现有技术中一种fpga的结构示意图;

图2为本申请实施例所提供的一种fpga布局布线的方法的流程图;

图3为图2所提供的一种fpga布局布线的方法中s202的一种实际表现方式的流程图;

图4为本申请实施例提供的一种fpga布局布线结果的示意图;

图5为本申请实施例所提供的一种fpga布局布线的系统的结构图;

图6为本申请实施例所提供的另一种fpga布局布线的系统的结构图;

图7为本申请实施例所提供的一种fpga布局布线设备的结构图。

具体实施方式

本申请的核心是提供一种fpga布局布线的方法、系统、设备及计算机可读存储介质,用于提高fpga中布局布线的效率。

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

请参考图2,图2为本申请实施例所提供的一种fpga布局布线的方法的流程图。

其具体包括如下步骤:

s201:接收输入的布局布线请求;

fpga是目前市场上广泛使用的可编程器件,具有开发周期短和成本低等优点。fpga可以实现各种各样的应用,在fpga设计的cad软件流程中,布局布线是至关重要的一步。布局方法确定了实现电路功能需要的各逻辑单元块在fpga中的位置,它的优化目标是把相连的逻辑单元块靠近放置以最大限度地减少所需要的布线资源,但有时也要平衡fpga中所需要的布线密度或者最大限度提高电路速度。一旦确定了电路中所有逻辑单元块的位置,布线器就可打通合适的可编程开关以连接电路需要的所有逻辑单元块的输入和输出引脚。

基于现有的fpga布局布线的方法大部分是自动布局布线,布局布线的结果不满足时序收敛时,需要人工手动调整,极大的浪费了人力资源,使得布局布线的效率较低,本申请提供了一种fpga布局布线的方法,用于解决上述问题。

s202:执行布局布线请求对各模块进行布局布线,得到布局布线结果;

可选的,当接收到该布局布线请求时,可以根据fpga引脚位置划分各模块的布局位置区域,并对各模块进行布局布线,得到布局布线结果;

具体的,可以调用xilinx或者altera的布局布线工具,根据各模块在fpga引脚的位置画出各模块的布局位置区域,设定相应的约束,然后在该布局位置区域随机选择各模块的位置完成布局,然后进行布线。

s203:判断布局布线结果的时序是否收敛;

若否,则进入步骤s204;若是,则进入步骤s205;

当进行完布局布线以后,判断该布局布线结果的时序是否收敛,如果收敛,则表明该布局布线结果已满足要求,此时进入步骤s205结束此次布局布线。

s204:根据预设布局布线调整策略对布局布线结果进行调整,直至布局布线结果的时序收敛;

当该布局布线结果的时序不收敛时,则根据预设布局布线调整策略对布局布线结果进行调整,直至布局布线结果的时序收敛;

这里提到的预设布局布线调整策略,其具体可以为由用户或生产厂家指定的一种布局布线调整策略,例如:当此次布局不为初次布局时,选定一个或多个模块进行位置移动,包括平移或旋转,每次移动x距离或者顺时针或逆时针旋转a角度;

可选的,该预设布局布线调整策略可以为由用户导入或手动输入的,也可以为系统连接到指定位置下载到的,本申请对预设布局布线调整策略的获取方式不做具体限定;

可选的,当接收到预设布局布线调整策略修改命令时,还可以根据该预设布局布线调整策略修改命令对预设布局布线调整策略进行修改。

s205:结束此次布局布线;

可选的,当结束此次布局布线时,还可以输出布局布线结果,该布局布线结果的输出方式具体可以通过指定路径发送,以使用户能够及时获取到布局布线结果,然后完成整个fpga的生产;

可选的,在结束此次布局布线之后,还可以记录当前布局布线次数,并生成布局布线报告。

基于上述技术方案,本申请所提供的一种fpga布局布线的方法,先执行接收到的布局布线请求对各模块进行布局布线,得到布局布线结果;然后判断布局布线结果的时序是否收敛;若未收敛,则根据预设布局布线调整策略对布局布线结果进行调整,直至布局布线结果的时序收敛;若收敛,则结束此次布局布线;在面对布局布线结果不满足时序收敛时,本申请不需要用户去手动调整,而是自行根据预设布局布线调整策略对布局布线结果进行调整,避免了人力资源的浪费,同时提高了布局布线的效率。

针对于上一实施例的步骤s202,其中所描述的执行布局布线请求对各模块进行布局布线,得到布局布线结果,其具体也可以为如图3所示的步骤,下面结合图3进行说明。

请参考图3,图3为图2所提供的一种fpga布局布线的方法中s203的一种实际表现方式的流程图。

其具体包括以下步骤:

s301:根据fpga引脚位置划分pcie模块和ddr模块的布局位置区域,并确定pcie模块和ddr模块的布局位置,得到初始布局;

这里提到的根据fpga引脚位置划分pcie模块和ddr模块的布局位置区域,其具体可以为:

调用xilinx或altera的布局布线工具,根据fpga引脚位置为pcie模块和ddr模块设定相应的物理位置约束。

s302:判断初始布局的时序是否收敛;

若否,则进入步骤s303;若是,则进入步骤s304;

s303:对pcie模块和ddr模块的布局位置进行调整,直至初始布局的时序收敛;

s304:在ddr模块的周围为kernel中与ddr存储交互的模块划分布局位置区域,并确定与ddr存储交互的模块的布局位置,得到二次布局;

s305:完成二次布局内各模块的布线,得到布局布线结果。

例如,请参考图4,图4为本申请实施例提供的一种fpga布局布线结果的示意图,本申请实施例首先确定布局较大的pcie模块和ddr模块,然后根据pcie在fpga引脚的位置就近画出pcie模块的布局位置进行物理位置约束,根据ddr在fpga引脚的位置就近画出ddr模块的布局位置进行物理位置约束,并对pcie模块和ddr模块进行布局,得到初始布局;然后判断初始布局的时序是否收敛;若否,则对pcie模块和ddr模块的位置进行调整,直至初始布局的时序收敛;若是,则依据预设布局布线调整策略对kernel中与ddr存储交互的模块(如二维卷积部分,会有很多和ddr存储交互的请求)在ddr模块的周围划分布局位置区域,其他部分可以自动打散,不做位置约束,并再次进行布局布线,得到布局布线结果。

请参考图5,图5为本申请实施例所提供的一种fpga布局布线的系统的结构图。

该系统可以包括:

接收模块100,用于接收输入的布局布线请求;

布局布线模块200,用于执行布局布线请求对各模块进行布局布线,得到布局布线结果;

判断模块300,用于判断布局布线结果的时序是否收敛;

布局布线调整模块400,用于当布局布线结果的时序未收敛时,根据预设布局布线调整策略对布局布线结果进行调整,直至布局布线结果的时序收敛;

结束模块500,用于当布局布线结果的时序收敛时,结束此次布局布线。

请参考图6,图6为本申请实施例所提供的另一种fpga布局布线的系统的结构图。

该布局布线模块200可以包括:

第一布局子模块,用于根据fpga引脚位置划分pcie模块和ddr模块的布局位置区域,并确定pcie模块和ddr模块的布局位置,得到初始布局;

第一判断子模块,用于判断初始布局的时序是否收敛;

调整子模块,用于当初始布局的时序不收敛时,对pcie模块和ddr模块的布局位置进行调整,直至初始布局的时序收敛;

第二布局子模块,用于当初始布局的时序收敛时,在ddr模块的周围为kernel中与ddr存储交互的模块划分布局位置区域,并确定与ddr存储交互的模块的布局位置,得到二次布局;

布线子模块,用于完成二次布局内各模块的布线,得到布局布线结果。

该第一布局子模块可以包括:

调用单元,用于调用xilinx或altera的布局布线工具,根据fpga引脚位置为pcie模块和ddr模块设定相应的物理位置约束。

该系统还可以包括:

记录模块,用于记录当前布局布线次数,并生成布局布线报告。

由于系统部分的实施例与方法部分的实施例相互对应,因此系统部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。

请参考图7,图7为本申请实施例所提供的一种fpga布局布线设备的结构图。

该fpga布局布线设备700可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessingunits,cpu)722(例如,一个或一个以上处理器)和存储器732,一个或一个以上存储应用程序742或数据744的存储介质730(例如一个或一个以上海量存储设备)。其中,存储器732和存储介质730可以是短暂存储或持久存储。存储在存储介质730的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对装置中的一系列指令操作。更进一步地,中央处理器722可以设置为与存储介质730通信,在fpga布局布线设备700上执行存储介质730中的一系列指令操作。

fpga布局布线设备700还可以包括一个或一个以上电源727,一个或一个以上有线或无线网络接口750,一个或一个以上输入输出接口758,和/或,一个或一个以上操作系统741,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等等。

上述图2至图4所描述的fpga布局布线的方法中的步骤由fpga布局布线设备基于该图7所示的结构实现。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置、设备和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,功能调用装置,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上对本申请所提供的一种fpga布局布线的方法、系统、设备及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。

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