![]() |
![]() |
При создании анализатора тестов будем использовать стандартные библиотеки LE, ZE который содержат элементы инверторы, триггеры, конъюнкцию и дизъюнкцию. Эти библиотеки разработаны давно и широко используются при обучении студентов. Сначала необходимо создать VHDL программу JK тригера с асинхронными входами R и S, потому что построение регистров на этом триггере существенно упрощает схему анализатора. VHDL - программа триггера, предъявлена ниже.
library IEEE; use IEEE. std_logic_1164. all; entity JK is port ( S: in STD_LOGIC; J: in STD_LOGIC; CLK: in STD_LOGIC; K: in STD_LOGIC; R: in STD_LOGIC; NQ: out STD_LOGIC; Q: out STD_LOGIC ); end JK; --}} End of automatically maintained section architecture JK of JK is begin process (S, J, CLK, K, R) variable QT: STD_LOGIC: ='U'; variable NQT: STD_LOGIC: ='U'; begin IF (S='0' AND R='0') THEN Q <= 'U'; NQ <= 'U'; QT:='U'; NQT:='U'; ELSE IF (S='0') THEN Q <= '1'; NQ <= '0'; QT:='1'; NQT:='0'; ELSE IF (R='0') THEN Q <= '0'; NQ <= '1'; QT:='0'; NQT:='1'; ELSE IF (CLK'Event AND CLK='1') THEN IF (J='1') THEN IF (K='0') THEN Q <= '1'; NQ <= '0'; QT:='1'; NQT:='0'; ELSE IF (K='1') THEN IF (QT='1') THEN Q <= '0'; NQ <= '1'; QT:='0'; NQT:='1'; ELSE Q <= '1'; NQ <= '0'; QT:='1'; NQT:='0'; END IF; END IF; END IF; ELSE IF (K='1') THEN Q <= '0'; NQ <= '1'; QT:='0'; NQT:='1'; END IF; END IF; END IF; END IF; END IF; END IF; end process; end JK;
Данная программа работает в соответствии с правилами функционирования классического JK-тригера. VHDL - код анализатора теста, при условии моделирования десяти неисправностей, приведен в приложении.
Схемная реализация АТ в режиме ТТ? изображенна на рисунке 3.1.
Рисунок 3.1 - Схемная реализация АТ в режиме ТТI.
Работая в режиме построения детерминированого теста без ограничений на число неисправностей, АТ использует внутренние регистры с разрядностью k, где k - количество неисправностей в схеме. Он отслеживает появление новых значений на выходах тестируемости ОД и выдает сигнал WRITE при активизации новой неисправности. VHDL - код АТ, при моделировании десяти неисправностей, приведен в приложении.
Схемная реализация данного типа АТ отличается наличием регистра сохранения вектора который генерируется тестом и схемой выдачи сигнала записи в память.
Данный режим анализатора теста отличается от предыдущих тем, что при создании VHDL - кода АТ необходимо на входи регистра сохранения положения шины Т предъявлять только номера интересующих нас неисправностей. Данный режим необходим для построения теста при исключении эквивалентных и доминирующих неисправностей. Пусть нам необходимо построить тест для неисправностей с номерами 5, 7, 23, 45, 66, 76, 88, 121, тогда VHDL - программа АТ отличается от предыдущего режима в блоке описания внутренней структуры схемы:
- - - - Component instantiations - - - - U0: JK port map ( CLK => CLK, J => T (5), K => C0, Q => Q (0), R => INIT, S => C1 ); U1: JK port map ( CLK => CLK, J => T (7), K => C0, Q => Q (1), R => INIT, S => C1 ); U2: JK port map ( CLK => CLK, J => T (23), K => C0, Q => Q (2), R => INIT, S => C1 ); U3: JK port map ( CLK => CLK, J => T (45), K => C0, Q => Q (3), R => INIT, S => C1 ); U4: JK port map ( CLK => CLK, J => T (66), K => C0, Q => Q (4), R => INIT, S => C1 ); U5: JK port map ( CLK => CLK, J => T (76), K => C0, Q => Q (5), R => INIT, S => C1 ); U6: JK port map ( CLK => CLK, J => T (88), K => C0, Q => Q (6), R => INIT, S => C1 ); U7: JK port map ( CLK => CLK, J => T (121), K => C0, Q => Q (7), R => INIT, S => C1 );
В этом режиме анализатор теста генерирует тест для фиксированного числа неисправностей, при этом используются стандартные наборы неисправностей {0..10, 0..20, 0..30, 0..40, 0..50, 0..60, 0..70, 0..80, 0..90}. Данный подход облегчает получение статистической информации из теста и позволяет использовать стандартные наборы VHDL - программ, что можно подготовить предварительно. Реализация данного режима практически не отличается от предыдущего. Схемная реализация данного режима отображена на рисунке 3.2.
Рисунок 3.2 - Функциональная схема АТ в режиме генерации теста для фиксированного количества неисправностей
В предыдущих разделах мы рассмотрели четыре типа АТ, в их структуре используются одинаковые блоки элементов, что позволяет создавать VHDL - программы с меньшими временными затратами. Но стоит учитывать тот факт, что мы рассмотрели в примерах только случай с десятью неисправностями, а в реальных схемах их значительно больше. Поэтому, была создана программа, которая позволяет генерировать текст VHDL - программ в автоматическом режиме. При работе с этой программой человеку необходимо знать только число неисправностей в схеме, или номера конкретных неисправностей.
Данная программа написана с использованием Borland C++ версия 3.01, она не нуждается в наличие Windows95/98/2000. Программа умеет генерировать VHDL - код для 4-х режимов работы АТ, в ней существует ограничение на максимальное количество неисправностей в схеме и на использование библиотек логических элементов, но в случае пнеобходимости ее можно легко модифицировать. Результаты работы программы записываются в файл с именем atr*. vhd, на месте символа находится номер выбраного режима работы АТ. Потом данный файл можно подключить в любой системе работающей с языком VHDL.
Блок - схема программы, изображена на рисунке 2.6, а подпрограма оптимизации количества элементов в схемах генерирующих сигналы STOP и WRITE, на рисунке 2.7.
Рисунок 3.3 - Алгоритм программы построения АТ
Рисунок 3.4 - Подпрограмма оптимизации количества элементов в схеме
Для построения Т-модели любого объекта диагностики необходимо сначала разработать елементную базу, ориентированную на Т - модель. Элементы, построены с использованием принципов Т-модели, кроме выполнения свойственных им функций (конъюнкции, дизъюнкции, суммы по модулю два и т.д.) выполняют еще ряд дополнительных функций.
Построим примитивный Т-элемент на основе элемента "или" с тремя входами. Обычный элемент "или" изображенный на рисунке 3.5.
Рисунок 3.5 - Элемент "или"
Данный элемент реализует такую функцию над входами х: Y=x1+x2+x3.
Пометим глобальную наблюдаемость входа xi на входе схемы символом hi, а локальную наблюдаемость входа xi -Dhi. Для того чтобы наблюдать на выходе элемента Y вход х1 нужно, чтобы другой вход равнялся в данном случае нулю (аналогично для входа х2). Следовательно, функции локальных наблюдаемостей выражаются формулами: Dh1=not(х2),Dh2=not(х1)
Функции глобальных нагляда≤мостей выражаются такими формулами: h1=E¬(x2), h2=E¬(x1)
Также есть выходы наблюдаемости константних неисправностей Y=1, Y=0. Формулы для них такие: Y=0 =E&Y, Y=1 =E&Y
Назовем разработанный элемент TOR2, построим для него VHDL-описание:
- - ##### Element TOR2 ######## Library ieee; use ieee. std_logic_1164. all; use ieee. numeric_std. all; entity TOR2 is port (X1, X2, E: std_logic; H1, H2, DH1, DH2, Y0, Y1, Y: out std_logic); end TOR2; architecture behavior of TOR2 is signal L42: std_logic; signal P31: std_logic; signal P32: std_logic; signal P42: std_logic; begin Y <= X1 or X2; P42 <= X1 or X2; L42 <= not (P42); Y1 <= E and L42; Y0 <= P42 and E; DH2 <= not (X1); DH1 <= not (X2); P32 <= not (X1); P31 <= not (X2); H2 <= P32 and E; H1 <= E and P31; end behavior;
Внутренняя структура элемента изображенная на рисунке 3.6, а условное графическое обозначение на рисунке 3.7.
Рисунок 3.6 - Внутренняя структура элемента TOR2
Рисунок 3.7 - УГО элемента TOR2
![]() |
![]() |