一种状态机等价变换的方法和装置的制造方法

文档序号:8257908阅读:323来源:国知局
一种状态机等价变换的方法和装置的制造方法
【技术领域】
[0001]本发明涉及数字集成电路领域,更具体地涉及一种状态机等价变换的方法和装置,以降低动态可配置流水线的电路复杂度和配置程序的开发难度。
【背景技术】
[0002]流水线以及用状态机控制流水线上的各个流水级和流水级之间的连接关系是一种普遍应用的数字集成电路形式。例如指令的流水线、网络处理器里处理数据包的流水线、基带信号处理的流水线等等。指令流水线技术是指在程序执行时多条指令重叠进行操作的一种处理技术,它将指令分解成不同的阶段,让电路能够按照指定的操作更加充分的利用硬件资源。
[0003]动态可重配流水线技术使得硬件电路结构更加灵活可控,其本质是用程序描述流水线上各个状态机的行为。状态机对应于电路中各个功能单元,通过编程设计和配置状态机可以方便的操控硬件资源。然后,电路较为复杂时,状态机的设计和配置就变得极其复杂O
[0004]当状态机实现的功能较为复杂、状态机的形式和类型较多的时候,在状态机拼接过程中会遇到很多复杂的情况导致无法直接拼接。例如循环状态块和顺序状态块的拼接情况,以及循环状态块和嵌套循环状态块的拼接情况等。这时需要对状态机进行特定的定价变换,使得变换后的状态机可以进行拼接,且状态机实现的功能不变。

【发明内容】

[0005]有鉴于此,本发明提出一种状态机等价变换的方法,以对各种符合等价变换规则的状态机设计等价变换规则,提高状态机拼接范围和正确性。
[0006]为了实现上述目的,作为本发明的一个方面,本发明提出了一种状态机等价变换的方法,包括以下步骤:
[0007]步骤I,将状态机的状态块初始化成树形二维结构;
[0008]步骤2,读取一个状态机和状态机的状态提取方式,根据状态提取方式对状态机选择输出或反向;如果提取方式是正向提取,则将输入状态机放入步骤3的输入中,跳转至步骤3 ;如果提取方式是反向提取,则将状态块放入步骤2.1的输入中,调用步骤2.1,将步骤
2.1返回的状态块替换状态机中的原状态块,并将新状态机放入步骤3的输入,跳转至步骤3 ;
[0009]步骤2.1,将输入状态机的尾区域标示为头区域,同时将原头区域标识为尾区域;
[0010]其中,如果当前主区域为嵌套循环块,则将嵌套循环块中的状态块,颠倒序列,并对每个状态块调用步骤2.1,用返回的状态块替换嵌套循环块中的原状态块;如果当前主区域不是嵌套循环块,则将主区域中状态块里所有状态颠倒顺序;
[0011]将调整后的状态块输出,返回到调用当前此步骤的前一个步骤中;
[0012]步骤3,读取一个输入状态机的首个状态块,判断该状态块的类型,并跳转到相应状态块状态提取的步骤中;其中
[0013]如果当前状态块为顺序块,则跳转至步骤4 ;
[0014]如果当前状态块为循环块,则跳转至步骤5 ;
[0015]如果当前状态块为嵌套循环块,则跳转至步骤6 ;
[0016]步骤4,接收一个顺序状态块和待提取长度作为输入,从输入顺序块头部提取出指定数量个状态置于头区域中,并修改待提取长度;将提取后的状态机输出,跳转至步骤8 ;
[0017]步骤5,接收一个循环块和待提取长度作为输入,判断待提取长度与循环块内部状态数量和尾区域状态数量,提取指定数量的状态;
[0018]子步骤5.0,计算循环块尾区域的长度,并判断当前是否需要提取一次循环块;
[0019]子步骤5.1,将循环体内部所有状态按顺序组成一个新的顺序块,将该顺序块放入尾区域的头部,将循环块的已循环次数加1,跳转至子步骤5.2 ;
[0020]子步骤5.2,如果待提取长度大于等于循环块内部状态数量,则将尾区域中首个顺序块放到提取区域的尾部,并将待提取数量减去循环块内部状态数量,跳转到步骤8;如果待提取长度小于循环块内部状态数量,则将尾区域中的顺序块按顺序合并成一个顺序块,然后从合并的顺序块中提取出头部的待提取长度个状态,组成一个新的顺序块放入提取区域的尾部,清空尾区域,若提取后的顺序块内状态数不为0,则将提取后的顺序块放入尾区域中。跳转至子步骤5.3;
[0021]子步骤5.3,将循环块内头部待提取长度个状态取出放到循环块内状态的尾部,形成一次循环滚动,并将待提取长度置为0,跳转至子步骤8 ;
[0022]步骤6,接收嵌套循环块和待提取长度作为输入,从输入嵌套循环块头部提取出指定数量个状态,输出可用于状态机拼接的状态块的组合;
[0023]子步骤6.0,如果尾区域为空,则跳至子步骤6.1 ;如果尾区域非空,则跳至子步骤6.2 ;
[0024]子步骤6.1,提取嵌套循环块内的所有状态块,按顺序置于尾区域中,将嵌套循环块的已循环次数加I,跳转至子步骤6.2 ;
[0025]子步骤6.2,将嵌套循环块的尾区域取出,组成一个新的状态机,将待提取长度和新的状态机作为输入,递归调用本方法,将返回的状态机的首个状态块的头区域内所有状态块取出,放入提取区域的尾部,跳转至子步骤6.3 ;
[0026]子步骤6.3,将嵌套循环块内所有状态块取出,按顺序组成一个新的状态机,待提取长度和新的状态机作为输入,递归调用本方法,将返回的状态机的首个状态块的头区域内所有状态块取出放到返回的状态机的最后一个状态块后面,并用该状态机内的状态块替换嵌套循环块内的所有状态块,并将待提取长度置为0,跳转至步骤8 ;
[0027]步骤8,如果当前待提取长度不为0,则将当前状态机和待提取长度作为步骤3的输入,跳转至步骤3,否则跳转至步骤9 ;
[0028]步骤9,将提取区域,放置到首个状态块头区域的尾部;如果原提取方式是反向提取,将首个状态块放入步骤2.1的输入中,调用步骤2.1,将步骤2.1返回的状态块替换状态机中的原状态块,该方法结束;否则该方法结束。
[0029]其中,所述步骤I包括:
[0030]对于输入状态机的每个状态块,判断其是否已经是二维结构,即由头区域、主区域和尾区域组成,如果是,则该状态机是已经参与过等价变换的状态机,跳转到步骤2 ;如果不是,则为状态块构建一个头区域、主区域和尾区域的二维结构,将原状态块放入主体部分,头区域和尾区域置空,若状态块是嵌套循环块则对状态块内的每个状态块构建二维结构;
[0031]跳转到步骤2。
[0032]其中,步骤4中所述接收一个顺序状态块和待提取长度作为输入,从输入顺序块头部提取出指定数量个状态置于头区域中,并修改待提取长度的步骤的特征是:
[0033]若待提取长度小于等于顺序块中的状态数,从状态块开始处进行提取,从当前状态块第一个状态开始按顺序提取出指定数量个状态,把这些状态合并为一个新的顺序状态块,把这个状态块置于提取区域尾部;提取剩余的部分作为新的顺序状态块,替换原状态块。将待提取长度置为零。
[0034]若待提取长度大于等于顺序块中的状态数,将全部顺序块置于提取区域尾部,删除状态机中的该状态块,并将待提取长度减去顺序块中的状态数。
[0035]作为本发明的另一个方面,本发明还提出了一种状态机的等价变换装置,包括:
[0036]第一和第二状态机寄存器1、9,用于接收和存储变换过程中的头区域、主区域和尾区域;
[0037]状态块类型判断模块3,实现了状态机等价变换方法中的变换类型判断步骤;该模块读取第一状态机反向模块2输出的待变换状态块,并根据执行结果将状态块输出给顺序块提取模块6、循环块提取模块7或嵌套循环块提取模块8之一;
[0038]第一和第二状态机反向模块2、10,实现了状态机反向步骤,其中所述第一状态机反向模块2读取初始输入状态机和待提取长度,用于处理反向提取时的第一次状态机逆序变换;所述第二状态机反向模块10与所述第二状态机寄存器9和状态块堆栈4连接,用于实现输出时反向提取的状态机进行的状态机逆序变换,并在步骤执行完毕后输出可拼接状态机;
[0039]状态块堆栈4,与所述第一和第二状态机反向模块2、10、提取模块5连接,为主要的状态机等价变换步骤提供了状态块的堆栈存储功能,辅助完成这几个模块中执行的变换步骤;
[0040]提取模块5,包含了顺序块提取模块6、循环块提取模块7、嵌套循环块提取模块8 ;其中所述顺序块提取模块6实现了顺序块状态提取步骤,所述循环块提取模块7实现了循环块提取步骤,所述嵌套循环块提取模块8实现了嵌套循环块提取步骤;所述提取模块5将三个不同类型的状态块提取模块集合为一个整体以连接所述状态块堆栈4,并通过所述状态块堆栈4进行状态块的存储和调用;所述提取模块5的输出结果存储至所述第二状态机寄存器9中。
[0041]其中,所述第一和第二状态机寄存器1、9设计为树形二维结构的存储模式。
[0042]其中,所述状态块堆栈4为存储状态块的堆栈寄存器,内部以状态块为基本存储单元,实现了状态块存储的堆栈、队列等存储结构。
[0043]其中,所述等价变换装置通过C++编程语言来实现,适用于x86或MIPS处理器体系O
[0044]其中,所述等价变换装置通过verilog进行硬件实现,作为独立的可移植的流水线配置模块。
[0045]基于上述技术方案可知,本发明的方法作为状态机拼接方法中的重要子方法,能够极大提高状态机拼接的范围和正确性。同时,还可以应用于其他类似程序段和代码段的形式变换和分析。
【附图说明】
[0046]图1是本发明的状态机等价变换装置的结构示意图;
[0047]图2是本发明实施例1输入状态块的示意图;
[0048]图3是本发明实施例1步骤I状态块的示意图;
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1