一种提升运行速度的fpga芯片设计方法

文档序号:8227 发布日期:2021-09-17 浏览:62次 英文

一种提升运行速度的FPGA芯片设计方法

技术领域

本发明涉及FPGA

技术领域

,尤其是一种提升运行速度的FPGA芯片设计方法。

背景技术

FPGA(Field Programmable Gate Array)的设计流程是利用EDA(Electronicdesign automation,电子设计自动化)开发软件和编程工具对FPGA芯片进行开发的过程。EDA开发软件的开发流程主要包括用户设计输入、逻辑综合、装箱布局布线、时序分析和码流生成等操作。其中,逻辑综合过程用于将输入的用户设计(RTL级描述文件)转化为器件网表,主要包括读入、翻译、优化和映射四个过程,第一步读入RTL级描述文件,第二步将RTL级描述文件转换成通用电路(与具体工艺无关),第三步对通用电路根据设计目标优化电路结构,第四步将优化后的电路结构映射到FPGA芯片对应的目标工艺库,选择合适的目标工艺库中的元件来实现优化后的电路结构,从而得到适合该FPGA芯片的器件网表。

在逻辑综合过程中,第一步读入和第二步翻译所消耗的时间与待处理问题规模成正比,第三步优化和第四步映射所消耗的时间随着待处理的问题(实例数目)的规模增大呈指数式增长,随着集成电路规模不断增大,逻辑综合过程的总体运行时间较长,导致FPGA的设计流程过长。

发明内容

本发明人针对上述问题及技术需求,提出了一种提升运行速度的FPGA芯片设计方法,本发明的技术方案如下:

一种提升运行速度的FPGA芯片设计方法,该方法包括:

获取RTL级描述文件,并将RTL级描述文件转换成通用电路;

将通用电路划分为若干个具有连接关系的子电路,每个子电路对应FPGA芯片内的一个硬件区域,每个子电路的逻辑资源总量不超过对应的硬件区域内的逻辑资源总量;

分别对每个子电路进行逻辑优化和器件映射得到每个子电路对应的子网表,每个子网表中包括若干个实例模块以及实例模块之间的网表线网,各个子网表之间存在连接关系;

基于各个子网表在FPGA芯片上进行装箱布局布线得到FPGA芯片的布局布线全局结果,利用布局布线全局结果完成对FPGA芯片的芯片设计。

其进一步的技术方案为,FPGA芯片为多裸片FPGA,FPGA芯片内部包括若干个相连的FPGA裸片,则FPGA芯片的每个硬件区域分别表示一个FPGA裸片,各个子电路的逻辑资源总量相同或不同。

其进一步的技术方案为,FPGA芯片为单裸片FPGA,FPGA芯片内部包括一个FPGA裸片,则FPGA芯片的各个硬件区域分别表示同一个FPGA裸片上的不同区域,各个子电路的逻辑资源总量相同或不同。

其进一步的技术方案为,基于各个子网表在FPGA芯片上进行装箱布局布线得到FPGA芯片的布局布线全局结果,包括:

将各个子网表合并形成针对FPGA裸片的全局网表,基于全局网表在FPGA裸片上进行装箱布局布线得到布局布线全局结果。

其进一步的技术方案为,基于各个子网表在FPGA芯片上进行装箱布局布线得到FPGA芯片的布局布线全局结果,包括:

分别基于每个子网表在各自对应的硬件区域内进行装箱布局得到对应的布局子结果;

将各个布局子结果合并形成针对FPGA裸片的全局布局结果;

基于全局布局结果在FPGA裸片上进行布线得到布局布线全局结果。

其进一步的技术方案为,基于各个子网表在FPGA芯片上进行装箱布局布线得到FPGA芯片的布局布线全局结果,包括:

分别基于每个子网表在各自对应的硬件区域内进行装箱布局布线得到对应的布局布线子结果;

将各个布局布线子结果合并形成FPGA芯片的布局布线全局结果。

其进一步的技术方案为,将通用电路划分为若干个具有连接关系的子电路,包括:

根据RTL级描述文件确定通用电路的层次结构,层次结构指示通用电路中的门级元件例化形成的不同子模块之间的关系,沿着层次结构从最顶层至最底层的方向,每个子模块分别包括位于下一层次的一个或多个子模块直至到达最底层的子模块,最底层的子模块包括一个或多个门级元件;

确定每个子模块的逻辑资源需求量,每个子模块的逻辑资源需求量为其包含的所有子模块的逻辑资源需求量之和;

根据各个子模块的逻辑资源需求量以及各个子电路的逻辑资源总量按照预定算法将每个子模块划分到对应的子电路中,在将一个子模块划分到对应的子电路中时,将子模块包含的所有子模块都划分到对应的子电路中,每个子电路的逻辑资源总量满足划分到子电路中的所有子模块的逻辑资源需求量之和。

其进一步的技术方案为,当FPGA芯片为多裸片FPGA时,每个子电路的跨电路信号总量满足划分到子电路中的所有子模块的跨电路信号需求之和,跨电路信号包括连接到其他子电路的输入信号和输出信号。

其进一步的技术方案为,按照预定算法将每个子模块划分到对应的子电路中,包括:

基于贪心算法按照预定遍历顺序依次遍历所有子模块,将各个子模块划分到对应的子电路中。

其进一步的技术方案为,该方法还包括:

从通用电路的层次结构中最顶层的子模块开始,使用拓扑排序算法确定预定遍历顺序,在预定遍历顺序中,每个子模块的遍历顺序总是先于其包含的下一层次的子模块。

其进一步的技术方案为,使用的拓扑排序算法为BFS算法。

其进一步的技术方案为,使用的拓扑排序算法为DFS算法。

其进一步的技术方案为,按照预定算法将每个子模块划分到对应的子电路中,包括:

利用全部子模块对第一个子电路进行0-1背包算法求解,确定第一个子电路对应的各个子模块;

利用剩余未划分的子模块对第i+1子电路进行0-1背包算法求解确定第i+1子电路对应的各个子模块,i为参数且i的起始值为1;

令i=i+1并再次执行利用剩余未划分的子模块对第i+1子电路进行0-1背包算法求解的步骤,直到遍历完所有的子电路。

其进一步的技术方案为,确定每个子模块的逻辑资源需求量,包括:

对子模块包含的所有子模块的逻辑资源需求量相加得到子模块的逻辑资源需求量;

或者,扁平化子模块确定子模块的逻辑资源需求量。

其进一步的技术方案为,位于最底层的每个子模块分别包括一个门级元件。

本发明的有益技术效果是:

本申请公开了一种提升运行速度的FPGA芯片设计方法,该方法优化了FPGA芯片的设计流程,尤其是优化了逻辑综合过程,在逻辑综合过程中,将将RTL级描述文件转换成通用电路后,首先进行电路结构的拆分,再对划分得到的若干个子电路分别进行逻辑优化和器件映射,使得不再针对电路规模较大的通用电路整体进行处理,而是分别处理多个小规模的电路结构,可以减少总体消耗时间,缩短FPGA的设计时长,尤其适用于大规模的FPGA芯片比如多裸片FPGA。

附图说明

图1是本申请公开的FPGA芯片设计方法的流程图。

图2是该方法应用在多裸片FPGA的场景下的一个实施例的方法流程图。

图3是该方法应用在单裸片FPGA的场景下的一个实施例的方法流程图。

图4是本申请将通用电路划分为若干个子电路的流程示意图。

具体实施方式

下面结合附图对本发明的具体实施方式做进一步说明。

本申请公开了一种提升运行速度的FPGA芯片设计方法,请参考图1所示的流程图,该方法包括如下步骤:

步骤S1,获取RTL级描述文件,并将RTL级描述文件转换成通用电路。这一步也就是读入RTL级描述文件进行翻译的步骤,与常规的FPGA芯片设计的逻辑综合过程中的读入和翻译的操作相同,因此本申请不再展开。

步骤S2,将通用电路划分为若干个具有连接关系的子电路,每个子电路对应FPGA芯片内的一个硬件区域。

其中,各个硬件区域的区域范围相同或不同,各个硬件区域内的逻辑资源总量相同或不同。每个子电路的逻辑资源总量不超过对应的硬件区域内的逻辑资源总量,各个子电路的逻辑资源总量相同或不同。

在常规的FPGA芯片设计的逻辑综合过程中,在翻译形成通用电路后,直接进行全芯片的逻辑优化和器件映射,本申请则不这样操作,而是先对通用电路进行拆分,得到多个规模较小的子电路。

步骤S3,分别对每个子电路进行逻辑优化和器件映射得到每个子电路对应的子网表,每个子网表中包括若干个实例模块以及实例模块之间的网表线网,各个子网表之间存在连接关系。

逻辑优化和器件映射的具体操作与常规的FPGA芯片设计的逻辑综合过程中的逻辑优化和器件映射的操作相同,本申请不再展开。本申请与常规的芯片设计流程不同的是,常规针对电路规模较大的通用电路整体进行逻辑优化和器件映射,而本申请针对电路规模较小的各个子电路分别进行逻辑优化和器件映射,因此即便对各个子电路依次处理,所有子电路完成逻辑优化和器件映射的总时长也远小于对整个通用电路直接完成逻辑优化和器件映射的时长。而且这多个子电路的逻辑优化和器件映射可以并行操作,消耗的时长进一步减小。

步骤S4,基于各个子网表在FPGA芯片上进行装箱布局布线得到FPGA芯片的布局布线全局结果,利用布局布线全局结果完成对FPGA芯片的芯片设计。布局布线全局结果也即针对整个FPGA芯片的布局布线结果,在得到布局布线全局结果后,通常会还包括时序分析和码流生成等操作才能最终完成芯片设计,这些后续操作与常规的操作都类似,因此本申请不再展开。

在本申请中,需要进行芯片设计的FPGA芯片为多裸片FPGA或单裸片FPGA,多裸片FPGA内部包括若干个相连的FPGA裸片,单裸片FPGA内部包括一个FPGA裸片。本申请在应用于多裸片FPGA和单裸片FPGA时,具体实现方法存在一些区别,本申请通过如下两个实施例分别对两种情况进行介绍:

一、FPGA芯片为多裸片FPGA。芯片设计方法包括如下步骤,请参考图2所示的流程图:

步骤1-1,获取RTL级描述文件,并将RTL级描述文件转换成通用电路。

步骤1-2,将通用电路划分为若干个具有连接关系的子电路,每个子电路对应FPGA芯片内的一个硬件区域。

在该实施例中,为了便于实现,FPGA芯片的每个硬件区域分别表示一个FPGA裸片,则每个子电路的逻辑资源总量不超过对应的FPGA裸片内的逻辑资源总量,各个FPGA裸片包含的逻辑资源总量相同或不相同,各个子电路的逻辑资源总量相同或不同。

需要说明的是,在实际实现时,硬件区域也可以不与FPGA裸片对应,一个硬件区域可以包含一个FPGA裸片内的部分区域,或者一个硬件区域包含多个FPGA裸片内的区域,虽然会一定程度上增加后续操作难度,但是同样可以适用于该实施例提供的技术方案。

步骤1-3,分别对每个子电路进行逻辑优化和器件映射得到每个子电路对应的子网表。

步骤1-4,分别基于每个子网表在各自对应的硬件区域内进行装箱布局布线得到对应的布局布线子结果,也即在各自对应的FPGA裸片上进行装箱布局布线得到对应的布局布线子结果。在每个FPGA裸片上进行装箱布局布线的操作与现有的装箱布局布线的操作相同,本申请不再展开。

步骤1-5,将各个布局布线子结果合并形成FPGA芯片的布局布线全局结果。各个子电路之间存在连接关系,对应形成的各个子网表也存在连接关系,而多裸片FPGA内部的不同FPGA裸片之间也存在固有的物理传输线路,因此根据子网表之间的连接关系和FPGA裸片之间的物理传输线路就可以确定不同FPGA裸片之间的信号的连接关系,从而合并形成FPGA芯片的布局布线全局结果。

步骤1-6,然后再利用布局布线全局结果完成对FPGA芯片的芯片设计。

二、FPGA芯片为单裸片FPGA。芯片设计方法包括如下步骤,请参考图3所示的流程图:

步骤2-1,获取RTL级描述文件,并将RTL级描述文件转换成通用电路。

步骤2-2,将通用电路划分为若干个具有连接关系的子电路,每个子电路对应FPGA芯片内的一个硬件区域,各个硬件区域分别表示同一个FPGA裸片上的不同区域,各个硬件区域内的逻辑资源总量相同或不同,相应地各个子电路的逻辑资源总量相同或不同。通常会配置各个硬件区域内的逻辑资源总量以及各个子电路的逻辑资源总量基本大致相同,从而使得在对每个子电路进行逻辑优化和器件映射时的消耗时长基本均衡,使得消耗的总时长较短。

步骤2-3,分别对每个子电路进行逻辑优化和器件映射得到每个子电路对应的子网表。

步骤2-4,基于各个子网表在所述FPGA芯片上进行装箱布局布线得到FPGA芯片的布局布线全局结果,对于单裸片FPGA,该步骤可以采用如下三种方法中的任一种实现:

方法一,与多裸片FPGA类似,分别基于每个子网表在各自对应的硬件区域内进行装箱布局布线得到对应的布局布线子结果后,将各个布局布线子结果合并形成所述FPGA芯片的布局布线全局结果。

虽然理论上也可以这样实现,但是实际操作比较大,这是因为装箱布局布线需要根据底层资源模板的模型。在上述多裸片FPGA的实施例中,每个子网表在各自对应的FPGA裸片上进行装箱布局布线时,使用的底层资源模板以一个FPGA裸片为单位、较易描述。而在该实施例中,若要先基于单个子网表在FPGA裸片内部的一个硬件区域上进行装箱布局布线,则需要对FPGA裸片内的资源再分割、以单个硬件区域为单位构建并描述相应的底层资源模板,由于FPGA裸片内的绕线资源具有连续性,很难清晰切割,因此在单个硬件区域内装箱布局布线的实现难度较大而且效果也不够理想,尤其是在布线时难度较大。

方法二、分别基于每个子网表在各自对应的硬件区域内进行装箱布局得到对应的布局子结果,也即在每个硬件区域内首先进行装箱和布局,但不做布线。然后将各个布局子结果合并形成针对FPGA裸片的全局布局结果。最后基于全局布局结果在FPGA裸片上进行布线得到布局布线全局结果。

如方法一所述,在FPGA裸片内单个硬件区域中进行装箱布局布线时主要是布线操作难度较大,因此该方法首先在每个硬件区域内分别执行易于实现的装箱和布局,而不做难度较大的布线,合并后再以整个FPGA裸片为单位进行布线,这一相比于方法一可以缩短整体运行时间。

方法三、直接将各个子网表合并形成针对FPGA裸片的全局网表,基于全局网表在FPGA裸片上进行装箱布局布线得到布局布线全局结果。

步骤2-5,然后再利用布局布线全局结果完成对FPGA芯片的芯片设计。

无论是在上述哪个实施例中,都需要将通用电路划分为若干个子电路,在不同的实施例中,划分的方法是类似的,包括如下步骤,请参考图4所示的流程图:

步骤3-1,根据RTL级描述文件确定通用电路的层次结构,通用电路是在未映射到查找表前形成的与具体工艺无关的、以门级元件表达的电路结构,通用电路的层次结构在读入的RTL级描述文件中已经定义。层次结构指示通用电路中的门级元件例化形成的不同子模块之间的关系,沿着层次结构从最顶层至最底层的方向,每个子模块分别包括位于下一层次的一个或多个子模块直至到达最底层的子模块。

可选的,位于最底层的一个子模块分别包括一个门级元件,比如层次结构如下所示:

(a)顶层设计A包含子模块B和子模块C;

(b)子模块B包含子模块D和子模块E,子模块C包含子模块F和子模块G。子模块F包括门级元件OR2(两输入或门),子模块G包括门级元件AND2(两输入与门)。

(c)子模块D包含子模块D1和子模块D2,子模块E包含子模块E1和子模块E2。子模块D1包括门级元件INV(非门),子模块D2包括门级元件AND2。子模块E1包括AND2,子模块E2包括AND2。

则在上述举例中,子模块F、G、D1、D2、E1和E2均为最底层的子模块,每个最底层的子模块分别包括一个门级元件。

可选的,位于最底层的一个子模块包括多个门级元件,比如以上述举例为例,形成的层次结构如下所示:

(a)顶层设计A包含子模块B和子模块C;

(b)子模块B包含子模块D和子模块E,子模块C包含子模块F和子模块G。子模块D包含一个INV和一个AND2,子模块E包含两个AND2,子模块F包括OR2,子模块G包括AND2。

则在上述举例中,子模块D、E、F和G均为最底层的子模块,其中子模块F和G分别包括一个门级元件。而子模块D和E分别包括多个门级元件。

由上可知,将通用电路的层次结构中哪一个从哪个层次的子模块作为最底层的子模块是可以自行配置的,而且层次结构中最底层的子模块存在仅包含一个门级元件的子模块和/或存在包含多个门级元件的子模块。

步骤3-2,确定每个子模块的逻辑资源需求量,每个子模块的逻辑资源需求量为其包含的所有子模块的逻辑资源需求量之和。比如以上述举例的层次结构为例,由于子模块B包含子模块D和子模块E,因此子模块B的逻辑资源需求量为子模块D和E的逻辑资源需求量之和,而子模块D进一步包含子模块D1和子模块D2,因此子模块D的逻辑资源需求量为子模块D1和D2的逻辑资源需求量之和,其他依次类推。

可以采用如下两种方法来确定子模块的逻辑资源需求量:对子模块包含的所有子模块的逻辑资源需求量相加得到子模块的逻辑资源需求量。或者,直接扁平化子模块确定子模块的逻辑资源需求量。

步骤3-3,根据各个子模块的逻辑资源需求量以及各个子电路的逻辑资源总量按照预定算法将每个子模块划分到对应的子电路中。

在将一个子模块划分到对应的子电路中时,将子模块包含的所有子模块都划分到对应的子电路中。比如由于子模块B包含子模块D和子模块E,则在将子模块B划分到对应的子电路中时,将子模块D及其包含的所有子模块以及子模块E及其包含的所有子模块都划分到对应的子电路,也即对于通用电路所形成的树形结构的层次结构来说,将子模块B所在分支全部划分到对应的子电路。

不管是在多裸片FPGA的实施例中还是在单裸片FPGA的实施例中,每个子电路的逻辑资源总量满足划分到子电路中的所有子模块的逻辑资源需求量之和,也即在将一个子模块划分到对应的子电路中时,该子电路中剩余的逻辑资源总量必须大于等于该子模块的逻辑资源需求量,否则不能将子模块划分到子电路中。

在多裸片FPGA的实施例中,除了逻辑资源数量需要满足上述要求之外,每个子电路的跨电路信号总量满足划分到子电路中的所有子模块的跨电路信号需求之和,跨电路信号包括连接到其他子电路的输入信号和输出信号。这是因为子电路之间的跨电路信号需要由对应的硬件区域之间的物理传输线路来实现,而在多裸片FPGA的实施例中,子电路之间的跨电路信号相应的由不同FPGA裸片之间的连接通道来实现,而不同FPGA裸片之间的连接通道数量有限,因此子电路之间的跨电路信号总量也有限、不能超出对应FPGA裸片之间的连接通道数量。因此划分到子电路的各个子模块的跨电路信号需求之和需要小于等于子电路的跨电路信号总量,具体的需要保证输入信号和输出信号分别满足,也即划分到子电路的各个子模块的输入信号需求之和小于等于子电路的输入信号总量,同时,各个子模块的输出信号需求之和小于等于子电路的输出信号总量。

(1)在一个实施例中,所采用的预定算法为贪心算法,则基于贪心算法按照预定遍历顺序依次遍历所有子模块,将各个子模块划分到对应的子电路中。

在该实施例中需要确定对子模块的遍历顺序,该实施例从通用电路的层次结构中最顶层的子模块开始,使用拓扑排序算法确定预定遍历顺序,在预定遍历顺序中,每个子模块的遍历顺序总是先于其包含的下一层次的子模块,比如在上述举例中,由于子模块B包含子模块D和子模块E,因此子模块B的遍历顺序总是先于D和E。

可选的,使用的拓扑排序算法为BFS(Breadth-First Search)算法。或者可选的,使用的拓扑排序算法为DFS算法。

(2)在另一个实施例中,所采用的预定算法为0-1背包算法,则利用全部子模块对第一个子电路进行0-1背包算法求解,确定第一个子电路对应的各个子模块。利用剩余未划分的子模块对第i+1子电路进行0-1背包算法求解确定第i+1子电路对应的各个子模块,i为参数且i的起始值为1;令i=i+1并再次执行利用剩余未划分的子模块对第i+1子电路进行0-1背包算法求解的步骤,直到遍历完所有的子电路。

以上所述的仅是本申请的优选实施方式,本发明不限于以上实施例。可以理解,本领域技术人员在不脱离本发明的精神和构思的前提下直接导出或联想到的其他改进和变化,均应认为包含在本发明的保护范围之内。

完整详细技术资料下载
上一篇:石墨接头机器人自动装卡簧、装栓机
下一篇:一种基于深度学习的芯片供电网络凸快电流估算方法及系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类