Московский государственный университет путей сообщения
Опубликован: 06.09.2012 | Доступ: свободный | Студентов: 1233 / 168 | Оценка: 5.00 / 5.00 | Длительность: 35:22:00
Специальности: Разработчик аппаратуры
Лекция 18:

Многомерная активизация путей в шестизначном алфавите

< Лекция 17 || Лекция 18: 123 || Лекция 19 >

18.2 D - алгоритм

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

Основным рабочим инструментом в D-алгоритме является техника кубов. Модели логических элементов представляются также с помощью кубов. Например, в табл. 18.5 представлены 0-кубы для вентиля И. Легко видеть, что данная таблица в сжатой форме содержит все условия, при которых на выходе вентиля И возможно значение 0. Можно показать, что множество сжатых кубов, используемое в D-алгоритме, определяется соответствующей функцией f^{0}. Так, например, каждый терм функции f^{0} вентиля соответствует строке табл. 18.5. Аналогично функция f^{1} соответствует табл. 18.6, которая содержит 1-кубы и определяет условия, при которых на выходе вентиля И возможна 1.

Распространение символов D' и D через логические элементы осуществляется с помощью D'- и D-кубов, которые определяются функциями многозначными функциями f^{ D'}, f^{ D} соответственно. Так, табл. 18.7, содержащая D-кубы вентиля И, получена из функции f^{ D} вентиля И. Аналогично, функция f^{D'} определяет D'-кубы табл. 18.8.

Таблица 18.5.
A B c
0 U 0
u 0 0
D D' 0
D' D 0
Таблица 18.6.
a b c
1 1 1
Таблица 18.7.
A B c
D 1 D
1 D D
D D D
Таблица 18.8.
a b c
D' 1 D'
1 D' D'
D' D' D'

Простым кубом неисправности h \equiv  0,1 на выходе вентиля называется D(D')-куб (D для неисправности h\equiv 0, D' для неисправности h\equiv 1), в котором выходу вентиля присваивается D(D'), а значения входам присваиваются таким образом, чтобы на выходе исправного вентиля было значение, инверсное h. Например, 11D является простым D-кубом для неисправности h\equiv 0 на входе вентиля И. Очевидно, что простой D-куб служит средством активизации неисправности на соответствующей линии схемы (он вносит влияние неисправности в месте ее возникновения).

Пример схемы для иллюстрации D-алгоритма

Рис. 18.4. Пример схемы для иллюстрации D-алгоритма

Основной моделью логической схемы в D-алгоритме является система таблиц кубов, в которых столбцы соответствуют линиям схемы, а строки - кубам. Например, табл. 18.9 содержит D' кубы для схемы, изображенной на рис. 18.4. Пустые клеточки соответствуют неопределенным значениям u. Вторая таблица содержит 0(1)-кубы. Для нашего примера она представлена в табл. 18.10.

Таблица 18.9.
Куб Линии X_{1} x_{2} x_{3} x_{4} x_{5} x_{6} x_{7} x_{8} x_{9} x_{10} x_{11} x_{12}
1 2 3 4 5 6 7 8 9 10 11 12 13 14
G1 t1 D 1 D
t2 1 D D
t3 D D D
t4 D' 1 D'
t5 1 D' D'
t6 1 D' D'
G2 t7 D 1 D
t8 1 D D
t9 D D D
t10 1 D' D'
t11 D' 1 D'
t12 D' D' D'
G3 t13 D' 0 D
t14 0 D' D
t15 D' D' D
t16 D 0 D'
t17 0 D D'
t18 D D D'
G4 t19 D' 1 D
t20 1 D' D
t21 D' D' D
t22 D 1 D'
t23 1 D D'
t24 0 D D'
G5 t25 D 0 D
t26 0 D D
t27 D D D
t28 D' 0 D'
t29 0 D' D'
t30 D' D' D'
Разветвление t28 D D D
t29 D' D' D'
Таблица 18.10.
Куб Линии x_{1} x_{2} x_{3} x_{4} x_{5} x_{6} x_{7} x_{8} x_{9} x_{10} x_{11} x_{12}
1 2 3 4 5 6 7 8 9 10 11 12 13 14
G1 С1 0 u 0
С2 u 0 0
С3 D D' 0
С4 D' D 0
С5 1 1 1
G2 С6 0 u 0
С7 u 0 0
С8 D D' 0
C9 D' D 0
C10 1 1 1
G3 C11 1 u 0
C12 u 1 0
C13 D D' 0
C14 D' D 0
C15 0 0 1
G4 C16 1 1 0
C17 0 u 1
C18 u 0 1
C19 D D' 1
C20 D' D 1
G5 C21 0 0 0
C22 1 u 1
C23 u 1 1
C24 D D' 1
C25 D' D 1

Кроме этих таблиц используется куб K для текущих значений линий схемы и несколько стеков. Сначала всем линиям в кубе K присваиваются неопределенные значения u. Затем в K вносится простой куб данной неисправности. Далее выполняется D-распространение к одному из выходов схемы. Оно выполняется путем выбора последователя неисправного вентиля и пересечения с одним из его D-кубов с текущим кубом K. При D-распространении обычно производится выбор D или D'-куба данного элемента, оставшиеся варианты хранятся в стеке. Операция пересечения определена в табл. 18.11. Если при пересечении кубов, возникает хотя бы один символ \varnothing, то это показывает противоречие, возникающее на данной линии вследствие различных требований (например, из простого D-куба следует, что данная линия должна иметь значение 0, а из условий D распространения здесь должна быть 1.

Таблица 18.11.
N 0 1 D D' u
0 0 \varnothing \varnothing \varnothing 0
1 \varnothing 1 1 \varnothing 1
D \varnothing \varnothing D \varnothing D
D' \varnothing \varnothing \varnothing D' D'
U 0 1 D D' u

D-алгоритм можно сформулировать следующим образом в виде псевдокода.

D-алгоритм( неисправность h_{i})
{
 Ранжирование элементов схемы от входов к выходам;
 Выбор простого D-куба для неисправности h_{i};
 Занесение элементов-последователей h_{i}  в D-границу;
 D-распространение();
 Доопределение();
 Return(); 
}

 D-распространение()
//активизирует пути с D,D'-значениями от неисправности до внешнего выхода                
{
 while(есть необработанные элементы в D-границе)
  {
  Выбор следующего необработанного элемента из D-границы;
 while(есть необработанные последователи  элемента)
   {
    Выбор следующего элемента-последователя;
    Выбор D-куба для элемента-последователя;
    D-пересечение выбранного D-куба с текущим тест-кубом К;
    if(пересечение пусто или неопределено)continue; 
    //переход на конец цикла
    if(все D-кубы элемента использовались и не дали результата) break;
    if(пересечение D-кубов успешно)
         {
           Занесение элементов-последователей D-значений в D-границу;
           Сохранение состояния алгоритма в стеки;
           break;
}         
        else if (пересечение D-куба с тестовым кубом пусто) возврат();
       else if ( противоречие при операции пересечения кубов) break;
}     
    if(ни один из вариантов не дал D-распространения) 
    Возврат();
}  
   return;
}

 Доопределение()
//дает значения внешних входов, обеспечивающие условия D-распространения 
 {
  J=координаты тестового куба К с определенными значениями 0,1 ;
 if(J содержит только внешние входы) 
тест построен, останов; 
  for(каждого неподтвержденного сигнала в G)
      {
       выбор 0,1 сигнала z из J с наибольшим рангом;
      if(входы элемента с выходом z все равны D или D') 
      break;
      while(есть необработанные 0,1-кубы вентиля z) 
       {
        Выбор следующего необработанного 1- или 0- куба вентиля z;
        if(нет необработаных 1- или 0- кубов)
          {
           if(нет выбора в стеке импликации) stop;
           неисправность избыточна;
           else if(есть альтернативный выбор) 
           then  извлечение из стека альтернативного значения;
        else
          {
            Возврат();
            D-распространение();
}           
}          
 if(0,1-куб пересекается с z) удаление z из J и занесение в J-границу           значений входов z;
 break;
if(пересечение пусто) отметка текущего 0,1-куба как отработанного;
}        
}      
       return;
} 

Возврат()
 {
  if( внешний выход содержится в D-границе) 
   Доопределение();
  else if(извлечение из стека импликации альтернативного значения);
   if(нет вариантов в стеке импликации)  stop; 
   неисправность избыточна;
    else return;
} 

D-алгоритм

< Лекция 17 || Лекция 18: 123 || Лекция 19 >
Дмитрий Медведевских
Дмитрий Медведевских

Добрый день  можно поинтересоваться где брать литературу предложенную в курсе ?Большинство книг я не могу найти  в известных источниках