Pull to refresh

Comments 12

Схема на рис.9 выполняет простую задачу: принимает на вход несколько 32-разрядных чисел и в зависимости от значения бита управляющего входа производит либо их суммирование, либо вычитание.

Если это не какой-нибудь float, или еще что-то нарушающее ассоциативность, то все входы кроме первого можно просто сложить, а суммирование со многих входов много быстрее попарно-каскадного.

Но да, идея автоперемещения триггеров это здорово. Можно конвейеризовать комбинационную схему просто повесив N слоёв триггеров на выходы, и пусть компилятор сам думает, куда их сдвинуть, причём N можно сделать статическим параметром модуля, даже пожалуй, на чистом verilog.

Исходная схема сделана нарочито неоптимальной, даже если речь идёт не про float. Её идея в том, чтобы показать, что даже если нет времени "выпрямить руки" разработчику кода или там жуткое легаси на 1000+ строк, можно попробовать спасти проект прямо сейчас при помощи синтезатора.

Алгоритмы и возможности по оптимизации синтеза по power и area в современных синтезаторах не менее мощные и интересные чем оптимизация тайминга. При этом тул всегда принимает во внимание и timing и area и power, все вместе. Жаль, но об этом ни слова не сказано

К сожалению у меня нет опыта оптимизации синтеза по Power, не было таких задач, где этот параметр был критичен. По поводу Area надеюсь дойдут руки написать отдельную статью. Не хотелось мешать всё в одну кучу.

Отличная первая статья, так держать

Был такой синтезатор Synplify. Раньше Xilinx в ISE даже давал с ним маршрут на Ваш выбор. Вот он так оптимизировал ресурсы и так делал retiming что даже у прилично вылизанных схем уменьшались ресурсы (этот синтезатор например в отличии от Xilinx мог использовать схемы ускоренного переноса как логику, грамотнее Xilinx использовал карты Карно , лучше Xilinx понимал устройство ячеек :) ) ну а retiming практически во всех моих проектах мог поднять тактовую, хотя повторяю там и так руками все делалось. Фантастического качества была вещь. Ну и Xilinx отказался от него, типа чужой синтезатор который показывает результаты лучше Xilinx ..... Где-то до 2006 года пользовался им. А там его убрали с маршрута - стало не удобно.

Синтезатор Xilinx в ISE и в Vivado очень сильно отличаются. Был опыт, когда проект, трассированный в ISE, успешно проходил тесты, но и перенос его кодовой базы и проектных настроек синтеза и имплементации дали совершенно нерабочую схему в Vivado. При этом по размещению элементов схема в Vivado смотрелась намного компактее, тогда как ISE раскидал её на полкристалла. Отличались даже результаты Utilization, и опять не в пользу ISE.

Лечить пришлось написанием сумасшедших блочных констрейнов для Vivado, чтобы трассировка была похожа на результат в ISE. Как ни странно, трюк сработал. Но до сих пор есть впечатление, что что-то при переносе пошло не так.

В ISE синтезатор был плох. Но к сожалению и в Vivado синтезатор тоже очень плохой . Время синтеза огромное, даже выросло относительно ISE, например видно что бывает 20-30 секунд на синтез счетчика на 16 !!!, что совершенно неприемлемо. Ключ Ретайминг у синтезатора практически не улучшает ситуации - а в Synplify значительно улучшал даже для оптимизированных схем.

Описанных Вами проблем с ISE у нас не было. Синхронное проектирование.

Статья просто бомба. Жду с нетерпением следующих ваших работ.

Отличная статья. Для начинающих разработчиков — самое то в плане понимания. Было бы неплохо, если бы ещё написали обзорную статью по времянке в Vivado. А то народ приходит с ISE и впадает в тихий шок обнаруживая, что любимый max_delay не работает — возникает вопрос как контролировать межтактовые переходы. Или, допустим, ISE давал прямо максимальную частоту, а тут-то какой-то малопонятный запас.

Спасибо.

Есть в планах такая тема. Я сама выходец из ISE и было действительно непросто разбирать некоторые моменты по времянке.

Sign up to leave a comment.

Articles