Blocks, Fields and Attributes

The set of hardware blocks can be interrogated with the *BLOCKS? command:

< *BLOCKS?
> !TTLIN 6
> !OUTENC 4
> !PCAP 1
> !PCOMP 4
> !TTLOUT 10
> !ADC 8
> !DIV 4
> !INENC 4
> !SLOW 1
> !PGEN 2
> !LVDSIN 2
> !POSITIONS 1
> !POSENC 4
> !SEQ 4
> !PULSE 4
> !SRGATE 4
> !LUT 8
> !LVDSOUT 2
> !COUNTER 8
> !ADDER 1
> !CLOCKS 1
> !BITS 1
> !QDEC 4
> .

For each block the number after the block tells us how many instances there are of the block. Each block is controlled and interrogated through a number of fields, and the block.*? command can be used to interrogate the list of fields:

< TTLIN.*?
> !VAL 1 bit_out
> !TERM 0 param enum
> .

This tells us that block TTLIN has two fields, TTLIN.VAL and TTLIN.TERM. The first field after the field name is a sequence number for user interface display, and the rest of each response describes the “type” of the field. In this case we see that TTLIN.VAL is a bit_out field, which means can be used for bit data capture and can be connected to any param bit_mux field as a data source.

Each field has one or more attributes depending on the field type. The list of attributes can be interrogated with the block.field.*? command:

< TTLIN.VAL.*?
> !CAPTURE_WORD
> !OFFSET
> !INFO
> .
< TTLIN.TERM.*?
> !INFO
> .

All fields have the .INFO attribute, which just repeats the type information already reported, eg TTLIN1.VAL.INFO? returns bit_out (note that a block number must be specified when interrogating fields and attributes).

Field Types

Each field type determines the set of attributes available for the field. The types and their attributes are documented below.

Field type Description
param subtype Configurable parameter. The subtype determines the precise behaviour and the available attributes.
read subtype A read only hardware field, used for monitoring status. Again, subtype determines available attributes.
write subtype A write only field, subtype determines possible values and attributes.
time Configurable timer parameter.
bit_out Bit output, can be configured as bit input for bit_mux fields.
pos_out Position output, can be configured for data capture and as position input for pos_mux fields.
ext_out extra Extended output values, can be configured for data capture, but not available on position bus.
bit_mux Bit input with configurable delay.
pos_mux Position input multiplexer selection.
table Table data with special access methods.
param subtype
All fields of this type contribute to the *CHANGES.PARAM change group and are used to configure the behaviour of the corresponding block. Fields of this type are used for input configuration and other behavioural settings.
read subtype
All fields of this type contribute to the *CHANGES.READ change group, but are only checked when either the field is read or the change group is polled. Fields of this type are used for monitoring the internal status of a block, and they cannot be written to.
write subtype

Fields of this type can only be written and are used for immediate actions on a block. The action subtype is used to support actions without any parameters, for example the following command forces a soft reset on the given pulse block:

< PULSE1.FORCE_RESET=
> OK
time

Fields of this type are used for configuring delays. They also contribute to *CHANGES.PARAM. The following attributes are supported by fields of this type:

UNITS
This attribute can be set to any of the strings min, s, ms, or us, and is used to interpret how values read and written to the field are interpreted.
RAW
This attribute can be read or written to report or set the delay in FPGA ticks.
MIN
This reports the minimum valid value for this field in the currently selected units.

The UNITS attribute determines how numbers read or written to the field are interpreted. For example:

< PULSE1.DELAY.UNITS=s
> OK
< PULSE1.DELAY=2.5
> OK
< PULSE1.DELAY.RAW?
> OK =312500000
< PULSE1.DELAY.UNITS=ms
> OK
< PULSE1.DELAY?
> OK =2500

Note that changing UNITS doesn’t change the delay, only how it is reported and interpreted.

bit_out

Fields of this type are used for block outputs which contribute to the internal bit system bus, and they contribute to the *CHANGES.BITS change group. They can be captured via the appropriate PCAP.BITSn block as reported by the CAPTURE_WORD attribute.

The following attributes are supported by fields of this type:

CAPTURE_WORD
This identifies which pos_out value can be used to capture this bit.
OFFSET
This is the bit offset into the captured word of this particular bit.

For example:

< TTLIN1.VAL.CAPTURE_WORD?
> OK =PCAP.BITS0
< TTLIN1.VAL.OFFSET?
> OK =2

This tells us that if PCAP.BITS0 is captured then TTLIN1.VAL can be read as bit 2 of this word, counting from the least significant bit.

The field itself can be read to return the current value of the bit.

pos_out

Fields of this type are used for block outputs which contribute to the internal position bus, and they contribute to the *CHANGES.POSN change group. The following attributes support capture control:

CAPTURE

This can be set to manage capture of this field. One of the following enumeration values can be written to this field:

Value Description
No Capture is disabled for this field.
Value The value at the time of trigger will be captured.
Diff The difference of values is captured.
Sum The sum of all valid values is captured. This is a 64-bit value, and may be further scaled if PCAP.SHIFT_SUM is set.
Mean The average of all valid values is captured.
Min The minimum of all valid values is captured.
Max The maximum of all valid values is captured.
Min Max Both minimum and maximum values are captured.
Min Max Mean All three values, minimum, maximum, average are captured.

The following attributes support formatting of the field when reading it: the current value is returned subject to the formatting rules described below.

OFFSET, SCALE
These numbers can be set to configure the conversion from the underlying position to the value captured when scaling is enabled and read from the SCALED attribute.
UNITS
This field can be set to any UTF-8 string, and is provided for the convenience of the user interface and is returned as part of the data capture heading.
SCALED

This returns the scaled value computed as

value * scale + offset
ext_out extra

Fields of this type represent values that can be captured but which are not present on the position bus. These fields also support one capture control field:

CAPTURE

As for pos_out, can be set to control capture of this field:

Value Description
No This field will not be captured.
Value This field will be captured.

The extra field determines the detailed behaviour of this field, and will be one of the following values:

extra value Description
timestamp Timestamps in clock ticks with optional scaling to seconds on data capture.
samples Special internal field for counting captured samples.
bits Used to implement bit-bus readout fields. Fields of this sub-type implement an extra BITS field.

Fields of type ext_out bits implement an extra attribute:

BITS
This returns a list of all bit fields associated with this field. Fields of this type can be used to capture a snapshot of the bit bus at the trigger time.
bit_mux

Bit input selectors for blocks. Each of these fields can be set to the name of a corresponding bit_out field, for example:

< TTLOUT1.VAL=TTLIN1.VAL
> OK

There are two attributes:

DELAY
This can be set to any value between 0 and MAX_DELAY to delay the bit input to the block by the specified number of clock ticks.
MAX_DELAY
This returns the maximum delay that can be set for this input.
pos_mux

Position input selectors for blocks. Each of these fields can be set to the name of a corresponding pos_out field, for example:

< ADDER1.INPA=ADC2.OUT
> OK
table

Values of this type are used for long tables of numbers. This server imposes no structure on these values apart from treating them as an array of 32-bit integers.

Tables values are written with the special < syntax:

block number.field< Normal table write, overwrite table
block number.field<< Normal table write, append to table
block number.field<B Base-64 table write, overwrite table
block number.field<<B Base-64 table write, append to table

For “normal” table writes the data is sent as a sequence of decimal numbers in ASCII, and the whole sequence must be terminate by an empty blank line. For base-64 writes the data is sent in base-64 format, for example:

< SEQ3.TABLE<B
< TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1
<
> OK
< SEQ3.TABLE.LENGTH?
> OK =12

Note that when data is sent in base-64 format, each individual line must encode a multiple of four bytes, otherwise the write will be rejected.

The following attributes are provided by this field type:

MAX_LENGTH
This is the maximum number of 32-bit words which can be stored in the table.
LENGTH
This is the current number of words in the table.
B
This read-only attribute returns the content of the table in base-64.
FIELDS

This returns a list of strings which can be used to interpret the content of the table. Each line returned is of the following format:

left:right field-name subtype

Here left and right are bit field indices into a single table row, consisting of a number of 32-bit words concatenated (in little-endian order) with bits numbered from 0 in the least significant position up to 32*ROW_WORDS-1, and left >= right. The name of the field is given by field-name, and subtype can be one of int, uint, or enum. If subtype is enum then the list of enums can be interrogated through the command

*ENUMS.block.table[].field?

where block, table, field are appropriate names.

ROW_WORDS
Returns the number of 32-bit words in a single row of the table. This can be used to help interpret the FIELDS result.

Field Sub-Types

The following field sub-types can be used for param, read and write fields.

uint [max-value]

This is the most basic type: the value read or written is an unsigned 32-bit number. There is one fixed attribute:

MAX
This returns the maximum value that can be written to this field.
int
Similar to uint, but signed, and there is no upper limit on the value.
scalar scale [offset [units]]

Floating point values can be read or written, and are converted from and to the underlying signed integer type via the equations below:

value = scale * raw + offset
raw = (value - offset) / scale

The following attributes are supported:

UNITS
Returns the configured units string.
RAW
Returns the underlying unconverted integer value.
SCALE
Returns the configured scaling factor.
OFFSET
Returns the configured scaling offset.
bit
A value which is 0 or 1, there are no extra attributes.
action
A value which cannot be read and always writes as 0. Only useful for write fields.
lut

This field sub-type is used for the 5-input lookup table function calculation field. This field can be set to any valid logical expression generated from inputs A to E using the standard operators &, |, ^, ~, ?: from C together with = for equality and => for implication (A=>B abbreviates ~A|B). All operations have C precedence, = has the same precedence as == in C, and => has precedence between | and ?:.

The following attribute is supported:

RAW
This returns the corresponding lookup table assignment as a 32-bit number.

For example:

< LUT2.FUNC=A=>B?C:D
> OK
< LUT2.FUNC?
> OK =A=>B?C:D
< LUT2.FUNC.RAW?
> OK =0xF0CCF0F0
enum

Enumeration fields define a list of valid strings which can be written to the field. To interrogate the list of valid enumeration values use the *ENUMS command, for example:

< *ENUMS.TTLIN1.TERM?
> !High-Z
> !50-Ohm
> .
time

Converts between time in specified units and time in FPGA clock ticks. The following attributes are supported:

UNITS
This attribute can be set to any of the strings min, s, ms, or us, and is used to interpret how values read and written to the field are interpreted.
RAW
This attribute can be read or written to report or set the delay in FPGA ticks.

Summary of Sub-Types

Sub-type Attributes Description
uint MAX Possibly bounded 32-bit unsigned integer value
int   Unbounded 32-bit signed integer value
scalar RAW, UNITS, SCALE, OFFSET Scaled signed floating point value
bit   Bit: 0 or 1
action   Write only, no value
lut RAW 5 input lookup table logical formula
enum LABELS Enumeration selection
time RAW, UNITS Time intervals converted to FPGA ticks

Summary of Attributes

Field (sub)type Attribute Description R W C M
(all) INFO Returns type of field R      
uint MAX Maximum allowed integer value R      
scalar RAW Underlying integer value R W    
UNITS Configured units for scalar R      
SCALE Configured scaling factor for scalar R      
OFFSET Configured scaling offset for scalar R      
lut RAW Computed Lookup Table 32-bit value R      
time UNITS Units and scaling selection for time R W C  
RAW Raw time in FPGA clock cycles R W    
MIN Minimum valid setting (for type only) R      
bit_out CAPTURE_WORD Capturable word containing this bit R      
OFFSET Offset of this bit in captured word R      
bit_mux DELAY Bit input delay in FPGA ticks R W C  
MAX_DELAY Maximum valid delay R      
pos_out CAPTURE Position capture control R W C  
OFFSET Position offset R W C  
SCALE Position scaling R W C  
UNITS Position units R W C  
SCALED Position after applying scaling R      
ext_out bits BITS List of bit_out fields R     M
table MAX_LENGTH Maximum table row count R      
LENGTH Current table row count R      
B Table data in base-64 R     M
FIELDS Table field descriptions R     M
ROW_WORDS Number of words in a table row R      
Key:
R:Attribute can be read
W:Attribute can be written
C:Attribute contributes to *CHANGES.ATTR change set
M:Attribute returns multiple value result.