Перейти к содержанию
    

Vivado P&R. Особенности и подходы

Всем привет!

 

С Xilinx ранее работать серьёзно не приходилось, всё больше была Altera, поэтому нахожусь в процессе набора опыта и познания особенностей FPGA Xilinx и её САПР Vivado.

 

Текущий проект: Artix-7 xc7a200t, Vivado 2018.2. По результатам очередной сборки развалились времянки: тактовый домен 4 нс (250 МГц), слак по сетапу порядка 0.8 нс. Смотрю, на чём просело, вижу, задержку пути на логике 1.269 нс, на трассировке 3.229. Логики там реально немного, поэтому и странно, что не уложилось. Открываю Device, и вижу, что вивада утащила часть логики модуля в другой Clock Region, отсюда и такая конская задержка (плоховато, но видно беленьким показан путь).

 

bad-placing.thumb.png.9b6d30db6a9d3f96b66b5fe6b534ed6e.png

 

Никакими изменениями стратегий ситуацию исправить не удалось. Вообще, ситуация представляется достаточно простой - кристалл почти пустой, и места для логики в левом Clock Region и под ним полно. Зачем же плейсер рассовал логику так, что трассировщик потом уже ничего не может исправить?

 

Ну, делать нечего, пришлось применить ручное назначение потрохов модуля в pblock.

 

good-placing.thumb.png.c8741407fba4a0953a70131a3120f2bd.png

 

После этого всё получилось, времянки сошлись и на дивайсе всё выглядит компактно, логично и красиво.

 

Собственно вопрос: это правильный подход и нормальная практика для Xilinx/Vivado или это костыльно и правильно всё же как-то вызвать интеллект САПР из сумрака, чтобы она сама соображала, как размещать, чтобы проект разводился без фейлов? Просто на Altera/Quartus не помню случая, чтобы приходилось фиксить работут фиттера - он всегда сам справлялся лучше (а попытки лезть к нему напрямую только мешали).

 

P.S. Вдогонку штрих: без констрейна на pblock длительность сборки:

 

синтез: 0:33
P&R: 2:19

 

и в итоге времянка не сходится.

 

с pblock'ом:

 

синтез: 0:33
P&R: 1:38

 

и времянка в норме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

Увы алгоритм P&R в Xilinx этим грешит  размазывая логику по кристаллу что манку по тарелке. IMHO  скорее всего это связанно с другой структурой FPGA (более однородной) по сравнению с Altera.  Поэтому применение pblock это необходимое условие для повторяемости результатов и ускорения P&R. особенно для скоростных и загруженных дизайнов.

Удачи! Rob.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я вижу причину такого поведения как попытку распределить выделяемую тепловую энергию равномерно по кристаллу. Может, есть установка не распределять? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Стремление похвальное. Но не в ущерб же таймингам? Кому нужно хорошее распределение тепла по кристаллу при не рабочем проекте?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ксайлинксу? Может, иначе они не работают от перегрева?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть два пути самурая, и каждый выбирает свой.

Самый лучший инструмент - не тот, который самый лучший, а тот, которым лучше всего владеешь.

 

Что касается холивара Альтера/Ксайлинкс, то лично у меня поведение одинаковое и там и там. Всё зависит от скоростной нагруженности проекта. Если он нагружен хорошо - компилятор без помощи разработчика будет лажать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

45 minutes ago, ViKo said:

Я вижу причину такого поведения как попытку распределить выделяемую тепловую энергию равномерно по кристаллу. Может, есть установка не распределять? 

Думаю что нет.  Тут скорее дело в  алгоритме минимизации  целевой функции тайминга/роутинга при P&R. 

Например для структуры связей A <-> B <-> C <-> ... N  и N <->A. Когда суммарный вес множества коротких связей между близкими блоками превышает  вес одной длинной. Ощущения что при размещении  блоки ставятся один за другим.  При этом направление размещения для следующего не имеет существенно роли так как связи короткие (можно даже предположить что преимущество будет в сторону пустого пространства). В какой то момент  функция попадает в локальный минимум и выбраться от туда уже не может.

В ISE было еще печальнее - там  P&R мог запросто  модуль вытянуть колбасой по диагонали через весь кристалл. В Vivado это заметно  поправили. Во всяком случае для Kintex|Virtex,  (для Artix не скажу почти не работал с ними).

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 минут назад, Koluchiy сказал:

Что касается холивара Альтера/Ксайлинкс

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

всегда так делаю :)

кстати, такими же проблемами (неумением правильно размещать элементы) страдают и размещатели для АЗИКов

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне кажется, он просто их от того , так разводит, что у вас ножки уже заданы , вот он и стремиться регистры к ним рассположить

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 07.12.2018 в 21:17, Koluchiy сказал:

А констрейны на i/o как-то задавались?

А это тут причём? Эта логика очень далеко от I/O пинов - за несколькими слоями регистров и за парой аппаратных блоков. И даже если бы там пины тянули, то это не оправдание такого горбатого размещения.

В 08.12.2018 в 05:42, Nik. сказал:

Мне кажется, он просто их от того , так разводит, что у вас ножки уже заданы , вот он и стремиться регистры к ним рассположить

Нет, этого и близко нет. Там данные приходят через аппаратные GT трансиверы, проходят через аппаратный же PCEe блок и только после этого попадают на логику. Эти аппаратные блоки расположены в левом верхнем Clock Region, и по идее там же нужно размещать сопутствующую логику. В целом плейсер так и делает за некоторым исключением. Логика такого поведения не понятна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 12/9/2018 at 12:17 PM, dxp said:

А это тут причём? Эта логика очень далеко от I/O пинов - за несколькими слоями регистров и за парой аппаратных блоков. И даже если бы там пины тянули, то это не оправдание такого горбатого размещения.

Окей, буду прокачивать исусство телепатии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...