Keysight Technologies J-BERT M8020A, J-BERT M8030A, J-BERT M8040A Programming Manual

Keysight M8000 Series of BER Test Solutions
J-BERT M8020A High-Performance BERT M8030A Multi-Channel BERT M8040A High-Performance BERT
Programming Guide
Notices
CAUTION
WARNING
No part of this manual may be reproduced in any form or by any means (including electronic storage and retrieval or transla­tion into a foreign language) without prior agreement and written consent from Keysight Technologies as governed by United States and international copyright laws.
Trademarks
PCI Express® and PCIe® are registered trademarks of PCI-SIG.
Manual Part Number
M8020-91040
Edition
Edition 9.1, August 2017 Keysight Technologies Deutschland GmbH Herrenberger Strasse 130, 71034 Böblingen, Germany
Technology Licenses
The hard ware and/or software described in this document are furnished under a license and may be used or copied only in accordance with the terms of such license.
U.S. Government Rights
The Software is “commercial computer software,” as defined by Federal Acquisition Regulation (“FAR”) 2.101. Pursuant to FAR
12.212 and 27.405-3 and Department of Defense FAR Supplement
(“DFARS”) 227.7202, the U.S. government acquires commercial computer software under the same terms by which the soft­ware is customarily provided to the public. Accordingly, Keysight provides the Soft­ware to U.S. government customers under its standard commercial license, which is embodied in its End User License Agree-
ment (EULA), a copy of which can be found at http://www.keysight.com/find/sweula. The license set forth in the EULA represents the exclusive authority by which the U.S. government may use, modify, distribute, or disclose the Software. The EULA and the license set forth therein, does not require or permit, among other things, that Key­sight: (1) Furnish technical information related to commercial computer software or commercial computer software docu­mentation that is not customarily provided to the public; or (2) Relinquish to, or other­wise provide, the government rights in excess of these rights customarily provided to the public to use, mod ify, reproduce, release, perform, display, or d isclose com­mercial computer software or commercial computer software documentation. No additional government requirements beyond those set forth in the EULA shall apply, except to the extent that those terms, rights, or licenses are explicitly required from all providers of commercial computer software pursuant to the FAR and the DFARS and are set forth specifically in writing elsewhere in the EULA. Keysight shall be under no obligation to update, revise or otherwise modify the Software. With respect to any technical data as defined by FAR 2.101, pursuant to FAR
12.211 and 27.404.2 and DFARS 227.7102, the U.S. government acquires no greater than Limited Rights as defined in FAR
27.401 or DFAR 227.7103-5 (c), as appli­cable in any technical data.
Warranty
THE MATERIAL CONTAINED IN THIS DOCU­MENT IS PROVIDED "AS IS," AND IS SUB­JECT TO BEING CHANGED, WITHOUT NOTICE, IN FUTURE EDITIONS. FURTHER, TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, KEYSIGHT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED WITH REGARD TO THIS MANUAL AND ANY INFORMATION CONTAINED
HEREIN, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MER­CHANTABILITY AND FITNESS FOR A PAR­TICULAR PURPOSE. KEYSIGHT SHALL NOT BE LIABLE FOR ERRORS OR FOR INCIDEN­TAL OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH THE FURNISHING, USE, OR PERFORMANCE OF THIS DOCU­MENT OR ANY INFORMATION CONTAINED HEREIN. SHOULD KEYSIGHT AND THE USER HAVE A SEPARATE WRITTEN AGREE­MENT WITH WARRANTY TERMS COVER­ING THE MATERIAL IN THIS DOCUMENT THAT CONFLICT WITH THESE TERMS, THE WARRANTY TERMS IN THE SEPARATE AGREEMENT WILL CONTROL.
Safety Notices
A CAUTION notice denotes a hazard. It calls attention to an operating pro­cedure, practice, or the like that, if not correctly performed or adhered to, could result in damage to the product or loss of important data. Do not proceed beyond a CAUTION notice until the indicated conditions are fully understood and met.
A WARNING notice denotes a hazard. It calls attention to an operating pro­cedure, practice, or the like that, if not correctly performed or adhered to, could result in personal injury or death. Do not proceed beyond a WARNING notice until the indicated conditions are fully understood and met.
2 Keysight M8070A Programming Guide

Safety Summary

General This product is a Safety Class 1 instrument (provided with a protective earth terminal).
The following general safety precautions must be observed during all phases of operation of this instrument. Failure to comply with these precautions or with specific warnings or operating instructions in the product manuals violates safety standards of design, manufacture and intended use of the instrument. Keysight Technologies assumes no liability for the customer's failure to comply with these requirements. Product manuals are provided with your instrument on CD-ROM and/or in printed form. Printed manuals are an option for many products. Manuals may also be available on the Web. Go to
www.keysight.com and type in your product number in the Search field at the top of the
page.
The protective features of this product may be impaired if it is used in a manner not specified in the operation instructions.
All Light Emitting Diodes (LEDs) used in this product are Class 1 LEDs as per IEC 60825-1.
Environment Conditions
Before Applying Power
Ground the Instrument
Do Not Operate in an
Explosive Atmosphere
Do Not Remove the
Instrument Cover
This instrument is intended for indoor use in an installation category II, pollution degree 2 environment. It is designed to operate at a maximum relative humidity of 95% and at altitudes of up to 2000 meters.
Refer to the specifications tables for the ac mains voltage requirements and ambient operating temperature range.
Verify that all safety precautions are taken. The power cable inlet of the instrument serves as a device to disconnect from the mains in case of hazard. The instrument must be positioned so that the operator can easily access the power cable inlet. When the instrument is rack mounted the rack must be provided with an easily accessible mains switch.
To minimize shock hazard, the instrument chassis and cover must be connected to an electrical protective earth ground. The instrument must be connected to the ac power mains through a grounded power cable, with the ground wire firmly connected to an electrical ground (safety ground) at the power outlet. Any interruption of the protective (grounding) conductor or disconnection of the protective earth terminal will cause a potential shock hazard that could result in personal injury.
Do not operate the instrument in the presence of flammable gases or fumes.
Operating personnel must not remove instrument covers. Component replacement and internal adjustments must be made only by qualified personnel.
Instruments that appear damaged or defective should be made inoperative and secured against unintended operation until they can be repaired by qualified service personnel.
Keysight M8070A Programming Guide 3

Safety Symbols

Table 1 Safety Symbol
Symbol Description
Indicates warning or caution. If you see this symbol on a product, you must refer to the manuals for specific Warning or Caution information to avoid personal injury or damage to the product.
Frame or chassis ground terminal. Typically connects to the equipment’s metal frame.
KC is the Korean certification mark to demonstrate that the equipment is Class A suitable for professional use and is for use in electromagnetic environments outside of the home.
Indicates that antistatic precautions should be taken.
Indicates the time period d uring which no hazardous or toxic substance elements are expected to leak or deteriorate during normal use. Forty years is the expected useful life of the product.
The RCM Mark is a compliance mark to the ACMA (Australian Spectrum Management Agency). This indicates compliance with all Australian EMC regulatory information.
4 Keysight M8070A Programming Guide

Compliance and Environmental Information

Table 2 Compliance and Environmental Information
Safety Symbol Description
This product complies with WEEE Directive (2002/96/EC) marking requirements. The affixed label ind icates that you must not discard this electrical/electronic product in domestic household waste.
Product Category: With reference to the equipment types in WEEE Directive Annex I, this product is classed as a “Monitoring and Control instrumentation” product.
Do not dispose in domestic household waste.
To return unwanted products, contact your local Keysight office, or see
http://about.keysight.com/en/companyinfo/environment/takeback.shtml
for more information.
Keysight M8070A Programming Guide 5

Contents

1 Programming Basics
2 Recommended Programming Techniques
Safety Summary 3
Safety Symbols 4
Compliance and Environmental Information 5
Modular Configuration 14
M8020A Modular Configuration 14 M8030A Modular Configuration 17 M8040A Modular Configuration 19
Using Identifiers 21
Location Identifiers 21 Group Name Identifiers 22 Measurement Name Identifiers 22
PLUGin Subsystem 23
Output Protection 26
Pattern Generator Output Termination 26 Output Protection Algorithm 26
Controlling the Output Level s 27
Controlling the Output Levels - Concepts 27 Controlling the Output Levels - Procedures 27
Allowing the M8020A/M8030A/M8040A to Settle 28
Allowing the M8020A/M8030A/M8040A to Settle - Concepts 28
Keysight M8070A Programming Guide 7
Contents
Reading the M8020A/M8030A/M8040A’s Status 29
Reading the M8020A/M8030A/M8040A’s Status - Concepts 29 M8020A/M8030A/M8040A Status Reporting Structure 32
Working with Patterns 36
Symbol Coding Descriptions 37 Symbol Sequences 42
Creating Pattern Sequences 43
Sequence Editor 43 Pattern Sequence Building Blocks 45 Sequencer Triggers 49 Block Branching 50 Link Training Events 51 Block Controls 51 Coding Configuration 52 Link Training Configuration 56 Downloading Pattern Sequence to Hardware 58
3 Programming Examples
Introduction 60
Initializing the Connection 60
N4903B Initialization 60 M8020A Initialization 61
SJ Example 62
N4903B SJ Example 62 M8020A SJ Example 64
PJ Ex am pl e 68
N4903B PJ Example 68 M8020A PJ Example 70
Sampling Point Alignment Example 74
N4903B Sampling Point Alignment Example 74 M8020A Sampling Point Alignment Example 76
8 Keysight M8070A Programming Guide
BER Example 78
M8070A Jitter Tolerance Measurement CSV Output 83
4 SCPI Command Language
SCPI Command Language - Introduction 86
Important Points about SCPI 89
Sending Commands to the M8020A/M8030A/M8040A 93
Contents
N4903B BER Example 78 M8020A BER Example 79
SCPI Common Commands 86 SCPI Instrument Control Commands 86 IEEE 488.2 Mandatory Commands 87 Overlapped and Sequential Commands 87 Data Types 88
Important Points about SCPI - Concepts 89
Sending Commands to the M8020A/M8030A/M8040A - Overview 93 Sending Commands using VISA 93
Command Line Arguments 94
Communication 95
5 SCPI Command Reference
Subsystems 98
IEEE Commands - Reference 100
Mandatory Commands 100
SCPI Standard Commands 106
Miscellaneous Commands 107
Command Syntax to Find Min/Max Values 108
Location and Module Mapping - Reference 109
Keysight M8070A Programming Guide 9
Contents
STATus Subsystem 110
:STATus:QUEStionable Subnode 111 :STATus:OPERation Subnode 121 :STATus:INSTrument Subnode 125
TRIGger Subsystem 129
Source Subsystem 136
[:SOURce]:PULSe Subnode 141 [:SOURce]:VOLTage Subnode 145 [:SOURce]:JITTer Subnode 149
[:SOURce]:JITTer:HFRequency Subnode 152 [:SOURce]:JITTer:HFRequency:PERiodic Subnode 155 [:SOURce]:JITTer:HFRequency:BUNCorrelate Subnode 158 [:SOURce]:JITTer:HFRequency:RANDom Subnode 162 [:SOURce]:JITTer:HFRequency:SPECtrally Subnode 166 [:SOURce]:JITTer:LFRequency Subnode 169 [:SOURce]:JITTer:LFRequency:PERiodic Subnode 171 [:SOURce]:JITTer:LFRequency:RSSClocking Subnode 173
[:SOURce]:JITTer:SWEep Subnode 175 [:SOURce]:SSCLocking Subnode 182 [:SOURce]:INTerference Subnode 187
[:SOURce]:INTerference:RANDom Subnode 198
[:SOURce]:INTerference:SINUsoidal Subnode 201 [:SOURce]:CONFigure Subnode 202
OUTPut Subsystem 203
:OUTPut:DEEMphasis Subnode 212 :OUTPut:EINSertion Subnode 221 :OUTPut:TRIGger Subnode 225 :OUTPut:DEMBedding Subnode 227 :OUTPut:EMBedding Subnode 230
INPut Subsystem 233
:INPut:CDR Subnode 245 :INPut:ALIGnment Subnode 253
10 Keysight M8070A Programming Guide
SENSe Subsystem 258
CLOCk Subsystem 259
N71000 Subsystem 263
FETCh Subsystem 271
MMEMory Subsystem 276
PLUGin Subsystem 282
:PLUGin:ERATio Subnode 284 :PLUGin:OTIMing Subnode 305
:PLUGin:OTIMing:FETCh Subnode 324 :PLUGin:OLEVel Subnode 335
:PLUGin:OLEVel:ACQuisition Subnode 341
:PLUGin:OLEVel:EVALuation Subnode 346
:PLUGin:OLEVel:FETCh Subnode 348
:PLUGin:OLEVel:FETCh:LEVel Subnode 350
:PLUGin:OLEVel:FETCh:NOISe Subnode 353
:PLUGin:OLEVel:FETCh:QLEVel Subnode 356
:PLUGin:OLEVel:SHOW Subnode 361
:PLUGin:OLEVel:RUN Subnode 364 :PLUGin:JTOLerance Subnode 368 :PLUGin:EDIagram Subnode 394
:PLUGin:EDIagram:ACQuisition Subnode 400
:PLUGin:EDIagram:EVALuation Subnode 403
:PLUGin:EDIagram:FETCh[:RESult] Subnode 405
:PLUGin:EDIagram:RUN Subnode 411
:PLUGin:EDIagram:SHOW Subnode 414 :PLUGin:PSWEep Subnode 418
:PLUGin:PSWEep:ACQuisition Subnode 424
:PLUGin:PSWEep:RUN Subnode 430
:PLUGin:PSWEep:SHOW Subnode 434 :PLUGin:CCAPture Subnode 436
:PLUGin:CCAPture:FETCh Subnode 443
:PLUGin:CCAPture:ACQuisition Subnode 448
:PLUGin:CCAPture:RUN Subnode 451
Contents
Keysight M8070A Programming Guide 11
Contents
SYSTem Subsystem 454
DATA Subsystem 471
:DATA:PATTern Subnode 472 :DATA:SEQuence Subnode 480 :DATA:SYNC Subnode 487 :DATA:LINecoding Subnode 489
Index
12 Keysight M8070A Programming Guide
Keysight M8070A System Software for M8000 Series of BER Test Solutions
Programming Guide

1 Programming Basics

Modular Configuration / 14 Using Identifiers / 21 PLUGin Subsystem / 23
1 Programming Basics

Modular Configuration

In order to describe remote programming for the M8020A, M8030A and M8040A, the modular configuration must be discussed.
The M8020A, M8030A and M8040A are modular instruments. They can consist of several numbers of components. A component can be an AXIe chassis, modules, channels, etc. All these components ‘form’ an instrument. These instruments can be controlled by M8070A system software.
The M8020A instrument supports the following modules.
• M8041A high-performance BERT generator-analyzer-clock 8/16 Gb/s
• M8051A high-performance BERT generator-analyzer 8/16 Gb/s
• M8061A multiplexer 2:1 with de-emphasis 32 Gb/s
• M8062A 32Gb/s Front-end for J-BERT M8020A High-Performance BERT
The M8020A modules must be installed in the M9505A 5-slot chassis.
The M8030A instrument supports the following modules.
• M8041A high-performance BERT generator-analyzer-clock 8/16 Gb/s
• M8051A high-performance BERT generator-analyzer 8/16 Gb/s
• M8192A Multi-channel synchronization module
The M8030A modules must be installed in the M9514A AXIe 14-slot chassis.
For complete details on the features and hardware components of each of the above mentioned modules, refer to M8020A and M8030A Getting Started Guide.

M8020A Modular Configuration

The following section describes and illustrates various setup combinations in which you can install the M8020A modules.
The following configurations are possible in an M9505A 5-slot chassis:
• 1 or 2-channel, 16 Gb/s - (1) M8041A
• 3 or 4-channel, 16 Gb/s - (1) M8041A + (1) M8051A
• 1-channel, 32 Gb/s (Pattern Generator only) - (1) M8041A + (1) M8061A
• 1-channel, 32 Gb/s (Pattern Generator only or full BERT) -(1) M8041A + (1) M8062A
14 Keysight M8070A Programming Guide
1 or 2-channel System Configuration
NOTE
The 1 or 2-channel configuration is a single channel system (a second channel can be added with license) consisting of the 5-slot M9505A AXIe Chassis and an M8041A module. The M8041A occupies three slots. A maximum of two M8020A modules can be installed in a 5-slot chassis.
Programming Basics 1
Figure 1 M8020A configuration for 16 Gb/s BERT with 1 to 2 channel
3 or 4-channel System Configuration
The four channel configuration consists of the 5-slot M9505A AXIe Chassis, an M8041A module, and an M8051A module. The M8041A occupies three slots and the M8051A occupies two slots.
This configuration requires a cable (provided with the M8051A) that connects the M8041A SYNC OUT to the M8051A SYNC IN to synchronize the two modules to a common system clock.
Keysight M8070A Programming Guide 15
1 Programming Basics
Figure 2 M8020A configuration for 16 Gb/s BERT for up to 4 channels
1-channel, 32 Gb/s (Pattern Generator Only)
A typical configuration using the M8061A 32 Gb/s multiplexer with de-emphasis consists of the 5-slot M9505A AXIe Chassis, an M8041A module, and an M8061A module. The M8041A occupies three slots and the M8061A occupies two slots.
Figure 3 M8020A configuration for 32 Gb/s BERT (external de-multiplexer is
16 Keysight M8070A Programming Guide
recommended)
1-channel, 32 Gb/s (Pattern Generator only or full BERT)
A typical configuration for an M8020A 32 Gb/s full BERT consists of the 5-slot M9505A AXIe Chassis, an M8041A module, and an M8062A module. The M8041A occupies three slots and the M8062A occupies two slots.
Figure 4 M8020A configuration for 32 Gb/s BERT
Programming Basics 1

M8030A Modular Configuration

The M8030A is a modular test solution which can be tailored to specific needs from two channels with one M8041A to up to 10 channels.
The modules must be installed in the M9514A AXIe 14-slot chassis as shown in
Table 3 M8030A modules’ arrangement in the M9514A AXIe chassis
Slot Number Module
# 1 For M8030A-BU1, M9537A AXIe embedded controller. For M8030A-BU2, this
# 2-4 M8041A module
# 5-6 M8051A module
# 7 M9521A AXIe system module, always included in M8030A-BU1 or
# 8-9 M8051A module
Keysight M8070A Programming Guide 17
Table 3 on page -17:
slot is empty and covered with filler front-panel
M8030A-BU2, mandatory
1 Programming Basics
Slot Number Module
# 10-11 M8051A module
# 12-13 M8051A module
# 14 M8192A multi-channel synchronization module, mandatory
Figure 5 on page -18 shows an example of modules arrangement in the
M9514A AXIe 14-slot chassis.
Figure 5 Example of M8030A module arrangement
18 Keysight M8070A Programming Guide

M8040A Modular Configuration

M8045A Module (2 Channels)
NOTE
The M8040A is a modular test solution which simplifies accurate receiver characterization of devices operating up to 32 and 64 GBaud with NRZ and PAM-4. It supports the following modules.
• M8045A pattern generator
• M8046A analyzer
• M8057A remote head
The following section describes and illustrates various setup combinations in which you can install the M8040A modules.
M8045A Pattern Generator Module
The M8045A module can be a one or two data channel system (a second channel can be added with license). A one channel instrument has to be returned to the factory for installing the second channel (hardware) and license. It occupies three slots of the 5-slot M9505A AXIe chassis. The following figure illustrates an M8045A module two data channel system) installed in an M9595A AXIe chassis.
Programming Basics 1
Keysight M8070A Programming Guide 19
Figure 6 M8045A configuration for 2 channels
The M8045A module must be installed in slots 1 through 3 of the M9505A AXIe chassis for proper local bus communication unless the M9537A AXIe Embedded Controller is installed (must be in slot 1).
1 Programming Basics
M8046A Module
M8057A Remote Head
M8046A Analyzer Module
The M8046A module occupies single slot of the 5-slot M9505A AXIe chassis. The following figure illustrates an M8045A module with M8046A module installed in an M9505A AXIe chassis.
Figure 7 M8045A and M8046A configuration
M8057A Remote Head
The M8057A remote head is an external box which can be connected to each channel of M8045A module, using the matched pair of cables. It helps in minimizing signal degradations caused by lossy channels. The following figure illustrates an M8057A remote head connected with one channel of M8045A module.
Figure 8 M8045A, M8046A and M8057A configuration
20 Keysight M8070A Programming Guide

Using Identifiers

Location Identifiers

Programming Basics 1
There are three different types of Identifiers:
• Location
• Group Name
• Measurement Name
When an instrument has several output channels with identical capabilities or a subset of capabilities and has more than one module, the selection of which module/channel to use is done using its location identifier.
The location identifier is a predefined notation that can be used to address certain properties, like high level, low level etc., of channels. The location identifier is surrounded by single quotes (‘identifier’) or double quotes (“identifier”). A location identifier will be appended to a SCPI command followed by its argument(s). The location identifier addresses the corresponding components. The location identifier consists of two parts: the first part specifies the module, the second part addresses, in most cases, a visible ‘component’ of a module, like an input or output connector.
For example, SCPI command :OUTP ‘M1.DataOut1’, OFF turns channel 1 (DataOut1) of module 1 (M1) output off.
If a SCPI command is to be sent to a specific module only and not a specific channel, simply use “M1” or “M2” as the location identifier.
If you want to set a value that acts on all components of a modular instrument (for example, set all jitter sources to off), omit the location identifier.
Multiple Source Per Channel Identifier
Some features have multiple sources per channel. To identify these sources, the “(*)” suffix is used.
For example, there are two periodic jitter sources per channel in a module. The following SCPI command specifies periodic jitter source 2 as the source for module 1/data out channel 1:
[:SOURce]:JITTer:PERiodic2[:STATe] ‘m1.dataout1’,ON
Keysight M8070A Programming Guide 21
1 Programming Basics

Group Name Identifiers

Group name identifiers are used to affect a group of inputs or outputs using a single SCPI command. That is, all properties belonging to these identifiers can be addressed simultaneously using the group name.
The following SCPI command shows the syntax for creating a group name then adding the desired location identifiers.
SYSTem:INSTrument:GROup:DEFine ‘GroupName’,‘Identifier’,‘Identifier’,‘Identifier’,‘...’
The following is an example showing ‘Outputs’ as the group name followed by ‘M1.DataOut1’ and ‘M1.DataOut2’ location identifiers assigned to the ‘Outputs’ group name identifier.
:SYST:INST:GRO:DEF ‘Outputs’,‘M1.DataOut1’,‘M1.DataOut2’
The following SCPI command will set all voltage amplitudes in the ‘Outputs’ group to 0.05.
[:SOURce]:VOLTage[:AMPLitude]VOLT:AMPL ‘Outputs’,0.05

Measurement Name Identifiers

Measurement name identifiers are used to set up parameters associated with a specific measurement name. For example, the following shows the bit error ratio plugin SCPI command used to define a measurement name called ‘MyMeasurement’:
:PLUGin:ERATio:NEW ‘MyMeasurement’
You can now set up parameters within the :PLUGin:ERATio subsystem to be associated with the ‘MyMeasurement’ identifier.
The following shows the accumulation duration mode (set to fixed time) and duration (set to 120 seconds) parameters associated with the ‘MyMeasurement’ identifier.
PLUGin:ERATio:ACQuisition:DURation ‘MyMeasurement’, FTIM
:PLUGin:ERATio:ACQuisition:TIME ‘MyMeasurement’,120
22 Keysight M8070A Programming Guide

PLUGin Subsystem

Programming Basics 1
The M8020A/M8030A/M8040A platform supports a plugin interface. C# assemblies which implement certain interfaces are recognized by the software and integrated into the M8070A GUI and instrument software. Error ratio, Output Timing and Jitter Tolerance measurements are examples of the plugin concept. These C# assemblies are placed in a predefined location and are integrated into the M8070A software at start up time automatically.
These measurements can be controlled by the GUI and by SCPI commands. This means that the SCPI tree has to be defined by the plugin itself and is integrated into the existing SCPI tree of the M8020A/M8030A/M8040A platform. SCPI commands for a plugin are placed below a predefined node named “:PLUGin” followed by the type of the plug in.
There is a set of “general” SCPI commands for creating, deleting and controlling a plugin. Also, there is a flexible set of SCPI commands provided by the plugin itself for setting and reading measurement parameters.
Additionally, a user can create multiple measurements of the same type. A measurement name identifier is used to address a created measurement.
Keysight M8070A Programming Guide 23
Keysight M8070A System Software for M8000 Series of BER Test Solutions
Programming Guide
2 Recommended
Programming Techniques
Output Protection / 26 Controlling the Output Levels / 27 Allowing the M8020A/M8030A/M8040A to Settle / 28 Reading the M8020A/M8030A/M8040A’s Status / 29 Working with Patterns / 36 Creating Pattern Sequences / 43
2 Recommended Programming Techniques
NOTE
NOTE

Output Protection

Pattern Generator Output Termination

Output Protection Algorithm

The pattern generator's output ports must be terminated with 50 if they are not connected. Termination of output ports improves the test performance.
Refer also to the M8020A/M8030A/M8040A Getting Started Guide for information on terminating the M8061A outputs to ensure proper performance.
The instrument has an internal protection algorithm that protects the instrument from improper termination of the pattern generator's output ports.
The algorithm checks whether the termination voltage and termination resistance are correct before the output is enabled. This check happens once only.
In non-balanced dc coupled mode, the termination voltage must be within ± 0.1 V of the specified value. The resistance must be between 40 and 60 Ω.
In balanced mode, the resistance must be between 80 and 120 (differential termination).
In ac coupled mode, which is intended for balanced only (for example, 8b/10b coded patterns), the output is enabled if no termination voltage and no termination resistance are detected. This is the case if ac capacitors are in front of the outputs. The check distinguishes between a terminated or an open output.
Do not operate the output driver into an open.
26 Keysight M8070A Programming Guide

Controlling the Output Levels

Controlling the Output Levels - Concepts

Controlling the Output Levels - Procedures

Changing the Voltages with SCPI
Recommended Programming Techniques 2
When the output levels are changed at the M8020A/M8030A/M8040A data and clock output ports, four parameters are changed:
•V
high
•V
low
•V
amptl
•V
offs
The M8020A/M8030A groups these parameters into "pairs" (V V
high/Vlow
). If one of these values is modified, its "partner" remains
ampl/Voffs
constant and the values in the other pair are modified accordingly. For example, if V
is changed, V
ampl
stays constant and V
offs
high
and V
low
are
modified accordingly.
,
The following commands show how you would set the data output so that it has an amplitude of 1 V and an offset of 0.5 V:
:SOUR:VOLT:AMPL ‘M1.DataOut1’,1; OFFS ‘M1.DataOut1’,0.5
This sets the output accordingly (V
Conversely, you could set V
high
high
and V
= 1 V, V
directly:
low
low
= 0 V).
:SOUR:VOLT:HIGH ‘M1.DataOut1’,1;
LOW ‘M1.DataOut1’,0
Keysight M8070A Programming Guide 27
2 Recommended Programming Techniques

Allowing the M8020A/M8030A/M8040A to Settle

Allowing the M8020A/M8030A/M8040A to Settle - Concepts

When patterns are sent to the pattern generator or error detector, the M8020A/M8030A/M8040A requires some time to settle. The following topics explain how the instruments react to pattern changes.
How Pattern Changes Affect the Pattern Generator
The M8020A/M8030A/M8040A requires some time to change the patterns at the pattern generator and error detector. This is particularly true for large text-based (ASCII) patterns that have to be loaded from the file system.
In such a case, it is a recommended technique to always query the M8020A/M8030A/M8040A's Operation Complete status after changing the pattern.
How Pattern Changes Affect the Error Detector
When the pattern changes, the error detector has to resynchronize to the new incoming signal. Depending on the signal, the alignment method used and the desired BER threshold, this procedure can take up to half a minute or more.
Checking Operation Status and Sync using SCPI Commands
The :STATus:OPERation:RUN? SCPI command returns the status of all pattern generators, error detectors and clock generator. Query the desired hardware component using the identifier (for example, ‘M1.DataOut1’).
The :STATus:INSTrument:SLOSs? SCPI command is a query that indicates the status of the error detector synchronization. This query returns either true (1) if all error detectors are synchronized, or false (0) if the error detectors are not synchronized.
28 Keysight M8070A Programming Guide

Reading the M8020A/M8030A/M8040A’s Status

Reading the M8020A/M8030A/M8040A’s Status - Concepts

The M8020A/M8030A/M8040A has a set of status registers that you can use to monitor the status of the hardware, software and any running tests.
Overview of Registers
Specifically, it has the following registers:
• Status Byte The Status Byte is a single register that stores the events occurring in the other registers.
• Standard Event Status Register The Standard Event Status Register monitors some non-critical errors and basic operations.
• Questionable Data Status Register The bits in the Questionable Data Status Register are set when certain events occur in the M8020A/M8030A/M8040A that can lead to questionable results.
• Operation Status Register The Operation Status Register indicates when certain operations have been completed.
Recommended Programming Techniques 2
How the M8020A/M8030A/M8040A Uses Status Registers
You can determine the state of certain instrument hardware and firmware events and conditions by programming the status register system.
The following subsections provide you with details about the M8020A/M8030A/M8040A's status system.
Overview of the M8020A/M8030A/M8040A’s Status System
The M8020A/M8030A/M8040A has status reporting features that give important information about events and conditions within the instrument. For example, a flag may be set to indicate the end of a measurement or perhaps a command error. To access this information, it is necessary to query a set of registers using SCPI.
Keysight M8070A Programming Guide 29
2 Recommended Programming Techniques
M8020A/M8030A/M8040A Status System Structure
Status Register Group Model
The M8020A/M8030A/M8040A's status system is comprised of multiple registers that are arranged in a hierarchical order. The lower-level status registers propagate their data to the higher-level registers in the data structures by means of summary bits. The Status Byte register is at the top of the hierarchy and contains general status information for the M8020A/M8030A/M8040A's events and conditions. All other individual registers are used to determine the specific events or conditions.
Figure 9 on page -30 illustrates the typical structure of a status register.
The M8020A/M8030A/M8040A instrument status register model follows the structure described in IEEE 488.2, section 11.4.2.
Figure 9 Status register structure
A condition is a device state which is either TRUE or FALSE. A condition register reflects these states in its condition bits.
A Condition Register is embedded in a register structure consisting of Transition Filters, an Event Register and an Event Enable Register.
30 Keysight M8070A Programming Guide
Recommended Programming Techniques 2
This register is read by the CONDition? SCPI commands.
Transition Filters: A positive transition filter allows an event to be reported when a condition changes from false to true. A negative transition filter allows an event to be reported when a condition changes from true to false. Setting both positive and negative filters true allows an event to be reported anytime the condition changes. Clearing both filters disables event reporting.
This register is set and read by the NTRansition[?] and PTRansition[?] SCPI commands.
Event Register: An event register latches transition events from the condition register as specified by the positive and negative transition filters. Bits in the event register are latched and once set, they remain set until cleared by either querying the register contents or sending the *CLS command.
This register is read by the EVENt? SCPI commands.
Event Enable Register: An enable register specifies the bits in the event register that can generate a summary bit. Summary bits are, in turn, used by the next higher register.
This register is set and read by the ENABle[?] SCPI commands.
The registers work together as follows: 1The Condition Register corresponds to a condition on the hardware or
in the software. If the monitored condition is present, the corresponding bit is high.
2The Transition Registers monitor changes in the Condition Register. If
the Positive Transition Register is configured to watch for a condition, when this condition occurs and the bit in the Condition Register goes high, the Positive Transition Register passes this event to the Event Register.
3 If this bit is enabled in the Event Enable Register, a summary bit is
generated in the next higher register. For the higher register, this is the Condition Register and the event is handled the same way as described here.
Keysight M8070A Programming Guide 31
2 Recommended Programming Techniques

M8020A/M8030A/M8040A Status Reporting Structure

Figure 10 on page -32 shows the M8020A/M8030A/M8040A’s status
reporting structure.
Figure 10 Status reporting structure
32 Keysight M8070A Programming Guide
Status Byte
Recommended Programming Techniques 2
The Status Byte is the summary register to which the other registers report. Each reporting register is assigned a bit in the Status Byte Register.
The bits in the Status Byte byte have the following meaning:
Table 4 Status byte descriptions
Bit Mnemonic Description
0 Not used
1 Not used
2 EAV Error available: the error queue contains at
least one message.
3 QUES A bit has been set in the Questionable Data
Status register (indicates that a signal is of questionable quality).
4 MAV Message available: There is at least one
message in the message queue.
5 ESB A bit in the Standard Event Register has
been set.
6 RQS ReQuest Service.
7 OPER A bit in the Operation Status Register has
been set.
Keysight M8070A Programming Guide 33
2 Recommended Programming Techniques
Standard Event Status Register
The Standard Event Status register provides general-purpose information about the instrument. It sets bit 5 in the Status Byte.
Table 5 Standard event status register descriptions
Bit Mnemonic Description
0 Operation Complete Operation Complete bit. It is set in response
1 Request Control Request Control bit.
2 Query Error Query error bit. It indicates that there is a
3 Device Dependent Error Device-dependent error bit. It is set when an
4 Execution Error Execution error bit. It is set when a
5 Command Error Command error bit. It is set whenever the
6 User Request User Request bit.
7 Power On Power-on bit. It is set each time the
to the *OPC command, but only if the instrument has completed all its pend ing operations.
problem with the output data queue. There has been an attempt to read the queue when it is empty, the output data has been lost, or the query command has been interrupted.
instrument-specific error has occurred.
command (GPIB instrument specific) cannot be executed due to an out of range parameter or some instrument condition that prevents execution.
instrument detects an error in the format or content of the program message (usually a bad header, missing argument, or wrong data type etc.).
instrument is powered from off to on.
34 Keysight M8070A Programming Guide
Questionable Status Register
The Questionable Status Register indicates that a currently running process is of questionable quality. The output of this register sets bit 3 of the Status Byte.
Table 6 Questionable status register descriptions
Bit Mnemonic Description
0 - 8 Not used
Recommended Programming Techniques 2
9 INSTrument This bit indicates the status of certain
10 Not used
11 PROTection This bit indica tes whether one or more of the
12 SYMBol This bit indicates whether the error
13 - 15 Not used
Operation Status Register
The output of this register gives information about the current operation the instrument is performing. It sets bit 7 of the Status Byte.
Table 7 Operation status register descriptions
Bit Mnemonic Description
0 - 7 Not used
8 RUN
9 - 15 Not used
hardware components.
instrument outputs detect an overload condition.
detector(s) has experienced a symbol alignment loss.
Keysight M8070A Programming Guide 35
2 Recommended Programming Techniques

Working with Patterns

Patterns can be accessed with a program and are stored in three different areas:
1 Local to current setting (“current:”) 2 Shared between settings (“shared:”) 3 Factory supplied standard patterns (“factory:”). These patterns are read
only and cannot be modified.
Below these root nodes is a folder structure using ‘/’ as a separation character. So a complete pattern name might be something like “factory:SATA/LTDP-short”.
Patterns consist of a sequence of symbols. A symbol has a coding: 1 Binary (“Bit”) 2 8b10b (“B8B10”) 3 128/130 (“B128B130”) 4 128/132 (“B128B132”)
A symbol can have additional attributes to modify behavior. All symbols support:
1 Mask: this attribute affects DataIn locations only. It specifies if the
symbol is actually compared or masked (excluded from compare).
2 Squelch: this attribute affects DataOut locations only. If this attribute is
1, a squelch (out of band) level is used.
In addition, there are coding specific attributes, to control aspects of the coding such as bypassing or using a scrambler. Refer to
:DATA:PATTern:I DATa[?] on page 474 for more information.
The :DATA:PATTern:USE SCPI command is used to specify the patterns and attributes. Refer to :DATA:PATTern:USE[?] on page 473 for details on how to specify a pattern and set up its parameters. The parameters include the pattern name, number of symbols, symbol coding (optional), mask (optional) and squelch (optional).
36 Keysight M8070A Programming Guide

Symbol Coding Descriptions

Bit Coding
To encode a bit coded (binary) symbol 1, 2, or 3 bits are needed. This depends on the use of mask and squelch.
Table 8 Plain bit coding without using mask or squelch
Bit Offset/Range Bit (range) Name Description
0 Data Data bit
Table 9 Mask is used
Bit Offset/Range Bit (range) Name Description
0 Data Data bit
1 Mask Mask (ignored on DataOut)
Recommended Programming Techniques 2
Table 10 Squelch is used
Bit Offset/Range Bit (range) Name Description
0 Data Data bit
1 Squelch Squelch (ignored on DataIn)
Table 11 Mask and squelch are used
Bit Offset/Range Bit (range) Name Description
0 Data Data bit
1 Mask Mask (ignored on DataOut)
2 Squelch Squelch (ignored on DataIn)
Keysight M8070A Programming Guide 37
2 Recommended Programming Techniques
Table 12 Error is used
Bit Offset/Range Bit (range) Name Description
0 Data Data bit
1 Error Error (ignored on DataOut, ignored on
DataIn)
38 Keysight M8070A Programming Guide
8b10b Coding
To encode an 8b10b symbol 16 bits (2 bytes) are used.
Table 13 8b10b coding
Recommended Programming Techniques 2
Bit Offset/Range Bit (range) Name Description
7:0 Data Symbol data
8 K/D 0 = D-character, 1 = K-character
9 Reserved for future use. Must be set
to 0
10 Mask Mask (if present, ignored on DataOut)
11 Squelch Squelch (if present, ignored on
DataIn)
12 Enable scrambler Enable scrambler (ignored on DataIn)
13 Pause scrambler Pause scrambler (ignored on DataIn)
14 Reset scrambler Reset scrambler (ignored on DataIn)
15 Start of Frame Start of Frame (ignored on DataOut)
Table 14 Variant for captured pattern
Bit Offset/Range Bit (range) Name Description
7:0 Data Symbol data
8 K/D 0 = D-character, 1 = K-character
9 Reserved for future use. Must be set
to 0
10 Error Error (ignored on DataOut, ignored on
DataIn)
15:11 Squelch Reserved for future use. Must be set
to 0
Keysight M8070A Programming Guide 39
2 Recommended Programming Techniques
128/130 Coding
To encode 128/130 symbol 144 bits (18 bytes) are used.
Table 15 128/130 coding
Bit Offset/Range Bit (range) Name Description
1:0 Framing Framing bits
129:2 Data Data
130 Mask Mask (if present, ignored on DataOut)
131 Squelch Squelch (if present, ignored on
132 Reset Scrambler Reset scrambler (ignored on DataIn)
133 Pause scrambler Pause scrambler (ignored on DataIn)
134 Bypass scrambler Scrambler bypass
135 Bypass byte 0 scrambler Scrambler bypass byte 0
136 Do DC balancing Do DC balancing (ignored on DataIn)
137 Reset DC balancing Reset DC balancing (ignored on
138 Send scrambler state Send scrambler state
139 Reset Parity Reset Parity (ignored on DataIn)
140 Pause Parity Pause Parity (ignored on DataIn)
141 Start of Frame Start of Frame (ignored on DataOut)
143:142 Reserved for future use. Must be set
DataIn)
DataIn)
to 0
40 Keysight M8070A Programming Guide
128/132 Coding
To encode a 128/132 symbol 144 bits (18 bytes) are used.
Table 16 128/132 coding
Bit Offset/Range Bit (range) Name Cod ing-128/132 content
3:0 Framing Framing bits
131:4 Data Data
132 Mask Mask (if present, ignored on DataOut)
Recommended Programming Techniques 2
133 Squelch Squelch (if present, ignored on
DataIn)
134 Reset Scrambler Scrambler reset (ignored on DataIn)
135 Pause Scrambler Scrambler pause (ignored on DataIn)
136 Bypass Scrambler Scrambler bypass
137 Bypass Byte 0 Scrambler Scrambler bypass byte 0
138 Do DC Balancing Do DC balancing (ignored on DataIn)
139 Reset DC Balancing Rest DC balancing (ignored on DataIn)
140 Send Scrambler State Send scrambler state (ignored on
DataIn)
141 Reset Parity Reset parity (ignored on DataIn)
142 Pause Parity Pause parity (ignored on DataIn)
143 Start of Frame Start of frame (ignored on DataOut)
Keysight M8070A Programming Guide 41
2 Recommended Programming Techniques

Symbol Sequences

When combining symbols to a sequence of symbols they are filled in one after the other without any gaps. For the non-bit codings that use multiple bytes, the symbols naturally start again on a byte boundary. For the bit codings (binary) they start at the next available bit. Bits are used in a fashion that allows reading from “left to right”. This means the symbol bit 0 is encoded as bit 7 in a byte.
Figure 11 Example 1: plain bit coding
Figure 12 Example 2: mask and squelch bit coding
42 Keysight M8070A Programming Guide

Creating Pattern Sequences

Sequence Editor

Recommended Programming Techniques 2
Figure 13 Example 3: 8b10b coding
A pattern sequence is configured using a language. The pattern sequence language is based on XML.
Pattern sequences are created and edited using the Sequence Editor in the M8070A software interface as shown in Figure 14 on page -43.
Figure 14 Sequence Editor in M8070A software interface
Keysight M8070A Programming Guide 43
2 Recommended Programming Techniques
A default “Generator” and “Analyzer” sequence are configured in the Sequence Editor as shown in Figure 14 on page -43. You can edit these sequences or create new ones.
As a pattern sequence is being configured, the corresponding XML elements are generated and can be viewed in the XML editor by clicking on the <Xml> button shown in Figure 15 on page -44.
Figure 15 <Xml> button
Figure 16 on page -44 shows the XML elements for the default Generator
and Analyzer. Clicking the UI button will return to the graphical interface.
Figure 16 XML view
In UI view, click in a pattern sequence block to display its sequence settings as shown in Figure 17 on page -45.
44 Keysight M8070A Programming Guide
Figure 17 Sequence settings

Pattern Sequence Building Blocks

Recommended Programming Techniques 2
Minimal Sequence
A minimalistic sequence looks like the following:
<?xml version="1.0" encoding="utf-16"?> <sequenceDefinition
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.agilent.com/schemas/M8000/DataSequence">
</sequenceDefinition>
This sequence generates a 0 signal to all assigned locations.
Description
To specify a description for the sequence, insert the following:
<description>Default 2^7-1 PRBS Sequence</description>
Version Number
To specify a version number for the sequence syntax, insert the following:
<version>1.0.0</version>
Keysight M8070A Programming Guide 45
2 Recommended Programming Techniques
Symbol Width
Pattern Generation Granularity
To specify the symbol encoding this sequence works with, insert the following:
<symbolWidth>1</symbolWidth>
Available symbol widths are:
1: this is for bit coded symbols
10: this is for 8b/10b coded and bit coded symbols
130: for 128/130 coded and bit coded symbols
132: for 128/132 coded and bit coded symbols
Pattern generation has granularity. A single bit cannot be generated. Instead, multiple bits are generated at once. Compared to other BERTs like the J-BERT N4903B, different granularities are supported to allow for less restrictions in the pattern generation. Also, granularity is hidden as much as possible by unrolling patterns internally.
Table 17 Pattern generation granularity
Symbol Width Granularity
1 64
10 80
130 130
132 132
The actual pattern sequence attributes are specified within:
<sequence replicate=”Serialize”></sequence>
Replicate allows global selection of how to distribute PRBS or memory patterns to multiple locations.
• Serialize: first bit/symbol is assigned to first location, next bit/symbol to next location and so on. This means a pattern needs to have a minimum block length * locations bits. In the case of a PRBS, a PRWS is issued, setting the phases of the PRBS generators in a way that they will form a PRBS after a MUX.
• Copy: each location gets a copy of the PRBS /pattern.
46 Keysight M8070A Programming Guide
Blocks and Loops
The basic building blocks of a sequence are blocks and loops.
A block is the basic unit of a sequence. Here patterns are assigned to locations or branches and are specified to other blocks. A block transitions to the next as a default action. But it also might be enclosed in a loop. Nested loops are also possible. There are three counted loop levels plus an infinite loop level:
• Loop level 1 can be used to repeat a block.
• Loop level 2 and 3 can span multiple blocks, but it must be ensured that either the start or end of a loop is on a fresh block.
• Loop level 4 is for infinite loops.
The following illustrates valid loop nesting with the full 4 loop levels:
Recommended Programming Techniques 2
Figure 18 Loop nesting
Count attribute specifies the number of loop iterations. The valid value range is 1 to 232. If omitted, infinite is assumed. The enabled attribute allows the complete loop, including all loop content, to be temporarily disabled. If omitted, the default is enabled.
<loop count="1" enabled="1"></loop>
Keysight M8070A Programming Guide 47
2 Recommended Programming Techniques
Length Attribute
Synchronization and Loop Block
Pattern Selection
The length attribute specifies the “length” of the block in number of bits. The enabled attribute allows the block to be temporarily disabled (ignored). If omitted, the default is enabled.
<block length="1" enabled="1"></block>
A special combination of sync and loop is available for achieving synchronization:
<syncAndLoopBlock length="100" enabled="1"></syncAndLoopBlock>
Other attributes for block or syncAndLoopBlock: 1 name: for naming a block. 2 cdr: for freezing CDR when CDR control is “sequence”. 3 errorInsertion: for suppressing error insertion. 4 disparity: for setting the disparity in 8b10b coding. 5 startWordAlign: for initiating a word alignment in 8b10b and 128/130
coding. In the syncAndLoopBlock this flag is used for the initial block only, not for the looped block.
Within a block or syncAndLoopBlock, select the type of patterns to use. The choices are clock, pulse, Prbs, static and memory pattern. The XML elements for pattern selection are as follows:
<prbs polynomial="2^7-1" seed="127" invert="0" replicate="Serialize"
enabled="1"></prbs>
<pattern source="factory:SATA/LTDP-short_b8b10"
replicate="Serialize" enabled="1"></pattern>
<static value="0" compare="1"/> <pulse offset="0" width="10" compare="1" squelch="1"/> <clock divider="2" compare="1"/>
<linkTraining direction="up"/>
48 Keysight M8070A Programming Guide

Sequencer Triggers

NOTE
Recommended Programming Techniques 2
Trigger output pulses can be generated and controlled from sequence blocks. These pulses are sent to the front panel TRIG OUT connectors.
This requires that the trigger mode be set to sequencer controlled. The following describes how to change the trigger mode.
1 In the M8070A software interface, select System > Module View. 2Click on Trig Out. 3 Under Configuration parameters, change Operating Mode to
Sequencer Controlled.
Refer to :OUTPut:TRIGger:MODE[?] on page 226 for information about setting the trigger mode using this SCPI command.
Two variants are available: 1 A trigger pulse can be generated relative to a sequence block. 2 A trigger pulse can be generated whenever a specific bit sequence is
generated by a PRBS generator.
This is controlled via nodes within a block node.
If multiple sequences are used, only one sequence can actually have control of the trigger.
Triggering Relative to a Sequence Block
The following is an example of a trigger pulse relative to a sequencer block:
<trigger>
<pulse offset="0" width="32"/>
</trigger>
The offset can be omitted and defaults to 0. The width can also be omitted and defaults to 32.
Keysight M8070A Programming Guide 49
2 Recommended Programming Techniques
Triggering Based on Specific Bit Sequence

Block Branching

The following is an example of a trigger pulse generated based on a specific PRBS bit sequence:
<trigger> <pulseOnPrbsMatch width="32" matchPattern="0000000"
polynomial="2^7-1" seed="127" invert="0"/>
</trigger>
All attributes can be omitted. The width defaults to 32. The match pattern defaults to all 0’s or all 1’s depending on the invert attribute. The polynomial defaults to the polynomial used by the generators or analyzers. Invert also defaults to the PRBS invert setting of the generators or analyzers.
Within a block a conditional branch to another block can be done. The most simple form is as follows:
<if source="Break"</if>
This example simply jumps to the next block when a break command is done. The following describes how to set up a break command.
1 In the M8070A software interface, select Patterns > Sequence Editor. 2Under the Block Branches settings, change Condition to Break.
Refer to :DATA:SEQuence:BREak on page 484 for information on setting the break command using this SCPI command.
When a branch to a different block is desired, use the “goto” attribute: 1 In the M8070A software interface, select Patterns > Sequence Editor. 2Under the Block Branches settings, click in the Go To Block field and
enter the block name.
Other potential conditions are SysInA, SysInB, CtrlInA, or CtrlInB. Break, SysInA and SysInB are global events and affect all locations of a sequence. CtrlInA and CtrlInB are local to a module and are most suitable when all locations of a sequence are using a single module.
50 Keysight M8070A Programming Guide

Link Training Events

NOTE

Block Controls

Recommended Programming Techniques 2
It is also possible to specify a reaction based on a static level or a transition. Using the “event” attribute, you can select “low”, “high”, “positiveEdge” and “negativeEdge”.
1 In the M8070A software interface, select Patterns > Sequence Editor. 2Under the Block Branches settings, change Transition to Positive,
Negative, Static High, or Static Low.
Link Training Target State: indicates that the Link Training is in the target state (that is loopback)
<if source="LinkTrainingTargetState"</if>
Link Training Detect State: indicates that the Link Training is in the detect state (that is the reset state)
<if source="LinkTrainingDetectState"</if>
Link Training Error: indicates that an error occurred when trying to bring up the link (that is Link Training reached the target state but not the target speed)
<if source="LinkTrainingError"</if>
Within a block it can be specified to generate a signal on CTRL OUT A, SYS OUT A, or SYS OUT B front panel connector. This can be useful for triggering an external device such as an oscilloscope or to generate auxiliary signals such as a laser enable signal. However, be aware that there is no specified timing relationship to the DataOut.
<control sink="CtrlOutA" sinkLocation="M1" value="pulse"/>
In a two module configuration, the sinkLocation attribute is used to specify on what module the CTRL OUT A signal is generated.
The shape of the signal is specified with the value attribute. It can be a static 0, static 1, or a pulse.
SysOutA and SysOutB are internally controlled from the Trigger Sequencer.
Therefore, these signals can only be used in the same sequence where the trigger out is controlled.
Keysight M8070A Programming Guide 51
2 Recommended Programming Techniques
NOTE
Global Block Controls
CtrlOutA can only be used if it is not currently being used by the global block controls.
Global block controls are used to set up global routing of signals. Signals can be routed to the CTRL OUT A front panel connector only.
One common use could be for generating a pulse on CTRL OUT A whenever an error on the M1.DataIn1 or M1.DataIn2 of the corresponding module occurs:
<controls>
<control sink="CtrlOutA" source="Error"
sourceLocation="M1.DataIn1"/>
</controls>
With the additional “signalShape” attribute, it can be selected if a 0/1 pulse is generated whenever an error occurs.
52 Keysight M8070A Programming Guide

Coding Configuration

Various aspects of coding can be configured. This is done with the
<codingConfigurations> node. It is inserted just before the <symbolWidth>
node. Within this node the 8b10b specific attributes are configured in a
<b8b10> node. The align symbol is configured with an optional attribute. If
not specified the default align symbol is K28.5. Also, you can specify a substitution symbol in an attribute that is inserted into the received data stream when an invalid code word is recognized. The default for this is K28.0. So the complete node would look like the following:
<b8b10 align="K28.5" substitution="K28.0">
And can be shortened to the following:
<b8b10>
Up to four filler primitives can be specified. Each filler primitive can consist of up to 4 symbols, where a symbol can be any valid 8b10b symbol or a ‘*’ that is used as a wildcard matching any symbol.
A filler symbol specification looks like the following:
<fillerPrimitive symbol1="K28.1" symbol2="K28.1"/>
USB 3.0
Recommended Programming Techniques 2
After specifying a filler primative, various aspects of the (de)scrambler can be configured with the <scrambler> node. With the polynomial attribute the USB/PCIe or SATA polynomial can be selected. The reset value for the scrambler and the reset value for the scrambler after a hold sequence can be configured with the resetValue and resetValueAfterHold attribute. In addition, it can be specified if the scrambler is reset after a filler primitive was removed with the resetAfterFillerRemove attribute. All these nodes are optional, with defaults suitable for USB testing. If just <scrambler> node is given without attributes, it is equivalent to the following:
<scrambler polynomial="USB/PCIe" resetValue="65515"
resetValueAfterHold="6143" resetAfterFillerRemove="false">
Within the scrambler node, sequences of up to 4 symbols can be configured that control the scrambler when they are seen in the incoming data stream. With resetPrimitive the scrambler is reset, with holdPrimitive it is paused and with pauseStartPrimitive it is paused until a pauseEndPrimitive is seen.
The following are examples for the different standards.
<codingConfigurations>
<b8b10>
<fillerPrimitive symbol1="K28.1" symbol2="K28.1"/>
<scrambler>
<resetPrimitive symbol1="K28.5"/>
</scrambler>
</b8b10>
</codingConfigurations>
Keysight M8070A Programming Guide 53
2 Recommended Programming Techniques
PCIe 1/2
SATA
<codingConfigurations>
<b8b10>
<fillerPrimitive symbol1="K28.5" symbol2="K28.0"/>
<fillerPrimitive symbol1="K28.0"/>
<scrambler>
<resetPrimitive symbol1="K28.5"/>
</scrambler>
</b8b10>
</codingConfigurations>
<codingConfigurations>
<b8b10>
<fillerPrimitive symbol1="K28.5" symbol2="D10.2" symbol3="D10.2"
symbol4="D27.3"/>
<fillerPrimitive symbol1="K28.0"/>
<scrambler polynomial="SATA" resetValue="61686"
resetValueAfterHold="30349">
<resetPrimitive symbol1="K28.3" symbol2="D21.5" symbol3="D23.1"
symbol4="D23.1"/>
<holdPrimitive symbol1="K28.3" symbol2="*" symbol3="*"
symbol4="*"/>
<pauseStartPrimitive symbol1="K28.3" symbol2="D10.5"
symbol3="D25.4" symbol4="D25.4"/>
<pauseEndPrimitive symbol1="K28.3" symbol2="*" symbol3="*"
symbol4="*"/>
</scrambler>
</b8b10>
</codingConfigurations>
54 Keysight M8070A Programming Guide
MIPI Phy
SAS
Recommended Programming Techniques 2
<codingConfigurations>
<b8b10>
<fillerPrimitive symbol1="K28.1"/>
</b8b10>
</codingConfigurations>
<codingConfigurations>
<b8b10>
<fillerPrimitive symbol1="K28.5" symbol2="D10.2" symbol3="D10.2"
symbol4="D27.3"/>
<fillerPrimitive symbol1="K28.5" symbol2="D7.0" symbol3="D7.0"
symbol4="D7.0"/>
<fillerPrimitive symbol1="K28.5" symbol2="D1.3" symbol3="D1.3"
symbol4="D1.3"/>
<fillerPrimitive symbol1="K28.5" symbol2="D27.3" symbol3="D27.3"
symbol4="D27.3"/>
</b8b10>
</codingConfigurations>
Keysight M8070A Programming Guide 55
2 Recommended Programming Techniques

Link Training Configuration

Link Training Configuration describes the parameters controlling the LTSSM (Link Training and Status State Machine). In the first release it is only defined and implemented for PCI Express 3.0. This is done with the
<linkTrainingConfigurations> node. It is inserted just before the <codingConfigurations> node. The following parameters can be
configured as attributes.
Table 18 Link Training Configuration
Name Possible Values Default Value Description Used for DUT
DUT Type AddInCard
Link Equalization
SystemBoard
Bypass PresetsOnly Full
Lane Number 0 - 15 0 This is the lane number
Link Number 0 - 255 0 This is the link number
Start Preset P0 - P9 P4 This is the preset used by
AddInCard Specifies which role the DUT
should play during link training. It can either be an upstream device for testing a downstream port or vice versa.
Bypass Determines whether link
equalization should be performed. It can either be aborted after phase 1 (Bypass) or fully executed. In the second case it can be determined whether only preset or all (that is, individual cursor) requests should be accepted.
being used.
being used.
the BERT’s TX port after switching to Gen 3 operation and when operating as an upstream device.
Type
Both
Both
Both
Add-in Card
Add-in Card
56 Keysight M8070A Programming Guide
Recommended Programming Techniques 2
Name Possible Values Default Value Description Used for DUT
DUT Preset Hint
DUT Initial Preset
DUT Target Preset
User Calibrated Presets
-6 dB
-7 dB
-8 dB
-9 dB
-10 dB
-11 dB
-12 dB Reserved
P0 - P9 P0 This is the preset the BERT
P0 - P9 P0 This is the preset the BERT
True False
Reserved This is the preset hint being
sent by the BERT to the DUT during phase 0 of the link equalization procedure. This is only used when the BERT operates as an upstream device.
transfers to the DUT in phase 0 of the link equalization procedure. This is only used when the BERT operates as an upstream device.
requests the DUT to switch to during link equalization. Dependent on the role the BERT is playing, this is done in either phase 2 or 3 of the link equal ization training.
False BERT's TX port should use
user-calibrated presets or standard presets during link training. If not specified standard presets are used.
Type
Add-in Card
Add-in Card
Both
Both
The following is an example of a Link Training Configuration for PCIe 3.0:
<linkTrainingConfigurations>
<pcie3 dut="AddInCard" lane="0" link="0"
linkEQ="PresetsOnly" generatorStartPreset="P4" dutRxPresetHint="Reserved" dutTxInitialPreset="P0" dutTxTargetPreset="P7" calibratedPresets="true" />
</linkTrainingConfigurations>
Keysight M8070A Programming Guide 57
2 Recommended Programming Techniques

Downloading Pattern Sequence to Hardware

Once a sequence has been configured, it is downloaded to the hardware using the download button in the Sequence Editor shown in Figure 19 on page -58. When the sequence has been downloaded, this button turns green.
Figure 19 Download button
You can also download the pattern sequence configuration by copying and pasting the XML elements as a sequence string using the :DATA:SEQuence:VALue SCPI command. For an example, refer to
:DATA:SEQuence:VALue[?] on page 483.
58 Keysight M8070A Programming Guide
Keysight M8070A System Software for M8000 Series of BER Test Solutions
Programming Guide
3 Programming
Examples
Introduction / 60 Initializing the Connection / 60 SJ Example / 62 PJ E xa mp l e / 68 Sampling Point Alignment Example / 74 BER Example / 78 M8070A Jitter Tolerance Measurement CSV Output / 83
3 Programming Examples

Introduction

Initializing the Connection

N4903B Initialization

This chapter provides programming examples for setting up some of the most common functions including:
• Initialization
•SJ
•PJ
• Sampling point alignment
•BER
If you have programmed the N4903B, examples are provided for comparison to the M8020A. This will facilitate code conversion from the N4903B to the M8020A.
The ResourceName ("TCPIP1::10.0.0.207::inst0::INSTR") must be replaced by the instrument's address string from the VISA Assistant. ' First our declarations...
Private myN490X As AgilentN490x Private myBERT As AgilentBert Private myPG As AgilentBertLib.IAgilentBertPG Private myPGClock As AgilentBertLib.IAgilentBertPGClock Private myPGOut As AgilentBertLib.IAgilentBertPGOutput Private myEDDataIn As AgilentBertLib.IAgilentBertEDDataIn Private Sub Form_Load() Set myN490X = New AgilentN490x Set myBERT = myN490x.IAgilentBert myBERT.Initialize ("TCPIP1::10.0.0.207::inst0::INSTR", True, True,"QueryInstrStatus=true") End Sub Private Sub Form_Unload(Cancel As Integer) myBERT.Close End Sub
60 Keysight M8070A Programming Guide

M8020A Initialization

using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace baseInstrument.instruments { class M8020A : BERT { private string m_PG_channel = "'M1.DataOut1'"; private string m_ED_channel = "'M1.DataIn1'"; private string m_system = "'M1.ClkGen'"; double m_ED_clk = 16.0e9; double m_PG_clk = 16.0e9; double m_prevBER = 0.0; double m_prevBitCount = 0.0; double m_prevErrorCount = 0.0; double m_prevTimeStamp = 0.0;
public M8020A(string resourceName, string module = "M1", string channel = "1") : base(resourceName) { if (module.IndexOf("MUX") == -1) { m_system = "'" + module + ".ClkGen'"; m_PG_channel = "'" + module + ".DataOut" + channel + "'"; m_ED_channel = "'" + module + ".DataIn" + channel + "'"; } else { m_system = "'M1.ClkGen'"; m_PG_channel = "'MUX'"; } }
Keysight M8070A Programming Guide 61
Programming Examples 3
3 Programming Examples
#region SJ public override bool getSJEnabled() // SOUR8:SIN? {
if ((int.Parse(this.Query(":SOUR8:SIN?"))) == 1) return true; else return false; }
public override double getSJFreq() // SOUR8:SIN:FREQ? { return double.Parse(this.Query(":SOUR8:SIN:FREQ?")); }
public override double getSJFreqMax() // SOUR8:SIN:FREQ? MAX { return double.Parse(this.Query(":SOUR8:SIN:FREQ? MAX")); }
public override double getSJFreqMin() // SOUR8:PER:FREQ? MIN { return double.Parse(this.Query(":SOUR8:SIN:FREQ? MIN")); }
public override List<string> setSJEnabled(bool b) // SOUR8:SIN 1 ==> ON // SOUR8:SIN 0 ==> OFF { string strValue = "";
if (b) strValue = "1"; else strValue = "0";
return this.Send(":SOUR8:SIN: " + strValue); }

SJ Example

N4903B SJ Example

62 Keysight M8070A Programming Guide
public override List<string> setSJFreq(double SJFreq) // SOUR8:SIN:FREQ { string strValue = "";
if ((this.getSJFreqMax() > SJFreq) && (this.getSJFreqMin() <= SJFreq)) strValue = SJFreq.ToString(); else strValue = this.getSJFreq().ToString();
return this.Send(":SOUR8:SIN:FREQ " + strValue); }
public override double getSJAmp() // SOUR8:SIN:LEV? { return double.Parse(this.Query(":SOUR8:SIN:LEV?")); }
public override double getSJAmpMax() // SOUR8:SIN:LEV? MAX { return double.Parse(this.Query(":SOUR8:SIN:LEV? MAX")); }
public override double getSJAmpMin() // SOUR8:SIN:LEV? MIN { return double.Parse(this.Query(":SOUR8:SIN:LEV? MIN")); }
public override List<string> setSJAmp(double SJAmp) // SOUR8:SIN:LEV { string strValue = "";
if ((this.getSJAmpMax() > SJAmp) && (this.getSJAmpMin() <= SJAmp)) strValue = SJAmp.ToString(); else strValue = this.getSJAmp().ToString();
return this.Send(":SOUR8:SIN:LEV " + strValue); } #endregion
Programming Examples 3
Keysight M8070A Programming Guide 63
3 Programming Examples
#region SJ - implemented for M8020A public override bool getSJEnabled() // M8020A { string str = ""; str = this.Query(":SOUR:JITT:LFR:PER:STAT? " + m_PG_channel);
if (str.IndexOf("1") != -1) return true; else return false; }
public override double getSJFreq() // M8020A { string retString = ""; double val = 0.0;
retString = this.Query(":SOUR:JITT:LFR:PER:FREQ? " + m_PG_channel); val = double.Parse(retString); return val; }
public override double getSJFreqMax() // M8020A { string retString = ""; double val = 0.0;
retString = this.Query(":SOUR:JITT:LFR:PER:FREQ? " + m_PG_channel + ",MAX"); val = double.Parse(retString); return val; }

M8020A SJ Example

64 Keysight M8070A Programming Guide
public override double getSJFreqMin()
// M8020A { string retString = ""; double val = 0.0;
retString = this.Query(":SOUR:JITT:LFR:PER:FREQ? " + m_PG_channel + ",MIN");
val = double.Parse(retString);
return val; }
public override List<string> setSJEnabled(bool b) // M8020A { string strValue = "";
if (b) strValue = "ON"; else strValue = "OFF";
return this.Send(":SOUR:JITT:LFR:PER:STAT " + m_PG_channel + "," + strValue); }
public override List<string> setSJFreq(double SJFreq) // M8020A { string strValue = "";
SJFreq = Math.Round(SJFreq, 3);
if ((this.getSJFreqMax() > SJFreq) && (this.getSJFreqMin() <= SJFreq)) strValue = SJFreq.ToString(); else if (this.getSJFreqMax() < SJFreq) strValue = this.getSJFreqMax().ToString(); else if (this.getSJFreqMin() > SJFreq) strValue = this.getSJFreqMin().ToString(); else strValue = this.getSJFreq().ToString();
return this.Send(":SOUR:JITT:LFR:PER:FREQ " + m_PG_channel + "," + strValue +"Hz"); }
Programming Examples 3
Keysight M8070A Programming Guide 65
3 Programming Examples
public override double getSJAmp() // M8020A { string retString = ""; string unit = ""; double val = 0.0;
unit = this.Query(":SOUR:JITT:LFR:UNIT? " + m_PG_channel);
this.Send(":SOUR:JITT:LFR:UNIT " + m_PG_channel + ",UINT");
retString = this.Query(":SOUR:JITT:LFR:PER:AMPL? " + m_PG_channel);
this.Send(":SOUR:JITT:LFR:UNIT " + m_PG_channel + "," + unit);
val = double.Parse(retString);
return val; }
public override double getSJAmpMax() // M8020A { string retString = ""; string unit = ""; double val = 0.0;
unit = this.Query(":SOUR:JITT:LFR:UNIT? " + m_PG_channel);
this.Send(":SOUR:JITT:LFR:UNIT " + m_PG_channel + ",UINT");
retString = this.Query(":SOUR:JITT:LFR:PER:AMPL? " + m_PG_channel + ",MAX");
this.Send(":SOUR:JITT:LFR:UNIT " + m_PG_channel + "," + unit);
val = double.Parse(retString);
return val; }
66 Keysight M8070A Programming Guide
public override double getSJAmpMin() // M8020A { string retString = ""; string unit = ""; double val = 0.0;
unit = this.Query(":SOUR:JITT:LFR:UNIT? " + m_PG_channel);
this.Send(":SOUR:JITT:LFR:UNIT " + m_PG_channel + ",UINT");
retString = this.Query(":SOUR:JITT:LFR:PER:AMPL? " + m_PG_channel + ",MIN");
this.Send(":SOUR:JITT:LFR:UNIT " + m_PG_channel + "," + unit);
val = double.Parse(retString);
return val; }
public override List<string> setSJAmp(double SJAmp) // M8020A { string strValue = ""; string unit = ""; double amp = 0.0;
if (m_PG_channel == "'MUX'") SJAmp /= 2.0; if ((this.getSJAmpMax() > SJAmp) && (this.getSJAmpMin() <= SJAmp)) amp = SJAmp; else amp = this.getSJAmp();
amp = Math.Round(amp, 3); strValue = amp.ToString();
unit = this.Query(":SOUR:JITT:LFR:UNIT? " + m_PG_channel);
this.Send(":SOUR:JITT:LFR:UNIT " + m_PG_channel + ",UINT");
this.Send(":SOUR:JITT:LFR:PER:AMPL " + m_PG_channel + "," + strValue);
return this.Send(":SOUR:JITT:LFR:UNIT " + m_PG_channel + "," + unit); } #endregion
Programming Examples 3
Keysight M8070A Programming Guide 67
3 Programming Examples
#region PJ public override bool getPJEnabled() // SOUR8:PER? { if ((int.Parse(this.Query(":SOUR8:PER?"))) == 1) return true; else return false; }
public override double getPJFreq() // SOUR8:PER:FREQ? { return double.Parse(this.Query(":SOUR8:PER:FREQ?")); }
public override double getPJFreqMax() // SOUR8:PER:FREQ? MIN MAX { return double.Parse(this.Query(":SOUR8:PER:FREQ? MAX")); }
public override double getPJFreqMin() // SOUR8:PER:FREQ? MIN MAX { return double.Parse(this.Query(":SOUR8:PER:FREQ? MIN")); }
public override List<string> setPJEnabled(bool b) // SOUR8:PER 1 ==> ON // SOUR8:PER 0 ==> OFF { string strValue = "";
if (b) strValue = "1"; else strValue = "0";
return this.Send(":SOUR8:PER: " + strValue); }

PJ Example

N4903B PJ Example

68 Keysight M8070A Programming Guide
public override List<string> setPJFreq(double PJFreq) // SOUR8:PER:FREQ
{ string strValue = "";
if ((this.getPJFreqMax() > PJFreq) && (this.getPJFreqMin() <= PJFreq)) strValue = PJFreq.ToString(); else if (this.getPJFreqMax() < PJFreq) strValue = this.getPJFreqMax().ToString(); else if (this.getPJFreqMin() > PJFreq) strValue = this.getPJFreqMin().ToString(); else strValue = this.getPJFreq().ToString();
return this.Send(":SOUR8:PER:FREQ " + strValue); }
public override double getPJAmp() // SOUR8:PER:LEV? { return double.Parse(this.Query(":SOUR8:PER:LEV?")); }
public override double getPJAmpMax() // SOUR8:PER:LEV? MAX { return double.Parse(this.Query(":SOUR8:PER:LEV? MAX")); }
public override double getPJAmpMin() // SOUR8:PER:LEV? MIN { return double.Parse(this.Query(":SOUR8:PER:LEV? MIN")); }
public override List<string> setPJAmp(double PJAmp) // SOUR8:PER:LEV { string strValue = "";
if ((this.getPJAmpMax() > PJAmp) && (this.getPJAmpMin() <= PJAmp)) strValue = PJAmp.ToString();
else strValue = this.getPJAmp().ToString();
return this.Send(":SOUR8:PER:LEV " + strValue); } #endregion
Programming Examples 3
Keysight M8070A Programming Guide 69
3 Programming Examples
#region PJ - as PJ1 implemented for M8020A
public override bool getPJEnabled() // M80820A - checked { string str = "";
str = this.Query(":SOUR:JITT:HFR:PER1:STAT? " + m_PG_channel);
if (str.IndexOf("1") != -1) return true; else return false; }
public override double getPJFreq() // M8020A - checked { string retString = ""; double val = 0.0;
retString = this.Query(":SOUR:JITT:HFR:PER1:FREQ? " + m_PG_channel);
val = double.Parse(retString);
return val; }
public override double getPJFreqMax() // M8020A - checked { string retString = ""; double val = 0.0;
retString = this.Query(":SOUR:JITT:HFR:PER1:FREQ? " + m_PG_channel + ",MAX");
val = double.Parse(retString);
return val; }

M8020A PJ Example

70 Keysight M8070A Programming Guide
public override double getPJFreqMin() // M8020A - checked { string retString = ""; double val = 0.0;
retString = this.Query(":SOUR:JITT:HFR:PER1:FREQ? " + m_PG_channel + ",MIN");
val = double.Parse(retString);
return val; }
public override List<string> setPJEnabled(bool b) // M8020A - checked { string strValue = "";
if (b) strValue = "ON"; else strValue = "OFF";
return this.Send(":SOUR:JITT:HFR:PER1:STAT " + m_PG_channel + "," + strValue); }
public override List<string> setPJFreq(double PJFreq) // M8020A - checked { string strValue = "";
PJFreq = Math.Round(PJFreq, 3);
if ((this.getPJFreqMax() > PJFreq) && (this.getPJFreqMin() <= PJFreq)) strValue = PJFreq.ToString(); else if (this.getPJFreqMax() < PJFreq) strValue = this.getPJFreqMax().ToString(); else if (this.getPJFreqMin() > PJFreq) strValue = this.getPJFreqMin().ToString(); else strValue = this.getPJFreq().ToString();
return this.Send(":SOUR:JITT:HFR:PER1:FREQ " + m_PG_channel + "," + strValue + "Hz"); }
Programming Examples 3
Keysight M8070A Programming Guide 71
3 Programming Examples
public override double getPJAmp()
// M8020A - checked { string retString = ""; string unit = ""; double val = 0.0;
unit = this.Query(":SOUR:JITT:HFR:UNIT? " + m_PG_channel);
this.Send(":SOUR:JITT:HFR:UNIT " + m_PG_channel + ",UINT");
retString = this.Query(":SOUR:JITT:HFR:PER1:AMPL? " + m_PG_channel);
this.Send(":SOUR:JITT:HFR:UNIT " + m_PG_channel + "," + unit);
val = double.Parse(retString);
return val; } public override double getPJAmpMax() // M8020A - checked { string retString = ""; string unit = ""; double val = 0.0;
unit = this.Query(":SOUR:JITT:HFR:UNIT? " + m_PG_channel);
this.Send(":SOUR:JITT:HFR:UNIT " + m_PG_channel + ",UINT");
retString = this.Query(":SOUR:JITT:HFR:PER1:AMPL? " + m_PG_channel + ",MAX");
this.Send(":SOUR:JITT:HFR:UNIT " + m_PG_channel + "," + unit);
val = double.Parse(retString);
return val; } public override double getPJAmpMin() // M8020A - checked { string retString = ""; string unit = ""; double val = 0.0;
unit = this.Query(":SOUR:JITT:HFR:UNIT? " + m_PG_channel);
this.Send(":SOUR:JITT:HFR:UNIT " + m_PG_channel + ",UINT");
retString = this.Query(":SOUR:JITT:HFR:PER1:AMPL? " + m_PG_channel + ",MIN");
this.Send(":SOUR:JITT:HFR:UNIT " + m_PG_channel + "," + unit);
val = double.Parse(retString);
return val; }
72 Keysight M8070A Programming Guide
Programming Examples 3
public override List<string> setPJAmp(double PJAmp) // M8020A - checked { string strValue = ""; string unit = ""; double amp = 0.0;
if (m_PG_channel == "'MUX'") PJAmp /= 2.0;
if ((this.getPJAmpMax() > PJAmp) && (this.getPJAmpMin() <= PJAmp)) amp = PJAmp; else amp = this.getPJAmp();
amp = Math.Round(amp, 3); strValue = amp.ToString();
unit = this.Query(":SOUR:JITT:HFR:UNIT? " + m_PG_channel);
this.Send(":SOUR:JITT:HFR:UNIT " + m_PG_channel + ",UINT");
this.Send(":SOUR:JITT:HFR:PER1:AMPL " + m_PG_channel + "," + strValue);
return this.Send(":SOUR:JITT:HFR:UNIT " + m_PG_channel + "," + unit); } #endregion
Keysight M8070A Programming Guide 73
3 Programming Examples
public bool checkN900() { return m_N4900; }
# region Sampling Point Alignment
public override string autoAlign() { string result = "";
this.Send(":SENS1:EYE:ALIGN:AUTO 1"); this.opc(); do { result = this.Query(":SENS1:EYE:ALIGN:AUTO?"); } while ((result != "CS_ABORTED") && (result != "CS_FAILED") && (result != "CS_SUCCESSFUL")); return result; }
public override string dataCenter() { string result = "";
this.Send(":SENS1:EYE:TCEN 1"); this.opc(); do { result = this.Query(":SENS1:EYE:ALIGN:AUTO?"); } while ((result != "CS_ABORTED") && (result != "CS_FAILED") && (result != "CS_SUCCESSFUL")); return result; }
public override string thresholdCenter() { string result = "";
this.Send(":SENS1:EYE:ACEN 1"); this.opc(); do { result = this.Query(":SENS1:EYE:ALIGN:AUTO?"); } while ((result == "CS_ABORTED") || (result == "CS_FAILED") || (result == "CS_SUCCESSFUL")); return result; }

Sampling Point Alignment Example

N4903B Sampling Point Alignment Example

74 Keysight M8070A Programming Guide
public override List<string> sync() { return this.Send(":SENS1:SYNC 1"); }
# endregion
#region sampling point public override List<string> setSamplingPointDelay(double x) { return this.Send(":INP1:DEL " + x.ToString()); }
public override double getSamplingPointDelay() { string str = ""; double delay = 0.0;
str = this.Query(":INP1:DEL?"); delay = double.Parse(str); return delay; }
public override List<string> setSamplingPointDelayRel(double x) { double current = 0.0;
current = this.getSamplingPointDelay(); x += current;
return setSamplingPointDelay(x); } #endregion
Programming Examples 3
Keysight M8070A Programming Guide 75
3 Programming Examples
public override string autoAlign() { string result = "";
/* * do { result = this.Query(":STATus:OPERation:RUN:EVENt?"); } while ((int.Parse(result) % 2) == 0); */
this.Send(":INP:ALIG:EYE:AUTO " + m_ED_channel); this.opc();
/* do { result = this.Query(":INP:ALIG:EYE:RES:DEL? " + m_ED_channel); } while (result == ""); */ return result; }
public override string dataCenter() { string result = "";
this.Send(":INP:ALIG:EYE:TCEN " + m_ED_channel); this.opc(); /* do { result = this.Query(":INP:ALIG:EYE:RES:DEL? " + m_ED_channel); } while (result == ""); */ return result; }

M8020A Sampling Point Alignment Example

76 Keysight M8070A Programming Guide
public override string thresholdCenter()
{ string result = "";
this.Send(":INP:ALIG:EYE:ACEN " + m_ED_channel); this.opc(); /* do { result = this.Query(":INP:ALIG:EYE:RES:THR? " + m_ED_channel); } while (result == ""); */ return result; }
public override List<string> sync() { return this.Send(":DATA:SYNC " + m_ED_channel); }
# endregion
#region sampling point - implemented for M8020A public override List<string> setSamplingPointDelay(double x) { string delay = "";
delay = (1.0e9 * x).ToString() + "e-9";
return this.Send(":INP:DEL " + m_ED_channel + "," + x.ToString()); }
public override double getSamplingPointDelay() { string retString = ""; double val = 0.0;
retString = this.Query(":INP:DEL? " + m_ED_channel);
val = double.Parse(retString);
return val; } #endregion
Programming Examples 3
Keysight M8070A Programming Guide 77
3 Programming Examples
# region ber
private double m_N4900_BitCount = 0.0; private double m_N4900_ErrorCount = 0.0;
public override List<string> resetBERCounter() { m_N4900_BitCount = 0.0; m_N4900_ErrorCount = 0.0; return this.startBERAcc(); }
public override List<string> setBERCounterResults() {
this.stopBERAcc(); this.startBERAcc();
double errors = 0.0; double bits = 0.0;
errors = double.Parse(this.Query(":PFETCH:SENS2:ECO?")); bits = double.Parse(this.Query(":PFETCH:SENS2:BCO?")); m_ErrorCount = m_N4900_ErrorCount + errors; m_N4900_ErrorCount = m_ErrorCount; m_BitCount = m_N4900_BitCount + bits; m_N4900_BitCount = m_BitCount; m_BER = m_ErrorCount / m_BitCount;
return this.ErrorQ(); }
public override List<string> startBERAcc() { return this.Send(":SENS1:GATE ON"); }
public override List<string> stopBERAcc() { return this.Send(":SENS1:GATE OFF"); }
public override double getInstantaneousBER() { return double.Parse(this.Query(":FETC:SENS2:ERAT?")); }
# endregion

BER Example

N4903B BER Example

78 Keysight M8070A Programming Guide

M8020A BER Example

private double m_prevAccBER_M8020 = 0.0; private double m_prevAccBitCount_M8020 = 0.0; private double m_prevAccErrorCount_M8020 = 0.0;
public override List<string> startBERAcc() // M8020A { List<string> errorStr = new List<string>();
errorStr = this.ErrorQ();
return errorStr; }
public override List<string> stopBERAcc() // M8020A - error counters can't be stopped yet { List<string> errorStr = new List<string>();
errorStr = this.ErrorQ();
return errorStr; }
public override List<string> resetBERCounter() { List<string> errorStr = new List<string>(); List<double> bitResults = new List<double>(); List<double> bitCounter = new List<double>();
bitResults = this.getErrorCounter(); errorStr = this.ErrorQ();
m_prevAccBitCount_M8020 = bitResults[0]; m_prevAccErrorCount_M8020 = bitResults[1]; m_prevAccBER_M8020 = m_prevAccErrorCount_M8020 / m_prevAccBitCount_M8020;
bitCounter = this.getErrorCounter(); m_prevBitCount = bitCounter[0]; m_prevErrorCount = bitCounter[1]; m_prevTimeStamp = bitCounter[2];
return errorStr; }
Programming Examples 3
Keysight M8070A Programming Guide 79
3 Programming Examples
public override double getInstantaneousBER() // M8020A { double accumulatedBER = 0.0; List<double> result = new List<double>(); result = this.getBERAccResults(); accumulatedBER = result[2]; return accumulatedBER; }
public override List<string> setBERCounterResults() // M8020A { List<double> berResults = new List<double>(); List<double> bitCounter = new List<double>(); double bitCount = 0.0; double errorCount = 0.0; double elapsedTime = 0.0; double timeStamp = 0.0; double ber = 0.5;
bitCounter = this.getErrorCounter();
bitCount = bitCounter[0] - m_prevBitCount; errorCount = bitCounter[1] - m_prevErrorCount; timeStamp = bitCounter[2]; elapsedTime = 1000.0 * (timeStamp - m_prevTimeStamp); ber = errorCount / bitCount;
m_BitCount = bitCount; m_ErrorCount = errorCount; m_BER = ber;
return this.ErrorQ(); }
private List<double> getErrorCounter() // M8020A { List<double> bitCounter = new List<double>(); double bitCount = 0.0; double errorCount = 0.0;
double timeStamp = 0.0;
double counted1s = 0.0; double counted0s = 0.0; double erroneous1s = 0.0; double erroneous0s = 0.0; string identifier = ""; string resultStr = ""; string valStr = ""; int index = 0;
80 Keysight M8070A Programming Guide
resultStr = this.Query(":FETC:BCO? " + m_ED_channel);
// timestamp index = resultStr.IndexOf(","); valStr = resultStr.Substring(1, index - 1); timeStamp = double.Parse(valStr); resultStr = resultStr.Substring(index + 1, resultStr.Length - index - 1);
// identifier index = resultStr.IndexOf(","); valStr = resultStr.Substring(0, index); identifier = valStr; resultStr = resultStr.Substring(index + 1, resultStr.Length - index - 1);
// counted 1s index = resultStr.IndexOf(","); valStr = resultStr.Substring(0, index); counted1s = double.Parse(valStr); resultStr = resultStr.Substring(index + 1, resultStr.Length - index - 1);
// counted 0s index = resultStr.IndexOf(","); valStr = resultStr.Substring(0, index - 1); counted0s = double.Parse(valStr); resultStr = resultStr.Substring(index + 1, resultStr.Length - index - 1);
// erroneous 1s index = resultStr.IndexOf(","); valStr = resultStr.Substring(0, index - 1); erroneous1s = double.Parse(valStr); resultStr = resultStr.Substring(index + 1, resultStr.Length - index - 1);
// erroneous 0s index = resultStr.IndexOf(")"); valStr = resultStr.Substring(0, index - 1); erroneous0s = double.Parse(valStr); resultStr = resultStr.Substring(index + 1, resultStr.Length - index - 1);
bitCount = counted0s + counted1s; //bitCount -= m_prevBitCount; errorCount = erroneous0s + erroneous1s; //errorCount -= m_prevErrorCount;
bitCounter.Add(bitCount); bitCounter.Add(errorCount); bitCounter.Add(timeStamp);
return bitCounter; }
# endregion
Programming Examples 3
Keysight M8070A Programming Guide 81
3 Programming Examples
NOTE
If the M8070A software is running on Windows 8 or 8.1, the VXI-11 protocol is not supported.
Example:
“SCPI Access (VXI-11): TCPIP0::localhost::inst0::INSTR”
does not work on Windows 8 or 8.1.
In this case, the HiSLIP protocol should be used as shown below:
“SCPI Access (HiSLIP): TCPIP0::localhost::hislip0::INSTR”
82 Keysight M8070A Programming Guide

M8070A Jitter Tolerance Measurement CSV Output

# M8020A jtol CSV output # # Run from the M8070A script editor
def WaitForCompletion():
res = M8000.Scpi.Query(":syst:err?") if (res != '0,"No error"'):
print res
WaitForCompletion() M8000.Scpi.Timeout = 120000
# loop through all jitter tolerance measurements for id in M8000.Scpi.Query(":PLUG:JTOL:CAT?").Split(','):
print "Measurement: " + id + ":"
results = M8000.Scpi.Query(":PLUG:JTOL:FETC:DATA? " + id).Trim('(',')').Split(' #print results
# size of results print " " + str(len(results)) + " data items, " + str(int(len(results)/6)) + " rows;",
# if there are any rows (and not just a blank measurement), then # use the name of the jtol measurement as the filename # this will overwrite the file if it already exists!
# the file will be located in \Program Files (x86)\Agilent\M8070A\bin\, maybe
if (int(len(results)/6) == 0):
# nothing to write to file print "no file created"
else:
with open(id.Trim('"').Replace(' ','_') + ".csv", 'w') as f:
# output header to file
f.write("Modulation Frequency (GHz),Sinusoidal Jitter (UI),Number of B
Ratio,Measurement results\n")
The following python script generates the results from all open jitter tolerance measurements to different CSV files. This script can be easily modified to generate the output of the highest-passing point at each jitter modulation frequency value measured. This script can be run from the M8070A Script Editor or can also be run externally.
Programming Examples 3
Keysight M8070A Programming Guide 83
3 Programming Examples
# iterate over the data
# first element ([0]) is a module identifier, discard
# items are then grouped in bundles of six, per header above
# we need to insert a comma or LF after each item, depending on pos
for idx,data in enumerate(results):
if (idx==0):
# do nothing, this is the module identifier pass
elif (idx%6==0):
# output ending in a newline #print data f.write(data + "\n")
else:
# output ending in a comma #print data + ",", f.write(data + ",")
# close file and move on! f.close() print "written to file"
84 Keysight M8070A Programming Guide
Keysight M8070A System Software for M8000 Series of BER Test Solutions
Programming Guide
4 SCPI Command
Language
SCPI Command Language - Introduction / 86 Important Points about SCPI / 89 Sending Commands to the M8020A/M8030A/M8040A / 93 Command Line Arguments / 94 Communication / 95
4 SCPI Command Language

SCPI Command Language - Introduction

The Serial BERT is compatible with the standard language for remote control of instruments. Standard Commands for Programmable Instruments (SCPI) is the universal programming language for instrument control.
SCPI can be subdivided into the following command sets:
• SCPI Common Commands
• SCPI Instrument Control Commands
• IEEE 488.2 Mandatory Commands

SCPI Common Commands

This is a common command set. It is compatible with IEEE 488.2 and contains general housekeeping commands. The common commands are always preceded by an asterisk. A typical example is the reset command:
*RST
The IEEE 488.2 command set also contains query commands. Query commands always end with a question mark.

SCPI Instrument Control Commands

The programming commands are compatible with the Standard Commands for Programmable Instruments (SCPI) standard. For more detailed information regarding the GPIB, the IEEE 488.2 standard, or the SCPI standard, refer to the following books:
• SCPI Consortium. SCPI- Standard Commands for Programmable Instruments, 1997 (http://www.scpiconsortium.org).
• International Institute of Electrical and Electronics Engineers. IEEE Standard 488.1- 1987, IEEE Standard Digital Interface for Programmable Instrumentation. New York, NY, 1987.
• International Institute of Electrical and Electronics Engineers. IEEE Standard 488.2- 1987, IEEE Standard Codes, Formats, Protocols and Common commands For Use with ANSI/IEEE Std 488.1- 1987. New York, NY, 1987.
86 Keysight M8070A Programming Guide

IEEE 488.2 Mandatory Commands

NOTE
In order to comply with the SCPI model as described in IEEE 488.2, the Serial BERT implements certain mandatory commands. Other commands are implemented optionally. For more detail on the IEEE 488.2 mandatory and optional commands, see IEEE Commands - Reference on page 100.

Overlapped and Sequential Commands

IEEE 488.2 defines the distinction between overlapped and sequential commands. A sequential command is one which finishes executing before the next command starts executing. An overlapped command is one which does not finish executing before the next command starts executing.
It is not reliable to use wait statements in the control program to facilitate the use of overlapped commands.
Because these commands may allow the execution of more than one command at a time, special programming techniques must be used to ensure valid results. The common commands *OPC, *WAI and *OPC? can be used for this purpose. They help synchronize a device controller with the execution of overlapped commands.
The behaviors of these commands, in brief, are as follows:
•*OPC The *OPC command sets the Operation Complete (OPC) bit of the Event Register when the No Operation Pending flag is TRUE (No Operation Pending flag is attached to each overlapped command). Until that time, the controller may continue to parse and execute previous commands. It is good technique, then, to periodically poll the OPC bit to determine if the overlapped command has completed.
•*WAI The *WAI command allows no further execution of commands or queries until the No Operation Pending flag is true, or receipt of a Device Clear (dcas) message, or a power on. The *WAI command can be used for overlapped commands. It stops the program execution until any pending overlapped commands have finished. Specifically, it waits until the No Operation Pending flag is TRUE, or receipt of a dcas message, or a power on.
SCPI Command Language 4
Keysight M8070A Programming Guide 87
4 SCPI Command Language
NOTE

Data Types

•*OPC? The *OPC? query returns the ASCII character "1" in the Output Queue when the No Operation Pending flag is TRUE. At the same time, it also sets the Message Available (MAV) bit in the Status Byte Register. The *OPC? will not allow further execution of commands or queries until the No Operation Pending flag is true, or receipt of a Device Clear (dcas) message, or a power on.
The command behaviors described above are for overlapped commands. When the same commands are used with sequential commands, the behaviors may be different.
The M8020A/M8030A/M8040A has the capability of receiving and returning data in the following formats:
STRING
A string of human-readable ASCII characters, either quoted or nonquoted.
88 Keysight M8070A Programming Guide
NUMERIC
The M8020A/M8030A/M8040A handles the following numeric formats:
• <NR1>: Integer (0, 1, 2, - 1, etc.)
• <NR2>: Number with an embedded decimal point (0.1, 0.001. 3.3, etc.)
• <NR3>: Number with an embedded decimal point and exponent (1e33,
1.3e- 12, etc.)
• <NRf>: Represents <NR1>, <NR2> and <NR3>
• Binary preceded by #b (#B010101, #b011111, etc.)
• Octal preceded by #q (#Q777111, #q7331777, etc.)
• Hex preceded by #h (#haff, #h8989fffff, etc.)
BOOLEAN
Boolean values can be sent to the M8020A/M8030A/M8040A as either
ON | OFF or 0 | 1. The M8020A/M8030A/M8040A answers queries with 0 |
1.
Definite Length Arbitrary Block Data

Important Points about SCPI

Important Points about SCPI - Concepts

SCPI Command Language 4
Block data is used when a large quantity of related data is being returned. A definite length block is suitable for sending blocks of 8-bit binary information when the length is known beforehand. An indefinite length block is suitable for sending blocks of 8-bit binary information when the length is not known beforehand or when computing the length beforehand is undesirable.
It has the following format:
#<Length of length><Length of data><data>
<Length of length> is a single integer that contains the number of digits in <Length of data>, which in turn contains the length of the data. For example, a 512-byte pattern would be defined as:
#3512<data>
There are a number of key areas to consider when using SCPI for the first time. These are as follows:
• Instrument Model
• Command Syntax
• Optional Parts of Commands
• Sending Commands
• Command Separators
• SCPI Command Structure
Instrument Model
SCPI guidelines require that the M8020A/M8030A/M8040A is compatible with an instrument model. This ensures that when using SCPI, functional compatibility is achieved between instruments that perform the same tasks. For example, if two different instruments have a programmable clock frequency setting, then both instruments would use the same SCPI commands to set their frequency. The instrument model is made up of a number of subsystems.
The sub-system defines a group of functions within a module and has a unique identifier under SCPI, which is called the Root Keyword.
Keysight M8070A Programming Guide 89
4 SCPI Command Language
For more details on the instrument model, see STATus Subsystem on page 110.
Command Syntax
Commands may be up to twelve characters long. A short-form version is also available which has a preferred length of four characters or less. In this document the long-form and short-form versions are shown as a single word with the short-form being shown in upper-case letters.
For example, the long-form node command SOURce has the short-form SOUR. Using the short form saves time when entering a program; however, using the long form makes a program more descriptive and easier to understand.
SCPI commands may be commands only, commands and queries, or queries only. A question mark at the end of a command indicates that it is a query. If the question mark appears in brackets ([?]), the command has a command and query form.
Optional Command Keywords
Some layers in the SCPI command structure are optional. These optional keywords are indicated by square brackets ([]). A typical use for these types of keywords is with a command that is unique to one module. In this case, the top layer (Root Keyword) of the command structure may be omitted.
For example, the following command code segments are functionally identical:
[:SOURce]:JITTer[:GLOBal][:STATe] <ON|OFF|1|0>
:JITTer <ON|OFF|1|0>
:JITT <ON|OFF|1|0>
:jitt <ON|OFF|1|0>
Note that it is not necessary to include the syntax inside the square brackets ([]).
90 Keysight M8070A Programming Guide
Query Responses
NOTE
It is possible to interrogate the individual settings and status of a device using query commands. Retrieving data is a two-stage operation.
The query command is sent from the controller using the OUTPUT statement and the data is read from the device using the ENTER statement. A typical example is the SCPI IEEE 488.2 Common Command *IDN? which queries the identity of a device.
When sending strings to the instrument, either the double quote (") or the single quote may be used ('), the latter being more suited to PASCAL programs, which make use of a single quote; the former being more suited to use in BASIC programs, which use a double quote as a delimiter.
Command Separators
The SCPI command structure is hierarchical and is governed by commas, semicolons and colons:
• Commas are used to separate parameters in one command.
• Colons are used to separate levels.
• Semicolons are used to send more than one command to the instrument at a time.
It is possible to send several commands in one pass, as long as the commands all belong to the same node in the SCPI tree. The commands have to be separated by semicolons.
The following SCPI commands provide examples of this.
SCPI Command Language 4
SOURce:VOLTage:OFFSet ‘M2.DataOut2’,-0.99
SOURce:VOLTage:AMPLitude ‘M2.DataOut2’,1.11
These commands can also be sent as follows:
VOLT:OFFS ‘M2.DataOut2’,-0.99; ‘M2.DataOut2’,AMPL 1.11
Keysight M8070A Programming Guide 91
4 SCPI Command Language
NOTE
SCPI Command Structure Example
The SCPI command structure can be best examined by means of an example. For example, the command to set the pattern generator's output amplitude is:
[:SOURce]:VOLTage[:AMPLitude] ‘M1.DataOut1’,1.11
The structure of this command can be illustrated as follows:
[:SOURce] This is the top layer of the command
:VOLTage This is the next layer and defines the
[:AMPLitude] This is the command itself for setting the
‘M1.DataOut1’,1.11 This specifies pattern generator 1,
Any optional commands are enclosed in square brackets [ ] and any
structure and identifies the source subsystem.
subnode for setting a voltage level.
output amplitude level.
channel 1 and specifies an amplitude of
1.11.
optional characters are shown in lower case.
A colon indicates a change of level in the command hierarchy. Commands at the same level in the hierarchy may be included in the same command line, if separated by a semi-colon.
The bar symbol (|) indicates mutually exclusive commands.
To translate this syntax into a command line, follow the convention described above. Remember, however, that the command line can be created in several different ways. It can be created with or without optional keywords and in a long or short form. The following example gives three possible forms of the command line; all are acceptable.
In long form:
:SOURce:VOLTage:AMPLitude ‘M1.DataOut1’,1.11
In short form:
:SOUR:VOLT:AMPL ‘M1.DataOut1’,1.11
92 Keysight M8070A Programming Guide
With the optional commands removed:
NOTE
:VOLT ‘M1.DataOut1’,1.11
The long form is the most descriptive form of programming commands in SCPI.

Sending Commands to the M8020A/M8030A/M8040A

Sending Commands to the M8020A/M8030A/M8040A - Overview

A command is invalid and will be rejected if:
• It contains a syntax error.
• It cannot be identified.
• It has too few or too many parameters.
• A parameter is out of range.
• It is out of context.

Sending Commands using VISA

The following is a list of the available hardware interfaces for sending commands to the M8020A/M8030A/M8040A firmware:
SCPI Access (HiSLIP): TCPIP0::localhost::hislip0::INSTR (High-Speed LAN Instrument Protocol)
SCPI Command Language 4
SCPI Access (VXI-11): TCPIP0::localhost::inst0::INSTR (VXI-11 is a TCP/IP instrument protocol defined by the VXIbus Consortium)
If you use the VXI-11 (TCP/IP instrument protocol) in your test programs, you must change the resource string to the HiSLIP protocol if the software is running on Windows 8 or Windows 8.1. VXI-11 is not supported at this time on Windows 8 or Windows 8.1.
For example:
“TCPIP0::192.17.34.0::inst0::INSTR” -> “TCPIP0::192.17.34.0::hislip0::INSTR”
SCPI Access (Socket): TCPIP0::localhost::5025::SOCKET (Standard SCPI-over-sockets port)
SCPI Access (Telnet): telnet localhost 5024 (Communication with LAN instrument through SCPI Telnet port)
Keysight M8070A Programming Guide 93
4 SCPI Command Language

Command Line Arguments

(See Communication on page 95 for details about /Socket, /Telnet, /Inst, /AutoID, /NoAutoID, /FallBack).
Table 19 Command line arguments
Argument Description
/AutoId Start in auto ID mode (this is the default)
/NoAutoId Do not start in auto ID mode - use
/FallBack Use auto ID mode if the communication
/Socket <socket port> Set the socket port for the SCPI
/Telnet <telnet port> Set the telnet port for the SCPI
/Inst <instrument number>
/rcl Recall last used setting [optional]
/rst Reset to factory default [optional]
/IgnoreAwg M8070A software don't grab M8195A
[optional]
communication parameters from command line [optional]
parameters from the command line don't work [optional]
communication (only used with /NoAutoId) [optional]
communication (only used with /NoAutoId) [optional]
Set the instrument number for VXI-11.3 and HiSLIP SCPI communication [optional]
modules [optional]
94 Keysight M8070A Programming Guide

Communication

SCPI Command Language 4
Depending on the command line arguments /Socket, /Telnet, /Inst, /AutoID, /NoAutoID, /FallBack, the M8070A software starts several servers to handle SCPI commands. (Refer to the table above.)
/Socket, /Telnet, /Inst: If -1, don't start the respective servers
“Defaults:
Socket port: 5025 (e.g. TCPIP0::localhost::5025::SOCKET)
Telnet port: 5024
HiSLIP, VXI-11.3: 0 (e.g. TCPIP0::localhost::hislip0::INSTR, TCPIP0::localhost::inst0::INSTR)
/FallBack: If starting a server fails because of a conflict, try using another port or number
"HiSLIP, VXI-11.3: increase the index until a server can be started successfully
"Socket, Telnet: start with port 60000, then increase it until the servers can be started successfully. If neither socket nor telnet is disabled the M8070A software tries to start the servers on two consecutive ports
(socket port = telnet port + 1)
/AutoID: Automatically select ports and number for the connections, which are unique per instrument.
"This is the default behavior; it is not necessary to specify this argument on the command line.
"/Socket, /Telnet, /Inst are ignored (unless they are -1 and a server is disabled)
"If the M8070A software detects more than one AXIe module, use a special mechanism to obtain a number for the HiSLIP and VXI-11.3 servers, which makes sure that the M8070A software always uses the same VISA resource string per module
"The socket and telnet port are then calculated from the HiSLIP index:
telnet port = 60000 + 2 * <HiSLIP index>
socket port = 60000 + 2 * <HiSLIP index> + 1
Keysight M8070A Programming Guide 95
4 SCPI Command Language
NOTE
Note: Ports may already be in use by Windows or other applications, so they are not available for M8195A.
/NoAutoID: Do not automatically select ports and number for the connections, use the values specified with /Socket, /Telnet, /Inst or their respective default values instead.
If both /NoAutoID and /AutoID are specified, /AutoID overrides /NoAutoID.
The first port not assigned by IANA is 49152 (IANA, Internet Assigned Numbers Authority, http://www.iana.org).
96 Keysight M8070A Programming Guide
Keysight M8070A System Software for M8000 Series of BER Test Solutions
Programming Guide
5 SCPI Command
Reference
Subsystems / 98 IEEE Commands - Reference / 100 SCPI Standard Commands / 106 Miscellaneous Commands / 107 Command Syntax to Find Min/Max Values / 108 Location and Module Mapping - Reference / 109 STATus Subsystem / 110 TRIGger Subsystem / 129 Source Subsystem / 136 OUTPut Subsystem / 203 INPut Subsystem / 233 SENSe Subsystem / 258 CLOCk Subsystem / 259 N71000 Subsystem / 263 FETCh Subsystem / 271 MMEMory Subsystem / 276 PLUGin Subsystem / 282 SYSTem Subsystem / 454 DATA Subsystem / 471
5 SCPI Command Reference

Subsystems

The SCPI commands are divided into subsystems, which reflect the various functionality of the instrument. The following figure shows where the port-related subsystems are located.
Table 20 Subsystems
Subsystem Description
STATus The STATus subsystem reports the current system condition,
TRIGger The TRIGger subsystem selects the following trigger modes:
SOURce The SOURce subsystem controls output signals (for
OUTPut The OUTPut subsystem controls the output ports of the
INPut The INPut subsystem controls the input ports of the error
CLOCk The CLOCk subsystem is used to detect clock source or to
FETCh The FETCh subsystem is used to query the error detector’s
MMEMory The MMEMory subsystem is used to store and recall
when an event changes and sets transition fil ter states to report when a passing event occurs.
INTernal selects the 100 MHz reference clock of the AXIe chassis.
REFerence selects a 10 MHz/100 MHz external reference clock.
DIRect selects the clock in the M8041A and can be set manually from 8.1 GHz to 16.2 GHz as the system frequency.
CMULtiplier selects a multiplied or d ivided clock to specify the system frequency.
example, for setting frequency and levels).
pattern generator.
detector.
set the clock frequency applied to input or output channel.
resul ts.
predefined or custom created settings and patterns.
98 Keysight M8070A Programming Guide
Subsystem Description
SCPI Command Reference 5
PLUGin The PLUGin subsystem is a plugin interface for integrating
C# assemblies into the M8070A user interface and instrument software.
SYSTem The SYSTem subsystem is used for general system functions.
DATA The DATA subsystem is used to select patterns, define
symbol parameters, define sequence blocks and loops and synchronize the pattern.
Keysight M8070A Programming Guide 99
5 SCPI Command Reference

IEEE Commands - Reference

Mandatory Commands

The following mandatory IEEE 488.2 commands are implemented:
Table 21 IEEE commands
Name Description under
*CLS *CLS on page 101
*CAL? *CAL? on page 101
*LRN? *LRN? on page 101
*ESE[?] *ESE[?] on page 101
*ESR? *ESR? on page 101
*IDN? *IDN? on page 102
*OPC *OPC on page 102
*OPC? *OPC? on page 102
100 Keysight M8070A Programming Guide
*OPT? *OPT? on page 103
*RCL *RCL on page 103
*RST *RST on page 103
*SAV *SAV on page 103
*SRE[?] *SRE[?] on page 104
*STB? *STB? on page 104
*TST? *TST? on page 104
*WAI *WAI on page 105
Loading...