|
Подскажите, как бороть времянки в Xilinx?, Задержки в цепях гораздо больше, чем в логике |
|
|
|
Dec 22 2010, 15:44
|
Знающий
   
Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543

|
Здравствуйте, уважаемые гуры. Собираю проект под Spartan-6, а точнее XC6SLX150T. Микросхема большая, текущая версия проекта занимает ее примерно наполовину (в будущем хотелось бы заполнить под завязку). При компиляции (синтез Synplify, остальное ISE 12.3) проект не проходит по времянкам. В отчете по ошибкам времянок классическая картина следующая: Код ------------------------------------------------- ------------------- SLICE_X52Y115.CQ Tcko 0.447 SLICE_X48Y99.A3 net (fanout=8) 1.571 SLICE_X48Y99.CMUX Topac 0.537 SLICE_X51Y97.C5 net (fanout=2) 0.573 SLICE_X51Y97.C Tilo 0.259 SLICE_X85Y58.B4 net (fanout=12) 3.898 SLICE_X85Y58.B Tilo 0.259 SLICE_X113Y49.C4 net (fanout=68) 2.203 SLICE_X113Y49.C Tilo 0.259 SLICE_X116Y49.C4 net (fanout=16) 0.727 SLICE_X116Y49.C Tilo 0.204 SLICE_X105Y54.A3 net (fanout=1) 1.158 SLICE_X105Y54.A Tilo 0.259 SLICE_X105Y54.B6 net (fanout=1) 0.118 SLICE_X105Y54.B Tilo 0.259 SLICE_X85Y54.D6 net (fanout=1) 1.236 SLICE_X85Y54.CLK Tas 0.322
------------------------------------------------- --------------------------- Total 14.289ns (2.805ns logic, 11.484ns route) (19.6% logic, 80.4% route) Можно видеть, что: 1) потери на "путь" гораздо больше, чем потери на логику. 2) fanout части цепей достигает больших значений (68 например), что по моему мнению не может не сказываться на задержках в этой цепи. Кстати, в настройках Synplify ставлю Max fanout = 30, что не мешает появляться цифрам типа вышеуказанного 68. Собственно, вопросов 2: 1) Прав ли я в том, что большой fanout цепей увеличивает их задержки. Если да - то как его уменьшить. 2) Если синтез производится силами Synplify, какие оптимизации Map в ISE нужно включать, а какие - лучше не надо? Например, в настройках и того, и того есть возможность включить Retiming. Ну или пошлите, где на эту тему почитать. Заранее спасибо.
Сообщение отредактировал Koluchiy - Dec 22 2010, 15:50
|
|
|
|
|
Dec 22 2010, 16:21
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
1) да. разрешить Map Properties -> register duplication -> On, поиграть со стратегиями P&R 2) там нечего крутить практически, только effort и strategy. Balanced и Area в некоторых редких случаях может дать лучше времянки (для CRC, DES и т.п.). В общем случае Allow Logic Optimization Across Hierarchy нужно включать, но не все схемы это допускают. Может быть я путаю сейчас с опцией синтеза xst "Keep Hierarchy", после которой может потребоваться вносить изменения в .UCF
Попробуйте синтезировать XST, несколько лет назад я перестал даже пытаться синтезировать синплифаем, не умею его готовить. Если вы контролируете исходные тексты, можете проверить корректность после изменений и представляете где и что, то может иметь смысл руками дублировать регистры с большим fanout. В случае, когда дизайн большой, сделан из огромного чужого кода или готовых ядер, то однозначно нужно играть настройками, выкручивать все на максимум (Reentrant Route, High, High, Continue on Impossible), но можно сначала заглянуть в PlanAhead и помочь с размещением руками. Наделать AreaGroup и расставить все аккуратно.
|
|
|
|
|
Dec 23 2010, 04:52
|
Знающий
   
Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543

|
Цитата 1) да. разрешить Map Properties -> register duplication -> On Включено. Цитата В общем случае Allow Logic Optimization Across Hierarchy нужно включать Включено. Цитата Попробуйте синтезировать XST На этом проекте (да и вообще на моих проектах) Синплифай дает ощутимый выигрыш. Кроме того, в XST скорее всего надо будет менять текст, т.к. он не всё поддерживает, чего написано. Цитата Если вы контролируете исходные тексты, можете проверить корректность после изменений и представляете где и что, то может иметь смысл руками дублировать регистры с большим fanout. А почему оно само не может автоматом размножать? Это недоделки ихних программистов, или есть какие-то проблемы с размножением (учитывая, что свободная логика есть). Цитата А сколько не влезает то? В процентах. Логика влезает вся (заполнение микросхемы порядка 44%). Проблема во времянках. Если судить по отчетам P&R, проблемных цепей всего ничего - для разных настроек от 15 до 100. Но при правке этих цепей и перекомпиляции он успешно находит другие "не успевающие" цепи. Собственно, основная фишка работы в том, что проект изначально создавался и отлаживался под Virtex-5, а теперь вот начальство издало гениальное решение переделывать практически готовый проект под Spartan-6... А он ощутимо медленнее...
|
|
|
|
|
Dec 23 2010, 05:15
|
Знающий
   
Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410

|
wp331. Он правда достаточно древний, и не все применимо, но больших изменений нет. Регистры сами размножаться могут - включить Register Duplication. Ключевое слово для поиска - Timing Closure. Если у вас с 44% заполнения уже проблемы, то при полном заполнении проблемы будут еще больше. Я бы схему начал переделывать сразу. Мучений меньше. Цитата(Koluchiy @ Dec 23 2010, 11:06)  Порядка 2-3 наносекунд на проблемную цепь.
Период порядка 12.5 нс. 3/12,5 = 24 %. Настройками маппера\парсера вы этого не выберете. Если выберете сейчас, по при заполнении кристалла, опять вернетесь к этой проблеме. Мультициклы в констрейнах, статичные цепи в игнор весьма помогают.
|
|
|
|
|
Dec 23 2010, 05:28
|
Знающий
   
Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543

|
Цитата Если у вас с 44% заполнения уже проблемы, то при полном заполнении проблемы будут еще больше. Я бы схему начал переделывать сразу. Мучений меньше. Теоретически это понятно, а практически эти 44% - задача минимум, до выполнения которой, казалось бы, всего ничего. До того момента, когда будет необходимо выполнять задачу максимум (80%), может чего-то "по опыту эксплуатации" поменяться, что вызовет необходимость что-то дополнительно корректировать (возможно, существенно). Поэтому хочется откомпилить "as is". Да и вообще интересно выжать из ПО максимум, чего оно может дать. Цитата Мультициклы в констрейнах, статичные цепи в игнор весьма помогают. Буду пытаться... Цитата 3/12,5 = 24 %. Тем не менее, если посмотреть на табличку в первом посте и представить, что в цепи с fanout 68 сделать, чтобы fanout был = 34 и при этом задержка станет вместо 2.2 нс -> 1.1 нс, то это уже 1 нс. Если с остальных столько же наскрести, то вот уже те самые 2-3 нс.
Сообщение отредактировал Koluchiy - Dec 23 2010, 05:24
|
|
|
|
|
Dec 23 2010, 05:54
|
Знающий
   
Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410

|
ну вот эти можно пробывать: Perform Timing-Driven Packing and Placemen Map Effort Level - в хай Extra Effort - в хай Trim Unconnected Signals - включить Optimization Strategy - Speed LUT Combining отключить Global Optimization весьма помогает. Может поможет. Можно планахед запустить. там уже предопределенные стратегии есть. Но вот это ваше сообщение выглядит грустно: Цитата(Koluchiy @ Dec 23 2010, 10:52)  Но при правке этих цепей и перекомпиляции он успешно находит другие "не успевающие" цепи. В wp331 первый рисунок очень полезен, посмотрите. Там вообще весь алгоритм очень наглядно показан.
|
|
|
|
|
Dec 23 2010, 07:58
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Цитата(Koluchiy @ Dec 23 2010, 13:45)  Оно, конечно, мало(хотя есть цепи с fanout за 80). Но если посмотреть на то, что задержки цепей от задержки всего пути составляют порядка 80%, уже кажется, что много... Это получается не от фанаута, а от неоптимального размещения, когда соединяемые модули оказываются физически далеко друг от друга. Цитата(Koluchiy @ Dec 23 2010, 13:45)  Ну и есть некоторое чисто академическое непонимание вопроса - почему в Synplify стоит ограничение 30, а на практике получается гораздо больше? Потому что маппер еще есть, и он много чего умеет.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|