|
TimeQuest. Борьба со slack., Задержки межд Fast input register/DDR reg и регистром приёмником. |
|
|
|
Aug 9 2017, 06:14
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Работаю c чипом CYCLONE V - 5CSEMA5F31C6. САПР - Quartus 13.1. Столкнулся с проблемой, что между Fast input register или выходами DDR регистра и регистром-приёмником данных набегает огромная задержка по данным. Из-за чего возникает нарушение по setup. Для начала опишу кратко дизайн: Имеем 3 приёмные LVDS линии c DDR регистрами. На вход CLK подается опорная частота, которая на PLL умножается на 10 5, для тактирования приёмников.  TimeQuest радостно сообщает о том, что у нас нарушение по setup и фиг вам, а не частота приёмников выше 200...230 MHZ.  Посмотрим, чуть внимательнее на само нарушение. Набегает огромная задержка почти в 3 нс по данным.  Может Quartus расположил регистры приёмники в другом конце чипа ? Да нет, ближе практически некуда:  На данный момент у меня есть 2 мысли как можно решить проблему: 1. На pll сформировать частоту со сдвигом, и от неё тактировать регистры-приёмники. 2. На LCELL сформировать цепь задержки тактового сигнала регистров приёмников(тупиковый вариант). Хотелось бы услышать совета от более опытных коллег. Может есть какой-то другой способ решения проблемы ? Пока мой SDC файл выглядит так: Код #************************************************************** # Create Clock #************************************************************** set_time_format -unit ns -decimal_places 3 create_clock -name {CLK} -period 80MHz [get_ports {CLK}]
#************************************************************** # Create PLL Clock #************************************************************** derive_pll_clocks
set_false_path -from [get_clocks {MY_PLL_COMP|my_pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -to [get_ports {RX0}] set_false_path -from [get_clocks {MY_PLL_COMP|my_pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -to [get_ports {RX1}] set_false_path -from [get_clocks {MY_PLL_COMP|my_pll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] -to [get_ports {RX2}] Прикрепляю тестовый проект:
Сообщение отредактировал Flip-fl0p - Aug 9 2017, 07:32
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 36)
|
Aug 9 2017, 08:04
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(Flip-fl0p @ Aug 9 2017, 09:14)  Да нет, ближе практически некуда: Два вопроса: 1. Проверьте задержку в IO буфере (delay chain) и приведите цифру. 2. Где расположена pll, от которой питается вся логика - не в другом ли она конце fpga, точно ли этот клок глобальный (пессимизм большой и сам разброс значений для клока)? ЗЫ. Я так понимаю пины у Вас жестко привязаны (между ними банк памяти или умножитель, что не есть хорошо)? Ради интереса попробуйте их отвязать и посмотреть результат.
|
|
|
|
|
Aug 9 2017, 08:04
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата(Magnum @ Aug 9 2017, 10:50)  А если например в чип-планере выходной сдвиговый регистр погонять по чипу (ближе/дальше от пина), то слак сильно различается? Отличается не сильно. А как вообще правильно вручную двигать ячейки ? У меня после того, как я подвинул и нажал кнопку "Check and Save all netlist changes" quartus начинает компилировать проект, и возвращает все изменения обратно... Код 1. Проверьте задержку в IO буфере (delay chain) и приведите цифру. 2. Где расположена pll, от которой питается вся логика - не в другом ли она конце fpga? ЗЫ. Я так понимаю пины у Вас жестко привязаны (между ними банк памяти или умножитель, что не есть хорошо)? Ради интереса попробуйте их отвязать и посмотреть результат. Задержка везде по нулям. Есть фракционный PLL чуть ближе. : Сейчас PLL расположен тут(см. картинку)  А вот компиляция проекта с "отвязанными" пинами дала поразительный результат: слаки все ушли и времянка выполняется... Пути совершенно другие стали:
Сообщение отредактировал Flip-fl0p - Aug 9 2017, 08:35
|
|
|
|
|
Aug 9 2017, 08:38
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 26-05-05
Пользователь №: 5 397

|
Цитата А как вообще правильно вручную двигать ячейки Я обычно в окошке "логик лок регион виндов" создаю некий тематический "рут регион", задаю его координаты, размерность, фиксируемость и в свойствах накидываю всё то барахло, которое хочу в него запихнуть.
|
|
|
|
|
Aug 9 2017, 08:54
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(Flip-fl0p @ Aug 9 2017, 11:04)  Пути совершенно другие стали: Проанализируйте два отличия: 1. Существенно поменялось время IC (хотя Вы написали, что задержка в io-буферах 0). 2. Существенно уменьшился разброс clocks_patch (все-таки убедитесь, что в первом случае клок пошел по глобальной шине клоков и, по возможности, используйте клокконтрол поближе к рабочей логике). ЗЫ. Кроме этой логики в проекте есть еще какая-то другая логика, стоящая после этих регистров (проект посмотреть в данный момент времени возможности нет)? Если есть, попробуйте ее убрать. ЗЫЫ. Ограничения на размещение я обычно прописываю прямо в .qsf- файле. Изначально их можно задавать в assignement editor,.
|
|
|
|
|
Aug 9 2017, 09:02
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата(bogaev_roman @ Aug 9 2017, 11:54)  Проанализируйте два отличия: 1. Существенно поменялось время IC (хотя Вы написали, что задержка в io-буферах 0). 2. Существенно уменьшился разброс clocks_patch (все-таки убедитесь, что в первом случае клок пошел по глобальной шине клоков и, по возможности, используйте клокконтрол поближе к рабочей логике). ЗЫ. Кроме этой логики в проекте есть еще какая-то другая логика, стоящая после этих регистров (проект посмотреть в данный момент времени возможности нет)? Если есть, попробуйте ее убрать. ЗЫЫ. Ограничения на размещение я обычно прописываю прямо в .qsf- файле. Изначально их можно задавать в assignement editor,. Никакой логики в проекте нет (за исключением небольшого ряда мультиплексоров, которые никак не влияют на текущий результат работы). Вот структута приёмника:
|
|
|
|
|
Aug 9 2017, 10:57
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 26-05-05
Пользователь №: 5 397

|
Цитата(Flip-fl0p @ Aug 9 2017, 17:39)  У меня нет ALTLVDS_RX. У меня самописный приёмник. По некоторым причинам ALTLVDS_RX не подходит. А что именно за причины? Это ж 1в1 для режима ддр тоже самое.
|
|
|
|
|
Aug 9 2017, 12:03
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата(Magnum @ Aug 9 2017, 14:32)  В том и фишка, при 2 разрядном выходе лвдс_рх вырождается в ддр с одним клоком. Результат аналогичный:  Проблема появляется если входы размещены в банке IOBANK_4A. Если входы разместить в банке IOBANK_5B - то проблема уходит. P.S. Реальная железка работает без нареканий  Quartus 15.0 результат аналогичный...
Сообщение отредактировал Flip-fl0p - Aug 9 2017, 12:05
|
|
|
|
|
Aug 9 2017, 12:36
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата(bogaev_roman @ Aug 9 2017, 15:26)  Временная модель, приведенная Вами - скорее всего для худшего случая (slow - повышенная температура, пониженное напряжение и технологический разброс). Все-таки Вы уверены, что клок идет по глобальной линии клока? Интересно посмотреть запас по холду, если он большой, то можно попробовать фазу подергать. Зы Посмотрел внимательно на последний отчет по времянке, у Вас ограничения не потерялись в sdc (relationship соответствует 1нс, а должен по идее 2.5нс)? В последнем отчете, я даже на задавл констрейны. Я Посмотрел на FMAX, посмотрел на слаки - и сделал вывод о том, что этот вариант так-же не работает. Не думаю, что если я поставлю PLL, задам констрейны он будет отличаться.
Сообщение отредактировал Flip-fl0p - Aug 9 2017, 12:36
|
|
|
|
|
Aug 9 2017, 12:57
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(Flip-fl0p @ Aug 9 2017, 15:36)  В последнем отчете, я даже на задавл констрейны. Я Посмотрел на FMAX, посмотрел на слаки - и сделал вывод о том, что этот вариант так-же не работает. Не думаю, что если я поставлю PLL, задам констрейны он будет отличаться. Задайте ограничения, тогда slack уменьшится до -2нс, потом сдвиньте приемную частоту больше, чем на 2нс (300градусов), если hold не вылезет, то по setup должно пройти (в идеальном случае). Но откуда там набегает 3нс при переходе от ddr регистра до обычного в соседней ячейке - загадка.
|
|
|
|
|
Aug 9 2017, 14:02
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(bogaev_roman @ Aug 9 2017, 15:57)  Но откуда там набегает 3нс при переходе от ddr регистра до обычного в соседней ячейке - загадка. Вероятно, отгадка такая: Цитата(http://www.alteraforum.com/forum/showthread.php?t=45705&p=189491#post189491) Cyclone V DQ pin used for user pin(not DDR DQ pin), always need to route through HMCPHY_RE. this routing element would cause almost 2ns differnece between setup and hold. no way to bypass it. so never use DQ pins as high speed input or output in cyclone V
|
|
|
|
|
Aug 9 2017, 17:20
|
Местный
  
Группа: Свой
Сообщений: 214
Регистрация: 26-05-05
Пользователь №: 5 397

|
Цитата(Flip-fl0p @ Aug 9 2017, 22:34)  и почему железка то работает как положено и самое главное стабильно, имея такое нарушение по Setup ? А что удивительного? если задержка ровно на такт у вас, то всё и работает как надо, другое дело, если вы начнете её в температуре гонять, от нулей до +70С, там могут начаться чудеса. Ну и при массовом производстве могут на разных экземплярах разные результаты получаться.
|
|
|
|
|
Aug 10 2017, 08:19
|

Утомлённый солнцем
     
Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832

|
Упаду на хвост по теме. Не удаётся выполнить выходные времянки для ЦАП(Fclk = 100MHz,SDR,Cyclon III). Код set_output_delay 5 -max -clock {clk_dac} [get_ports {dac_*}] set_output_delay -3 -min -clock {clk_dac} [get_ports {dac_*}] Клок в плис приходит от ЦАП -> PLL -> формирование данных, fast_output_register задействован. Вращение фазы PLL нужного эффекта не приносит. Почему-то на io_obuf задержка 5,3нс и разница на двух битах достигает 5,3 - 2,3 = 3нс. Что посоветуете,коллеги?
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 10 2017, 09:41
|

Утомлённый солнцем
     
Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832

|
Цитата(bogaev_roman @ Aug 10 2017, 12:16)  Эти ограничения из даташита (просто максимальное окно на работу при них получается всего 10-5-3=2нс)? clk_dac - это выход pll (из приведенных ограничений не видно)? Для подробного анализа можете привести схему чипланнера, на которой показаны расположения io-буферов и pll (может они по всему периметру раскиданы, так непонятно)? Да, из даташита. Окно действительно очень маленькое. clk_dac - это выход pll С чиппланером я не очень дружу. io-буфер видно, а как ещё и PLL показать?
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 10 2017, 11:26
|

Утомлённый солнцем
     
Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832

|
Цитата(bogaev_roman @ Aug 10 2017, 13:32)  Можно сразу все dac_im* вытащить со всеми fan-in. Чтобы понять откуда разбег в 3нс получается приведите еще и путь для другого выхода (скорее всего пины находятся между банками памяти или dsp-блоками). А как эту * поставить? Здесь можно выбрать только один бит из списка. Не выходит у меня вывести всю шину. На снимке справа внизу подсвеченные синим - это мои io_obuf. Внизу по центру - PLL. Показан клок для dac_im[10]. Вроде не через весь кристалл связи идут. Разбежка в задержках клока в пределах шины = 1,641 - 1,582 = 0,059нс. Думаю что дело не в клоке, а разбежка задержек данных в пределах шины как раз и даёт те клятые 3,0 нс... Но ведь в лапах стоят триггеры, они ведь должны устранить этот разбег данных
Эскизы прикрепленных изображений
|
|
|
|
|
Feb 21 2018, 07:18
|
Участник

Группа: Участник
Сообщений: 34
Регистрация: 25-04-05
Пользователь №: 4 466

|
Цитата(andrew_b @ Aug 9 2017, 17:02)  Вероятно, отгадка такая: Большое спасибо, andrew_b, за эту находку. Который день мучаюсь с подобной проблемой. С одного пина быстро долетает, с другого тупит. Уже голову сломал. Ну и г.. этот CycloneV, столько гадостей в нем, что его достоинства не всегда их могут перебороть.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|