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

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

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

else if(извлечение из стека импликации альтернативного значения);

if(нет вариантов в стеке импликации) stop;

неисправность избыточна;

else return;

}

Рис.6.11 D-алгоритм

Рассмотрим применение D-алгоритма к построению теста для неисправности x60 схемы, изображенной на рис.6.10.

При инициализации мы получаем куб K, представленный в табл.6.13.

Элементы G3 и G4 одинаково близко расположены к выходу, D-граница содержит элементы {G4, G3}. Выбираем для D-распространения элемент

G3. Пересекая D-куб узла разветвления элемента G3 с кубом K, как это показано в табл.6.13 б), в), получаем куб K1. Пополняем D-границу {G5,

G3}. Далее выбираем D’-куб элемента G5 и, пересекая его с K2, получаем

K3, как показано в табл.6.13 г). Так как мы достигли внешнего выхода, то этап D-распространения заканчивается. Далее нужно выполнить процедуру доопределения. Стек доопределения в этот момент должен содержать элементы {G2, G3}. Выбираем 1-куб элемента G2 и, выполняя пересечение его с кубом K3, как показано в табл.6.13 д), получаем K4. Аналогично доопределяем входы G3 ( табл.6.12 е). В результате получаем тест х2=0,

x3=1, x4=1, x5=1.

Как было показано выше, в D-алгоритме используется следующая стратегия при построении теста. Сначала значения D, D’ распространяются до внешнего выхода, а затем с помощью процедуры доопределения находится тестовый набор. Если во время выполнения процедуры доопределения возникает противоречие, то это приводит к поиску другого пути D-распространения. Если противоречивые ситуации возникают часто,

то существенно увеличивается время генерации теста. Например, для схем,

содержащих много элементов "исключающее ИЛИ" (схем контроля четности и т.п.), процедура D-распространения выполняется достаточно

241

легко, однако при выполнении процедуры доопределения часто возникают противоречия и для таких схем D-алгоритм требует значительных затрат времени. Для этого класса схем был разработан метод РОDЕМ, который хорошо зарекомендовал себя и для других типов схем.

Таблица 6.13

Куб

1

2

3

4

5

6

7

8

9

10

11

12

 

 

 

 

 

 

 

 

 

 

 

 

 

K0

u

1

1

u

u

D

u

u

u

u

u

u

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K0

u

1

1

u

u

D

u

u

u

u

u

u

 

 

 

 

 

 

 

 

 

 

 

 

 

t31

u

u

u

u

u

D

D

D

u

u

u

u

K1

u

1

1

u

u

D

D

D

u

u

u

u

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

б)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K1

u

1

1

u

u

D

D

D

u

u

u

u

 

 

 

 

 

 

 

 

 

 

 

 

 

t22

u

u

u

u

u

u

u

D

1

u

D’

u

K2

u

1

1

u

u

D

D

D

1

u

D’

u

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K2

u

1

1

u

u

D

D

D

1

u

D’

u

t29

u

u

u

u

u

u

u

u

u

0

D’

D’

K3

u

1

1

u

u

D

D

D

1

0

D’

D’

 

 

 

 

 

 

г)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K3

u

1

1

u

u

D

D

D

1

0

D’

D’

C10

u

u

u

1

1

u

u

u

1

u

u

u

K4

u

1

1

1

1

D

D

D

1

0

D’

D’

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

д)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K4

u

1

1

1

1

D

D

D

1

0

D’

D’

 

 

 

 

 

 

 

 

 

 

 

 

 

C11

1

u

u

u

u

u

u

u

u

0

u

u

K5

1

1

1

1

1

D

D

D

1

0

D’

D’

 

 

 

 

 

 

е)

 

 

 

 

 

 

242

6.8 Метод PODEM

Как и D-алгоритм, этот метод использует тот же шестизначный алфавит T6, но в нем применяется другая стратегия поиска тестового набора [88]. Отметим, что целью любого алгоритма построения теста для данной неисправности является входной двоичный вектор, который проверяет эту неисправность. Таким образом, искомый тест принадлежит пространству всевозможных двоичных входных наборов. Но пространством поиска в D-алгоритме является множество всевозможных

(в том числе и кратных) 2N путей в схеме от места неисправности до какого либо внешнего выхода, где N число элементов. В методе PODEM

пространством поиска является непосредственно множество всевозможных входных наборов, мощность которого 2n обычно меньше 2N,

поскольку, как правило, n<N. Это позволяет существенно ускорить процесс поиска.

Основные отличия метода PODEM от D-алгоритма следующие:

1)другая процедура D-распространения;

2)отличная процедура доопределения;

3)выполняется только прямая импликация (от внешних входов к выходам);

4)иная стратегия поиска решения и обработки противоречивых ситуаций.

D-распространение в методе РОДЕМ выполняется пошагово. В D-

границе выбирается в качестве «цели» наиболее перспективный элемент

(ближайший к внешнему выходу или имеющий лучший показатель наблюдаемости) и затем сразу с помощью других процедур (в первую очередь процедуры продвижения назад) находится входной набор,

обеспечивающий достижение поставленной локальной цели – D-

распространения через данный элемент. Напомним, что в D-алгоритме D-

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

доопределение.

243

Алгоритм выбора цели для константной неисправности вентиля i v

представлен псевдокодом рис.6.12.

Цель(i,v)

// цель неисправность i v

{

if(значение i не определено )

then return(i, v );

Выбор элемента G из D-границы;

Выбор неопределенного входа m элемента G;

с=“доминирующее значение” G;

return( m,c );

}

Рис.6.12 Выбор цели в PODEM

Здесь выбор элемента в D-границе производится по лучшему показателю наблюдаемости (в простейшем случае выбирается элемент,

ближайший к одному из внешних выходов).

Доопределение производится с помощью двух основных процедур распространения назад и импликации. Эффективность метода РОДЕМ во многом определяется процедурой продвижения назад. Поскольку метод разработан для схем, описанных на уровне простейших вентилей И, ИЛИ,

НЕ, НЕ-И, НЕ-ИЛИ, то процедура достаточно проста. Начиная с элемента,

выбранного в качестве «цели», по мере продвижения к внешним входам,

процедура для каждого вентиля по заданному значению одного выхода определяет значение только одного входа. Ее результатом является присваивание определенного значения (0 или 1) одному внешнему входу схемы в результате прохождения одного пути от «целевого элемента» до этого внешнего входа.

Пусть целью процедуры является установка значения vk на линии k.

Тогда значение внешнего входа определяется четностью числа элементов

244

инвертирующего типа P вдоль выбранного пути (при прохождении через элементы НЕ, НЕ-И, НЕ-ИЛИ значение сигнала инвертируется).

Процедура продвижения назад для внутренней линии (k,vk) находит внешний вход (j,vj). При этом v j = vk p , где p четность пути от k до j.

Следует отметить, что значение присваивается только одному внешнему входу. Внутренние линии сохраняют при этом свои старые значения (как правило, неопределенные значения – u). Псевдокод процедуры продвижения назад представлен на рис.6.13.

Продвижение_назад(k,vk)

// присваивание значения одному внешнему входу

{

v=vk;

While(k является выходом элемента)

{

i=инверсия k;

выбор_входа_элемента(k);

v = v i;

k=j;

} // k – внешний вход

return(k,v); // Возврат внешнего входа k со значением v

}

выбор_входа_элемента(k)

{

if(установка выхода требует установки значения всех входов)

выбор неопределенного входа m с худшей управляемостью для v;

else

выбор неопределенного входа m с лучшей управляемостью для v;

return(m)

}

Рис.6.13 Алгоритм продвижения назад

245

Особо следует отметить правила выбора входа элемента. Здесь,

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

(например, 0 на выходе вентиля И может быть получен в результате установки 0 на любом входе; аналогично 1 на выходе вентиля ИЛИ можно получить присваиванием 1 любому из его входов) выбирается вход элемента, ближайший к внешнему входу или имеющий лучший показатель управляемости. То есть в этом случае мы выбираем наиболее перспективный путь. Если имеется только один вариант (например, 0 на выходе вентиля ИЛИ может быть получен только установкой всех его входов в 0; соответственно 1 на выходе вентиля И - установкой всех входов в 1), то выбирается вход, наиболее далекий от внешних входов или имеющий худший показатель управляемости. Это делается с целью скорейшего обнаружения противоречивой ситуации, если она возможна

вследствие данного присваивания.

После того, как внешний вход в результате этой процедуры получил определенное значение, выполняется прямая импликация путем моделирования в алфавите T6. Если в результате импликации цель достигнута, то выполняется следующий шаг D-распространения. В

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

Отметим, что табл. 6.2–5 могут быть получены с помощью функций f 0 , f D' , f D , f 1 (если получается код символа, не принадлежащего Т6, он заменяется символом u).

246

PODEM(g,v)

{

While(неисправность не проявилась на внешнем выходе)

{

if(проверка_u_пути(D-граница))

// если существует существенный путь от D-границы до выхода

{

(l,vi)=Цель(g,v); // Установка цели

(pi,vi)=Продвижение_назад(l,vi);

Импликация(pi,vi);

if(PODEM(g,v)=УСПЕХ) then return (УСПЕХ); (pi,vi)=Продвижение_назад();

Импликация(pi,vi);

if(PODEM(g,v)=УСПЕХ) then return (УСПЕХ);

Импликация(pi,u); //отмечаем вход как неопределенный

Return(НЕУДАЧА);

}

else if(стек импликации пуст)

Return(НЕУДАЧА);

Else Продвижение назад();

}

return(УСПЕХ);

}

Рис.6.14 Алгоритм PODEM

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

247

следующего внешнего входа в стеке. Процесс поиска прекращается, если цель достигнута или все варианты исчерпаны (теста не существует). На рис.6.14 представлен псевдокод алгоритма, реализующего метод РОDЕМ.

В качестве примера рассмотрим построение теста для неисправности a1 в схеме рис.6.15.

 

 

 

&

h

 

 

 

 

 

 

d

d'

 

 

 

 

&

i

 

 

 

&

j

 

 

 

&

 

 

 

e'

 

s-a-1

e

n

 

 

 

 

 

 

k

a

 

 

&

&

g

 

b

 

 

c

 

 

 

 

 

 

 

&

l

 

 

 

 

 

 

f

f '

 

 

 

 

&

m

 

 

 

 

 

 

Рис.6.15 Схема для иллюстрации метода PODEM

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

внешних входов, состояние D-границы. Соответственно на рис.6.16

показано дерево решений для этого примера. Поскольку при поиске тестового набора решение заключается в выборе одного из двух двоичных значений) 0,1 для внешнего входа, то дерево является двоичным. Здесь каждый узел соответствует внешнему входу, который принимает двоичное значение при построении теста; S и F (в квадрате) – соответственно успех и неудачу при данном выборе.

248

Таблица 6.14

Цель

Внешние

Импли-

D-распро-

 

 

входы

кация

странение

 

 

 

 

 

 

a=0

a=0

h=1

G

 

 

b=1

b=1

 

G

 

 

c=1

c=1

g=D

i, k, m

 

 

d=1

d=1

d`=0

 

 

 

 

 

i=D’

k, m, n

 

 

k=1

e=0

e`=1

 

 

 

 

 

j=0

 

 

 

 

 

k=1

 

 

Неудача

 

 

n=1

m

 

 

 

e=1

e`=0

 

 

Возврат

 

 

j=1

 

 

 

 

 

k=D’

 

 

 

 

 

n=u

m, n

 

 

l=1

f=1

f `=0

 

 

 

 

 

l=1

 

 

 

 

 

m=D’

 

 

 

 

 

n=D

 

 

 

 

 

 

 

0 а

 

 

 

 

b

 

 

 

 

1

 

 

 

 

1

c

 

 

 

 

 

d

 

1

 

0

e

1

 

 

F

1

f

 

 

 

 

S

 

Рис. 6.16 Дерево решений при поиске теста методом PODEM

249

Метод РОDЕМ существенно проще в программной реализации, чем D-

алгоритм и доказал свою эффективность для больших комбинационных ДУ (объемом до нескольких десятков тысяч вентилей).

6.9 Метод FAN

Идеи, заложенные в этом методе, получили развитие в алгоритме

«FAN» [89]. В нем предусмотрена препроцессорная обработка, в которой анализируется структура ДУ, которая разбивается на древовидные подсхемы. Метод использует следующие стратегии.

1. На каждом шаге алгоритма определяется, насколько это возможно,

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

2.Присваиваются значения D, D’, которые однозначно определяются неисправностью.

3.В том случае, когда D-граница состоит из одного элемента,

используется одномерная активизация.

4.Более эффективная процедура кратного продвижения назад (по нескольким путям).

5.Продвижение назад останавливается, если в узлах разветвления возникают противоречия (конфликт).

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

Метод SOCRATES (structure-oriented cost-reducing automatic test pattern generation) [90] также основан на алгоритме FAN с улучшенными процедурами импликации и уникальной активизации путей. Кроме этого, в

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

250