Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Скобцовы Моделирование и тестирование

.pdf
Скачиваний:
97
Добавлен:
03.03.2016
Размер:
3.61 Mб
Скачать

if f then C=A+B delay 40 else С=A+B delay 10.

Здесь показано, что в неисправной схеме задержка равна 40 единицам в отличие от исправной схемы, где задержка равна 10 единицам. Но этот подход требует явного описания поведения фрагмента неисправной схемы,

что, конечно, ограничивает его применение.

4.10.2Неисправности уровня ЯРП

Внастоящее время новые технологии позволяют проектировать сложные цифровые системы (ЦС) на одном кристалле (System-on-Chip - SOC). При этом проектирование ЦС выполняется с помощью достаточно сложных языков высокого уровня описания аппаратуры (HDL), таких как

VHDL, Verilog и SpecC. Поэтому актуальной является проблема верификации и тестирования сложных ЦС, описанных с помощью этих языков.

На логическом уровне моделирования, где ЦС представляется в виде логической схемы, основной моделью физических дефектов являются константные неисправности, которые эквивалентны постоянным сигналам

0 или 1 на линиях схемы. В отличие от логического уровня моделей неисправностей, где обычно можно установить соответствие между физическим дефектом проводников в кремнии и соединениями в логической схеме, на поведенческом уровне, как правило, трудно установить соответствие между описанием ЦС на HDL и структурным описанием. Один оператор HDL может соответствовать сотням логических вентилей, соединенных между собой. Поэтому необходимо рассматривать функциональные модели неисправностей непосредственно на языковых конструкциях HDL. При этом качество (или адекватность)

функциональных моделей неисправностей, как правило, проверяется с помощью логического моделирования ЦС, которое определяет полноту

141

теста относительно одиночных константных неисправностей схемы,

реализующей ЦС. Поэтому данный подход ориентирован скорее на достижение высокой полноты теста для константных неисправностей, а не обнаружение ошибок в языковых конструкциях HDL. Более того, при этом эффективность тестовой последовательности не может быть определена непосредственно на функциональном уровне. Поэтому в настоящее время для верификации и тестирования ЦС, описанных на HDL, применяются методы, заимствованные из тестирования программного обеспечения [56].

4.10.3 Методы тестирования программ

Проблема верификации корректности описания ЦС на языках описания аппаратуры подобна задаче тестирования программного обеспечения потому, что описание ЦС на поведенческом уровне подобно программе, написанной на одном из языков высокого уровня таких как С или С++. Но между ними есть два существенных отличия:

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

-описание ЦС обычно выполняется в процессе последовательного уточнения за счет детализации от поведенческого абстрактного уровня до структурного описания. В отличие от проектирования ЦС при разработке программного обеспечения не всегда существуют детальные спецификации и указанная стратегия редко используется.

Для тестирования программ [57] используется два основных подхода:1) формальные методы, основанные на доказательствах теорем; 2)

структурные методы, где программа, как правило, представляется блок-

схемой или непосредственно последовательностью операторов. Для

тестирования описаний ЦС на HDL целесообразно использовать второй

подход.

142

Блок-схема является графическим представлением управляющей

структуры программы и состоит из линейных участков программы

(процессов), точек ветвления и схождения. Процесс состоит из последовательности операторов и имеет один вход и один выход. В точке ветвления программа расходится и, наоборот, в точке схождения -

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

до точки выхода из нее. Сложность программы, прежде всего,

определяется числом возможных путей в ее блок-схеме.

Для конкретных входных данных выполняются (активизируются)

определенные операторы программы. Для оценки качества тестирования программ используются различные меры. Мера покрытия операторов

программы измеряется числом операторов, активизированных при

определенных входных данных. В случае меры покрытия ветвей точек ветвления, измеряется число активизированных ветвей при определенных входных параметрах. Мера покрытия путей измеряет число активизированных путей в блок-схеме на тестовых данных. Целью тестирования программы является стопроцентное покрытие путей,

которое обеспечивает также покрытие ветвей и операторов. Но число путей в программе может экспоненциально зависеть от ее размера и поэтому стопроцентное покрытие путей является очень сильным требованием, которое на практике не всегда выполнимо.

4.10.4 Функциональные модели неисправностей и меры полноты тестов для ЦС, описанных на HDL

Ошибка проектирования ЦС заключается в несоответствии между заданной спецификацией и реализованным на HDL проектным решением.

Общая спецификация, как правило, задается на естественном языке и описывает желаемое функционирование ЦС. Более точная и формальная

143

исполняемая спецификация выполняется на языке высокого уровня описания аппаратуры HDL. Ошибка проектирования может произойти как из-за простой синтаксической ошибки в одном из операторов HDL, так и из-за неправильного понимания спецификации, что обычно соответствует ошибочному сегменту кода HDL. Функциональная неисправность является моделью ошибок проектирования. Следует отметить, что относительно небольшой набор неисправностей может моделировать достаточно большое множество ошибок [58].

Initial Node

0 wait until clock = ‘1’;

1 x:=xi

2 y:=yi

9 while(x>0) loop

4 if (x<=y) then

5temp:=y;

6y:=x;

7x:=temp;

8 x:=x-y;

10 ou<=y;

Last Node

arhitecture beha of gcd is begin

p1: process

variable x, y , temp: INT_RANGE; begin

wait until clock = ‘1’ x := xi;

y := yi;

while (x > 0) loop if (x <= y) then

temp := y; y := x;

x := temp; end if;

x := x – y; end loop; ou <= y;

end process p1; end beha;

Рис.4.13 Пример, иллюстрирующий функциональные модели проектирования

На рис.4.13 показан простой пример, иллюстрирующий функциональные модели проектирования. В правой части рис.4.13

представлено текстовое описание, а в левой функциональная блок-

144

схема. При одном из подходов тестирования путей в блок-схеме выбираются пути, которые связывают блок объявления переменной с блоками, в которых она используется. Например, на рис.4.13 пути

1,2,9,4,5,6,7,8 и 1,2,9,4,8 покрывают оба возможных пути между объявлением переменной x и ее использованием.

4.10.5 Неисправности текста программ HDL

Этот тип модели непосредственно применим к тексту программы,

который описывает функционирование ЦС [57]. Простая неисправность текста программы HDL соответствует мере покрытия операторов при тестировании программного обеспечения, которая рассматривалась выше.

Такая мера имеет ограниченную точность, поскольку не учитывает проявление ошибки на внешних выходах устройства. Несмотря на ограничения, эта мера часто применяется разработчиками ЦС в силу своей простоты реализации. “Анализ мутациисоответствует неисправности текста программы и был первоначально разработан для тестирования программного обеспечения [59] и затем перенесен на тестирование ЦС

[60]. При этом "мутант" представляет версию функционального описания,

которая отличается от оригинала на одну потенциальную ошибку проектирования. В этом случае оператор мутации определяется функцией,

которая применяется к оригиналу для генерации "мутанта". Типичным примером оператора мутации является замена одной арифметической операции на другую. Однако, поскольку этот оператор локален по своей природе, с его помощью невозможно описать достаточно большое множество ошибок проектирования.

4.10.6 Меры покрытия функциональных неисправностей

Многие модели функциональных неисправностей основаны на представлении HDL описания ЦС функциональными блок-схемами.

Поэтому рассмотренный выше подход к тестированию программного

145

обеспечения переносятся на блок-схемы, соответствующие описанию ЦС на HDL[61]. Распространение этого подхода на блок-схемы, описывающие последовательные процессы достаточно очевидно, но для параллельных процессов это не так тривиально. Рассмотрим основные типы и меры покрытия функциональных неисправностей.

Битовые неисправности. Каждая переменная, сигнал или порт представляется двоичным вектором. Каждый бит этого вектора может принять константное значение 0 или 1 [62]. На рис.4.14 показана константная битовая неисправность. Очевидно, что этот тип является простым обобщением модели обычных константных неисправностей,

широко используемой на логическом уровне.

Условные неисправности. Каждая условие в условном операторе может принять также константное значение 0 или 1. в результате некоторые пути в блок-схеме становятся "недоступными".

0 0 0 0 0 1 0 0

0 0 0 0 1 0 0 1

addr <= (tail + reg1) mod 2**8

0 0 1 0 1 1 0 1

Рис.4.14 Константная битовая неисправность

Указанные модели исключают явное некорректное поведение элементарных операторов (таких как +, -, *, /...). Искажаются только значения отдельных битов переменных. Каждая неисправность в списке моделируемых неисправностей характеризуется следующими атрибутами:

имя сигнала, переменной или порта; оператор HDL, в котором произошла ошибка; тип константной неисправности (битовая или условная); для

146

битовых неисправностей номер бита. Поскольку все биты HDL описания ЦС могут искажаться, то вводится битовая мера покрытия неисправностей.

При этом мера показывает число искаженных битов в сигналах,

переменных или портах, которые обнаруживаются на тестовых воздействиях. Далее рассмотрим модели функциональных неисправностей и меры покрытия, определенные на блок-схемах HDL. Ранние методы функционального тестирования использовали модели и меры покрытия ветвей и путей:

1. Мера покрытия ветвей ассоциирует каждую неисправность с определенным направлением ветви в каждом условном операторе (точке ветвления). Отметим, что полное покрытие ветвей требует, чтобы пути блок-схемы покрывали все ветви каждого условного оператора.

Некоторые исследователи используют меру покрытия ветвей при генерации тестов для оценки их полноты.

2. Мера покрытия путей налагает более жесткие требования по сравнению с предыдущей, так как отражает число исполняемых путей для тестовых данных. При этом предполагается, что ошибка ассоциируется с некоторым путем блок-схемы. Поэтому прохождение всех путей в блок-

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

Поскольку число исполнимых путей в блок-схеме растет экспоненциально с числом условий, некоторыми исследователями была предпринята попытка выделить некоторое подмножество путей, достаточное для тестирования [63].

4.10.7 Тэги

Схема реализует вычисление некоторой функции и можно рассматривать этот процесс как последовательность присваивания

147

значений переменным. Ошибки в вычислении моделируются как ошибки в операторах присваивания, т.е. любое значение, присвоенное какой либо переменной в HDL описании, может быть ошибочным. Возможность наличия ошибки представляется установкой метки для переменной (с

левой стороны в операторе присваивания) – символа ∆, который обозначает возможное изменение значения переменной в присутствии ошибки [60]. Рассматриваются как положительные ∆, так и отрицательные метки – ∆. Для каждого функционального теста моделируется схема чтобы определить какой из тэгов активизируется первым (посредством активизации соответствующего оператора присваивания) и затем тэг распространяется на внешние выходы схемы. Когда тэг распространяется на внешние выходы схемы, то это означает, что существует путь от точки ввода тэга до одного из внешних выходов и этот путь активизируется данным функциональным тестом. Затем находится покрытие неисправностей для данного функционального теста. Следует отметить,

что при моделировании эффект каждого тэга учитывается отдельно

(аналогично одиночным константным неисправностям при моделировании на логическом уровне) Однако программа моделирования неисправностей может моделировать эффекты нескольких тэгов параллельно, также как и в параллельном методе моделирования константных неисправностей.

При этом не требуется, чтобы ошибки в коде описания на HDL,

всегда приводили к неправильным значениям некоторых переменных.

Ошибки типа пропуска отдельных переменных или операторов, или следствие общего непонимания функционирования проектируемой ЦС,

могут не вызывать такого эффекта. Тэги отражают два основных требования при верификации модели: 1) активизация операторов в HDL

программе; 2) наблюдение эффекта активизации Рассмотрим вопросы присоединения тэгов к операторам

(присваивания), включающие арифметические и булевы операторы.

148

Положительные и отрицательные тэги вносятся в операторы присваивания посредством присоединения тэгов к переменным, находящимся слева в операторах присваивания. Двоичная векторная переменная, в основном,

трактуется, как одно целое и ей ставится в соответствие один тэг. Но если ее отдельные биты обрабатываются отдельно, то каждый из них трактуется как независимая переменная и ей соответствует свой тэг.

В условных операторах к управляющим переменным (стоящих после if) тэги не присоединяются. Но для остальных переменных (данных) они могут вноситься.

Таблица 4.5

 

 

 

 

Таблица 4.6

 

 

 

 

 

 

 

 

AND

 

0

1

0 + ∆

1 - ∆

 

INVERT

 

 

 

 

 

 

 

 

0

 

0

0

0

0

 

1

 

 

 

 

 

 

 

 

1

 

0

1

0 + ∆

1 - ∆

 

0

 

 

 

 

 

 

 

 

0 + ∆

 

0

0 + ∆

0 + ∆

0

 

1 - ∆

 

 

 

 

 

 

 

 

1 - ∆

 

0

1 - ∆

0

1 - ∆

 

0 + ∆

 

 

 

 

 

 

 

 

Основной проблемой является распространение тэгов через элементы и модули HDL описания ЦС. Для того, чтобы значение входа распространялось через модуль, остальные входы должны иметь неконтролирующие значения. Например, если в вентиле И на какой либо вход подается контролирующее значение 0, то для остальных входов невозможно распространить на выход любое значение сигнала. Отметим,

что для простых логических вентилей распространение тэгов фактически совпадает с D-распространением. Символ D (как и тэг) показывает рассогласование сигналов в исправной и неисправной схеме. Аналогично

D-исчислению [44] разработано ∆-исчисление. Таблицы 4.5, 4.6

149

представляют ∆-исчисление для вентилей И и НЕ и используются для распространения тэгов через эти элементы.

Рассмотрим распространение тэгов через арифметические операторы. Каждый модуль работает с n-разрядными двоичными

векторами. Для каждого оператора после моделирования имеем

v(f)==v(a)<op>v(b), где v(x) означает значение векторной переменной x.

Далее положительный или отрицательный тэг может быть присоединен к v(f), что обозначается соответственно (v(f)+∆) или (v(f)-∆).

Рассмотрим тэг-распространение через некоторые типовые модули.

Если все тэги на входах сумматора положительны и значение результата v(f) < MAXINT (наибольшего n-разрядного целого числа), то выходу сумматора присваивается (v(f)+∆). Аналогично, в случае наличия на всех входах отрицательных тэгов, выходу присваивается (v(f)+∆). Если входы имеют как положительные, так и отрицательные тэги, то выходу тэг не присваивается.

Для умножителя при тэг-распространении на его входах все тэги должны быть одного знака. Положительный тэг на входе a

распространяется на выход f, если v(b)≠0 или если b имеет положительный тэг. В этом случае выходу умножителя присваивается (v(f)+∆).

Аналогичные действия выполняются для отрицательных входных тэгов.

Если существуют тэги на входах a и b компаратора, то для распространения они должны иметь противоположные знаки. Иначе тэг на выход не распространяется. Предположим, что положительный тэг есть только на одном входе a, и либо положительный тэг на входе a и

отрицательный тэг на входе b. Если v(a) ≤ v(b), то тэг распространяется на выход и выходу присваивается (0+∆). Аналогичные действия выполняются для других тэгов и других типов компараторов.

150