dortonyan 1 7 сентября, 2023 Опубликовано 7 сентября, 2023 · Жалоба Собрал проект под LcmXO2 плисину. Но на выходе между сигналом данных и сигналом битклока получается разбежка порядка 10нс. Частота битклока равна частоте тактового клока, поэтому выполнить пересинхронизацию обоих сигналов не получается. Настройки оптимизации трассировщика исправить ситуацию не помогли. Поэтому решил выровнять фронты констрейнтами. Скачал мануалы по диамонду, нашел как задаются ограничения для цепей. Но не тут-то было. Что не задаю, ничего не меняется. Репорт показывает всегда задержку Clock to Output: 14 нс для одного сигнала и 24..28 нс для другого. Пробовал через SpreadSeed->Preference: задать задержку в меню "CLOCK_TO_OUTPUT". Попробовал задать констрейны через SDC файл (командой set_output_delay) - ничего не меняется. Причем диамонд DSC файл подключает, ограничения в репорте пишет, но тайминги "Clock to Output" не меняет. Для проверки SDC констрейнов подключил этот же файл к проекту в квартусе. Там все отлично работает, фронты двигаются взад-вперед на любой заданный тайминг. В диамонде ничего не меняется. Не пойму что я делаю не так, уже поломал голову разбираться. Может нужно включить какую-то опцию в трассировщике? Кто-нить знает как правильно задавать констрейнты в диамонде? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 7 сентября, 2023 Опубликовано 7 сентября, 2023 · Жалоба 1. а вы вообще уверены что в этом семействе плис есть аппаратные блоки что бы двигать задержку выходных сигналов? 2. почему не вывести bitclk как сигнал данных на той же тактовой частоте? В чипе нет выходных DDR регистров? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dortonyan 1 7 сентября, 2023 Опубликовано 7 сентября, 2023 (изменено) · Жалоба Я полагал что это делается обычным перераспределением вентилей. Типа если надо задержка, то просто добавляется пара инверторов и готово. А в первом циклоне есть такие блоки? На нем все отлично двигается. Соб-но можно выровнять фронты, если в проекте на выход с отстающим фронтом добавить вентиль. Но чтобы компилятор его не вырезал при оптимизации придется выводить вход вентиля на входной порт. Получается какой-то костыль. Я думал что констрейнты для того и нужны, чтобы компилятор делал то же самое автоматом. P.S. Залез в мануал на MachXo2, там как и в циклоне есть модуль формирования задержек для DDR интерфейса. Это оно? 2-ой вопрос не понял. Как это вывести клок как дата? В смысле пересинхронизировать? Так я же в первом посте написал, что частота битклока на выходе равна частоте мастрклока, тактирующего плис. Изменено 7 сентября, 2023 пользователем dortonyan Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 7 сентября, 2023 Опубликовано 7 сентября, 2023 · Жалоба 25 minutes ago, dortonyan said: Я полагал что это делается обычным перераспределением вентилей. Типа если надо задержка, то просто добавляется пара инверторов и готово. Я думал что констрейнты для того и нужны, чтобы компилятор делал то же самое автоматом. Полагаю что надо было с даташитами на сыклон и латекс ознакомиться, а потом Resource property Editor посмотреть 25 minutes ago, dortonyan said: А в первом циклоне есть такие блоки? На нем все отлично двигается. Но величина этой задержки, на сыклоне, всего лишь Поэтому что там у вас хорошо двигается (тем более на 10нс) не ясно. Плис это же не асик, не умеют софты регулировать внешние задержки вставкой LCELL ов, максимум подвигать модули в IO delay, да и то не во всех плис. Вставлять LCELLы в ручную надо, но повторюсь, почему нельзя использовать DDR выход для передачи битового клока? 25 minutes ago, dortonyan said: Соб-но можно выровнять фронты, если в проекте на выход с отстающим фронтом добавить вентиль. Но чтобы компилятор его не вырезал при оптимизации придется выводить вход вентиля на входной порт. Получается какой-то костыль. synthesis keep/noprune атрибутов или других, которые запрещают удалять модули с логическим bypass в этом софте нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dortonyan 1 7 сентября, 2023 Опубликовано 7 сентября, 2023 · Жалоба 13 minutes ago, des00 said: Плис это же не асик, не умеют софты регулировать внешние задержки вставкой LCELL ов, максимум подвигать модули в IO delay, да и то не во всех плисх. Вставлять LCELLы в ручную надо Может мы говорим про разные задержки, но даже просто включение оптимизации трассировщика запросто убирает разбежки фронтов на выходе в 3..5нс. Как еще если не перераспределением вентилей? Вот для примера выход с настройками трассировщика по умолчанию: Тактовая частота iCLK = 50МГц, т.е. 20нс период. Видно, что на выходных фронтах разбежки порядка 5нс. Включаем усиленную оптимизацию трассировщика: Гораздо ровнее. А теперь подключаем констрейнты: Выровнялось все идеально, не смотря на первоначальные разбежки в 5нс. А теперь допустим надо сдвинуть выход oDR на 7нс. Меняем констрейнт и получаем сдвиг: Можно и на 20нс сдвинуть. Все запросто двигается. Что не так? 21 minutes ago, des00 said: synthesis keep/noprune атрибутов или других, которые запрещают удалять модули с логическим bypass в этом софте нет? Спасибо за наводку, попробую поискать. 29 minutes ago, des00 said: почему нельзя использовать DDR выход для передачи битового клока? А это я просто не догоняю как. Никогда не пользовался DDR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 7 сентября, 2023 Опубликовано 7 сентября, 2023 · Жалоба 25 minutes ago, dortonyan said: Может мы говорим про разные задержки, но даже просто включение оптимизации трассировщика запросто убирает разбежки фронтов на выходе в 3..5нс. Как еще если не перераспределением вентилей? Очень интересный экспиремент. Особенно если учесть что set_output_delay задает временное окно параметров, для выполнения временных ограничений tsu/th внешнего (вне плис) триггера, подключенного к портам, работающего на заданной тактовой, а не задержку сигнала как таковую. В частности -max и -min заданные у вас означают tsu = -15нс и th = 14нс у внешнего триггера тактирующегося на тактовой clk_core вне плис. В проекте стоит Fast output register = off? Report Full path -detailed надо сделать в отсчетах временного анализа, тогда он покажет как именно и через что он вел сигнал. Вы можете дать этот проект покрутить? Первый раз такое вижу, что-то тут не то. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dortonyan 1 7 сентября, 2023 Опубликовано 7 сентября, 2023 · Жалоба 8 minutes ago, des00 said: Очень интересный экспиремент. Особенно если учесть что set_output_delay задает временное окно параметров, для выполнения временных ограничений tsu/th внешнего (вне плис) триггера, подключенного к портам, работающего на заданной тактовой, а не задержку сигнала как таковую. В частности -max и -min заданные у вас означают tsu = -15нс и th = 14нс у внешнего триггера тактирующегося на тактовой clk_core вне плис. В проекте стоит Fast output register = off? Report Full path -detailed надо сделать в отсчетах временного анализа, тогда он покажет как именно и через что он вел сигнал. Вы можете дать этот проект покрутить? Первый раз такое вижу, что-то тут не то. Проект пожалуйста. Но там ничего особенного нету. Настройки синезиса по умолчанию. В настройках фиттера только галка переставлена на Standart Fit. DF2_output.rar Возможно в констрейнтах я написал какую-то фигню, с ними начал разбираться буквально вчера. Но это в любом случае не отменяет факта, что просто оптимизация фиттера двигает фронты на наносекунды. И это явно не за счет пикосекундных модулей задержки. Соб-но то же самое можно видеть на любом другом проекте, это я просто для примера привел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 7 сентября, 2023 Опубликовано 7 сентября, 2023 · Жалоба 18 minutes ago, dortonyan said: Соб-но то же самое можно видеть на любом другом проекте, это я просто для примера привел. спасибо посмотрю, лет 15 плотно работал с альтерой, от первого сыклона до пятой арии, у меня он никогда их не двигал в таком диапазоне. зайлинкс тоже не двигает, даже модули задержек не крутит, там все надо в ручную делать и констрейны там только что бы убедиться что все выполняется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dortonyan 1 7 сентября, 2023 Опубликовано 7 сентября, 2023 · Жалоба Ура! Помогла директива /* synthesis syn_keep=1 */. des00, большое спасибо! Это гораздо проще констрейнтов (блин, еще выговори :)). Так что данный вопрос для себя я закрыл. Тем более, что высокая точность фронтов мне не требуется, грубой подгонки вентилями хватит. Остальное доделает оптимизация трассировщика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 7 сентября, 2023 Опубликовано 7 сентября, 2023 · Жалоба такс, покрутил выложенный проект, да, стоит запрет на использование регистров в портах ввода-вывода, но, никаких вставок не замечено, пины не прибиты, ква делает задержки размещая их куда хочет. На скрине сверху то что при задержках 8/7, ниже 15/14. Но это тоже своего рода выравнивание. Прибью пины посмотрю что получится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dortonyan 1 7 сентября, 2023 Опубликовано 7 сентября, 2023 · Жалоба 10 minutes ago, des00 said: ква делает задержки размещая их куда хочет. Понятно. Т.е. он оптимизирует не логикой, а чисто маппингом. Ну соб-но для меня как юзера пофиг, главное что оптимизирует. 11 minutes ago, des00 said: Прибью пины посмотрю что получится. Должно получиться то же самое. На проектах с назначенными пинами тоже оптимизирует. Фигово, что диамонд так не умеет. Походу он тупо оптимизирует на минимальные задержки маппинга. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 7 сентября, 2023 Опубликовано 7 сентября, 2023 · Жалоба Ну собственно чуда и не произшло (а то я уж было подумал что мне приснилось). Если прибить пины гвоздями, то результат как получится так получится) да, он пытается что-то сделать получше, но чисто за счет расстановки регистра источника, никаких добавить/поелозить по чипу круги и прочего он не умеет) Сверху решение когда ставим 8/7, снизу 15/14. И да, все это за счет того что стоит запрет на размещение триггера в ячейке ввода-вывода. Если поставить регистр туда (Fast output = on), то все его шаги это те самые 0.5нс задержки в режиме вкл-выкл. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dortonyan 1 7 сентября, 2023 Опубликовано 7 сентября, 2023 · Жалоба 24 minutes ago, des00 said: Если прибить пины гвоздями, то результат как получится так получится) да, он пытается что-то сделать получше, но чисто за счет расстановки регистра источника, никаких добавить/поелозить по чипу круги и прочего он не умеет) Так перемещение триггеров это и есть "поелозить круги по чипу". ) В общем на проекте с назначенными пинами оно тоже работает, может похуже (я сильно не сравнивал), но фронты ровняет. Я в одном проекте сразу пытался распиновку подбирать, чтобы получить сдвиги поровнее. Потом включил оптимизацию фиттера и понял, что занимался ерундой. ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 7 сентября, 2023 Опубликовано 7 сентября, 2023 · Жалоба 16 minutes ago, dortonyan said: Так перемещение триггеров это и есть "поелозить круги по чипу". ) В общем на проекте с назначенными пинами оно тоже работает, может похуже (я сильно не сравнивал), но фронты ровняет. ну да, просили 7-8нс на пин, он сделал 3.6нс и 5.3нс, когда попросили 15 и 7 он сделал 7.5 и 3.6. Причем это только один coner case(slow) из двух-четырех который проверяется, в других другие задержки и другие разбросы) вот например что будет в fast при запрошеных 7-8 по oDL и 14-15 по oDR Одним словом К - качество) PS. Вы же сами писали " Типа если надо задержка, то просто добавляется пара инверторов и готово." не добавляется, не умеет он так) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dortonyan 1 7 сентября, 2023 Опубликовано 7 сентября, 2023 (изменено) · Жалоба 1 hour ago, des00 said: PS. Вы же сами писали " Типа если надо задержка, то просто добавляется пара инверторов и готово." не добавляется, не умеет он так) Понятно, спасибо, буду знать. Просто при включении оптимизации фиттера обычно ресурсов расходуется на несколько ячеек меньше. Я решил, что значит тасует логику. Изменено 7 сентября, 2023 пользователем dortonyan Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться