WGL波形生成语言—新手入门学习(二)
WGL波形生成语言—新手入门学习一WGL波形生成语言—新手入门学习三WGL波形生成语言—新手快速入门—导航目录2.4 WGL 语法2.4.1通用语法2.4.2程序块语法2.4.3通用型程序块2.4.3.1信号单比特信号总线Buses组Groups多路复用信号或总线atepindirection选通子句dutpin2.4WGL 语法WGL 是一种块结构化语言。WGL 程序体由一个大型结构组成该结构由开始语句和结束语句括起。在这个整体结构内部包含多个更小、更专门化的结构或称 “代码块”每个结构均由对应的开始语句和结束语句界定。下文将介绍 WGL 的语法元素。2.4.1通用语法最简形式下WGL 源文件采用以下语法可选的 WaveformBlocks 的有效语法为十六个程序段中的任意一个。这些程序段称为 WGL 编程块简称“块”。块名称如下块名称用作块标识符对所使用的每个程序块中的信息进行分类。这些块为可选项可按任意顺序排列但需遵守以下限制块中的所有项必须先定义后使用且模式块必须在使用它的子程序定义之前定义。可创建空WDB、仅定义信号的WDB、定义信号和时序的WDB、仅定义信号和模式的WDB或定义所有组件的WDB通过包含描述WDB对象的所有程序块实现。 以下是WGL程序的高层BNF语法表示WaveformProgram :: “waveform” waveFormName [ “()” ] { WaveformBlocks } “end” WaveformBlocks :: ( EquationSheet | EquationDefaults | GlobalMode | Formats |TimeGens | PinGroups | Signals | TimingSets | Registers | TimePlates | Symbolics | Patterns | Subroutines | ScanCells | ScanChain | ScanState ) EquationSheet :: “equationsheet” equationSheetName { ExpessionDecl } “end” EquationDefaults :: “equationdefaults” DefaultsDecl “end” GlobalMode :: “pmode” “[” PmodeOption “]” “;” Formats :: “format” { FormatDecl } “end” TimeGens :: “timegen” { TgDecl } “end” PinGroups : “pingroup” { PinGroupDecl } “end” Signals :: “signal” { SignalDecl } “end” TimingSets :: “timeset” tsNumber { TgAssign } end”Registers :: “register” “(” PinList “)” { RegisterDecl } “end” TimePlates :: “timeplate” timeplateName TimePlate “end” Symbolics :: “symbolic” SignalReference [ SymDirection] Radix SymbolicAssignment “end” Patterns :: “pattern” patternName “(” PatternParameters “)” PatternRows “end” Subroutines :: “subroutine” subroutineName “( )” PatternRows “end” ScanCells :: “scanCell” { ScanCellDecl } “end” ScanChain :: “scanChain” { ChainDecl } “end”ScanState :: “scanState” { ScanStateDecl } “end”一个典型的WGL程序示例如下2.4.2程序块语法所有WGL程序块均以某个WGL块名保留字开头以保留字end结尾。在这两个界定性保留字之间是一条或多条用于定义数据的WGL语句。这些WGL语句本身又细分为更小型的结构用于处理更具体的操作例如为单个信号通道设置时序。冒号:用于为标识符分配属性如强制属性或输入属性。冒号等号组合:用作赋值运算符用于为标识符分配一个值如数值。有关这些用法可参见前文的典型WGL程序示例。设置属性; :赋值操作在允许的情况下逗号,和分号;用作分隔符。当多个参数出现在同一行时每个条目可由逗号,分隔。每条独立的 WGL 语句必须由分号;分隔。有关允许的使用细节请查阅每个 WGL 块的巴科斯 - 诺尔范式BNF表示法。每一个声明语句用; 结束一般而言WGL块分为三类通用型、测试仪专用型和方程专用型。通用型块可使你处理与测试波形相关的数据。设定与测试波形相关的值测试仪专用型块可用于指定与你所使用的测试仪类型直接相关的WDB数据值。指定WDB的数值指定与你所使用的测试设备直接相关的波形数据库的值方程专用型块可用于将表达式和常量值分配给变量这些变量后续可替代时序集和时板TimePlates中的时间值使用。这些方程的运算结果随后会被纳入你通过TDS WaveBridge模块生成的测试程序中。给变量赋值将WGL块归为这三大类来考量虽有实际意义但需注意的是部分块会同时包含通用型、测试仪专用型和方程专用型组件。例如信号块Signals blocks和时板块TimePlates blocks既包含通用型WGL语句也包含测试仪专用型WGL语句时板块TimePlate blocks和时序集块TimingSet blocks则同时包含通用型、测试仪专用型和方程专用型WGL语句。表2-1定义了16个WGL程序块中每个块的块类型。¹2.4.3通用型程序块本节介绍各个通用型程序块的具体语法。以下列出 WGL 的通用型程序块信号 时板扫描单元 模式扫描状态 子程序扫描链 符号使用通用型程序块可定义不特定于任何测试仪的 WDB 对象。通用型程序块按创建 WDB 时的可能使用顺序呈现。2.4.3.1信号信号块用于声明四种信号定义类型单比特信号、多比特总线、组以及多路复用信号或总线。组可包含信号、总线或其他组。 信号属性必须在同一条目内定义。例如signal reset: input; reset : radix symbolic; end是不正确的。声明这些信号属性的正确方式如下signal reset: input radix symbolic; end仅当你所使用的TDS WaveBridge包含适用于该测试仪的方程支持功能时支持方程的WGL结构才会保留在WDB中。WGL 信号块的语法如下signal SignalDecl end信号块的完整BNF语法表示如下Signals :: “signal” { SignalDecl } “end” SignalDecl :: signalName [ BusOrGroup ] [ “:” SignalAttributes ] [ Pstate ] “;” BusOrGroup :: ( BusRange | GroupMembers | MuxMembers ) BusRange :: “[” bitNumber “..” bitNumber “]” GroupMembers :: “[” [ SignalReference { “,” SignalReference } ] “]” SignalReference :: signalName [ Range ] Range :: “[” bitNumber [ “..” bitNumber ] “]” MuxMembers :: [ MuxPartList ] [ Range ] MuxPartList :: “[” muxPartName “,” muxPartName [ { “,” muxPartName } ] “]” SignalAttributes :: ([“mux” ] [ Direction ] ) { Strobe } [ Radix ] [ DutPins ] [ AtePins ] Direction :: ( “input” | “output” | “bidir” ) [ ( “reference” | “timing” ) ] Strobe :: ( “in” | “out” ) “when” “[” validityClause “]” Radix :: “radix” ( “binary” | “octal” | “decimal” | “hex” | “hexadecimal” | “symbolic” ) DutPins :: “dutpin” “[” DutPinGroup { “,” DutPinGroup } “]” DutPinGroup :: ( PinInfo | “(” PinInfo { “,” PinInfo } “)” ) PinInfo :: PinName| PinNumber PinName :: pinName [PinNumber] PinNumber :: “:” pinNumber AtePins :: “atepin” “[” AtePinGroup { “,” AtePinGroup } “]” AtePinGroup :: ( AtePinInfo | “(” AtePinInfo { “,” AtePinInfo } “)” ) AtePinInfo :: PinInfo [ “tg” “[” timeGenName { “,” timeGenName } “]” ] Pstate :: “initialp” “[” TDSstate “]”信号声明SignalDecl以用户定义的标识符或字符串开头其可分为以下四种类型单比特信号多比特总线包含信号、总线或其他组的组多路复用信号或总线单比特信号单比特信号通过标识符后接属性列表进行定义。以下是仅定义了单比特信号的 WGL 信号块示例signal clk: input; dataReady: output; in_1: input; readWrite: bidir; end总线Buses总线通过“标识符后接置于方括号[ ]内的总线范围”进行定义。可定义的单比特信号与总线的总数上限为 16384。 以下是定义了单比特信号和总线的 WGL 信号块示例signal clk: input; # system clock dataReady: output; in_1: input; readWrite: bidir; data [0..31]: bidir; # 32-bit data bus addr [0..15]: input; # 16-bit address bus end组Groups组由先前定义的单比特信号、总线、总线成员或其他组构成的列表进行定义。组的列表中单比特信号、总线、总线成员或其他组的名称仅能出现一次。组的使用数量不计入 16384 的总数限制中。以下是定义了单比特信号、总线和组的 WGL 信号块示例signal clk: input; # system clock dataReady: output; in_1: input; readWrite: bidir; data [0..31]: bidir; # 32-bit data bus addr [0..15]: input; # 16-bit address bus busses [data, addr]; # both busses together data0_8 [data[0..8]]; oddAddr [addr[1], addr[3], addr[5], addr[7]]; inputs [clk, in]; end将已经定义的具有某种共性的信号总线归类总线组、输入组、数据组、奇数地址组存在可用的预定义组你可在组的任何正确语法中使用它们。预定义组名称必须以大写字母输入如下所示具体包括ALL所有的信号总线该预定义组包含所有信号、总线以及多路复用信号和总线但不包含多路复用组件。组不包含在内。ALLINPUT带有输入属性的所有信号该预定义组包含所有具有输入信号方向属性的信号、总线以及多路复用信号和总线但不包含多路复用组件。ALLOUTPUT带有输入属性的所有信号的组该预定义组包含所有具有输出信号方向属性的信号、总线以及多路复用信号和总线但不包含多路复用组件。ALLBIDIR该预定义组包含所有具有双向bidir即 bidirectional信号方向属性的信号、总线以及多路复用信号和总线但不包含多路复用组件。ALLMUX该预定义组包含所有具有多路复用mux即 multiplexed信号属性的多路复用信号和多路复用总线但不包含多路复用组件。可定义的组数量没有限制。多路复用信号或总线多路复用信号的定义方式为标识符后接置于方括号[]内的多路复用组件列表多路复用总线的定义方式为标识符后接置于方括号[]内的多路复用组件列表后续再紧跟同样置于方括号[ ]内的范围Range。请勿将多路复用组件多路复用组件名称即 muxPartNames与信号混淆多路复用组件用于描述向多路复用信号或总线提供图案数据的自动测试设备ATE资源。多路复用组件在时板TimePlates中的作用与信号大致相同均承载时序参数和图案数据这些数据最终会与信号块Signals block中定义的多路复用信号相关联。以下是包含多路复用信号、单比特信号和多路复用总线定义的 WGL 信号块示例。请注意多路复用mux属性的使用方式signal fastClock [edge1, edge2]: mux input; # Multiplexed parts edge1, # edge2 on multiplexed # signal fastClock rd/_wr:output; Databus [bus1, bus2] [0..31]: mux bidir; # Multiplexed parts bus1, # bus2 on multiplexed # bus Databus end当波形比目标测试仪的格式集所支持的波形更为复杂时通常会使用多路复用信号和总线来生成包含引脚多路复用的测试程序以适配这些复杂波形。借助这一功能你可以提高测试仪的有效频率。如果需要多个图案数据位来定义一个波形例如在单个测试仪周期内包含多个脉冲则应将此类信号或总线定义为多路复用信号或总线。 在可选的总线或组BusOrGroup语法之后是与当前信号声明相关联的其他属性。若你正在定义组则仅基数radix属性适用。atepinATE 引脚信息通过保留字atepin在信号块中定义。AtePinInfo语法用于描述当前信号声明到测试仪引脚的映射关系以及测试仪引脚与其时序发生器之间的绑定关系。atepin的值为字母数字字符串。当为多比特总线指定多个 ATE 引脚时映射关系默认为一对一除非使用括号将两个或多个引脚声明与单个信号分组此时映射规则会相应调整。ATE 时序发生器信息同样在信号块中定义。时序发生器绑定通过保留字tg指定tgName指特定于测试仪的时序发生器名称该时序发生器为当前信号声明中所有信号的边沿提供时序支持。多个tgName表示时序发生器正在被多路复用或已有的时序发生器在TimeGens块中定义负责为多个信号边沿生成时序。注意引脚信息和时序发生器信息均为特定于测试仪的。以下是包含 dutpin 和 atepin 属性定义的 WGL 信号块示例signal clk : input dutpin [c:p1] atepin [fclock:123 tg [ACLK1] ]; dr : input dutpin [r:p2] atepin [p124:124 tg [BCLK1,CCLK1] ]; data : output dutpin [d:p3] atepin [p2:2 tg [STRB1]]; enddirection方向属性描述信号的方向并控制信号在测试程序生成中的使用方式。信号可以是驱动型输入、感应型输出或在不同时间兼具驱动和感应功能双向默认值为输入。组不可指定方向属性。如果总线的方向为输入或输出则该总线的所有比特位必须具有相同的方向否则仅双向bidir为合法方向。要控制信号在测试程序生成中的使用方式可选择 “参考reference” 或 “时序timing” 模式。若两者均未指定该信号将参与时板TimePlate匹配和测试仪程序生成若指定 “时序” 模式该信号仅参与时板绑定不参与测试程序生成若指定 “参考” 模式该信号既不参与时板绑定也不参与测试程序生成。即使使用该子句信号仍需遵循完整的 WGL 语法包括信号、时板通道和数据的定义。定义的信号默认是输入以下是 WGL 信号块示例其中信号 I1 和 I3 的使用受到限制signal I1 : input reference; I2 : input; I3 : input timing; . . . end选通子句信号和总线可在其方向属性后包含选通子句。选通子句用于指定1. 输入或输出信号仅当另一个信号取特定值时有效或2. 双向信号作为输入的条件以及作为输出的条件。选通子句的格式为in|out when [信号名 状态字符]在以下示例中名为data的总线仅当信号cntrl取‘D’值时包含有效输出此外双向信号dr在cntrl取‘D’值时为输入在cntrl取‘U’值时为输出类似于条件语句决定输入输出信号在什么条件下有效signal cntrl : input; dr : bidir in when [cntrl D] out when [cntrl U]; data[7..0] : output out when [cntrl D]; endcntrl可以作为使能端输出信号在cntrl是D时输出dutpindutpin属性指定与该信号关联的被测设备device-under-test引脚上的名称及可选编号。dutpin的值为字母数字字符串。若某设备有多个引脚专用于同一信号或双向信号在输入/输出模式下使用不同引脚则可指定多个引脚。组不可指定dutpin属性。若在多比特总线声明中指定多个引脚总线元素与引脚之间默认按从左到右、从最高位引脚到最低位引脚的顺序建立一对一映射。其他引脚到信号的分配方式如多路复用引脚所需的分配方式可通过将引脚声明用括号分组实现这表示多个引脚绑定到单个比特的总线成员。 以下是定义了dutpin属性的WGL信号块示例signal clk : input dutpin [c:1]; data[0..7]: bidir dutpin [(d0i, d0o), (d1i, d1o), (d2i, d2o), (d3i, d3o), (d4i, d4o), (d5i, d5o), (d6i, d6o), (d7i, d70)]; end确定被测设备的引脚和信号对应关系muxmux属性将信号或总线定义为多路复用信号或总线。该信号或总线从多路复用组件列表中接收图案数据。若多路复用组件本身为总线则这些总线后必须紧跟置于方括号[ ]内的总线范围。多路复用组件的名称必须在当前信号定义中首次声明禁止使用 WGL 文件的Signals块中先前已定义的其他信号、组或总线的名称此类用法均为非法。initialp每个信号定义可指定可选的初始P状态initialp。波形的第一个周期会将P状态解析为该初始状态可指定任何合法的TDS状态。若省略initialp子句默认值为D强制低电平FORCE_LO。组不可指定initialp属性。 以下是WGL信号块示例其中为信号clk和总线bus指定了initialp属性signal clk : input initialp[U]; bus[0..7]: output initialp[X]; end设置clk的初始值p状态就可以取这个设定的值Radix基数属性radix描述总线的图案数据在Patterns块中所使用的基数支持的类型包括二进制binary、十六进制hexadecimal、八进制octal、十进制decimal或符号型symbolic。单比特信号仅支持二进制和符号型作为合法基数若未指定基数属性默认值为二进制。 符号型基数表示后续符号块symbolic blocks中定义的标识符可用于图案向量pattern vectors。十进制基数仅可用于包含32个或更少标量成员信号scalar member signals的总线和组。注意合法的二进制图案字符为 1、0、Z、X 和 -若在 WGL 文件中指定非二进制基数十六进制、十进制、八进制、符号型且使用 WaveMaker 图案编辑器编辑 WDB 文件时请勿将二进制图案字符 1 或 0 与 Z、X 或 - 字符同时使用。由于 X、Z 或 - 字符表示模糊数据位整个数字的图案数据十六进制为 4 位、八进制为 3 位、十进制为 1 位或 2 位、符号型为 n 位将被舍弃并替换为问号?。若所有位均为 Z则十六进制或八进制数字将替换为 Z若所有位均为 X则十六进制或八进制数字将替换为 X。