|
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
|
|
|
|
|
 |
Ответов
(15 - 29)
|
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нс. Что посоветуете,коллеги?
Эскизы прикрепленных изображений
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|