一种面向具有特有结构FPGA的工艺映射方法与流程

文档序号:19350813发布日期:2019-12-06 21:22阅读:281来源:国知局
本发明涉及现场可编程门阵列(fpga,fieldprogrammablegatearray)以及电子设计自动化(eda,electronicdesignautomation)
技术领域
:,特别涉及一种面向具有特有结构fpga的工艺映射(technologymapping)方法。
背景技术
::传统工艺映射方法以2输入节点网表为输入,因为这样细颗粒度的网表便于枚举出尽可能多的cuts情况,从而得到较优的映射结果。但相应的,其映射对象只能是lut结构,不能利用具有特有结构fpga器件的lut5m结构、mux2l6结构、mux2l7结构以及mux2l8结构资源,该方法对富含mux节点的电路就不能得到映射对象包括lut5m结构、mux2l6结构、mux2l7结构以及mux2l8结构的更优解决方案。技术实现要素:本发明要解决的技术问题在于现有技术中传统工艺映射方法以2输入节点网表为输入,其映射对象只能是lut结构,不能利用具有特有结构fpga器件的lut5m结构、mux2l6结构、mux2l7结构以及mux2l8结构资源的问题,该方法对富含mux节点的电路就不能得到映射对象包括lut5m结构、mux2l6结构、mux2l7结构以及mux2l8结构的更优解决方案,为解决上述技术问题,本发明提供一种面向具有特有结构fpga的工艺映射方法,所述工艺映射方法的输入网表包括至少一个第一节点和至少一个mux2节点,所述第一节点为2输入节点,所述mux2节点为3输入节点;该工艺映射方法包括:获取所述第一节点所对应映射结构为lut结构的至少一个映射方案;获取所述mux2节点所对应映射结构为lut结构和映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的至少两个映射方案;分别确定所述第一节点、所述mux2节点所对应的最佳映射方案;确定所述第一节点和mux2节点中的map-point节点,根据所述map-point节点所在的第一节点或mux2节点的最佳映射方案逐一生成对应的最佳网表结构。可选地,所述获取所述第一节点所对应映射结构为lut结构的至少一个映射方案;获取所述mux2节点所对应映射结构为lut结构和映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的至少两个映射方案之前,还包括:获取所述第一节点的level值,所述mux2节点的所述level值和muxlevel值。可选地,利用所述递归函数muxlevelizer从所述mux2节点出发向前推进来标定各所述mux2节点的所述mux_level值;初始状态下,各所述节点的mux2所述mux_level值赋值为0;若所述mux2节点的true分支第一驱动节点与false分支第二驱动节点均为mux2节点,则所述mux2节点的mux_level值等于所述第一驱动节点的mux_level值与所述第二驱动节点的mux_level值中的最小值加1;若所述mux2节点的true分支第一驱动节点、false分支第二驱动节点中只存在一个是mux2节点,则所述mux2节点的mux_level值赋值为1。可选地,当所述mux2节点的mux_level值等于1时,所述mux2节点所对应的映射结构为以下结构中至少之一:lut结构、mux2l6结构;当所述mux2节点的mux_level值等于2时,所述mux2节点所对应的映射结构为以下结构中至少之一:lut结构、lut5m结构、mux2l6结构、mux2l7结构;当所述mux2节点的mux_level值大于或者等于3时,所述mux2节点所对应的映射结构为以下结构中至少之一:lut结构、lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构。可选地,当所述mux2节点所对应的映射结构为所述lut5m结构时,还包括满足性检查,所述满足性检查包括:获取当前所述lut5m结构的true分支边、false分支边分别对应的第一mux2节点和第二mux2节点;若所述第一mux2节点和第二mux2节点所对应的选择信号相同,则将所述mux2节点所对应的映射结构包括lut5m结构。可选地,所述分别确定所述第一节点、所述mux2节点所对应的最佳映射方案包括:获取所述第一节点及所述第一节点各输出边所对应映射为lut结构的全部映射方案分别对应的area-flow值,所述第一节点各输出边所对应的映射为lut结构的全部映射方案的分别对应的depth值;获取所述mux2节点及所述mux2节点各输出边所对应的映射为lut结构的全部映射方案分别对应的area-flow值,所述mux2节点各输出边所对应的映射为lut结构的全部映射方案分别对应的depth值;获取所述mux2节点及所述mux2节点各输出边所对应的映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的全部映射方案分别对应的area-flow值,所述mux2节点各输出边所对应的映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的全部映射方案分别对应的depth值;根据所述area-flow值和depth值中至少之一,确定第一节点和mux2节点分别所对应的最佳映射方案。可选地,当所述mux2节点所对应的映射为所述mux2l6结构时,所述mux2节点对应的area-flow值等于所述mux2节点的三个输入边分别对应的area-flow值之和加上所述mux2节点的true分支所对应的第一lut结构、false分支所对应的第二lut结构中area-flow值等于0的数量;当所述mux2节点所对应的映射为mux2l7结构时,所述mux2节点对应的area-flow值等于所述mux2节点的三个输入边分别对应的area-flow值之和;当所述mux2节点所对应的映射为mux2l8结构时,所述mux2节点对应的area-flow值等于所述mux2节点的三个输入边分别对应的area-flow值之和。可选地,所述根据所述area-flow值和depth值中至少之一,确定第一节点和mux2节点分别所对应的最佳映射方案包括:当前优化策略为电路面积优先时,选取所述第一节点和mux2节点分别所对应的映射方案中area-flow值最小的映射方案作为最佳映射方案;当前优化策略为性能优先时,当所述第一节点或mux2节点位于关键路径上时,选取所述第一节点和mux2节点分别所对应的映射方案中depth值最小的映射方案作为最佳映射方案,否则,选取所述第一节点和mux2节点分别所对应的映射方案中area-flow值最小的映射方案作为最佳映射方案。可选地,所述确定所述第一节点和mux2节点中的map-point节点,根据所述map-point节点所在的第一节点或mux2节点的最佳映射方案逐一生成对应的最佳网表结构包括:当所述map-point节点所在的第一节点或mux2节点的最佳映射方案为lut映射时,生成lut结构;当所述map-point节点所在的第一节点或mux2节点的最佳映射方案为lut5m映射时,生成lut5m结构;当所述map-point节点所在的第一节点或mux2节点的最佳映射方案为mux2l6映射时,生成mux2l6结构;当所述map-point节点所在的第一节点或mux2节点的最佳映射方案为mux2l7映射时,生成mux2l7结构;当所述map-point节点所在的第一节点或mux2节点的最佳映射方案为mux2l8映射时,生成mux2l8结构。可选地,所述具有特有结构fpga的lut可配置为lut5m模式;所述具有特有结构fpga的lut负载端设有3级硬线连接的mux2结构,分别为mux2l6结构,mux2l7结构和mux2l8结构。有益效果本发明提供的一种面向具有特有结构fpga的工艺映射方法,该工艺映射方法的输入网表包括至少一个第一节点和至少一个mux2节点,第一节点为2输入节点,mux2节点为3输入节点;该工艺映射方法包括:获取第一节点所对应映射结构为lut结构的至少一个映射方案;获取mux2节点所对应映射结构为lut结构和映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的至少两个映射方案;分别确定第一节点、mux2节点所对应的最佳映射方案;获取第一节点和mux2节点中的map-point节点,根据map-point节点所在的第一节点或mux2节点的最佳映射方案逐一生成对应的最佳网表结构。解决了现有的传统工艺映射方法,其映射对象只能是lut结构,无法利用目标fpga器件的lut5m结构、mux2l6结构、mux2l7结构以及mux2l8结构资源,该方法对富含mux节点的电路就不能得到映射对象包括lut5m结构、mux2l6结构、mux2l7结构以及mux2l8结构的更优解决方案,实现了大幅提高具有特有结构fpga特有的lut5m模式和mux2l6结构、mux2l7结构及mux2l8结构资源利用率,从而可以达到减小电路面积的作用。同时因为lut5m模式和mux2l6结构、mux2l7结构及mux2l8结构资源的使用可以缩小lut级网表的层级,从而可以达到提高电路性能的效果。附图说明下面将结合附图及实施例对本发明作进一步说明,附图中:图1-1是具有特定结构fpga特有的lut结构示意图;图1-2是具有特定结构fpga的lut配置为lut5m的示意图;图2是具有特定结构fpga中lut与3级mux2lx的位置关系示意图;图3-1是工艺映射的覆盖问题;图3-2是与图3-1的工艺映射的覆盖问题对应的工艺映射示例;图4是本发明提供的面向具有特定结构fpga的工艺映射方法的流程示意图;图5是标注了edgedelay的有向无环图;图6是图5中全部节点和边的area-flow和depth汇总表;图7是使用传统工艺映射方法处理示例电路的映射结果示意图;图8是采用本发明工艺映射方法处理示例电路的映射结果示意图。具体实施方式应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。fpga具有灵活的可编程特性,其中组合逻辑的可编程特性主要是通过查找表(lut,lookuptable)实现的,lut本质上是一个ram(randomaccessmemory,随机存储器)。例如,输入数为5的lut,可以看作是一个有5位地址线的32x1的ram,可以实现任意5输入以内的所有组合逻辑。如图1-1所示,本发明面向的具有特有结构fpga具有特殊的lut结构,该lut结构具有6个输入端,可实现任意5输入以内的所有组合逻辑,如图1-2所示,该lut可配置为mux模式—lut5m,实现mux4(4选1多路选择器)功能。同时本发明面向的fpga,在lut结构之后还包含如图2所示的3级硬线连接的mux2结构,依次命名为mux2l6,mux2l7以及mux2l8(下文统称这几种mux2结构为mux2lx)。fpga是软硬件结合的产品,其使用离不开eda工具的支持,而工艺映射又是eda工具中必不可少的关键环节,是工艺无关网表与fpga工艺库之间的桥梁。其主要工作是将工艺无关的节点组成的网表映射为lut级网表。组合电路可以表示为有向无环图(dag,directedacyclicgraph),电路中的逻辑单元对应图中的节点(vertex),逻辑单元之间的连线对应图中的边(edge)。如图3-1和图3-2所示,工艺映射可抽象为子图的覆盖问题,每个输出数为1输入数不大于lut输入数的覆盖都可以映射为一个lut,每个覆盖的输入都对应于一组边,这组边即划定了一个输入边界,所以也称为一个cut,可见cut与覆盖是一一对应的。为了找到某个根节点的最佳映射方案,本发明方法可以采用cuts枚举的步骤来进行。需要理解的是,本发明中的找到根节点的最佳映射方案还可以采用现有技术中其他可行的方法,在此不做限定。为了便于后续对本发明方法的阐述,特在此明确一些本发明将用到的相关概念:area-flow:area-flow是用于面积估算的指标。流入边e的area-flow含义为汇入其驱动节点v的area-flow平均分配到每条输出边上的数值,表示为如下形式:其中nfanout(v)代表节点v输出边的个数。流入节点v的area-flow含义为该节点各输入边area-flow的总和再加上节点本身对应的area贡献av,表示为如下形式:其中av取常量1。为了预估工艺映射后网表的面积占用,计算area-flow的过程中一个cut对应一个lut,取alut=1。depth:如图4所示,每条边都对应着相应的delay数据(标记在边名称与冒号之后),用以表示相应连线的延迟大小。对于从输入端口到某条边的路径p,其depth的含义为路径上所有边的delay之和,而某条边的depth属性则表示从输入端口至该条边所有路径depth中的最大值。本发明提出的一种新的工艺映射方法面向具有特有结构fpga的工艺映射方法,工艺映射方法的输入网表包括至少一个第一节点和至少一个mux2节点,第一节点为2输入节点,mux2节点为3输入节点;参见图4,该方法包括:s401:获取第一节点所对应映射为lut结构的至少一个映射方案;s402:获取mux2节点所对应映射为lut结构和映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的至少两个映射方案;s403:分别确定第一节点、mux2节点所对应的最佳映射方案;s404:确定第一节点和mux2节点中的map-point节点,根据map-point节点所在的第一节点或mux2节点的最佳映射方案逐一生成对应的最佳网表结构。需要说明的是,步骤s401与步骤s402之间在本发明中没有时序限制,两者既可以同时进行也可以按照一者先计算另一者后计算;针对mux2节点所对应映射为lut结构和映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的至少两个映射方案的获取,其获取顺序在本发明中也不进行限定,例如:可以是先获取mux2节点所对应映射为lut结构的全部映射方案,然后同时获取mux2节点所对应映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的至少两个映射方案,若获取不到mux2节点所对应映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的映射方案,则结束步骤s402,直接跳转到步骤s403。又例如,步骤s402可以是先获取mux2节点所对应映射为mux2l6结构的至少一个映射方案,再获取mux2节点所对应映射为lut结构的全部映射方案,然后再分别尝试获取mux2节点所对应映射为lut5m结构、mux2l7结构、mux2l8结构中至少之一的全部映射方案。需要说明的是,获取第一节点所对应映射结构的方法可以是通过将网表中的第一节点进行拓扑排序后,通过cuts枚举将第一节点所对应的cut中包含边数小于或者等于lut结构的输入数的cut所映射后获得的映射结构。需要说明的是,获取mux2节点所对应映射的映射方案的方法可以是通过将网表中的mux2节点进行拓扑排序后,通过与上述cuts枚举相似的方法获得mux2节点所对应的映射结构。也可以是现有技术中其他可行的方式,在本发明是实施例中不作限定。在一些实施例中,为使本发明中的最佳映射方案的确定更加可靠,可以要求获取第一节点所对应映射为lut结构的全部映射方案、获取mux2节点所对应映射为lut结构和该mux2节点所能够对应映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的全部映射方案。在一些实施例中,也可以对获取第一节点所对应的映射为lut结构的映射方案的数量设定为一个第一取值范围,例如1~20,相应的对获取mux2节点所对应映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的映射方案的数量设定为一个第二取值范围,例如2~30。第一取值范围和第二取值范围可以一致也可以不一致。在一些实施例中,获取第一节点映射为lut结构的至少一个映射方案;获取mux2节点所对应映射结构为lut结构和映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的至少两个映射方案之前,还包括:获取第一节点的level值,mux2节点的level值和muxlevel值。在一些实施例中,本发明提供工艺映射方法中可以采用从某个节点出发向前驱方向推进的递归函数levelizer标定第一节点的level属性和mux2节点的level属性,初始状态下,第一节点和mux2节点的level属性均赋值为0;递归访问某个节点时,如果level>0,说明该节点及其前驱节点的level属性已经标记完成,则返回;否则遍历该节点的驱动节点,依次递归调用levelizer函数,遍历完成后取所有驱动节点中level的最大值加1赋给该节点的level。标定完成后再根据level属性排序即得到节点的拓扑排序。在一些实施例中,mux2节点除了包括level属性外,还额外标记了mux_level属性,用于表示mux2节点在mux树中的层次关系,以便于后续根据mux_level尝试将mux2节点映射为不同的器件结构。mux_level的标定采用向前驱方向推进的递归函数muxlevelizer。初始状态下,所有mux2节点的mux_level均赋值为0。递归访问某个mux2节点时,如果mux_level>0,说明该mux2节点及其前驱mux2节点的mux_level已经标记完成,则返回;如果mux2节点的true分支第一驱动节点和false分支第二驱动节点均为mux2节点,则取两个驱动mux2节点mux_level中的最小值加1赋值给该mux2的mux_level;如果mux2节点的true分支第一驱动节点和false分支第二驱动节点不全为mux2节点驱动,也即,mux2节点的true分支第一驱动节点、false分支第二驱动节点中只存在一个是mux2节点,则该mux2节点的mux_level赋值为1。在一些实施例中,当mux2节点的mux_level值等于1时,mux2节点所对应的映射为以下两种结构中至少之一:lut结构、mux2l6结构。在一些实施例中,当mux2节点的mux_level值等于2时,mux2节点所对应的映射为以下结构中至少之一:lut结构、lut5m结构、mux2l6结构、mux2l7结构。在一些实施例中,当mux2节点的mux_level值大于或者等于3时,mux2节点所对应的映射为以下结构中至少之一:lut结构、lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构。在一些实施例中,当mux2节点所对应的映射结构为lut5m结构前,还包括满足性检查,满足性检查包括:获取当前lut5m结构的true分支边、false分支边分别对应的第一mux2节点和第二mux2节点;若第一mux2节点和第二mux2节点所对应的选择信号相同,则mux2节点所对应的映射包括lut5m结构。在一些实施例中,分别确定第一节点、mux2节点所对应的最佳映射方案包括:获取第一节点及第一节点各输出边所对应映射为lut结构的全部映射方案分别对应的area-flow值,第一节点各输出边所对应的映射为lut结构的全部映射方案的分别对应的depth值;获取mux2节点及mux2节点各输出边所对应的映射为lut结构的全部映射方案分别对应的area-flow值,mux2节点各输出边所对应的映射为lut结构的全部映射方案分别对应的depth值;获取mux2节点及mux2节点各输出边所对应的映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的全部映射方案分别对应的area-flow值,mux2节点各输出边所对应的映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的全部映射方案分别对应的depth值;根据area-flow值和depth值中至少之一,确定第一节点和mux2节点分别所对应的最佳映射方案。在一些实施例中,当mux2节点所对应的映射为mux2l6结构时,mux2节点对应的area-flow值等于mux2节点的三个输入边分别对应的area-flow值之和加上mux2节点的true分支所对应的第一lut结构、false分支所对应的第二lut结构中area-flow值等于0的数量;在一些实施例中,当mux2节点所对应的映射为mux2l7结构时,mux2节点对应的area-flow值等于mux2节点的三个输入边分别对应的area-flow值之和;在一些实施例中,当mux2节点所对应的映射为mux2l8结构时,mux2节点对应的area-flow值等于mux2节点的三个输入边分别对应的area-flow值之和。在一些实施例中,根据area-flow值和depth值中至少之一,确定第一节点和mux2节点分别所对应的最佳映射方案包括:当前优化策略为电路面积优先时,选取第一节点和mux2节点分别所对应的映射方案中area-flow值最小的映射方案作为最佳映射方案;当前优化策略为性能优先时,当第一节点或mux2节点位于关键路径上时,选取第一节点和mux2节点分别所对应的映射方案中depth值最小的映射方案作为最佳映射方案,否则,选取第一节点和mux2节点分别所对应的映射方案中area-flow值最小的映射方案作为最佳映射方案。在一些实施例中,获取第一节点和mux2节点中的map-point节点,根据map-point节点所在的第一节点或mux2节点的最佳映射方案逐一生成对应的最佳网表结构包括:当map-point节点所在的第一节点或mux2节点的最佳映射方案为lut映射时,生成lut结构;当map-point节点所在的第一节点或mux2节点的最佳映射方案为lut5m映射时,生成lut5m结构;当map-point节点所在的第一节点或mux2节点的最佳映射方案为mux2l6映射时,生成mux2l6结构;当map-point节点所在的第一节点或mux2节点的最佳映射方案为mux2l7映射时,生成mux2l7结构;当map-point节点的最佳映射方案为mux2l8映射时,生成mux2l8结构。在一些实施例中,具有特有结构fpga的lut可配置为lut5m模式;具有特有结构fpga的lut负载端设有3级硬线连接的mux2结构,分别为mux2l6结构,mux2l7结构和mux2l8结构。本发明提供的一种面向具有特有结构fpga的工艺映射方法,该工艺映射方法的输入网表包括至少一个第一节点和至少一个mux2节点,第一节点为2输入节点,mux2节点为3输入节点;获取第一节点所对应映射结构为lut结构的至少一个映射方案;获取mux2节点所对应映射结构为lut结构和映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的至少两个映射方案;分别确定第一节点、mux2节点所对应的最佳映射方案;获取第一节点和mux2节点中的map-point节点,根据map-point节点所在的第一节点或mux2节点的最佳映射方案逐一生成对应的最佳网表结构。可大幅提高具有特有结构fpga特有的lut5m模式和mux2l6结构、mux2l7结构及mux2l8结构资源利用率,从而可以达到减小电路面积的作用。同时因为lut5m模式和mux2l6结构、mux2l7结构及mux2l8结构资源的使用可以缩小lut级网表的层级,从而可以达到提高电路性能的效果。下面结合一种具体的实施场景,对本发明的方案进行进一步说明。本发明提出的面向特有结构fpag的工艺映射方法,主要包括节点拓扑排序,节点cuts枚举,节点和边的area-flow/depth计算以及最佳映射选取,最佳网表生成这几个步骤。下面对每个步骤分别进行阐述。步骤(1),节点拓扑排序:所谓拓扑排序就是将有向无环图中所有节点排成一个线性序列,使得图中任意一对节点u和v,若存在从u到v的边euv,则u在线性序列中出现在v之前。本工艺映射方法中采用从某个节点出发向前驱方向推进的递归函数levelizer标定网表第一节点的level属性,标定完成后再根据level属性排序即得到第一节点的拓扑排序。初始状态下,所有第一节点的level属性均赋值为0;递归访问某个第一节点时,如果level>0,说明该第一节点及其前驱节点的level属性已经标记完成,则返回;否则遍历该第一节点的驱动节点,依次递归调用levelizer函数,遍历完成后取所有驱动节点中level的最大值加1赋给该第一节点的level。递归函数levelizer的伪代码如下所示:本发明方法的特征之一在于还允许输入网表中存在3输入的mux2节点,mux2节点除了包括与第一节点相同的level属性外,还额外标记了mux_level属性,用于表示mux2节点在mux树中的层次关系,以便于后续根据mux_level尝试将mux2节点映射为不同的器件结构。mux_level的标定采用向前驱方向推进的递归函数muxlevelizer。初始状态下,所有mux2节点的mux_level均赋值为0。递归访问某个mux2节点时,如果mux_level>0,说明该mux2节点及其前驱mux2节点的mux_level已经标记完成,则返回;如果mux2节点的true分支第一驱动节点和false分支第二驱动节点均为mux2节点,则取两个第一驱动节点mux_level值与第二驱动节点的中mux_level值的最小值加1赋值给该mux2节点的mux_level值;如果该mux2节点的true分支第一驱动节点和false分支第二驱动节点不全为mux2驱动,也即只存在一个mux2节点时,则该mux2的mux_level赋值为1。muxlevelizer的伪代码如下所示:步骤(2),cuts枚举:节点的cuts枚举采用向前驱方向的深度优先搜索方法。根节点的输入作为初始cut,并以此为出发点,向前驱方向深度优先搜索。搜索到的cut只要满足包含的边数不大于lut结构的输入数即为一个合法cut,则将其保存在数组cutsarray中。步骤(3),节点与边的area-flow/depth计算与最佳映射选取:根据步骤(1)建立的拓扑顺序,依次计算节点及其输出边的area-flow/depth数据,对于某个节点及其输出边,需逐一遍历其cutsarray中的全部cut进行计算,对于mux2节点除一般性的以lut结构为目标的映射计算外,还需根据mux_level有针对性的对几个特殊情况计算相应的area-flow/depth。并根据area-flow/depth数据选取最佳映射。下面分别阐述一般性的area-flow/depth计算和mux2节点的特殊area-flow/depth计算。①一般性的area-flow/depth计算:初始状态下,电路输入边的area-flow赋值为0。一般性的area_flow/depth计算以映射为lut结构为目标,因此分别记为af_lut和depth_lut,对于任意第一节点或mux2节点v的某个cut,根据定义第一节点或mux2节点v的af_lut等于cut内各边area-flow的总和加1;由于第一节点或mux2节点的访问是依据拓扑顺序的,此时cut内各边的area-flow已经是先前计算得到的确定值。第一节点或mux2节点v的af_lut得出后则相应的计算其输出边z的af_lut,z.af_lut等于节点v.af_lut除以第一节点或mux2节点v的输出边数目。根据定义z.depth_lut等于cut内各边depth的最大值加上输出边z的delay。af_lut/depth_lut计算的伪代码如下:为便于理解,可参照图5和图6,图5是标注了edgedelay的有向无环图;图6是图5中全部节点和边的area-flow和depth汇总表。②mux_level==1的mux2节点area-flow/depth计算:mux_level==1的mux2节点m,其选择信号为边s,true分支为边t,false分支为边f,输出为边z。除了可以一般性的映射为lut结构之外,还可以映射为图2所示的mux2l6结构。当映射为mux2l6结构时,其area-flow/depth分别记为af_l6/depth_l6。由于硬件结构上mux2l6结构的true分支和false分支只能是前驱lut结构的输出,当t.af_lut==0或f.af_lut==0时说明边t或边f前没有任何节点,也就没有对应的lut结构映射,这时边t或边f必须经过一个冗余的lut结构才能到达mux2l6结构的对应输入端,那么在af_l6的计算上就需要相应的加上冗余lut结构贡献的area,即af_l6需要相应加上1。另外由于mux2l6结构不属于lut资源,其本身的area贡献为0,不必相加额外数值。综上,af_l6/depth_l6计算的伪代码如下所示:③mux_level==2的mux2节点area-flow/depth计算:mux_level==2的mux2节点m,其选择信号为边s,true分支为边t,false分支为边f,输出为边z。除了可以一般性的映射为lut结构之外,还可以映射为图2所示的mux2l6结构,mux2l7结构或图1-2所示的lut5m模式。映射为mux2l6结构的情况上一小节已经详述过,这里不在重复。当映射为mux2l7结构时,其area-flow/depth分别记为af_l7/depth_l7。由于硬件结构上mux2l7的true分支和false分支只能是前驱mux2l6结构的输出,另外由于mux2l7结构不属于lut资源,其本身的area贡献为0,不必相加额外数值。综上,af_l7/depth_l7计算的伪代码如下所示:afdepthl7(m){m.af_l7=s.area_flow;m.af_l7+=t.af_l6;m.af_l7+=f.af_l6;z.af_l7=m.af_l7/fanout_num;z.depth_l7=max(s.depth,t.depth_l6,f.depth_l6)+z.delay;}当尝试映射为lut5m结构时,首先需要做满足性检查,把边t的驱动mux2节点记作mt,边f的驱动mux2节点记作mf,如果mt与mf共享相同的选择信号s1,那么当前mux2节点满足lut5m结构映射条件。此种映射情况下,lut5m结构共覆盖了3个mux2节点,即m,mt,mf。相应的cut包括6条边,即s,s1,mt.t,mt.f,mf.t,mf.f。从而可知af_lut5m/depth_lut5m计算的伪代码如下所示:④mux_level>=3的mux2节点area-flow/depth计算:mux_level>=3的mux2节点m,其选择信号为边s,true分支为边t,false分支为边f,输出为边z。除了可以一般性的映射为lut之外,还可以映射为图2所示的mux2l6结构,mux2l7结构,mux2l8结构或图1-2所示的lut5m模式。除映射为mux2l8结构以外,其它情况前面已经详述过,这里不在重复。当映射为mux2l8结构时,其area-flow/depth分别记为af_l8/depth_l8。由于硬件结构上mux2l8结构的true分支和false分支只能是前驱mux2l7结构的输出,另外由于mux2l8结构不属于lut资源,其本身的area贡献为0,不必相加额外数值。综上,af_l8/depth_l8计算的伪代码如下所示:afdepthl8(m){m.af_l8=s.area_flow;m.af_l8+=t.af_l7;m.af_l8+=f.af_l7;z.af_l8=m.af_l8/fanout_num;z.depth_l8=max(s.depth,t.depth_l7,f.depth_l7)+z.delay;}至此,映射至lut结构的一般性area-flow/depth计算以及mux2节点的几种特殊映射方式下area-flow/depth的计算已经详述完毕。每个节点最终的映射方式是唯一的,因此需要在节点的所有候选映射方案中选取最佳的一个。最佳映射的选取完全基于先前计算得出的area-flow/depth数据。在面积优先的优化策略下,选取所有映射方案中area-flow最小的作为最优映射方案;在性能优先的优化策略下,位于关键路径上的节点选取depth最小的映射方案,不在关键路径上的节点仍然选取area-flow最小的映射方案,以求在获得性能最大化的前提下,尽可能减小面积占用。步骤(4),最佳网表生成:在生成最佳网表的过程中,原始网表中某些边会被涵盖进lut当中,那些得以保留下来的边的原始驱动节点,即称为map-point。最佳网表生成的关键就在于找出所有的map-point。需要说明的是最佳网表为lut级网表。通过逆拓扑顺序遍历原始网表的节点,将输出边为电路输出的节点标记为map-point并加入到队列map_point_queue中。接下来通过一个循环操作找到网表中全部的map-point。搜索map-point的伪代码如下所示:当全部的map-point都确定之后,只需要根据map-point节点的最佳映射方案逐一生成对应的lut级网表结构即可。最佳映射为lut映射的生成lut结构,最佳映射为lut5m映射的生成lut5m结构,最佳映射为mux2l6的则生成相应的mux2l6结构即可,最佳映射为mux2l7映射的则生成相应的mux2l7结构即可,最佳映射为mux2l8映射的则生成相应的mux2l8结构即可。图7是使用传统lut映射处理示例电路的映射结果示意图;图8是采用本发明工艺映射方法处理图7中示例电路的映射结果示意图。参见图7和图8,图7是一个由mux2节点组成的示例电路对应的网表,边的delay均为1,如果按照传统的工艺映射方法仅映射为lut结构,共需图7中所示的6个lut结构,分别为2个lut3结构,4个lut5结构,输出端z的depth为4。而图8是图7中网表通过本发明工艺映射方法得到的映射结果,仅占用4个lut结构,分别为1个lut3结构,1个lut5结构,2个lut5m结构和1个mux2l6结构,且输出端z的depth仅为3,相对于外部走线,mux2l6结构与lut3结构,lut5结构的硬连线delay可忽略。本发明提供的一种面向具有特有结构fpga的工艺映射方法,该工艺映射方法的输入网表包括至少一个第一节点和至少一个mux2节点,第一节点为2输入节点,mux2节点为3输入节点;获取第一节点所对应映射结构为lut结构的至少一个映射方案;获取mux2节点所对应映射结构为lut结构和映射为lut5m结构、mux2l6结构、mux2l7结构、mux2l8结构中至少之一的至少两个映射方案;分别确定第一节点、mux2节点所对应的最佳映射方案;获取第一节点和mux2节点中的map-point节点,根据map-point节点所在的第一节点或mux2节点的最佳映射方案逐一生成对应的最佳网表结构。可大幅提高具有特有结构fpga特有的lut5m模式和mux2l6结构、mux2l7结构及mux2l8结构资源利用率,从而可以达到减小电路面积的作用。同时因为lut5m模式和mux2l6结构、mux2l7结构及mux2l8结构资源的使用可以缩小lut级网表的层级,从而可以达到提高电路性能的效果。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1