реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как перебрать автоматически сотню seed в Quartus?
iiv
сообщение Jun 1 2014, 11:55
Сообщение #1


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Всем добрый день,

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

Спасибо!

ИИВ
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 1 2014, 12:28
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



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

Дык, в Квартусе "гуглите". biggrin.gif Называется Design Space Explorer.
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Jun 2 2014, 03:19
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



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

Как уже выше советовали DSE, сам баловался долго. Но не проще ли выкручивать в Вашем случае только определенные настройки типа ограничения на фанаут или дублирование логики или вообще создать отдельно разведенную партицию с готовым нетлистом и задержками в "узком" месте? Просто перебор значений по сидам и различным настройкам - это шаманство, которое работает в последнюю очередь.
Go to the top of the page
 
+Quote Post
iiv
сообщение Jun 2 2014, 05:03
Сообщение #4


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Спасибо огромное за советы! 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

Спасибо

ИИВ
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Jun 2 2014, 05:27
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(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), т. к. при разводке малых частей неизвестно как выходные/входные сигналы будут использоваться дальше и их можно вручную обконстрейнить, задав расположение. Плюс, возможно, также где-то задан ложик регион на партициях, при котором блокируется возможность повторного использования ресурсов.
Go to the top of the page
 
+Quote Post
krux
сообщение Jun 2 2014, 07:11
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



iiv
ваша тактовая Clk1 расходится одним деревом по всему чипу?
тогда для выравнивания используется intended clock skew на глобальном тактовом дереве. При этом бюджет одного тактового дерева ограничен, и понятно, что затянуть его одновременно до всех ваших Compute_Module - сложно.
в этом плане можно попробовать разбить Compute_Module на 2 или 4 группы, и тактировать их с разных глобальных клоков. Можно, например, той же частотой, но с других PLL, ведь у вас всё равно FIFO между ними. Это даст квартусу возможность расчитывать бюджет одного дерева на - в 2 или в 4 раза меньшее количество блоков, т.е. даст дополнительное пространство для маневра.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th July 2025 - 10:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016