Каковы передовые методы оптимизации пропускной способности конвейера для реализаций fpga?

Как, например, наилучшим образом использовать retiming и/или c-slow, чтобы максимально использовать данный конвейер.

При восстановлении синхронизации некоторые модули получают лучшие результаты, помещая сдвиговые регистры на входы (прямая балансировка регистров), в то время как другие модули добиваются большего успеха, используя сдвиговые регистры на выходе (обратная балансировка регистров).

Пока я использую следующий метод:

  • код hdl (в verilog)
  • создать временные ограничения для конкретного модуля
  • синтез, карта, место и маршрут (используя ISE 13.1)
  • посмотрите на время публикации и маршрута для модуля, который нужно улучшить, и на максимальное количество логических уровней.
  • возьмите это количество логических уровней и сделайте обоснованное предположение о количестве вставляемых триггеров.
  • вставь триггеры, включи балансировку регистров, надейся на лучшее

В нынешнем виде этот метод является хитом и промахом. Иногда это дает очень хорошие результаты, иногда это дерьмо. Итак, каков хороший способ улучшить коэффициент успеха такого ретайминга?

Есть ли инструменты, которые могут помочь в этом? Кроме того, ссылки, документы и книжные рекомендации будут высоко оценены.


person mrflibble    schedule 28.04.2011    source источник


Ответы (2)


Похоже, у вас есть правильные идеи. Восстановление синхронизации с помощью инструментов может быть случайным. Иногда может помочь добавление дополнительных 2 или 3 FF сверх того, что вы считаете хорошим.

С другой стороны, когда мне нужно довести производительность до предела, мне приходится балансировать конвейер вручную. Это может быть правильная боль, когда приходится разбивать ваш хорошо читаемый HDL-код на ужасную явную логику и регистры, но иногда я нахожу, что это просто нужно сделать :( Требуется много комментариев и действительно хороший тестовый стенд, чтобы убедиться, что вы т сломал его!

Наконец, есть «дом на полпути». Если я посмотрю на логический путь, который имеет наибольшее количество логических уровней, и немного подумаю о коде, я часто обнаружу, что это всего лишь один очень маленький фрагмент кода (может быть, всего одна строка). Это можно вытащить, не слишком "вредя" читабельности остальной части модуля. И иногда вытягивание этого кода в его собственную сущность и добавление дополнительных триггеров в эту сущность позволяет автоматическому ребалансировщику работать лучше.

Удачи!

person Martin Thompson    schedule 28.04.2011

Не инструмент, но вы можете оценить мою запись в блоге Art of High Performance FPGA Design. http://www.fpgacpu.org/log/aug02.html#art

Удачного взлома!

person Jan Gray    schedule 27.06.2011