Моделирование, тестирование и диагностика цифровых устройств

Методы генерации тестов PODEM, FAN и SOCRATES

Разбить на страницы
Показывать лекцию целиком

19.1 Метод PODEM

Как и D-алгоритм, метод PODEM (path-oriented decision making) использует тот же шестизначный алфавит $$T_{6}$$, но в нем применяется другая стратегия поиска тестового набора [19.1]. Отметим, что целью любого алгоритма построения теста для данной неисправности является входной двоичный вектор, который проверяет эту неисправность. Таким образом, искомый тест принадлежит пространству всевозможных двоичных входных наборов. Но пространством поиска в D-алгоритме является множество всевозможных (в том числе и кратных) $$2^{N}$$ путей в схеме от места неисправности до какого либо внешнего выхода, где $$N$$ - число элементов. В методе PODEM пространством поиска является непосредственно множество всевозможных входных наборов, мощность которого $$2^{n}$$ обычно меньше $$2^{N}$$, поскольку, как правило, $$n<N$$. Это позволяет существенно ускорить процесс поиска.

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

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

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

    (рис 19.1) Выбор цели в PODEM

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

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

    Пусть целью процедуры является установка значения $$v_{k}$$ на линии $$k$$. Тогда значение внешнего входа определяется четностью числа элементов инвертирующего типа $$P$$ вдоль выбранного пути (при прохождении через элементы НЕ, НЕ-И, НЕ-ИЛИ значение сигнала инвертируется). Процедура продвижения назад для внутренней линии $$(k,v_{k})$$ находит внешний вход $$(j,v_{j})$$. При этом $$v_j=v_k\oplus p$$, где $$p$$ - четность пути от $$k$$ до $$j$$. Следует отметить, что значение присваивается только одному внешнему входу. Внутренние линии сохраняют при этом свои старые значения (как правило, неопределенные значения - $$u$$). Псевдокод процедуры продвижения назад представлен на рис. 19.2.

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

    (рис 19.2) Алгоритм продвижения назад

    После того, как внешний вход в результате этой процедуры получил определенное значение, выполняется прямая импликация путем моделирования в алфавите $$T_{6}$$. Если в результате импликации цель достигнута, то выполняется следующий шаг D-распространения. В противном случае, выполняется процедура продвижения назад для элементов записанных в стек на предыдущем шаге, до тех пор, пока не будет достигнута цель. Прямая импликация выполняется путем моделирования в алфавите $$Т_{6}$$, как правило, с помощью таблиц для вентилей, представленных в табл. 18.1-4, от внешних входов к выходам.

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

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

    (рис 19.3) Алгоритм PODEM

    В качестве примера рассмотрим построение теста для неисправности $$a\equiv 1$$ в схеме рис. 19.4. В табл. 19.1 показаны результаты основных этапов генерации теста для этой неисправности. Здесь для каждого этапа приведены значения цели, внешних входов, состояние D-границы. Соответственно на рис. 19.5 показано дерево решений для этого примера. Поскольку при поиске тестового набора решение заключается в выборе одного из двух двоичных значений) 0,1 для внешнего входа, то дерево является двоичным. Здесь каждый узел соответствует внешнему входу, который принимает двоичное значение при построении теста; $$S$$ и $$F$$ (в квадрате) - соответственно успех и неудачу при данном выборе.

    (рис 19.4) Схема для иллюстрации метода PODEM (рис 19.5) Дерево решений при поиске теста методом PODEM
    Цель Внешние входы Импликация 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$$

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

    19.2 Метод FAN

    Идеи, заложенные в этом методе, получили развитие в алгоритме "FAN" (fan-out oriented test generation)[19.2]. В нем предусмотрена препроцессорная обработка, в которой анализируется структура ДУ, которая разбивается на древовидные подсхемы. Метод использует следующие стратегии.

  • На каждом шаге алгоритма определяется, насколько это возможно, множество сигналов, которые получают определенные значения вследствие импликации. В отличие от предыдущего метода, здесь используется как прямая, так и обратная импликация.
  • Присваиваются значения $$D$$, $$D'$$, которые однозначно определяются неисправностью.
  • В том случае, когда $$D$$-граница состоит из одного элемента, используется одномерная активизация.
  • Более эффективная процедура кратного продвижения назад (по нескольким путям).
  • Продвижение назад останавливается, если в узлах разветвления возникают противоречия (конфликт).
  • Более эффективные процедуры продвижения назад и перебора позволяют уменьшить количество возвратов при поиске теста и тем самым уменьшить время генерации теста.

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

    Процедура кратного продвижения назад по нескольким путям позволяет методу FAN по сравнению с PODEM быстрее обнаруживать конфликтные ситуации в процессе построения тестов и тем самым сократить число возвратов при переборе. Напомним, что процедура продвижения назад в PODEM при прохождении каждого логического элемента выбирает только один его вход и определяет значение для него, что фактически способствует увеличению перебираемых вариантов. Особенно это заметно для ситуаций с выбором "тяжелых подзадач". Например, для обеспечения значения 1 выхода вентиля И необходимо, чтобы все его входы получили также значения 1.Но метод PODEM выберет и присвоит значение только одному (самому "тяжелому" входу) и распространит его назад ко входам схемы. Для остальных входов выполняется своя процедура продвижения назад. В методе FAN в такой ситуации всем входам присваиваются значения 1, которые далее распространяются ко входам схемы одновременно. Это тоже способствует более раннему обнаружению конфликтов при генерации теста.

    В том случае, когда $$D$$-граница содержит один элемент, в методе FAN применяется одномерная активизация. Рассмотрим схему рис. 19.6 [19.3],

    (рис 19.6) Пример схемы для активизации в FAN

    для которой необходимо построить тест для неисправности coinst1 входа вентиля G. Влияние неисправности должно распространяться через мультиплексор и вентиль H. Для распространения через вентиль H его верхнему входу необходимо присвоить значение 1. Но из процедуры активизации в месте неисправности следует, что этот вход устанавливается в блокирующее значение 0. Поэтому для обнаружения подобных ситуаций в методе FAN выполняется одномерная активизация. Для нашего примера при активизации необходимо установить значение верхнего входа 1. Оно при импликации дает конфликт в месте неисправности.

    На этапе препроцессорной обработки схема разбивается на одновыходные древовидные подсхемы, которые не содержат сходящихся разветвлений. Очевидно, внутри таких подсхем продвижение назад выполняется без конфликтов и может остановиться на линиях, которые являются выходами предыдущих подсхем без разветвлений. После того, как в процессе продвижения назад внутри подсхемы некоторые линии получили определенно значение, можно выполнить процедуру подтверждения этих значений. Рассмотрим узел разветвления $$J$$ на рис. 19.7 [19.3] c ветвями $$J_{1}$$ и $$J_{2}$$ .

    (рис 19.7) Пример схемы, содержащей древовидную подсхему

    Здесь вентили $$G$$ и $$J$$ являются выходами древовидных подсхем (иногда их называют головными - head). Если существует путь от узла разветвления вперед (по направлению к выходам) до схемы $$P$$, то схема называется граничной (bound). Схемы, которые не являются граничными, называются свободными. Для нашего примера схемы $$A,B,C,D,E,F,G,H,J$$ являются граничными, в то время как схемы $$J_{1}$$, $$J_{2}$$, $$K$$ и $$L$$ представляют свободные схемы. Свободные схемы, которые непосредственно питают граничные cхемы (как в случае разветвления $$J$$) или через логические элементы (случай $$G$$) являются головными (head). Они определяют границу между свободными и граничными линиями.

    Как и предыдущий метод FAN работает на каждом шаге на достижение поставленных целей. Это логические значения некоторых линий схемы, которые должны быть обеспечены в течение поиска теста. Процедура продвижения назад начинается с начальных целей. На начальном этапе эти цели обусловлены значениями $$D$$ или $$D'$$ на неисправных линиях, которые определяются при инициализации неисправностей. Начальные цели становятся текущими при входе в процедуру кратного продвижения назад Mback. В процессе выполнения этой процедуры некоторые линии схемы получают новые значения, которые могут стать новыми текущими целями или головными (head) целями или целями узлов разветвления (FPO), которые в конечном счете должны быть выполнены.Здесь цели соответствующие головным (head) линиям, называются головными. Аналогично определяются цели соответствующие узлам разветвления FPO. При выполнении текущих целей в процессе продвижения назад FAN останавливается на узлах разветвлениях и головных линиях до тех пор, пока не выполнены текущие цели. Затем выбирается узел разветвления, ближайший к внешнему выходу, если такой существует. Головные (head) цели всегда выполняются последними, после того, как достигнуты остальные цели, которые вследствие отсутствия разветвлений могут быть выполнены без конфликтов. Если на узле разветвления возникает конфликтная ситуация, то она должна быть разрешена. Конфликт случается в том случае, когда при выполнении процедуры кратного продвижения назад два или более путей сходятся на узле разветвления с противоположными требованиями (0 и 1). Если на узле разветвления нет конфликта, то процедура кратного продвижения назад Mback проходит этот узел и продолжает продвижение назад внутри другой древовидной подсхемы.

    Для того, чтобы сохранить полученные значения в процессе продвижения назад и разрешить конфликтные ситуации, FAN использует запись целей в виде триплета $$(s, n_{0}(s), n_{1}(s)$$). Здесь $$s$$ означает целевую схему, $$n_{0}(s)$$ представляет число нулей, которые потребовалось установить при продвижении до $$s$$, и $$n_{1}(s)$$- соответственно число требуемых единиц. При этой терминологии конфликт возникает, если оба числа $$n_{0}(s)$$ и $$n_{1}(s)$$ имеют ненулевые значения. Для разрешения конфликта используется правило: если $$n_{0}(s)<n_{1}(s)$$, то узлу разветвления приписывается 1, в противном случае - 0.

    При продвижении назад через логический элемент логические значения его входов зависят от значения на выходе и типа вентиля. Для И/НЕ-И вентилей 1/0 на выходе ведет к присвоению 1 на всех его входах. Соответственно для вентилей ИЛИ/НЕ-ИЛИ 0/1 на выходе ведет к необходимости присвоения значений 0 всем его входам. Кроме этого, если вентиль инвертирующего типа, то значения $$n_{0}(s)$$ и $$n_{1}(s)$$ в триплете меняются местами. Например, для вентиля НЕ-ИЛИ с триплетом $$(Z,u,v)$$ на выходе его входам присваивается триплет $$(Z,v,u)$$, если значение 1 требуется на выходе.

    Если входу вентиля необходимо присвоить контролирующее значение (0 для И или НЕ-И, 1 для ИЛИ или НЕ-ИЛИ), то при продвижении назад через логический элемент выбирается как и в методе PODEM выбирается вход, имеющий лучшую управляемость. Предположим, что вентиль имеет входы $$X_{1},…,X_{n}$$ и выход $$Y$$ и без потери общности вход $$X_{1} $$имеет лучший показатель управляемости. Тогда при продвижении назад через логический элемент значения $$n_{0}(s)$$, $$n_{1}(s)$$ для его входов можно найти (по заданным значения выхода $$n_{0}(s)$$, $$n_{1}(s)$$) согласно правилам, приведенным в табл. 19.2 [19.3].

    N п/п Функция 0-счетчик 1-счетчик Управляемость
    1 И $$n_0(X_1)=n_0(Y)$$ $$n_1(X_1)=n_1(Y)$$ легкий 0
    2 И $$n_0(X_i)=0$$ $$n_1(X_i)=n_1(Y) $$ остальные
    3 НЕ-И $$n_0(X_1)=n_1(Y)$$ $$n_1(X_1)=n_0(Y) $$ легкий 0
    4 НЕ-И $$n_0(X_i)=0$$ $$n_1(X_i)=n_0(Y) $$ остальные
    5 ИЛИ $$n_0(X_1)=n_0(Y)$$ $$n_1(X_1)=n_1(Y) $$ Легкая 1
    6 ИЛИ $$n_0(X_i)=n_0(Y) $$ $$n_1(X_i)=0$$ остальные
    7 НЕ-ИЛИ $$n_0(X_1)=n_1(Y)$$ $$n_0(X_1)=n_0(Y) $$ Легкая 1
    8 НЕ-ИЛИ $$n_0(X_i)=n_1(Y)$$ $$n_1(X_i)=0$$ остальные
    9 НЕ $$n_0(X)=n_1(Y)$$ $$n_1(X)=n0(Y) $$
    10 разветвление $$n_0(X)=\sum\limts_{i=1}^k{n_0(X_i)} $$ $$n_1(X)=\sum\limts_{i=1}^k{n_1(X_i)} $$

    Рассмотрим для примера распространение назад триплета через вентиль И. Если на выходе этого вентиля необходимо установить 0, то очевидно хотя бы один из его входов надо установить в 0. В методе FAN выбирается "легкий вход" с лучшим показателем управляемости за исключением тех входов, которые уже выбирались и были отвергнуты вследствие возникновения конфликта. Согласно первой строке табл. 19.2 значения $$n_{0}(X_{1})$$ и $$n_{1}(X_{1})$$ для выбранного входа приравниваются соответствующим значениям выхода элемента: $$n_{0}(X_{1})= n_{0}(Y)$$, $$n_{1}(X_{1})= n_{1}(Y)$$ . С другой стороны для неконтролирующих значений (1) имеем $$n_{0}(X_{i})=0 и n_{1}(X_{i})= n_{1}(Y)$$, что представлено во второй строке табл. 19.2. Третья строка таблицы показывает, что при наличии инверсии значения $$n_{0}(X_{1})$$ и $$n_{1}(X_{1})$$ меняются местами, то есть $$n_{0}(X_{1})= n_{1}(Y)$$, $$n_{1}(X_{1})= n_{0}(Y)$$. Аналогичный смысл имеют остальные правила, приведенные в табл. 19.2. Особо следует отметить распространение через узел разветвления, где согласно последней строке табл. 19.2. значения $$n_{0}(X)$$ и $$n_{1}(X)$$ суммируются.

    Применение этих правил рассмотрим на примере схемы 19.8 [19.3].

    (рис 19.8) Пример вычислений n0(s), n1(s) при обратном распространении

    Предположим, что в процессе обратного распространения на ветвях разветвления получились значения $$(J_{1},1,1)$$ и $$(J_{2},1,2)$$. Поскольку оба значения $$n_{0}(J_{1})$$ и $$n_{1}(J_{1})$$ для ветви $$J_{1}$$ ненулевые (как и для второй ветви $$J_{2}$$), то имеет место конфликтная ситуация - не ясно, какое значение надо присвоить для разветвления $$J$$. Поскольку нулевое значение имеет вес 2, а единичное - вес 3, то мы выбираем для $$J $$значение 1 с большим весом. Так как сложилась конфликтная ситуация, то кратное продвижение назад в этом месте прекращается и необходимо разрешить конфликт путем возврата к точке последнего выбора и присвоения альтернативного значения. Если на узле разветвления невозможно найти согласованные значения, то неисправность является избыточной.

    Рассмотрим работу метода FAN на примере схемы рис. 19.8. Здесь входы $$A$$,$$B$$ являются внешними, в то время как $$C$$, $$D$$, $$E$$ и $$F$$ соединены с выходами подсхем и имеют худшие показатели управляемости. Результаты работы FAN-алгоритма представлены в табл. 19.3[19.3]. Алгоритм стартует с начальными целями $$R$$, $$T$$ и $$U$$. Отметим, что в узле разветвления S суммирование значений схем $$T$$ и $$U$$ дает $$(S,2,0)$$. Аналогично триплеты $$N$$ и $$P$$ дают триплет $$(M,0,3)$$. Это требует установки значения 0 на одном из входов $$M$$. Для удобства предположим, что $$K$$ имеет лучший показатель управляемости. Поскольку вентиль $$M$$ инвертирующего типа, то значения $$n_{0}$$ и $$n_{1}$$ триплета меняются местами. Таким образом, выполняется обратное распространение через каждый логический элемент, в результате чего мы достигаем узла разветвления $$G$$. Здесь имеет место конфликтная ситуация, поскольку оба значения $$n_{0}$$ и $$n_{1}$$ не равны нулю. Поскольку ветвь $$H$$ имеет больший вес, то при разрешении конфликта мы в качестве первого варианта принимаем значение $$G=1$$. Поскольку $$G$$ является головным элементом подсхемы, то присваивание значений входам $$A$$ и $$B$$ откладывается. Присвоенное значение $$G=1$$ вызывает конфликт на линии $$L$$, где значение $$L=1$$ обусловлено целью $$(Q,0,2)$$. Но эта цель может быть достигнута путем присваивания $$F==1$$, что позволяет разрешить конфликт на $$G$$. Если бы конфликт не удалось разрешить вследствие невозможности присваивания $$F==1$$, мы были бы вынуждены рассмотреть альтернативный вариант для узла разветвления $$G=0$$. В этом случае конфликт можно разрешить путем присваивания $$D=0$$. При этом ответствующие триплеты должны быть вычислены заново. После разрешения конфликта процедура продвижения назад MBack выбирает узел разветвления, который определяет новые текущие цели.

    Текущие цели Стем цели Голова цели
    $$(R,0,1), (T,1,0), (U,1,0)$$
    $$(T,1,0), (U,1,0), (N,0,1)$$
    $$(U,1,0), (N,0,1)$$ $$(S,1,0)$$
    $$(N,0,1)$$ $$(S,2,0)$$
    $$(S,2,0), (M,0,1)$$
    $$(P,0,2), (Q,0,2)$$ $$(M,0,1)$$
    $$(Q,0,2)$$ $$(M,0,3)$$
    $$(L,0,2)$$ $$(M,0,3)$$
    $$(J,2,0)$$ $$(M,0,3)$$
    $$(G,2,0)$$
    $$(K,3,0)$$ $$(G,2,0)$$
    $$(H,0,3)$$ $$(G,2,0)$$
    $$(G,2,3)$$
    $$(F,0,2)$$ $$(G,2,3)$$

    В заключение рассмотрим укрупненный алгоритм метода FAN [19.3] в виде псевдокода, который представлен на рис. 19.9 в конце настоящего раздела. Здесь, прежде всего, выполняется активизация неисправности путем присваивания соответствующего значения $$D$$ или $$D'$$ на неисправной линии. Далее устанавливается значение признака $$b_flag$$, который позволяет процедуре продвижения назад MBack различать случаи, когда она стартует из множества начальных целей ($$b_flag=A$$), или множества целей, соответствующим узлам разветвления ($$b_flag=B$$). Второй вариант встречается, когда процедура продолжает распространение назад от узла разветвления. Далее выполняется D-распространение от неисправной линии до одного из внешних выходов схемы. При распространении $$D$$-значения через логический элемент его соседним входам присваиваются не блокирующие значения ( 1(0) для И (ИЛИ) ), которые заносятся в множество начальных целей. Если $$D$$-граница содержит два или более элемента, то FAN исследует эти элементы на приемлемость - допускают ли они $$D$$-распространение (выполняется проверка на наличие блокирующих значений соседних входов элементов). Далее FAN производит упорядочение возможных путей $$D$$-распространения в соответствии с показателями наблюдаемости. Отметим, что подобно $$D$$- алгоритму данный метод в случае необходимости выполняет одномерную и многомерную активизацию ($$D$$-распространение).

    Входной параметр процедуры обратного распространения MBack имеет два значения : $$A$$ и $$B$$. Значение A соответствует случаю, когда множество текущих целей $$\{СО\}$$ не пусто. В этом случае производится выбор цели. В процессе обратного распространения в случае достижения головной линии (head) она добавляется во множество головных целей $$\{HO\}$$. При обратном проходе через логический элемент прежде всего необходимо определить какие значения - контролирующие или неконтролирующие необходимо присвоить его входам. Как сказано выше, правила, приведенные в табл. 19.2 позволяют выбрать вход и логическое значение. Схема, которая питает этот вход, добавляется во множество текущих целей {СО}. При достижении узла разветвления значения $$n_{0}$$ и $$n_{1} $$ изменяются.

    Значение $$B$$ входного параметра процедуры MBack используется, если множество текущих целей пусто. В этом случае узел разветвления FPO выбирается из множества целей $$\{FPO\}$$. Однако, если выбранная цель содержит конфликт, то он должен быть разрешен. Это производится путем возврата к выбору других значений для данного узла разветвления.

    При инициализации признак $$b_flag$$ устанавливается в 1, если по окончании фазы импликации остались неподтвержденные значения в схеме. В этой точке все множества целей инициализируются (присваивается пустое множество) и производится сброс флага $$b_flag$$. Если есть неподтвержденные линии, то они образуют множество начальных целей $$\{IO\}$$. Если $$D$$-значение не достигает внешнего выхода, элемент из $$D$$-границы добавляется в $$\{IO\}$$. Как уже отмечалось алгоритм обратного распространения реализуется в MBack. Если $$b_flag$$ не установлен в 1, то нет неподтвержденных линий, которые ожидают присвоения значений. В этом случае исследуется множество целей, соответствующих узлам разветвлений $$\{FPO\}$$. Если оно не пусто, то обратное распространение выполняется от выбранного узла разветвления. По завершению кратного распространения назад в случае отсутствия конфликтов на узлах разветвления обрабатывается множество головных целей {HO}.Если есть конфликт на узле разветвления (оба значения $$n_{0}$$ и $$n_{1}$$ не равны нулю), то, как неоднократно отмечалось, присваивается значение с большим весом.

    FAN()  / / аргументы -номер элемента и линии с константной неисправностью
    {
    инициализация неисправности;  // присваивание D или D' неисправной линии
    b_flag=A; //режим обратного распространения от неподтвержденных линий
    for(::)  //основной цикл
      {
         импликация;    //прямая и обратная
          if(необходимо обратное распространение)
             b_flag=B;  // обработка разветвлений
          if(значение D достигло внешнего выхода) {
             if(число неподтвержденных линий==0)     {
                  подтверждение свободных линий;
                   return(тест);
    }         
             else{
                  конечная_цель();
                  присваивание значений линиям конечной цели;
    }         
    }     
         else {
              if(число элементов в D-границе >1) {  
    //выбор вентиля, ближайшего к выходу
                  конечная_цель();
                    присваивание значений линиям конечной цели;
    }           
               else if(число вентилей в D-границе ==1)
               одномерная активизация;
           else {                  //число вентилей ==0
               if (есть нерассмотренные варианты)  {
                    установка нерассмотренного варианта;
                    b_flag=B;
    }              
                   else
                         return (нет теста);
    }                
    }        
    }    
    } 
    
    конечная_цель()
     {
        mb = 0:
        if(b_flag==A)
            mb=Mback(A);
         else if (множество целей разветвлений не пусто)
            mb=Mback(A);
          if (mb==D) {  
               конечная_цель=FPO;  //узел разветвления
               return;
    }
    for(;;)
         {
            if (множество головных целей пусто)
             mb=Mback(A);
             выбор головной цели;
             if(головная линия не определена)
                 break;
    }       
          головная цель= конечная цель;               
    }   
    
    Mback(flag)
     {
        if(flag==A)  {
           b_flag=0;
           if (число неподтвержденных линий>0)
               {Начальная цель} =неподтвержденные линии;
           if(D-значение не достигло внешнего выхода)
               добавить элемент в D-границе в начальные цели;
               {текущая_цель}={начальная_цель};
           if({текущая_цель} не пусто)  {
                выбор текущей цели;
                 следущая_цель();
    }     
          else {
                if (FPO ==пусто)
                    return(C);
                else
                     flag=B; 
    }        
    }     
        if (flag==B) {
            выбор узла разветвления, ближайшего к внешнему выходу;
             if (p  достижимо от неисправной линии) или ( (n_{0}==0) или (n_{1}==0)  )
                 следующая_цель();
             else
                  return(D):
    }          
    }    
    
    следующая_цель()
       {
          if (текущая_цель==головная линия)
              добавить текущую_цель в головные цели;
          else if (текущая_цель питается узлом разветвления)
                 добавить n_{0} и n_{1} к  FPO    //согласно правилу 10 табл. 19.2
          else                           // определить следующую цель
           распространение назад согласно правилам табл. 19.2
    }      
    

    19.3 Метод SOCRATES

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

    Рассмотрим сначала процедуру импликации на примере схемы рис. 19.9 [19.3].

    (рис 19.9) Импликация в SOCRATES

    Здесь входной сигнал $$A=1$$ (рис. 19.9а)) имплицирует 1 на выходах вентилей ИЛИ и И. С другой стороны, на рис. 19.9b) значение $$D=0$$ имплицирует значение $$A=0$$, что следует из тождества контрапозиции импликации $$(A\Rightarrow D)\Leftrightarrow (\thicksim D\Rightarrow \thicksim A)$$, где $$\thicksim$$ обозначает дополнение. Из этого следует, что если в процессе обратного распространения выходу вентиля И будет присвоено значение $$D=0$$, то отсюда вытекает значение входа $$A=0$$. Такая импликация, в свою очередь, может привести к раннему обнаружению конфликтов и сокращению числа возвратов при поиске решения.

    Для распознавания таких ситуаций перед фазой генерации тестов выполняется фаза обучения. В процессе обучения значение 0 присваивается схеме $$n_{i}$$ с последующей импликацией и анализом результатов. Этот процесс повторяется для значения 1. Предположим, что в процессе импликации $$n_{i}$$ инициализируется значением $$v_i,v_i\in \{0,1\}$$ и схема $$n_{i}$$принимает значение $$v_j\in \{0,1\}$$ в результате выполнения импликации, то есть $$(значение(n_i)=v_i)\Rigtharrow(значение(n_j)=v_j)$$. Пусть $$n_{j}$$ управляется вентилем $$g$$. Таким образом, если: 1) $$v_j$$ требует, чтобы все входы $$g$$ имели неконтролирующие значения и 2) прямая импликация дает значение $$v_j$$ схеме $$n_{j}$$ , то импликация $$(значение(n_i)=\overline{v}_i)\Rigtharrow(значение(n_j)=\overline{v}_j)$$имеет место. Условие 1) удовлетворяется, если $$v_j$$ имеет значение 0(1) и $$g$$ является вентилем типа И/НЕ -И(ИЛИ/НЕ-ИЛИ) или исключающее ИЛИ. При этом дополнительная функция проверяет отсутствие прямого пути от $$n_{j}$$ к $$n_{i}$$ . Для комбинационной ранжированной схемы при $$j>i$$ эта функция дает значение 0. Это подтверждает выполнение условия 2). Возможно, что описанная выше процедура не всегда найдет все возможные импликации, но в целом затраты на этапе обучения окупаются за счет сокращения возвратов в поиске решения.

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

    Определение 19.1. Говорят, что сигнал $$y$$ доминирует над сигналом $$x$$-$$y\in dom(x)$$, если все ориентированные пути от $$x$$ ко внешним выходам схемы проходят через $$y$$.

    Пусть $$x$$ является единственным в $$D$$-границе и множество сигналов $$dom(x)=\{y_{1}, y_{2},…, y_{n}\}$$ - выходы сигналов соответствующих вентилей множества $$G=\{g_{1}, g_{2},…, g_{n}\}$$. Тогда для всех вентилей $$g\in G$$ неконтролирующие значения присваиваются всем входам $$g$$, которые могут быть достигнуты из $$x$$ любым путем. Это иллюстрируется на рис. 19.10.

    (рис 19.10) Улучшенная одномерная активизация

    Здесь выход вентиля $$a$$ имеет D-значение, который разветвляется на вентили $$b$$ и $$c$$, которые далее сходятся на вентиле $$g$$. Очевидно, в этой ситуации сигнал $$d$$ должен быть установлен в неконтролирующее значение $$d=1$$.

    Определение 19.2. Сигнал $$y$$ называется непосредственным доминатором сигнала $$x$$, если $$y\in dom(x)$$ и $$y$$ является элементом $$dom(x)$$ с минимальным рангом схемы.

    Если непосредственные доминаторы всех сигналов известны, то доминаторы любого сигнала могут быть определены рекурсивно. Например, если сигнал $$y$$ является непосредственным доминатором сигнала $$x$$, и сигнал $$z$$ является непосредственным доминатором $$y$$, то сигнал $$z$$ является доминатором $$x$$.

    Предложено дополнительное правило для уникальной активизации, которое требуется для обработки ситуаций, представленных на рис. 19.11.

    (рис 19.11) Уникальная активизация кратных путей

    Предположим, что сигнал $$a$$ является единственным сигналом D-границы или доминатором такого единственного сигнала. Он разветвляется на три вентиля И, на вход которых поступает сигнал $$b$$. Кроме этого, один из И вентилей имеет третий вход c. Предположим, что сигнал $$a$$ - единственный сигнал в D-границе, или доминатор такого сигнала и разветвляется на вентили $$g_{1}, g_{2},…, g_{n}$$ , которые все требуют одинаковых неконтролирующих значений - 0 или 1. Если сигнал $$b$$ разветвляется на те же вентили $$g_{1}, g_{2},…, g_{n}$$ , то $$b$$ присваивается неконтролирующее значение.

    Кратное обратное распространение в SOCRATES использует тот факт, что некоторые часто встречающиеся схемные конфигурации обрабатываются как примитивы (базовые элементы). Например, это относится к схемам, реализующим исключающее ИЛИ. Важнейшим свойством этого элемента является то, что активизированный путь на входе двухвходового элемента распространяется на его выход независимо от значения второго входа. Например, значения $$(D,0)$$ дают на выходе значение $$D$$, а $$(D,1)$$ соответственно - $$D'$$. Более того, при распространении через (НЕ) исключающее ИЛИ необходимо только следить за тем, чтобы входы имели определенные значения и не имели одновременно два $$D$$-значения. Это можно расширить на произвольное число входов элементов исключающее ИЛИ, которые SOCRATES также поддерживает.

    Отметим, что метод PODEM не поддерживает исключающее ИЛИ (как примитив) в отличие от $$D$$-алгоритма, который имеет примитивные $$D$$-кубы для этого элемента.

    Формулы Условия
    $$n_0(x_1)=n_0(y)$$ $$n_0(x_2)=n_0(y)$$ $$c_{00}< c_{11}$$
    $$n_1(x_1)=n_0(y)$$ $$n_1(x_2)=n_0(y)$$ $$c_{00}\ge c_{11}$$
    $$n_0(x_1)=n_0(x_1)+n_1(y)$$ $$n_1(x_2)=n_0(x_2)+n_1(y)$$ $$c_{01}< c_{10}$$
    $$n_1(x_1)=n_1(x_1)+n_1(y)$$ $$n_0(x_2)=n_0(x_2)+n_1(y)$$ $$c_{01}\ge c_{10}$$

    В методе SOCRATES исключающее ИЛИ обрабатывается в соответствии с правилами, представленными в табл. 19.4. Здесь $$c_{ij}$$ представляют значения управляемости, которые отражают сложность установки $$x_{1}$$ в $$i$$ и $$x_{2}$$ в $$j$$ для $$i,j\in\{0,1\}$$, где $$x_{1}$$ и $$x_{2}$$ - входы для двухвходового вентиля исключающего ИЛИ и $$y$$ - его выход. Этот подход можно использовать и для других примитивов высокого уровня, для которых получены соответствующие формулы. Основное преимущество этих примитивов лежит в сокращении числа разветвлений (потенциальных конфликтов). Но иногда это можно реализовать и на вентильном уровне. Например, если двухвходовой мультиплексор имеет 1 на обоих входах данных, то выходу следует установить значение 1 даже при наличии неопределенного значения на управляющем входе.

    Ключевые термины:

    D-распространение - распространение в схеме символов $$D$$, $$D'$$, характеризующих различие значений сигналов в исправной и неисправной схеме.

    Обратное распространение (продвижение назад) - процедура поиска значений сигналов, обеспечивающих значения сигналов для элементов, находящихся ближе к выходам. Выполняется в обратном порядке: от выходов ко входам.

    Прямая импликация - процедура снятия неопределённости на линиях схемы, выполняемая в прямом порядке от входов к выходам.

    Обратная импликация - процедура снятия неопределённости на линиях схемы, выполняемая в обратном порядке от выходов ко входам.

    Краткие итоги

    В лекции продолжено рассмотрение задачи построения проверяющего теста для конкретной заданной неисправности с использованием 6-значного алфавита.

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

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

    В разделе 19.3 описан метод SOCRATES, являющийся развитием предыдущего метода FAN за счет улучшения процедур обратного распространения, импликации, уникальной активизации и использования более крупных примитивов.

    Вопросы и упражнения

  • Чем отличается метод PODEM от $$D$$-алгоритма?
  • Опишите процедуру продвижения назад в методе PODEM.
  • Что такое "тяжелый" и "легкий" вход?
  • Как определяется цель в методе PODEM?
  • Как обрабатывается конфликт в методе PODEM?
  • Приведите общий алгоритм PODEM.
  • Постройте тест методом PODEM для неисправности $$x_{8}=0$$ приведенной ниже схемы рис. 19.12. (рис 19.12) Схема для упражнения 7, 12
  • Чем отличается метод FAN от PODEM?
  • Чем отличается процедура кратного продвижения назад?
  • Опишите улучшения в импликации по сравнению с предыдущими методами.
  • Прокомментируйте псевдокод алгоритма FAN.
  • Постройте тест методом FAN для неисправности const.0 выхода второго вентиля первого уровня приведенной ниже схемы рис. 19.12.

    Чем отличается метод SOCRATES от метода FAN?

  • Приведите пример уникальной активизации.
  • В чем суть фазы обучения?
  • Приведите пример функционального примитива.
  • Что дает использование более крупных примитивов?
  • Страницы:

    19.1 Метод PODEM

    Как и D-алгоритм, метод PODEM (path-oriented decision making) использует тот же шестизначный алфавит $$T_{6}$$, но в нем применяется другая стратегия поиска тестового набора [19.1]. Отметим, что целью любого алгоритма построения теста для данной неисправности является входной двоичный вектор, который проверяет эту неисправность. Таким образом, искомый тест принадлежит пространству всевозможных двоичных входных наборов. Но пространством поиска в D-алгоритме является множество всевозможных (в том числе и кратных) $$2^{N}$$ путей в схеме от места неисправности до какого либо внешнего выхода, где $$N$$ - число элементов. В методе PODEM пространством поиска является непосредственно множество всевозможных входных наборов, мощность которого $$2^{n}$$ обычно меньше $$2^{N}$$, поскольку, как правило, $$n<N$$. Это позволяет существенно ускорить процесс поиска.

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

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

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

    (рис 19.1) Выбор цели в PODEM

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

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

    Пусть целью процедуры является установка значения $$v_{k}$$ на линии $$k$$. Тогда значение внешнего входа определяется четностью числа элементов инвертирующего типа $$P$$ вдоль выбранного пути (при прохождении через элементы НЕ, НЕ-И, НЕ-ИЛИ значение сигнала инвертируется). Процедура продвижения назад для внутренней линии $$(k,v_{k})$$ находит внешний вход $$(j,v_{j})$$. При этом $$v_j=v_k\oplus p$$, где $$p$$ - четность пути от $$k$$ до $$j$$. Следует отметить, что значение присваивается только одному внешнему входу. Внутренние линии сохраняют при этом свои старые значения (как правило, неопределенные значения - $$u$$). Псевдокод процедуры продвижения назад представлен на рис. 19.2.

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

    (рис 19.2) Алгоритм продвижения назад

    После того, как внешний вход в результате этой процедуры получил определенное значение, выполняется прямая импликация путем моделирования в алфавите $$T_{6}$$. Если в результате импликации цель достигнута, то выполняется следующий шаг D-распространения. В противном случае, выполняется процедура продвижения назад для элементов записанных в стек на предыдущем шаге, до тех пор, пока не будет достигнута цель. Прямая импликация выполняется путем моделирования в алфавите $$Т_{6}$$, как правило, с помощью таблиц для вентилей, представленных в табл. 18.1-4, от внешних входов к выходам.

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

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

    (рис 19.3) Алгоритм PODEM

    В качестве примера рассмотрим построение теста для неисправности $$a\equiv 1$$ в схеме рис. 19.4. В табл. 19.1 показаны результаты основных этапов генерации теста для этой неисправности. Здесь для каждого этапа приведены значения цели, внешних входов, состояние D-границы. Соответственно на рис. 19.5 показано дерево решений для этого примера. Поскольку при поиске тестового набора решение заключается в выборе одного из двух двоичных значений) 0,1 для внешнего входа, то дерево является двоичным. Здесь каждый узел соответствует внешнему входу, который принимает двоичное значение при построении теста; $$S$$ и $$F$$ (в квадрате) - соответственно успех и неудачу при данном выборе.

    (рис 19.4) Схема для иллюстрации метода PODEM (рис 19.5) Дерево решений при поиске теста методом PODEM
    Цель Внешние входы Импликация 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$$

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

    19.2 Метод FAN

    Идеи, заложенные в этом методе, получили развитие в алгоритме "FAN" (fan-out oriented test generation)[19.2]. В нем предусмотрена препроцессорная обработка, в которой анализируется структура ДУ, которая разбивается на древовидные подсхемы. Метод использует следующие стратегии.

  • На каждом шаге алгоритма определяется, насколько это возможно, множество сигналов, которые получают определенные значения вследствие импликации. В отличие от предыдущего метода, здесь используется как прямая, так и обратная импликация.
  • Присваиваются значения $$D$$, $$D'$$, которые однозначно определяются неисправностью.
  • В том случае, когда $$D$$-граница состоит из одного элемента, используется одномерная активизация.
  • Более эффективная процедура кратного продвижения назад (по нескольким путям).
  • Продвижение назад останавливается, если в узлах разветвления возникают противоречия (конфликт).
  • Более эффективные процедуры продвижения назад и перебора позволяют уменьшить количество возвратов при поиске теста и тем самым уменьшить время генерации теста.

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

    Процедура кратного продвижения назад по нескольким путям позволяет методу FAN по сравнению с PODEM быстрее обнаруживать конфликтные ситуации в процессе построения тестов и тем самым сократить число возвратов при переборе. Напомним, что процедура продвижения назад в PODEM при прохождении каждого логического элемента выбирает только один его вход и определяет значение для него, что фактически способствует увеличению перебираемых вариантов. Особенно это заметно для ситуаций с выбором "тяжелых подзадач". Например, для обеспечения значения 1 выхода вентиля И необходимо, чтобы все его входы получили также значения 1.Но метод PODEM выберет и присвоит значение только одному (самому "тяжелому" входу) и распространит его назад ко входам схемы. Для остальных входов выполняется своя процедура продвижения назад. В методе FAN в такой ситуации всем входам присваиваются значения 1, которые далее распространяются ко входам схемы одновременно. Это тоже способствует более раннему обнаружению конфликтов при генерации теста.

    В том случае, когда $$D$$-граница содержит один элемент, в методе FAN применяется одномерная активизация. Рассмотрим схему рис. 19.6 [19.3],

    (рис 19.6) Пример схемы для активизации в FAN

    для которой необходимо построить тест для неисправности coinst1 входа вентиля G. Влияние неисправности должно распространяться через мультиплексор и вентиль H. Для распространения через вентиль H его верхнему входу необходимо присвоить значение 1. Но из процедуры активизации в месте неисправности следует, что этот вход устанавливается в блокирующее значение 0. Поэтому для обнаружения подобных ситуаций в методе FAN выполняется одномерная активизация. Для нашего примера при активизации необходимо установить значение верхнего входа 1. Оно при импликации дает конфликт в месте неисправности.

    На этапе препроцессорной обработки схема разбивается на одновыходные древовидные подсхемы, которые не содержат сходящихся разветвлений. Очевидно, внутри таких подсхем продвижение назад выполняется без конфликтов и может остановиться на линиях, которые являются выходами предыдущих подсхем без разветвлений. После того, как в процессе продвижения назад внутри подсхемы некоторые линии получили определенно значение, можно выполнить процедуру подтверждения этих значений. Рассмотрим узел разветвления $$J$$ на рис. 19.7 [19.3] c ветвями $$J_{1}$$ и $$J_{2}$$ .

    (рис 19.7) Пример схемы, содержащей древовидную подсхему

    Здесь вентили $$G$$ и $$J$$ являются выходами древовидных подсхем (иногда их называют головными - head). Если существует путь от узла разветвления вперед (по направлению к выходам) до схемы $$P$$, то схема называется граничной (bound). Схемы, которые не являются граничными, называются свободными. Для нашего примера схемы $$A,B,C,D,E,F,G,H,J$$ являются граничными, в то время как схемы $$J_{1}$$, $$J_{2}$$, $$K$$ и $$L$$ представляют свободные схемы. Свободные схемы, которые непосредственно питают граничные cхемы (как в случае разветвления $$J$$) или через логические элементы (случай $$G$$) являются головными (head). Они определяют границу между свободными и граничными линиями.

    Как и предыдущий метод FAN работает на каждом шаге на достижение поставленных целей. Это логические значения некоторых линий схемы, которые должны быть обеспечены в течение поиска теста. Процедура продвижения назад начинается с начальных целей. На начальном этапе эти цели обусловлены значениями $$D$$ или $$D'$$ на неисправных линиях, которые определяются при инициализации неисправностей. Начальные цели становятся текущими при входе в процедуру кратного продвижения назад Mback. В процессе выполнения этой процедуры некоторые линии схемы получают новые значения, которые могут стать новыми текущими целями или головными (head) целями или целями узлов разветвления (FPO), которые в конечном счете должны быть выполнены.Здесь цели соответствующие головным (head) линиям, называются головными. Аналогично определяются цели соответствующие узлам разветвления FPO. При выполнении текущих целей в процессе продвижения назад FAN останавливается на узлах разветвлениях и головных линиях до тех пор, пока не выполнены текущие цели. Затем выбирается узел разветвления, ближайший к внешнему выходу, если такой существует. Головные (head) цели всегда выполняются последними, после того, как достигнуты остальные цели, которые вследствие отсутствия разветвлений могут быть выполнены без конфликтов. Если на узле разветвления возникает конфликтная ситуация, то она должна быть разрешена. Конфликт случается в том случае, когда при выполнении процедуры кратного продвижения назад два или более путей сходятся на узле разветвления с противоположными требованиями (0 и 1). Если на узле разветвления нет конфликта, то процедура кратного продвижения назад Mback проходит этот узел и продолжает продвижение назад внутри другой древовидной подсхемы.

    Для того, чтобы сохранить полученные значения в процессе продвижения назад и разрешить конфликтные ситуации, FAN использует запись целей в виде триплета $$(s, n_{0}(s), n_{1}(s)$$). Здесь $$s$$ означает целевую схему, $$n_{0}(s)$$ представляет число нулей, которые потребовалось установить при продвижении до $$s$$, и $$n_{1}(s)$$- соответственно число требуемых единиц. При этой терминологии конфликт возникает, если оба числа $$n_{0}(s)$$ и $$n_{1}(s)$$ имеют ненулевые значения. Для разрешения конфликта используется правило: если $$n_{0}(s)<n_{1}(s)$$, то узлу разветвления приписывается 1, в противном случае - 0.

    При продвижении назад через логический элемент логические значения его входов зависят от значения на выходе и типа вентиля. Для И/НЕ-И вентилей 1/0 на выходе ведет к присвоению 1 на всех его входах. Соответственно для вентилей ИЛИ/НЕ-ИЛИ 0/1 на выходе ведет к необходимости присвоения значений 0 всем его входам. Кроме этого, если вентиль инвертирующего типа, то значения $$n_{0}(s)$$ и $$n_{1}(s)$$ в триплете меняются местами. Например, для вентиля НЕ-ИЛИ с триплетом $$(Z,u,v)$$ на выходе его входам присваивается триплет $$(Z,v,u)$$, если значение 1 требуется на выходе.

    Если входу вентиля необходимо присвоить контролирующее значение (0 для И или НЕ-И, 1 для ИЛИ или НЕ-ИЛИ), то при продвижении назад через логический элемент выбирается как и в методе PODEM выбирается вход, имеющий лучшую управляемость. Предположим, что вентиль имеет входы $$X_{1},…,X_{n}$$ и выход $$Y$$ и без потери общности вход $$X_{1} $$имеет лучший показатель управляемости. Тогда при продвижении назад через логический элемент значения $$n_{0}(s)$$, $$n_{1}(s)$$ для его входов можно найти (по заданным значения выхода $$n_{0}(s)$$, $$n_{1}(s)$$) согласно правилам, приведенным в табл. 19.2 [19.3].

    N п/п Функция 0-счетчик 1-счетчик Управляемость
    1 И $$n_0(X_1)=n_0(Y)$$ $$n_1(X_1)=n_1(Y)$$ легкий 0
    2 И $$n_0(X_i)=0$$ $$n_1(X_i)=n_1(Y) $$ остальные
    3 НЕ-И $$n_0(X_1)=n_1(Y)$$ $$n_1(X_1)=n_0(Y) $$ легкий 0
    4 НЕ-И $$n_0(X_i)=0$$ $$n_1(X_i)=n_0(Y) $$ остальные
    5 ИЛИ $$n_0(X_1)=n_0(Y)$$ $$n_1(X_1)=n_1(Y) $$ Легкая 1
    6 ИЛИ $$n_0(X_i)=n_0(Y) $$ $$n_1(X_i)=0$$ остальные
    7 НЕ-ИЛИ $$n_0(X_1)=n_1(Y)$$ $$n_0(X_1)=n_0(Y) $$ Легкая 1
    8 НЕ-ИЛИ $$n_0(X_i)=n_1(Y)$$ $$n_1(X_i)=0$$ остальные
    9 НЕ $$n_0(X)=n_1(Y)$$ $$n_1(X)=n0(Y) $$
    10 разветвление $$n_0(X)=\sum\limts_{i=1}^k{n_0(X_i)} $$ $$n_1(X)=\sum\limts_{i=1}^k{n_1(X_i)} $$

    Рассмотрим для примера распространение назад триплета через вентиль И. Если на выходе этого вентиля необходимо установить 0, то очевидно хотя бы один из его входов надо установить в 0. В методе FAN выбирается "легкий вход" с лучшим показателем управляемости за исключением тех входов, которые уже выбирались и были отвергнуты вследствие возникновения конфликта. Согласно первой строке табл. 19.2 значения $$n_{0}(X_{1})$$ и $$n_{1}(X_{1})$$ для выбранного входа приравниваются соответствующим значениям выхода элемента: $$n_{0}(X_{1})= n_{0}(Y)$$, $$n_{1}(X_{1})= n_{1}(Y)$$ . С другой стороны для неконтролирующих значений (1) имеем $$n_{0}(X_{i})=0 и n_{1}(X_{i})= n_{1}(Y)$$, что представлено во второй строке табл. 19.2. Третья строка таблицы показывает, что при наличии инверсии значения $$n_{0}(X_{1})$$ и $$n_{1}(X_{1})$$ меняются местами, то есть $$n_{0}(X_{1})= n_{1}(Y)$$, $$n_{1}(X_{1})= n_{0}(Y)$$. Аналогичный смысл имеют остальные правила, приведенные в табл. 19.2. Особо следует отметить распространение через узел разветвления, где согласно последней строке табл. 19.2. значения $$n_{0}(X)$$ и $$n_{1}(X)$$ суммируются.

    Применение этих правил рассмотрим на примере схемы 19.8 [19.3].

    (рис 19.8) Пример вычислений n0(s), n1(s) при обратном распространении

    Предположим, что в процессе обратного распространения на ветвях разветвления получились значения $$(J_{1},1,1)$$ и $$(J_{2},1,2)$$. Поскольку оба значения $$n_{0}(J_{1})$$ и $$n_{1}(J_{1})$$ для ветви $$J_{1}$$ ненулевые (как и для второй ветви $$J_{2}$$), то имеет место конфликтная ситуация - не ясно, какое значение надо присвоить для разветвления $$J$$. Поскольку нулевое значение имеет вес 2, а единичное - вес 3, то мы выбираем для $$J $$значение 1 с большим весом. Так как сложилась конфликтная ситуация, то кратное продвижение назад в этом месте прекращается и необходимо разрешить конфликт путем возврата к точке последнего выбора и присвоения альтернативного значения. Если на узле разветвления невозможно найти согласованные значения, то неисправность является избыточной.

    Рассмотрим работу метода FAN на примере схемы рис. 19.8. Здесь входы $$A$$,$$B$$ являются внешними, в то время как $$C$$, $$D$$, $$E$$ и $$F$$ соединены с выходами подсхем и имеют худшие показатели управляемости. Результаты работы FAN-алгоритма представлены в табл. 19.3[19.3]. Алгоритм стартует с начальными целями $$R$$, $$T$$ и $$U$$. Отметим, что в узле разветвления S суммирование значений схем $$T$$ и $$U$$ дает $$(S,2,0)$$. Аналогично триплеты $$N$$ и $$P$$ дают триплет $$(M,0,3)$$. Это требует установки значения 0 на одном из входов $$M$$. Для удобства предположим, что $$K$$ имеет лучший показатель управляемости. Поскольку вентиль $$M$$ инвертирующего типа, то значения $$n_{0}$$ и $$n_{1}$$ триплета меняются местами. Таким образом, выполняется обратное распространение через каждый логический элемент, в результате чего мы достигаем узла разветвления $$G$$. Здесь имеет место конфликтная ситуация, поскольку оба значения $$n_{0}$$ и $$n_{1}$$ не равны нулю. Поскольку ветвь $$H$$ имеет больший вес, то при разрешении конфликта мы в качестве первого варианта принимаем значение $$G=1$$. Поскольку $$G$$ является головным элементом подсхемы, то присваивание значений входам $$A$$ и $$B$$ откладывается. Присвоенное значение $$G=1$$ вызывает конфликт на линии $$L$$, где значение $$L=1$$ обусловлено целью $$(Q,0,2)$$. Но эта цель может быть достигнута путем присваивания $$F==1$$, что позволяет разрешить конфликт на $$G$$. Если бы конфликт не удалось разрешить вследствие невозможности присваивания $$F==1$$, мы были бы вынуждены рассмотреть альтернативный вариант для узла разветвления $$G=0$$. В этом случае конфликт можно разрешить путем присваивания $$D=0$$. При этом ответствующие триплеты должны быть вычислены заново. После разрешения конфликта процедура продвижения назад MBack выбирает узел разветвления, который определяет новые текущие цели.

    Текущие цели Стем цели Голова цели
    $$(R,0,1), (T,1,0), (U,1,0)$$
    $$(T,1,0), (U,1,0), (N,0,1)$$
    $$(U,1,0), (N,0,1)$$ $$(S,1,0)$$
    $$(N,0,1)$$ $$(S,2,0)$$
    $$(S,2,0), (M,0,1)$$
    $$(P,0,2), (Q,0,2)$$ $$(M,0,1)$$
    $$(Q,0,2)$$ $$(M,0,3)$$
    $$(L,0,2)$$ $$(M,0,3)$$
    $$(J,2,0)$$ $$(M,0,3)$$
    $$(G,2,0)$$
    $$(K,3,0)$$ $$(G,2,0)$$
    $$(H,0,3)$$ $$(G,2,0)$$
    $$(G,2,3)$$
    $$(F,0,2)$$ $$(G,2,3)$$

    В заключение рассмотрим укрупненный алгоритм метода FAN [19.3] в виде псевдокода, который представлен на рис. 19.9 в конце настоящего раздела. Здесь, прежде всего, выполняется активизация неисправности путем присваивания соответствующего значения $$D$$ или $$D'$$ на неисправной линии. Далее устанавливается значение признака $$b_flag$$, который позволяет процедуре продвижения назад MBack различать случаи, когда она стартует из множества начальных целей ($$b_flag=A$$), или множества целей, соответствующим узлам разветвления ($$b_flag=B$$). Второй вариант встречается, когда процедура продолжает распространение назад от узла разветвления. Далее выполняется D-распространение от неисправной линии до одного из внешних выходов схемы. При распространении $$D$$-значения через логический элемент его соседним входам присваиваются не блокирующие значения ( 1(0) для И (ИЛИ) ), которые заносятся в множество начальных целей. Если $$D$$-граница содержит два или более элемента, то FAN исследует эти элементы на приемлемость - допускают ли они $$D$$-распространение (выполняется проверка на наличие блокирующих значений соседних входов элементов). Далее FAN производит упорядочение возможных путей $$D$$-распространения в соответствии с показателями наблюдаемости. Отметим, что подобно $$D$$- алгоритму данный метод в случае необходимости выполняет одномерную и многомерную активизацию ($$D$$-распространение).

    Входной параметр процедуры обратного распространения MBack имеет два значения : $$A$$ и $$B$$. Значение A соответствует случаю, когда множество текущих целей $$\{СО\}$$ не пусто. В этом случае производится выбор цели. В процессе обратного распространения в случае достижения головной линии (head) она добавляется во множество головных целей $$\{HO\}$$. При обратном проходе через логический элемент прежде всего необходимо определить какие значения - контролирующие или неконтролирующие необходимо присвоить его входам. Как сказано выше, правила, приведенные в табл. 19.2 позволяют выбрать вход и логическое значение. Схема, которая питает этот вход, добавляется во множество текущих целей {СО}. При достижении узла разветвления значения $$n_{0}$$ и $$n_{1} $$ изменяются.

    Значение $$B$$ входного параметра процедуры MBack используется, если множество текущих целей пусто. В этом случае узел разветвления FPO выбирается из множества целей $$\{FPO\}$$. Однако, если выбранная цель содержит конфликт, то он должен быть разрешен. Это производится путем возврата к выбору других значений для данного узла разветвления.

    При инициализации признак $$b_flag$$ устанавливается в 1, если по окончании фазы импликации остались неподтвержденные значения в схеме. В этой точке все множества целей инициализируются (присваивается пустое множество) и производится сброс флага $$b_flag$$. Если есть неподтвержденные линии, то они образуют множество начальных целей $$\{IO\}$$. Если $$D$$-значение не достигает внешнего выхода, элемент из $$D$$-границы добавляется в $$\{IO\}$$. Как уже отмечалось алгоритм обратного распространения реализуется в MBack. Если $$b_flag$$ не установлен в 1, то нет неподтвержденных линий, которые ожидают присвоения значений. В этом случае исследуется множество целей, соответствующих узлам разветвлений $$\{FPO\}$$. Если оно не пусто, то обратное распространение выполняется от выбранного узла разветвления. По завершению кратного распространения назад в случае отсутствия конфликтов на узлах разветвления обрабатывается множество головных целей {HO}.Если есть конфликт на узле разветвления (оба значения $$n_{0}$$ и $$n_{1}$$ не равны нулю), то, как неоднократно отмечалось, присваивается значение с большим весом.

    FAN()  / / аргументы -номер элемента и линии с константной неисправностью
    {
    инициализация неисправности;  // присваивание D или D' неисправной линии
    b_flag=A; //режим обратного распространения от неподтвержденных линий
    for(::)  //основной цикл
      {
         импликация;    //прямая и обратная
          if(необходимо обратное распространение)
             b_flag=B;  // обработка разветвлений
          if(значение D достигло внешнего выхода) {
             if(число неподтвержденных линий==0)     {
                  подтверждение свободных линий;
                   return(тест);
    }         
             else{
                  конечная_цель();
                  присваивание значений линиям конечной цели;
    }         
    }     
         else {
              if(число элементов в D-границе >1) {  
    //выбор вентиля, ближайшего к выходу
                  конечная_цель();
                    присваивание значений линиям конечной цели;
    }           
               else if(число вентилей в D-границе ==1)
               одномерная активизация;
           else {                  //число вентилей ==0
               if (есть нерассмотренные варианты)  {
                    установка нерассмотренного варианта;
                    b_flag=B;
    }              
                   else
                         return (нет теста);
    }                
    }        
    }    
    } 
    
    конечная_цель()
     {
        mb = 0:
        if(b_flag==A)
            mb=Mback(A);
         else if (множество целей разветвлений не пусто)
            mb=Mback(A);
          if (mb==D) {  
               конечная_цель=FPO;  //узел разветвления
               return;
    }
    for(;;)
         {
            if (множество головных целей пусто)
             mb=Mback(A);
             выбор головной цели;
             if(головная линия не определена)
                 break;
    }       
          головная цель= конечная цель;               
    }   
    
    Mback(flag)
     {
        if(flag==A)  {
           b_flag=0;
           if (число неподтвержденных линий>0)
               {Начальная цель} =неподтвержденные линии;
           if(D-значение не достигло внешнего выхода)
               добавить элемент в D-границе в начальные цели;
               {текущая_цель}={начальная_цель};
           if({текущая_цель} не пусто)  {
                выбор текущей цели;
                 следущая_цель();
    }     
          else {
                if (FPO ==пусто)
                    return(C);
                else
                     flag=B; 
    }        
    }     
        if (flag==B) {
            выбор узла разветвления, ближайшего к внешнему выходу;
             if (p  достижимо от неисправной линии) или ( (n_{0}==0) или (n_{1}==0)  )
                 следующая_цель();
             else
                  return(D):
    }          
    }    
    
    следующая_цель()
       {
          if (текущая_цель==головная линия)
              добавить текущую_цель в головные цели;
          else if (текущая_цель питается узлом разветвления)
                 добавить n_{0} и n_{1} к  FPO    //согласно правилу 10 табл. 19.2
          else                           // определить следующую цель
           распространение назад согласно правилам табл. 19.2
    }      
    

    19.3 Метод SOCRATES

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

    Рассмотрим сначала процедуру импликации на примере схемы рис. 19.9 [19.3].

    (рис 19.9) Импликация в SOCRATES

    Здесь входной сигнал $$A=1$$ (рис. 19.9а)) имплицирует 1 на выходах вентилей ИЛИ и И. С другой стороны, на рис. 19.9b) значение $$D=0$$ имплицирует значение $$A=0$$, что следует из тождества контрапозиции импликации $$(A\Rightarrow D)\Leftrightarrow (\thicksim D\Rightarrow \thicksim A)$$, где $$\thicksim$$ обозначает дополнение. Из этого следует, что если в процессе обратного распространения выходу вентиля И будет присвоено значение $$D=0$$, то отсюда вытекает значение входа $$A=0$$. Такая импликация, в свою очередь, может привести к раннему обнаружению конфликтов и сокращению числа возвратов при поиске решения.

    Для распознавания таких ситуаций перед фазой генерации тестов выполняется фаза обучения. В процессе обучения значение 0 присваивается схеме $$n_{i}$$ с последующей импликацией и анализом результатов. Этот процесс повторяется для значения 1. Предположим, что в процессе импликации $$n_{i}$$ инициализируется значением $$v_i,v_i\in \{0,1\}$$ и схема $$n_{i}$$принимает значение $$v_j\in \{0,1\}$$ в результате выполнения импликации, то есть $$(значение(n_i)=v_i)\Rigtharrow(значение(n_j)=v_j)$$. Пусть $$n_{j}$$ управляется вентилем $$g$$. Таким образом, если: 1) $$v_j$$ требует, чтобы все входы $$g$$ имели неконтролирующие значения и 2) прямая импликация дает значение $$v_j$$ схеме $$n_{j}$$ , то импликация $$(значение(n_i)=\overline{v}_i)\Rigtharrow(значение(n_j)=\overline{v}_j)$$имеет место. Условие 1) удовлетворяется, если $$v_j$$ имеет значение 0(1) и $$g$$ является вентилем типа И/НЕ -И(ИЛИ/НЕ-ИЛИ) или исключающее ИЛИ. При этом дополнительная функция проверяет отсутствие прямого пути от $$n_{j}$$ к $$n_{i}$$ . Для комбинационной ранжированной схемы при $$j>i$$ эта функция дает значение 0. Это подтверждает выполнение условия 2). Возможно, что описанная выше процедура не всегда найдет все возможные импликации, но в целом затраты на этапе обучения окупаются за счет сокращения возвратов в поиске решения.

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

    Определение 19.1. Говорят, что сигнал $$y$$ доминирует над сигналом $$x$$-$$y\in dom(x)$$, если все ориентированные пути от $$x$$ ко внешним выходам схемы проходят через $$y$$.

    Пусть $$x$$ является единственным в $$D$$-границе и множество сигналов $$dom(x)=\{y_{1}, y_{2},…, y_{n}\}$$ - выходы сигналов соответствующих вентилей множества $$G=\{g_{1}, g_{2},…, g_{n}\}$$. Тогда для всех вентилей $$g\in G$$ неконтролирующие значения присваиваются всем входам $$g$$, которые могут быть достигнуты из $$x$$ любым путем. Это иллюстрируется на рис. 19.10.

    (рис 19.10) Улучшенная одномерная активизация

    Здесь выход вентиля $$a$$ имеет D-значение, который разветвляется на вентили $$b$$ и $$c$$, которые далее сходятся на вентиле $$g$$. Очевидно, в этой ситуации сигнал $$d$$ должен быть установлен в неконтролирующее значение $$d=1$$.

    Определение 19.2. Сигнал $$y$$ называется непосредственным доминатором сигнала $$x$$, если $$y\in dom(x)$$ и $$y$$ является элементом $$dom(x)$$ с минимальным рангом схемы.

    Если непосредственные доминаторы всех сигналов известны, то доминаторы любого сигнала могут быть определены рекурсивно. Например, если сигнал $$y$$ является непосредственным доминатором сигнала $$x$$, и сигнал $$z$$ является непосредственным доминатором $$y$$, то сигнал $$z$$ является доминатором $$x$$.

    Предложено дополнительное правило для уникальной активизации, которое требуется для обработки ситуаций, представленных на рис. 19.11.

    (рис 19.11) Уникальная активизация кратных путей

    Предположим, что сигнал $$a$$ является единственным сигналом D-границы или доминатором такого единственного сигнала. Он разветвляется на три вентиля И, на вход которых поступает сигнал $$b$$. Кроме этого, один из И вентилей имеет третий вход c. Предположим, что сигнал $$a$$ - единственный сигнал в D-границе, или доминатор такого сигнала и разветвляется на вентили $$g_{1}, g_{2},…, g_{n}$$ , которые все требуют одинаковых неконтролирующих значений - 0 или 1. Если сигнал $$b$$ разветвляется на те же вентили $$g_{1}, g_{2},…, g_{n}$$ , то $$b$$ присваивается неконтролирующее значение.

    Кратное обратное распространение в SOCRATES использует тот факт, что некоторые часто встречающиеся схемные конфигурации обрабатываются как примитивы (базовые элементы). Например, это относится к схемам, реализующим исключающее ИЛИ. Важнейшим свойством этого элемента является то, что активизированный путь на входе двухвходового элемента распространяется на его выход независимо от значения второго входа. Например, значения $$(D,0)$$ дают на выходе значение $$D$$, а $$(D,1)$$ соответственно - $$D'$$. Более того, при распространении через (НЕ) исключающее ИЛИ необходимо только следить за тем, чтобы входы имели определенные значения и не имели одновременно два $$D$$-значения. Это можно расширить на произвольное число входов элементов исключающее ИЛИ, которые SOCRATES также поддерживает.

    Отметим, что метод PODEM не поддерживает исключающее ИЛИ (как примитив) в отличие от $$D$$-алгоритма, который имеет примитивные $$D$$-кубы для этого элемента.

    Формулы Условия
    $$n_0(x_1)=n_0(y)$$ $$n_0(x_2)=n_0(y)$$ $$c_{00}< c_{11}$$
    $$n_1(x_1)=n_0(y)$$ $$n_1(x_2)=n_0(y)$$ $$c_{00}\ge c_{11}$$
    $$n_0(x_1)=n_0(x_1)+n_1(y)$$ $$n_1(x_2)=n_0(x_2)+n_1(y)$$ $$c_{01}< c_{10}$$
    $$n_1(x_1)=n_1(x_1)+n_1(y)$$ $$n_0(x_2)=n_0(x_2)+n_1(y)$$ $$c_{01}\ge c_{10}$$

    В методе SOCRATES исключающее ИЛИ обрабатывается в соответствии с правилами, представленными в табл. 19.4. Здесь $$c_{ij}$$ представляют значения управляемости, которые отражают сложность установки $$x_{1}$$ в $$i$$ и $$x_{2}$$ в $$j$$ для $$i,j\in\{0,1\}$$, где $$x_{1}$$ и $$x_{2}$$ - входы для двухвходового вентиля исключающего ИЛИ и $$y$$ - его выход. Этот подход можно использовать и для других примитивов высокого уровня, для которых получены соответствующие формулы. Основное преимущество этих примитивов лежит в сокращении числа разветвлений (потенциальных конфликтов). Но иногда это можно реализовать и на вентильном уровне. Например, если двухвходовой мультиплексор имеет 1 на обоих входах данных, то выходу следует установить значение 1 даже при наличии неопределенного значения на управляющем входе.

    Ключевые термины:

    D-распространение - распространение в схеме символов $$D$$, $$D'$$, характеризующих различие значений сигналов в исправной и неисправной схеме.

    Обратное распространение (продвижение назад) - процедура поиска значений сигналов, обеспечивающих значения сигналов для элементов, находящихся ближе к выходам. Выполняется в обратном порядке: от выходов ко входам.

    Прямая импликация - процедура снятия неопределённости на линиях схемы, выполняемая в прямом порядке от входов к выходам.

    Обратная импликация - процедура снятия неопределённости на линиях схемы, выполняемая в обратном порядке от выходов ко входам.

    Краткие итоги

    В лекции продолжено рассмотрение задачи построения проверяющего теста для конкретной заданной неисправности с использованием 6-значного алфавита.

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

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

    В разделе 19.3 описан метод SOCRATES, являющийся развитием предыдущего метода FAN за счет улучшения процедур обратного распространения, импликации, уникальной активизации и использования более крупных примитивов.

    Вопросы и упражнения

  • Чем отличается метод PODEM от $$D$$-алгоритма?
  • Опишите процедуру продвижения назад в методе PODEM.
  • Что такое "тяжелый" и "легкий" вход?
  • Как определяется цель в методе PODEM?
  • Как обрабатывается конфликт в методе PODEM?
  • Приведите общий алгоритм PODEM.
  • Постройте тест методом PODEM для неисправности $$x_{8}=0$$ приведенной ниже схемы рис. 19.12. (рис 19.12) Схема для упражнения 7, 12
  • Чем отличается метод FAN от PODEM?
  • Чем отличается процедура кратного продвижения назад?
  • Опишите улучшения в импликации по сравнению с предыдущими методами.
  • Прокомментируйте псевдокод алгоритма FAN.
  • Постройте тест методом FAN для неисправности const.0 выхода второго вентиля первого уровня приведенной ниже схемы рис. 19.12.

    Чем отличается метод SOCRATES от метода FAN?

  • Приведите пример уникальной активизации.
  • В чем суть фазы обучения?
  • Приведите пример функционального примитива.
  • Что дает использование более крупных примитивов?
  • Вернуться к учебному плану