基于代码转换的高级综合优化方法与流程

文档序号:12466385阅读:401来源:国知局
基于代码转换的高级综合优化方法与流程

本发明涉及高层次综合(High Level Synthesis,HLS)工具优化技术,具体涉及一种基于代码转换的高级综合优化方法。



背景技术:

随着IC设计规模及应用复杂行不断提升,EDA(Electronic Design Automation)的自动化抽象层次越来越趋向于高层,高级综合工具变得越来越重要。高层次综合是一种将高层次语言有效地转化为满足设计约束的寄存器传输级(Register Transfer Level,RTL)描述的工具。HLS提高了硬件设计的抽象层次,具有以下突出优点,文献[1]及[2]表明:(1)硬件工程师可以减少设计时间,缩短产品上市周期;(2)软件工程师能完成硬件系统设计;(3)沟通了软件设计和硬件设计两个领域,展现了一种软硬件联合设计的方法,HLS被认为是下一代半导体工业中的核心角色,在企业界和学术界受到越来越多的关注。

现在的HLS工具在编译过程中可以采用不同的优化策略,如:操作链接,循环流水线化和循环展开等。这些现有工具通常只针对特定的代码结构执行优化策略,并且对输入代码有一定要求。一个适合HLS优化的代码结构能够产生性能优良的电路,并且只需要更少的电路资源,相反,不适合HLS优化的代码结构不仅综合后的电路性能差,而且还会使用大量的电路资源。

软件工程师在利用高层次语言C,C++进行开发与硬件工程师利用RTL设计语言设计电路的背景知识存在一定的差距。通常情况下,软件工程师在算法开发时并不会考虑数据依赖性,操作并行性和流水线处理等问题。所以软件工程师利用高层次语言设计的代码在经过HLS工具综合时,往往无法保证综合得到性能优异的电路,需要对原始高级算法进行代码修改和优化。



技术实现要素:

本发明的目的在于克服上述现有技术的不足,提出了对设计者的代码进行修改转化为HLS工具能够识别的特定结构,提高HLS工具的效率;通过去除数据间的依赖性提高并行性优化技术,提高电路性能,缩短方案开发时间,并综合考虑资源使用与性能的平衡。

本发明的技术方案:一种基于代码转换的高级综合优化方法,具体包括以下步骤:

(1)、检查数据依赖关系;

(2)、重新定义数据;

(3)、利用数据交换的结构实现多个函数并行。

所述步骤(1)数据依赖性指的是不同的函数共同操作一个数据,这个数据多为数组类型。

所述步骤(2)重新定义后的数据类型完全一样,分别用来存储不同数据。

所述步骤(3)利用数据交换的结构来对代码结构进行修改,实现多个函数并行。

本发明相对于现有技术有以下有益效果:

1、本发明提出了利用代码转换的方法来提高HLS工具对输入设计的优化效率,提高并行性。

2、本发明通用性强,适用于不同的C/C++设计方案。

3、本发明提高电路性能,缩短方案开发时间,并综合平衡资源使用与性能。

附图说明

图1本发明方法流程图。

图2本发明实施例中的函数之间的数据依赖性。

图3本发明实施例中的数据交换的结构伪代码。

具体实施方式

下面通过具体实施例和附图对本发明作进一步的说明。本发明的实施例是为了更好地使本领域的技术人员更好地理解本发明,并不对本发明作任何的限制。

如图1所示,一种基于代码转换的高级综合优化方法,具体包括以下步骤:

(1)、检查数据依赖关系:数据依赖性指的是不同的函数共同操作一个数据,这个数据多为数组类型。

(2)、重新定义数据:重新定义后的数据类型完全一样,分别用来存储不同数据。

(3)、利用数据交换的结构实现多个函数并行。

实施1:

本发明选择了一个在高级综合工具综合过程中经常出现但是无法优化的代码结构进行了代码转换,转换为高级综合工具能够识别的结构。下面详细阐述本发明中的优化方法,具体包括以下步骤:

(1)、检查数据依赖关系:

数据之间的依赖性指的是不同的函数共同操作一个数据,这个数据多为数组类型。如图2所示,当两个函数之间共同访问一个数据,彼此之间对数据的操作分别是读写关系时,即:当读函数读取完数据之后,写函数会更新数据内容,然后读函数再次读取数据内容,以此反复。

在这种情况下,高级综合之后,这两个函数模块是顺序执行的,即:Readfun函数读完数据A之后,Writefun函数才能写入A数据。如果这个数据很大,读取处理时间和写入更新时间就会变得很长,整个设计的时间就会变长,影响了整个设计速度性能。

(2)、重新定义数据;

当找到图2的函数与数据关系后,需要重新定义数据A。由于两个函数都对一个数据A进行操作,这在任何高级综合工具中都是不可优化的,本发明中提出的方法就是定义两组数据A1和A2,这两组数据类型完全一样,用来存储不同的数据,Readfun函数和Writefun函数分别访问不同的数据。这样,才有可以将两个函数的数据依赖性去除掉。去除掉两个函数的数据依赖性之后,还需要一个特定的代码结构才能实现综合后函数的并行。

(3)、利用数据交换的结构实现两个函数并行:

在定义了两组数据之后,还需要将图2中的代码结构改写才能实现综合后函数的并行。本发明利用数据交换的结构来对图2中的代码结构进行修改,该结构的主要实现方法是:当Readfun函数读取A1时,Writefun将写入A2,之后,交换操作数据,Readfun函数读取已经写好的A2,而Writefun将写入读取完成的A1。那么Readfun和Writefun将分别操作不同的数据。该结构的伪代码如图3所示。

经过上面的三个步骤之后,得到图3中的代码结构,这个代码结构已经完全去除数据依赖性,而且高级综合工具会将两个函数实现为两个模块,由于操作不同的数据,这两个模块是可以同时启动运行的。

实施例2:

本发明提供了一种基于代码转换的高级综合优化方法,提高了HLS工具对代码的优化效率,以一个人工下棋AI为例,当数据A为一个棋盘,存储这棋盘的当前数据,Readfun为评估函数,评估当前的局势,Writefun函数为写函数,将一种可能的走法写入棋盘。在这种情况下,Readfun函数和Writefun函数是图1的数据依赖形式,当经过高级综合之后是不可以实现并行的。

根据本发明中提出的方法,定义两个完全一样的数据类型的A1和A2,A1和A2都是当前的棋盘局势,当Readfun读取A1时,此时一种可能的走法由Writefun将写入A2,此时,A2内存储的是没有经过评估的第一种走法,之后,交换操作数据,Readfun读取存储第一种走法的A2,然后,Writefun函数将第二种走法写入A1。这样Readfun和Writefun将分别操作不同的数据,在经过HLS工具综合之后,Readfun和Writefun将被综合成两个模块,这两个模块由于访问不同的数据,模块之间没有数据依赖性,所以就可以被HLS工具自动优化为并行执行,提高了设计的并行度,减小了数据读写的操作周期数,提高了电路性能。另外,本发明提供优化方法对于不同的C/C++设计方案都可以提供良好的优化结果。

应当理解的是,这里所讨论的实施方案及实例只是为了说明,对本领域技术人员来说,可以加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。

相关文献:

[1]Coussy P,Gajski D D,Meredith M,et al.An introduction to high-level synthesis[J].IEEE Design&Test of Computers,2009,26(4):8-17.

[2]党宏社,王黎,王晓倩.基于Vivado HLS的FPGA开发与应用研究[J].陕西科技大学学报,2015,33(1):155-159.

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1