Looking for the compiler?
Leda, the Dots compiler can be found here.
Fun Fact
We are working on adding functions, loops, variables and much more to the Dots language. Stay tuned.

The Gemini Stimdeck has a 400 pin I/O test bus that connects directly to your DUT board. To test your device-under-test or DUT, you have to somehow be able to drive pins on the test bus and additionally, you have to be able to read logic levels and compare them against some pre-computed expected response.

To do this we created a domain specific language called Dots, which lets you write test vectors with helpful language constructs such as vector executions and repeats.

What is a test vector?

A single test vector allows you to drive and also to expect a logic value on a set of specific test pins. Driving a pin means that you can force it high or low to some voltage level. Expecting means that you can expect either high, low or ignore.

The word "vector" can mean many things, but in regards to functional testing, it is an array with one row and many columns. Each column corresponding to a pin on the test bus that you can control.


If a vector fails, the test stops executing and returns a pass/fail status and failing cycle number.

Show me a simple Dots example.

In the example below, there are a total of 6 pins, so the vector length in this example is 6. The 'Pins' line defines what pins you are going to drive or expect on and also the pin order. The order is important because each index location in the vector corresponds to a pin in your 'Pins' definition.

Example Dots with two test vectors:
Pins A, B, C, D, F1, F2
What are the possible test vector types?

Each vector index can have the following drive or expect types.

Type Description
0 drive pin low
1 drive pin high
L expect low, fail if high
H expect high, fail if low
X don't drive, don't expect
Important Note
The order of the pin names is important. The index of each pin name maps to the index of a drive or expect value in a vector.
How do I define pins?

To define which pins you want to drive and expect on, you must include a pin definition line in your Dots.

Pins <PIN_NAME_1>,<PIN_NAME_2>,...

The PIN_NAME can either be "net_name" or "net_alias" from the DUT Profile Pin object.

How do I add comments?

To add a comment to your Dots file, use the '#' character and any text after the '#' will be ignored by the compiler.

Pins A, B, C, D, F1, F2
# this is a comment
V0011HL # also comment
How do I execute a vector?

The syntax to execute a vector is very simple. All vectors start with V followed by drive or expect vector types.

V<vector types>
# execute three vectors
How do I repeat a vector?

This will execute the vector <count> number of times.

repeat <count> V<vector types>
repeat 10 V0XX
repeat 10 V11L
repeat 10 V10H
Shift Register Example
A full Dots example.

The Dots example below is for a 10 unit flip-flop shift register. We clock in values that shift through and come out the other end.

To fully test the shift register, we first set all the registers to zero then we send a one through. Then we set all the registers to one and shift a zero through. If we don't see either value shift through, then some point along the chain is either stuck low or stuck high and we have a defective shift chain.

Pins D13, T12, J14, K15

# assert reset_b

# sea of zeros
repeat 10 VC10L

# one in sea

# check zeros
repeat 9 VC10L

# now check high

# check back to low

# sea of ones
repeat 10 VC11L

# zero in sea

# check ones
repeat 9 VC11H

# now check low

# check back to high

To run your Dots test pattern on the Gemini Stimdeck, it must first be compiled into a Stim file. Stim files are machine instruction binaries that the Gemini Vector Processing Unit (VPU) knows how to run. The VPUs read the Stim files from local memory, execute your test vectors and then report back the pass/fail status and the failing cycle number if it failed.

To compile Dots files, you can use Leda the test pattern compiler. Check out the compiler documentation for more information.