Предложения по оптимизации дизайна FPGA - PullRequest
0 голосов
/ 28 марта 2020

Мне нужно выяснить оптимизацию для этого дизайна FPGA. У меня есть несколько идей, и я хотел бы знать, звучат ли они разумно для моего дизайна. Я также хотел бы спросить, есть ли у кого-нибудь другие идеи по повышению эффективности моих проектов.

Проект, который я должен оптимизировать, представляет собой ансамбль нейронов, я включил два изображения ниже.

Мои текущие идеи

  1. Добавление конвейерных регистров между каждым нейроном и каждым сумматором
  2. 'Регистрация входов и выходов' путем вставки регистров между каждой логикой c block
  3. Преобразование дерева сумматоров в цепочку сумматоров
  4. Использование мультиплексоров с временным разделением для разделения LUT между блоками logi c

Мои идеи для улучшения производительности есть смысл? Я совсем не очень разбираюсь в FPGA, поэтому не уверен, что мои оптимизации принесут большую пользу или даже будут иметь смысл.

Любая помощь будет принята с благодарностью.

Ссылки на PDF-файлы моего нейрона и ансамбля (качество изображения выше): https://francismcnamee.com/pdfs/neuron_ensemble.pdf https://francismcnamee.com/pdfs/single_neuron.pdf

Ансамбль нейронов (каждый Подсистема представляет собой один нейрон, конструкция каждого нейрона показана ниже)

Ensemble of neurons

Один нейрон A single neuron

1 Ответ

2 голосов
/ 28 марта 2020

Для начала «меньше использования площади и / или более высокая скорость». забудьте о и : вы можете оптимизировать площадь или скорость. Оба не будут работать.

Используйте мультиплексоры с временным разделением для разделения LUT между блоками logi c "

Мультиплексоры также строятся из LUT, поэтому вы теряете площадь перед тем, как ее получить. Затем TDM должен иметь контроллер, промежуточные результаты должны быть сохранены и извлечены.Все и все это не тривиально, и я бы сделал это, только если вы довольно хорошо разбираетесь в дизайне Logi c. Вы можете получить площадь, но вы будете потеря скорости.

Преобразование дерева сумматоров в цепочку сумматоров.

Нет, вы не касаетесь дерева сумматоров. Инструмент синтеза FPGA выберет оптимальный сумматор Конфигурация для вас. Она будет балансировать площадь и скорость и придет к чему-то гораздо лучшему, чем вы сами можете.
Фактически это относится ко всем частям проекта: пусть инструмент синтеза выполняет свою работу. Вы не будете способен превзойти его.

Добавить конвейерные регистры между каждым нейроном и каждым сумматором
Зарегистрировать входы и выходы, вставив регистр Между каждым логом c блок

Извините, но: Нет! Работать с регистрами не так просто.

Вам необходимо сбалансировать регистров. В идеале задержка logi c между каждым этапом конвейера должна быть одинаковой.
Допустим, умножение занимает ** 10 нс. Сумматор занимает 3 нс. Затем вы должны разместить этапы конвейера после набора из 3 сумматоров. Задержка составит ~ 20 нс. Если вы поместите ступень конвейера после каждого сумматора, общая задержка составит ~ 40 нс.

Теперь вы попадаете в суть ускорения проектирования: вы используете 4 ступени конвейера, чтобы вы могли работать на частоте 200 МГц или 2 этапа трубопровода и работают на частоте 100 МГц? В обоих случаях пропускная способность одинакова.

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

Как вы понимаете: балансировка регистров не легкая и скорее искусство. Лучшим способом было бы запустить проект без каких-либо регистров через инструмент синтеза. Затем выполните анализ синхронизации и посмотрите на путь синхронизации в худшем случае. Из этого постарайтесь выяснить, куда ставить этапы регистрации. Но опять же, легче сказать, чем сделать. Для меня чтение этих отчетов анализа времени легко, но для новичка они могут показаться абракадаброй.

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

** Использованные мною номера составлены

...