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.
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.
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.
Pins A, B, C, D, F1, F2 V0010HL V0011HL
Each vector index can have the following drive or expect types.
|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|
To define which pins you want to drive and expect on, you must include a pin definition line in your Dots.
The PIN_NAME can either be "net_name" or "net_alias" from the DUT Profile Pin object.
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 V0010HL V0011HL # also comment
The syntax to execute a vector is very simple. All vectors start with V followed by drive or expect vector types.
Pins RESET_B, IN, OUT # execute three vectors V0XX V11L V10H
This will execute the vector <count> number of times.
repeat <count> V<vector types>
Pins RESET_B, IN, OUT repeat 10 V0XX repeat 10 V11L repeat 10 V10H
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.
# # A1_DUT_IO_66=CLK, A1_DUT_IO_31=RESET_B, A1_DUT_IO_19=DIN, A1_DUT_IO_7=DOUT Pins D13, T12, J14, K15 # assert reset_b VC0XX VC10X # sea of zeros repeat 10 VC10L # one in sea VC11L # check zeros repeat 9 VC10L # now check high VC10H # check back to low VC10L # sea of ones repeat 10 VC11L # zero in sea VC10H # check ones repeat 9 VC11H # now check low VC11L # check back to high VC11H
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.