基于数据帧驱动的软件综合方法技术

技术编号:8161417 阅读:191 留言:0更新日期:2013-01-07 19:28
本发明专利技术提供了一种基于数据帧驱动的软件综合方法。本发明专利技术将数据流图中每个循环结构封装成一个模块;建立一个模块队列,简化数据流图;并从头部开始依次取出模块进行分析,获取原始数据流图的完整调度队列;为调度队列中的每个模块的每个输出端口创建一个输出数据缓冲区,并完成数据流图代码的自动生成。通过上述方案本发明专利技术有效解决了一个上游模块所产生的数据被下游模块重复使用的情况,并且支持数据流图的代码自动生成的情况,非常适用于工程实践中。

【技术实现步骤摘要】

本专利技术属于软件综合领域,具体的讲,涉及一种。
技术介绍
现有技术中的软件综合方法均基于数据量或Kahn处理网络进行,Kahn处理网络(Kahn process networks, KPN)是一个流行的并行计算模型,它包含一组确定性的线性任务进程,通过先进先出管道进行数据交互,显式地表达了任务的数据依赖和并行结构。所述数据量和Kahn处理网络均遵循数据守恒原理,即所有模块产生的数据量与所有模块消耗的数据量相同。 但是现阶段一个上游模块所产生的数据被同一个下游模块重复使用,导致其不满足数据守恒原理,因此数据量或者Kahn处理网络并不适用于一个上游模块所产生的数据被同一个下游模块重复使用的情况。
技术实现思路
本专利技术的目的在于克服现有技术不适用于一个上游模块所产生的数据被下游模块重复使用的情况,提供一种,使其适用于一个上有模块所产生的数据能被下游模块重新使用,解决上述缺陷。本专利技术采用的技术方案如下 ,包括以下步骤 (1)分析数据流图,将其中每个循环结构封装成一个模块,确定简化后数据流图中每个模块的深度; (2)将模块按照深度从小到大依次排列,建立一个模块队列,从该模块队列的头部取出一个模块; (3)如果该模块是循环结构封装模块,则执行第(4)步;如果该模块是用户设计的子系统封装模块,则跳转到第(5)步;若既非循环结构封装模块,又非用户设计的子系统封装模块,则跳转到第(6)步; (4)通过分析得到该循环结构的完整调度队列,将其加入到该循环结构封装模块所属的调度队列中,并跳转到第(7)步; (5)通过分析得到该子系统封装模块所代表的子系统的完整调度队列,并将其加入到该子系统封装模块所属的调度队列中,并跳转到第(7)步; (6)将该模块加入到该模块所属的调度队列中,并进入下一步; (7)取出下一个模块,重复执行第(3)步,直至取空模块队列,便得到第(I)步所述简化前数据流图的完整调度队列; (8)从该完整调度队列中从头到尾依次取出一个模块,并将其数据输出到缓冲区,直至取空该数据流图的完整调度队列,完成数据流图的仿真; (9)完成数据流图代码的生成。为了使上有数据能够充分被下游模块重复使用,所述步骤(I)中所述模块深度为模块数据深度,根据数据帧驱动关系确定。进一步的,所述步骤(4)中具体实现方式如下 (4a)该循环结构中包含“延时”模块,从“延时”模块处打破该循环结构; (4b)从第(I)步开始分析,直至得到该循环结构的完整调度队列; (4c)将得到的该循环结构的完整调度队列加入到该循环结构封装模块所属的调度队列中。再进一步的,所述步骤(9)主要实现方式如下 (9a)生成数据流图中代表该模块功能的函数,并为每个模块的输出端口创建一个数据缓冲区; (9b)根据得到的该数据流图的完整调度队列,从头到尾依次取出模块,并将与之对应的功能函数写入主函数当前代码的尾部; (9c)在取空该数据流图的完整调度队列后,完成数据流图代码的生成。为了得到该子系统的完整调度队列,所述步骤(5)中,分析该子系统封装模块时,对该子系统封装模块的子系统数据流图进行分析,即嵌套步骤(I) (7),直至得到该子系统封装模块所代表的子系统的完整调度队列,再将其加入到该子系统封装模块所属的调度队列中,并跳转到第(7)步。与现有技术相比,本专利技术具有以下有益效果 (I)本专利技术采用,有效的解决了软件综合中,一个上游模块所产生的数据被同一个下游模块重复使用所导致的不满足数据守恒定理数据流图的问题,在不满足数据守恒的条件下,现阶段一个上游模块所产生的数据能被下游模块重新使用。(2)本专利技术中所述模块深度为模块数据深度,根据数据帧驱动关系确定,且本专利技术还支持基于数据帧驱动的数据流图的代码自动生成,通过这种方法使本专利技术特别适于工程应用,可靠性高。(3)本专利技术中若取出的模块为用户设计的子系统模块,会嵌套前面的算法对该子系统模块进一步的进行分析,在得到该子系统封装模块所代表的子系统的完整调度队列前不断嵌套前面的步骤,实现算法的重复利用,这样能够缩短整个流程的步骤,减少了计算量,使子系统模块能以较快的速度被分析得到其完整的调度队列。(4)本专利技术中在得到该数据流图的完整调度队列后,在其头部取出一个模块,并将模块的数据输出到缓冲区中,因此在调用下游模块时,只是读取了上游模块输出数据的一个副本,并未将上游模块输出缓冲区中的数据删除。因此上游模块的输出数据仍然能被下游模块重复使用,直至上游模块更新输出数据为止。附图说明图I为本专利技术实施例中调度队列获取算法的流程图。图2为本专利技术实施例中Turbo码译码的数据流图。图3为图2中循环结构的数据流图。图4为图3所示循环结构打破后的数据流图。具体实施例方式下面结合附图与实施例对本专利技术作进一步说明,本专利技术的实施方式包括但不限于下述实施例。实施例如图2所示,该图为Turbo码译码示意图,Turbo码能够巧妙地将两个简单分量码通过伪随机交织器并行级联来构造具有伪随机特性的长码,并通过在两个软入/软出(SISO)译码器之间进行多次迭代实现了伪随机译码。性能远远超过了其他的编码方式,因此图2还包括SISO译码器I和SISO译码器2,相互配合实现多次迭代译码。图2中“SIS0译码器I”模块、“交织”模块、“SIS0译码器2”模块、“解交织”模块和“延时”模块构成一个循环结构,并在“延时”模块中设置了迭代次数为6。其中本实例得到图2所示数据流图的调度队列为· “数据源”; “Turbo帧数据提取”; for(i=0;i〈6;i++){ “ SISO译码器I”; “交织”; “SISO译码器2”; “解交织”; “延时”;} “硬判决”; “显示”; “Turbo帧数据提取”模块的输出数据被重复使用了 6次。在仿真过程中,“SIS0译码器I”模块和“SIS0译码器2”模块每次迭代都要使用“Turbo帧数据提取”模块的输出数据。其中该调度队列获取算法流程如图I所示,其具体步骤如下 第I步检查数据流图是否具有循环结构。如果具有循环结构,将其封装成循环结构封装模块,否则执行第2步。本实例中,将“SIS0译码器I”模块、“交织”模块、“SIS0译码器2”、“解交织”模块和“延时”模块封装成I个循环结构封装模块,编号为循环结构封装模块Io第2 步 将第I步经过封装得到的循环结构封装模块与其他模块组合,简化数据流图,并根据数据帧驱动关系确定每个模块的数据深度。根据数据帧驱动关系,如果I个模块只有I个上游模块,且该上游模块数据深度为N,则该模块数据深度为N+1 ;如果I个模块具有多个上游模块,且所有上游模块中数据深度最大为N,则该模块数据深度为N+1 ;如果该模块没有上游模块,则其数据深度为I。按照数据深度从小到大的顺序依次排列每个模块,建立一个模块队列,使队列前面的模块深度始终小于或等于其后面模块的数据深度。在本实例中,得到的模块队列中的模块依次为“数据源”模块、“Turbo帧数据提取”模块、循环结构封装模块1、“硬判决”模块、“显示”模块。该模块队列中的模块,均所属于附图2所示数据流图的调度队列。第3 步 从第2步得到的模块队列的头部取出一个模块,确定该模块性质,其中 如果该模块是循环结构本文档来自技高网...

【技术保护点】
基于数据帧驱动的软件综合方法,其特征在于,包括以下步骤:(1)分析数据流图,将其中每个循环结构封装成一个模块,确定简化后数据流图中每个模块的深度;(2)将模块按照深度从小到大依次排列,建立一个模块队列,从该模块队列的头部取出一个模块;(3)如果该模块是循环结构封装模块,则执行第(4)步;如果该模块是用户设计的子系统封装模块,则跳转到第(5)步;若既非循环结构封装模块,又非用户设计的子系统封装模块,则跳转到第(6)步;(4)通过分析得到该循环结构的完整调度队列,将其加入到该循环结构封装模块所属的调度队列中,并跳转到第(7)步;(5)通过分析得到该子系统封装模块所代表的子系统的完整调度队列,并将其加入到该子系统封装模块所属的调度队列中,并跳转到第(7)步;(6)将该模块加入到该模块所属的调度队列中,并进入下一步;(7)取出下一个模块,重复执行第(3)步,直至取空模块队列,便得到第(1)步所述简化前数据流图的完整调度队列;(8)从该完整调度队列中从头到尾依次取出一个模块,并将其数据输出到缓冲区,直至取空该数据流图的完整调度队列,完成数据流图的仿真;(9)完成数据流图代码的生成。

【技术特征摘要】

【专利技术属性】
技术研发人员:王坚李玉柏范玉衡李桓
申请(专利权)人:电子科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1