Последовательное тестирование

Функция тестовых векторов поддерживает как комбинационное, так и последовательное тестирование схем. По умолчанию тесты комбинационные: схема сбрасывается перед каждым тестом, обеспечивая независимость каждого теста.

Для последовательных схем вы можете указать тестовые последовательности, используя специальные столбцы заголовков <set> и <seq>:

Вот пример последовательного тестового вектора:

# Последовательный тест для счётчика
Clock Reset Count <set> <seq>
0     0     0     1     1
1     0     0     1     2
0     0     1     1     3
1     0     1     1     4
0     0     2     1     5
1     0     2     1     6
0     1     0     2     1

В этом примере первые шесть тестов имеют <set> 1 со значениями <seq> 1-6, поэтому они образуют одну последовательность, которая выполняется по порядку (seq 1, затем 2, затем 3 и т.д.) без сброса между шагами. Последний тест имеет <set> 2, поэтому он начинает новую последовательность, и схема сбрасывается перед его выполнением.

Note also that Clock could be an input pin here. But it could also be a labeled clock component (see below).

Правила выполнения последовательностей

Using the Clock

In a sequential test, the first step begins with a reset. In every step after the first, it begins with a simulation tick. Any Clock components in the simulation will be updated by that tick and their signals will be propagated along with any input pin values for that step. You may add a column to the test to show the ticks. The column will be checked against the clock in the circuit as if it were an output pin to verify it describes the clocks behavior. Here is an example for a simple positive edge-triggered D flip-flop test with a standard clock:

<clk> D Q NotQ  <set> <seq>
  0   0 0   1     1     1
  1   0 0   1     1     2
  0   1 0   1     1     3
  1   1 1   0     1     4
  0   1 1   0     1     5
  1   1 1   0     1     6
  0   0 1   0     1     7

The <clk> header is a special name for an unlabeled clock component. You may also label the clock and use the label as the column header (see earlier example).

We recommend that when using a Clock, you should not change the values of memory inputs during the same step that the clock makes a triggering transition. Doing so may allow an input signal to reach the component at near the same time as the clock signal giving surprising behavior. In the example above, the D input does not change in steps with a rising edge of the clock.

Полный пример

Вот полный пример, объединяющий все функции:

# Mixed combinational and sequential tests
A B C Out     <clk> <set> <seq>
0 0 0 0       0     0     0
0 0 1 1       0     0     0
1 1 0 1       0     1     1
0 1 0 0       1     1     2
1 1 1 1       0     1     3
0 0 0 <DC>    0     2     1
1 0 1 <float> 1     2     2

In this example:

Thus the execution might look like this:

  1. Reset, set A=0, B=0, C=0 and check that Out==0 and clk=0
  2. Reset, set A=0, B=0, C=1 and check that Out==1 and clk=0
  3. Reset, set A=1, B=1, C=0 and check that Out==1 and clk=0
  4. Tick, set A=0, B=1, C=0 and check that Out==0 and clk=1
  5. Tick, set A=1, B=1, C=1 and check that Out==1 and clk=0
  6. Reset, set A=0, B=0, C=0 and not check Out but clk=0
  7. Tick, set A=1, B=0, C=1 and check that Out is floating (in Logisim this is notated as U) and clk=1
  8. Test Vector is complete

Предыдущий: Специальные значения | Следующий: Использование из командной строки.