var div_970x90 = [[970, 90],[728, 90]]; var div_336x280 = [[250,250],[300,250],[320,170],[320,200],[320,250],[336,280]]; var div_300x600 = [[240,400],[240,600],[250,250],[300,250],[300,300],[300,320],[300,400],[300,500],[300,600]]; var div_650x333 = [[336,280],[580,332],[580,333],[650,333]]; googletag.cmd.push(function() { var map650x333 = googletag.sizeMapping().addSize([992, 0], div_650x333).addSize([0, 0], [[336,280]]).build(); googletag.defineSlot('/21931593928/vuzlit_336x280_top', div_336x280, 'div-336x280_top').addService(googletag.pubads()); googletag.defineSlot('/21931593928/vuzlit_336x280_1', div_650x333, 'div-336x280_1').defineSizeMapping(map650x333).addService(googletag.pubads()); googletag.defineSlot('/21931593928/vuzlit_336x280_2', div_336x280, 'div-336x280_2').addService(googletag.pubads()); googletag.defineSlot('/21931593928/vuzlit_336x280_3', div_336x280, 'div-336x280_3').addService(googletag.pubads()); googletag.defineSlot('/21931593928/vuzlit_336x280_btm', div_650x333, 'div-336x280_btm').defineSizeMapping(map650x333).addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.pubads().collapseEmptyDivs(); googletag.enableServices(); }); googletag.cmd.push(function() { // not render hided ads according grid css var map300x600 = googletag.sizeMapping().addSize([768, 0], div_300x600).addSize([0, 0], []).build(); var map970x90 = googletag.sizeMapping().addSize([992, 0], div_970x90).addSize([768, 0], [[728, 90]]).addSize([0, 0], []).build(); googletag.defineSlot('/21931593928/vuzlit_970x90', div_970x90, 'div-970x90').defineSizeMapping(map970x90).addService(googletag.pubads()); googletag.defineSlot('/21931593928/vuzlit_970x90_btm', div_970x90, 'div-970x90_btm').defineSizeMapping(map970x90).addService(googletag.pubads()); googletag.defineSlot('/21931593928/vuzlit_300x600', div_300x600, 'div-300x600').defineSizeMapping(map300x600).addService(googletag.pubads()); googletag.defineSlot('/21931593928/vuzlit_300x600_sticky', div_300x600, 'div-300x600_sticky').defineSizeMapping(map300x600).addService(googletag.pubads()); googletag.defineSlot('/21931593928/vuzlit_rich', [1, 1], 'div-rich').addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.enableServices(); });

Генерирование тестов для цифровых схем методом булевой производной


Генерирование тестов для цифровых схем методом булевой производной

Булевой производной функции f(x) = f(x1, x2,..., xn) по xi называется функция

df(x) / dxi = f(x1, x2,..., xi,..., xn) Е f(x1, x2,...,,..., xn),

где Е - сумма по модулю 2.

Булева производная может быть также вычислена и по следующей формуле:

df(x) / dxi = f(x1, x2,..., 0,..., xn) Е f(x1, x2,..., 1,..., xn).

Булева производная определяет значения логических переменных x1,..., xn (кроме xi), при которых изменение состояния xi приводит к изменению значения функции f(x).

Тест для неисправности xi = 0 (хi = 1) определяют значения логических переменных, при которых

xi Ч df(x) / dxi = 1 (`xi Ч df(x) / dxi =1).

Сказанное можно распространить и на внутренние переменные. Тест для неисправностей z =0 (z =1) внутренней линии схемы определяют значения логических переменных, при которых

zЧ df(x) / dz =1 ( Ч df(x) / dz = 1).

Таким образом, входное воздействие для проверки неисправности в точке z определяется следующим образом.

  • 1. Составляем функцию f(x), в которой в качестве переменной присутствует z.
  • 2. Определяем частную булеву производную df(x) / dz, приводим полученное выражение к дизъюнктивной форме (ДФ).
  • 3. Выбираем один из термов (например, t), полученной в п. 2 ДФ.
  • 4. Неисправность z = 0 проверяется на воздействии, при котором значения переменных x1,..., xn обеспечивают условие zЧ t = 1.
  • 5. Неисправность z = 1 проверяется на воздействии, при котором значения переменных x1,..., xn обеспечивают условие `zЧ t = 1.

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

Пример. Дана схема (рис. 4.6), реализующая функцию

f(x)= x1 х2 Ъ x3. Найти тесты неисправностей x1 = 0 и x1 = 1.

Найдем булеву производную df(x) / dx1:

Рис. 4.6

Тест для x1 = 0 определим из условия x1Ч df(x) / dx1 = 1, то есть . Следовательно, x1 = 1, x2 = 1, x3 = 0.

Тест для x1 = 1 определим из условия , то есть

Следовательно, x1 = 0, x2 = 1, x3 = 0.

Пример. Для схемы рис. 4.7 найти тестовые наборы для проверки неисправностей x2 = 0 и x2 = 1.

Схема реализует функцию

Пользуясь формулой для вычисления булевой производной df(x) / dx2, находим ее значение:

df(x) / dx2 =(x1Ч 1 Ъ x1Ч 0) Е (x1Ч 0 Ъ x1 Ч 1)= 0.

Это означает, что f(x) не зависит от x2, то есть неисправности x2 = 0 и x2 = 1 являются непроверяемыми.

Пример. Дана схема рис. 4.8. Найти тестовый набор для проверки неисправности y6 = 0. Выразим f(x) через внутренние переменные схемы:

Найдем булеву производную df(x) / dy6:

Тест для y6 =0 найдем из условия y6Ч df(x) / dy6 = 1, то есть

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

Следовательно, тестом для проверки рассматриваемой неисправности является набор x1 = 1, x2 = 1, x3 = 0 и x4 = 0.

Если от проверяемой точки имеются несколько путей к контролируемому выходу, то производная для данной точки определяется как произведение нескольких производных, число которых зависит от числа путей.