![](/user_photo/527_Cxpzr.png)
--II семестр-- / Лекции1 / Лекция 4
.docЛекция 4.
Алгоритмы покрытия.
В основе построения большинства алгоритмом покрытия используется идея выделения из заданной функциональной схемы подсхем (групп максимально связанных между собой логических элементов), перебора всех или достаточно большого их числа и проверки на совпадение логических функций элементов подсхем и компонентов модулей, используемого набора. Подсхема закрепляется затем модулем, в состав которого входит наибольшее количество ее логических функций. Процесс продолжается до полного распределения элементов функциональной схемы по модулям.
Рассмотрим эвристический алгоритм, являющийся типичным для приближенных алгоритмов покрытия, используемых в системах проектирования РЭА. Исходная функциональная схема представляется множеством связанных между собой логических элементов
М={m1,m2,…,mn},
каждый
из которых
реализует
некоторую функцию
(И,
ИЛИ, НЕ, исключающее ИЛИ, запоминание и
т.д.) а их множество М определяет
совокупность всех логических операций
выполняемых
в схеме.
=U i = {1, 2,…, n}
Имеется ограниченный набор типов модулей
N={n1,n2,…,ne},
на
базе которого необходимо выполнить
заданную схему. Каждый модуль
реализует одну или несколько логических
операций
,
а полный набор модулей N определяет совокупность всех логических операций
j
=Uj
j
={,
,
},
которые могут быть получены с их помощью.
При этом могут иметь место два случая:
-
, т.е. для каждого элемента функциональной схемы существует соответствующий аналог среди компонентов набора модулей;
-
, т.е. компоненты набора модулей реализуют не все функциональные схемы.
В
первом случае, функциональную схему
устройства можно полностью покрыть
модулями заданного набора, во втором –
требуется доработка покрытия, связанная
с подбором дополнительных модулей,
позволяющих покрыть элементы из
подмножества
,
выполняющие операцию \Ф,
при этом процесс покрытия схемы
разбивается на два этапа:
-
предварительный
-
окончательный
Алгоритм предварительного покрытия работает следующим образом:
-
Из списка элементов схемы, подлежащих покрытию, выбирают очередной элемент
. Если список пуст, то переходим к пункту 8.
-
Определяем все логические элементы
из числа непокрытых, связанные с mi и формируем множество Мi = mi U mq.
-
Производим сравнение функции h, реализуемых в каждой из конструктивных модулей
и логических функций
.
Выбираем
модуль
,
для которого
i ∩q = max[i ∩h],
если таких модулей несколько, то выбираем модуль наименьшей стоимости. Если при пересечении этих множеств образуется пустое множество i ∩q = 0, то переходим к пункту 7.
-
Если эти множества равны (i ∩q), то переходим к пункту 6.
-
Из Mi удаляем элементы
, наименее связанные с оставшимися и выполняющие операции i \ q . Получаем множество элементов
, которые целесообразно скомпоновать в едином корпусе nq.
-
Закрепляем все выбранные логические элементы за модулем nq и переходим к пункту 1.
-
Составляем список элементов функциональной схемы, которые не могут быть реализованы с помощью заданного набора модулей (требуется доработка). Переходим к пункту 1.
-
Конец работы алгоритма.
Для улучшения полученного результата осуществляют парные перестановки однотипных логических элементов различных модулей.