Flip-fl0p 4 9 августа, 2017 Опубликовано 9 августа, 2017 (изменено) · Жалоба Работаю 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}] Прикрепляю тестовый проект: LVDS_RX_3CHANNEL.7z Изменено 9 августа, 2017 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Magnum 0 9 августа, 2017 Опубликовано 9 августа, 2017 · Жалоба По идее ДДР должен работать по двум фронтам клока, т.е. при 10-кратной десериализации параллельный клок надо умножать на 5, (а не на 10). ИМХа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 9 августа, 2017 Опубликовано 9 августа, 2017 · Жалоба По идее ДДР должен работать по двум фронтам клока, т.е. при 10-кратной десериализации параллельный клок надо умножать на 5, (а не на 10). ИМХа. Да действительно. Неправильно написал. У меня умножается на 5. Подправлю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Magnum 0 9 августа, 2017 Опубликовано 9 августа, 2017 · Жалоба А если например в чип-планере выходной сдвиговый регистр погонять по чипу (ближе/дальше от пина), то слак сильно различается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 9 августа, 2017 Опубликовано 9 августа, 2017 · Жалоба Да нет, ближе практически некуда: Два вопроса: 1. Проверьте задержку в IO буфере (delay chain) и приведите цифру. 2. Где расположена pll, от которой питается вся логика - не в другом ли она конце fpga, точно ли этот клок глобальный (пессимизм большой и сам разброс значений для клока)? ЗЫ. Я так понимаю пины у Вас жестко привязаны (между ними банк памяти или умножитель, что не есть хорошо)? Ради интереса попробуйте их отвязать и посмотреть результат. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 9 августа, 2017 Опубликовано 9 августа, 2017 (изменено) · Жалоба А если например в чип-планере выходной сдвиговый регистр погонять по чипу (ближе/дальше от пина), то слак сильно различается? Отличается не сильно. А как вообще правильно вручную двигать ячейки ? У меня после того, как я подвинул и нажал кнопку "Check and Save all netlist changes" quartus начинает компилировать проект, и возвращает все изменения обратно... 1. Проверьте задержку в IO буфере (delay chain) и приведите цифру. 2. Где расположена pll, от которой питается вся логика - не в другом ли она конце fpga? ЗЫ. Я так понимаю пины у Вас жестко привязаны (между ними банк памяти или умножитель, что не есть хорошо)? Ради интереса попробуйте их отвязать и посмотреть результат. Задержка везде по нулям. Есть фракционный PLL чуть ближе. : Сейчас PLL расположен тут(см. картинку) А вот компиляция проекта с "отвязанными" пинами дала поразительный результат: слаки все ушли и времянка выполняется... Пути совершенно другие стали: Изменено 9 августа, 2017 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Magnum 0 9 августа, 2017 Опубликовано 9 августа, 2017 · Жалоба А как вообще правильно вручную двигать ячейки Я обычно в окошке "логик лок регион виндов" создаю некий тематический "рут регион", задаю его координаты, размерность, фиксируемость и в свойствах накидываю всё то барахло, которое хочу в него запихнуть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 9 августа, 2017 Опубликовано 9 августа, 2017 · Жалоба Пути совершенно другие стали: Проанализируйте два отличия: 1. Существенно поменялось время IC (хотя Вы написали, что задержка в io-буферах 0). 2. Существенно уменьшился разброс clocks_patch (все-таки убедитесь, что в первом случае клок пошел по глобальной шине клоков и, по возможности, используйте клокконтрол поближе к рабочей логике). ЗЫ. Кроме этой логики в проекте есть еще какая-то другая логика, стоящая после этих регистров (проект посмотреть в данный момент времени возможности нет)? Если есть, попробуйте ее убрать. ЗЫЫ. Ограничения на размещение я обычно прописываю прямо в .qsf- файле. Изначально их можно задавать в assignement editor,. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 9 августа, 2017 Опубликовано 9 августа, 2017 · Жалоба Проанализируйте два отличия: 1. Существенно поменялось время IC (хотя Вы написали, что задержка в io-буферах 0). 2. Существенно уменьшился разброс clocks_patch (все-таки убедитесь, что в первом случае клок пошел по глобальной шине клоков и, по возможности, используйте клокконтрол поближе к рабочей логике). ЗЫ. Кроме этой логики в проекте есть еще какая-то другая логика, стоящая после этих регистров (проект посмотреть в данный момент времени возможности нет)? Если есть, попробуйте ее убрать. ЗЫЫ. Ограничения на размещение я обычно прописываю прямо в .qsf- файле. Изначально их можно задавать в assignement editor,. Никакой логики в проекте нет (за исключением небольшого ряда мультиплексоров, которые никак не влияют на текущий результат работы). Вот структута приёмника: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Magnum 0 9 августа, 2017 Опубликовано 9 августа, 2017 · Жалоба А если например поставить в ДДР лпм галочку регистеред аутпут, то до того регистра, тоже будет такая большая задержка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 9 августа, 2017 Опубликовано 9 августа, 2017 · Жалоба А если например поставить в ДДР лпм галочку регистеред аутпут, то до того регистра, тоже будет такая большая задержка? У меня такой нет :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Magnum 0 9 августа, 2017 Опубликовано 9 августа, 2017 · Жалоба У меня такой нет :( как же так? вот тут смотрели? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 9 августа, 2017 Опубликовано 9 августа, 2017 (изменено) · Жалоба В 5 циклоне похоже таких нет... У меня нет ALTLVDS_RX. У меня самописный приёмник. По некоторым причинам ALTLVDS_RX не подходит. Изменено 9 августа, 2017 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Magnum 0 9 августа, 2017 Опубликовано 9 августа, 2017 · Жалоба Отнюдь, очевидно это просто разные библиотеки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 9 августа, 2017 Опубликовано 9 августа, 2017 · Жалоба В 5 циклоне похоже таких нет... У меня нет ALTLVDS_RX. У меня самописный приёмник. По некоторым причинам ALTLVDS_RX не подходит. Все равно на выходе будет обычный дополнительный регистр на рассыпухе. Входной io буфер для данного случая представляет из себя DDIO in из трех регистров и цепочки delay chain, там физически что-то еще дополнительно засунуть нельзя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться