|
|
  |
Как перебрать автоматически сотню seed в Quartus? |
|
|
|
Jun 1 2014, 11:55
|
вопрошающий
    
Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436

|
Всем добрый день,
Посоветуйте, пожалуйста, сабж. Есть два проекта, в обоих тайминги наступают примерно на 20-50 сиде. В Адвизорах в Тайминг Оптимизейшн все выставлено по максимуму. Базовый стартовый сид обычно не проходит по таймингам для 85С, но проходит для 0С. После монотонного перебора сидов рано или поздно все становится в порядке. Уже второй проект, с которым одна и таже ситуация. Так как время компиляции проектов в одном случае 5 минут, в другом 30 минут, очень неприятно сидеть в ожидании перезапуска по несколько часов или несколько дней. Скажите, пожалуйста, можно ли как-то автоматизировать этот процесс? Сам искал, гуглил, но не нашел, вдруг кто знает, пожалуйста, посоветуйте!
Спасибо!
ИИВ
|
|
|
|
|
Jun 2 2014, 03:19
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(iiv @ Jun 1 2014, 20:05)  Скажите, пожалуйста, можно ли как-то автоматизировать этот процесс? Сам искал, гуглил, но не нашел, вдруг кто знает, пожалуйста, посоветуйте! ИИВ Как уже выше советовали DSE, сам баловался долго. Но не проще ли выкручивать в Вашем случае только определенные настройки типа ограничения на фанаут или дублирование логики или вообще создать отдельно разведенную партицию с готовым нетлистом и задержками в "узком" месте? Просто перебор значений по сидам и различным настройкам - это шаманство, которое работает в последнюю очередь.
|
|
|
|
|
Jun 2 2014, 05:03
|
вопрошающий
    
Группа: Свой
Сообщений: 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 в проекте, то квартус довольно быстро все собирает и получаются правильные тайминги. Пытаюсь зафиксировать расположение нескольких (визуально хорошо разведенных модулей) и докомпилить все с большим числом модулей - не лезет  Compute_Module давно отлажены и успешно работают, а вот основной модуль регулярно надо модифицировать и отлаживать. Как я понимаю, основная проблема у меня в том, что и Main_Module, и Compute_Module требуют DSP ресурсов, но ресурсы-то разные (в первом случае блочная память, во втором случае умножалки). Поэтому, если даже идеально развести все Compute_Module и зафиксировать их нетлист, то не факт, что Main_Module поместится и ему хватит доступа к остальным ресурсам. То есть пока не напихаешь все, квартус не удосуживается сделать Compute_Module оптимальными или почти оптимальными. Понятно, что во время отладки и поиска минимальных ошибок можно зафиксировать уже разведенные Compute_Module и это сильно помогает. Но стоит чуть сильнее изменить логику Main_Module, тайминги сходятся только после полного перетряхивания всего проекта. ИМХО, вижу, что мне не хватает одной опции: собрать все Compute_Module так, чтобы выполнялись необходимые тайминги, но эти модули занимали меньше всего места и максимально компактно легли на кристалле. Я бы их тогда зафиксировал в нетлисте и радовался быстрой пересборке остального проекта. Альтернативно - гонять сиды  Спасибо ИИВ
|
|
|
|
|
Jun 2 2014, 05:27
|
Профессионал
    
Группа: Свой
Сообщений: 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, тайминги сходятся только после полного перетряхивания всего проекта. Да, частота у Вас запредельная, конечно  По идее, если Вы создали партиции post_fit, то внутри этих модулей временные ошибки исключены. Это скорее всего ошибки на межмодульных соединениях (из-за большого IC), т. к. при разводке малых частей неизвестно как выходные/входные сигналы будут использоваться дальше и их можно вручную обконстрейнить, задав расположение. Плюс, возможно, также где-то задан ложик регион на партициях, при котором блокируется возможность повторного использования ресурсов.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|