Моделирование ЦУ с неисправностями является одним из важнейших разделов
Для решения этих задач программам моделирования неисправных схем требуется следующая информация:
Из рассмотренных в предыдущем разделе моделей неисправностей здесь чаще всего используются одиночные константные неисправности. Процесс моделирования неисправных цифровых схем представлен на рис. 11.1.
(рис 11.1) Моделирование неисправностей
Здесь неисправности из сокращенного списка вводятся в модель схемы, далее моделируется поведение схемы на входном наборе с последующим анализом. Если неисправность проверяется (дает выходную реакцию, отличную от реакции исправной схемы), то она удаляется из списка и рассматривается следующая. В противном случае подается следующий входной набор. Процесс продолжается до тех пор, пока список неисправностей не будет пуст. Отметим, что анализ неисправных схем может существенно превышать время моделирования исправных схем. Поэтому при моделировании неисправных схем решающим фактором является быстродействие (в то время как для исправных схем важна прежде всего адекватность).
По сравнению с моделированием исправных ДУ при моделировании неисправностей нужно дополнительно выполнить следующие действия:
Различают условно проверяемые неисправности и проверяемые неисправности. Неисправность считается условно проверяемой, если в результате моделирования на внешнем выходе в неисправной схеме устанавливается неопределенное значение u, а в исправной - определенное значение 0 или 1. Неисправность считается проверяемой, если в результате моделирования хотя бы на одном внешнем выходе исправной и неисправной схем устанавливаются различные определенные значения. Методы моделирования ДУ с неисправностями, в основном, отличаются различной техникой распространения влияния неисправностей.
В простейшем случае моделирование неисправностей может быть выполнено любым методом моделирования исправных ДУ путем внесения неисправности в схему в процессе моделирования. При этом, как правило, выполняется моделирование исправной схемы в
Для исправного устройства моделирование на одном наборе выполняется один раз. В случае неисправного ДУ при наличии $$N_f$$ неисправностей в наихудшем случае схема моделируется $$N_f$$ раз, так как необходимо промоделировать $$N$$ неисправных и одно исправное ДУ. Соответственно, время моделирования может возрасти в $$N_f+1$$ раз. Это является основным недостатком данного простого метода. К преимуществам метода можно отнести то, что здесь легко моделировать не только константные неисправности, но и неисправности любого другого типа, которые были рассмотрены в предыдущем разделе. При этом проще учесть такие эффекты присутствия неисправности как состязания, осцилляции и т.п., что вызывает определенные проблемы в других методах. Кроме этого, при таком подходе можно локально моделировать неисправности и на электрическом (аналоговом) уровне. Очевидно, что затраты оперативной памяти при этом методе практически не
превышают затрат моделирования исправной схемы. Отметим, что для повышения скорости моделирования при этом методе можно (и удобно) использовать аппаратные ускорители и многопроцессорные системы. В последнее время этот метод все чаще применяется на функциональном уровне, например, для моделирования устройств, описанных на
Однако для повышения эффективности моделирования неисправных схем разработаны специальные методы, которые мы рассмотрим в последующих разделах.
В параллельном методе моделирования [11.1,11.4] влияние неисправностей распространяется параллельно для группы схем. При этом в группу входят одна исправная и множество неисправных схем. Метод основан на использовании параллелизма при выполнении поразрядных логических операций в процессе моделировании логических элементов. Если компьютер имеет $$P$$-разрядное машинное слово, то обычно одновременно моделируется поведение $$P$$ схем (одна исправная и $$P-1$$ неисправных). Поэтому все неисправности ДУ разбиваются на группы, содержащие по $$P-1$$ неисправностей и моделирование схемы выполняется $$ ]N/P-1[ $$ раз, где $$N$$ - количество всех неисправностей. Если схема имеет $$M$$ внешних выходов, то число проходов моделирования ограничено снизу следующим выражением $$]N/(P-1)M[$$. Здесь $$] [$$ означает наименьшее сверху целое число.
(рис 11.2) Параллельное моделирование.
Рассмотрим сначала случай моделирования в
$$A=A \ m_0^2= 1111\1011=1011$$ и
$$B=B\vee m_1^3=0000\vee 0010=0010$$.
Далее выполняется собственно логическая операция вентиля $$C=A\B=1011\0010=0010$$, и затем вносится влияние неисправности на выходе $$C=C\vee m_1^4=0010\vee 0001=0011$$.
Далее приведем пример параллельного моделирования в
| Испр. | $$a\equiv 0$$ | $$b\equiv 1$$ | $$c\equiv 1$$ | $$d\equiv 0$$ | $$e\equiv 1$$ | $$f\equiv 0$$ | $$f\equiv 1$$ | $$g\equiv 0$$ | $$g\equiv 1$$ | $$h\equiv 0$$ | $$h\equiv 1$$ | $$i\equiv 0$$ | $$i\equiv 1$$ | $$j\equiv 0$$ | $$j\equiv 1$$ | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| $$a=1$$ | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| $$b=0$$ | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| $$c=0$$ | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| $$d=1$$ | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| $$f=a\b$$ | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| $$g=f\vee c$$ | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| $$h=c\d$$ | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
| $$e=0$$ | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| $$i=e\vee h$$ | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
| $$j=g\vee i$$ | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
| + | + | + | + | + | + | + | + |
(рис 11.3) Параллельное моделирование схемы
Данные моделирования этой схемы для одного входного набора ($$a=1, b=0, c=0, d=1, e=0$$) приведены в табл. 11.1, где строки таблицы соответствуют линиям этой схемы - машинным словам), а столбцы (биты) - моделируемым неисправным схемам. При этом в левом столбце приведены имена линий схемы (и логические выражения для внутренних линий), во втором слева столбце логические значения исправной схемы для каждой линии, и последующих столбцах (разрядах машинных слов) значения сигналов для каждой неисправной схемы. Например, третий слева столбец представляет значения сигналов на моделируемом входном наборе для схемы с неисправностью $$a\equiv 0$$. Очевидно, что для определения множества проверяемых неисправностей достаточно сравнить значения сигналов в последней строке, которая соответствует внешнему выходу схемы $$j$$. Поскольку исправная схема (второй столбец) имеет на внешнем выходе $$j=0 $$, то проверяются все неисправности, для которых $$j=1$$: $$b\equiv 1, c\equiv 1, e\equiv 1, f\equiv 1, g=1, h\equiv 1, i\equiv 1, j\equiv 1$$.
Мы рассмотрели пример параллельного моделирования схемы на одном тестовом наборе. Для моделирования на тестовой входной последовательности эту процедуру надо выполнить для каждого тестового набора. При этом аналогичным образом определяются неисправности, проверяемые на наборе. Неисправности, проверяемые всей тестовой последовательностью, находятся путём объединения всех неисправностей, проверяемых на каждом тестовом наборе.
При параллельном методе моделирования можно использовать различные виды кодирования троичного алфавита $$E_{3}=\{0,1,u\}$$, которые были представлены в лекции 4. Рассмотрим для определенности дизъюнктивный метод кодирования, представленный в табл. 11.2. Напомним, что здесь каждая троичная переменная $$X^{*}$$ представлена двумя двоичными переменными $$X^0$$ и $$X^1$$.
Соответственно моделирование одного вентиля в троичном алфавите выполняется с помощью двух булевых функций - компонент $$F^{0}$$, $$F^{1}$$, приведенных в табл. 11.3. При этом, например, моделирование вентиля И $$F=A^{*}\B^{*}$$ в троичном алфавите согласно табл.11. выполняется с помощью двух логических операций: $$F^{0}= A^{0}\vee B^{0}$$,
$$F^{1}= A^{1}\ B^{1}$$ .
Таким образом, фактически моделирование одного вентиля в троичном алфавите, как бы, заменяется моделированием двух вентилей в
(рис 11.4) Моделирование вентиля И в троичном алфавите
| $$X^{*}$$ | $$X ^{0}$$ | $$X ^{1}$$ |
|---|---|---|
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| U | 1 | 1 |
| $$f^{*}$$ | $$f ^{0}$$ | $$f ^{1}$$ |
|---|---|---|
| $$A^{*}\B^{*}$$ | $$A^{0}\vee B^{0}$$ | $$A^{1}\B^{1}$$ |
| $$A^{*}\vee B^{*}$$ | $$A^{0}\B^{0}$$ | $$A^{1}\vee B^{1}$$ |
| $$?^{*}$$ | $$A^{1}$$ | $$A^{0}$$ |
Допустим, что выполняется параллельное моделирование с 4-разрядными машинными словами. Пусть входы вентиля имеют текущие значения из троичного алфавита $$A^{*}=1$$, $$B^{*}=1$$. Тогда с учетом дизъюнктивного кодирования имеем:
$$A^{0} = (0\,0\,0\,0\,0), \,A^{1} =(1\,1\,1\,1\,1), \\ B^{0}= (0\,0\,0\,0\,0), \,B^{1}= (1\,1\,1\,1\,1).$$Пусть в левом разряде моделируется исправная схема, во 2-м разряде - неисправность $$A 0$$, в 3-м разряде - $$B 0$$, в 4-м разряде -$$A 1$$ и в 5-м разряде - $$F 0$$. Тогда после внесения влияния неисправностей на входах имеем:
$$ A^{0} = (0\,1\,0\,0\,0), \,A^{1} =(1\,0\,1\,1\,1), \\ B^{0}= (0\,0\,1\,0\,0), \,B^{1}= (1\,1\,0\,1\,1).$$После выполнения логических операций $$F^0=A^0\vee B^0$$, $$F^1=A^1\ B^1$$ и внесения неисправности выхода вентиля получаем:
$$F^{0} = (0\,1\,1\,0\,1) F^{1} = (1\,0\,0\,1\,0).$$Очевидно при переходе к троичному алфавиту затраты оперативной памяти возрастают в 2 раза, так как каждой линии схемы соответствует два машинных слова. Быстродействие уменьшается в два раза, так как вместо одной логической операции для стандартных вентилей согласно табл. 11.3 выполняется две операции.
Иногда число проходов $$]N/P-1[$$, необходимое при параллельном методе удается несколько уменьшить за счет того, что несколько независимых неисправностей могут моделироваться в одном и том же разряде. При этом неисправности должны располагаться на линиях схемы, не влияющих друг на друга.
Существенным ограничением параллельного метода моделирования является то, что при нем функционирование логических элементов должно быть описано с помощью булевых функций. Это связано с тем, что основной выигрыш во времени при этом методе получается путем выполнением логических операций, которые в компьютере реализуются параллельно над всеми разрядами машинных слов. Если же элемент описан на функциональном уровне, то каждую сложную функцию или оператор
Следует отметить, что параллельный метод использует, как правило, модель нулевой или единичной задержки логических элементов. Модель задержки с разными значениями для переднего и заднего фронтов также не может быть использована, так как в различных разрядах здесь моделируются различные неисправные схемы, в которых на одной и той же линии могут быть различные фронты изменения сигналов.
До недавнего времени в многозначных алфавитах (со значностью больше 4) этот метод распространения не получил, так как при увеличении значности алфавита резко падает скорость моделирования в виду сложности многозначных моделей логических элементов.
Метод кодирования и единая система моделей на базе четырех компонент $$f^{0}, f^{D'}, f^{D}, f^{1}$$ позволяют существенно повысить скорость параллельного метода моделирования в многозначных алфавитах и сделать ее приемлемой для практического применения. При параллельном методе моделирования влияние неисправностей распространяется параллельно для группы $$р-1$$ неисправностей ($$р $$- разрядность инструментальной ЭВМ).
При этом каждой линии схемы ставится в соответствие несколько машинных слов, число которых определяется количеством компонент в применяемом методе кодирования многозначных алфавитов. Для кодирования, представленного в табл. 7.1 , каждой линии схемы ставится в соответствие четыре машинных слова, как это показано на рис. 11.5.
При моделировании логических элементов (в данном случае конъюнкции $$f=ab$$) используются функции $$f^{0}, f^{D'}, f^{D}, f^{1}$$. На рис. 11.5 приведены закодированные значения $$a=(0\,1\,E\,1\,u\,0)$$, $$b=(1\,1\,1\,H\,1\,u)$$, из которых согласно функциям $$f^{0}, f^{D'}, f^{D}, f^{1}$$ для этого вентиля получаем значения, приведенные на рис. 11.5, что согласно данному методу кодирования соответствует $$\tilde{f}=(0\,1\,Е\,H\,u\,0)$$. При вычислении $$f^{0}, f^{D'}, f^{D}, f^{1}$$ значения всех разрядов обрабатываются параллельно с помощью соответствующих поразрядных булевых операций.
Напомним, что функции $$f^{0}, f^{D'}, f^{D}, f^{1}$$ основных вентилей таковы, что при равенстве компонент входов $$a^{D'}, a^{D}, b^{D'}, b^{D}$$ нулю сами функции $$f^{D'}, f^{D}$$ также равны нулю.
Это дает возможность не вычислять их в том случае, когда соответствующие компоненты входов нулевые. При этом, естественно, надо иметь эффективный способ проверки на равенство нулю компонент входов. Структура модели логического элемента в
(рис 11.5) Структура данных при моделировании в многозначном алфавите
(рис 11.6) Моделирование элемента в многозначном алфавите
Внесение неисправностей при моделировании в многозначных алфавитах (включая троичный) обычно производится с помощью специальных масок. Для рассматриваемого метода кодирования это может быть выполнено по следующим формулам: $$x^{0}=x^{0}\M_{1}\vee M_{2}$$, $$x^{D'}=x^{D'}\M_{1}$$, $$x^{D}=x^{D}\M_{1}$$, $$x^{l}=x^{l}\M_{1}\vee M_{3}$$. Здесь все переменные векторные, их длина равна разрядности машинного слова. Маски $$М_{1}$$, $$М_{2}$$ и $$М_{З}$$ определяют номер разряда в машинном слове и тип вносимой неисправности. Допустим, что неисправность вносится в $$j$$-ом разряде. Тогда маска $$М_{1}(М_{2},М_{3})$$ содержит все единицы (нули) кроме $$j$$-го разряда. Значения $$j$$-х разрядов $$М_{1}$$, $$М_{2}$$, $$M_{3 }$$ определяются типом вносимых неисправностей. Для исправной линии $$М_{1}(j)=1, М_{2}(j)=0, М_{З}(j)=0$$; для неисправностей const0 - $$М_{1}(j)=0, M_{2}(j)=1, M_{3}(j)=0$$; и для неисправностей const1 - $$М_{1}(j)=0, M_{2}(j)=0, M_{3}(j)=1$$. Следует отметить, что техника внесения неисправностей с помощью масок достаточно удобна и для моделирования кратных константных и сложных логических неисправностей. Все неисправности, входящие в кратную, должны заноситься в один и тот же разряд.
Ниже представлен псевдокод алгоритма параллельного моделирования неисправностей. Здесь, прежде всего, внешнее описание схемы (текстовое или графическое) транслируется в основную структуру данных - систему связанных таблиц, которая описана в лекции 5. Далее выполняется трансляция
Существенным ограничением является то, что при параллельном методе моделирования функционирование логических элементов должно быть описано с помощью булевых функций. Это связано с тем, что основной выигрыш во времени при этом методе получается при выполнении логических операций, которые практически во всех современных ЭВМ реализуются параллельно над всеми разрядами машинных слов. Если элемент описан на функциональном уровне, например, с помощью ЯРП, то нужно каждую сложную функцию (или оператор) описать с помощью булевых функций. Так мы поступали с условным оператором $$\text{If } A\text{ THEN }z<-X\text{ ELSE }s<-Y$$, заменяя его булевой функцией $$s= AX\vee\line{A}Y$$ . Аналогично можно описать и другие операторы или функции. Сложность модели при этом существенно увеличивается.
Параллельное_моделирование_неисправностей(схема,тест)
{
Ввод_схемы();
Ввод_теста();
Инициализация_схемы ();
Генерация_сниска_неисправностей();
while(есть неисправности) /* цикл по неисправностям*/
{
Формирование_группы_неисправностей();
while(есть тестовые наборы) /*цикл по тестовым наборам*/
{
Смена_набора(); /* ввод следующего набора */ Внесение_неисправностей_на_внешних_входах(); Моделирование_набора();
Внесение_неисправностей_на_внешних_выходах();
Проверка_обнаружения_неисправностей();
} /* конец цикла по наборам */
Печать_непроверенных_неисправностей();
} /* конец цикла по группам неисправностей */ Печать_полноты_теста(); Запись_непроверенных_неисправностей();
}
Моделирование_набора();
{
Инициализация();
while(есть события)
{
if(есть изменение сигнала)
{
Занесение нового значения в текущий массив;
Запоминание номера контакта первого последователя;
while(циклический список последователей не пуст)
{
Занесение элемента-последователя в очередь QJ;
}
while(очередь QJ не пуста)
{
Выбор элемента-последователя из очереди QJ;
Подготовка данных для моделирования элемента;
if(элемент входит в текущую группу неисправностей)
{
внесение неисправностей на входах элемента;
}
моделирование_элемента();
/* цикл по выходным контактам */
while(есть необработанный выход элемента)
{
if(неисправность контакта входит в текущую группу)
if(новое значение ? старому значению)
{
занесение события в очередь QJ;
} /* конец цикла по выходным контактам */
} /* конец цикла по событиям */
}
Отметим, что при таком подходе используется, в основном, сквозное, а не событийное моделирование, поскольку события могут случиться только в некотором из $$p$$ векторов, которые моделируются параллельно. Это ведет к тому, что значения элементов схемы вычисляются на каждом векторе в порядке уровней ранжирования. В этом случае целесообразно использовать компилятивный метод моделирования. Пусть $$a<1$$ означает среднюю активность моделирования в схеме, то есть долю элементов, на входах которых случаются события (изменения сигналов) на моделируемых входных наборах. Тогда при данном методе моделируется в $$1/p$$ больше элементов. чем в событийном методе. Однако, поскольку одновременно моделируется $$p$$ векторов, данный метод является эффективным при $$p>1/a$$. Например, для $$p\ge 20$$ он будет эффективным, начиная со значения $$a=5\%$$. Общее ускорение этого метода равно $$p\cdot a$$. Очевидно, что большая разрядность инструментального компьютера дает большую эффективность. Авторы метода [11.5] использовали компьютер с $$p=256$$. Отметим, что данный метод с успехом используется для моделирования больших схем (до миллиона вентилей) на случайных входных наборах.
Для повышения эффективности комбинационная схема предварительно разбивается на максимальные одновыходные подсхемы .
Определение11.1 Максимальная одновыходная подсхема - это комбинационная древовидная схема, не имеющая разветвлений, с одним выходом.
На схеме рис. 11.8 максимальные одновыходные подсхемы отмечены пунктиром. В связи с этим процедура моделирования неисправности на одном входном наборе имеет две фазы - прямую и обратную. В прямой фазе осуществляется выбор неисправности, связанной с выходом элемента, являющегося корневым для некоторой максимальной одновыходной подсхемы и выполняется распространение влияния неисправности. Если неисправность на выходе корневого элемента проверяется, то могут проверяться и неисправности, расположенные на линиях подсхемы. В этом случае выполняется обратная фаза, выявляющая проверяемые неисправности внутри подсхемы. При этом, очевидно, могут быть обнаружены только константные неисправности, инверсные значениям, установившимся при моделировании на линиях исправной подсхемы. Очевидно, что в случае непроверяемости неисправности на выходе корневого элемента неисправности поддерева заведомо не обнаруживаются.
(рис 11.8) Выделение одновыходных подсхем
Очевидно, что в основе высокого быстродействия рассматриваемого метода лежит организация параллельных вычислений в процессе прямой и обратной фазы. Эффективность организации параллельных вычислений зависит от используемого алфавита и системы многозначных функций в нем. В различных работах применяются различные алфавиты: в большинстве случаев используются простейший двоичный алфавит $$B_{2}=\{0,1\}$$ или троичный алфавит $$E_{3}=\{0,1,u\}$$, хотя известно и применение алфавитов большей значности [11.1].
В параллельном методе любая неисправность моделируется на всех входных наборах теста. В благоприятном случае входной набор проверяет эту неисправность, в противном случае моделирование выполнялось вхолостую. Поскольку при параллельном методе связь между неисправностями и входными наборами не устанавливается, то эффективность моделирования недостаточно велика. С целью ее повышения разработаны методы, в которых для заданного входного набора находятся все неисправности, проверяемые этим набором. Одним из таких методов является дедуктивный метод моделирования неисправных ДУ.
Последовательное моделирование - процесс моделирования для каждой неисправности выполняется отдельно -последовательно.
Параллельное по неисправностям моделирование - процесс моделирования выполняется параллельно (одновременно) для группы неисправностей.
Параллельное по наборам моделирование - процесс моделирования выполняется параллельно (одновременно) для группы входных наборов.
В лекции рассмотрены основные последовательные и параллельные методы моделирования неисправностей.
В разделе 11.4 параллельный метод обобщается на троичный алфавит, что позволяет повысить адекватность.
(рис 11.9) Схема для упражнения 8 (параллельное моделирование неисправностей).
Моделирование ЦУ с неисправностями является одним из важнейших разделов
Для решения этих задач программам моделирования неисправных схем требуется следующая информация:
Из рассмотренных в предыдущем разделе моделей неисправностей здесь чаще всего используются одиночные константные неисправности. Процесс моделирования неисправных цифровых схем представлен на рис. 11.1.
(рис 11.1) Моделирование неисправностей
Здесь неисправности из сокращенного списка вводятся в модель схемы, далее моделируется поведение схемы на входном наборе с последующим анализом. Если неисправность проверяется (дает выходную реакцию, отличную от реакции исправной схемы), то она удаляется из списка и рассматривается следующая. В противном случае подается следующий входной набор. Процесс продолжается до тех пор, пока список неисправностей не будет пуст. Отметим, что анализ неисправных схем может существенно превышать время моделирования исправных схем. Поэтому при моделировании неисправных схем решающим фактором является быстродействие (в то время как для исправных схем важна прежде всего адекватность).
По сравнению с моделированием исправных ДУ при моделировании неисправностей нужно дополнительно выполнить следующие действия:
Различают условно проверяемые неисправности и проверяемые неисправности. Неисправность считается условно проверяемой, если в результате моделирования на внешнем выходе в неисправной схеме устанавливается неопределенное значение u, а в исправной - определенное значение 0 или 1. Неисправность считается проверяемой, если в результате моделирования хотя бы на одном внешнем выходе исправной и неисправной схем устанавливаются различные определенные значения. Методы моделирования ДУ с неисправностями, в основном, отличаются различной техникой распространения влияния неисправностей.
В простейшем случае моделирование неисправностей может быть выполнено любым методом моделирования исправных ДУ путем внесения неисправности в схему в процессе моделирования. При этом, как правило, выполняется моделирование исправной схемы в
Для исправного устройства моделирование на одном наборе выполняется один раз. В случае неисправного ДУ при наличии $$N_f$$ неисправностей в наихудшем случае схема моделируется $$N_f$$ раз, так как необходимо промоделировать $$N$$ неисправных и одно исправное ДУ. Соответственно, время моделирования может возрасти в $$N_f+1$$ раз. Это является основным недостатком данного простого метода. К преимуществам метода можно отнести то, что здесь легко моделировать не только константные неисправности, но и неисправности любого другого типа, которые были рассмотрены в предыдущем разделе. При этом проще учесть такие эффекты присутствия неисправности как состязания, осцилляции и т.п., что вызывает определенные проблемы в других методах. Кроме этого, при таком подходе можно локально моделировать неисправности и на электрическом (аналоговом) уровне. Очевидно, что затраты оперативной памяти при этом методе практически не
превышают затрат моделирования исправной схемы. Отметим, что для повышения скорости моделирования при этом методе можно (и удобно) использовать аппаратные ускорители и многопроцессорные системы. В последнее время этот метод все чаще применяется на функциональном уровне, например, для моделирования устройств, описанных на
Однако для повышения эффективности моделирования неисправных схем разработаны специальные методы, которые мы рассмотрим в последующих разделах.
В параллельном методе моделирования [11.1,11.4] влияние неисправностей распространяется параллельно для группы схем. При этом в группу входят одна исправная и множество неисправных схем. Метод основан на использовании параллелизма при выполнении поразрядных логических операций в процессе моделировании логических элементов. Если компьютер имеет $$P$$-разрядное машинное слово, то обычно одновременно моделируется поведение $$P$$ схем (одна исправная и $$P-1$$ неисправных). Поэтому все неисправности ДУ разбиваются на группы, содержащие по $$P-1$$ неисправностей и моделирование схемы выполняется $$ ]N/P-1[ $$ раз, где $$N$$ - количество всех неисправностей. Если схема имеет $$M$$ внешних выходов, то число проходов моделирования ограничено снизу следующим выражением $$]N/(P-1)M[$$. Здесь $$] [$$ означает наименьшее сверху целое число.
(рис 11.2) Параллельное моделирование.
Рассмотрим сначала случай моделирования в
$$A=A \ m_0^2= 1111\1011=1011$$ и
$$B=B\vee m_1^3=0000\vee 0010=0010$$.
Далее выполняется собственно логическая операция вентиля $$C=A\B=1011\0010=0010$$, и затем вносится влияние неисправности на выходе $$C=C\vee m_1^4=0010\vee 0001=0011$$.
Далее приведем пример параллельного моделирования в
| Испр. | $$a\equiv 0$$ | $$b\equiv 1$$ | $$c\equiv 1$$ | $$d\equiv 0$$ | $$e\equiv 1$$ | $$f\equiv 0$$ | $$f\equiv 1$$ | $$g\equiv 0$$ | $$g\equiv 1$$ | $$h\equiv 0$$ | $$h\equiv 1$$ | $$i\equiv 0$$ | $$i\equiv 1$$ | $$j\equiv 0$$ | $$j\equiv 1$$ | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| $$a=1$$ | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| $$b=0$$ | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| $$c=0$$ | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| $$d=1$$ | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| $$f=a\b$$ | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| $$g=f\vee c$$ | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| $$h=c\d$$ | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
| $$e=0$$ | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| $$i=e\vee h$$ | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
| $$j=g\vee i$$ | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
| + | + | + | + | + | + | + | + |
(рис 11.3) Параллельное моделирование схемы
Данные моделирования этой схемы для одного входного набора ($$a=1, b=0, c=0, d=1, e=0$$) приведены в табл. 11.1, где строки таблицы соответствуют линиям этой схемы - машинным словам), а столбцы (биты) - моделируемым неисправным схемам. При этом в левом столбце приведены имена линий схемы (и логические выражения для внутренних линий), во втором слева столбце логические значения исправной схемы для каждой линии, и последующих столбцах (разрядах машинных слов) значения сигналов для каждой неисправной схемы. Например, третий слева столбец представляет значения сигналов на моделируемом входном наборе для схемы с неисправностью $$a\equiv 0$$. Очевидно, что для определения множества проверяемых неисправностей достаточно сравнить значения сигналов в последней строке, которая соответствует внешнему выходу схемы $$j$$. Поскольку исправная схема (второй столбец) имеет на внешнем выходе $$j=0 $$, то проверяются все неисправности, для которых $$j=1$$: $$b\equiv 1, c\equiv 1, e\equiv 1, f\equiv 1, g=1, h\equiv 1, i\equiv 1, j\equiv 1$$.
Мы рассмотрели пример параллельного моделирования схемы на одном тестовом наборе. Для моделирования на тестовой входной последовательности эту процедуру надо выполнить для каждого тестового набора. При этом аналогичным образом определяются неисправности, проверяемые на наборе. Неисправности, проверяемые всей тестовой последовательностью, находятся путём объединения всех неисправностей, проверяемых на каждом тестовом наборе.
При параллельном методе моделирования можно использовать различные виды кодирования троичного алфавита $$E_{3}=\{0,1,u\}$$, которые были представлены в лекции 4. Рассмотрим для определенности дизъюнктивный метод кодирования, представленный в табл. 11.2. Напомним, что здесь каждая троичная переменная $$X^{*}$$ представлена двумя двоичными переменными $$X^0$$ и $$X^1$$.
Соответственно моделирование одного вентиля в троичном алфавите выполняется с помощью двух булевых функций - компонент $$F^{0}$$, $$F^{1}$$, приведенных в табл. 11.3. При этом, например, моделирование вентиля И $$F=A^{*}\B^{*}$$ в троичном алфавите согласно табл.11. выполняется с помощью двух логических операций: $$F^{0}= A^{0}\vee B^{0}$$,
$$F^{1}= A^{1}\ B^{1}$$ .
Таким образом, фактически моделирование одного вентиля в троичном алфавите, как бы, заменяется моделированием двух вентилей в
(рис 11.4) Моделирование вентиля И в троичном алфавите
| $$X^{*}$$ | $$X ^{0}$$ | $$X ^{1}$$ |
|---|---|---|
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| U | 1 | 1 |
| $$f^{*}$$ | $$f ^{0}$$ | $$f ^{1}$$ |
|---|---|---|
| $$A^{*}\B^{*}$$ | $$A^{0}\vee B^{0}$$ | $$A^{1}\B^{1}$$ |
| $$A^{*}\vee B^{*}$$ | $$A^{0}\B^{0}$$ | $$A^{1}\vee B^{1}$$ |
| $$?^{*}$$ | $$A^{1}$$ | $$A^{0}$$ |
Допустим, что выполняется параллельное моделирование с 4-разрядными машинными словами. Пусть входы вентиля имеют текущие значения из троичного алфавита $$A^{*}=1$$, $$B^{*}=1$$. Тогда с учетом дизъюнктивного кодирования имеем:
$$A^{0} = (0\,0\,0\,0\,0), \,A^{1} =(1\,1\,1\,1\,1), \\ B^{0}= (0\,0\,0\,0\,0), \,B^{1}= (1\,1\,1\,1\,1).$$Пусть в левом разряде моделируется исправная схема, во 2-м разряде - неисправность $$A 0$$, в 3-м разряде - $$B 0$$, в 4-м разряде -$$A 1$$ и в 5-м разряде - $$F 0$$. Тогда после внесения влияния неисправностей на входах имеем:
$$ A^{0} = (0\,1\,0\,0\,0), \,A^{1} =(1\,0\,1\,1\,1), \\ B^{0}= (0\,0\,1\,0\,0), \,B^{1}= (1\,1\,0\,1\,1).$$После выполнения логических операций $$F^0=A^0\vee B^0$$, $$F^1=A^1\ B^1$$ и внесения неисправности выхода вентиля получаем:
$$F^{0} = (0\,1\,1\,0\,1) F^{1} = (1\,0\,0\,1\,0).$$Очевидно при переходе к троичному алфавиту затраты оперативной памяти возрастают в 2 раза, так как каждой линии схемы соответствует два машинных слова. Быстродействие уменьшается в два раза, так как вместо одной логической операции для стандартных вентилей согласно табл. 11.3 выполняется две операции.
Иногда число проходов $$]N/P-1[$$, необходимое при параллельном методе удается несколько уменьшить за счет того, что несколько независимых неисправностей могут моделироваться в одном и том же разряде. При этом неисправности должны располагаться на линиях схемы, не влияющих друг на друга.
Существенным ограничением параллельного метода моделирования является то, что при нем функционирование логических элементов должно быть описано с помощью булевых функций. Это связано с тем, что основной выигрыш во времени при этом методе получается путем выполнением логических операций, которые в компьютере реализуются параллельно над всеми разрядами машинных слов. Если же элемент описан на функциональном уровне, то каждую сложную функцию или оператор
Следует отметить, что параллельный метод использует, как правило, модель нулевой или единичной задержки логических элементов. Модель задержки с разными значениями для переднего и заднего фронтов также не может быть использована, так как в различных разрядах здесь моделируются различные неисправные схемы, в которых на одной и той же линии могут быть различные фронты изменения сигналов.
До недавнего времени в многозначных алфавитах (со значностью больше 4) этот метод распространения не получил, так как при увеличении значности алфавита резко падает скорость моделирования в виду сложности многозначных моделей логических элементов.
Метод кодирования и единая система моделей на базе четырех компонент $$f^{0}, f^{D'}, f^{D}, f^{1}$$ позволяют существенно повысить скорость параллельного метода моделирования в многозначных алфавитах и сделать ее приемлемой для практического применения. При параллельном методе моделирования влияние неисправностей распространяется параллельно для группы $$р-1$$ неисправностей ($$р $$- разрядность инструментальной ЭВМ).
При этом каждой линии схемы ставится в соответствие несколько машинных слов, число которых определяется количеством компонент в применяемом методе кодирования многозначных алфавитов. Для кодирования, представленного в табл. 7.1 , каждой линии схемы ставится в соответствие четыре машинных слова, как это показано на рис. 11.5.
При моделировании логических элементов (в данном случае конъюнкции $$f=ab$$) используются функции $$f^{0}, f^{D'}, f^{D}, f^{1}$$. На рис. 11.5 приведены закодированные значения $$a=(0\,1\,E\,1\,u\,0)$$, $$b=(1\,1\,1\,H\,1\,u)$$, из которых согласно функциям $$f^{0}, f^{D'}, f^{D}, f^{1}$$ для этого вентиля получаем значения, приведенные на рис. 11.5, что согласно данному методу кодирования соответствует $$\tilde{f}=(0\,1\,Е\,H\,u\,0)$$. При вычислении $$f^{0}, f^{D'}, f^{D}, f^{1}$$ значения всех разрядов обрабатываются параллельно с помощью соответствующих поразрядных булевых операций.
Напомним, что функции $$f^{0}, f^{D'}, f^{D}, f^{1}$$ основных вентилей таковы, что при равенстве компонент входов $$a^{D'}, a^{D}, b^{D'}, b^{D}$$ нулю сами функции $$f^{D'}, f^{D}$$ также равны нулю.
Это дает возможность не вычислять их в том случае, когда соответствующие компоненты входов нулевые. При этом, естественно, надо иметь эффективный способ проверки на равенство нулю компонент входов. Структура модели логического элемента в
(рис 11.5) Структура данных при моделировании в многозначном алфавите
(рис 11.6) Моделирование элемента в многозначном алфавите
Внесение неисправностей при моделировании в многозначных алфавитах (включая троичный) обычно производится с помощью специальных масок. Для рассматриваемого метода кодирования это может быть выполнено по следующим формулам: $$x^{0}=x^{0}\M_{1}\vee M_{2}$$, $$x^{D'}=x^{D'}\M_{1}$$, $$x^{D}=x^{D}\M_{1}$$, $$x^{l}=x^{l}\M_{1}\vee M_{3}$$. Здесь все переменные векторные, их длина равна разрядности машинного слова. Маски $$М_{1}$$, $$М_{2}$$ и $$М_{З}$$ определяют номер разряда в машинном слове и тип вносимой неисправности. Допустим, что неисправность вносится в $$j$$-ом разряде. Тогда маска $$М_{1}(М_{2},М_{3})$$ содержит все единицы (нули) кроме $$j$$-го разряда. Значения $$j$$-х разрядов $$М_{1}$$, $$М_{2}$$, $$M_{3 }$$ определяются типом вносимых неисправностей. Для исправной линии $$М_{1}(j)=1, М_{2}(j)=0, М_{З}(j)=0$$; для неисправностей const0 - $$М_{1}(j)=0, M_{2}(j)=1, M_{3}(j)=0$$; и для неисправностей const1 - $$М_{1}(j)=0, M_{2}(j)=0, M_{3}(j)=1$$. Следует отметить, что техника внесения неисправностей с помощью масок достаточно удобна и для моделирования кратных константных и сложных логических неисправностей. Все неисправности, входящие в кратную, должны заноситься в один и тот же разряд.
Ниже представлен псевдокод алгоритма параллельного моделирования неисправностей. Здесь, прежде всего, внешнее описание схемы (текстовое или графическое) транслируется в основную структуру данных - систему связанных таблиц, которая описана в лекции 5. Далее выполняется трансляция
Существенным ограничением является то, что при параллельном методе моделирования функционирование логических элементов должно быть описано с помощью булевых функций. Это связано с тем, что основной выигрыш во времени при этом методе получается при выполнении логических операций, которые практически во всех современных ЭВМ реализуются параллельно над всеми разрядами машинных слов. Если элемент описан на функциональном уровне, например, с помощью ЯРП, то нужно каждую сложную функцию (или оператор) описать с помощью булевых функций. Так мы поступали с условным оператором $$\text{If } A\text{ THEN }z<-X\text{ ELSE }s<-Y$$, заменяя его булевой функцией $$s= AX\vee\line{A}Y$$ . Аналогично можно описать и другие операторы или функции. Сложность модели при этом существенно увеличивается.
Параллельное_моделирование_неисправностей(схема,тест)
{
Ввод_схемы();
Ввод_теста();
Инициализация_схемы ();
Генерация_сниска_неисправностей();
while(есть неисправности) /* цикл по неисправностям*/
{
Формирование_группы_неисправностей();
while(есть тестовые наборы) /*цикл по тестовым наборам*/
{
Смена_набора(); /* ввод следующего набора */ Внесение_неисправностей_на_внешних_входах(); Моделирование_набора();
Внесение_неисправностей_на_внешних_выходах();
Проверка_обнаружения_неисправностей();
} /* конец цикла по наборам */
Печать_непроверенных_неисправностей();
} /* конец цикла по группам неисправностей */ Печать_полноты_теста(); Запись_непроверенных_неисправностей();
}
Моделирование_набора();
{
Инициализация();
while(есть события)
{
if(есть изменение сигнала)
{
Занесение нового значения в текущий массив;
Запоминание номера контакта первого последователя;
while(циклический список последователей не пуст)
{
Занесение элемента-последователя в очередь QJ;
}
while(очередь QJ не пуста)
{
Выбор элемента-последователя из очереди QJ;
Подготовка данных для моделирования элемента;
if(элемент входит в текущую группу неисправностей)
{
внесение неисправностей на входах элемента;
}
моделирование_элемента();
/* цикл по выходным контактам */
while(есть необработанный выход элемента)
{
if(неисправность контакта входит в текущую группу)
if(новое значение ? старому значению)
{
занесение события в очередь QJ;
} /* конец цикла по выходным контактам */
} /* конец цикла по событиям */
}
Отметим, что при таком подходе используется, в основном, сквозное, а не событийное моделирование, поскольку события могут случиться только в некотором из $$p$$ векторов, которые моделируются параллельно. Это ведет к тому, что значения элементов схемы вычисляются на каждом векторе в порядке уровней ранжирования. В этом случае целесообразно использовать компилятивный метод моделирования. Пусть $$a<1$$ означает среднюю активность моделирования в схеме, то есть долю элементов, на входах которых случаются события (изменения сигналов) на моделируемых входных наборах. Тогда при данном методе моделируется в $$1/p$$ больше элементов. чем в событийном методе. Однако, поскольку одновременно моделируется $$p$$ векторов, данный метод является эффективным при $$p>1/a$$. Например, для $$p\ge 20$$ он будет эффективным, начиная со значения $$a=5\%$$. Общее ускорение этого метода равно $$p\cdot a$$. Очевидно, что большая разрядность инструментального компьютера дает большую эффективность. Авторы метода [11.5] использовали компьютер с $$p=256$$. Отметим, что данный метод с успехом используется для моделирования больших схем (до миллиона вентилей) на случайных входных наборах.
Для повышения эффективности комбинационная схема предварительно разбивается на максимальные одновыходные подсхемы .
Определение11.1 Максимальная одновыходная подсхема - это комбинационная древовидная схема, не имеющая разветвлений, с одним выходом.
На схеме рис. 11.8 максимальные одновыходные подсхемы отмечены пунктиром. В связи с этим процедура моделирования неисправности на одном входном наборе имеет две фазы - прямую и обратную. В прямой фазе осуществляется выбор неисправности, связанной с выходом элемента, являющегося корневым для некоторой максимальной одновыходной подсхемы и выполняется распространение влияния неисправности. Если неисправность на выходе корневого элемента проверяется, то могут проверяться и неисправности, расположенные на линиях подсхемы. В этом случае выполняется обратная фаза, выявляющая проверяемые неисправности внутри подсхемы. При этом, очевидно, могут быть обнаружены только константные неисправности, инверсные значениям, установившимся при моделировании на линиях исправной подсхемы. Очевидно, что в случае непроверяемости неисправности на выходе корневого элемента неисправности поддерева заведомо не обнаруживаются.
(рис 11.8) Выделение одновыходных подсхем
Очевидно, что в основе высокого быстродействия рассматриваемого метода лежит организация параллельных вычислений в процессе прямой и обратной фазы. Эффективность организации параллельных вычислений зависит от используемого алфавита и системы многозначных функций в нем. В различных работах применяются различные алфавиты: в большинстве случаев используются простейший двоичный алфавит $$B_{2}=\{0,1\}$$ или троичный алфавит $$E_{3}=\{0,1,u\}$$, хотя известно и применение алфавитов большей значности [11.1].
В параллельном методе любая неисправность моделируется на всех входных наборах теста. В благоприятном случае входной набор проверяет эту неисправность, в противном случае моделирование выполнялось вхолостую. Поскольку при параллельном методе связь между неисправностями и входными наборами не устанавливается, то эффективность моделирования недостаточно велика. С целью ее повышения разработаны методы, в которых для заданного входного набора находятся все неисправности, проверяемые этим набором. Одним из таких методов является дедуктивный метод моделирования неисправных ДУ.
Последовательное моделирование - процесс моделирования для каждой неисправности выполняется отдельно -последовательно.
Параллельное по неисправностям моделирование - процесс моделирования выполняется параллельно (одновременно) для группы неисправностей.
Параллельное по наборам моделирование - процесс моделирования выполняется параллельно (одновременно) для группы входных наборов.
В лекции рассмотрены основные последовательные и параллельные методы моделирования неисправностей.
В разделе 11.4 параллельный метод обобщается на троичный алфавит, что позволяет повысить адекватность.
(рис 11.9) Схема для упражнения 8 (параллельное моделирование неисправностей).
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.