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

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

Для тестирования последовательностных схем вы можете задавать последовательности тестов, используя специальные служебные столбцы <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. Они образуют единую последовательность, которая выполняется строго по порядку (шаг 1, затем 2, затем 3 и т. д.) без сброса схемы между шагами. Последний тест относится к набору <set> 2, поэтому перед его запуском начинается новая последовательность, и схема сбрасывается.

Также обратите внимание, что сигнал Clock здесь может быть как входным контактом, так и именованным тактовым генератором (см. ниже).

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

Использование тактового генератора

При последовательном тестировании первый шаг начинается со сброса схемы. Каждый последующий шаг начинается с такта моделирования. Все тактовые генераторы на схеме обновляются этим тактом, а их сигналы распространяются вместе со значениями входных контактов, заданными для этого шага. Вы можете добавить столбец в тест для отображения тактов. Этот столбец будет проверяться по тактовому генератору в схеме так, как если бы это был выходной контакт, чтобы подтвердить, что он описывает поведение тактового сигнала. Ниже приведён пример теста для простого D-триггера, тактируемого по нарастающему фронту стандартного тактового генератора:

<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

Заголовок <clk> — это специальное имя для неименованного (не имеющего метки) тактового генератора. Вы также можете дать тактовому генератору метку и использовать её в качестве заголовка столбца (как в предыдущем примере).

При использовании тактового генератора рекомендуется не изменять значения на входах памяти на том же шаге, на котором тактовый сигнал совершает активный (триггерный) переход. В противном случае входной сигнал может достичь компонента примерно в то же время, что и фронт тактового сигнала, что может привести к непредсказуемому поведению. В приведённом выше примере вход D не изменяется на шагах с нарастающим фронтом тактового сигнала.

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

Ниже приведён полный пример, объединяющий различные типы тестов:

# Смешанные комбинационные и последовательные тесты
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

В этом примере:

Таким образом, процесс выполнения выглядит следующим образом:

  1. Сброс схемы, установка входов A=0, B=0, C=0. Проверка, что Out == 0 и clk == 0.
  2. Сброс схемы, установка входов A=0, B=0, C=1. Проверка, что Out == 1 and clk == 0.
  3. Сброс схемы, установка входов A=1, B=1, C=0. Проверка, что Out == 1 and clk == 0.
  4. Такт моделирования, установка входов A=0, B=1, C=0. Проверка, что Out == 0 and clk == 1.
  5. Такт моделирования, установка входов A=1, B=1, C=1. Проверка, что Out == 1 and clk == 0.
  6. Сброс схемы, установка входов A=0, B=0, C=0. Выход Out не проверяется, clk == 0.
  7. Такт моделирования, установка входов A=1, B=0, C=1. Проверка, что Out находится в высокоимпедансном состоянии (Z), а clk == 1.
  8. Тестирование по вектору завершено.

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