Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как перебрать автоматически сотню seed в Quartus?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
iiv
Всем добрый день,

Посоветуйте, пожалуйста, сабж. Есть два проекта, в обоих тайминги наступают примерно на 20-50 сиде. В Адвизорах в Тайминг Оптимизейшн все выставлено по максимуму. Базовый стартовый сид обычно не проходит по таймингам для 85С, но проходит для 0С. После монотонного перебора сидов рано или поздно все становится в порядке. Уже второй проект, с которым одна и таже ситуация. Так как время компиляции проектов в одном случае 5 минут, в другом 30 минут, очень неприятно сидеть в ожидании перезапуска по несколько часов или несколько дней. Скажите, пожалуйста, можно ли как-то автоматизировать этот процесс? Сам искал, гуглил, но не нашел, вдруг кто знает, пожалуйста, посоветуйте!

Спасибо!

ИИВ
ViKo
Цитата(iiv @ Jun 1 2014, 19:05) *
Сам искал, гуглил, но не нашел, вдруг кто знает, пожалуйста, посоветуйте!

Дык, в Квартусе "гуглите". biggrin.gif Называется Design Space Explorer.
bogaev_roman
Цитата(iiv @ Jun 1 2014, 20:05) *
Скажите, пожалуйста, можно ли как-то автоматизировать этот процесс? Сам искал, гуглил, но не нашел, вдруг кто знает, пожалуйста, посоветуйте!
ИИВ

Как уже выше советовали DSE, сам баловался долго. Но не проще ли выкручивать в Вашем случае только определенные настройки типа ограничения на фанаут или дублирование логики или вообще создать отдельно разведенную партицию с готовым нетлистом и задержками в "узком" месте? Просто перебор значений по сидам и различным настройкам - это шаманство, которое работает в последнюю очередь.
iiv
Спасибо огромное за советы! DSE - вещь классная, правда пока у меня повидимому руки кривые, чтобы решить с помощью ее мою задачу.

Цитата(bogaev_roman @ Jun 2 2014, 13:29) *
Но не проще ли выкручивать в Вашем случае только определенные настройки типа ограничения на фанаут или дублирование логики или вообще создать отдельно разведенную партицию с готовым нетлистом и задержками в "узком" месте? Просто перебор значений по сидам и различным настройкам - это шаманство, которое работает в последнюю очередь.


Сам понимаю, что шаманство, но оно позволяет поднять с 390 до 420 тактовую и пока это единственный способ, который у меня достоверно работает. Причем, заполнение логики проекта на циклоне всего-то 55%.
Дублирование логики и ограничения на фанауты еще пару лет назад освоил и из этих настроек, как я думаю, выжал все, что можно.

В обоих проектах структура примерно такова есть основной клок Clk1 (416МГц на циклоне или 500МГц на стратиксе) и есть Clk2 половинка и Clk3 четвертинка. Клоки идут от одного PLL. Другие клоки есть, но они все сугубо отвечают за ввод-вывод и клочат FIFO. Есть центральный модуль (Main_Module), в котором реализована логика ввода-вывода, она обычно содержит почти всю блочную память для FIFO и не большое (10%) число ресурсов. Есть много (80-300) однотипных модулей (Compute_Module), которые производят вычисления и работают на максимальной возможной частоте, правда обмен между ними с основным модулем идет на Clk2 или даже Clk3.

Если ставить маленькое число Compute_Module в проекте, то квартус довольно быстро все собирает и получаются правильные тайминги.

Пытаюсь зафиксировать расположение нескольких (визуально хорошо разведенных модулей) и докомпилить все с большим числом модулей - не лезет sad.gif

Compute_Module давно отлажены и успешно работают, а вот основной модуль регулярно надо модифицировать и отлаживать.

Как я понимаю, основная проблема у меня в том, что и Main_Module, и Compute_Module требуют DSP ресурсов, но ресурсы-то разные (в первом случае блочная память, во втором случае умножалки). Поэтому, если даже идеально развести все Compute_Module и зафиксировать их нетлист, то не факт, что Main_Module поместится и ему хватит доступа к остальным ресурсам. То есть пока не напихаешь все, квартус не удосуживается сделать Compute_Module оптимальными или почти оптимальными. Понятно, что во время отладки и поиска минимальных ошибок можно зафиксировать уже разведенные Compute_Module и это сильно помогает. Но стоит чуть сильнее изменить логику Main_Module, тайминги сходятся только после полного перетряхивания всего проекта.

ИМХО, вижу, что мне не хватает одной опции: собрать все Compute_Module так, чтобы выполнялись необходимые тайминги, но эти модули занимали меньше всего места и максимально компактно легли на кристалле. Я бы их тогда зафиксировал в нетлисте и радовался быстрой пересборке остального проекта. Альтернативно - гонять сиды sad.gif

Спасибо

ИИВ
bogaev_roman
Цитата(iiv @ Jun 2 2014, 13:13) *
Как я понимаю, основная проблема у меня в том, что и Main_Module, и Compute_Module требуют DSP ресурсов, но ресурсы-то разные (в первом случае блочная память, во втором случае умножалки). Поэтому, если даже идеально развести все Compute_Module и зафиксировать их нетлист, то не факт, что Main_Module поместится и ему хватит доступа к остальным ресурсам. То есть пока не напихаешь все, квартус не удосуживается сделать Compute_Module оптимальными или почти оптимальными. Понятно, что во время отпладки и поиска минимальных ошибок можно зафиксировать уже разведенные Compute_Module и это сильно помогает. Но стоит чуть сильнее изменить логику Main_Module, тайминги сходятся только после полного перетряхивания всего проекта.

Да, частота у Вас запредельная, конечно sm.gif
По идее, если Вы создали партиции post_fit, то внутри этих модулей временные ошибки исключены. Это скорее всего ошибки на межмодульных соединениях (из-за большого IC), т. к. при разводке малых частей неизвестно как выходные/входные сигналы будут использоваться дальше и их можно вручную обконстрейнить, задав расположение. Плюс, возможно, также где-то задан ложик регион на партициях, при котором блокируется возможность повторного использования ресурсов.
krux
iiv
ваша тактовая Clk1 расходится одним деревом по всему чипу?
тогда для выравнивания используется intended clock skew на глобальном тактовом дереве. При этом бюджет одного тактового дерева ограничен, и понятно, что затянуть его одновременно до всех ваших Compute_Module - сложно.
в этом плане можно попробовать разбить Compute_Module на 2 или 4 группы, и тактировать их с разных глобальных клоков. Можно, например, той же частотой, но с других PLL, ведь у вас всё равно FIFO между ними. Это даст квартусу возможность расчитывать бюджет одного дерева на - в 2 или в 4 раза меньшее количество блоков, т.е. даст дополнительное пространство для маневра.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.