Каковы оптимальные методы оптимизации пропускной способности конвейера для реализаций fpga? - PullRequest
3 голосов
/ 28 апреля 2011

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

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

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

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

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

Существуют ли какие-либо инструменты, которые могут помочь в этом? Кроме того, ссылки, документы и рекомендации книги будут высоко ценится.

Ответы [ 2 ]

4 голосов
/ 28 апреля 2011

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

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

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

Удачи!

0 голосов
/ 28 июня 2011

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

Счастливого взлома!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...