发明内容
本发明提供了一种FPGA存储器的工艺映射方法,能够实现一种支持多规模、多读写模式和多端口的FPGA存储器的工艺映射。
本发明实施例提供了一种FPGA存储器的工艺映射方法,包括:
根据存储器逻辑网表的原始信息进行分类封装,生成端口组集合;
根据所述端口组集合包括的端口组的数量和端口组参数,构造存储器宏;
根据目标工艺库中的资源规模对所述存储器宏的数据空间和地址空间进行切分,得到存储器组件;所述存储器组件包括功能参数,所述功能参数具体为:构造所述存储器宏的端口组的端口组参数;
将所述存储器组件按位扩展和地址扩展生成存储器组件扩展组;
根据所述存储器组件扩展组中包括的每一个存储器组件,再进行存储器组件类型的精确匹配;
根据所述精确匹配后的所述存储器组件的连接关系和所述功能参数,在器件工艺映射库进行映射,生成所述FPGA存储器。
优选的,所述根据所述端口组集合包括的端口组的数量和端口组参数,构造存储器宏包括:
确定所述端口组的数量是否为1或2;
如果为1,根据所述端口组参数构造单端口存储器宏;
如果为2,根据所述端口组参数构造全双端口存储器宏或者伪双端口存储器宏;其中,当两个所述端口组的端口组参数均为只读,或一个只读另一个读写时,构造全双端口存储器宏;当一个所述端口组的端口组参数为只写,另一个所述端口组的端口组参数为只读时,构造伪双端口存储器宏;
如果所述端口组的数量为3或以上,则根据预设的双端口读写模式配对规则,对所述端口组集合中的端口组进行配对,并根据配对成功的端口组构造全双端口存储器宏或者伪双端口存储器宏,根据未配对成功的端口组构造单端口存储器宏。
进一步优选的,所述根据预设的双端口读写模式配对规则,对所述端口组集合中的端口组进行配对具体为:
将所述端口组参数为只读的端口组依次与端口组参数为读写的端口组进行配对,直至所述端口组参数为读写的端口组全部被配对,或者所述端口组参数为只读的端口组全部被配对;
当还存未被配对的所述端口组参数为只读的端口组时,将未被配对的所述端口组参数为只读的端口组依次与端口组参数为只写的端口组进行配对,直至所述端口组参数为只写的端口组全部被配对,或者所述端口组参数为只读的端口组全部被配对;
当还存在未被配对的所述端口组参数为只读的端口组时,将未被配对的所述端口组参数为只读的端口组进行两两配对。
优选的,所述根据目标工艺库中的资源规模对所述存储器宏的数据空间和地址空间进行切分,得到存储器组件具体为:
根据所述存储器宏的数据深度和地址宽度计算所述存储器宏规模;
在目标工艺库中,获取大于并最接近所述存储器宏规模的资源规模的组件类型作为初次切分组件类型,或者获取与所述存储器宏规模相等的资源规模的组件类型作为初次切分组件类型;
根据所述初次切分组件类型切分所述存储器宏,构造存储器组件。
进一步优选的,当所述目标工艺库中,全部资源规模均小于所述存储器宏规模时,所述方法还包括:
获取目标工艺库中资源规模最大的组件类型作为初次切分组件类型。
进一步优选的,所述精确匹配包括:
计算利用所述初次切分组件类型构造所述存储器组件的第一造价;
获取目标工艺库中,小于所述初次切分组件类型的资源规模的其他组件类型;
依次计算利用其他组件类型构造所述存储器组件的造价,其中最小的造价为第二造价;
当所述第二造价小于第一造价时,将所述第二造价对应的组件类型作为构造所述存储器组件的最优组件类型;
否则,将所述初次切分组件类型作为构造所述存储器组件的最优组件类型。
本发明实施例提供的FPGA存储器的工艺映射方法,通过对存储器逻辑网表的原始信息进行分类封装,生成端口组集合;根据所述端口组集合包括的端口组的数量和端口组参数,构造存储器宏;根据目标工艺库中的资源规模对所述存储器宏的数据空间和地址空间进行切分,得到存储器组件;对存储器组件类型进行精确匹配后,再根据精确匹配后的所述存储器组件的连接关系和所述功能参数,在器件工艺映射库进行映射,生成所述FPGA存储器,从而实现了一种支持多规模、多读写模式和多端口的FPGA存储器的工艺映射方法。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
图1为本发明实施例提供的FPGA存储器的工艺映射方法的流程图。如图1所示,所述方法包括如下步骤:
步骤110,根据存储器逻辑网表的原始信息进行分类封装,生成端口组集合;
具体的,在进行FPGA工艺映射时,首先需要有逻辑网表的原始信息输入。对于输入的逻辑网表的原始信息,进行分类封装,生成以地址管脚为主键的一组相关管脚及参数设置集合,即端口组的形式。所述端口组集合是指存取同一块存储器的多个端口组的集合。端口组集合可以如图2所示,图中PORT GROUP 0为端口组集合中的第一个端口组,PORT GROUPi为端口组集合中的第i+1个端口组。
端口组集合中的端口组具有相同的模板类,它们具有相同的管脚架构。
每个端口组都具有一些端口组参数,在一个例子中可以具体如下表1所示。
| 端口组参数 |
参数特征值 |
| 同步模式 |
输出寄存,地址寄存 |
| 控制信号 |
片使能,写使能,读使能,重置使能 |
| 读写冲突模式 |
先读,写通,保持,旁路 |
| 数据输出端口复位值 |
>=0 |
表1
以图2所示端口组集合为例,每个端口组都包括时钟信号管脚CLK、片选信号管脚EN、写使能信号管脚WE、复位信号管脚RST、数据输入信号管脚DIN(数据宽度)、地址信号管脚ADDR(地址深度)以及数据输出信号管脚DOUT。
需要说明的是,端口组集合中各个端口组的参数特征值可以是不同的。
步骤120,根据所述端口组集合包括的端口组的数量和端口组参数,构造存储器宏;
具体的,存储器宏是以端口模式为特征,根据读写使能及地址管脚的不同,将端口组集合中的所有端口组进行划分,配对得到的逻辑层封装。端口模式可以具体分类为:单端口、伪双端口、全双端口和多端口几种类别。
构造存储器宏的具体方法可以如图3所示,包括如下步骤:
步骤301,确定所述端口组的数量是否为1;
如果为1,执行步骤302;否则执行步骤303;
步骤302,当端口组数量为1时,根据所述端口组参数构造单端口存储器宏。
步骤303,确定所述端口组的数量是否为2;
如果为2,执行步骤304;否则执行步骤307;
步骤304,当端口组数量为2时,确定两个所述端口组的端口组参数是否为均为只读或一个只读一个读写;
步骤305,如果两个所述端口组的端口组参数均为只读或一个只读一个读写,根据所述端口组参数构造全双端口存储器宏;
步骤306,如果一个所述端口组的端口组参数为只写,另一个所述端口组的端口组参数为只读,根据所述端口组参数构造伪双端口存储器宏;
步骤307,当端口组数量为3或以上时,根据预设的双端口读写模式配对规则,对所述端口组集合中的端口组进行配对,并根据配对成功的端口组构造全双端口存储器宏或者伪双端口存储器宏,根据未配对成功的端口组构造单端口存储器宏。
具体的,如果端口组集合中至少有3个端口组时,需要首先对端口组进行分类,遍历端口组集合中的全部端口组,根据各个端口组的端口组参数,将全部端口组按照可读写、只读、只写的参数属性进行划分,分类为可读写端口组子集合、只读端口组子集合和只写端口组子集合。然后,对所有子集合中的端口组进行配对。
配对遵循一定的匹配规则,如下表2所示。
表2
并且,匹配的两个端口组需要是存取同一块存储器的两个端口组。
在一个具体的例子中,匹配过程可以具体为:
依次选取只读端口组子集合中的一个端口组,首先将只读端口组子集合中的一个端口组与可读写端口组子集合中的端口组进行配对,如果配对成功,将配对成功的两个端口组分别从只读端口组子集合和可读写端口组子集合中移除,并且,根据配对的两个端口组构造全双端口存储器宏,直至所述可读写端口组子集合中的端口组全部被配对,或者所述只读端口组子集合中的端口组全部被配对。
在上述配对过程完成后,如果只读端口组子集合中还存未被配对的端口组,将只读端口组子集合中未被配对的端口组依次与只写端口组子集合的端口组进行配对,如果配对成功,将配对成功的两个端口组分别从只读端口组子集合和只写端口组子集合中移除,并且,根据配对的两个端口组构造伪双端口存储器宏。直至所述只写端口组子集合中的端口组全部被配对,或者所述只读端口组子集合中的端口组全部被配对。
在上述配对过程完成后,如果只读端口组子集合中还存未被配对的端口组,将未被配对的所述端口组参数为只读的端口组进行两两配对。并且,根据配对的两个端口组构造全双端口存储器宏。直至没有可以配对的端口组。
在上述配对过程完成后,根据剩余未配对的端口组构造单端口存储器宏。
步骤130,根据目标工艺库中的资源规模对所述存储器宏的数据空间和地址空间进行切分,得到存储器组件;
具体的,存储器组件是将存储器宏的数据空间和地址空间按照目标工艺库资源规模进行切分得到的可匹配到目标工艺库的逻辑层封装。所述存储器组件包括功能参数,所述功能参数具体为:构造所述存储器宏的端口组的端口组参数。
目标工艺库资源可以包括多种组件,比如块存储器、分布式存储器等,每一种组件可以由多种尺寸规模。比如块存储器可以是5K、9K、18K等,分布式存储器可以是32×2S、32×2D、32×2T、32×2Q等。
对于前一步骤构造得到的存储器宏,具有一定大小的宏规模,可以利用目标工艺库资源的组件的尺寸规模来设定阈值,确定对所述存储器宏的数据空间和地址空间进行切分的初次切分组件类型,根据初次切分组件类型进行切分,然后再进行最优组件类型匹配。具体的如图4所示,包括下述步骤:
步骤401,根据所述存储器宏的数据深度和地址宽度计算所述存储器宏规模;
步骤402,确定目标工艺库中是否存在尺寸规模大于存储器宏规模的组件;
步骤403,如果存在,获取尺寸规模等于,或者大于并最接近所述存储器宏规模的组件类型作为初次切分组件类型;
步骤404,如果不存在,则获取目标工艺库中尺寸规模最大的组件类型作为初次切分组件类型;
步骤405,根据所述初次切分组件类型切分所述存储器宏,构造存储器组件。
步骤140,将所述存储器组件按位扩展和地址扩展生成存储器组件扩展组;
具体的,在前述的端口组集合中,已经规定了地址深度和数据宽度,在确定了存储器组件后,需要根据地址深度和数据宽度进行地址扩展和位扩展,使存储器组件扩展组的地址深度和数据宽度与端口组集合构造的存储器宏相一致。
例如,端口组集合的地址深度为2K,前步确定的存储器组件的地址深度为1K,数据宽度为18bit,则在地址深度上,需要将存储器组件进行扩展,扩展成两个,通过EN选通,当EN高有效时选通其中一个存储器组件进行存取,当EN低有效时选通另一个存储器组件进行存取。
根据以上具体例子所述的方法,可以根据端口组集合的参数,对存储器组件进行扩展,构造成与端口组集合相对应的存储器组件扩展组。
步骤150,根据所述存储器组件扩展组中包括的每一个存储器组件,再进行存储器组件类型的精确匹配;
具体的,对于扩展组中包括的每一个存储器组件,可以再进行组件类型的精确匹配。具体如下述步骤:
步骤501,计算利用所述初次切分组件类型构造存储器组件的第一造价;
步骤502,获取目标工艺库中,小于所述初次切分组件类型的资源规模的其他组件类型;
步骤503,依次计算利用所述其他组件类型构造存储器组件的造价,其中最小的造价为第二造价;
上述步骤501可以在步骤502或503之后执行,也可以与步骤502或503并行执行。
步骤504,判断所述第一造价是否高于第二造价;
步骤505,当第一造价高于第二造价时,将所述第二造价对应的组件类型作为构造存储器组件的最优组件类型;
步骤506,否则,将初次切分组件类型作为构造存储器组件的最优组件类型。
所述最优组件类型也就是最终确定的存储器组件。
对于扩展组中包括的每一个存储器组件都确定其最优组件类型,从而得到扩展组中最终确定的每一个存储器组件。
步骤160,根据所述存储器组件扩展组中精确匹配后的存储器组件的连接关系和所述功能参数,在器件工艺映射库进行映射,生成所述FPGA存储器。
具体的,由存储器组件到存储器实体的映射,其连线可以遵循不同的配置关系规则进行。在根据存储器组件扩展组构造FPGA存储器时,在构造器中存储有不同的组件选择模式的信息,根据选择的不同模式,进行相应的连接关系配置。并根据功能参数,在器件工艺映射库进行映射,构造出所需的FPGA存储器。
通过本发明实施例提供的方法,能够支持多规模、多读写模式和多端口的FPGA存储器的工艺映射。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。