Алгоритм решения ICCAD

Слайд 2

Шаг 1. Набор статистики (поиск соответствий)

Шаг 1. Набор статистики (поиск соответствий)

 

Слайд 3

Шаг 1a. Выбор подмножества пар вершин

Шаг 1a. Выбор подмножества пар вершин

 

Слайд 4

Шаг 1б. Поиск соответствий Берем произвольную пару вершин из полученного на

Шаг 1б. Поиск соответствий

Берем произвольную пару вершин из полученного на предыдущем

этапе множества пар вершин
Для каждой вершины строим все разрезы ширины k (алгоритм можно найти здесь http://cadlab.cs.ucla.edu/~cong/papers/fpga99_cut.pdf).
Просматриваем разрезы в порядке возрастания ширины. Берем разрез заданной ширины для первой и второй вершины. Если такой пары разрезов нет, то увеличиваем ширину на 1 и переходим к следующей паре.
Для выбранной пары проверяем эквивалентность порожденных ими конусов (алгоритм проверки зависит от ситуации: использовать abc, Boolean matching, симуляцию подсхем на наборах и т.д.). Так как вариантов много, эту часть надо спроектировать так, чтобы можно было потом подключить другие алгоритмы. Так как времени мало, то нужно сейчас использовать самый простой рабочий вариант.
Найденные соответствия сохраняем.
Переходим к следующей паре.
Если для заданной пары не удалось найти соответствия, то формально помечаем пару как эквивалентную (даже если соответствия для этой пары есть, но мы не смогли их найти).
Слайд 5

Шаг 2. Поиск решения по набранной статистике – поиск покрытия Решаем

Шаг 2. Поиск решения по набранной статистике – поиск покрытия

Решаем задачу

при помощи динамического программирования. Для начала рассмотрим случай, когда мы хотим получить разбиение только на эквивалентные пары подсхем.
Так как я не прорабатывал детали и алгоритм является адаптацией классических алгоритмов mapping-а, то тут могут быть ограничения применимости, связанные со структурой схемы и тем фактом, что по сути мы строим покрытие.
Находим топологический порядок вершин в первой и второй схеме.
На основе этих порядков упорядочиваем вершины выбранного множества вершин, для которого мы нашли соответствия. Есть вопрос, можно ли всегда построить такой порядок (я над этим моментом еще не думал). Возможно, что можно построить только частичный порядок, а несравнимые элементы придется просматривать в произвольном порядке с возможной потерей оптимальности и каких-то промежуточных решений (или вообще решения целиком).
Пусть нам удалось получить топологический порядок на множестве выбранных пар вершин (или какой-то частичный топологический порядок). Пусть для первых N вершин мы нашли решение задачи. Будем считать, что каждой паре вершин приписана стоимость частичного решения: вектор размеров подсхем.
Слайд 6

Шаг 2. Поиск решения по набранной статистике – поиск покрытия Рассмотрим

Шаг 2. Поиск решения по набранной статистике – поиск покрытия

Рассмотрим N+1

пару вершин (для частичного порядка, скорей всего, придется просматривать целое множество вершин).
Для этой вершин просматриваем все найденные соответствия в порядке возрастания размеров конусов.
Если в множестве пар соответствующих входов рассматриваемого соответствия есть неэквивалентная пара (для нее не найдено соответствие, она вообще не просматривалась), то переходим к следующему соответствию.
Иначе по всем парам входов рассчитываем суммарную стоимость частичного решения (стоимость решений во входах + стоимость рассматриваемого соответствия). В общем случае, возможны конфликты решений во входах (есть две стратегии – наложить ограничения(на структуру анализируемых схем и соответствия, которые мы ищем), чтобы конфликтов вообще не было, либо уметь проверять на конфликты и отбрасывать соответствие, если есть конфликты).
Если нашли решение лучше, то сохраняем стоимость найденного частичного решения (и само решение , то есть фиксируем соответствие для просматриваемой пары), переходим к следующему соответствию.
Когда для заданной пары вершин все найденные соответствия пройдены, то мы находим наилучшее частичное решение среди найденных соответствий.
Переходим к следующей паре в соответствии с найденным порядком.