CN114816434A - 一种面向可编程交换的硬件解析器及解析器实现方法 - Google Patents
一种面向可编程交换的硬件解析器及解析器实现方法 Download PDFInfo
- Publication number
- CN114816434A CN114816434A CN202210738234.0A CN202210738234A CN114816434A CN 114816434 A CN114816434 A CN 114816434A CN 202210738234 A CN202210738234 A CN 202210738234A CN 114816434 A CN114816434 A CN 114816434A
- Authority
- CN
- China
- Prior art keywords
- analysis
- primitive
- cascade
- instruction
- parameters
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种面向可编程交换的硬件解析器及解析器实现方法,将一组包含解析指令处理单元、数据解析单元、解析基元启动器、解级联控制器、特征值寄存器、解析指令寄存器、级联状态寄存器的硬件逻辑组件定义为一个可编程硬件解析基元,以解析基元为硬件可编程基本单位,以解析基元阵列作为硬件解析器基础架构,以解析基元指令的作为解析器编程参数,利用软件编程指定的解析指令以及基元之间的级联状态,完成不同解析逻辑分支的硬件解析处理,作为可编程交换中的硬件解析器实现装置,实现了协议无关的硬件可编程解析。
Description
技术领域
本发明涉及SDN、智能网卡和可编程解析技术领域,尤其是涉及一种面向可编程交换的硬件解析器及解析器实现方法。
背景技术
随着可编程交换的硬件解析的研究,传统的硬件解析中,由于软件解析逻辑的后端编译器的实现较为复杂,导致后端编译器与硬件解析器的耦合度差,是的解析器解析能力与目标芯片逻辑资源之间的适应性不加,可操作性降低,灵活性不足。因此,继续一种新的硬件解析方式。
发明内容
为解决现有技术的不足,实现降低后端编译器实现复杂度,提高编译器与硬件解析器的耦合度,使得解析器解析能力与目标芯片逻辑资源之间能够灵活调整和适配的目的,本发明采用如下的技术方案:
一种面向可编程交换的硬件解析器,包括指令数据接口、指令译码单元、阵列启动器和解析基元阵列;
所述指令数据接口,用于获取编程指令和输出解析器排错数据;
所述指令译码单元,用于编程指令的译码;包括对编程指令类型的区分以及编程指令与解析基元之间的映射;
所述阵列启动器,用于对目标解析数据流的初次解析处理;
所述解析基元阵列,完成特定的解析逻辑,取决于软件所定义的解析指令,包括解析基元矩阵和解析基元级联选择器,解析基元矩阵以列为单位,列与列之间通过基元级联选择器进行互联,解析基元矩阵的任意两列解析基元之间均有一个解析基元级联选择器,解析基元矩阵中同一列的解析基元中同一时刻只有一个解析基元被启动进行解析处理,解析基元是可编程的硬件基本单元;解析基元级联选择器用于选择并输出启动处理的解析基元的解析结果和解析级联状态信息到下一列解析基元。
进一步地,所述解析基元是一个最小可编程的硬件基本单元,包括解析指令处理单元、解析处理单元、解析结果寄存器、特征值寄存器、解析指令寄存器、级联状态寄存器、解析基元启动器和解析级联控制器,解析基元通过指令处理单元提取基元编程指令并分类,更新自身的特征值寄存器、解析指令寄存器和级联状态寄存器,解析基元启动器根据特征值寄存器以及上一级解析基元输入的解析结果和级联状态信息,判断本级解析基元是否满足解析的条件,若满足解析条件,解析处理单元根据解析指令寄存器中的基元解析指令进行解析处理,否则不进行解析,级联状态寄存器用于存储级联状态信息,解析完成后,将解析结果保存至解析结果寄存器,解析级联控制器将解析结果与级联状态一起输出至下一级解析基元。
进一步地,编程后的解析基元,根据解析指令寄存器中的启动参数,对目标数据流进行解析,解析基元启动器根据上一级解析基元输入的特征值与级联状态参数信息,计算并提取目标数据流的特征值参数信息,将从数据流中提取的特征值与特征值寄存器的内容进行比较,若两者相同,则给出匹配指示,通知解析处理单元开始解析,解析处理单元收到启动解析的指示后,根据解析指令寄存中的基元解析指令,执行解析操作,解析结果寄存器中存储的是解析操作提取的关键词内容信息,级联状态寄存器中存储了一组级联指示信息,待解析处理单元完成解析之后,解析级联控制器将最终的解析结果与级联状态信息同步进行输出,输出的信息在基元级联选择器中进行选择,选出有效的解析基元处理结果并根据级联窗台信息输出给下一级解析基元。
进一步地,所述基元解析指令指定了具体的解析参数,包括本级的解析域比特长度范围、解析关键词在解析域范围内的比特偏移量和比特长度。
进一步地,所述级联指示信息包括是否与下一级解析基元进行级联,以及与下一级基元级联时,下一级基元的匹配特征值的偏移量。
进一步地,所述编程指令,包括指令操作码、解析基元位号、基元解析指令,指令操作码用于确定编程指令的类型,指令类型包括阵列控制类型、基元解析类型和排错类型,排错类型用于硬件调试;解析基元位号用于确定编程指令的目标解析基元的位置,通过解析基元位号选择基元阵列中的目标解析基元进行编程;基元解析指令是解析基元可执行的基元编程指令。
进一步地,所述基元解析指令,包括解析启动参数、解析执行参数和解析级联参数,解析启动参数用于识别目标数据流特征值,解析执行参数用于确定基元进行解析处理的启动条件,当目标数据流提取的特征值与解析启动参数匹配时,满足基元进行解析处理的条件,解析级联参数用于确定是否终止当前解析基元,及进行下一级解析基元的确定;
所述解析执行参数,包括一个数据解析域长度参数和一组解析关键词参数,数据解析域长度参数,用于确定解析基元所面向的目标数据流的数据解析域的比特长度范围,数据解析域长度参数限定了解析关键词参数的范围,解析关键词参数包括解析关键词位置和解析关键词长度参数对,用于确定解析关键词的位置和长度信息;
解析级联参数包括基元级联使能参数和基元级联特征值参数,基元级联使能参数用于确定硬件解析逻辑是否终止于当前解析基元,若基元级联使能参数无效,则硬件解析处理在当前基元解析完成后终止;若基元级联使能参数有效,则表示硬件解析逻辑还未完成,需下一级解析基元继续进行解析;基元级联特征值参数包括基元启动解析特征值位置和基元启动解析特征值长度,分别用于确定下一级基元启动解析的特征值的位置和长度信息。
进一步地,所述阵列启动器本质上也是一个解析基元,但是它是一个特殊的解析基元,它的特征值位置计算方式与阵列中其他基元的计算方式稍有区别,它里面没有特征值位置计算逻辑,包括依次连接的数据流解析关键词位置计算单元、数据流解析关键词提取单元、基元解析级联状态处理单元和基元解析结果处理单元,主要作用是在基元阵列之前执行对目标数据的预解析处理,如果将软件的解析逻辑理解为一个解析状态机,则阵列启动器中的解析基元对应的就是解析状态机的初始状态的解析;
所述数据流解析关键词位置计算单元,用于解析执行参数的解析关键词参数,计算数据流解析关键词的位置;
所述数据流解析关键词提取单元,用于提取关键词个数和大小;
所述基元解析级联状态处理单元,根据解析级联参数,得到下一级解析基元的解析特征值参数;
所述基元解析结果处理单元,用于处理解析结果,包含解析关键词和解析级联参数,将关键词个数和大小,与下一级解析基元的解析特征值参数合并输出至下一级解析基元。
一种面向可编程交换的硬件解析器实现方法,包括如下步骤:
步骤S1,定义解析基元,解析基元获取上一级解析基元的解析结果和级联状态,并将本级解析基元的解析结果和级联状态直接输出,或输出至下一级解析基元;
步骤S2,定义基元解析指令格式,用于解析基元的启动、执行和级联;
步骤S3:定义硬件解析器的编程指令格式,根据编程指令格式,进行阵列启动器的启动、解析基元的解析和调试;
步骤S4:定义解析基元阵列,解析器的硬件规格和解析能力与解析基元矩阵直接相关,定义解析基元阵列,也即是确定基元阵列的行列参数,基元阵列的行数用于确定解析器能够支持的并发解析基元数,基元阵列的列数用于确定解析器能够支持的最大级联解析基元数,也即解析基元的最大级联数目,一个解析基元能够完成软件所定义的一个逻辑节点的解析过程;
步骤S5:阵列启动器中解析基元的处理,根据基元解析指令,对目标数据流进行解析,并将解析结果与下一级所需级联参数合并输出至下一级解析基元;
步骤S6:基元阵列中解析基元的处理,根据上一级级联参数,从目标数据流中提取匹配特征值,用于判断是否进行解析;根据上一级级联参数和基元解析指令,进行目标数据流关键词位置计算;通过得到关键词位置提取关键词;根据基元解析指令,生成新的级联参数;根据提取的关键词和新的级联参数,与目标数据流一起输出至下一级解析基元。
进一步地,所述步骤S1中,解析基元根据为其配置的基元编程指令进行指令解析,提取基元编程指令参数并分类,根据类别分别更新本级解析基元的特征值、基元解析指令和级联状态,根据上一级解析基元的解析结果和级联状态,提取目标数据流的特征值,将目标数据流的特征值与本级解析基元的特征值进行匹配,若匹配,则根据基元解析指令进行解析处理,否则不解析,将解析结果根据级联状态输出;
解析指令包括解析处理的执行参数,执行参数包括本级解析基元面向的目标数据流的解析域长度范围、解析关键词的个数、位置和长度;
所述步骤S2中,基元解析指令格式包括基元解析指令包含基元解析启动参数、基元解析执行参数、基元解析级联参数,基元解析启动参数对应解析特征值,根据上一级解析基元输入的级联参数,提取目标数据流的特征值,当提取的目标数据流特征值与基元解析启动参数匹配时,启动基元解析;基元解析执行参数包括一个数据解析域长度参数和一组解析关键词参数,数据解析域长度参数用于确定目标数据流中基元解析域的范围,对应待解析目标数据流的比特长度,解析关键词参数的数目用于确定一个解析基元的解析能力,对应解析基元提取关键词的能力,解析关键词参数用于确定解析关键词在目标数据流中的位置参数和长度参数;基元解析级联参数包括基元级联使能参数和基元级联特征值参数,基元级联使能参数用于确定本级解析基元是否需要与下一个解析基元进行级联解析,基元级联特征值参数用于确定下一级解析基元所面向的目标解析数据流的匹配特征值参数;
基元级联特征值参数包括基元启动解析特征值位置和基元启动解析特征值长度,分别用于确定下一级基元启动解析的特征值的位置和长度信息;
所述步骤S3中,解析器编程指令包括指令操作码、编程解析基元位号、基元解析指令,指令操作码用于确定当前编程指令的处理类型,若操作码指示指令类型为阵列控制类型,则基元解析指令用于编程阵列启动器,若指令操作码类型为基元解析类型,则根据基元解析指令对解析基元进行编程配置,若操作码类型为排错类型,则根据编程解析基元位号对解析基元进行调试;
阵列控制类型的编程指令,用于设置基元解析阵列的启动参数,包括目标数据流的初次匹配特征值位置和长度等参数;
基元解析类型的编程指令,用于对硬件解析基元进行编程配置,以完成对应的解析逻辑;
排错类型的编程指令,用于硬件调试,读取硬件解析基元中的寄存器状态和指令编程信息;
编程解析基元位号,用于确定当前编程指令的编程目标基元的位置信息,对应基元阵列中的解析基元的位置,通过编程解析基元位号寻址到需要编程的解析基元;
基元解析指令,包括硬件基元执行解析处理的完整解析参数。
所述步骤S5中,根据基元解析执行参数的解析关键词参数,计算目标数据流解析关键词的位置;根据解析的关键词位置,提取关键词个数和大小;根据解析级联参数,得到下一级解析基元的解析特征值参数;将关键词个数和大小,与下一级解析基元的解析特征值参数合并输出至下一级解析基元;
所述步骤S6中,上一级解析基元输出的级联参数,包括级联偏移量Jump.OffsetIn、级联长度Jump.LensIn、特征值偏移量MKey.OffsetIn和特征值长度MKey.LensIn,其中将数据解析域长度参数作为级联偏移量,将基元级联特征值参数中基元启动解析的特征值的位置和长度,作为特征值偏移量和特征值长度,包括如下步骤:
步骤S6-1:数据流特征值提取,根据上一级级联参数的特征值偏移量Mkey.Offset和特征值长度MKey.LensIn,从目标数据流中提取出匹配特征值的内容MData;
步骤S6-2:数据流关键词位置计算,根据上一级级联参数的级联偏移量Jump.OffsetIn和基元解析指令中解析执行参数的解析关键词参数ParExec.OL,计算出解析关键词的位置偏移量和长度,位置偏移量为解析关键词参数中基元启动解析的特征值的长度信息与级联偏移量之和:ParKey.Offset=ParExec.OL.Offset+Jump.OffsetIn,解析关键词的长度为解析关键词参数中基元启动解析的特征值的长度信息:ParKey.Lens=ParExec.OL.Lens;
步骤S6-3:数据流关键词提取,根据解析关键词的位置偏移量ParKey.Offset和解析关键词的长度ParKey.Lens,对目标数据流中解析关键词ParKey进行提取,提取的关键词的个数取决于基元解析指令中解析执行参数的解析关键词参数ParExec.OL个数;
步骤S6-4:基元解析级联状态处理,生成新的解析级联状态参数,根据基元解析指令中基元级联参数ParJump.Offset、ParJump.Lens、ParExec.DL和级联偏移量Jump.OffsetIn,生成新的解析级联参数,新的解析级联参数包括新的级联偏移量Jump.OffsetNew、新的级联长度Jump.LensNew、新的特征值偏移量MKey.OffsetNew和新的特征值长度MKey.LensNew;新的级联偏移量是级联偏移量与数据解析员长度参数之和Jump.OffsetNew= Jump.OffsetIn+ParExec.DL,新的解析级联参数用于下一级解析基元进行级联解析;
步骤S6-5:基元解析结果处理,将提取的关键词ParKey和新的级联参数Jump.OffsetNew、MKey.OffsetNew、MKey.LensNew与目标数据流一起输出至下一级解析基元。
本发明的优势和有益效果在于:
本发明所提出的解析器实现架构,支持以定制解析基元矩阵参数的方式,定义不同规格的解析器硬件,硬件可编程能力与解析基元阵列的规模直接等效,这种硬件实现架构不仅可简化软件解析逻辑的后端编译器的实现复杂度,还可以降低后端编译器与硬件解析器的耦合度,将后端编译器与硬件解析器之间的耦合性降低到仅与硬件基元解析指令以及解析基元阵列的定义相关,还支持以参数化的方式在解析器解析能力指标与目标芯片逻辑资源之间进行灵活的调整和适配,具有很强的可操作性和灵活性。
附图说明
图1是本发明实施例的硬件解析器架构图;
图2是本发明实施例中解析基元阵列结构示意图;
图3是本发明实施例中硬件解析基元结构图;
图4是本发明实施例中解析器编程指令格式图;
图5是本发明实施例中基元解析指令格式图;
图6是本发明实施例中解析执行参数格式图;
图7是本发明实施例中解析级联参数格式图;
图8是本发明实施例的解析器实现方法流程图;
图9是本发明实施例中阵列启动器结构示意图;
图10是本发明实施例中基元阵列中基元解析处理流程图;
图11是本发明实施例中硬件解析器编程指令示意图;
图12是本发明实施例中装置的结构图。
具体实施方式
以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
本发明提出了一种面向可编程交换的硬件解析器及解析器实现方法,将硬件中实现一个逻辑节点解析功能的处理单元,封装成一个可编程硬件解析基元,硬件解析基元根据软件的编程指令,完成特定的解析处理。硬件解析器以解析基元为基本的可编程单元,以编程指令为基本的可执行单元,以解析基元阵列为解析器核心架构,在硬件解析基元与解析逻辑之间建立一种映射关系,将软件描述的解析逻辑抽象为硬件解析基元执行解析指令的过程,利用一种解析编程指令阵列化的后端编译器,将软件解析逻辑编译成一个指令阵列,将指令阵列中所有的解析编程指令配置到对应的硬件解析基元中,即完成了对硬件解析器的编程。
一种面向可编程交换的硬件解析器,解析器实现架构如图1所示,包括指令数据接口、指令译码单元、阵列启动器和解析基元阵列;
所述指令数据接口,用于获取编程指令和输出解析器排错数据;
所述指令译码单元,用于编程指令的译码;
所述阵列启动器,用于对目标解析数据流的初次解析处理;
所述解析基元阵列,包括解析基元矩阵和解析基元级联选择器,解析基元矩阵以列为单位,列与列之间通过基元级联选择器进行互联,解析基元矩阵的任意两列解析基元之间均有一个解析基元级联选择器,解析基元矩阵中同一列的解析基元中同一时刻只有一个解析基元被启动进行解析处理,解析基元是可编程的硬件基本单元;解析基元级联选择器用于选择并输出启动处理的解析基元的解析结果和解析级联状态信息到下一列解析基元。
具体地,解析器由指令数据接口InstPort、指令译码单元InstDecoder、阵列启动器ArrayStart和解析基元阵列BU组成。
指令数据接口InstPort负责完成软件编程指令的输入和解析器硬件Debug数据的输出等功能;
指令译码单元InstDecoder负责完成软件编程指令的译码功能,包括完成对编程指令类型的区分以及编程指令与解析基元之间的映射等功能。
阵列启动器ArrayStart负责完成对目标解析数据流的初次解析处理,启动器本质上也是一个解析基元,但是它是一个特殊的解析基元,它的特征值位置计算方式与阵列中其他基元的计算方式稍有区别,它里面没有特征值位置计算逻辑。主要作用是在基元阵列之前执行对目标数据的预解析处理,如果将软件的解析逻辑理解为一个解析状态机,则阵列启动器中的解析基元对应的就是解析状态机的初始状态的解析。
解析基元包括解析指令处理单元、解析处理单元、解析结果寄存器、特征值寄存器、解析指令寄存器、级联状态寄存器、解析基元启动器和解析级联控制器,解析基元通过指令处理单元提取基元编程指令并分类,更新自身的特征值寄存器、解析指令寄存器和级联状态寄存器,解析基元启动器根据特征值寄存器以及上一级解析基元输入的解析结果和级联状态信息,判断本级解析基元是否满足解析的条件,若满足解析条件,解析处理单元根据解析指令寄存器中的基元解析指令进行解析处理,否则不进行解析,级联状态寄存器用于存储级联状态信息,解析完成后,将解析结果保存至解析结果寄存器,解析级联控制器将解析结果与级联状态一起输出至下一级解析基元。
基元解析指令指定了具体的解析参数,包括本级的解析域比特长度范围、解析关键词在解析域范围内的比特偏移量和比特长度。
具体地,解析基元阵列BU负责完成特定的解析逻辑,取决于软件所定义的解析指令。BU具体结构如图2所示,解析基元阵列BU由解析基元矩阵PU和解析基元级联选择器PM两部分组成,解析基元矩阵以列为单位,列与列之间通过基元级联选择器PM进行互联,解析基元矩阵的任意两列解析基元之间均有一个解析基元级联选择器。解析基元矩阵中同一列的解析基元中同一时刻只有一个基元被启动进行解析处理,解析基元级联选择器PM负责选择并输出启动处理的解析基元的解析结果和解析级联状态信息到下一列解析基元。
解析基元是一个最小可编程的硬件基本单元,具体结构如图3所示。解析基元由解析指令处理单元、解析处理单元、解析结果寄存器、特征值寄存器、解析指令寄存器、级联状态寄存器、解析基元启动器和解析级联控制器等硬件逻辑组件组成。解析基元根据配置的基元编程指令,更新自己的特征值寄存器、解析指令寄存器和级联状态寄存器。解析基元启动器根据特征值寄存器以及上一级解析基元输入的级联状态信息,判断本级解析基元是否满足解析的条件,满足解析条件后,解析处理单元根据解析指令寄存器中的解析指令进行解析处理,解析完成后,解析级联控制器将解析结果与级联状态一起输出给下一级解析基元。
编程后的解析基元,根据解析指令寄存器中的启动参数,对目标数据流进行解析,解析基元启动器根据上一级解析基元输入的特征值与级联状态参数信息,计算并提取目标数据流的特征值参数信息,将从数据流中提取的特征值与特征值寄存器的内容进行比较,若两者相同,则给出匹配指示,通知解析处理单元开始解析,解析处理单元收到启动解析的指示后,根据解析指令寄存中的基元解析指令,执行解析操作,解析结果寄存器中存储的是解析操作提取的关键词内容信息,级联状态寄存器中存储了一组级联指示信息,待解析处理单元完成解析之后,解析级联控制器将最终的解析结果与级联状态信息同步进行输出,输出的信息在基元级联选择器中进行选择,选出有效的解析基元处理结果并根据级联窗台信息输出给下一级解析基元。
级联指示信息包括是否与下一级解析基元进行级联,以及与下一级基元级联时,下一级基元的匹配特征值的偏移量。
具体地,编程后的解析基元,根据解析寄存器中的启动参数,对目标数据流自动进行逻辑解析。解析基元启动器根据上一级解析基元输入的特征值长度、位置、级联状态等参数信息,自动计算并提取目标数据流的特征值,将从数据流中提取的特征值与特征值寄存器的内容进行比较,若两者一样,则给出匹配指示,通知解析处理单元开始解析。解析处理单元收到启动解析的指示后,根据解析指令寄存中的解析指令执行解析操作。解析指令指定了具体的解析参数,包括本级的解析域比特长度范围、解析关键词在解析域范围内的比特偏移量和比特长度等信息。解析结果寄存器中存储的是解析操作提取的关键词内容信息,状态寄存器中存储了一组级联指示信息,包括是否与下一级解析基元进行级联以及与下一级基元级联时,下一级基元的匹配特征值的偏移量等信息。待解析处理单元完成解析之后,解析级联控制器将最终的解析结果与级联状态同步进行输出,输出的所有信息在PM中进行选择,PM是基元级联结果选择器,将有效的解析基元处理结果选择出来并输出给下一级,PM的主要作用就是选择出解析阵列中前一列解析基元中的有效解析结果并输出给下一级。
编程指令包括指令操作码、解析基元位号、基元解析指令,指令操作码用于确定编程指令的类型,指令类型包括阵列控制类型、基元解析类型和排错类型,排错类型用于硬件调试;解析基元位号用于确定编程指令的目标解析基元的位置,通过解析基元位号选择基元阵列中的目标解析基元进行编程;基元解析指令是解析基元可执行的基元编程指令。
具体地,硬件解析器的编程指令由指令操作码InstOP、解析基元位号ParLocID、基元解析指令ParInst三部分组成,指令结构如图4所示。InstOP决定了编程指令的类型,指令类型分为阵列控制类型、基元解析类型和Debug类型,Debug类型仅用于硬件调试。ParLocID指定了编程指令的目标解析基元的位置,对应一个二维坐标值,通过该参数选择基元阵列中的目标解析基元进行编程。ParInst是硬件解析基元可执行的基元编程指令,也即基元解析指令。
基元解析指令,包括解析启动参数、解析执行参数和解析级联参数,解析启动参数用于识别目标数据流特征值,解析执行参数用于确定基元进行解析处理的启动条件,当目标数据流提取的特征值与解析启动参数匹配时,满足基元进行解析处理的条件,解析级联参数用于确定是否终止当前解析基元,及进行下一级解析基元的确定;
所述解析执行参数,包括一个数据解析域长度参数和一组解析关键词参数,数据解析域长度参数,用于确定解析基元所面向的目标数据流的数据解析域的比特长度范围,数据解析域长度参数限定了解析关键词参数的范围,解析关键词参数包括解析关键词位置和解析关键词长度参数对,用于确定解析关键词的位置和长度信息;
解析级联参数包括基元级联使能参数和基元级联特征值参数,基元级联使能参数用于确定硬件解析逻辑是否终止于当前解析基元,若基元级联使能参数无效,则硬件解析处理在当前基元解析完成后终止;若基元级联使能参数有效,则表示硬件解析逻辑还未完成,需下一级解析基元继续进行解析;基元级联特征值参数包括基元启动解析特征值位置和基元启动解析特征值长度,分别用于确定下一级基元启动解析的特征值的位置和长度信息。
具体地,基元解析指令ParInst由解析启动参数ParMkey、解析执行参数ParExec和解析级联参数ParJump三部分组成,指令结构如图5所示。解析启动参数ParMkey是用于识别目标数据流特征值的一个匹配参数,ParMkey决定了基元进行解析处理的启动条件,也即解析特征值的匹配条件,当目标数据流符合按照{Offset,Lens}提取的特征值=ParMkey时,即满足了基元进行解析处理的条件。解析执行参数由一个DL参数和一组OL参数组成,参数结构如图6所示。DL参数即Data-Lens,决定了一个解析基元所面向的目标数据流的数据解析域的比特长度范围,DL参数限定了OL参数的范围。OL参数即Offset、Lens参数对,决定了解析关键词的位置和长度信息,一组OL参数决定了一组解析关键词的位置和长度信息。解析级联参数ParJump由基元级联使能ParserEn和基元级联特征值参数Offset、Lens组成,参数结构如图7所示。ParserEn决定了硬件解析逻辑是否终止于当前解析基元,若ParserEn无效,则硬件解析处理在当前基元解析完成后就会终止;若ParserEn有效,则表示硬件解析逻辑还未完成,还需要下一级解析基元继续进行解析。级联参数中的Offset、Lens决定了下一级基元启动解析的特征值的位置和长度信息。
如图8所示,一种面向可编程交换的硬件解析器实现方法,包括如下步骤:
步骤S1,定义解析基元,解析基元获取上一级解析基元的解析结果和级联状态,并将本级解析基元的解析结果和级联状态直接输出,或输出至下一级解析基元;
步骤S2,定义基元解析指令格式,用于解析基元的启动、执行和级联;
步骤S3:定义硬件解析器的编程指令格式,根据编程指令格式,进行阵列启动器的启动、解析基元的解析和调试;
步骤S4:定义解析基元阵列,确定基元阵列的行列参数,基元阵列的行数用于确定解析器能够支持的并发解析基元数,基元阵列的列数用于确定解析器能够支持的最大级联解析基元数,一个解析基元能够完成软件所定义的一个逻辑节点的解析过程;
步骤S5:阵列启动器中解析基元的处理,根据基元解析指令,对目标数据流进行解析,并将解析结果与下一级所需级联参数合并输出至下一级解析基元;
步骤S6:基元阵列中解析基元的处理,根据上一级级联参数,从目标数据流中提取匹配特征值,用于判断是否进行解析;根据上一级级联参数和基元解析指令,进行目标数据流关键词位置计算;通过得到关键词位置提取关键词;根据基元解析指令,生成新的级联参数;根据提取的关键词和新的级联参数,与目标数据流一起输出至下一级解析基元。
步骤S1中,解析基元根据为其配置的基元编程指令进行指令解析,提取基元编程指令参数并分类,根据类别分别更新本级解析基元的特征值、基元解析指令和级联状态,根据上一级解析基元的解析结果和级联状态,提取目标数据流的特征值,将目标数据流的特征值与本级解析基元的特征值进行匹配,若匹配,则根据基元解析指令进行解析处理,否则不解析,将解析结果根据级联状态输出;
解析指令包括解析处理的执行参数,执行参数包括本级解析基元面向的目标数据流的解析域长度范围、解析关键词的个数、位置和长度。
具体地,步骤S1中定义硬件解析基元。硬件解析基元由解析指令处理逻辑、数据解析逻辑、基元启动解析控制逻辑、解析级联控制逻辑、特征值寄存器、解析指令寄存器、解析级联寄存器、解析结果寄存器等硬件逻辑组件组成。解析指令处理逻辑负责完成基元编程指令参数的提取和分类,从指令中提取出基元启动参数、解析执行参数、基元级联参数等信息,分别对应特征值寄存器、解析指令寄存器和级联状态寄存器。解析启动寄存器中存储的是目标数据流的特征值匹配参数,匹配参数用于判定目标数据流是否符合解析条件;解析指令寄存器中存储的是解析处理单元的执行参数,包括解析基元面向的目标数据流的解析域长度范围、解析关键词的个数、位置和长度等信息;解析级联寄存器中存储的是解析基元级联参数。
步骤S2中,基元解析指令格式包括基元解析指令包含基元解析启动参数、基元解析执行参数、基元解析级联参数,基元解析启动参数对应解析特征值,根据上一级解析基元输入的级联参数,提取目标数据流的特征值,当提取的目标数据流特征值与基元解析启动参数匹配时,启动基元解析;基元解析执行参数包括一个数据解析域长度参数和一组解析关键词参数,数据解析域长度参数用于确定目标数据流中基元解析域的范围,对应待解析目标数据流的比特长度,解析关键词参数的数目用于确定一个解析基元的解析能力,对应解析基元提取关键词的能力,解析关键词参数用于确定解析关键词在目标数据流中的位置参数和长度参数;基元解析级联参数包括基元级联使能参数和基元级联特征值参数,基元级联使能参数用于确定本级解析基元是否需要与下一个解析基元进行级联解析,基元级联特征值参数用于确定下一级解析基元所面向的目标解析数据流的匹配特征值参数;
基元级联特征值参数包括基元启动解析特征值位置和基元启动解析特征值长度,分别用于确定下一级基元启动解析的特征值的位置和长度信息。
具体地,步骤S2中定义硬件基元解析指令格式。一个基元解析指令包含三部分参数:基元解析启动参数ParMkey、基元解析执行参数ParExec、基元解析级联参数ParJump。基元解析启动参数ParMkey对应解析特征值,根据上一级解析基元输入的级联参数ParJump.Offset、ParJump.Lens提取目标数据流的特征值,当提取的目标数据流特征值与ParMkey匹配时,就会启动基元解析过程。基元解析执行参数ParExec由一个DL参数和一组OL参数组成。DL参数即Data-Lens,决定了目标数据流中基元解析域的范围,对应待解析目标数据流的比特长度。OL参数的数目决定了一个硬件解析基元的解析能力,也对应着解析基元提取关键词的能力。OL参数即{Offset,Lens}参数对,决定解析关键词在目标数据流中的位置参数和长度参数,基元解析级联参数ParJump由ParserEn、Offset和Lens三部分参数组成,ParserEn决定了当前解析基元是否需要与下一个解析基元进行级联解析,Offset和Lens决定了下一个解析基元所面向的目标解析数据流的匹配特征值参数。
步骤S3中,解析器编程指令包括指令操作码、编程解析基元位号、基元解析指令,指令操作码用于确定当前编程指令的处理类型,若操作码指示指令类型为阵列控制类型,则基元解析指令用于编程阵列启动器,若指令操作码类型为基元解析类型,则根据基元解析指令对解析基元进行编程配置,若操作码类型为排错类型,则根据编程解析基元位号对解析基元进行调试;
阵列控制类型的编程指令,用于设置基元解析阵列的启动参数,包括目标数据流的初次匹配特征值位置和长度等参数;
基元解析类型的编程指令,用于对硬件解析基元进行编程配置,以完成对应的解析逻辑;
排错类型的编程指令,用于硬件调试,读取硬件解析基元中的寄存器状态和指令编程信息;
编程解析基元位号,用于确定当前编程指令的编程目标基元的位置信息,对应基元阵列中的解析基元的位置,通过编程解析基元位号寻址到需要编程的解析基元;
基元解析指令,包括硬件基元执行解析处理的完整解析参数。
具体地,步骤S3中定义硬件解析器的编程指令ProInst格式。解析器编程指令由指令操作码InstOP、编程解析基元位号ParLocID、基元解析指令ParInst三部分组成。指令操作码InstOP决定了当前指令的处理类型,若操作码指示指令类型为阵列控制类型,则ParInst指令用于编程阵列启动器,若操作码类型为基元解析类型,则根据ParInst指令对解析基元进行编程配置,若操作码类型为Debug类型,则根据ParLocID参数对解析基元进行调试。阵列控制类型的编程指令主要用于设置基元解析阵列的启动参数,包括目标数据流的初次匹配特征值位置和长度等参数。基元解析类型的编程指令主要用于对硬件解析基元进行编程配置,以完成特定的解析逻辑;Debug类型的编程指令用于调试目的,用于读取硬件解析基元中的寄存器状态和指令编程信息。硬件基元位号ParLocID决定了当前编程指令的编程目标基元的位置信息,对应硬件基元阵列中的解析基元的位置,编程指令通过该参数可以寻址到任意一个需要编程的硬件解析基元;基元解析指令ParInst包含了硬件基元执行解析处理的完整解析参数。
阵列启动器,包括依次连接的数据流解析关键词位置计算单元、数据流解析关键词提取单元、基元解析级联状态处理单元和基元解析结果处理单元;
所述数据流解析关键词位置计算单元,用于解析执行参数的解析关键词参数,计算数据流解析关键词的位置;
所述数据流解析关键词提取单元,用于提取关键词个数和大小;
所述基元解析级联状态处理单元,根据解析级联参数,得到下一级解析基元的解析特征值参数;
所述基元解析结果处理单元,用于处理解析结果,包含解析关键词和解析级联参数,将关键词个数和大小,与下一级解析基元的解析特征值参数合并输出至下一级解析基元。
具体地,所述步骤S4中定义硬件解析基元阵列。解析器的硬件规格和解析能力与解析基元矩阵直接相关,定义解析基元阵列,也即是确定基元阵列的行列参数。基元阵列的行数决定了解析器所能支持的并发解析基元数,基元阵列的列数决定了解析器所能支持的最大级联解析基元数,也即解析基元的最大级联数目,一个解析基元可以完成软件所定义的一个逻辑节点的解析过程。
所述步骤S5中,根据基元解析执行参数的解析关键词参数,计算目标数据流解析关键词的位置;根据解析的关键词位置,提取关键词个数和大小;根据解析级联参数,得到下一级解析基元的解析特征值参数;将关键词个数和大小,与下一级解析基元的解析特征值参数合并输出至下一级解析基元。
具体地地,步骤S5中阵列启动器中解析基元的处理流程如图9所示,整个处理流程由数据流解析关键词位置计算单元、数据流解析关键词提取单元、基元解析级联状态处理单元和基元解析结果处理单元等4个处理单元组成。由于阵列启动器中解析基元永远是硬件中执行解析指令的第一个解析基元,数据流解析关键词位置计算单元中计算的数据流解析关键词的位置仅与编程指令中ParExec.OL参数相关,数据流解析关键词提取单元中提取的关键词的个数和大小取决于数据流解析关键词位置计算单元的处理结果。基元解析级联状态处理单元负责处理基元级联参数,根据ParJump参数,给出下一级基元的解析特征值参数;基元解析结果处理单元负责处理解析结果,包含解析关键词和解析级联参数,将数据流解析关键词提取单元和基元解析级联状态处理单元中的处理结果合并一起输出给下一级解析基元;输出信息有两类:解析关键词和级联参数:ParKey1、ParKey2…和Jump.Offset、MKey.Offset和MKey.Lens;Jump.Offset= ParExec.DL,MKey.Offset=ParJump.Offset,MKey.Lens= ParJump.Lens;
所述步骤S6中,上一级解析基元输出的级联参数,包括级联偏移量、级联长度、特征值偏移量和特征值长度,其中将数据解析域长度参数作为级联偏移量,将基元级联特征值参数中基元启动解析的特征值的位置和长度,作为特征值偏移量和特征值长度,包括如下步骤:
步骤S6-1:数据流特征值提取,根据上一级级联参数的特征值偏移量和特征值长度,从目标数据流中提取出匹配特征值的内容;
步骤S6-2:数据流关键词位置计算,根据上一级级联参数的级联偏移量和基元解析指令中解析执行参数的解析关键词参数,计算出解析关键词的位置偏移量和长度,位置偏移量为解析关键词参数中基元启动解析的特征值的长度信息与级联偏移量之和,解析关键词的长度为解析关键词参数中基元启动解析的特征值的长度信息;
步骤S6-3:数据流关键词提取,根据解析关键词的位置偏移量和解析关键词的长度,对目标数据流中解析关键词进行提取,提取的关键词的个数取决于基元解析指令中解析执行参数的解析关键词参数个数;
步骤S6-4:基元解析级联状态处理,生成新的解析级联状态参数,根据基元解析指令中基元级联参数和级联偏移量,生成新的解析级联参数,新的解析级联参数包括新的级联偏移量、新的级联长度、新的特征值偏移量和新的特征值长度MKey.LensNew;新的级联偏移量是级联偏移量与数据解析员长度参数之和,新的解析级联参数用于下一级解析基元进行级联解析;
步骤S6-5:基元解析结果处理,将提取的关键词和新的级联参数与目标数据流一起输出至下一级解析基元。
具体地,步骤S6中基元阵列中解析基元处理的流程如图10所示,基于输入参数是上一级解析基元输出的级联参数,包括级联偏移量Jump.OffsetIn、级联长度Jump.LensIn、特征值偏移量MKey.OffsetIn和特征值长度MKey.LensIn四部分。
步骤S6-1负责根据Mkey.Offset和MKey.LensIn两个参数从目标数据流中提取出匹配特征值的内容MData;步骤S6-2负责根据级联参数中的Jump.OffsetIn和基元解析指令寄存器中的解析参数ParExec.OL,计算出所有解析关键的位置偏移量:ParKey.Offset=ParExec.OL.Offset+Jump.OffsetIn,ParKey.Lens= ParExec.OL.Lens;步骤S6-3负责根据ParKey.Offset和ParKey.Lens两个参数完成目标数据流中解析关键词ParKey的提取处理,提取的关键词的个数取决于解析指令中ParExec.OL参数的个数。步骤S6-4负责完成解析级联状态的处理,目的是生成新的解析级联状态参数,根据解析指令中ParJump.Offset、ParJump.Lens、ParExec.DL和级联参数Jump.OffsetIn等参数生成新的解析级联参数,新的解析级联参数由级联偏移量Jump.OffsetNew、级联长度Jump.LensNew、特征值偏移量MKey.OffsetNew和特征值长度MKey.LensNew四部分组成。Jump.OffsetNew=Jump.OffsetIn+ParExec.DL,新的解析级联参数用于下一级解析基元进行级联解析时使用。步骤S6-5负责完成基元解析结果的处理,目的是将步骤S6-3中提取的关键词ParKey和步骤S6-4中生成的新的级联参数Jump.OffsetNew、MKey.OffsetNew、MKey.LensNew与目标数据流一起输出给下一级解析基元。
以一个标准的Ether+Vlan+Ipv4+UDP报文的解析为例,对硬件解析器中基元的解析过程进行说明。解析的目的是提取Ipv4中的协议号、源IP地址、目的IP地址和UDP中的源端口号和目的端口号等五元组信息。整个解析过程涉及到4种协议头格式的级联解析,需要4个编程指令对硬件解析器中的4个解析基元进行编程,编程指令如图11所示。假定一个待解析的目标数据流的十六进制数据内容为:0x7440BB9445787640BB9445778100000108004500000500010000FF110000010
20304050607082710271101F400000102030405...
步骤一:对硬件解析器进行编程。图9是编程指令示意图,图中有4条编程指令。
编程指令ProInst1是阵列启动器的编程指令,包含InstOP、ParExec、ParJump三部分参数。InstOP=1表示本条指令的类型属于阵列控制类型,用于对阵列启动器中的基元进行编程;ParExec中仅有DL参数没有OL参数,表示本条指令中没有提取关键词的动作。ParExec.DL=0x60是Ether头中解析域的比特长度范围,当ParExec.OL存在时,其参数范围不超过ParExec.DL所限定的比特长度;ParJump是基元解析的级联参数,ParJump.ParserEn=1表示启动硬件解析器的解析基元阵列,ParJump.MkeyOffset和ParJump.MkeyLens是下一级级联基元的解析匹配特征值的比特偏移量和比特长度信息;
编程指令ProInst2是硬件解析器中基元阵列的编程指令,包含InstOP、ParLocID、ParExec、ParJump四部分参数。InstOP=2表示本条指令的类型属于基元解析类型,用于对基元阵列中解析基元进行编程;ParLocID是基元阵列中解析基元的位置参数,ParLocID.X和ParLocID.Y分别表示基元阵列的行列坐标编号,[0,0]表示是基元阵列中第一行的一个基元。ParMkey是基元启动解析的特征值参数,ParExec是基元的解析执行参数,参数包含了基元执行解析操作的解析域比特长度范围和解析域范围内需要解析的关键词的位置和长度信息。ParJump是基元级联参数,ParserEn为1表示启动解析级联功能(0表示不启动),ParJump.Offset=0x10表示参与解析级联的下一级基元所面向的目标数据流的匹配特征值的相对位置偏移量为0x10,即2Bytes,特征值长度参数0x10表示特征值长度为2Byte,下一级解析基元根据这两个参数去计算绝对偏移量并提取目标数据流中的特征值,然后与其特征值寄存器中的值进行比较,值相等就启动解析处理。
编程指令ProInst3也是硬件解析器中基元阵列的编程指令,同样包含InstOP、ParLocID、ParExec、ParJump四部分参数,与ProInst2不同的是,ParExec中包含了关键词提取参数ParExec.OL,ParExec中有3个OL参数,表示基元将提取3个解析关键词。编程指令ProInst4含义与编程指令ProInst3类似,不再赘述。
步骤二:基于步骤一中的目标数据流和编程指令,硬件解析器中有四个解析基元参与了解析过程,第一个解析基元位于阵列启动器中,第二、第三和第四个解析基元位于基元阵列中,四个解析基元的处理过程分别描述如下:
1)基元1位于阵列启动器中,编程指令参数为:
ParExec.DL=0x60, ParJump. ParserEn=1,ParJump.Offset=0x60,ParJump.Lens=0x10;基元输入的目标数据流内容为:7440BB9445787640BB944577810000010800450000050001000
0ff11000001020304050607082710271101f400000102030405...
由于是第一级解析基元:所以基元输入的级联参数均为0。
Jump.OffsetIn=0;MKey.OffsetIn=0;MKey.LensIn=0;
本基元是一个特殊基元,基元解析处理流程如图9所示。
由于编程指令ProInst1的ParExec中未携带任何OL参数,所以图9中的数据流解析关键词位置计算单元和数据流解析关键词提取单元不执行任何处理。基元解析结果处理单元输出的级联参数为:
Jump.OffsetNew = Jump.OffsetIn + ParExec.DL = 0x70;
MKey.OffsetNew=ParJump.Offset + MKey.OffsetIn =0x60;
MKey.LensNew= ParJump.Lens=0x10;
2)基元2的编程指令参数:
解析启动参数:ParMkey=0x8100;
解析执行参数:ParExe.DL=0x20;
解析级联参数:ParJump.ParserEn=1,ParJump.Offset=0x10, ParJump.Lens=0;
输入目标数据流内容:7440BB9445787640BB9445778100000108004500000500010000ff11
000001020304050607082710271101f400000102030405...
基元输入的级联参数为:
Jump.OffsetIn=0x70;MKey.OffsetIn=0x60;MKey.LensIn=0x10;
基元2的解析流程如图10所示,步骤S6-1:依据MKey.OffsetIn和MKey.LensIn提取的特征值,对应的字节偏移量为12字节:MData=0x8100=ParMkey;
由于指令ParExe中只有DL没有OL参数,步骤S6-2和步骤S6-3没有计算结果;
步骤S6-4的计算结果为:
Jump.OffsetNew= ParExec.DL + Jump.OffsetIn =0x90;
MKey.OffsetNew= ParJump.Offset + Jump.OffsetIn =0x80;
MKey.LensNew= ParJump.Lens = 0x10;
步骤S6-5:由于步骤S6-1中提取的MData=Mkey=0x8100,数据流特征值匹配了指令特征值参数,所以输出的级联参数为:
Jump.OffsetNew= 0x90;
Key.OffsetNew=0x80;
MKey.LensNew=0x10;
3)基元3的编程指令参数:
解析启动参数:ParMkey = 0x0800;
解析执行参数:ParExe.DL=0xa0,ParExe.OL1.Offset=0x48, ParExe.OL1.Lens=0x8,
ParExe.OL2.Offset=0x60, ParExe.OL2.Lens=0x20,
ParExe.OL3.Offset=0x80, ParExe.OL3.Lens=0x20,
解析级联参数:ParJump.ParEn=1; ParJump.Offset=0x48; ParJump.Lens=0x8
输入目标数据流内容:7440BB9445787640BB9445778100000108004500000500010000ff11
000001020304050607082710271101f400000102030405...
基元输入的级联参数为:
Jump.OffsetIn=0x90;Key.OffsetIn=0x80;MKey.LensIn=0x10;
基元3的解析流程如图10所示,步骤S6-1依据Key.OffsetIn和MKey.LensIn对目标数据流提取特征值:MData=0x0800;
步骤S6-2计算的关键词提取信息如下:
ParKey1.Offset = Jump.OffsetIn + ParExec.OL1.Offset = 0xD8;
ParKey1.Lens = ParExec.OL1.Lens=0x8;
ParKey2.Offset = Jump.OffsetIn + ParExec.OL2.Offset=0xF0;
ParKey2.Lens = ParExec.OL2.Lens=0x20;
ParKey3.Offset = Jump.OffsetIn + ParExec.OL3.Offset=0x110;
ParKey3.Lens = ParExec.OL3.Lens=0x20;
步骤S6-3依据步骤S6-2中计算的关键词提取参数,提取的解析关键词如下:
ParKey1=0x11;ParKey2=0x01020304;ParKey2=0x05060708;
步骤S6-4根据解析指令参数计算的解析级联参数如下:
Jump.OffsetNew= ParExec.DL + Jump.OffsetIn =0x130;
MKey.OffsetNew= ParJump.Offset + Jump.OffsetIn =0xD8;
MKey.LensNew= ParJump.Lens = 0x8;
步骤S6-5,负责解析结果的处理,由于步骤S6-1的提取的数据流特征值与解析指令启动参数ParMkey相同,匹配了解析条件,故步骤S6-5输出的解析结果如下:
ParKey1=0x11,ParKey2=0x01020304;ParKey3=0x05060708;
Jump.OffsetNew=0x130; MKey.OffsetNew=0xD8;MKey.LensNew=0x8;
3)基元4的编程指令参数:
解析启动参数:ParMkey = 0x11;
解析执行参数:ParExe.DL=0x40,ParExe.OL1.Offset=0, ParExe.OL1.Lens=0x10,
ParExe.OL2.Offset=0x10, ParExe.OL2.Lens=0x10,
解析级联参数:ParJump.ParEn=0; ParJump.Offset=0; ParJump.Lens=0;
输入目标数据流内容:7440BB9445787640BB9445778100000108004500000500010000ff11
000001020304050607082710271101f400000102030405...
基元输入的级联参数为:
Jump.OffsetIn=0x130;Key.OffsetIn=0xD8;MKey.LensIn=0x8;
步骤S6-1根据Key.OffsetIn和MKey.LensIn提取的数据流特征值为MData=0x11;
步骤S6-2计算的关键词提取信息如下:
ParKey1.Offset = Jump.OffsetIn + ParExec.OL1.Offset = 0x130;
ParKey1.Lens = ParExec.OL1.Lens=0x10;
ParKey2.Offset = Jump.OffsetIn + ParExec.OL2.Offset=0x140;
ParKey2.Lens = ParExec.OL2.Lens=0x10;
步骤S6-3根据步骤S6-2中计算的位置信息,从数据流中提取的关键词如下:
ParKey1=0x2710;ParKey2=0x2711;
步骤S6-4根据解析指令进行解析级联参数处理,由于ParJump.ParserEns=0,故整个硬件解析处理完成。
步骤S6-5输出的解析结果如下:
ParKey1=0x11,ParKey2=0x01020304;ParKey3=0x05060708;ParKey4=0x2710;ParKey5=0x2711;
至此,针对目标数据流的五元组解析完成。
与前述一种面向可编程交换的硬件解析器实现方法的实施例相对应,本发明还提供了一种面向可编程交换的硬件解析器实现装置的实施例。
参见图12,本发明实施例提供的一种面向可编程交换的硬件解析器实现装置,包括存储器和一个或多个处理器,存储器中存储有可执行代码,所述一个或多个处理器执行所述可执行代码时,用于实现上述实施例中的一种面向可编程交换的硬件解析器实现方法。
本发明一种面向可编程交换的硬件解析器实现装置的实施例可以应用在任意具备数据处理能力的设备上,该任意具备数据处理能力的设备可以为诸如计算机等设备或装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在任意具备数据处理能力的设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图12所示,为本发明一种面向可编程交换的硬件解析器实现装置所在任意具备数据处理能力的设备的一种硬件结构图,除了图12所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的任意具备数据处理能力的设备通常根据该任意具备数据处理能力的设备的实际功能,还可以包括其他硬件,对此不再赘述。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本发明实施例还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例中的一种面向可编程交换的硬件解析器实现方法。
所述计算机可读存储介质可以是前述任一实施例所述的任意具备数据处理能力的设备的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是任意具备数据处理能力的设备的外部存储设备,例如所述设备上配备的插接式硬盘、智能存储卡(Smart Media Card,SMC)、SD卡、闪存卡(Flash Card)等。进一步的,所述计算机可读存储介质还可以既包括任意具备数据处理能力的设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述任意具备数据处理能力的设备所需的其他程序和数据,还可以用于暂时地存储已经输出或者将要输出的数据。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的范围。
Claims (10)
1.一种面向可编程交换的硬件解析器,包括指令数据接口、指令译码单元、阵列启动器和解析基元阵列,其特征在于:
所述指令数据接口,用于获取编程指令和输出解析器排错数据;
所述指令译码单元,用于编程指令的译码;
所述阵列启动器,用于对目标解析数据流的初次解析处理;
所述解析基元阵列,包括解析基元矩阵和解析基元级联选择器,解析基元矩阵以列为单位,列与列之间通过基元级联选择器进行互联,解析基元矩阵的任意两列解析基元之间均有一个解析基元级联选择器,解析基元矩阵中同一列的解析基元中同一时刻只有一个解析基元被启动进行解析处理,解析基元是可编程的硬件基本单元;解析基元级联选择器用于选择并输出启动处理的解析基元的解析结果和解析级联状态信息到下一列解析基元。
2.根据权利要求1所述的一种面向可编程交换的硬件解析器,其特征在于:所述解析基元,包括解析指令处理单元、解析处理单元、解析结果寄存器、特征值寄存器、解析指令寄存器、级联状态寄存器、解析基元启动器和解析级联控制器,解析基元通过指令处理单元提取基元编程指令并分类,更新自身的特征值寄存器、解析指令寄存器和级联状态寄存器,解析基元启动器根据特征值寄存器以及上一级解析基元输入的解析结果和级联状态信息,判断本级解析基元是否满足解析的条件,若满足解析条件,解析处理单元根据解析指令寄存器中的基元解析指令进行解析处理,否则不进行解析,级联状态寄存器用于存储级联状态信息,解析完成后,将解析结果保存至解析结果寄存器,解析级联控制器将解析结果与级联状态一起输出至下一级解析基元。
3.根据权利要求2所述的一种面向可编程交换的硬件解析器,其特征在于:编程后的解析基元,根据解析指令寄存器中的启动参数,对目标数据流进行解析,解析基元启动器根据上一级解析基元输入的特征值与级联状态参数信息,计算并提取目标数据流的特征值参数信息,将从数据流中提取的特征值与特征值寄存器的内容进行比较,若两者相同,则给出匹配指示,通知解析处理单元开始解析,解析处理单元收到启动解析的指示后,根据解析指令寄存中的基元解析指令,执行解析操作,解析结果寄存器中存储的是解析操作提取的关键词内容信息,级联状态寄存器中存储了一组级联指示信息,待解析处理单元完成解析之后,解析级联控制器将最终的解析结果与级联状态信息同步进行输出,输出的信息在基元级联选择器中进行选择,选出有效的解析基元处理结果并根据级联窗台信息输出给下一级解析基元。
4.根据权利要求2所述的一种面向可编程交换的硬件解析器,其特征在于:所述基元解析指令指定了具体的解析参数,包括本级的解析域比特长度范围、解析关键词在解析域范围内的比特偏移量和比特长度。
5.根据权利要求3所述的一种面向可编程交换的硬件解析器,其特征在于:所述级联指示信息包括是否与下一级解析基元进行级联,以及与下一级基元级联时,下一级基元的匹配特征值的偏移量。
6.根据权利要求1所述的一种面向可编程交换的硬件解析器,其特征在于:所述编程指令,包括指令操作码、解析基元位号、基元解析指令,指令操作码用于确定编程指令的类型,指令类型包括阵列控制类型、基元解析类型和排错类型,排错类型用于硬件调试;解析基元位号用于确定编程指令的目标解析基元的位置,通过解析基元位号选择基元阵列中的目标解析基元进行编程;基元解析指令是解析基元可执行的基元编程指令。
7.根据权利要求6所述的一种面向可编程交换的硬件解析器,其特征在于:所述基元解析指令,包括解析启动参数、解析执行参数和解析级联参数,解析启动参数用于识别目标数据流特征值,解析执行参数用于确定基元进行解析处理的启动条件,当目标数据流提取的特征值与解析启动参数匹配时,满足基元进行解析处理的条件,解析级联参数用于确定是否终止当前解析基元,及进行下一级解析基元的确定;
所述解析执行参数,包括一个数据解析域长度参数和一组解析关键词参数,数据解析域长度参数,用于确定解析基元所面向的目标数据流的数据解析域的比特长度范围,数据解析域长度参数限定了解析关键词参数的范围,解析关键词参数包括解析关键词位置和解析关键词长度参数对,用于确定解析关键词的位置和长度信息;
解析级联参数包括基元级联使能参数和基元级联特征值参数,基元级联使能参数用于确定硬件解析逻辑是否终止于当前解析基元,若基元级联使能参数无效,则硬件解析处理在当前基元解析完成后终止;若基元级联使能参数有效,则表示硬件解析逻辑还未完成,需下一级解析基元继续进行解析;基元级联特征值参数包括基元启动解析特征值位置和基元启动解析特征值长度,分别用于确定下一级基元启动解析的特征值的位置和长度信息。
8.根据权利要求1所述的一种面向可编程交换的硬件解析器,其特征在于:所述阵列启动器,包括依次连接的数据流解析关键词位置计算单元、数据流解析关键词提取单元、基元解析级联状态处理单元和基元解析结果处理单元;
所述数据流解析关键词位置计算单元,用于解析执行参数的解析关键词参数,计算数据流解析关键词的位置;
所述数据流解析关键词提取单元,用于提取关键词个数和大小;
所述基元解析级联状态处理单元,根据解析级联参数,得到下一级解析基元的解析特征值参数;
所述基元解析结果处理单元,用于处理解析结果,包含解析关键词和解析级联参数,将关键词个数和大小,与下一级解析基元的解析特征值参数合并输出至下一级解析基元。
9.一种面向可编程交换的硬件解析器实现方法,其特征在于包括如下步骤:
步骤S1,定义解析基元,解析基元获取上一级解析基元的解析结果和级联状态,并将本级解析基元的解析结果和级联状态直接输出,或输出至下一级解析基元;
步骤S2,定义基元解析指令格式,用于解析基元的启动、执行和级联;
步骤S3:定义硬件解析器的编程指令格式,根据编程指令格式,进行阵列启动器的启动、解析基元的解析和调试;
步骤S4:定义解析基元阵列,确定基元阵列的行列参数,基元阵列的行数用于确定解析器能够支持的并发解析基元数,基元阵列的列数用于确定解析器能够支持的最大级联解析基元数,一个解析基元能够完成软件所定义的一个逻辑节点的解析过程;
步骤S5:阵列启动器中解析基元的处理,根据基元解析指令,对目标数据流进行解析,并将解析结果与下一级所需级联参数合并输出至下一级解析基元;
步骤S6:基元阵列中解析基元的处理,根据上一级级联参数,从目标数据流中提取匹配特征值,用于判断是否进行解析;根据上一级级联参数和基元解析指令,进行目标数据流关键词位置计算;通过得到关键词位置提取关键词;根据基元解析指令,生成新的级联参数;根据提取的关键词和新的级联参数,与目标数据流一起输出至下一级解析基元。
10.根据权利要求9所述的一种面向可编程交换的硬件解析器实现方法,其特征在于:
所述步骤S1中,解析基元根据为其配置的基元编程指令进行指令解析,提取基元编程指令参数并分类,根据类别分别更新本级解析基元的特征值、基元解析指令和级联状态,根据上一级解析基元的解析结果和级联状态,提取目标数据流的特征值,将目标数据流的特征值与本级解析基元的特征值进行匹配,若匹配,则根据基元解析指令进行解析处理,否则不解析,将解析结果根据级联状态输出;
解析指令包括解析处理的执行参数,执行参数包括本级解析基元面向的目标数据流的解析域长度范围、解析关键词的个数、位置和长度;
所述步骤S2中,基元解析指令格式包括基元解析指令包含基元解析启动参数、基元解析执行参数、基元解析级联参数,基元解析启动参数对应解析特征值,根据上一级解析基元输入的级联参数,提取目标数据流的特征值,当提取的目标数据流特征值与基元解析启动参数匹配时,启动基元解析;基元解析执行参数包括一个数据解析域长度参数和一组解析关键词参数,数据解析域长度参数用于确定目标数据流中基元解析域的范围,对应待解析目标数据流的比特长度,解析关键词参数的数目用于确定一个解析基元的解析能力,对应解析基元提取关键词的能力,解析关键词参数用于确定解析关键词在目标数据流中的位置参数和长度参数;基元解析级联参数包括基元级联使能参数和基元级联特征值参数,基元级联使能参数用于确定本级解析基元是否需要与下一个解析基元进行级联解析,基元级联特征值参数用于确定下一级解析基元所面向的目标解析数据流的匹配特征值参数;
基元级联特征值参数包括基元启动解析特征值位置和基元启动解析特征值长度,分别用于确定下一级基元启动解析的特征值的位置和长度信息;
所述步骤S3中,解析器编程指令包括指令操作码、编程解析基元位号、基元解析指令,指令操作码用于确定当前编程指令的处理类型,若操作码指示指令类型为阵列控制类型,则基元解析指令用于编程阵列启动器,若指令操作码类型为基元解析类型,则根据基元解析指令对解析基元进行编程配置,若操作码类型为排错类型,则根据编程解析基元位号对解析基元进行调试;
阵列控制类型的编程指令,用于设置基元解析阵列的启动参数,包括目标数据流的初次匹配特征值位置和长度参数;
基元解析类型的编程指令,用于对硬件解析基元进行编程配置,以完成对应的解析逻辑;
排错类型的编程指令,用于硬件调试,读取硬件解析基元中的寄存器状态和指令编程信息;
编程解析基元位号,用于确定当前编程指令的编程目标基元的位置信息,对应基元阵列中的解析基元的位置,通过编程解析基元位号寻址到需要编程的解析基元;
基元解析指令,包括硬件基元执行解析处理的完整解析参数;
所述步骤S5中,根据基元解析执行参数的解析关键词参数,计算目标数据流解析关键词的位置;根据解析的关键词位置,提取关键词个数和大小;根据解析级联参数,得到下一级解析基元的解析特征值参数;将关键词个数和大小,与下一级解析基元的解析特征值参数合并输出至下一级解析基元;
所述步骤S6中,上一级解析基元输出的级联参数,包括级联偏移量、级联长度、特征值偏移量和特征值长度,其中将数据解析域长度参数作为级联偏移量,将基元级联特征值参数中基元启动解析的特征值的位置和长度,作为特征值偏移量和特征值长度,包括如下步骤:
步骤S6-1:数据流特征值提取,根据上一级级联参数的特征值偏移量和特征值长度,从目标数据流中提取出匹配特征值的内容;
步骤S6-2:数据流关键词位置计算,根据上一级级联参数的级联偏移量和基元解析指令中解析执行参数的解析关键词参数,计算出解析关键词的位置偏移量和长度,位置偏移量为解析关键词参数中基元启动解析的特征值的长度信息与级联偏移量之和,解析关键词的长度为解析关键词参数中基元启动解析的特征值的长度信息;
步骤S6-3:数据流关键词提取,根据解析关键词的位置偏移量和解析关键词的长度,对目标数据流中解析关键词进行提取,提取的关键词的个数取决于基元解析指令中解析执行参数的解析关键词参数个数;
步骤S6-4:基元解析级联状态处理,生成新的解析级联状态参数,根据基元解析指令中基元级联参数和级联偏移量,生成新的解析级联参数,新的解析级联参数包括新的级联偏移量、新的级联长度、新的特征值偏移量和新的特征值长度;新的级联偏移量是级联偏移量与数据解析员长度参数之和,新的解析级联参数用于下一级解析基元进行级联解析;
步骤S6-5:基元解析结果处理,将提取的关键词和新的级联参数与目标数据流一起输出至下一级解析基元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210738234.0A CN114816434B (zh) | 2022-06-28 | 2022-06-28 | 一种面向可编程交换的硬件解析器及解析器实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210738234.0A CN114816434B (zh) | 2022-06-28 | 2022-06-28 | 一种面向可编程交换的硬件解析器及解析器实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114816434A true CN114816434A (zh) | 2022-07-29 |
CN114816434B CN114816434B (zh) | 2022-10-04 |
Family
ID=82522694
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210738234.0A Active CN114816434B (zh) | 2022-06-28 | 2022-06-28 | 一种面向可编程交换的硬件解析器及解析器实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114816434B (zh) |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1759393A (zh) * | 2003-01-09 | 2006-04-12 | 思科***公司 | 一种将专用搜索寄存器和专用状态机寄存器与相关执行硬件集成以支持规则集合对数据的快速应用的可编程处理器装置 |
CN101072350A (zh) * | 2006-06-08 | 2007-11-14 | 威盛电子股份有限公司 | 译码***及其译码方法 |
US20070296613A1 (en) * | 2006-06-08 | 2007-12-27 | Via Technologies, Inc. | Decoding Control of Computational Core of Programmable Graphics Processing Unit |
US20120195208A1 (en) * | 2011-01-31 | 2012-08-02 | International Business Machines Corporation | Programmable multifield parser packet |
CN106961445A (zh) * | 2017-04-28 | 2017-07-18 | 中国人民解放军信息工程大学 | 基于fpga硬件并行流水线的报文解析方法及其装置 |
EP3293981A1 (en) * | 2016-09-08 | 2018-03-14 | Koninklijke KPN N.V. | Partial video decoding method, device and system |
US20180357051A1 (en) * | 2017-06-13 | 2018-12-13 | Microsoft Technology Licensing, Llc | Model binding for command line parsers |
CN110580175A (zh) * | 2018-06-08 | 2019-12-17 | 英特尔公司 | 可变格式、可变稀疏矩阵乘法指令 |
CN112131161A (zh) * | 2020-09-14 | 2020-12-25 | 山东产研集成电路产业研究院有限公司 | 一种Binary协议数据流的硬件解析方法 |
CN113168372A (zh) * | 2019-01-10 | 2021-07-23 | 阿里巴巴集团控股有限公司 | 使用可编程逻辑器件(pld)来提供数据库加速的***和方法 |
CN113377373A (zh) * | 2021-06-23 | 2021-09-10 | 深圳平安智汇企业信息管理有限公司 | 基于解析引擎的页面加载方法、装置、计算机设备及介质 |
CN114610288A (zh) * | 2022-05-12 | 2022-06-10 | 之江实验室 | 基于阵列式解析基元结构的后端编译器实现方法及装置 |
-
2022
- 2022-06-28 CN CN202210738234.0A patent/CN114816434B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1759393A (zh) * | 2003-01-09 | 2006-04-12 | 思科***公司 | 一种将专用搜索寄存器和专用状态机寄存器与相关执行硬件集成以支持规则集合对数据的快速应用的可编程处理器装置 |
CN101072350A (zh) * | 2006-06-08 | 2007-11-14 | 威盛电子股份有限公司 | 译码***及其译码方法 |
US20070296613A1 (en) * | 2006-06-08 | 2007-12-27 | Via Technologies, Inc. | Decoding Control of Computational Core of Programmable Graphics Processing Unit |
US20120195208A1 (en) * | 2011-01-31 | 2012-08-02 | International Business Machines Corporation | Programmable multifield parser packet |
EP3293981A1 (en) * | 2016-09-08 | 2018-03-14 | Koninklijke KPN N.V. | Partial video decoding method, device and system |
CN106961445A (zh) * | 2017-04-28 | 2017-07-18 | 中国人民解放军信息工程大学 | 基于fpga硬件并行流水线的报文解析方法及其装置 |
US20180357051A1 (en) * | 2017-06-13 | 2018-12-13 | Microsoft Technology Licensing, Llc | Model binding for command line parsers |
CN110580175A (zh) * | 2018-06-08 | 2019-12-17 | 英特尔公司 | 可变格式、可变稀疏矩阵乘法指令 |
CN113168372A (zh) * | 2019-01-10 | 2021-07-23 | 阿里巴巴集团控股有限公司 | 使用可编程逻辑器件(pld)来提供数据库加速的***和方法 |
CN112131161A (zh) * | 2020-09-14 | 2020-12-25 | 山东产研集成电路产业研究院有限公司 | 一种Binary协议数据流的硬件解析方法 |
CN113377373A (zh) * | 2021-06-23 | 2021-09-10 | 深圳平安智汇企业信息管理有限公司 | 基于解析引擎的页面加载方法、装置、计算机设备及介质 |
CN114610288A (zh) * | 2022-05-12 | 2022-06-10 | 之江实验室 | 基于阵列式解析基元结构的后端编译器实现方法及装置 |
Non-Patent Citations (1)
Title |
---|
蔡仑等: "基于EXIT图的PCGC码子码校验矩阵研究及仿真分析", 《***仿真学报》 * |
Also Published As
Publication number | Publication date |
---|---|
CN114816434B (zh) | 2022-10-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11604687B2 (en) | Programmable device, hierarchical parallel machines, and methods for providing state information | |
US10089086B2 (en) | Method and apparatus for compiling regular expressions | |
US11488378B2 (en) | Analyzing data using a hierarchical structure | |
US8726256B2 (en) | Unrolling quantifications to control in-degree and/or out-degree of automaton | |
EP2668574B1 (en) | Utilizing special purpose elements to implement a fsm | |
US9104828B2 (en) | State grouping for element utilization | |
US20120011404A1 (en) | Method and system of a processor-agnostic encoded debug-architecture in a pipelined environment | |
CN114610288B (zh) | 基于阵列式解析基元结构的后端编译器实现方法及装置 | |
CN115576293A (zh) | 基于数据监控的压敏胶在线生产分析方法及*** | |
CN114816434B (zh) | 一种面向可编程交换的硬件解析器及解析器实现方法 | |
Cedersjö et al. | Toward efficient execution of dataflow actors | |
CN111580821A (zh) | 脚本绑定方法、装置、电子设备及计算机可读存储介质 | |
CN107180193B (zh) | 一种将程序代码转换成数据约束的方法和装置 | |
CN114124106B (zh) | 一种lz4解压缩方法、***、存储介质及设备 | |
CN113051173B (zh) | 测试流程的编排执行方法、装置、计算机设备和存储介质 | |
CN111399852B (zh) | 一种基于dsp处理器特点的指令集静态反汇编方法 | |
CN115185524A (zh) | 向量指令的识别方法、装置、电子设备及计算机可读存储介质 | |
KR20190111348A (ko) | 기계학습 기반의 fpga 비트스트림 역공학 방법 및 장치 | |
CN114514506A (zh) | 深度学习框架的调整方法、装置、服务器及存储介质 | |
CN113837272B (zh) | 一种自动驾驶长尾数据增强方法 | |
US20240037429A1 (en) | Common parser-deparser for libraries of packet-processing programs | |
CN118069494A (zh) | 异构代码调试方法、装置、电子设备及存储介质 | |
CN114492728A (zh) | 基于图像数据y分量的处理方法、装置、设备及存储介质 | |
CN117234934A (zh) | 自动化测试方法、装置、计算机设备和存储介质 | |
CN117008919A (zh) | 仿真模型文件的解析方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |