一种基于实例逻辑关联性实现的FPGA装箱方法与流程

文档序号:33290143发布日期:2023-02-28 18:53阅读:119来源:国知局
一种基于实例逻辑关联性实现的FPGA装箱方法与流程
一种基于实例逻辑关联性实现的fpga装箱方法
技术领域
1.本发明涉及fpga领域,尤其是一种基于实例逻辑关联性实现的fpga装箱方法。


背景技术:

2.fpga(field programmable gate array,现场可编程逻辑门阵列)的设计流程主要包括综合、装箱、布局、布线、码流生成等多个步骤。其中,装箱阶段将综合后的网表中的实例按照fpga的硬件资源分成多个箱,使得每个箱可以对应fpga内部的一个硬件的资源单元,比如对应一个slice单元,同时需要满足资源的约束条件,以确保此箱的逻辑可在此片上硬件资源单元内实现。然后在布局阶段再把每个箱对应到fpga内部特定位置的资源单元,并满足约束及特定目标,如时序及布线的布通率。
3.目前装箱阶段的做法通常是:先在网表的实例中选定种子实例,每个种子实例形成一个箱,然后根据实例之间的连接性关联度,将网表中剩余未放入箱中的实例中、与此箱中已有的实例的连接性关联度最大的实例加入到此箱中,重复执行这一过程,直到此箱中的资源已被箱中实例占满或特定约束不再满足而无法在加入任何实例为例。然后再继续处理下一个选定的种子实例,直到网表中所有实例都被装进箱中即结束。在这一过程中,具有连接关系的实例之间的连接性关联度较大,而直接相连的实例之间的连接性关联度最大,装箱原则比较单一,往往并不能达到较好的装箱效果,继而影响了后续布局布线的效果,并影响整个fpga设计流程的周期和效率。


技术实现要素:

4.本技术人针对上述问题及技术需求,提出了一种基于实例逻辑关联性实现的fpga装箱方法,本技术的技术方案如下:
5.一种基于实例逻辑关联性实现的fpga装箱方法,该方法包括:
6.确定待装箱逻辑网表中属于同一个关联实例组的待装箱实例,待装箱实例是逻辑网表中尚未被装入任何一个箱内的实例,属于同一个关联实例组的多个待装箱实例位于同一数据路径中而具有逻辑关联性;
7.以一个关联实例组为单位、对关联实例组中的所有待装箱实例进行统一装箱。
8.其进一步的技术方案为,属于同一个关联实例组的多个待装箱实例之间不存在连接关系。
9.其进一步的技术方案为,确定待装箱逻辑网表中属于同一个关联实例组的待装箱实例的方法包括:
10.根据所有待装箱实例的实例名称确定属于同一个关联实例组的多个待装箱实例。
11.其进一步的技术方案为,根据所有待装箱实例的实例名称确定属于同一个关联实例组的多个待装箱实例,包括:
12.解析各个待装箱实例的实例名称并识别实例名称中包含的预定分隔符,实例名称中位于预定分隔符之前的部分为名称类型,实例名称中位于预定分隔符之后的部分为名称
后缀;
13.确定属于同一个关联实例组的多个待装箱实例的名称类型均相同,属于不同关联实例组的任意两个待装箱实例的名称类型不同。
14.其进一步的技术方案为,确定属于同一个关联实例组的多个待装箱实例的方法包括:
15.将名称类型相同、且名称后缀为纯数字字符串的多个待装箱实例归属到同一个关联实例组。
16.其进一步的技术方案为,根据待装箱实例的实例名称确定属于同一个关联实例组的多个待装箱实例的方法包括:
17.根据实例类型属于寄存器的待装箱实例的实例名称确定属于同一个关联实例组的多个待装箱实例。
18.其进一步的技术方案为,对一个关联实例组中的所有待装箱实例进行统一装箱的方法包括:
19.当一个箱内的装箱资源满足关联实例组中的所有待装箱实例的资源需求时,将关联实例组中的所有待装箱实例均装入同一个箱内,一个关联实例组占用一个箱;
20.当关联实例组中的所有待装箱实例的资源需求超过一个箱内的装箱资源时,在满足一个箱内的装箱资源的约束条件下在关联实例组中随机选取部分待装箱实例装入一个箱内、在剩余的待装箱实例中机选取部分待装箱实例装入另一个箱内,直至将关联实例组中所有待装箱实例都装入对应的箱内,一个关联实例组占用多个箱。
21.其进一步的技术方案为,一个关联实例组包括多个子实例组,每个子实例组分别对应一个寄存器类型,不同的子实例组对应不同的寄存器类型,每个子实例组包括关联实例组中属于对应的寄存器类型的一个或多个待装箱实例;
22.对关联实例组中的所有待装箱实例进行统一装箱的方法包括对于每个子实例组:
23.当一个箱内的装箱资源满足子实例组中的所有待装箱实例的资源需求时,将子实例组中的所有待装箱实例均装入同一个箱内,子实例组占用一个箱;
24.当子实例组中的所有待装箱实例的资源需求超过一个箱内的装箱资源时,在满足一个箱内的装箱资源的约束条件下在子实例组中随机选取部分待装箱实例装入一个箱内、在剩余的待装箱实例中机选取部分待装箱实例装入另一个箱内,直至将子实例组中所有待装箱实例都装入对应的箱内,子实例组占用多个箱;
25.不同的子实例组中的待装箱实例占用不同的箱。
26.其进一步的技术方案为,不同关联实例组中的待装箱实例分别装入不同的箱内。
27.其进一步的技术方案为,该方法还包括:
28.将实例名称中不包含预定分隔符,或者,实例名称中包含预定分隔符但名称后缀不是纯数字字符串的待装箱实例作为独立待装箱实例,独立待装箱实例是待装箱逻辑网表中不属于任何一个关联实例组的待装箱实例;
29.对所有关联实例组完成装箱后,对逻辑网表中剩余的独立待装箱实例按照连接性关联度从大到小的顺序依次装箱,当存在至少两个相同的连接性关联度时,按照时序关键度优先对关键度高的独立待装箱实例装箱。
30.其进一步的技术方案为,该方法还包括:
31.对待装箱逻辑网表中所有待装箱实例完成装箱得到装箱结果后,当所有装箱结果的总资源需求超过fpga提供的总硬件资源时,对未装满的箱进行合并,且存在至少一个装有属于关联实例组的待装箱实例且未装满的箱与装有独立待装箱实例且未装满的箱合并。
32.本技术的有益技术效果是:
33.本技术公开了一种基于实例逻辑关联性实现的fpga装箱方法,该方法按照逻辑关联性对待装箱实例进行分组,对位于同一数据路径中而具有逻辑关联性的待装箱实例进行统一装箱,从而尽可能集中分在相同的箱内,可使各个逻辑关联的待装箱实例形成的箱与数据路径的数据流向相合,达到最有效,最优化的安排,从而优化了装箱结果,继而提升后续设计流程的效率,缩短整个设计流程。
附图说明
34.图1是本技术一个实施例的fpga装箱方法的方法流程图。
35.图2是本技术一个实施例中将待装箱实例归属到对应的关联实例组或归属为独立待装箱实例的逻辑示意图。
具体实施方式
36.下面结合附图对本技术的具体实施方式做进一步说明。
37.本技术公开了一种基于实例逻辑关联性实现的fpga装箱方法,请参考图1所示的流程图,该方法包括如下步骤:
38.步骤s1,获取待装箱逻辑网表,获取到的待装箱逻辑网表中包含若干个待装箱实例,待装箱实例是逻辑网表中尚未被装入任何一个箱内的实例。
39.在本技术中,待装箱逻辑网表是对用户设计对应的逻辑网表经过综合处理以及装箱预处理后的逻辑网表。综合处理是在综合阶段执行的操作,本技术对此不作展开介绍。综合后逻辑网表传入装箱阶段,为了方便装箱代码处理的一致性,一般首先要对综合后逻辑网表进行装箱预处理,包括执行如下几类装箱预处理:
40.(1)对综合后逻辑网表中的部分实例进行逻辑等价替换。常见的包括如下几种情况:对综合后逻辑网表中的mux单元进行逻辑等价替换为查找表lut。将综合后逻辑网表中多种表现形式的进位链统一逻辑等价替换为采用mux和xor的形式。根据fpga的片上硬件资源单元来说,输入端口存在iob资源和bufg资源,因此将综合后逻辑网表中的实例bufgp用实例ibufg和实例bufg替换,实例ibufg对应于fpga的iob资源,实例bufg对应于fpga的bufg资源。
41.(2)对综合后逻辑网表中的线网进行逻辑优化。常见的包括如下几种情况:对综合后逻辑网表中的查找表lut输入端冗余线网进行逻辑优化。以及对综合后逻辑网表中的其他宏模块进行一系列连接关系的预处理,常见的宏模块包括时钟模块、iob模块、bram模块和dsp模块等。
42.在装箱阶段对综合后逻辑网表进行装箱预处理操作得到初始装箱网表后,即可以开始进行装箱流程,装箱的目的也即将初始装箱网表中的所有实例都装入各自对应的箱中,该箱的资源和连接规格均要满足fpga片上硬件基本单元的要求。譬如常见的,将每个箱对应到fpga片上硬件基本单元slicel,一个slicel由lut(查找表)、mux(多路选择器)、
carry4(进位链)和ff(寄存储器)组成,其中mux对应初始装箱网表中muxf7实例和muxf8实例。carry4用于实现加法和减法运行,在初始装箱网表中有两种表现形式,一种是carry4的实例,另外一种是对应4对muxcy实例和xorcy(异或门)实例,对应初始装箱网表中的寄存器实例和锁存器实例。
43.在对初始装箱网表中的实例进行装箱时,有一些实例较为特殊,一般需要优先进行装箱,包括如下几类:
44.(1)有特定用户约束的特殊实例。用户对部分特殊实例指定了用户约束,则对这些特殊实例进行优先装箱,以用户约束的实例为处理对象,根据对象的类型和连接关系以片上硬件资源内部的资源进行装箱。
45.(2)宏模块。根据各类宏模块的特殊性依次对初始装箱网表中的宏模块进行分类分别映射装箱。
46.(3)其他特殊实例,比如一些有特殊连接和特殊位置的实例。常见的其他特殊实例包括muxf7实例、muxf8实例、muxcy实例和xorcy实例,对这些特殊实例根据连接关系进行装箱。
47.在本技术所实现的装箱方法中,这些特殊实例仍然按照现有的方法进行优先装箱,本技术的装箱方法主要针对的是除这些特殊实例以外的其他实例,因此更进一步的,该步骤获取到的待装箱逻辑网表是对传入装箱阶段的综合后逻辑网表进行装箱预处理操作得到初始装箱网表后,对初始装箱网表中的特殊实例完成装箱后的逻辑网表,此时的待装箱逻辑网表的逻辑实现和表现形式均以lut(查找表)和ff(寄存器)的复杂连接构成,因此待装箱逻辑网表中的待装箱实例的实例类型为查找表lut或寄存器ff,这些待装箱实例的连接关系也是千变万化,没有固定的规律可循,装箱结果的好坏很大程度上与lut和ff的装箱方式密切相关。
48.步骤s2,确定待装箱逻辑网表中属于同一个关联实例组的待装箱实例。
49.属于同一个关联实例组的多个待装箱实例位于同一数据路径中而具有逻辑关联性。但是属于同一个关联实例组的多个待装箱实例之间往往不存在连接关系或者连接性关联度不强。位于同一数据路径中的多个待装箱实例比如位于同一组总线信号上的各路信号对应的实例,比如总线信号q[7:0]中的q[7]和q[6]各自对应的实例具有逻辑关联性。
[0050]
每个关联实例组包含至少两个待装箱实例。待装箱逻辑网表中的所有待装箱实例可以归属到一个或多个关联实例组中。每个待装箱实例归属到一个对应的关联实例组中,除了归属到各自对应的关联实例组中的待装箱实例之外,待装箱逻辑网表中往往还包括若干个独立待装箱实例,独立待装箱实例是指待装箱逻辑网表中不属于任何一个关联实例组的待装箱实例。
[0051]
确定属于同一个关联实例组的待装箱实例的方法是:遍历待装箱逻辑网表中的所有待装箱实例,并解析各个待装箱实例的实例名称,然后根据所有待装箱实例的实例名称确定属于同一个关联实例组的多个待装箱实例。如上所述,本技术中的待装箱逻辑网表中的待装箱实例的实例类型包括两种:查找表和寄存器。该步骤在确定属于同一个关联实例组的待装箱实例时,遍历其中实例类型属于寄存器的待装箱实例,并解析实例类型属于寄存器的各个待装箱实例的实例名称,然后确定属于同一个关联实例组的多个待装箱实例。因此确定得到的各个关联实例组中的待装箱实例的实例类型都属于寄存器。
[0052]
根据待装箱实例的实例名称划分关联实例组的方法包括,请参考图2:
[0053]
(1)解析各个待装箱实例的实例名称并识别实例名称中包含的预定分隔符,实例名称中位于预定分隔符之前的部分为名称类型,实例名称中位于预定分隔符之后的部分为名称后缀。
[0054]
位于同一数据路径中的多个待装箱实例的实例名称具有特定的格式,都包含名称类型、预定分隔符和名称后缀三部分,且位于同一数据路径中的多个待装箱实例的名称类型均相同,比如总线信号q[7:0]中的q[7]、q[6]
……
q[0]各自对应的实例的实例名称分别为q_7、q_6
……
q0。
[0055]
对于任意一个遍历到的待装箱实例,当解析该待装箱实例的实例名称并确定实例名称中不包含预定分隔符时,可以直接确定该待装箱实例是独立待装箱实例。
[0056]
(2)在解析完所有待装箱实例的实例名称后,按照各个待装箱实例的名称类型进行分类。因此确定得到的属于同一个关联实例组的多个待装箱实例的名称类型均相同,属于不同关联实例组的任意两个待装箱实例的名称类型不同。
[0057]
位于同一数据路径中的多个待装箱实例除了名称类型均相同之外,名称后缀也有特征,名称后缀均为纯数字字符串。因此除了要保证属于同一个关联实例组的多个待装箱实例的名称类型均相同之外,还需要保证各个关联实例组中的待装箱实例的名称后缀均为纯数字字符串,则在对实例名称进行解析后,将名称类型相同、且名称后缀为纯数字字符串的多个待装箱实例归属到同一个关联实例组。
[0058]
则对于任意一个待装箱实例,当该待装箱实例的实例名称中包含预定分隔符但名称后缀不是纯数字字符串时,也可以直接将该待装箱实例作为独立待装箱实例。
[0059]
步骤s3,通过步骤s2可以确定得到一个或多个关联实例组,然后以一个关联实例组为单位、对关联实例组中的所有待装箱实例进行统一装箱,尽可能将同一个关联实例组中的所有待装箱实例装入同一个或多个箱内。在按照常规装箱方法基于连接性关联度进行装箱时,这些位于同一数据路径中而具有逻辑关联性的待装箱实例往往不会被装在同一个箱内,但是这些待装箱实例属同一数据流,当装在同一箱中时可使各相关的实例形成的箱与数据流向相合,达到最有效,最优化的安排。
[0060]
在具体应用中,同样的寄存器实现方式不同,最终综合出来的实例类型属于寄存器的待装箱实例的寄存器类型也可能不同,装入同一个箱中的待装箱实例的寄存器类型也要保持一致。常见的寄存器类型包括fd、fdre、fdce等。
[0061]
则在一个实例中,当一个关联实例组中的所有待装箱实例的寄存器类型均相同时,对该关联实例组中的待装箱实例进行统一装箱的方法包括:当一个箱内的装箱资源满足该关联实例组中的所有待装箱实例的资源需求时,将该关联实例组中的所有待装箱实例均装入同一个箱内,该关联实例组占用一个箱。当该关联实例组中的所有待装箱实例的资源需求超过一个箱内的装箱资源时,在满足一个箱内的装箱资源的约束条件下在关联实例组中随机选取部分待装箱实例装入一个箱内、在剩余的待装箱实例中机选取部分待装箱实例装入另一个箱内,直至将关联实例组中所有待装箱实例都装入对应的箱内,一个关联实例组占用多个箱。
[0062]
在上述装箱过程中也需要满足一个箱内的装箱资源,这部分与常规的装箱算法需要满足的装箱约束是类似的,本技术不展开描述。比如在实际应用时,通常将4个待装箱实
例为一组装入一个箱内,这样不会导致一个箱装的过满而降低后期布局的灵活性和布线的效率以及可行性。则当一个关联实例组中包含不超过4个待装箱实例时,将其都装入一个箱内。当一个关联实例组中包含不超过8个待装箱实例时,将其中4个待装箱实例装入一个箱内,剩余的待装箱实例装入另一个箱内,以此类推。
[0063]
在上述装箱过程中,在关联实例组中随机选取部分待装箱实例装入一个箱内,因为在设计应用时,同一数据路径中的多个待装箱实例可能分开进行不同逻辑运算,也可能按照预定的顺序对多个待装箱实例使用,因此同一个关联实例组中的多个待装箱实例的应用情况是不可预估的,没有办法针对应用情况来选择特定的若干个待装箱实例装入一个箱内,为了适应各种设计,采用随机装箱的效果更佳。
[0064]
在对一个关联实例组中的待装箱实例进行统一装箱后,最后一个装入的箱可能全部装满,也可能未装满。比如以4个待装箱实例装入一个箱内为例,在一个实例中,对应于总线信号q[7:0]、属于同一个关联实例组中的8个待装箱实例q_7、q_6
……
q_0的寄存器类型都是fd,则将该关联实例组装入两个箱内且两个箱都装满。在另一个实例中,对应于总线信号p[5:0]、属于同一个关联实例组中的6个待装箱实例p_7、p_6
……
p_0的寄存器类型都是fdre,则在其中随机选取4个待装箱实例在装满一个箱后,仅在第二箱内装有2个待装箱实例而未装满。即便未装满,该已经装有关联实例组中的待装箱实例的箱内也不再装入其他关联实例组中的待装箱实例,将其他关联实例组中的待装箱实例装入新的箱内。则不同关联实例组中的待装箱实例分别装入不同的箱内,不会在同一个箱内装多个关联实例组中的待装箱实例,避免对时序带来差的结果。
[0065]
在另一个实例中,一个关联实例组包括多个子实例组,每个子实例组分别对应一个寄存器类型,不同的子实例组对应不同的寄存器类型,每个子实例组包括所述关联实例组中属于对应的寄存器类型的一个或多个待装箱实例。则在对该关联实例组中的所有待装箱实例进行统一装箱时,对该关联实例组包含的各个子实例组分别装箱,不同的子实例组中的待装箱实例占用不同的箱。对于每个子实例组的装箱方法包括:当一个箱内的装箱资源满足子实例组中的所有待装箱实例的资源需求时,将子实例组中的所有待装箱实例均装入同一个箱内,子实例组占用一个箱。当子实例组中的所有待装箱实例的资源需求超过一个箱内的装箱资源时,在满足一个箱内的装箱资源的约束条件下在子实例组中随机选取部分待装箱实例装入一个箱内、在剩余的待装箱实例中机选取部分待装箱实例装入另一个箱内,直至将子实例组中所有待装箱实例都装入对应的箱内,子实例组占用多个箱。
[0066]
比如在一个实例中,对应于总线信号q[7:0]、属于同一个关联实例组中的8个待装箱实例q_7、q_6
……
q_0构成三个子实例组:子实例组1包含的待装箱实例q_7、q_6、q_3、q_2和q_1的寄存器类型均为fdre,子实例组2包含的待装箱实例q_5和q_4的寄存器类型均为fdce,子实例组3包含的待装箱实例q_0的寄存器类型为fd。则在对子实例组1进行装箱时,从子实例组1中随机选取4个待装箱实例装入箱1、剩余的一个待装箱实例装入箱2。对子实例组2进行装箱时,将子实例组2中的全部2个待装箱实例装入箱3。对子实例组3进行装箱时,将子实例组3中的全部1个待装箱实例装入箱4。
[0067]
对所有关联实例组完成装箱后,对逻辑网表中剩余的独立待装箱实例按照连接性关联度从大到小的顺序依次装箱。也即按照常规的装箱做法选取种子实例装入新的箱中,然后将与箱内已有的独立待装箱实例按照连接性关联度从大到小的顺序依次将其余的独
立待装箱实例装入,直到达到一个箱内的装箱资源。在此基础上,当存在至少两个独立待装箱实例与箱内已有的独立待装箱实例具有相同的连接性关联度时,按照时序关键度优先对关键度高的独立待装箱实例装箱。直到对所有独立待装箱实例完成装箱。
[0068]
在对所有关联实例组和所有独立待装箱实例完成装箱得到装箱结果后。在一个实施例中,所有装箱结果的总资源需求不超过fpga提供的总硬件资源,则直接完成装箱并得到最终的装箱结果,这时如上所述,可能有一部分的箱内装有某一个关联实例组中的待装箱实例但并没有装满,也可能有一部分的箱内装有独立待装箱实例但也没有装满。在另一个实施例中,当所有装箱结果的总资源需求超过fpga提供的总硬件资源时,需要对未装满的箱进行合并,如上所述,考虑到时序,一般不会对多个关联实例组的装箱结果进行合并,则一般会将某一个关联实例组的装箱结果与独立待装箱实例的装箱结果合并,从而导致存在至少一个装有属于关联实例组的待装箱实例且未装满的箱与装有独立待装箱实例且未装满的箱合并。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1