CN106155755B - 程序编译方法和程序编译器 - Google Patents
程序编译方法和程序编译器 Download PDFInfo
- Publication number
- CN106155755B CN106155755B CN201510300161.7A CN201510300161A CN106155755B CN 106155755 B CN106155755 B CN 106155755B CN 201510300161 A CN201510300161 A CN 201510300161A CN 106155755 B CN106155755 B CN 106155755B
- Authority
- CN
- China
- Prior art keywords
- program
- compiling
- data flow
- block
- grammar
- 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.)
- Active
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明涉及一种程序编译方法和程序编译器,所述方法包括:响应于用户的程序选择操作,确定属于C语言源程序的待处理应用程序;将所述应用程序处理成HDL程序和C语言软件程序;依据HDL程序生成硬件编译程序脚本,以及,依据C语言软件程序生成软件编译程序脚本;应用户操作,执行硬件编译脚本以将HDL程序处理得到硬件配置文件,以及,应用户操作,执行软件编译脚本以将C语言软件程序处理得到ELF格式的可执行文件。本发明提供的方案针对PRCA计算平台的特点或特性,将C语言源文件自动转换成可以应用在PRCA计算平台的文件。
Description
技术领域
本发明涉及计算机程序编译技术领域,更具体的说是涉及一种程序编译方法和程序编译器。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述可包括可以探究的概念,但不一定是之前已经想到或者已经探究的概念。因此,除非在此指出,否则在本部分中描述的内容对于本申请的说明书和权利要求书而言不是现有技术,并且并不因为包括在本部分中就承认是现有技术。
近年来,现场可编程门阵列(Field-Programmable Gate Array,FPGA)发展迅速,在某些计算应用中可以取得比CPU快数十倍的计算能力。在传统计算中引入FPGA作为加速部件的可重构计算(Reconfigurable Computing)也随之繁荣,作为研究机构和厂商制造了多种结构各异的可重构计算机。但是,针对这些可重构计算机的编译器开发,一直是可重构技术发展的瓶颈之一。
发明内容
发明人在实施本发明创造过程中,对相关技术进行了研究和分析:
软件编程模型依靠典型的串行指令流描述问题,符合人们处理问题的思维,但无法有效描述系统的并行行为;而硬件系统具有天然的并行特性,不易于被人们所理解,也没有有效的形式化方法加以描述。所以,硬件设计在很长时间内,不是通过程序设计方式来完成的,而是通过对物理器件间的直接组合的方式进行。
硬件设计语言(Hardware Design Language,HDL)的出现很大程度上改善了硬件设计方式。它具有和高级语言相似的基本特性,又具有一定的灵活性和抽象性,而且也能有效地描述硬件行为。但是,其抽象程度不高,编程模型与软件模型相比差距较大。因此,对于一般的应用程序开发者,很难入门和使用,并且,HDL语言只能描述硬件行为,不能描述软件程序,所以不能用其进行软硬件协同开发。
为了高效、简便地使用可重构计算机,目前高层次综合(High-Level Synthesis,HLS)成为新的研究热点。HLS是指使用高级程序设计语言协同进行软硬件设计,编译器使用高级语言程序综合处可配置的硬件逻辑。将高级语言综合导入现有设计流程。开发者能够迅速地试验多种设计理念,创制工作模型,例如SystemC、Handle-C或Impulse C。
其中:
SystemC是开放SystemC组织(Open SystemC Initiative,OSCI)组织制定并维护的一种建模平台,编程语言为C++,该平台可以实现通信模块、功能模块、硬件模块和软件模块在门级、寄存器传输级(Register-Transfer Level,RTL)、系统级等层次上的抽象,引进了端口、信号等数据类型描述及时钟、延时等概念。
Handle-C由Celoxica公司开发(现已被Mentor Graphics公司收购),编译器包含在DK设计套件中,基于标准C语言,为支持硬件设计增加了一些附带的特征,同时提供了用于并行处理的额外声明和并行程序间通信的结构。其围绕简单的时间模式进行设计,每个分配指令花费一个时钟周期,在设计中,开发者可以充分控制在任何时间点发生的任何事件,软件运行结构可预测且可控。
Streams-C是美国洛斯阿拉莫斯国家实验室(Los Alamos National Laboratory,LANL)开发的编程语言,为C语言的一个子集。配套的编译器开放源代码,将用户输入的C程序转换为可综合的超高速集成电路硬件描述语言(Very-High-Speed Integrated CircuitHardware Description Language,VHDL)代码。
Impulse C由Impulse Accelerated Technologies公司开发,参考了Streams-C的编程模型和部分设计思想。其配套编译器为CoDeveloper,可以针对嵌入式处理器平台生成必要的软硬件接口。
在对相关技术进行了研究和分析后,发明人发现上述编译器无法直接应用于PRCA计算平台中,并且上述编译器仅关注C语言向HDL语言的转化步骤,而对后续步骤的自动化支持不够。以CoDeveloper为例,得到HDL代码后,用户还需手动调用Xilinx ISE套件中的XPS软件建立工程,并经过一系列复杂的操作之后才能最终得到可下载的硬件配置文件。
有鉴于此,本发明的目的在于提供一种程序编译方法和程序编译器。
本发明的一方面,公开了一种程序编译方法,包括:
响应于用户的程序选择操作,确定属于C语言源程序的待处理应用程序;
将所述应用程序处理成HDL程序和C语言软件程序;
依据HDL程序生成硬件编译程序脚本,以及,依据C语言软件程序生成软件编译程序脚本;
应用户操作,执行硬件编译脚本以将HDL程序处理得到硬件配置文件,以及,应用户操作,执行软件编译脚本以将C语言软件程序处理得到ELF格式的可执行文件。
从上述技术方案可以看出,本发明提供的方案针对PRCA计算平台的特点或特性,将C语言源文件自动转换成可以应用在PRCA计算平台的硬件配置文件和ELF文件。并且,在开发过程中,用户不需要编写HDL程序,也不需要建立ISE工程,甚至可以完全不具备FPGA编程基础。这样不仅减轻了硬件程序编写的工作量,而且扩大了PRCA计算平台的使用范围。
在一些优选实施例中,上述将所述应用程序处理成HDL程序这个过程可以包括以下步骤:
预处理,包括依次对所述应用程序进行语法检查,宏替换和内联函数展开,及代码改写以增加临时变量的方式简化较长的语句;
对于所述应用程序中的临时变量及用户定义变量,以寄存器定义,对于数组,则对应Block RAM模块,然后对所述应用程序进行模块划分,将划分的块转换为数据流图,所述模块划分的顺序按照从大到小的顺序进行,直到划分成基本块为止;
创建一个有限状态自动机,将每个基本块作为状态机的一个状态,依据基本块之间的连接关系确定状态机之间的转换关系,利用所述状态自动机及所述数据流图,生成HDL程序和C语言软件程序。
优选的,所述将所述应用程序处理成HDL程序还包括:
生成编译报告,所述编译报告为编译概要或数据流图信息,所述编译概要用于指示编译参数及编译过程中出现的错误或警告。
优选的,所述硬件编译程序脚本由批处理文件和脚本文件组成,所述依据HDL程序生成硬件编译脚本包括:调用批处理文件,由批处理文件调用脚本文件,然后由脚本文件调用ISE,完成编译过程。
优选的,依据C语言软件程序生成软件编译脚本的过程包括:
预先编写一个标准的Makefile文件,并拷贝至预定目录下;
在UNIX或Linux环境下调用Make命令,调用软件编译脚本。(这个地方有些混乱。Make命令是用户调用的,目的是通过该命令调用软件编译脚本,这个脚本就是指Makefile文件。)
优选的,按照以下步骤将HDL程序处理得到硬件配置文件:
硬件编译脚本在执行时调用ISE建立工程,利用所述HDL程序及预设的硬件模块库,经综合、实现过程得到硬件配置文件。
优选的,所述将C语言软件程序处理得到ELF格式的可执行文件包括:
软件编译脚本调用GCC进行编译,利用所述C语言软件程序和预设的软件函数库,处理得到ELF格式的可执行文件。
本发明的另一方面,记载了一种程序编译器,其包括编译模块和脚本生成器,其中:
所述编译模块用于将用户选定的属于C语言源程序的待处理应用程序处理成HDL程序和C语言软件程序;
所述脚本生成器用于依据HDL程序生成硬件编译程序脚本,以及,依据C语言软件程序生成软件编译程序脚本,其中,所述硬件编译程序脚本在被执行时,将HDL程序处理得到硬件配置文件,所述软件编译脚本在被执行时,将C语言软件程序处理得到ELF格式的可执行文件。
优选的,上述程序编译器还包括用于对待处理应用程序进行预处理的部件,所述预处理包括依次对所述应用程序进行语法检查,宏替换和内联函数展开,及代码改写以增加临时变量的方式简化较长的语句;
所述编译模块包括:
定义模块,用于对于所述应用程序中的临时变量及用户定义变量,以寄存器定义,对于数组,则对应Block RAM模块;
划分模块,用于对所述应用程序进行模块划分,划分的顺序按照从大到小的顺序进行,直到划分成基本块为止;
数据流图单元,用于将划分的块转换为数据流图;
代码生成单元,用于创建一个有限状态自动机,将每个基本块作为状态机的一个状态,依据基本块之间的连接关系确定状态机之间的转换关系,利用所述状态自动机及所述数据流图,生成HDL程序和C语言软件程序。
优选的,上述程序编译器中,所述编译模块还包括生成编译报告的编译报告生成单元,所述编译报告为编译概要或数据流图信息,所述编译概要用于指示编译参数及编译过程中出现的错误或警告。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1示意性地示出了根据本发明实施方式在实际应用中的一个应用场景的框架示意图;
图2示意性地示出了根据本发明方法一实施方式的流程图;
图3图4示意性地示出了本发明实施方式中,核心编译模块将所述应用程序处理成HDL程序和C语言软件程序的流程图;
图5示意性地加法器的流图示意图;
图6示意性地示出了本发明装置一实施例方式的结构示意图;
图7示意性地示出了本发明装置另一实施例方式的结构示意图;
图8示意性地示出了本发明装置又一实施例方式的结构示意图;
图9示意性地示出了本发明装置另外一实施例方式的结构示意图。
具体实施方式
下面将参照本发明实施方式的方法的流程图和设备(或系统)的框图描述本发明的实施方式。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置的产品。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
根据本发明的实施方式,提出了一种程序编译方法和程序编译器。附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
为了方便技术人员理解,下面先对PRCA进行简单介绍:
2012年10月10日,一种新概念高效能计算机体系―基于认知的主动重构计算体系(简称为PRCA)被发布。
PRCA与普通计算体系相比,以下方面存在较大区别:
一、通信方式,PRCA的硬件程序运行在专用的FPGA服务器上,软件程序运行在通用服务器上。发明人经过研究发现,在PRCA平台中,两类服务器之间最方便的连接方式是千兆以太网,即千兆以太网被选定作为软硬件程序间的通信方式。这与采用PCI接口、PLB总线、InfiniBand作为通信方式的其他可重构系统明显不同。相应的,通信方式不同,软硬件程序就会有很大差异。
二、硬件结构,FPGA与相关外设的连接方式在不同的计算平台下总是存在一些差异。单就FPGA与内存的连接而言,可能存在的差异包括:内存的种类(DDR2或DDR3)、容量(2G或32G)、管脚接口类型。具体例如:PRCA平台为每个FPGA配备3条8GB DDR3内存,接口为204针。作为对比,另一种BEE3型可重构计算机为每个FPGA配备2条4GB DDR2内存,接口也为204针。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
发明概述
发明人在研究过程中,针对PRCA计算平台的特点或特性,将C语言源文件转换成可以应用在PRCA计算平台的硬件配置文件(bit文件)和ELF文件,软硬件之间的底层通信过程对用户透明。并且,在开发过程中,用户不需要编写HDL程序,也不需要建立ISE工程,甚至可以完全不具备FPGA编程基础。这样不仅减轻了硬件程序编写的工作量,而且扩大了PRCA计算平台的使用范围,使更多的应用能够通过可重构计算的方式快速实现,一些现有代码也能够以比较简单的方式进行复用。
并且,本方案中,软硬件之间的底层通信过程对用户是透明的,即用户在编程时不需了解底层通信的具体细节,具体通信的时候,底层模块会对用户数据进行封装,添加MAC地址、帧类型、序号等内容,用户看不到这些工作,也无法进行控制,就像透明一样。用户甚至可能不知道我们在使用以太网进行通信。如此,用户只需专注数据本身,不必在意底层细节,有利于提高开发效率,和保证程序的可靠性。还有一个优点是,如果PRCA平台和编译器做出了改进,已经写好的用户代码不需要修改,因为这些代码中不包含实现细节。
此外,通过本方案,一些现有代码也能够以比较简单的方式进行复用,例如,针对一个使用MPI写好的计算π的程序,传统的可重构系统开发方式,需要开发人员读懂原有的MPI程序后用HDL语言重写,而由于HDL语言的编写思路与C语言有很大不同,因此重写过程需要开发人员耗费较多的精力和时间。而如果采用本方案,则可以进行简单修改(例如将MPI_Init换成初始化函数,将MPI_Send和MPI_Recv换成定义的通信函数等),即可在PRCA平台上使用,关键的程序段都可以保留(例如计算π的算法),较大地节约了开发人员的时间和精力。
在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。
应用场景总览
参考图1,为本发明实施方式的一个示例性应用场景的框架示意图。其中,用户通过输入输出设备11与计算机12交互。本领域技术人员可以理解,图1所示的框架示意图仅是本发明的实施方式可以在其中得以实现的一个示例。本发明实施方式的适用范围不受到该框架任何方面的限制。
所述输入输出设备11可以是键盘和显示器的组合,也可以是触摸屏或者其他具有输入输出功能的设备。
在图1所示的示例性应用场景中,计算机12响应于用户输入的指令,进行相应操作,包括调用内部计算或处理模块对指定的程序或数据进行处理。
示例性方法
下面结合图1的应用场景,参考图2来描述根据本发明示例性实施方式的程序编译方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。
参考图2所示,为本发明提供的程序编译方法一实施方式的流程图,本实施方式可以包括以下步骤:
步骤S21、响应于用户的程序选择操作,确定属于C语言源程序的待处理应用程序。
用户可以通过输入输出设备11选择待处理应用程序,所述待处理应用程序可以是预先传输到计算机12中的,也可以是在用户从与计算机12连接的外部设备(例如U盘)中选择。
所述待处理应用程序分为软件部分和硬件部分,软件部分和硬件部分之间通过设定的函数(即通信函数)进行相互关联。
步骤S22、调用核心编译模块,将所述应用程序处理成HDL程序和C语言软件程序。
步骤S23、调用脚本生成器,依据所述HDL程序和C语言软件程序,生成软硬件程序编译脚本。
脚本的生成过程如下:
针对软件程序脚本,则预先编写一个标准的Makefile文件,并将其拷贝到预定目录下。于是,在生成软件程序时,在UNIX/Linux环境下调用make命令即可。
针对硬件程序脚本,硬件编译程序脚本由一个批处理文件(.bat)和一个脚本文件(.tcl)组成,在生成硬件编译程序脚本时,用户直接调用批处理文件,批处理文件再调用脚本文件,脚本文件最终调用ISE完成编译。
所述批处理文件内容是固定的,预先拷贝到预定目录下。
所述脚本文件大部分内容是固定的,但是其余内容是可变的。在主程序中,可以使用一个函数来调用一个脚本,从而生成这个脚本。该函数调用的脚本是固定的且预先写好的。该脚本的作用至少包括两点:一是将固定内容从自身逐行拷贝到新生成的脚本中,二是根据函数调用时传递的参数,生成一部分新内容,写到新生成的脚本中。函数传递的参数主要包括设计名称、用到的外设(比如,有没有用到DDR)等。
步骤S24、应用户操作,执行硬件编译脚本,将HDL程序处理得到硬件配置文件。
用户执行硬件编译脚本,脚本调用ISE建立工程,引进刚刚生成的HDL程序和硬件模块库,经综合、实现等步骤后,最终得到硬件配置文件(可配置的Bit文件)。
所述硬件模块库是一些预定义的、与应用无关的HDL文件,主要定义了两类硬件模块:一是与PRCA系统相关的接口模块,比如以太网接口、DDR接口等;二是与系统无关的IP模块,比如Xilinx浮点数计算模块。
所述ISE是Xilinx公司针对其FPGA产品提供的开发软件,具备TCL语言的调用接口。调用ISE建立工程就是通过TCL语言的命令实现的,包括以下步骤:
A、建立一个空的ISE工程,初始化相关变量。
B、选择FPGA的系列、型号、封装、速度等级。这些需要同PRCA平台使用的FPGA一致,是在编译器中预先设定好的。
C、设定工程基本设置。比如,选择顶层模块输入方式为HDL、默认HDL语言为Verilog、综合工具为XST(Xilinx公司的综合器),等等。这部分内容也是确定的。
D、加入工程文件。将刚刚生成的HDL文件和用到的库文件逐个添加到ISE工程中,包括HDL源文件(.v,.vhd)、网表文件(.ngc)和约束文件(.ucf)等。这里有一部分内容是可变的,需要上文提到的函数传递的信息,比如工程名称、用到的外设等。
E、建立库。部分Xilinx的IP核属于XilinxCoreLib库,而不是默认的Work库,所以需要新建XilinxCoreLib库,并将相关文件移到该库中。
F、设定综合选项。这些选项会对生成的bit文件产生影响,所以要正确设置。设置的方式是固定的,预先定义在编译器中。
在建立ISE工程以后,就可以进行综合、实现过程,该过程包括以下步骤:
①综合(Synthesize)。在脚本中调用ISE的综合命令即可。“综合”一词大致有广义和狭义两种用法,这里取狭义,指根据FPGA源文件生成网表文件(.ngc)的过程;广义则可指代整个硬件配置文件的生成过程,相当于软件的“编译”。
②实现(Implement)。也是在脚本中调用一条ISE命令即可。但该命令在执行时,实际上包括转换(Translate)、映射(Map)和布线(Place&Route)等步骤,是整个硬件配置文件生成过程中最耗时的步骤。
③生成配置文件(Generate Programming File)。产生一条ISE命令以执行生成配置文件的步骤。
bit文件也可称为“配置文件”,其常用的一种格式的后缀是.bit(还有其他格式,对应有其他后缀,如.mcs)。
该配置文件对于硬件而言,相当于的可执行文件。
将配置文件“配置”(program,中文也常说“下载”、“烧写”等)到FPGA中,就可改变其内部逻辑,使其完成预定的功能。反过来讲,如果想使用FPGA,就需要用配置文件对其进行配置或“编程”。
步骤S25、应用户操作,执行软件编译脚本,将C语言软件程序处理得到ELF格式的可执行文件。
用户执行软件编译脚本,脚本调用GCC进行编译,引进刚刚生成的C语言软件程序和软件函数库,最终得到ELF格式的可执行文件。
针对在程序设计中经常用到的功能,预先编译一些库(例如用于以太网通信的libpcap库),存放在计算机的特定位置(比如/usr/local),在程序设计过程中,需要实现这些功能时,即可通过特定位置查找这些相应的库即可使用。
具体过程如下:
用户执行软件编译脚本,通过Make调用预先准备的Makefile,所述Makefile中写有一条GCC命令,该命令中包含生成C语言源程序文件标识、软件函数库标识和生成文件标识等信息;于是,调用Makefile时,依据GCC命令中的标识查找相应的库,确定所需数据,然后再将C语言软件程序和所述所需数据进行编译,形成ELF格式的可执行文件。
此外,本实施例中,预先将待处理应用程序生成脚本,脚本可以使软硬件程序的生成更方便,生成的过程只需一条简单的命令即可,无需手工书写相关命令(例如)GCC命令、手工添加编译所需的库,及在编译硬件程序时手工建立ISE工程(建立ISE工程需要大量的鼠标操作,需要添加文件,更改工程选项等),节省了大量的人工,减少了出错的几率。
当然,在其他实施例中,也可以不需要生成脚本,而是直接通过手工方式书写相关命令(例如GCC命令),并在需要时添加编译所需的库,编译硬件程序时手工建立ISE工程,甚至也可以手工书写脚本。
在执行上述各步骤后,就可以应用户操作,将Bit文件和ELF文件加载到PRCA计算平台,即调用PRCA下载工具将Bit文件和ELF文件加载到PRCA计算平台,得到用户所需的计算结果。比如用户想计算N-Body问题,他输入的数据是某一时刻各个天体的质量、位置和速度,经PRCA计算后将返回下一时刻各个天体的位置和速度。再比如用户想进行图像识别,输入的数据是两幅图片的像素信息,经计算后得到的结果是表示这两幅图片间相似程度的一个数值等。
可以看出,用户在C语言源码中使用流结构体(stream)代表软硬件之间的连接关系,使用流读写函数(stream_write、stream_read)进行通信,这些结构体和函数在编译时被替换为具有实际通信功能的模块或函数。具体来讲,在硬件程序中,流被例化为具有收发包功能的stream模块,流读写函数被转化为对stream模块的读写操作;在软件程序中,流被例化为libpcap中的pcap_t结构,流读写函数被转化为收发包操作。这个过程中,用户在编写源码时使用的仅仅是抽象的结构体或函数。硬件方面的stream模块及相关硬件读写操作、软件方面调用libpcap收发包的过程等等都是定义在编译器中,由预先定义好的代码具体实施收发包的功能。综上,软硬件之间的底层通信过程是对用户透明的。
并且,因为通信过程透明,用户只需调用简单的函数就可以实现软硬件之间的通信。在基于消息传递的编程模型中,用于通信的函数都是比较类似的,只要替换这些函数就能将其移植到PRCA平台上。比如上面所举关于MPI的例子。这个过程的“简单”是指相对于HDL方式重新代码而言,修改代码较少、难度较低,仍需开发人员手工修改,软件无法自动完成。
上述步骤S22中生成HDL程序的具体实现流程如图3所示,包括以下步骤:
步骤S31、预处理。
在转换工作开始时,核心编译模块首先对C语言源文件的硬件部分程序进行检查和预处理,为后面的转换工作做准备。先进行语法检查,在语法检查没问题后,进行宏替换和内联函数展开,最后进行代码改写,以增加临时变量的方式简化较长的语句。建立输出文件,打印头部信息。
所述宏替换操作类似于文本编辑工具(如记事本)的“替换”功能。在源文件中宏的定义方式为:
#define PI 3.1416
在进行宏替换的时候,编译器就会遍历源代码,将所有出现的“PI”换成“3.1416”。
所述内联函数展开道理类似。
假设内联函数定义为:
inline int bigger(int a,int b){return a>b?a:b;}
编译器遍历源代码,将所有形如bigger(a,b)的字符串替换为(a>b?a:b),其中a和b代表两个不同的变量,可以写作其他形式。
内联函数与宏的区别是内联函数会进行语法检查,此外宏也可以带参数,与内联函数的替换方式类似。
需要说明的是,为了方便数据流图的生成,需要先对源代码进行化简,使每一行语句仅包含一个运算符或一个函数。对于包含多个运算符和函数的语句,添加临时变量将其改写,添加临时变量的顺序与算式的优先级一致。比如对下面一行源代码:
square=x*x+y*y+z*z;
可以简化为
temp1=x*x;
temp2=y*y;
temp3=temp1+temp2;
temp4=z*z;
square=temp3+temp4。
从而实现对较长的语句的简化。
步骤S32、资源分配与数据流图生成。
对于用户定义变量和临时变量,在HDL文件中用寄存器定义;对于数组,生成对应的Block RAM模块。
根据C语言源程序生成数据流图(Data Flow Graph,DFG)。首先对C语言源程序进行模块划分,先分为较大的语法块,再将其逐步划分成更小的块,直到基本块为止。基本块是不再划分的语法块,已经可以被后续步骤直接分析。
所述语法块分为串行、循环、流水三种语法块,每种语法块均对应不同的处理方式。
其中:
语法块(Block)指一段关系比较紧密的代码,可以包括一行或多行。语法块可以嵌套,即较大的语法块可以进一步划分为较小的语法块。对于划分方法和语法块的边界(究竟包括哪些行),一般没有严格要求,以便于代码生成为准。基本块是不再划分的语法块,已经可以被后续步骤直接分析。
循环语法块(Loop)指可能被多次执行的语法块,在C语言源代码中用关键字显式标出,共有while、for、do-while三种形式。这种语法块有确切的边界,由C语言语法决定。
串行语法块(Serial)指顺序执行的语法块,其中的代码都只被执行一次。流水语法块(Pipeline)是在以上两种语法块上添加了流水编译宏的语法块,该编译宏写作“#PIPELINE”。定义流水语法块时,需用大括号指定代码范围,在头部添加编译宏。流水语法块编译后的代码采用流水线方式运行,比串行方式具有更高的效率,但会耗费更多的资源。一般来讲,流水语法块在循环语法块的基础上进行定义,这样易于提高系统性能。
下面介绍对于上述几种语法块的处理方式。
为了方便本领域技术人员更好理解本方案,下面先介绍相关基础知识:
数据流图是一种有向图(“有向图”是一种常见的数据结构,具有顶点和弧两种元素。每个弧从一个顶点指向其自身或另一个顶点,每个顶点通过弧可以与一个或多个顶点相连。图可以嵌套,即图的一部分仍可以称之为图,叫做原图的子图),每个顶点代表一种运算符或一个函数,每个弧代表一个变量。顶点和弧都具有延迟属性,其数值为整数。顶点的延迟表示输入信号变化到输出信号变化需要经过多少个时钟周期;弧的延迟表示信号从一端传递到另一端需要经过多少时钟周期。
时钟周期即时钟信号的周期。时钟信号是一种方波,一般由专门的晶振产生,具有固定的频率。它是硬件程序设计的基础,绝大多数模块都由时钟触发操作。时钟信号控制着整个系统的“节拍”,使得各部分可以协调工作。所以上文提到的延迟属性非常重要,影响到计算结果的正确性。
转换表是一个xml文档,存储在编译器所指定的目录中。这个文档记录了PRCA平台下硬件程序使用的模块的特性,包括其与C语言函数或操作符对应关系、延时特性、模块定义文件等等。
下面开始说明三种语法块的处理方式,每个语法块都转化为一个数据流图。
对于串行语法块,编译器逐行扫描源码。在扫描一行源码时,编译器根据源码中使用的函数或操作符,在转换表中找到其对应的硬件模块。然后遍历已生成的数据流图,查看是否该种模块已经被使用过;如果已经使用过,根据图中的延迟信息,判断该模块在当前时间能否被复用;如果不能复用或者模块是第一次出现,则创建一个新的顶点。找到或创建所需的顶点后,根据输入输出变量名创建弧,并通过这些弧使该顶点同其他顶点相连。这样就将一行代码中包含的信息添加到了数据流图中。
循环语法块可细分为两个部分,即循环条件和循环体。循环体就是一段串行程序,因此可以先采用和上文相同的办法生成一个单独的数据流图,然后对循环条件进行特殊处理。根据循环条件创建一个顶点,通过其连接循环体生成数据流图和其他语法块生成的数据流图。对于while循环和for循环,循环条件对应的顶点位于循环体之前;对于do-while循环,则位于循环体之后。循环体对应的数据流图原理循环条件的那端,不直接与其他数据流图相连,而是连接至循环条件,从而形成一个回路。图4为一个while循环或for循环的示意图,其中每个矩形都代表一个数据流图,内部可能具有很复杂的结构。
对于流水语法块,首先要生成一种前述数据流图,然后在其基础上进行修改。流水线操作是硬件设计中一种常见的加速方式,其实施的基础为硬件模块的流水特性。有的硬件模块处理数据需要的延时很长,但在处理结束之前有可以接收新的数据,比如一种浮点数开方模块,输入一个数据后需要27个时钟周期才能得到计算结果,但每个时钟周期都能输入一个新的数据,彼此不会产生冲突。这是由于模块内部具有大量寄存器可以存储中间结果,使每步计算可以像车间的流水线一样连续进行。这种流水特性反应为模块的Rate属性,表示每几个时钟周期可以输入一个数据。Rate值最高为1,表示每个时钟周期都能输入一个新的数据。Rate属性也记载在前文所述的转换表中。串行语法块和循环语法块在生成数据流图的时候都不考虑流水特性,只有一个模块将计算结果输出之后,才会输入新的数据。对于流水语法块,在生成上述数据流图之后,编译器会遍历生成的数据流图,查找其中各个模块的最低Rate值,将其作为整个语法块的Rate;然后按这个值重新调整数据流图的延迟属性,提高其执行效率。
上述用户定义变量和临时变量用于存储中间处理结果。
例如,在C语言源文件中用户定义一个变量:
int a;
则在HDL文件中(以Verilog为例)对应定义为
reg[31:0]r_a;
或
wire[31:0]w_a;
具体替换为哪个取决于该变量是否需要缓存。转换后寄存器的宽度为32位,是因为在软件程序中一个int型变量也占32位(4个字节)。
而数组指的是一组相同类型的变量,比如
int a[32];
编译器需要将其转变为一个映射到Block RAM的存储器
其中地址宽度为5位,刚好可以表示32个数据;每个数据宽度是32位,代表一个int。在软件程序中单个变量和数组没有本质区别,但硬件程序中不同。一般地,单个变量存储在Slice Register中,这种资源较少;数组存储在Block RAM中,这种资源较多,但使用起来受一些限制。为了映射到Block RAM,数组就需转换成上面的模块,较为繁琐。
步骤S33:代码生成。
创建一个有限状态自动机,将每个基本块作为状态机的一个状态;根据基本块之间的连接关系,确定状态机之间的转换关系。
根据步骤S32得到的数据流图生成HDL代码。对每个顶点,例化一个其代表的模块,将与顶点相连的弧映射为例化的模块的端口。根据顶点和弧具有的延时属性,添加一系列中间寄存器,使数据协调流动。比如附图5中的加法顶点及其相连的弧。
可以转化为下面的HDL代码(以Verilog HDL为例):
add add4(
.clock(clk),
.reset(rst),
.a(a),
.b(b),
.result(c)
);
“例化”是硬件设计中的术语。像上面的例子就是一个例化语句,表明向设计中添加一个add类型的模块,取名为add4。add类型的定义在文件的其他位置或是其他文件中。“.”后面跟的是端口映射表,表明add模块和本设计其他部分的连接关系。比如上面的例子中,本设计中的总线c和add模块的result端口相连。
步骤S34:生成顶层模块和编译报告。
生成顶层模块,引入上述生成的模块及外围接口模块,如以太网收发模块、DDR接口模块等。最后结束生成并给出编译报告。
所述编译报告主要有两种。一是编译概要信息,为文本文档,主要报告编译过程中出现的错误和警告、编译过程中划分语法块的数量、硬件设计整体延时、使用资源(BlockRAM、DSP等)的大致估计等等。
另一为数据流图信息,为xml文档,记录了步骤S32生成的数据流图。该文档可以用编译器配套的DFG Browser工具查看。
通过查看编译报告,用户可以对程序的执行性能有大致的估计,并且可以进一步分析限制性能的瓶颈,从而有利于对设计进行改进。
上述步骤S22中生成C语言程序的具体实现方法为:将软件部分的源文件和软件库文件共同复制到目标文件夹,即完成了C语言程序的生成。所述软件库文件主要为与PRCA系统相关的接口函数的具体实现,比如stream读写函数。
示例性设备
在介绍了本发明示例性实施方式的方法之后,接下来,参考图6所示,为本发明示例性实施方式的、程序编译器一实施方式,本实施方式例如具体可以包括:编译模块61和脚本生成器62,其中:
所述编译模块61用于将用户选定的属于C语言源程序的待处理应用程序处理成HDL程序和C语言软件程序。
所述脚本生成器62用于依据HDL程序生成硬件编译程序脚本,以及,依据C语言软件程序生成软件编译程序脚本,其中,所述硬件编译程序脚本在被执行时,将HDL程序处理得到硬件配置文件,所述软件编译脚本在被执行时,将C语言软件程序处理得到ELF格式的可执行文件。
一般的,还可以进一步包括预先设置的软件库和硬件库,以配合所述硬件编译脚本和软件编译脚本在被执行时,将对应程序(HDL程序和C语言软件程序)的处理。关于软件库和硬件库的内容,可参考前文方法部分的描述。
图7为程序编译器的另一个实施方式,在图6的基础上,进一步包括预处理工具63,所述预处理工具63用于对待处理应用程序进行预处理,具体的,依次对所述应用程序进行语法检查,宏替换和内联函数展开,及代码改写以增加临时变量的方式简化较长的语句。
图8为程序编译器的又一种实施方式,该实施方式中,所述编译模块61可以包括定义模块611、划分模块612、数据流图单元613和代码生成单元614,其中:
定义模块611,用于对于所述应用程序中的临时变量及用户定义变量,以寄存器定义,对于数组,则对应Block RAM模块。
划分模块612,用于对所述应用程序进行模块划分,划分的顺序按照从大到小的顺序进行,直到划分成基本块为止。
数据流图单元613,用于将划分的块转换为数据流图。
代码生成单元614,与定义模块611、划分模块612和数据流图单元613单元相连,用于创建一个有限状态自动机,将每个基本块作为状态机的一个状态,依据基本块之间的连接关系确定状态机之间的转换关系,利用所述状态自动机及所述数据流图,生成HDL程序和C语言软件程序。
在另外的实施方式中,所述编译模块61还包括生成编译报告的编译报告生成单元615,如图9所示,所述编译报告为编译概要或数据流图信息,所述编译概要用于指示编译参数及编译过程中出现的错误或警告。
需要说明的是,本说明书中各个实施例可相互补充,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
另外,还需要说明的是,本说明书中程序编译器与程序编译方法是相对应的,相互之间可以互相借鉴和补充,例如,上述程序编译器中各模块的具体工作过程,例如编译模块的工作过程,脚本生成器生成脚本的过程,仿真器预处理的过程,及各细分单元工作过程,均可参照前文程序编译方法部分的内容。
另外,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (7)
1.一种程序编译方法,其特征在于,包括:
响应于用户的程序选择操作,确定属于C语言源程序的待处理应用程序;
将所述应用程序处理成HDL程序和C语言软件程序;
依据HDL程序生成硬件编译程序脚本,以及,依据C语言软件程序生成软件编译程序脚本;
应用户操作,执行硬件编译程序脚本以将HDL程序处理得到硬件配置文件,以及,应用户操作,执行软件编译程序脚本以将C语言软件程序处理得到ELF格式的可执行文件;
其中,所述将C语言软件程序处理得到ELF格式的可执行文件包括:
软件编译程序脚本调用GCC进行编译,利用所述C语言软件程序和预设的软件函数库,处理得到ELF格式的可执行文件;
所述将所述应用程序处理成HDL程序包括:
预处理,包括依次对所述应用程序进行语法检查,宏替换和内联函数展开,及代码改写以增加临时变量的方式简化较长的语句;
对于所述应用程序中的临时变量及用户定义变量,以寄存器定义,对于数组,则对应Block RAM模块,然后对所述应用程序进行模块划分,将划分的块转换为数据流图,所述模块划分的顺序按照从大到小的顺序进行,先划分为较大的语法块,然后再将所述较大的语法块划分成更小的块,直到划分成基本块为止;所述语法块为一段关系紧密的代码,所述语法块包括串行、循环、流水三种语法块;
创建一个有限状态自动机,将每个基本块作为状态机的一个状态,依据基本块之间的连接关系确定状态机之间的转换关系,利用所述有限状态自动机及所述数据流图,生成HDL程序和C语言软件程序;
其中,所述将划分的块转换为数据流图,包括:将串行语法块、循环语法块、流水语法块中的至少一种转换为数据流图;
对于所述串行语法块的转换,包括:逐行扫描源码,根据每一行源码中使用的函数或操作符,在转换表中找到其对应的硬件模块,然后遍历已生成的数据流图;查看所述硬件模块是否已经被使用过;如果已经被使用过,则根据所述数据流图中的延迟信息,判断所述硬件模块在当前时间能否被复用,如果不能,则创建新的顶点,根据输入输出变量名创建弧,并通过所述创建弧使所述新的顶点同所述已生成的数据流图的顶点相连,生成新的数据流图;
对于所述循环语法块的转换,包括:在所述循环语法块包括循环条件和循环体,且所述循环体为一段串行程序的情况下,按照所述串行语法块的方式生成一个单独的数据流图,然后对循环条件进行处理;根据所述循环条件创建一个顶点,通过所述顶点连接所述循环体生成数据流图和其他语法块生成的数据流图,得到新的数据流图;
对于流水语法块的转换,包括:先按照所述串行语法块或所述循环语法块的方式生成一个数据流图,然后遍历所述数据流图,查找最低Rate值,并将所述最低Rate值作为所述流水语法块的Rate值,并根据所述流水语法块的Rate值调整所述数据流图的延迟属性,其中,所述Rate值表示输入一个数据所需间隔的时钟周期数。
2.根据权利要求1所述的程序编译方法,其特征在于,所述将所述应用程序处理成HDL程序还包括:
生成编译报告,所述编译报告为编译概要或数据流图信息,所述编译概要用于指示编译参数及编译过程中出现的错误或警告。
3.根据权利要求1所述的程序编译方法,其特征在于,所述硬件编译程序脚本由批处理文件和脚本文件组成,所述依据HDL程序生成硬件编译程序脚本包括:调用批处理文件,由批处理文件调用脚本文件,然后由脚本文件调用ISE,完成编译过程。
4.根据权利要求1所述的程序编译方法,其特征在于,依据C语言软件程序生成软件编译程序脚本的过程包括:
预先编写一个标准的Makefile文件,并拷贝至预定目录下;
在UNIX或Linux环境下调用Make命令,调用软件编译程序脚本。
5.根据权利要求1所述的程序编译方法,其特征在于,按照以下步骤将HDL程序处理得到硬件配置文件:
硬件编译程序脚本在执行时调用ISE建立工程,利用所述HDL程序及预设的硬件模块库,经综合、实现过程得到硬件配置文件。
6.一种程序编译器,其特征在于,包括编译模块和脚本生成器,其中:
所述编译模块用于将用户选定的属于C语言源程序的待处理应用程序处理成HDL程序和C语言软件程序;
所述脚本生成器用于依据HDL程序生成硬件编译程序脚本,以及,依据C语言软件程序生成软件编译程序脚本,其中,所述硬件编译程序脚本在被执行时,将HDL程序处理得到硬件配置文件,所述软件编译程序脚本在被执行时,将C语言软件程序处理得到ELF格式的可执行文件;
其中,所述脚本生成器,具体用于调用GCC进行编译,利用所述C语言软件程序和预设的软件函数库,处理得到ELF格式的可执行文件;
还包括用于对待处理应用程序进行预处理的部件,所述预处理包括依次对所述应用程序进行语法检查,宏替换和内联函数展开,及代码改写以增加临时变量的方式简化较长的语句;
所述编译模块包括:
定义模块,用于对于所述应用程序中的临时变量及用户定义变量,以寄存器定义,对于数组,则对应Block RAM模块;
划分模块,用于对所述应用程序进行模块划分,划分的顺序按照从大到小的顺序进行,先划分为较大的语法块,然后再将所述较大的语法块划分成更小的块,直到划分成基本块为止;所述语法块为一段关系紧密的代码,所述语法块包括串行、循环、流水三种语法块;
数据流图单元,用于将划分的块转换为数据流图;
代码生成单元,用于创建一个有限状态自动机,将每个基本块作为状态机的一个状态,依据基本块之间的连接关系确定状态机之间的转换关系,利用所述有限状态自动机及所述数据流图,生成HDL程序和C语言软件程序;
所述划分模块,具体用于将串行语法块、循环语法块、流水语法块中的至少一种转换为数据流图;
对于所述串行语法块的转换,所述划分模块,具体用于逐行扫描源码,根据每一行源码中使用的函数或操作符,在转换表中找到其对应的硬件模块,然后遍历已生成的数据流图;查看所述硬件模块是否已经被使用过;如果已经被使用过,则根据所述数据流图中的延迟信息,判断所述硬件模块在当前时间能否被复用,如果不能,则创建新的顶点,根据输入输出变量名创建弧,并通过所述创建弧使所述新的顶点同所述已生成的数据流图的顶点相连,生成新的数据流图;
对于所述循环语法块的转换,所述划分模块,具体用于在所述循环语法块包括循环条件和循环体,且所述循环体为一段串行程序的情况下,按照所述串行语法块的方式生成一个单独的数据流图,然后对循环条件进行处理;根据所述循环条件创建一个顶点,通过所述顶点连接所述循环体生成数据流图和其他语法块生成的数据流图,得到新的数据流图;
对于流水语法块的转换,所述划分模块,具体用于先按照所述串行语法块或所述循环语法块的方式生成一个数据流图,然后遍历所述数据流图,查找最低Rate值,并将所述最低Rate值作为所述流水语法块的Rate值,并根据所述流水语法块的Rate值调整所述数据流图的延迟属性,其中,所述Rate值表示输入一个数据所需间隔的时钟周期数。
7.根据权利要求6所述的程序编译器,其特征在于,所述编译模块还包括生成编译报告的编译报告生成单元,所述编译报告为编译概要或数据流图信息,所述编译概要用于指示编译参数及编译过程中出现的错误或警告。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510300161.7A CN106155755B (zh) | 2015-06-03 | 2015-06-03 | 程序编译方法和程序编译器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510300161.7A CN106155755B (zh) | 2015-06-03 | 2015-06-03 | 程序编译方法和程序编译器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106155755A CN106155755A (zh) | 2016-11-23 |
CN106155755B true CN106155755B (zh) | 2020-06-23 |
Family
ID=57348256
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510300161.7A Active CN106155755B (zh) | 2015-06-03 | 2015-06-03 | 程序编译方法和程序编译器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106155755B (zh) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107239315B (zh) * | 2017-04-11 | 2019-11-15 | 赛灵思公司 | 面向神经网络异构计算平台的编程模型 |
CN107133138A (zh) * | 2017-05-04 | 2017-09-05 | 郑州云海信息技术有限公司 | 一种shell下读取Intel CPU Msr寄存器的工具实现及使用方法 |
CN107368287B (zh) * | 2017-06-12 | 2020-11-13 | 北京中科睿芯科技有限公司 | 一种数据流结构循环依赖的加速系统、加速装置及其加速方法 |
CN107832085A (zh) * | 2017-09-27 | 2018-03-23 | 武汉科技大学 | 一种可重构任务的流水优化方法 |
KR102519698B1 (ko) * | 2017-09-29 | 2023-04-07 | (주)한화 | 로봇 제어 장치의 코딩 방법 및 프로그램과 로봇 제어 장치 |
CN107832496A (zh) * | 2017-10-16 | 2018-03-23 | 北京腾凌科技有限公司 | 用于仿真的方法及系统 |
CN109871284A (zh) * | 2017-12-05 | 2019-06-11 | 北京元比特科技有限责任公司 | 一种应用程序跨语言运行时环境执行的虚拟化技术及方法 |
CN108196900B (zh) * | 2017-12-08 | 2021-11-09 | 五八有限公司 | 组件的注册方法及装置 |
CN108563448B (zh) * | 2018-04-19 | 2021-08-17 | 图灵人工智能研究院(南京)有限公司 | 程序文件的编译方法、系统、计算机设备和存储介质 |
CN109358846B (zh) * | 2018-09-19 | 2019-09-27 | 深圳大学 | 一种基于c语言的语法扩展方法、装置及终端设备 |
CN111142848B (zh) * | 2018-11-05 | 2023-09-19 | 深圳Tcl新技术有限公司 | 一种软件程序编译方法、执行方法及装置 |
CN109857380B (zh) * | 2019-01-25 | 2022-07-05 | 中国银行股份有限公司 | 一种工作流文件编译方法及装置 |
CN110069250B (zh) * | 2019-04-30 | 2023-03-17 | 联陆智能交通科技(上海)有限公司 | Lte-v2x标准应用层数据编解码方法、系统及介质 |
CN110244954B (zh) * | 2019-05-22 | 2022-12-09 | 深圳赛安特技术服务有限公司 | 一种应用程序的编译方法及设备 |
CN111145764A (zh) * | 2019-12-26 | 2020-05-12 | 苏州思必驰信息科技有限公司 | 一种源码编译方法、装置、设备及介质 |
CN111596904A (zh) * | 2020-04-29 | 2020-08-28 | 赵新伟 | 一种基于嵌入式的c语言脚本编程方法 |
CN111984276A (zh) * | 2020-08-05 | 2020-11-24 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 基于国产以太网交换芯片的sdk通用编译方法、系统及介质 |
CN113253993B (zh) * | 2021-03-26 | 2023-11-28 | 纽播电子(上海)有限公司 | 一种实现命令序列和事件管理的CFlex脚本语言的使用方法 |
CN114186678B (zh) * | 2021-12-10 | 2023-04-07 | 北京百度网讯科技有限公司 | 基于深度学习的硬件适配装置和方法 |
CN114741993B (zh) * | 2022-04-18 | 2023-06-16 | 山东浪潮科学研究院有限公司 | 一种基于脚本的数据流图生成方法及装置 |
CN115080055A (zh) * | 2022-06-15 | 2022-09-20 | 东南大学 | 面向信息安全的可重构系统芯片编译器、自动编译方法 |
CN115113875B (zh) * | 2022-06-17 | 2024-10-18 | 华中科技大学 | 一种基于COStream的数据流程工作量精细化估计方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1879082A (zh) * | 2003-11-12 | 2006-12-13 | 株式会社Ntt都科摩 | 用于编译软件的方法和装置 |
CN104364766A (zh) * | 2012-02-16 | 2015-02-18 | 美国国家仪器有限公司 | 测试仪器基于来自测试中系统的信息的定制操作 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
SE0300742D0 (sv) * | 2003-03-17 | 2003-03-17 | Flow Computing Ab | Data Flow Machine |
US20050097306A1 (en) * | 2003-09-29 | 2005-05-05 | Gajski Daniel D. | No-instruction-set-computer processor |
JP5985900B2 (ja) * | 2012-06-22 | 2016-09-06 | ルネサスエレクトロニクス株式会社 | 動作合成装置、動作合成装置を備えたデータ処理システム、及び、動作合成プログラム |
-
2015
- 2015-06-03 CN CN201510300161.7A patent/CN106155755B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1879082A (zh) * | 2003-11-12 | 2006-12-13 | 株式会社Ntt都科摩 | 用于编译软件的方法和装置 |
CN104364766A (zh) * | 2012-02-16 | 2015-02-18 | 美国国家仪器有限公司 | 测试仪器基于来自测试中系统的信息的定制操作 |
Non-Patent Citations (1)
Title |
---|
"基于可重构机制的软硬件协同计算关键技术研究";于锦涛;《中国优秀硕士学位论文全文数据库 信息科技辑》;20140215;第二章,第4.1.2节,第5.3节 * |
Also Published As
Publication number | Publication date |
---|---|
CN106155755A (zh) | 2016-11-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106155755B (zh) | 程序编译方法和程序编译器 | |
US20210081258A1 (en) | Synthesis Path For Transforming Concurrent Programs Into Hardware Deployable on FPGA-Based Cloud Infrastructures | |
WO2021000970A1 (zh) | 深度学习算法的编译方法、装置及相关产品 | |
Meeus et al. | An overview of today’s high-level synthesis tools | |
US10261760B1 (en) | Systems and methods for tracing performance information from hardware realizations to models | |
US10977018B1 (en) | Development environment for heterogeneous devices | |
US9665674B2 (en) | Automating a microarchitecture design exploration environment | |
Kapre et al. | Survey of domain-specific languages for FPGA computing | |
WO2016176250A1 (en) | System and method for transforming image information for a target system interface | |
Parashar et al. | LEAP: A virtual platform architecture for FPGAs | |
Liu et al. | A scala based framework for developing acceleration systems with FPGAs | |
Kamppi et al. | Kactus2: Environment for embedded product development using ip-xact and mcapi | |
Bo et al. | Automata processing in reconfigurable architectures: In-the-cloud deployment, cross-platform evaluation, and fast symbol-only reconfiguration | |
Di Natale et al. | An MDA approach for the generation of communication adapters integrating SW and FW components from Simulink | |
US8566768B1 (en) | Best clock frequency search for FPGA-based design | |
US12112202B2 (en) | Framework for application driven exploration and optimization of hardware engines | |
CN105843993B (zh) | 一种ip生成方法及工具 | |
Sahlbach et al. | A system-level FPGA design methodology for video applications with weakly-programmable hardware components | |
Giorgi et al. | Translating timing into an architecture: the synergy of COTSon and HLS (domain expertise—designing a computer architecture via HLS) | |
US11270051B1 (en) | Model-based design and partitioning for heterogeneous integrated circuits | |
US9262141B1 (en) | Distributed computations of graphical programs having a pattern | |
Cartwright et al. | Automating the design of mlut mpsopc fpgas in the cloud | |
Centomo et al. | Automatic integration of HDL IPs in Simulink using FMI and S-function interfaces | |
Petry et al. | A spectrum of MPSoC models for design space exploration and its use | |
US20230267253A1 (en) | Automated synthesis of virtual system-on-chip environments |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20171012 Address after: 201112 3A business building, United Airlines road 1588, Shanghai, Minhang District Applicant after: Shanghai RedNeurons Information Technology Co., Ltd. Applicant after: National Digital Switch System Engineering Technology Research Center Address before: 201112 3A business building, United Airlines road 1588, Shanghai, Minhang District Applicant before: Shanghai RedNeurons Information Technology Co., Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |