Конвертировать комбинационные петли в защелки
Можете ли вы порекомендовать алгоритм, который преобразует любую циклическую комбинационную логику в ациклическую комбинационную логику плюс защелки? Спасибо
1 ответ
Это довольно открытый вопрос и может быть очень сложной проблемой в общем виде. Это скорее проблема САПР и не имеет ничего общего с Verilog. Просто создать ациклический комбинационный логический граф из циклического комбинационного логического графа очень просто: найдите цикл и разбейте его, вставив защелку. Продолжайте, пока не останется циклов.
Однако вы должны также определить некоторую функциональную корректность и эквивалентность и сохранить ее после преобразования. Добавляя защелки в схему, вы меняете относительную синхронизацию сигналов (то есть синхронное расстояние), и результирующий график может функционально отличаться от исходного графика.
Классический алгоритм, называемый ретайминг, пытается переместить защелки, которые уже существуют, чтобы удовлетворить / минимизировать время тактового цикла.
Вот набросок алгоритма, который я могу придумать, который сохраняет синхронное расстояние: добавить n
фиксируется на первичных входах и запускает улучшенный алгоритм повторного использования, в котором вы добавляете дополнительные ограничения, чтобы сохранить синхронное расстояние узлов равного расстояния от первичных входов. Эти узлы являются входами комбинационных ворот и первичными выходами. Например, последовательное расстояние двух входов a and b
логического элемента И всегда должен оставаться одинаковым для всех первичных входов, т. е. на пути от каждого входа i
в a
Вы должны увидеть то же количество защелок, что вы бы видели с i
в b
,
С этими добавленными ограничениями повторное указание скажет вам, может ли оно переместить защелки для удовлетворения времени цикла часов (которое в этом случае может быть очень большим числом, то есть большим, чем ваш самый длинный цикл). Если n
достаточно, алгоритм перезапуска должен быть в состоянии поставить защелки, чтобы разорвать все циклы. Вы можете повторить алгоритм на разных значениях n
чтобы получить ответ.