Последовательное тестирование
Функция тестовых векторов поддерживает как комбинационное, так и последовательное тестирование схем. По умолчанию тесты комбинационные: схема автоматически сбрасывается перед каждым тестом, обеспечивая независимость результатов каждого теста.
Для тестирования последовательностных схем вы можете задавать последовательности тестов, используя специальные служебные столбцы <set> и <seq>:
- <set>: определяет идентификатор последовательности (набора) — все строки тестов с одинаковым номером набора принадлежат одной последовательности и выполняются друг за другом. Внутреннее состояние схемы сохраняется между шагами в одном наборе. По умолчанию тесты относятся к набору 0, если не указано иное.
-
<seq>: определяет номер шага в последовательности — задаёт порядок выполнения тестов в рамках одного набора. Шаги выполняются строго по возрастанию номеров
<seq>в каждом<set>. Строки со значением<seq>, равным 0 или отсутствующим, обрабатываются как комбинационные тесты (схема сбрасывается перед их выполнением, даже если они имеют одинаковый номер набора).
Пример последовательного тестового вектора:
# Последовательный тест для счётчика 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 здесь может быть как входным контактом, так и именованным тактовым генератором (см. ниже).
Правила выполнения последовательностей
- Все строки тестов с одинаковым номером
<set>(больше 0) объединяются в одну последовательность. - В каждом наборе шаги выполняются строго по порядку номеров
<seq>(шаг 1, затем 2, затем 3 и т. д.). - Внутреннее состояние компонентов схемы сохраняется между шагами внутри одной последовательности (с одинаковым ID набора).
- Схема сбрасывается в исходное состояние при переходе к новой последовательности (к другому номеру
<set>). - Строки с
<seq>равным 0 (или без него) должны иметь<set>также равный 0 (или отсутствующий) и всегда выполняются как комбинационные тесты со сбросом схемы.
Использование тактового генератора
При последовательном тестировании первый шаг начинается со сброса схемы. Каждый последующий шаг начинается с такта моделирования. Все тактовые генераторы на схеме обновляются этим тактом, а их сигналы распространяются вместе со значениями входных контактов, заданными для этого шага. Вы можете добавить столбец в тест для отображения тактов. Этот столбец будет проверяться по тактовому генератору в схеме так, как если бы это был выходной контакт, чтобы подтвердить, что он описывает поведение тактового сигнала. Ниже приведён пример теста для простого 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
В этом примере:
- Обратите внимание, что тактовый сигнал сбрасывается в 0 на каждой строке, выполняющей сброс схемы.
- Первые два теста являются комбинационными (seq=0), поэтому схема сбрасывается перед каждым тестом, несмотря на то, что они оба относятся к набору 0.
- Следующие три теста относятся к набору 1 с номерами шагов 1–3, поэтому они образуют одну последовательность, которая выполняется по порядку без промежуточных сбросов (сброс происходит только перед запуском первого шага набора).
- Последние два теста относятся к набору 2 с шагами 1 и 2, поэтому перед их запуском начинается новая последовательность, и схема сбрасывается, но между шагами 1 и 2 сброса не происходит.
- Шестой тест использует специальное значение
<DC>(don't care) для выхода, поэтому пройдёт любое выходное значение. - Последний тест использует значение
<float>для выхода, ожидая высокоимпедансное состояние (Z) на контакте.
Таким образом, процесс выполнения выглядит следующим образом:
- Сброс схемы, установка входов A=0, B=0, C=0. Проверка, что Out == 0 и clk == 0.
- Сброс схемы, установка входов A=0, B=0, C=1. Проверка, что Out == 1 and clk == 0.
- Сброс схемы, установка входов A=1, B=1, C=0. Проверка, что Out == 1 and clk == 0.
- Такт моделирования, установка входов A=0, B=1, C=0. Проверка, что Out == 0 and clk == 1.
- Такт моделирования, установка входов A=1, B=1, C=1. Проверка, что Out == 1 and clk == 0.
- Сброс схемы, установка входов A=0, B=0, C=0. Выход Out не проверяется, clk == 0.
- Такт моделирования, установка входов A=1, B=0, C=1. Проверка, что Out находится в высокоимпедансном состоянии (Z), а clk == 1.
- Тестирование по вектору завершено.
Назад: Специальные значения | Далее: Использование из командной строки.