CN102054109B - 集成电路下层硬件映射方法、数据控制流生成方法及装置 - Google Patents
集成电路下层硬件映射方法、数据控制流生成方法及装置 Download PDFInfo
- Publication number
- CN102054109B CN102054109B CN201010622446.XA CN201010622446A CN102054109B CN 102054109 B CN102054109 B CN 102054109B CN 201010622446 A CN201010622446 A CN 201010622446A CN 102054109 B CN102054109 B CN 102054109B
- Authority
- CN
- China
- Prior art keywords
- operator
- integrated circuit
- data
- statement
- mapped
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Design And Manufacture Of Integrated Circuits (AREA)
Abstract
本发明公开了一种集成电路下层硬件映射方法及装置,通过对描述集成电路算方法的计算机语言程序进行分析,并将其映射为描述集成电路算法的数据控制流图,再转换为相应的算子时空图,并对数据控制流图进行时序约束,从而根据时序标注对算子时空图进行聚类压缩,再生成集成电路下层硬件电路逻辑描述,从而创造了一种从计算机语言到集成电路下层硬件电路逻辑描述的映射工具,标准化地实现了集成电路从C或MATLAB等语言生成下层硬件的过程,实现起来方便快捷。本发明公开的数据控制流生成方法及装置通过对计算机语言程序分析得到其相应的数据相关性、数据可并行性和相应控制信息等,从而生成相应的数据控制流图,帮助硬件工程师进行硬件设计。
Description
技术领域
本发明涉及集成电路设计领域,尤其是一种集成电路下层硬件映射方法、数据控制流生成方法及装置。
背景技术
在集成电路领域,通常集成电路的设计速度滞后于集成电路制造工艺的发展速度。尤其是集成电路的制造工艺进入纳米级以后,集成电路的设计速度已远远落后于集成电路制造工艺的发展速度。因此,对于集成电路设计领域来说,提高设计速度是当前最为迫切的问题之一。如图1所示,现有技术中,集成电路的设计通常包括两部分:第一部分是从基于C语言或MATLAB语言的算法描述到RTL级的描述;第二部分是从RTL级描述到标准单元ASIC结构或门阵列现(或其它S-ASIC结构)或FPGA结构的实现过程。其中第二部分的实现目前已有比较成熟的工具支持,其实现过程基本满足高效、快捷等要求。因此,提高设计速度的关键点落在了第一部分的实现上,也就是从C语言或MATLAB语言等的算法描述到RTL级的描述上,可以将这称之为集成电路下层硬件的映射方法或者高层次综合或者结构级综合。
但由于第一部分的实现主要是由技术人员根据自身对C语言或MATLAB语言的理解,人为地将其转换为RTL级的描述。也就是说,第一部分的实现受到技术人员自身的经验和知识水平的影响,对于不同的技术人员来说,实现的时间存在较大的差异。对于第一部分的实现方式,国外的一些公司已经展开了相应的研究并推了一些实现工具,比如Mentor的Catapult C、AutoESL的AutoPilot、Forte Design System的Cynthesizer、UC San Diego的SPARK等。
发明内容
本发明要解决的主要技术问题是,提供一种集成电路下层硬件映射方法和装置,能够提高集成电路的设计速度。
本发明还提供了一种数据控制流生成方法及装置,包含数据相关性、数据可并行性和相应控制信息的分析,能够辅助硬件电路设计人员进行电路设计。
为解决上述技术问题,本发明采用的技术方案如下:
一种集成电路下层硬件映射方法,包括步骤:
程序分析步骤,用于读取描述集成电路算法的计算机语言程序,并从中识别出被映射的执行对象和参数对象;
数据控制流图生成步骤,用于将识别出的执行对象和参数对象映射成描述集成电路算法的数据控制流图中的相应节点;
算子时空图生成步骤,用于根据数据控制流图中的各节点所进行的功能处理从预先建立的算子单元库中获取对应功能的至少一个算子单元,将数据控制流图转换成由算子单元组成的算子时空图;
时序约束步骤,用于根据用户规格要求和目标集成电路工艺的要求确定出总时序约束,对算子时空图中的每个算子单元标注时间,对算子时空图的每个层级进行时序约束;
时空图压缩步骤,用于根据时间标注对算子时空图进行空间上的聚类压缩,使得总体算法执行时间最接近于总时序约束;
下层硬件映射步骤,用于根据聚类压缩后的算子时空图生成集成电路下层硬件逻辑描述。
基于上述的方法,本发明还提供一种集成电路下层硬件映射装置,包括:
程序分析模块,用于读取描述集成电路算法的计算机语言,并从中识别出被映射的执行对象和参数对象;
数据控制流图生成模块,用于将识别出的执行对象和参数对象映射成描述集成电路算法的数据控制流图中的相应节点;
算子时空图生成模块,用于根据数据控制流图中的各节点所进行的功能处理从预先建立的算子单元库中取出对应功能的至少一个算子单元,将数据控制流图转换成由算子单元组成的算子时空图;
时序约束模块,用于根据用户规格需求和目标集成电路工艺的要求确定出总时序约束,对算子时空图中的每个算子单元标注时间,对算子时空图的每个层级进行时序约束;
时空图压缩模块,用于根据时间标注对时空图进行空间上的聚类压缩,并使之总体算法执行时间最接近于总时序约束;
下层硬件映射模块,根据聚类压缩后的时空图生成集成电路下层硬件逻辑描述。
本发明还提供一种数据控制流生成方法,包括步骤:
程序分析步骤,用于读取描述集成电路算法的计算机语言程序,根据该种计算机语言的规则从所述计算机语言程序中识别出被映射的执行对象和参数对象,所述执行对象包括运算指令和/或控制指令,所述参数对象包括输入数据、输出数据、中间数据中的至少一种;
数据控制流图生成步骤,用于将识别出的执行对象和参数对象映射成描述集成电路算法的数据控制流图中的相应节点。
进一步地,在所述数据控制流图生成步骤中,将所述运算表指令映射为处理框图,将所述控制指令映射为用于标识状态、状态转移条件及状态控制信号的控制流,将所述参数对象映射为数据流上的存储节点。
其中,所述程序分析步骤包括:根据该种计算机语言的规则从所述计算机语言程序中查找出函数,对所述函数的输入输出和函数内的运算进行解析,识别出执行对象和参数对象,在解析过程中,如果当前被解析的函数为包含下层函数的上层函数,则继续对下层函数进行解析。
进一步地,所述控制指令为循环语句中的循环指令,所述循环语句包括静态循环语句和动态循环语句,则所述数据控制流图生成步骤包括:
当循环语句为静态循环语句时,根据循环次数将循环体展开,在循环体展开后带入参数对象得到新的运算表达式,将运算表达式中的运算指令映射为处理框图,将运算表达式中的参数对象映射为数据流上的存储节点;
当循环语句为可变为静态循环语句的动态循环语句时,根据调用的不同场合变动态循环语句为静态循环语句,将其展开得到新的运算表达式,将运算表达式中的循环指令映射为处理框图,将运算表达式中的参数对象映射为数据流上的存储节点;
当循环语句为单层动态循环语句时,将循环语句的内容映射为处理框图,将循环指令映射为状态机;
当循环语句为多层动态循环语句时,分别将外层循环语句和内层循环语句的内容映射为第一处理框图和第二处理框图,将外层循环指令映射为第一状态机,将内层循环指令映射为第二状态机,并且所述第二处理框图和第二状态机映射在所述第一处理框图内;或分别将外层循环语句和内层循环语句的内容映射为第一处理框图和第二处理框图,将循环指令映射为状态机,并且所述第二处理框图映射在所述第一处理框图内,且所述状态机的状态数等于所述循环的循环次数加一。
进一步地,所述控制指令为分支控制语句中的控制指令,所述数据控制流图生成步骤包括:将所述分支控制指令映射为多路选择器,分支控制语句的内容映射为多路选择器的输入端处理框图,分支控制语句的控制条件映射为多路选择器的控制端处理框图。
进一步地,所述分支控制语句为嵌套分支控制语句,则将上层分支控制指令映射为第一多路选择器,所述上层分支控制语句的内容映射为所述第一多路选择器的输入端处理框图,所述上层分支控制语句的控制条件映射为所述第一多路选择器的控制端处理框图;将下层分支控制指令映射为第二多路选择器,所述下层分支控制语句的内容映射为所述第二多路选择器的输入端处理框图,所述下层分支控制语句的控制条件映射为所述第二多路选择器的控制端处理框图,并且所述第一多路选择器的输出作为所述第二多路选择器的输入。
基于上述的方法,本发明还提供一种数据控制流生成装置,包括:
程序分析模块,用于读取描述集成电路算法的计算机语言程序,根据该种计算机语言的规则从所述计算机语言程序中识别出被映射的执行对象和参数对象,所述执行对象包括运算指令和/或控制指令,所述参数对象包括输入数据、输出数据、中间数据中的至少一种;
数据控制流图生成模块,用于将识别出的执行对象和参数对象映射成描述集成电路算法的数据控制流图中的相应节点。
进一步地,所述数据控制流图生成模块包括:执行对象映射模块,用于将所述执行对象中的运算指令映射为处理框图,并用于将所述执行对象中的控制指令映射为标识状态、状态转移条件及状态控制信号的控制流;
参数对象映射模块,用于将参数对象映射为数据流上的存储节点。
本发明的有益效果是:通过对原C程序或MATLAB程序的分析,识别出映射的执行对象和参数对象;并将识别出的执行对象和参数对象映射成为数据控制流图,该数据控制流图可以表示集成电路的算法;然后将数据控制流图中的各节点用算子来替代,生成算子时空图;生成的算子时空图经过聚类压缩,使压缩后的时空图的总体执行时间最接近于总时序约束;将压缩后的时空图生成集成电路的下层硬件电路。从而创造了一种从计算机语言到集成电路下层硬件电路的映射工具,标准化地实现了集成电路从C或MATLAB等语言生成下层硬件的过程,实现起来方便快捷。
本发明还通过对计算机语言程序进行分析得到其相应的数据相关性、数据可并行性和相应控制信息等,从而根据这些信息生成相应的数据控制流图,并且其中控制表达式转换方法是所有语言表达式转换的核心,其转换效率直接影响生成算法数据控制流图的数据量。本发明方法提前将并行性因素、硬件结构例如状态机、多路选择器等考虑在内,可以更大程度上帮助硬件工程师进行硬件设计。
附图说明
图1为现有技术中的集成电路设计方法流程图;
图2为ADDS算子结构示意图;
图3为ADDS算子功能图;
图4为存储类算子的通用结构示意图;
图5为路径类算子的通用结构示意图;
图6为控制类算子的通用结构示意图;
图7a和图7b分别为本发明的下层硬件映射流程图和集成电路下层硬件映射装置的一种实施例的结构框图;
图8为本发明数据控制流图生成方法的一种实施例中对函数X264_me_search进行分析的流程图;
图9为图8函数X264_me_search和pixel_sad_16×16生成数据控制流图的流程图;
图10为本发明的一种实施例中的单层动态循环语句的映射结构图;
图11为本发明的一种实施例中的多层动态循环语句的一种映射结构图;
图12为本发明的方法的一种实施例中的多层动态循环语句的另一映射结构图;
图13为本发明的一种实施例中的分支控制语句映射的结构图;
图14为本发明的一种实施例中的嵌套分支控制语句映射的结构图;
图15为本实施例的函数X264_me_search的数据控制流图;
图16为本实施例的函数pixel_sad_16×16的数据控制流图;
图17为本发明的数据控制流图生成装置的一种实施例的结构框图;
图18为图17的数据控制流生成模块的一种实施例的结构框图;
图19为本发明的顺序相关数据流展开的一种实施例的结构图;
图20为本发明的存在反馈数据流,由算子展开为局部流水线结构示意图;
图21为本发明的并行数据流展开的一种实施例的结构图;
图22为本实施例的函数x264_me_search的L0和L1逻辑生成的算子时空图;
图23a和图23b分别函数x264_me_search的逻辑L3的第一部分和第二部分生成的算子时空图;
图24为本实施例的函数X264_me_search的逻辑L5生成的算子时空图;
图25a和图25b分别为本实施例的函数x264_me_search和函pixel_sad_16×16的算子时空图;
图26a和图26b分别为本实施例的函数X264_me_search和函数pixel_sad_16×16的时序约束示意图;
图27为本实施例的函数pixel_sad_16×16聚类压缩后的时空图;
图28所示为固化定制的一种实施方式原理图;
图29为X264_me_search聚类压缩后的比较图。
具体实施方式
下面通过具体实施方式结合附图对本发明作进一步详细说明。
回顾集成电路设计方法学的发展历程,可以看到:当集成电路制造工艺进入1um的时代,出现了以门阵列为基本单元的设计方法;当集成电路制造工艺进入0.5um的时代,出现了以标准单元为基本单元的设计方法;当集成电路制造工艺进入0.18um的时代,出现了以IP核为基本单元的设计方法。由此可以看出:一方面集成电路的设计方法学随着集成电路制造工艺的发展而发展,另一方面集成电路设计方法学中使用的基本单元(门、标准单元、IP核)的单元粒度不断增大。同时,每次新的基本单元的出现,都标志着集成电路设计方法革命性的进步。因此,可以合理预见的是,随着近十年来集成电路制造工艺的飞速进步,尤其是集成电路制造工艺进入纳米级后,更大粒度的基本单元将出现并开启集成电路设计的新局面,以适应集成电路制造工艺的飞速发展。
算子作为集成电路组成部件中的基本单元,其粒度大于标准单元的粒度,有利于描述集成电路算法的计算机程序语言向下层硬件映射,因此本发明采用基于算子的集成电路设计方法,使得加速了集成电路的设计速度,以适应集成电路制造工艺的进步。
本发明中,常用的算子有五类,分别是运算类算子、存储类算子、路径类算子、控制类算子和时钟类算子。
1、运算类算子。
运算算子(AU)是用于实现逻辑运算或算术运算或逻辑与算术混合运算的基本单元。它包括算术逻辑运算单元和运算配置寄存器,运算配置寄存器用于接收和存储运算配置指令,不同的运算配置指令对应不同的算术逻辑操作,也就是说,通过运算配置指令可以使同一个运算算子实现多种不同的功能。下面,以ADDS算子为例对运算算子进行说明。
图2为ADDS算子的结构示意图,它包括用于实现加减操作的ADD单元和用于实现移位操作的《/》单元,通过设置控制位X的参数值,可以使ADDS算子实现多种不同的功能,比如,图3的表格示出了一种实施方式中不同控制位X值与不同操作的对应关系。像ADDS这种可以通过控制位X实现多种不同功能的算子称为可重构算子,可重构算子由于丰富的应用功能可以用在不同的场景中,减少了算子单元库中储存的算子数。并且可重构算子在其执行过程中还可以通过改变控制位的方式实现动态的重构。
2、存储类算子。
如图4所示为存储类算子(MU)的基本结构示意图(图中CU表示控制算子)。存储算子包括存储配置寄存器(MU configuration register)和存储单元,存储单元包括地址产生单元、数据存储器、数据产生单元和数据输出控制单元。存储配置寄存器可以通过数据输出控制单元配置存储算子(MU)的存储体(各种存储介质:寄存器、RAM等MEM)的写入和/或读出方式,还可以配置存储器对应的地址产生单元的工作方式。根据地址产生单元生成的地址直接将输入数据存储到预定位置,并将需要的数据从存放位置输出。
3、路径类算子。
如图5所示,为路径类算子(LU)的通用结构示意图。路径类算子LU包括路由配置寄存器(LU configuration register)和组成路由选择单元的交换开关和数据寄存器(REG),其中,路由配置寄存器受到控制算子CU的控制,在控制算子CU的控制作用下控制交换开关按照期望的方式实现不同运算算子AU之间的连接。数据寄存器用于暂存运算类算子LU和存储类算子MU的输入输出数据。
4、控制类算子。
如图6所示,为控制类算子(CU)的通用结构示意图。控制类算子的作用主要是将配置信息传送到相应的配置寄存器,配置运算算子AU、存储算子MU和路径算子LU实现预定的功能。控制算子CU的形式包括计数器、状态机和微指令三种。其中微指令结构包含译码器、程序计数器、指令存储器和流水线控制模块等。控制算子CU通过执行简单的配置指令向各功能单元发送配置信息,由于CU支持的指令很少,因此指令寄存器容量小,译码器非常简单。
5、时钟类算子。
时钟算子用于运算类算子、存储类算子、路径类算子和控制类算子的时钟控制信号,时钟信号包括控制时钟起停和控制时钟频率的信号,时钟信号可以按照期望的方式配置。
以上五类算子是实现以下实施方式的基础,可以理解的是,上述对根据功能将用于集成电路设计中的算子分为五大类并非唯一的划分方式,还可以根据实际情况有针对性进行更宽范围或更细范围的划分。
在本发明的一种实施例中,提供了一种从计算机语言到集成电路下层硬件电路的映射系统,如图7a所示为该系统的集成电路下层硬件映射方法,包括以下步骤:(本实施例中“时空图”与“算子时空图”等同,前者仅为简称。)
步骤S1,对程序进行分析,即读取描述集成电路算法的计算机语言程序,根据该计算机语言的规则从所述计算机语言程序中识别出被映射的执行对象和参数对象。专用集成电路,用于实现特定的协议或者功能,而这些功能和协议通常首先用计算机语言程序进行描述,其中的计算机语言通常采用C语言或MATLAB语言等。再将编写的计算机语言程序输入到本发明的映射系统中,该映射系统根据编写程序所用计算机语言的规则从所述计算机语言程序中识别出被映射的执行对象和参数对象。
本实施方式中该执行对象包括运算指令和/或控制指令,该参数对象包括输入数据、输出数据、中间数据中的至少一种。本实施例中的运算指令包括加、减、乘和移位等运算。
步骤S2,生成数据控制流图,将识别出的执行对象和参数对象映射成描述集成电路算法的数据控制流图中的相应节点。将所述运算指令映射为处理框图,将所述控制指令映射为用于标识状态、状态转移条件及状态控制信号的控制流,将所述输入数据、输出数据和中间数据映射为数据流上的存储节点。
步骤S3,算子时空图生成步骤,用于根据数据控制流图中的各节点所进行的处理功能从预先建立的算子单元库中取出对应功能的至少一个算子单元,将数据控制流图转换成由算子单元组成的算子时空图。先将数据控制流图根据其数据流相关性展开,然后将展开后的各节点转换成可完成该节点功能的算子单元。用一个或多个算子单元的组合取代数据控制流图中的各节点,一个或多个算子单元的组合可完成与各节点相同的功能。对于如何将数据控制流图展开,包括但不限于以下几种方式:如果数据控制流图中的数据流为顺序相关数据流结构,则将顺序相关数据流采用流水线的方式展开;如果数据控制流图中的数据流中存在反馈,即该数据流是一个循环,则该数据流存在数据相关性,因此该数据流不能转化为流水结构;但如果该数据流内部数据之间不存在数据相关性时,则将所述内部数据不存在数据相关性的各数据流采用局部流水线的方式展开;如果数据控制流图中的数据流之间不存在数据相关性,则将该数据流采用并行方式展开,并转换成由算子单元组成的算子时空图。
步骤S4,时序约束步骤,用于根据用户规格要求和目标集成电路工艺的要求确定出总时序约束,对算子时空图中的每个算子单元标注时间。另一方面,从算子单元库中可以提取算子时序信息,对算子时空图做时序标注,形成时序约束的对象。从而根据数据流特性可以将时序约束具体到算子时空图的每个层级,实现对算子时空图的每个层级进行时序约束。由于算子可以构成不同算子功能块,进而构成不同的算子功能群落,则每个算子功能群落为一个算子层级。
如果所述数据流结构为并行数据流,则将总时序约束平分给到对应的时空图中的每个算子层级,并将每个算子层级的时序约束平分到该算子层级中的每一个算子单元。将数据控制流中串行各节点所对应的各算子层级总的算子的基本时序单位作为总体时序约束,按照各算子层级中最长运算路径所映射的运算算子的时序占各个算子层级中最长运算路径所映射的算子单元对应的时序总和的比例来分配各算子层级的时序。
步骤S5,时空图压缩步骤,用于根据时间标注对时空图进行空间上(即硬件资源上或面积上)的聚类压缩,并使之总体算法执行时间最接近于总时序约束。
在一种实施例中,对时空图进行压缩包括以下步骤:在算子时空图中查找出属性相同的运算类算子和/或存储属性相同的存储类算子;然后根据时间标注对运算属性相同的运算类算子在空间上进行合并压缩和/或将存储属性相同的存储类算子在空间上进行合并压缩;然后引入控制类算子,对压缩后的运算类算子和/或存储类运算算子生成相应配置指令,实现运算类算子和/或存储类算子的复用。
聚类压缩步骤和生成可重构算子功能块的步骤,都会产生不只一种结果。不同的函数调用同一子函数,由于约束时间不同,所产生的聚类结果也不同。因此需要根据时间、面积、功耗等参数进行优化,按性能(执行时间)排出顺序,恰好满足时间约束的聚类结果表示其硬件实现代价最小,因此选择总体算法执行时间最接近于完成集成电路算法所需要的总时序约束的时空图作为聚类压缩的优化结果。
步骤S6,下层硬件映射步骤,根据聚类压缩后的时空图生成集成电路下层硬件逻辑描述。
基于上述的集成电路下层硬件映射方法,本发明还公开了一种集成电路下层硬件映射装置,请参考图7b,本实施例的集成电路下层硬件映射装置包括:
程序分析模块1,用于读取描述集成电路算法的计算机语言程序,根据该计算机语言的规则从所述计算机语言程序中识别出被映射的执行对象和参数对象;数据控制流图生成模块2,用于将识别出的执行对象和参数对象映射成描述集成电路算法的数据控制流图;算子时空图生成模块3,用于根据数据控制流图中的各节点所进行的处理功能从预先建立的算子单元库中取出对应功能的至少一个算子单元,从而将数据控制流图转换成由算子单元组成的算子时空图;时序约束模块4,用于根据用户规格需求和目标集成电路工艺的要求确定出总时序约束,对算子时空图中的每个算子单元标注时间,对算子时空图的每个层级进行时序约束;时空图压缩模块5,用于根据时间标注对时空图时进行空间上的聚类压缩,并使之总体算法执行时间最接近于总时序约束;下层硬件映射模块6,根据聚类压缩后的时空图生成集成电路下层硬件电路。
下面结合具体实施例对本发明的集成电路下层硬件映射方法和装置进行说明。
H.264是国际电联(ITU-T)和国际标准化组织(ISO)共同组建的联合视频组(JVT)共同制定的数字视频编码标准。本实施例中以H.264标准的C语言描述的X264_me_search函数为例,对本发明的方法进行更为详细的说明。
如图8所示,为对函数X264me search进行分析包括步骤:
S11、读取计算机语言程序,并在该计算机语言程序中查找函数。在本实施例中,首先读取程序,并进行语法和词法分析,得到函数X264_me_search。
S12、对该函数进行解析,得到该函数的函数调用关系以及参数对象,该参数对象包括该函数的输入数据、输出数据、输入常量,以及该上层函数的中间数据,并对该函数的各参数对象进行相应的数据相关性、共享存储、分布存储等信息的标注。在本实施例中,对函数x264_me_search进行分析得到其输入变量、输出变量、输入常量和输出常量如表1所示:
表1:
信号名称 | 数据类型 | 方向 | 说明 |
i_pixel | Int | IN | ∥PIXEL WxH |
续表1:
在本实施例中,对该函数x264me search内部分析得到其内部变量和常量,如表2所示:
表2:
信号名称 | 数据类型 | 说明 |
i_pixel | 1nt | ∥像素点WxH |
bcost | 1nt | ∥临时最佳估计点 |
bmx | 1nt | ∥临时运动矢量x分量 |
bmy | 1nt | ∥临时运动矢量y分量 |
p_ffef | uint8t* | ∥参考帧地址 |
i_iter | 1nt | ∥循环变量 |
S13、根据的当前被解析的函数的函数调用关系判断当前被解析的函数包含下层函数,如是则查找下层函数,并执行步骤S14,否则结束操作。在本实施例中,如果当前被解析的函数中不包含下层函数,则该函数也为底层函数。在对该函数进行解析过程中,得到该函数调用了函数pixel_sad_16×16,则函数x264_me_search为上层函数,函数pixel_sad_16×16为下层函数。在本实施例中,如果当前被解析的函数中不包含下层函数,则该函数也为底层函数。
S14、对下层函数进行分析,得到该下层函数的参数对象,包括输入数据和输出数据,并对该下层函数的各参数对象进行数据相关性、共享存储、分布存储等信息的标注。在本实施例中,对下层函数pixel_sad_16×16进行分析,得到该下层函数pixel_sad_16×16的输入输出,如表3所示:
表3:
信号名称 | 数据类型 | 方向 | 说明 |
pix1 | uint8t* | IN | ∥输入像素值1 |
i_stride_pix1 | 1nt | IN | ∥像素值1存储行宽度 |
pix2 | uint8t* | IN | ∥输入像素值2 |
i_stride_pix2 | 1nt | IN | ∥像素值1存储行宽度 |
i_sum | 1nt | OUT | ∥SAD计算结果 |
本实施方式中,数据相关性是指分析得出的变量和/或常量之间相关联的关系,包括运算相关和存储相关。其中,运算相关即输入输出相关,经过运算算子的输出变量或输出信号相关于其输入变量或输入信号;存储相关包括写读相关、读写相关和写写相关,其中,写读相关是指针对同一个存储地址的变量正确操作顺序为先写入再读出,即读出变量相关于写入变量,如果在操作中先读后写即发生数据流错误;读写相关是指针对同一个存储地址的变量正确操作顺序为先读出再写入,即写入变量相关于读出变量,如果在操作中先写后读即读数据被覆盖发生错误;写写相关是指针对同一个存储地址的变量要按照正确操作顺序写入,即写入变量之间存在相关性。
本实施方式中,共享存储指连接到同一存储的各个模块之间可以相互访问,即它们之间的数据可以通过共享存储方式交换。而分布存储指每个模块有其独立分配的存储,每一个模块不可访问其它模块的存储,它们之间的数据通信只能通过通信通道交互。在硬件设计中,共享存储相对比分布存储增加了额外的互联资源,因此在生成算法数据控制流图时要根据其内容分出共享存储和分布存储。
如图9所示,根据分析得到的执行对象和参数对象,生成数据控制流图包括步骤:
S21、将识别得到的参数对象映射为数据流上的存储节点,并根据标注的存储信息对共享存储和分布存储进行区分。
S22、根据标注的数据相关性,将函数中的运算指令映射为数据控制流图中的处理框图。本实施例中的运算指令包括加、减、移位等运算。
S23、根据标注的数据相关性,将函数中的控制指令映射为数据控制流图中用于标识状态、状态转移条件及状态控制信号的控制流。
本实施例中控制指令包括函数之间的调用关系、循环指令等。循环语句包括静态循环和动态循环语句,其中动态循环语句又包括可变为静态循环的动态循环、单层动态循环和多层动态循环。静态循环指循环变量为常数;可变为静态循环的动态循环指循环次数为变量,但是当其应用的场合一旦确定,则其循环变量也就确定,即当该循环内应用的场合确定,则其循环次数也就变为常量,从而由动态循环变为静态循环;单层动态循环指循环次数为变量,并且没有嵌套其他循环;多层动态循环指循环次数为变量,并且嵌套有内层循环。
本实施例中,当循环语句为静态循环时,由该静态循环映射为控制流包括步骤:
S2411、根据循环次数将循环体展开,得到与循环次数相等个数的新的循环体。每个循环体中包括运算表达式,并且各个运算表达式之间有共同的参数对象。
在本实施例中,函数static void predict_16x16_dc中包含有三个循环语句:
由此,可知将第一个循环展开得到新的运算表达式,分别为:
dc=dc+src[-1];dc=dc+src[-i_stride];dc=dc+src[-1+i_stride];dc=dc+src[1-i_stride];......dc=dc+src[-1+15*i_stride];dc=dc+src[15-i_stride];dc=(dc+16)>>5。
第二个和第三个循环展开分别得到运算表达式为:
src[0]=dc;...src[15]=dc;
src[0+i_stride]=dc;...src[15+i_stride]=dc;...src[0+15*i_stride]=dc;...src[15+15*i_stride]=dc;
S2412、根据参数对象将展开得到的新表达式进行迭代,从而得到一个新的运算表达式。在本实施例中,由上述的第一个循环展开得到的新运算表达式可知,根据参数dc将这些运算表达式进行迭代,得到一个新的关于dc的表达式:
dc=(0+src[-1]+src[-i_stride]+src[-1+i_stride]+src[1-i_stride]+...+src[-1+15*i_stride]+src[15-i_stride]+16)>>5。
S2413、将该新运算表达式中的运算指令映射为处理框图,将运算表达式中的参数对象映射为数据流上的存储节点。在本实施例中,当循环语句为可变为静态循环的动态循环语句时,由于其应用的环境一旦确定,则其循环变量就变为常量,则其相应的映射步骤和静态循环语句的映射步骤相同。
在本实施例中,当循环语句为单层动态循环映射时,则控制流的生成步骤包括:
S2421a、将循环内容映射为处理框图,将循环指令映射为状态机。本实施例通过分别将循环内容映射为处理框图,将循环指令映射为状态机的方式,从而将数据流划分为两个状态:顺序状态(sequence)A和循环状态(loop)A,如图10所示。
在本实施例中,当循环为多层动态循环时,则控制流的生成方法包括:
S2421b、分别将内层循环语句和外层循环语句的内容映射为处理框图A和处理框图B,分别将外层循环映射为状态机B,将内层循环映射为状态机A,并且该处理框图A和状态机A映射在处理框图B内,如图11所示。即是说本实施例中,采用将多层动态循环中每个循环都映射为状态机,并进行状态机的嵌套的方式来生成相应的数据控制流的控制流。
当然本实施例中,该多层动态循环也可以采用将内层循环和外层循环映射为一个统一的状态机的方式,如图12所示,但是如果嵌套循环为N层循环,则将循环内容映射为处理框图,将循环映射为一个统一的状态机,且状态机的状态数为N+1。即是说本实施例中,当多层动态循环采用统一状态机时,状态机的状态数等于循环次数加一。
本实施例中,根据计算机语言程序中的控制语句包括分支控制语句,而分支控制语句又包括单分支控制语句和嵌套分支控制语句。
本实施例中,当该分支控制语句为单分支控制语句时,则:
S2421b、将分支控制指令映射为多路选择器。
S2422b,将控制语句内容映射为多路选择器的输入端处理框图。
S2423b、将控制条件映射为多路选择器的控制端处理框图,最后得到该分支控制语句的结构图,如图13所示。在本实施例中,如果该控制语句内容或/和控制条件为变量,则将其映射为存储节点。
在本实施例中,当该分支控制语句为嵌套分支控制语句时,由于之前已经对函数进行了分析,因此得到该嵌套分支控制语句的上层控制语句和底层控制语句,则:
S2421c、将上层分支控制指令映射为多路选择器1,将上层分支控制语句的内容映射为多路选择器1的输入端处理框图,将上层分支控制语句中的控制条件映射为该多路选择器1的控制端处理框图。
S2422c,将下层分支控制指令映射为多路选择器2,下层分支控制语句的内容映射为多路选择器2的输入端处理框图,将下层分支控制语句中的控制条件映射为多路选择器2的控制端处理框图。
S2423c,将多路选择1的输出作为多路选择器2的输入,从而得到该嵌套分支控制语句的结构图,如图14所示。
当然本实施例中,如果该控制语句内容或/和控制条件为变量,则将其映射为数据流上相应的存储节点。
基于上述的方法,从而分别得到对应于函数X264_me_search和函数pixel_sad_16×16,的数据控制流图,如图15和图16所示。
本实施例中的控制表达式转换方法是所有语言表达式转换的核心,其转换效率直接影响生成算法数据控制流图的数据量。本实施例提出的转换方法目标在于硬件实现,因此提前将并行性因素、硬件结构如状态机、多路选择器等考虑在内,可以更大程度上帮助硬件工程师进行硬件设计。
请参考图17,基于上述的数据控制流图的生成方法,本发明还提供一种数据控制流图生成装置,包括:程序分析模块1,用于读取描述集成电路算法的计算机语言程序,根据该种计算机语言的规则从计算机语言程序中识别出被映射的执行对象和参数对象,其中执行对象包括运算指令和/或控制指令,参数对象包括输入数据、输出数据和中间数据中的至少一种;数据控制流图生成模块2,用于将识别出的执行对象和参数对象映射成描述集成电路算法的数据控制流图。
请参考图18,本实施例中,数据控制流图生成模块2包括:执行对象映射子模块21,用于将执行对象中的运算指令映射为处理框图,并用于将执行对象中的控制指令映射为标识状态、状态转移条件及状态控制信号的控制流;参数对象映射子模块22,用于将参数对象映射为数据流上的存储节点。
基于上述方法生成的数据控制流图,下面结合具体实施例对生成算子时空图生成方法进行更为详细的说明。
由数据控制流图生成算子时空图的转换原理为:运算与存储实现结构包括1,输入输出共享同一存储器,运算部分可重构,即基于处理器的数据流形态;2流水线数据流形态;3并行数据流形态。其中第一类形态是通用形态,其数据流形式在时间上为串行,而在从高级语言到硬件转换中要根据时序需求将其并行化。
因此,本实施例中将数据流展开的原则为:
I、顺序相关数据流结构:利用算子单元展开,这种展开可以实施流水线,流水节拍按照最长的处理时间来算,由存储器作为流水线间数据存储,调整流水线节拍。例如,FunA、Func B和Func C的执行时间分别是3个、4个和5个单位时间;Func A的输入带宽为3data/cycle,输出带宽为2data/cycle,FuncB的输入带宽为5data/cycle,输出带宽为4data/cycle,Func C的输入带宽为7data/cycle,输出带宽为6data/cycle,将原始数据A_OUT、B_IN、B_OUT、C_IN、C_OUT和A_IN共享同一存储,而运算部分则重构。数据流关系为:A_OUT=B_IN,B_OUT=C_IN,且C_OUT≠A_IN时,即Func A的输出数据作为Func B的输入,Func B的输出数据作为Func C的输入,且不存在数据的反馈,则该数据流可以转化为流水线结构。其中,流水节拍按照最长的处理时间来算,由存储算子作为打断,调整流水线节拍,如图19所示。
II、存在反馈的数据流:当数据流是一个循环,对于有数据相关性的数据流不能转化为流水线结构。但是如果存储在同一共享存储的各批数据之间存在数据相关性,而每一批数据内部没有数据相关性时,可以实现处理每一批数据的内部流水,这样可以降低存储的带宽。例如,数据A_IN由A_IN_0,A_IN_1和A_IN_2组成,虽然A_IN整体依赖于C_OUT的输出,但是A_IN_0,A_IN_1和A_IN_2之间没有数据相关性,因此可以利用内部流水将A_IN_0,A_IN_1和A_IN_2分批来做,得到完整的C_OUT后再做Func A,从而得到局部流水线形式转换结构,如图20所示。
III、并行数据流结构:由于没有输入输出数据相关性,硬件可以并行独立展开。例如,当A_IN≠A_OUT≠B_OUT≠C_OUT,B_IN≠A_OUT≠B_OUT≠C_OUT,C_IN≠A_OUT≠B_OUT≠C_OUT时,即Func A,Func B,Func C的任一个输入与它们的输出都不相关,从而将数据流展开为并行形式,如图21所示。
基于上述的原则,由数据控制流图转换为相应的算子时空图具体包括步骤:
S31、预先建立算子单元库。
S32、根据标注的共享存储信息和分布存储信息,将输入输出数据和中间数据进行存储。
S33,当数据控制流图中存在顺序相关数据流,则将该数据流展开为流水线结构。
S34、在算子单元库中取出与展开后的各节点对应功能的算子单元。其中的数据控制流图中的节点所进行的处理功能简单时,则只需要对应算子单元库中的一个算子或者两个算子,然而当其功能模块进行的处理较复杂时,则需要对应于算子单元库中的多个算子,并用该多个算子的组合取代数据控制流图中相应的节点。本实施例中,函数x264me search的运算逻辑L0与L1分别为:L0逻辑:bmx=x264_clip3((m->mvp[0]+2)>>2,-m->i_mv_range,m->i_mv_range);L1逻辑:bmy=x264_clip3((m->mvp[1]+2)>>2,-m->i_mv_range,m->i_mv_range)。
本实施例中逻辑L0和逻辑L1为顺序相关数据流结构,因此将其展开为算子时空图如图22所示,其中,X0和X1为控制算子产生的配置信号,其控制流用虚线表示。图中的矩形处理框图代表映射的运算算子或存储算子,它们的互连由链接算子完成。
在本实施例中,数据流之间不仅仅存在顺序数据相关结构,也可能存在数据流的反馈,则执行步骤:S35,根据存储信息,判断存储在同一共享存储的各批数据内部的数据之间是否存在数据相关性,如果不存在数据相关性,则可以实现处理这一批数据的内部流水,从而降低存储的带宽。
在本实施例中,函数x264me search的运算逻辑L3包括两部分,分别为:第一部分:
bcost=h->pixf.sad[i_pixel](m->p_fenc,m->i_stride,p_fref,(m->i_stride)*5);
for(i_iter=0;i_iter<16;i_iter++)
{int best=0;int cost[4];
(cost[0])=h->pixf.sad[i_pixel](m->p_fenc,
m->i_stride,&p_fref[(-1)*m->i_stride*5+(0)],m->i_stride*5)+m->lm*(bs_size_se(((bmx+(0))<<2)-m->mvp[0])+bs_size_se(((bmy+(-1))<<2)-m->mvp[1]));
(cost[1])=h->pixf.sad[i_pixel](m->p_fenc,
m->i_stride,&p_fref[(1)*m->i_stride*5+(0)],m->i_stride*5)+m->lm*(bs_size_se(((bmx+(0))<<2)-m->mvp[0])+bs_size_se(((bmy+(1))<<2)-m->mvp[1]));
(cost[2])=h->pixf.sad[i_pixel](m->p_fenc,
m->i_stride,&p_fref[(0)*m->i_stride*5+(-1)],m->i_stride*5)+m->lm*(bs_size_se(((bmx+(-1))<<2)-m->mvp[0])+bs_size_se(((bmy+(0))<<2)-m->mvp[1]));
(cost[3])=h->pixf.sad[i_pixel](m->p_fenc,
m->i_stride,&p_fref[(0)*m->i_stride*5+(1)],m->i_stride*5)+m->lm*(bs_size_se(((bmx+(1))<<2)-m->mvp[0])+bs_size_se(((bmy+(0))<<2)-m->mvp[1]));
第二部分:
if(cost[1]<cost[0])best=1;
if(cost[2]<cost[best])best=2;
if(cost[3]<cost[best])best=3;
if(bcost<=cost[best])
break;
bcost=cost[best];
其中,第一部分为顺序相关数据流,第二部分中每一批数据内存在顺序相关数据流,并且存在反馈,则首先生成内部流水线,在进行反馈转换,则两部分转换为由算子单元组成的时空图,分别如图23a和图23b所示。
在本实施例中,存储在同一共享存储中的各批数据流之间也可能不存在数据相关性,即各批数据流之间相互独立,则将该数据流并行展开。
S36,将数据流实行并行流水线。在本实施例中,函数x264_me_search的运算逻辑L5为:m->mv[0]=bmx<<2;m->mv[1]=bmy<<2;则该逻辑L5为并行流水线,则其生成算子时空图如图24所示。
经过上述原则,由函数x264_me_search和函数pixel_sad_16×16的数据控制流图转换的算子时空图,分别如图25a和图25b所示。其中,由于函数X264_me_search的原程序中调用了函数pixel_sad_16×16,所以在图25a中,并没有明确标示出函数pixel_sad_16×16的具体算子时空图,函数pixel_sad_16×16的算子时空图如图25b所示。
基于上述的方法生成的数据控制流图,下面结合具体实施例对该数据控制流图施加时序约束的方法进行详细介绍。
对数据流图施加时序约束的方法,分为两个阶段:
I、确定算法的需求规格定义和目标集成电路工艺,并根据不同工艺采用不同算子基本时序单位。II、以函数为单位对数据流图进行时序约束的标注,根据其数据相关性和变量存储信息可得到从顶层向下层函数的时序约束。
基于上述原则,在本实施例中,对数据控制流图施加时序约束的方法包括步骤:
S41、根据用户规格需求和目标集成电路工艺的要求确定出总时序约束。本实施例中,对H.264算法的C程序描述X264代码,如果算法需求规格定义为(视频分辨率为1280×720像素点,每秒钟处理60帧视频数据)。如果目标集成电路工艺为130nm工艺,调用算子工艺库,可以得到标准单位时序为5ns,即利用算子工艺库可生成电路主频为200MHz。如果目标集成电路工艺为65nm工艺,调用算子工艺库,可以得到标准单位时序为2.5ns,即利用算子工艺库可生成电路主频为400MHz。
本实施例中,根据步骤S41得到总时序约束后,对数据控制流图中不同的数据流结构进行时序约束包括两种方法,分别为根据并行数据流进行时序约束;根据串行数据流进行时序约束。
当数据控制流图中的数据流为并行数据流时,步骤S42包括步骤:
S421a、将总时序约束平分到对应的时空图中的每个算子层级,并将每个算子层级的时序约束平分到该算子层级中的每一个算子单元。本实施例中以H.264算法为例,在帧层级处理中,其约束来自于算法需求规格定义为720p60fps,即每秒处理60帧。如果选用工艺为130nm工艺,利用算子工艺库可生成电路主频为200MHz,即得到该层级的时序约束为200MHz/60帧=3.33M cycle/帧。在宏块层级数据处理中,由于每一个宏块处理顺序为串行处理,因此时序约束条件按照串行分配,即每帧由80×45=3600个宏块组成,要求每个宏块的处理能力为1280×720×60/256=216000MB/s,每个宏块处理所需算子单位时序数为200MHz/216000MB/s=926cycle/MB,即将帧层级运算的时序平分给各宏块:3.33M cycle/帧/3600=926cycle/MB。由于视频编码器中的宏块分为帧间预测、帧内预测、变换和量化、熵编码、去块滤波等,这几个宏块处理操作为一种并行形式,因此各宏块的时序约束也为926cycle/MB,从而依次向下生成了底层处理模块的时序约束。
在本实施例中,对串行数据进行时序约束时,步骤S42包括步骤:
S421b,将数据控制流中串行各节点所对应的各算子层级总的算子的基本时序单位作为总体时序约束,按照各算子层级中最长运算路径所映射的运算算子的时序占各个算子层级中最长运算路径所映射的算子单元对应的时序总和的比例来分配各算子层级的时序。例如当两个算子层级A和B在数据控制流图中的关系为串行,而它们的总体时序约束为它们的N个算子基本时序和。以算子层级A和B中最长运算路径所映射的运算算子对应的时序为基准,按此基准得出比例来分配N个算子基本时序单位。例如算子层级A中最长运算路径所映射的运算算子数为Ma个算子,所对应Na个算子基本时序单位;算子层级B中最长运算路径所映射的运算算子数为Mb个算子,所对应Nb个算子基本时序单位,那么分配到算子层级A上的时序约束为:分配到算子层级B上的时序约束为:
本实施例中,运算算子可以是多基本时序单位执行,因此算子个数与算子基本时序单位不一定一致。
S422b,当数据控制流图中串行数据流含有并行数据的标识,则根据该并行数据的标识对步骤S421b中时序约束进行修正。例如,模块A可以得到信息p-x-n-m,其中p为并行性标识,x为并行性种类,包括流水线并行、局部流水线并行、数据并行等类型;n为并行位置,即第n个处理阶段并行;m为并行数。
基于上述的方法,对图25a和图25b所示的结构时行时序标注后的结构如图26a和图26b所示。
由于图25a中所示结构调用了函数pixel_sad_16×16的算子结构,所以先对图25b所示结构进行压缩,压缩后的结果如图27所示;然后再根据对图27所示的时空图进行压缩的方法对图25a所示结构时行压缩,从而得到压缩后的函数X264_me_search的时空图。
在对25a和图25b所示结构进行时空图压缩时,主要遵循以下原则:
1、对算子时空图中运算属性相同的运算类算子进行聚类压缩。比如,时空图中可以将两个并行的加法操作算子压缩成一个加法操作算子,同时通过引入控制算子的方式实现压缩后的加法算子的复用,完成与压缩前的两个加法算子相同的功能。由此可见,对算子时空图进行压缩后,算子的数目可以大幅度的减少,从而节约了集成电路的面积,相应地,压缩后的算子通过控制算子实现复用,增加了集成电路总算法的执行时间。可以理解的是,对运算类算子的聚类压缩必然引起存储类算子、控制类算子、路径类算子和时钟类算子也相应地发生变化,所以可以根据实际情况对上述算子也作相应的聚类压缩以进一步节约集成电路面积,尤其是其中的存储类算子。
2、在引入控制算子的同时,生成相应的配置指令,所述配置指令用于控制生成的算子按照预定的方式工作,从而实现与压缩前算子的相同功能。
3、对于同一个算子时空图可能的聚类压缩结果有多种。因此,在压缩过程中,选择压缩后时空图总算法执行时间最接近约束时间的时空图作为最终的压缩结果,选择总算法执行时间最接近约束时间的时空图作为压缩结果,可以在保证满足时序条件的情况下,最大地节约集成电路的面积。约束时间是根据用户提出的性能指标而计算出的集成电路最大执行时间。
上述对时空图聚类压缩后,可以减小集成电路的面积和功耗。并且,聚类压缩后生成的算子具有一定的规整性。
上述对时空图进行聚类压缩后,还可以对其中的某些算子时行优化,一种优化的方式是对某些算子时行固化定制。比如,图28中左边为一种压缩后的运算类算子,由于其中的logic单元并没有使用,所以可以将该算子的logic单元去除后得到图28中右边所示的算子结构,进一步地缩小了算子的面积。又比如,对于图2所示的ADDS算子,由于通过改变控制位X的值,可以使该算子实现不同的功能,而在某一具体的集成电路中,实际上只用到了该算子的相加移位操作,则可以将该算子的控制位X的值固定为000,从而满足功能要求的前提下节约了集成电路的功耗。通过固化定制的方法能够电路中仅出现实现相同功能操作的最小硬件,然后对这些最小硬件进行全定制设计,使其没有其它的扩展功能。这样,既可以保证算法的正确执行,又可以优化集成电路的面积和功耗。
对X264_me_search函数聚类压缩前后的时空图进行分析后,可以得到图29所示的表格。从该表格中可以看出,经过聚类压缩后,所用到的算子数由1724减少到139个,虽然相应地时序从292个周期增加到的500个周期,但500个周期依旧小于X264_me_search的约束周期600。由此可见,经过聚类压缩后,在保证总算法的执行时间满足时序约束的条件下,还可以大幅度地降低所用到的算子个数,从而节约了集成电路的面积和功耗。
基于上述的方法,通过对以H.264标准的C语言描述的X264_me_search函数进行程序分析,并进行映射后得到如图15所示的函数X264_me_search的数据控制流图,在由该数据控制流图转换为如图25a和图25b所示的算子时空图,根据数据相关性等信息对数据控制流图进行时序约束得到如图26a和图26b所示的时序约束图,然后根据时间标注对时空图进行聚类压缩得到如图27所示的函数pixel_sad_16×16的聚类压缩后的时空图,最后再由该压缩后的时空图生成集成电路下层硬件电路。由于在对计算机语言程序分析过程中,得到数据相关性、数据可并行性和相应控制信息,并将该程序映射为数据控制流图,从而使得得到的数据控制流图包含数据相关性、数据可并行性和相应控制信息,从而可以有力辅助硬件电路设计人员进行电路设计。并且本实施例的装置能够实现将计算机语言程序自动映射为数据控制流图,从而再转换为算子时空图,极大提升集成电路硬件结构设计效率。
本发明提供的从计算机语言程序生成数据控制流图的方法不仅适应于上述实施例中,还可用于其它由计算机语言程序生成集成电路下层硬件逻辑描述的映射过程。
以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (8)
1.集成电路下层硬件映射方法,其特征在于包括:
程序分析步骤,用于读取描述集成电路算法的计算机语言程序,根据该计算机语言的规则从所述计算机语言程序中识别出被映射的执行对象和参数对象;
数据控制流图生成步骤,用于将识别出的执行对象映射成描述集成电路算法的数据流图中的处理框图或控制流,参数对象映射成描述集成电路算法的数据控制流图中的存储节点;
算子时空图生成步骤,用于根据数据控制流图中的各节点所进行的功能处理从预先建立的算子单元库中取出对应功能的至少一个算子单元,将数据控制流图转换成由算子单元组成的算子时空图;
时序约束步骤,用于根据用户规格需求和目标集成电路工艺的要求确定出总时序约束,对算子时空图中的每个算子单元标注时间,对算子时空图的每个层级进行时序约束;
算子时空图压缩步骤,用于根据时间标注对算子时空图进行空间上的聚类压缩,并使之总体算法执行时间最接近于总时序约束;
下层硬件映射步骤,根据聚类压缩后的算子时空图生成集成电路下层硬件逻辑描述。
2.如权利要求1所述的集成电路下层硬件映射方法,其特征在于,所述执行对象包括运算指令和/或控制指令,所述参数对象包括输入数据、输出数据和中间数据中的至少一种。
3.如权利要求2所述的集成电路下层硬件映射方法,其特征在于,所述程序分析步骤包括:根据该种计算机语言的规则从所述计算机语言程序中查找出函数,对所述函数的输入输出和函数内的运算进行解析,识别出执行对象和参数对象,在解析过程中,如果当前被解析的函数为包含下层函数的上层函数,则继续对下层函数进行解析。
4.如权利要求3所述的集成电路下层硬件映射方法,其特征在于,所述控制指令为循环语句中的循环指令,所述循环语句包括静态循环语句和动态循环语句,所述数据控制流图生成步骤包括:
当循环语句为静态循环语句时,根据循环次数将循环体展开,在循环体展开后带入参数对象得到新的运算表达式,将所述运算表达式中的运算指令映射为处理框图,将所述运算表达式中的参数对象映射为数据流上的存储节点;
当循环语句为可变为静态循环语句的动态循环语句时,根据调用的不同场合变动态循环语句为静态循环语句,并将其展开得到新的运算表达式,将所述运算表达式中的运算指令映射为处理框图,将所述运算表达式中的参数对象映射为数据流上的存储节点;
当循环语句为单层动态循环语句时,将循环语句的内容映射为处理框图,将循环指令映射为状态机;
当循环语句为多层动态循环语句时,分别将外层循环语句和内层循环语句的内容映射为第一处理框图和第二处理框图,将外层循环指令映射为第一状态机,将内层循环指令映射为第二状态机,并且所述第二处理框图和第二状态机映射在所述第一处理框图内;或分别将外层循环语句和内层循环语句的内容映射为第一处理框图和第二处理框图,将循环指令映射为状态机,并且所述第二处理框图映射在所述第一处理框图内,并且所述状态机的状态数等于所述循环的循环次数加一。
5.如权利要求4所述的集成电路下层硬件映射方法,其特征在于,所述控制指令为分支控制语句中的控制指令,所述数据控制流图生成步骤包括:
将所述分支控制指令映射为多路选择器,分支控制语句的内容映射为多路选择器的输入端处理框图,将分支控制语句的控制条件映射为所述多路选择器的控制端处理框图。
6.如权利要求5所述的集成电路下层硬件映射方法,其特征在于,所述分支控制语句为嵌套分支控制语句,则将上层分支控制指令映射为第一多路选择器,所述上层分支控制语句的内容映射为所述第一多路选择器的输入端处理框图,所述上层分支控制语句的控制条件映射为所述第一多路选择器的控制端处理框图;将下层分支控制指令映射为第二多路选择器,所述下层分支控制语句的内容所述第二多路选择器的输入端处理框图,所述下层分支控制语句的控制条件映射为所述第二多路选择器的控制端处理框图,并且所述第一多路选择器的输出作为所述第二多路选择器的输入。
7.集成电路下层硬件映射装置,其特征在于包括:
程序分析模块,用于读取用于描述集成电路算法的计算机语言程序,根据该计算机语言的规则从所述计算机语言程序中识别出被映射的执行对象和参数对象;
数据控制流图生成模块,用于将识别出的执行对象映射成描述集成电路算法的数据流图中的处理框图或控制流,参数对象映射成描述集成电路算法的数据控制流图中的存储节点;
算子时空图生成模块,用于根据数据控制流图中的各节点所进行的功能处理从预先建立的算子单元库中取出对应功能的至少一个算子单元,将数据控制流图转换成由算子单元组成的算子时空图;
时序约束模块,用于根据用户规格需求和目标集成电路工艺的要求确定出总时序约束,对算子时空图中的每个算子单元标注时间,对算子时空图的每个层级进行时序约束;
算子时空图压缩模块,用于根据时间标注对算子时空图进行空间上的聚类压缩,并使之总体算法执行时间最接近于总时序约束;
下层硬件映射模块,根据聚类压缩后的算子时空图生成集成电路下层硬件逻辑描述。
8.如权利要求7所述的集成电路下层硬件映射装置,其特征在于,
所述执行对象包括运算指令和/或控制指令,所述参数对象包括输入数据、输出数据和中间数据中的至少一种。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010622446.XA CN102054109B (zh) | 2010-12-31 | 2010-12-31 | 集成电路下层硬件映射方法、数据控制流生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010622446.XA CN102054109B (zh) | 2010-12-31 | 2010-12-31 | 集成电路下层硬件映射方法、数据控制流生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102054109A CN102054109A (zh) | 2011-05-11 |
CN102054109B true CN102054109B (zh) | 2014-03-19 |
Family
ID=43958422
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010622446.XA Expired - Fee Related CN102054109B (zh) | 2010-12-31 | 2010-12-31 | 集成电路下层硬件映射方法、数据控制流生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102054109B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102054107B (zh) * | 2010-12-31 | 2013-11-06 | 北京大学深圳研究生院 | 集成电路下层硬件映射方法、时空图生成方法及装置 |
CN102043886B (zh) * | 2010-12-31 | 2012-10-24 | 北京大学深圳研究生院 | 集成电路下层硬件映射方法、数据控制流时序约束方法及装置 |
US20130097568A1 (en) * | 2011-10-14 | 2013-04-18 | William W. Yang | Global clock handler object for hdl environment |
CN102693340B (zh) * | 2012-05-19 | 2014-04-09 | 孙凌宇 | 基于多水平划分法和赋权超图的大规模集成电路划分方法 |
CN103647522A (zh) * | 2013-11-19 | 2014-03-19 | 吕晓兰 | 一种基于四模余数系统的fir滤波器及其设计方法 |
CN108170957B (zh) * | 2017-12-28 | 2022-01-04 | 佛山中科芯蔚科技有限公司 | 数据控制流图的生成方法、系统及集成电路设计方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7530047B2 (en) * | 2003-09-19 | 2009-05-05 | Cadence Design Systems, Inc. | Optimized mapping of an integrated circuit design to multiple cell libraries during a single synthesis pass |
CN101901161A (zh) * | 2010-07-21 | 2010-12-01 | 四川大学 | 一种面向能耗相关软/硬件划分的层次化控制数据流图建模方法 |
CN102043886A (zh) * | 2010-12-31 | 2011-05-04 | 北京大学深圳研究生院 | 集成电路下层硬件映射方法、数据控制流时序约束方法及装置 |
CN102054108A (zh) * | 2010-12-31 | 2011-05-11 | 北京大学深圳研究生院 | 集成电路下层硬件映射方法、时空图压缩方法及装置 |
CN102054107A (zh) * | 2010-12-31 | 2011-05-11 | 北京大学深圳研究生院 | 集成电路下层硬件映射方法、时空图生成方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4397744B2 (ja) * | 2004-06-25 | 2010-01-13 | パナソニック株式会社 | 半導体集積回路の高位合成方法 |
-
2010
- 2010-12-31 CN CN201010622446.XA patent/CN102054109B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7530047B2 (en) * | 2003-09-19 | 2009-05-05 | Cadence Design Systems, Inc. | Optimized mapping of an integrated circuit design to multiple cell libraries during a single synthesis pass |
CN101901161A (zh) * | 2010-07-21 | 2010-12-01 | 四川大学 | 一种面向能耗相关软/硬件划分的层次化控制数据流图建模方法 |
CN102043886A (zh) * | 2010-12-31 | 2011-05-04 | 北京大学深圳研究生院 | 集成电路下层硬件映射方法、数据控制流时序约束方法及装置 |
CN102054108A (zh) * | 2010-12-31 | 2011-05-11 | 北京大学深圳研究生院 | 集成电路下层硬件映射方法、时空图压缩方法及装置 |
CN102054107A (zh) * | 2010-12-31 | 2011-05-11 | 北京大学深圳研究生院 | 集成电路下层硬件映射方法、时空图生成方法及装置 |
Non-Patent Citations (2)
Title |
---|
牛亚文.HCDFG-II-面向C语言系统描述的控制/数据流图表示.《计算机辅助设计与图形学学报》.2004,第16卷(第11期),全文. * |
王新安.算子设计方法缩小IC设计与制造间的"剪刀差".《集成电路应用》.2010,(第7期),全文. |
Also Published As
Publication number | Publication date |
---|---|
CN102054109A (zh) | 2011-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102043886B (zh) | 集成电路下层硬件映射方法、数据控制流时序约束方法及装置 | |
KR102258414B1 (ko) | 처리 장치 및 처리 방법 | |
CN102054109B (zh) | 集成电路下层硬件映射方法、数据控制流生成方法及装置 | |
CN102054108B (zh) | 集成电路下层硬件映射方法、时空图压缩方法及装置 | |
US7305649B2 (en) | Automatic generation of a streaming processor circuit | |
Kim et al. | FPGA-based CNN inference accelerator synthesized from multi-threaded C software | |
CN102055981B (zh) | 用于视频编码器的去块滤波器及其实现方法 | |
Catthoor et al. | Application-specific architectural methodologies for high-throughput digital signal and image processing | |
Hoffmann et al. | A survey on CNN and RNN implementations | |
Li et al. | Dynamic dataflow scheduling and computation mapping techniques for efficient depthwise separable convolution acceleration | |
CN102054107B (zh) | 集成电路下层硬件映射方法、时空图生成方法及装置 | |
CN113220630A (zh) | 一种硬件加速器的可重构阵列优化方法及自动调优方法 | |
Huang et al. | IECA: An in-execution configuration CNN accelerator with 30.55 GOPS/mm² area efficiency | |
Chiu et al. | Flexibility: FPGAs and CAD in deep learning acceleration | |
CN114691108A (zh) | 一种神经网络加速器自动化代码生成方法 | |
Xu et al. | CMSA: Configurable multi-directional systolic array for convolutional neural networks | |
CN113157638B (zh) | 一种低功耗存储器内计算处理器和处理运算方法 | |
CN113158599B (zh) | 基于量子信息学的芯片和芯片化eda装置 | |
Corvino et al. | Design space exploration in application-specific hardware synthesis for multiple communicating nested loops | |
Sau et al. | Automated design flow for coarse-grained reconfigurable platforms: An RVC-CAL multi-standard decoder use-case | |
CN102572415B (zh) | 在可重构处理器上映射和实现的运动补偿算法的方法 | |
CN102075763A (zh) | 用于视频编码器的帧内子块预测电路及其实现方法 | |
CN102075762B (zh) | 用于视频编码器的帧间预测电路及其实现方法 | |
Ji et al. | Hubpa: High utilization bidirectional pipeline architecture for neuromorphic computing | |
CN111178492A (zh) | 计算装置及相关产品、执行人工神经网络模型的计算方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20140319 Termination date: 20211231 |
|
CF01 | Termination of patent right due to non-payment of annual fee |