用编译器生成的句法树进行比特流解码的系统和方法与流程

文档序号:15818908发布日期:2018-11-02 22:54阅读:326来源:国知局
用编译器生成的句法树进行比特流解码的系统和方法与流程

本申请要求2017年4月24日提交的并且标题分别为“serialbitstreamdecodingwithcompiler-generatedabstractsyntaxtree”和“methodforinterpretingphysicallayersignalingforbitstreamgenerationusingcompilergeneratedabstractsyntaxtreeexecution”的美国临时申请序列号62/489301和62/489326的利益,这些申请均通过引用并入本文,如同整体被复制一样。

背景技术

在网络通信内,通过物理介质接收的任何数据必须首先从物理层中的其线路编码被解码,然后基于数据链路层和网络层中的其特定网络协议被进一步解码,以输出经适当转换的比特流用于在更高级别的层(诸如传输层,会话层或应用层)中使用。到目前为止,这种解码过程已经在测试和测量仪器上被实现为协议解码器,该协议解码器针对仪器所遇到的每种协议类型被专门编写。

然而,在编写协议解码器时使用常规图灵完整语言(诸如c或python)是耗时且容易出错的。利用协议描述语言中的正则表达式来解决问题的先前尝试已经遇到困难。例如,一些协议规范太复杂而无法在常规声明性语言中表达。另外,常规声明性语言的语法可能不足以描述所有必要的协议规范,诸如初始数据包成帧步骤。由于这些原因,针对物理信号和比特流的解码通常被限制到一系列类似网络协议组,诸如以太网业务。同样,协议分析器针对特定协议被设计和译码,这限制了它们跨各种到来信号灵活地操作的能力。

附图说明

图1是根据本发明实施例的示例测试和测量系统的框图。

图2是根据本发明实施例的使用基于协议声明编译的句法树把物理输入信号转换成打包比特流的示例方法的框图。

图3是根据本发明实施例的具有三个阶段的示例句法树解码过程的框图。

图4是根据本发明实施例的时间绘图,该时间绘图示出了使用来自协议声明的不同比特流定义在示例句法树解码过程的第一阶段中把物理输入信号转换为原始比特流。

图5是根据本发明实施例的示例句法树解码过程的图,其中基于lin协议的协议声明在事件发现和字段映射阶段期间被用于提取数据包成帧和字段数据。

图6是根据本发明实施例的示例句法树解码过程的图,其中基于i2c协议的协议声明被用于把多个物理输入信号转换为成帧数据包比特流数据。

图7是根据本发明实施例的示例处理和数据流的框图。

具体实施方式

本描述公开了例如使用编译器生成的句法树(诸如抽象句法树)来解码具有任意通信或网络协议的物理信号的系统和方法。在测试和测量系统内,特定于域的声明性语言可以使用声明性语言定义来以文本方式指定串行、网络和/或通信协议的特性。当执行以声明性语言编写的协议声明时,处理器基于以文本方式指定的比特流、事件和字段定义将协议声明解析成句法树。该句法树本身可以用作状态机以把采样数据的物理输入信号变换为特定于协议的输出比特流以在更高级别的层(诸如传输层、会话层或应用层)中使用。句法树中的节点可以是或可以充当可重复使用的状态机部件,以便可以多次迭代句法树。

与需要以易出错并且需要许多调试的高级命令性编程语言来编写完整协议解码器程序的常规系统中不同,本公开的声明性语言使用具有许多不同协议之间的基本结构共性的简化元素来实现定义和评估协议声明。在现有系统具有代码崩溃和存储器问题的情况下,本文公开的最小声明性语言集允许在具有安全性和效率两者情况下进行任意物理层比特流评估,因为协议声明作者可能无法直接访问存储器或存储器分配调用。因此,由于对声明性语言的这些限制,协议声明作者可能被阻止编写不安全的定制比特流定义。

基于可能包括比特流、事件和字段定义的以文本方式指定的协议声明,解析器把句法树的状态机部件组装成解码器或特定于协议的解码机。类似于语言解释器,该解码器可以通过如下方式进行执行:在句法树的每个节点评估输入数据,包括把在物理信号中识别的边缘收集到边缘数据集中以转换为原始比特流,如在下面更详细讨论的。句法树执行也可以输出成帧数据包的集合,所述成帧数据包具有描述适当的输入协议传输的字段。因此,使用简单的定义集,声明性语言可以是高度灵活的并且可以用于解码广泛的串行协议。

声明性语言可以例如使用以下元素中的任何或全部来以文本方式指定协议声明,这些元素将在下面进一步详细讨论:

(1)比特流定义;

(2)事件定义;

(3)复杂事件定义;

(4)事件时间包含/排除标志;

(5)范围化if子句;

(6)任意比特填充规则定义;

(7)在数据包定义的任意区段内的范围化区域;

(8)字段匹配规则;

(9)字段限定符规则;

(10)字段嵌套和分组;

(11)字段属性;

(12)字段动作定义;

(13)任意crc多项式定义;和

(14)错误和crc字段序列定义。

示例实施例使用上面的示例元素、其他可能的元素和产生的句法树来组合声明性语言的几个独特属性,以提供可应用于解码任意串行、网络或通信协议的一定程度的一般化。以声明性语言译码的定义使得通信硬件能够转换或解码物理信号及其编码数据,而不管特定的嵌入式协议如何,嵌入式协议可以包括例如标准和/或定制线路代码编码(如nrz,曼彻斯特)以及数据链路协议(例如,以太网、点到点(ppp)、高级别数据链路控制(hdlc)、高级数据通信控制程序(adccp))。

如上所述,协议声明可以包括比特流定义、事件定义和字段定义。比特流定义定义了如何把模拟或物理输入信号转换成由1和0组成的二进制比特流序列。事件定义定义了如何检测或创建数据包帧边界。最后,字段定义定义了如何把比特流值映射或匹配到数据包中,数据包包括例如报头、页脚、属性、特性、动作、标记、错误处理等。

具体而言,本公开的声明性语言可以使用范围受限的、特定于域的语法来定义模拟物理层信号到比特流序列的转换。例如,模拟信号可以由测试探针获取。该经转换的比特流序列然后可以用于附加的协议解析。通过这种方式,协议声明作者不需要是程序员,而是可以只学习相对较小的语言元素集。用于转换物理输入信号的新的比特流定义可以在不修改底层运行时间引擎的情况下被创建,这使得这些比特流定义和能力能够在无需修改设备或仪器固件的情况下被部署,如在常规系统中必要的那样。

声明性语言支持一般化表达式评估和变量声明和赋值,因此允许对输入进行任意数学和布尔运算。此外,表达式评估例如允许诸如布尔型、整型、浮点型和当前边缘值之类的数据类型。

图1图示了示例测试和测量系统10,包括处理器14和用于存储声明性语言定义的存储器16。测试和测量系统10具有输入端子18,用于通过物理介质输入线路20接收物理信号。物理信号可以使用任何已知的物理介质(诸如例如电压、射频或红外光)来进行传输。测试和测量系统10还可以包括用户接口22,用户接口22可以是系统10的组成部分(如所示的)或位于系统10外部。在处理器14内或耦合到处理器14的解析器40使用声明性语言定义来编译句法树,所述声明性语言定义由协议声明作者译码并存储在存储器16中。如本领域技术人员将理解的,解析器40可以包括编译器和/或词法分析器,或者替代地可以是编译器和/或词法分析器而不是解析器。处理器14然后对在输入端子18处进入系统10中的物理输入信号执行句法树。句法树的执行使用协议声明的定义以把输入端子18处的数据转换成比特流,该比特流可以在测试和测量系统10中被进一步处理或通过输出线路24被输出。

图2图示处理器14如何使用解析器40执行存储在存储器16中的协议声明30,以基于用声明性语言编写的任何比特流定义102、事件定义202和字段定义302来编译或构造句法树60。处理器14(图1)使用句法树60来评估物理输入信号50并输出比特流70。

图3图示使用声明性语言编写的协议声明可以如何被处理器14用来解码物理输入信号50。该过程包括与利用句法树60进行解码的阶段相对应的三个主要元素:(1)开端阶段100,在该阶段,开端定义物理输入信号50的数量以及如何使用协议声明30中的比特流定义102将它们变换为原始比特流70(图2);(2)事件发现阶段200,在该阶段,规则定义如何使用协议声明30中的事件定义202在比特流内发现数据包帧的开始和结束,以输出成帧的比特流数据80;和(3)字段映射阶段300,在该阶段,字段结构在用于生成数据包90的特定数据包类型中使用协议声明30中的字段定义302被定义。

参照图2-3,在开端阶段100中,处理器14和/或解析器40编译句法树60并且使用协议声明30内的比特流定义102把(一个或多个)物理输入信号50变换为原始比特流70。比特流定义102可以指定用于把模拟信号转换为由0和1组成的二进制比特序列的标准物理层方案。在一些实施例中,可以使用定制和/或特定于域的声明性语言来编写比特流定义102,该定制和/或特定于域的声明性语言可以向所传输的数据添加安全性。然而,在其他实施例中,可以使用标准线路代码编码协议编写该比特流定义102,标准线路代码编码协议可以存储在线路代码编码库中。标准线路代码编码协议可以用标准图灵完整编程语言(诸如例如c)来编写。

当处理器14在开端阶段100期间执行句法树60时,准备物理输入信号50以用于通过把物理输入信号50转换成原始比特流70来进行数据包解码。处理器14基于协议声明30的比特流定义102使用句法树60的节点把物理输入信号50转换为原始比特流表示或值。处理器14可以通过直接调用协议声明中30内的预定义的比特流定义102来执行该比特流转换。

在开端阶段100期间,在一些实施例中,处理器14还可以对物理输入数据实施附加计算以及检查任意设置的状态以用于后面的基于逻辑的决定。在开端阶段100中标准表达式评估和变量赋值被支持作为中间计算以用于后面阶段的事件检测和字段映射操作中。

在事件发现阶段200中,句法树60利用协议声明中30中的事件定义202来发现比特流70内数据包帧的开始和结束,并输出成帧比特流数据80。

在字段映射阶段300中,句法树60利用协议声明30中的字段定义302来定义成帧比特流数据80中每个帧内的各个字段中的每一个并输出数据包比特流数据90。

图4在时间绘图上进一步图示在图3的开端阶段100期间协议声明30内的各个比特流定义102可以如何被用来把物理输入信号450转换成不同的比特流470a-c。使用在图4中时间绘图的区段1000中的特定的单个物理输入信号450,处理器14使用区段1100的比特流定义基于不归零制(nrz)的线路代码编码来把物理输入信号450转换成比特流470a。在协议声明30内,区段1100的比特流定义可以编写为:

其中“a”表示包含比特流转换函数的结果的变量,“nrz()”是存储在存储器中的预定义函数,而“data”是表示物理输入信号450的采样数据的变量。如图4中所示,区段1000的物理输入信号450与区段1100中的比特流470a重叠,比特流470a示出了与规则时间间隔对齐的边缘,在该间隔处基于在区段1100的比特流定义下的物理输入信号450的值来评估物理输入信号450。

类似地,在区段1200中,处理器14基于区段1200的比特流定义输出与区段1000的相同物理输入信号450不同的比特流470b,区段1200的比特流定义可以编写为:

其中“a”再次表示基于如下内容计算的比特值的序列:用于解码不归零标记编码的预定义函数nrzm()以及针对给定的“data”或物理输入信号450如何求解该函数,如上所述的,nrzm()可以被预定义并存储为线路代码编码库的一部分。如图4中所示,区段1000的物理输入信号450与区段1200中的比特流470b重叠,比特流470b示出以规则时间间隔为中心的边缘,在该间隔期间物理输入信号450基于它在区段1200的比特流定义下从低到高转变还是从高到低转变而被评估。

区段1100和1200的比特流定义图示了比特流定义102可以基于标准线路代码编码协议,标准线路代码编码协议可以被引用并存储在线路代码编码库中,并且不同的比特流定义102将导致不同的比特流470a-c。替代地,比特流定义102可以针对特定域被定制,这可以增加传输数据的安全性。

可以使用声明性语言句法的子集来定义定制比特流定义102。只使用这个子集,可以定义物理输入信号50到比特流70(即,物理层到数据链路层)解释的规则。定制比特流定义102可被编译成句法树60。处理器14然后对(一个或多个)物理输入信号50执行句法树60以生成比特流输出70。用于定制比特流函数的语法的子集可以包括变量声明、变量递增/递减运算符、赋值语句、静态映射定义、范围化if子句和yield语句。

导致处理器14把物理输入信号450评估为比特流470c的区段1300的比特流定义是使用声明性语言编写的这种定制比特流定义的示例。区段1300的定制比特流定义可以在协议声明30本身中被定义或仅在协议声明30中被引用并存储在别处。例如,如果在协议声明30内被引用,则区段1300的比特流定义可以例如被以类似于区段1100和1200的比特流定义的方式被编写为引用预定义函数的公式:

bitstreama=getbits(data);

其中“a”是表示转换的比特流数据的变量,“getbits()”是任何用户定义的函数,并且“data”是区段1000的物理输入信号450。作为另一示例,区段1300的用户定义的定制比特流定义可以直接在协议声明30内并基于sent总线协议被定义为:

其中物理输入信号450的边缘的时钟时间被发现并基于各时间之间的差的不同宽度(即,“pw”,“datawidth”)被评估。如图4中所示,边缘数据集包括围绕物理输入信号450的0值的边缘(使用“isfall=data==0”发现),根据sent协议,所述边缘分开标准宽度(即“6ut”)。从下降边缘之间的时间差(即,“pw”,第一个pw在图4中示出为0.08ms)减去标准“zerowidth”(即,图4中的0.04ms)以给出“datawidth”值。然后以“ut”作为除数来评估“datawidth”值(例如0.08ms-0.04ms=0.04ms)(例如,0.04ms/0.00ms=12)以给出整数“nibble”值(例如,12在二进制中是1100)。因此,如图4中所示,基于区段1000的物理输入信号450的前两个下降边缘之间的时间长度,比特流470c的前四个比特值(即,“nibble”)为“1100”。

换句话说,运行时间引擎将区段1300的定制比特流定义视为具有数据流序列中的状态的迭代器。首先,如图4中所示,阈值/滞后被应用于区段1000的物理输入信号450,以创建抽象边缘集。边缘数据集中的边缘定义可以包括上升/下降的指示(例如,“isfall=data==0”)和时间戳。然后可以遍及抽象句法树60的节点来每次一个边缘地迭代边缘数据集,所述抽象句法树60的节点基于区段1300的定制比特流定义。区段1300的定制比特流定义可以使用静态变量声明(例如,“doublestart=0.0”,“start=pintime(data)”)来维持状态并通过评估识别的边缘同时在每个迭代处更新值而不是重置到初始声明值来遍及物理输入信号450进行迭代。变量声明可以按照类似于c编程语言中的静态关键字的方式被自动定义为静态的,在静态关键字情况下,变量声明仅可以具有在第一次调用时设置的值。处理器14对区段1300的定制比特流定义的每个后续迭代调用可以导致变量维持其先前值而不是重置变量声明值。处理器14使用比特流定义102来评估赋值、变量和表达式,然后针对边缘数据集中的任何给定迭代器位置返回零或更多比特。具体而言,yield语句(即“yield()”)可允许协议声明作者为给定边缘迭代返回零或更多比特。可以使用包含一个对的元组来返回一个或多个比特,所述一个对包含时间戳和逻辑比特值(例如,“[start,bit0]”,“[t1,bit1]”)。在运行时间执行期间,句法树60的yield节点基于yield语句将逻辑比特值推送到解析情境对象上。然后函数节点遍及区段1300的定制比特流定义的语句针对每个输入边缘进行迭代,并且在yield节点返回时将比特值从分析情境对象弹出。

比特流评估可以基于区段1000的物理输入信号450内的当前状态条件而发生分支。协议声明30内使用的声明性语言可以包括范围化if-else子句用于支持这种分支。例如,区段1300的定制比特流定义可以包括示例if子句:

其中布尔值“isfall”和“pw”的比较表示条件分支,如果符合,则条件分支允许访问内部代码的yield语句。

另外,声明性语言可以提供一种句法,该句法用于针对遍及句法树60的节点的每个迭代在当前位置处提取时间戳和边缘值,所述句法树60的节点根据区段1300的定制比特流定义而创建。该信息可用于计算给定边缘输入的比特值。例如,区段1300的定制比特流定义可以包括如下赋值:

其中基于“ut”的环境变量和“data”信号的值提取时间戳和边缘值。然后可以使用每个下降边缘之间(即,在边缘数据集中发现的第一和第三边缘之间)的距离来计算整数变量“nibble”,“nibble”的二进制形式用于给出四个比特值,如图4中所示的。因此,边缘值和时间戳数据(例如,“start”,“t1”,“bit0”)被提取并且与数据流中当前迭代位置相关。

此外,声明性语言还可以提供附加句法用于在从当前迭代位置的任意偏移处提取时间戳和边缘值。这允许评估区段1000的物理输入信号450内的边缘位置之间的定时差。运行时间环境强加约束用于确保任何偏移访问被限制到输入边缘集的实际边界。因为区段1300的定制比特流定义被局限在上边界和下边界之内,如下所述,所以该定义针对物理输入数据流的不落在该定义内的区域将返回或产生零个比特值,而不是导致代码错误。协议声明作者因此具有边界安全保证的优点,因为边缘迭代器不允许引用超出设置范围的数据值。例如,区段1300的定制比特流定义可以包括以下赋值和if子句条件:

其中低于“lowerwidthbound”或高于“upperwidthbound”的边缘(即“pw”)之间的任何定时差被忽略,因为该偏移将超出边缘数据集的边界。

因此,图4图示了可以如何使用声明性语言来编写区段1100-1300的不同比特流定义以用于把区段1000的相同物理输入信号450解码成产生的不同比特流470a-c。因此,测试和测量系统可以容易地被编程为基于协议声明的明确定义来解码任何物理输入信号和/或调用存储在库中的预定义函数。这样,物理输入信号50可以使用相同句法树60被适当地转换成比特流70,而不管其特定网络协议如何,比特流70将被用于随后的事件发现和字段映射阶段200和300或层(诸如数据链路、网络或传输层)中。

接下来,在解码的事件发现阶段200期间,处理器14使用句法树60的节点来扫描输入数据以基于协议声明30内的事件定义来发现给定数据包类型或协议的开始和结束事件,所述输入数据可以是开端阶段100的比特流输出70或(一个或多个)原始物理输入信号50。具体来说,协议声明30的事件定义202可以通过如下方式来指定数据包成帧边界的检测:使用值、模式、限定符和持续时间规范来评估模拟、边缘或比特状态。这些开始和结束事件是时间标记,该时间标记限定(gate)或指示(一个或多个)物理输入信号50和/或比特流70内的数据包帧。发现的任何成帧时间标记被传递到字段映射阶段300。

图5图示根据协议声明30的句法树60执行的解码阶段,所述协议声明30基于lin协议被编写。在开端阶段100期间,处理器14可以根据协议声明30对物理输入信号50执行句法树60,部分被编写为:

其中“settings”可以在用户接口上指示该协议将任何用户选择传递回运行时间引擎可能需要的可能设置,并且针对“a”的比特流定义使用“nrz()”函数产生比特流570。由于在针对“polarity”的设置中选择“normal”而非“invert”,所以创建并称为“invert”的布尔变量变为假,并且不使用“〜”按位补码运算符反转比特流“a”。

在开端阶段100之后,比特流570被传递到邻近的事件发现阶段200,其中开始和结束成帧时间标记由处理器14基于协议声明30内的事件定义202评估。例如,事件582的事件定义可以在协议声明30内被定义为:

其中处理器14在比特流“a”570内寻找10个比特,该10个比特形成九个0后跟一个1的序列。事件582的事件定义包括匹配规则(“a:10==0000000001b”)的示例,该示例可以用作具有值、图案、掩码-匹配和正则表达式定义的协议声明30的声明性语言的一部分。此外,以声明性语言编写的协议声明30内的事件时间包含/排除标志可以向用户提供用于指定如下内容的灵活性:在数据包字段评估期间处理器14是否应当包括与数据包开始事件的结束时间标记并行的数据比特,诸如,例如:

其中“=start”形式表示包括结束时间,并且“=(start]”形式表示排除结束时间。参见图5,事件582信号通知比特流“a”570内数据包帧580的开始。在表示事件582的这十个比特之后,处理器14将遵循句法树60进入字段映射阶段300以搜索与在协议声明30内定义的字段定义302匹配的二进制序列的数据包帧数据580。

具体来说,在字段映射阶段300中,处理器14把比特流值映射到从事件发现阶段200确定的成帧位置或数据包帧处的潜在数据包中。另外,处理器14映射帧内的相关字段,如在针对特定协议的协议声明30的字段定义302中定义的。处理器14通过将合格模式匹配集与比特流580的经转换的输入数据比特进行比较来实现该字段映射。这些模式匹配可以是简单的比特字段比较和/或使用正则表达式的复杂比较。处理器14然后使用这些合格的字段匹配来评估比特流590的限定(gated)或成帧区域,以确定哪些声明的数据包类型与输入数据的结构相匹配。

该字段定义302可包括与上面所述的事件定义202中相同的规则匹配特征。为了提高数据包组织和表示的灵活性,字段定义302可以与被进一步定义为具有几个模式和属性。图5的字段591和592的字段定义可以在协议声明30内被定义为:

其中8比特字节的开始被标记有比特值为0的居前位,并且字节的结束由比特值为1的随后比特标记。

为了更好的逻辑表示,字段可以被任意重新组合成新的“虚拟”字段。图5的字段593的字段定义可以在协议声明30内被定义为:

其中字段593由十个比特组成,该十个比特开始于一比特字段591,接着是具有比特序列01010101的八比特“synch”字段,并且以一比特字段592结束。字段593的字段定义说明了字段定义302可以如何包括嵌套在定义的字段内的其它字段。

图5的字段594的字段定义可以在协议声明30内被定义为:

其中字段594基于关系运算符“==”的真结果的重复可以具有0至15比特的长度。除了字段匹配规则并且与字段匹配规则相反,该字段定义302可以包括字段限定符规则,字段限定符规则允许固定或任意长度字段重复。字段594的字段定义包括字段限定符“{0,15}”的示例,其中“0”是固定字段594的最小字段长度,并且“15”是固定字段594的最大字段长度。固定字段限定符采用如下形式:(1)“{n}”,其中居前元素必须精确匹配n次,(2)“{n,m}”,其中居前元素必须至少匹配n次但不超过m次,或(3)“”,其中居前元素必须匹配仅一次,或不匹配。字段也可以被定义为具有任意比特宽度和/或长度,其可以使用如下形式:(1)“*”,其中居前元素必须匹配零次或更多次,(2)“+”,其中居前元素必须匹配一次或更多次,或者(3)“{n,}”,其中居前元素必须至少匹配n次。

图5的字段595的字段定义可以在协议声明30内被定义为:

其中字段595以零到十五比特字段594开始,接着是一比特字段591,然后是八比特“identifier”字段,并且结束于一比特字段592。字段595的字段定义包括在“identifier”字段的每个一比特字段中使用的字段属性的示例,其中“#exclude”标志允许在运行时间评估期间对结果进行后处理。对于期望在针对附加后处理步骤的字段映射期间被标记或附接到字段上的任何属性,“#”标志的其它变化是可能的。此外,字段595的字段定义内的“identifier”字段的字段定义是字段嵌套的示例。字段嵌套和分组允许在每个级别具有不同限定符规则的嵌套结构。最后,上面字段定义中的字段“p0”和“p1”包括数据验证,其中“identifier”字段内的4个字段被与“p0”和“p1”字段中的每一个进行比较,并比照“p0”和“p1”字段中的每一个针对偶数或奇数奇偶校验进行检查。

特定于域的声明性语言允许声明协议30包括具有动作和属性参数(诸如上述的“#exclude”标志)的字段定义302。处理器14在句法树60执行期间评估这些动作和属性参数。动作参数可以是解析器40可识别的预定义标志。处理器14可以使用动作参数来修改比特流评估的特性和/或在字段匹配成功时实施任何其他任意计算。字段定义302内的字段动作参数基于字段匹配条件实现任意运行时间状态机改变,诸如,例如:

其中“<enable_strobe_sync>”是示例动作参数。与字段动作参数相反,属性参数可以是针对该字段设置任何任意属性的标志。属性参数标志可以由处理器14用于字段结果的预处理和后处理。字段属性参数为给定的字段定义(诸如上面描述的“#exclude”标志)建立任意运行时间评估规则。

图5的字段596的字段定义可以在协议声明30内被定义为:

其中字段596开始于零到十五比特字段594,接着是一比特字段591,然后是八比特“data”字段,并且结束于一比特字段592。

图5的字段597的字段定义可以在协议声明30内被定义为:

其中字段597开始于零到十五比特字段594,接着是一比特字段591,然后是八比特“checksum”字段,并且结束于一比特字段592。字段597的字段定义包括数据验证的另一示例,该示例使用“__checksum”来评估该字段是“data”字段还是先前8比特“data”字段的适当校验和求和。

协议声明30中的字段定义302可以包括用户定义的错误处理和/或标记。该错误处理允许协议声明作者验证循环冗余校验(crc)、校验和、奇偶校验和/或值的结果。该验证过程使错误条件能够被显示给最终用户以用于查看和/或调试协议捕获。字段定义302内的任意crc多项式定义实现crc错误校验,诸如例如:

错误和crc字段序列定义针对分开的数据包区域实现奇偶校验、校验和、crc和其他数据验证计算(例如,“verify(__parity,even,id0,id1,id2,id4)”)。其它的验证字段定义是可能的,诸如具有变量替换的用户定义的字符串,变量替换允许由协议声明作者编写的错误消息附接到解码的字段结果。用户接口可以显示运行时间引擎检测到的运行时间/解码错误消息。

图5的字段598的数据包字段定义可以在协议声明30内被定义为:

其中可变长度数据包字段598开始于数据包开始事件582,随后是字段593,然后是字段595,随后是字段596(其中字段模式596根据字段限定符“{8}”必须发生8次),以及结束于字段597(并且可变长度数据包字段598包括与上述各项并行的数据)。字段598的数据包字段定义说明了各字段可以如何与用于复现字段模式的正则表达式风格重复标志一起分组。具体来说,对于字段598的数据包字段定义,字段595内的“identifier”字段必须以比特序列111100开始。该要求由字段匹配规则“{id0,id1,id2,id3,id4,id5}==0x3c”指示。同样在字段598的数据包字段定义内的是针对数据包字段598的区域的指定评估的示例(这里是“lsb”)。针对数据包类型的字段定义302内的区域和/或范围化区域可以向处理器14指定要使用的评估类型,诸如例如比特填充规则、最低有效位(lsb)、最高有效位(msb)、高位优先、和/或低位优先。

任意比特填充规则定义可以被包括在字段定义302中,诸如例如:

其中比特填充定义“stuffcomplement”阻止处理器14把特定标志、标记和/或其它字段误读成本领域中已知的比特流中的数据和/或其它字段。使用本公开的声明性语言,协议声明作者可以编写适用于特定应用的定制的和特定于域的比特填充规则。协议声明30可以包括对公共比特填充规则的调用,该公共比特填充规则存储在存储器16或其他存储介质中的库中。

另外,如上面对针对比特流定义102所描述的,字段定义302和事件定义202可包括范围化if子句,该范围化if子句基于布尔表达式的评估来实现针对字段定义的分支逻辑。

在一些实施例中,可以接收多于一个的物理输入信号50。例如,可以与数据信号一起接收时钟信号。图6图示了句法树60的三个解码阶段,这些解码阶段使用两个不同物理输入信号650以及基于i2c协议的协议声明30。在开端阶段100期间,处理器14可以根据协议声明30对两个物理输入信号650执行所述句法树60,这可被部分地编写为:

其中“pinclk”和“pindata”表示两个不同物理输入信号650,并且通过每当时钟(“clk”)信号从低变为高时基于数据(“data”)信号确定比特值来创建比特流670。

在事件发现阶段200期间,基于协议声明30中的事件定义202发现针对数据包帧的开始和结束时间和/或位置。图6的事件682和684的事件定义在协议声明30中可以被编写为:

其中每当数据信号从高变为低同时时钟信号为高时事件682发生,并且每当数据信号从低变为高同时时钟信号为高时事件684发生。事件682和684的事件定义说明了事件发现阶段200的示例,事件发现阶段200使用原始模拟物理输入信号,而不是从开端阶段100输出的二进制比特流,来发现比特流670内的数据包成帧边界。

复杂事件也可以由处理器14在事件发现阶段200期间评估。复杂事件定义可允许对任意数量的较简单事件进行组合评估,可使用逻辑“or”组合和/或作为具有可选持续时间规范的事件序列来评估所述任意数量的较简单事件。例如,复杂事件的复杂事件定义可以在协议声明30内以所述声明性语言被编写为:

其中复杂事件“sr”发生在根据“窥视”操作发现事件“s”被添加到堆栈的任何时间,并且复杂事件“srp”发生在句法树60遇到(1)根据上面事件684的事件定义所定义的事件“p”或(2)复杂事件“sr”的任何时间。

图6的字段692、694、696和697可全部在字段698的数据包字段定义中被定义,字段698的数据包字段定义在协议声明30中被编写为:

其中,数据包字段698开始于零比特事件682,随后是七比特“address”字段692和一比特“rw”字段694(其中比特值是1),然后是一比特“ack”字段696,其后是由八比特“data”字段697和随后的一比特“ack”字段696构成的至少一个分组,并结束于复杂事件“srp”。

图7示出根据本公开的一些实施例的一般化句法树执行的示例处理和数据流的框图。句法树可以用于自动生成特定于协议的状态机。处理器14可以使用该特定于协议的状态机来实施输入数据的运行时间评估。解析器40从存储器16读取协议声明730并且解析器40或处理器14内的编译器706编译句法树60。

使用公知的物理线路代码编码或基于协议声明30的定制比特流定义来解码该物理输入信号750。替代或附加于编写定制比特流定义,如上所述,标准解码器702可以使用公知的物理层线路译码或编码方案来把物理输入信号750变换为原始比特流770,如图7中所示。公知的物理层线路译码或编码方案可以包括例如曼彻斯特、返回零、非返回零(nrz)、非返回零标记(nrz-m)、数据选通(d/s)、2b/10b、8b/10b、8b/9b、64b/66b、64b/67b、128b/130b和解扰。这些公知的物理层线路译码和编码方案可以被包括在线路代码编码库772中并用于解码器支持。比特流定义可以被编写为静态c++协同例程,静态c++协同例程由解码器运行时间引擎直接调用,所述句法树在解码器运行时间引擎上进行执行。在这种方案下,每当遇到新的物理层比特流定义时,都会更新运行时间、语法和词法标志。该更新过程可用于基于任何语言的协议方案,该基于任何语言的协议方案聚焦于比特流序列到特定于协议的信息流的分析和映射。

然后处理器14执行句法树760以使用帧和/或事件定义202把来自标准解码器702的原始比特流770转换成比特流成帧数据780。句法树760然后进一步匹配字段定义302以输出打包的比特流数据790。还可以实施上面详细讨论的crc校验712。

可以通过如下方式来评估比特流770:使用字段设备访问(fda)和设备描述语言(ddl)库782根据协议声明30使用标志替换来把源输入数据转换成输出媒体文件。收集714解码的比特流的帧和数据包,并且从数据包提取716有效载荷,以确定媒体文件718。数据包集合714也可以被保存在数据存储库720内。

虽然各种示例定义已经在上面被提供用于解释,但本公开的实施例不限于这样的定义,并且广泛的定义阵列可以由协议声明作者使用声明性语言编写。

本公开的各方面易于实现各种修改和替换形式。特定方面已经在附图中作为示例被示出并且在下文中详细描述。然而,应该注意的是,本文公开的示例出于讨论清楚的目的被呈现,并且不意图将所公开的一般概念的范围限制到本文描述的特定方面,除非明确地限制。因此,本公开意图覆盖根据附图和权利要求所描述的各方面的所有修改、等同物和替代物。

物理层模拟信令可以被定制的硬件芯片集、现场可编程门阵列(fpga)和/或其它通用语言算法转换成比特流。

在本说明书中对方面、示例等的引用指示所描述的项目可以包括特定特征、结构或特性。然而,每个公开的方面可能包括或可能不一定包括该特定特征、结构或特性。此外,除非特别指出,否则这种短语不一定指代相同的方面。此外,当特定特征、结构或特性结合特定方面被描述时,这种特征、结构或特性可以结合其它公开的方面被采用,而不管这种特征是否被明确地结合这种其它公开的方面被描述。

本公开的各方面可以在特别创建的硬件上、在固件、数字信号处理器上或在专门编程的计算机(诸如例如适于测试和测量的计算设备)上进行操作,所述专门编程的计算机包括根据编程指令操作的处理器。适于测试和测量的计算设备可以包含测试和测量系统。可以从直接物理通道输入递送输入数据。附加或替代地,可以从先前采样和/或合成的线路译码物理信号输入的基于文件和/或存储器的输入递送所述输入数据。一些公开的系统可以使用支持云的服务器技术进行操作。本文使用的术语“控制器”或“处理器”意图包括微处理器、微计算机、专用集成电路(asic)和专用硬件控制器。本公开的一个或多个方面可以体现在计算机可用数据和计算机可执行指令中(诸如体现在一个或多个程序模块中),该计算机可用数据和计算机可执行指令由一个或多个计算机(包括监视模块)或其他设备执行。通常,程序模块包括当由计算机或其他设备中的处理器执行时实施特定任务或实现特定抽象数据类型的例程、程序、对象、部件、数据结构等。计算机可执行指令可以被存储在计算机可读存储介质(诸如硬盘、光盘、可移动存储介质、固态存储器、随机存取存储器(ram)等)上。如将由本领域技术人员所理解的,程序模块的功能可在各个方面中视需要进行组合或分布。此外,该功能可以全部或部分地体现在固件或硬件等同物(例如集成电路、fpga等)中。可以使用特定数据结构来更有效地实现本公开的一个或多个方面,并且这样的数据结构被认为在计算机可执行指令的范围内,并且计算机可用数据可以被称为计算机程序产品。计算机可读介质,如本文所描述所讨论的。

在一些情况中,所公开的方面可以被实现在硬件、固件、软件或它们的任何组合中。所公开的方面还可以被实现为由一个或多个或计算机可读存储介质携带或存储在其上的指令,该指令可以由一个或多个处理器读取和执行。本文的这种指令表示可以由计算设备访问的任何介质。作为示例而非限制,计算机可读介质可以包括计算机存储介质和通信介质。

计算机存储介质表示可以被用于存储计算机可读信息的任何介质。作为示例而非限制,计算机存储介质可以包括:ram、rom、电可擦除可编程只读存储器(eeprom)、闪存或其他存储器技术;压缩盘只读存储器(cd-rom)、数字视频盘(dvd)或其他光盘存储装置;磁带盒、磁带、磁盘存储装置或其他磁存储设备;以及以任何技术实现的任何其他易失性或非易失性、可移动或不可移动介质。计算机存储介质不包括信号本身和暂时形式的信号传输。

通信介质表示可用于传送计算机可读信息的任何介质。作为示例而非限制,通信介质可以包括同轴电缆、光纤电缆、空气或适用于传送电、光、射频(rf)、红外、声学或其他类型信号的任何其他介质。

此外,该书面描述参考了特定特征。应该理解的是,该说明书中的公开包括那些特定特征的所有可能组合。例如,在特定方面的情境中公开特定特征的情况下,该特征也可以在可能的程度上在其他方面的情境中使用。

而且,当在本申请中参考具有两个或更多定义的步骤或操作的方法时,所定义的步骤或操作可以以任何次序执行或同时执行,除非上下文排除这些可能性。

尽管本公开的特定方面已经出于说明的目的被图示和描述,但是将理解,可以在不脱离本公开的精神和范围的情况下做出各种修改。因此,除了所附权利要求之外,本公开不应受到限制。

示例

下面提供了本文公开的技术的说明性示例。这些技术的实施例可以包括以下描述的示例中的任何一个或多个以及任何组合。

示例1包括适于测试和测量的计算设备,包括:物理通道输入,用于接收线路译码物理信号;存储器,用于存储根据声明性语言定义生成的句法树;以及处理器,可操作地耦合到所述存储器并且被配置为:访问所述句法树,使用所述句法树从所述线路译码物理信号提取时间和边缘数据,以及使用所提取的时间和边缘数据基于句法树的状态来生成比特流的比特值。

示例2包括示例1的方面,其中处理器还被配置为:基于声明性语言定义内的事件开始和结束定义,从所述比特流提取时间标记;以及基于所提取的时间标记使用所述句法树来生成所述比特流的数据包帧。

示例3包括示例1和2的方面,其中所述处理器还被配置为:基于声明性语言定义内的字段定义来映射所生成的数据包帧内的字段;以及使用所述句法树基于所映射的字段生成所述比特流的数据包。

示例4包括示例1、2和3的方面,其中所述处理器还被配置为:使用所述句法树基于错误处理定义来验证数据包。

示例5包括示例1和2的方面,其中事件开始和结束定义是从字段设备访问和设备描述语言库获得的。

示例6包括示例1的方面,其中所述声明性语言定义是从线路代码编码库获得的。

示例7包括示例1的方面,其中所述处理器还被配置为根据所述声明性语言定义编译所述句法树。

示例8包括示例1的方面,其中所述句法树被存储在第一存储器中,并且所述声明性语言定义被存储在第二存储器中。

示例9包括一种用于使用句法树来解释物理输入信号的方法,所述方法包括:读取声明性语言定义;基于所述声明性语言定义来编译句法树;以及通过采用所述句法树的节点解码所述物理输入信号的线路代码编码来把所述物理输入信号转换成比特流。

示例10包括示例9的方面,还包括:使用句法树基于事件开始和结束定义来生成比特流的数据包帧。

示例11包括示例9和10的方面,还包括:使用所述句法树基于字段定义来生成比特流的数据包。

示例12包括示例9、10和11的方面,还包括:使用所述句法树基于错误处理定义来验证数据包。

示例13包括示例9、10和11的方面,还包括:使用标志替换从比特流的数据包提取有效载荷以输出媒体文件。

示例14包括示例9和10的方面,其中所述事件开始和结束定义来自字段设备访问和设备描述语言库。

示例15包括示例9的方面,其中所述声明性语言定义来自线路代码编码库。

示例16包括存储在介质中的计算机程序产品,当所述计算机程序产品由适于测试和测量的计算设备中的处理器执行时使所述计算设备:基于协议声明来编译句法树,所述协议声明包括比特流定义、事件定义和字段定义中的一个或多个;接收物理信号;以及使用所述句法树将所述物理信号解码成比特流。

示例17包括示例16的方面,其还使所述计算设备:使用线路代码编码库来提供比特流定义。

示例18包括示例16的方面,其还使所述计算设备:使用字段设备访问和设备描述语言库来提供事件定义。

示例19包括示例16的方面,其还使所述计算设备:使用字段设备访问和设备描述语言库来提供字段定义。

示例20包括示例16的方面,其中所述协议声明基于标准网络协议。

示例21包括示例16的方面,其中所述协议声明基于定制网络协议。

示例22包括示例16的方面,其还使所述计算设备:使用标志替换从所述比特流提取有效载荷以输出媒体文件。

所公开的主题的先前描述的版本具有许多优点,这些优点已被描述或对于普通技术人员而言将是显而易见的。即使如此,所有这些优点或特征并非在所公开的装置、系统或方法的所有版本中都是必需的。

另外,该书面描述参考特定特征。应该理解,该说明书中的公开包括那些特定特征的所有可能组合。例如,在特定方面的情境中公开特定特征的情况下,该特征也可以在可能的程度上在其他方面的情境中使用。

而且,当在本申请中参考具有两个或更多定义的步骤或操作的方法时,所定义的步骤或操作可以以任何次序执行或同时执行,除非上下文排除这些可能性。

尽管本发明的特定方面已经出于说明的目的被图示和描述,但是将理解,可以在不脱离本发明的精神和范围的情况下做出各种修改。因此,除了所附权利要求之外,本发明不应受到限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1