具体实施方式
下面结合附图和实施例对本发明装置的使用方法做进一步说明。
图1示出了根据本发明的一种基于多DSP平台的自动代码生成流程的一个优选实施例。根据本发明的自动代码生成方法如图1的3所示,自动代码生成方法3由通用代码框架模板30,XML格式流程建模器31和自动代码生成器32组成。其中,通用代码框架模板30根据特定多DSP硬件平台1的源代码文件类型和格式制定;XML格式流程建模器31对用户开发的信号处理流程2进行XML格式的建模和描述,并输出XML格式的描述文件;自动代码生成器32根据通用代码框架模板30和XML格式流程建模器31的输出自动生成DSP源代码4,DSP源代码4经过编译链接后即可加载到相应的多DSP平台5上执行。
根据图1中的自动代码生成方法3,首先根据特定多DSP硬件平台1的源代码文件类型和格式进行分类和特征提取,总结出一套通用代码框架模板30。这里所谓的通用代码框架模板指的是具有一定规范和格式要求,能够进行参数配置和扩展,具备较好的实用性和通用性,能通过实例化转换成实际DSP源代码4的代码文件。
图2示出了由图1所示的通用代码框架模板30的一个具体例子,该例子基于的多DSP硬件平台是ADI公司的Ts201处理板。如图2所示,通用代码框架模板6由7个通用代码框架文件组成,分别是流程控制代码框架文件61、信号处理代码框架文件62、通信代码框架文件63、内存分配代码框架文件64、编译/链接代码框架文件65、加载代码框架文件66和路由描述框架文件67。其中:
1)流程控制代码框架文件61类似于C/C++里的main函数,主要实现对信号处理流程的控制,流程控制代码框架实例化的结果就是一个实现信号处理流程控制的主程序,包括头文件和相应的c/cpp文件。流程控制代码框架的内容包括:头文件的声明,计算、存储、通信资源的配置和初始化,重要的宏定义和变量声明,按照数据流模型设计的四步循环控制流程:数据接收—数据处理—数据发送—状态更新。多DSP平台上的信号处理流程通常由多个功能模块以一定的互连关系构成,代码生成时每个功能模块都会实例化一个流程控制代码框架文件以得到自己的主程序文件。
2)信号处理代码框架文件62类似于C/C++里实现具体功能的函数,不过针对信号处理的特点,将其定义为C++语言中的一个“类(Class)”。类名称反映其功能名称,类成员主要包括构造函数、析构函数、执行函数和模块参数,前面三个函数分别在类的实例创建、删除和执行功能时被隐式或显式地调用,最后的模块参数作为类的私有成员可根据用户需要设置个数和名称,用来描述模块的可配置参数属性。信号处理代码框架文件实例化的结果就是包括信号处理模块类声明的头文件和包括信号处理模块类定义的c/cpp文件,这两个文件被流程控制代码框架文件所包含,相应的信号处理模块类也在流程控制代码框架文件中被实例化和调用。代码生成后,每个功能模块都将拥有自己的信号处理代码文件。
3)通信代码框架文件63主要负责定义流程控制代码框架中的数据接收和数据发送部分所涉及的通信函数,在通信代码框架文件中对多DSP平台上常用的通信函数进行了标准的接口封装,包括:延时函数、接收函数、发送函数、DMA传输函数等。通信代码框架文件实例化的结果就是包括通信函数声明的头文件和包括通信函数功能定义的c/cpp文件。代码生成后,所有功能模块都共用引用这个通信函数文件。
4)内存分配代码框架文件64负责对DSP的存储资源进行封装,将内存以若干个逻辑段的形式提供给用户使用,以实现对流程控制代码框架文件和信号处理代码框架文件中存储资源配置方面的支持。代码生成后,每个功能模块都将拥有自己的内存分配描述文件。
5)编译/链接代码框架文件65描述DSP代码及工程生成后在编译/链接过程中涉及的相关文件、编译过程和编译选项等,类似makefile文件的格式。编译/链接代码框架文件实例化后即成为可用的makefile文件,根据不同多DSP平台具体采用的编译器对该文件进行编译链接,可生成最终的硬件下载文件,例如ADI公司的dxe/ldr文件、TI公司的out文件等。代码生成后,每个功能模块都将拥有自己的编译/链接描述文件。
6)加载代码框架文件66在各个功能模块生成的下载文件和实际多DSP硬件平台的具体节点之间建立对应关系,以进行任务分配和映射。加载代码框架文件以多行对照表的格式建立,即每行标出一个下载文件名称和该文件要分配的DSP节点号(DSP节点可以全局编号,也可以采取处理板号+板上DSP号的形式)。代码生成后,一个工程项目组(可能包含多个功能模块)将拥有一个程序加载分配描述文件。
7)路由描述框架文件67描述的是多DSP平台上各个DSP节点之间的硬件拓扑连接信息,同样采用多行对照表的格式建立。例如采取全局编号的1号DSP和2号DSP之间通过3号链路口互连,则在对照表中的某行标出该信息。路由描述框架文件用来实现自动代码生成中的自动路由功能。代码生成后,一个工程项目组(可能包含多个功能模块)将拥有一个路由描述文件。
根据图1中的自动代码生成方法3,还要利用XML格式流程建模器31对用户开发的信号处理流程2进行XML格式的建模和描述,包括模块信息和模块间互连关系等,并输出XML格式的描述文件。
图3示出了由图1所示的XML格式流程建模器31生成的XML描述文件结构7。如图3所示,XML描述文件结构7包含了一系列针对多DSP平台任务开发特点提取和抽象出来的特征元素。各元素含义如下:
1)rml元素,表示本次建模的版本信息、编码格式。
2)system元素,表明本次建模的信号处理系统信息,作为系统的顶层元素,表示整个系统。
3)application元素,用于描述信号处理流程的组成模块和模块间连接方式。
4)actor元素,表示信号处理模块。
例如:
<Actor name=’DBFSimuSource’>
…
</Actor>
定义了一个名称为DBFSimuSource 的模块
5)connect元素,表示信号处理模块之间的连接线信息。
例如:
<connect token_id="55" name="connect_55" >
…
</connect>
表示名称为connect_55,编号为55的连线。
6)editable元素,用于定义功能模块和连线的可编辑参数信息,
例如:
<editable processId="1" dspNum="0" boardNum="0" />定义了某个功能模块的序列号processId、所在DSP节点号dspNum和处理板板号boardNum等可编辑参数。
<editable size="16" channel="1" type="byte" depileNum="1" />定义了某根连线上的传输数据类型type、传输数据量size、传输通道channel和数据发送节拍depileNum等可编辑参数。
7)param元素,用于定义功能模块具体的属性参数。
例如:
<param type="int" value="1" id="0" name="algorithm" />
<param type="int" value="16" id="1" name="Runtime" />
定义了某模块的2个属性参数algorithm和Runtime,这两个参数均为int型,值分别为1和16。
8)port 元素,表示数据输入输出的端口,嵌套在Actor之中。
9)src_port元素,表示对应连线的源端口,嵌套在Connect之中。
10)dest_port元素,表示对应连线的目的端口,嵌套在Connect之中。
11)src_actor元素,表示对应连线的源功能模块,嵌套在Connect之中。
12)dest_actor元素,表示对应连线的目的功能模块,嵌套在Connect之中。
根据图1中的自动代码生成方法3,自动代码生成器32利用通用代码框架模板30和XML格式流程建模器31的输出自动生成最终的DSP源代码4。
图4示出了由图1所示的自动代码生成器32的代码生成过程的一个具体例子。如图4所示,自动代码生成器10提取XML流程描述文件9中的模块名称、参数和互连结构等所有信息,基于通用代码框架模板8生成最终的DSP源代码11。自动代码生成器10的工作方式可以为如下的过程:
步骤1:自动代码生成器10通过内部的XML文件解析器101解析XML流程描述文件9,提取出所有的功能模块信息102,包括:工程名称、模块名称、模块序号、模块可配置参数、模块输入输出端口名称以及数目;
步骤2:自动代码生成器10通过内部的XML文件解析器101解析XML流程描述文件9,提取出所有的模块互连信息103,包括各个功能模块在多DSP平台上的映射结果,模块之间的互连关系;
步骤3:自动代码生成器根据步骤1、2中提取的信息,为每个处理节点生成一个以该处理节点编号命名的代码工程;
步骤4:自动代码生成器10读取通用代码模板,实例化流程控制代码框架文件, 根据步骤1中获得的信息,确定信号处理代码框架中功能模块类的名称和参数值,确定流程控制代码框架中数据接收和数据发送的端口数目;
步骤5:自动代码生成器10读取通用代码模板,实例化信号处理代码框架文件, 根据步骤1中获得的信息,确定信号处理代码框架中模块类的名称和参数值;
步骤5:自动代码生成器10读取通用代码模板,实例化通信代码框架文件, 直接将通信代码框架文件复制;
步骤6:自动代码生成器10读取通用代码模板,实例化内存分配代码框架文件,根据步骤1、2中获得的信息,确定内存分配代码框架文件中的项目名称和模块名称等;
步骤7:自动代码生成器10读取通用代码模板,实例化编译/链接代码框架文件,根据步骤1、2中获得的信息,确定编译/链接代码框架文件中的项目名称和模块名称等;
步骤8:自动代码生成器10读取通用代码模板,实例化加载代码框架文件,根据步骤1、2中获得的信息,确定加载代码框架文件中的任务分配和映射;
步骤9:自动代码生成器10读取通用代码模板,实例化路由描述框架文件,根据步骤1、2中获得的信息,确定路由描述框架文件中的各个DSP节点之间的硬件拓扑连接信息。
通过优选实施例所揭示的本发明目的在于更好和更容易的理解本发明,在不偏离本发明原理的前提下以多种方式来实现本发明将是可以理解的。应该认识到,在不偏离所附权利要求声明中提出的本发明原理的前提下,本发明包括所有可能的实施例及在所示实施例上的修改。