Перейти к содержанию
    

Констрейнты в Lattice Diamond

Собрал проект под LcmXO2 плисину. Но на выходе между сигналом данных и сигналом битклока получается разбежка порядка 10нс.

Частота битклока равна частоте тактового клока, поэтому выполнить пересинхронизацию обоих сигналов не получается.

Настройки оптимизации трассировщика исправить ситуацию не помогли. Поэтому решил выровнять фронты констрейнтами.

Скачал мануалы по диамонду, нашел как задаются ограничения для цепей. Но не тут-то было. Что не задаю, ничего не меняется. Репорт показывает всегда задержку Clock to Output: 14 нс для одного сигнала и 24..28 нс для другого.

Пробовал через SpreadSeed->Preference: задать задержку в меню "CLOCK_TO_OUTPUT". Попробовал задать констрейны через SDC файл (командой set_output_delay)  - ничего не меняется. Причем диамонд DSC файл подключает, ограничения в репорте пишет, но тайминги "Clock to Output" не меняет.

Для проверки SDC констрейнов подключил этот же файл к проекту в квартусе. Там все отлично работает, фронты двигаются взад-вперед на любой заданный тайминг.

В диамонде ничего не меняется. Не пойму что я делаю не так, уже поломал голову разбираться.

Может нужно включить какую-то опцию в трассировщике? Кто-нить знает как правильно задавать констрейнты в диамонде?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. а вы вообще уверены что в этом семействе плис есть аппаратные блоки что бы двигать задержку выходных сигналов?

2. почему не вывести bitclk как сигнал данных на той же тактовой частоте? В чипе нет выходных DDR регистров? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я полагал что это делается обычным перераспределением вентилей. Типа если надо задержка, то просто добавляется пара инверторов и готово.

А в первом циклоне есть такие блоки? На нем все отлично двигается.

Соб-но можно выровнять фронты, если в проекте на выход с отстающим фронтом добавить вентиль. Но чтобы компилятор его не вырезал при оптимизации придется выводить вход вентиля на входной порт. Получается какой-то костыль.

Я думал что констрейнты для того и нужны, чтобы компилятор делал то же самое автоматом.

P.S.

Залез в мануал на MachXo2, там как и в циклоне есть модуль формирования задержек для DDR интерфейса. Это оно?

 

2-ой вопрос не понял. Как это вывести клок как дата? В смысле пересинхронизировать? Так я же в первом посте написал, что частота битклока на выходе равна частоте мастрклока, тактирующего плис.

Изменено пользователем dortonyan

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

25 minutes ago, dortonyan said:

Я полагал что это делается обычным перераспределением вентилей. Типа если надо задержка, то просто добавляется пара инверторов и готово.

Я думал что констрейнты для того и нужны, чтобы компилятор делал то же самое автоматом.

Полагаю что надо было с даташитами на сыклон и латекс ознакомиться, а потом Resource property Editor посмотреть 

25 minutes ago, dortonyan said:

А в первом циклоне есть такие блоки? На нем все отлично двигается.

image.thumb.png.15e398c756d65803981f686b1ee3f33e.png

Но величина этой задержки, на сыклоне, всего лишь 

image.thumb.png.1955aefe22fe71b1d50cce22a98b895c.png

Поэтому что там у вас хорошо двигается (тем более на 10нс) не ясно. Плис это же не асик, не умеют софты регулировать внешние задержки вставкой LCELL ов, максимум подвигать модули в IO delay, да и то не во всех плис. Вставлять LCELLы в ручную надо, но повторюсь, почему нельзя использовать DDR выход для передачи битового клока?

25 minutes ago, dortonyan said:

Соб-но можно выровнять фронты, если в проекте на выход с отстающим фронтом добавить вентиль. Но чтобы компилятор его не вырезал при оптимизации придется выводить вход вентиля на входной порт. Получается какой-то костыль.

synthesis keep/noprune атрибутов или других, которые запрещают удалять модули с логическим bypass в этом софте нет? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 minutes ago, des00 said:

Плис это же не асик, не умеют софты регулировать внешние задержки вставкой LCELL ов, максимум подвигать модули в IO delay, да и то не во всех плисх. Вставлять LCELLы в ручную надо

Может мы говорим про разные задержки, но даже просто включение оптимизации трассировщика запросто убирает разбежки фронтов на выходе в 3..5нс.

Как еще если не перераспределением вентилей?

Вот для примера выход с настройками трассировщика по умолчанию:

image.thumb.png.9a2026b9fe110aa1fe8375ee74375721.png

Тактовая частота iCLK = 50МГц, т.е. 20нс период. Видно, что на выходных фронтах разбежки порядка 5нс.

Включаем усиленную оптимизацию трассировщика:

image.thumb.png.479c4bdc5cc660b8bae2c27b991745b9.png

Гораздо ровнее.

А теперь подключаем констрейнты:

image.thumb.png.331d18ff267054a7d8ef943389f7b431.png

Выровнялось все идеально, не смотря на первоначальные разбежки в 5нс.

А теперь допустим надо сдвинуть выход oDR на 7нс. Меняем констрейнт и получаем сдвиг:

image.thumb.png.83f888a680560023de8124f064b4684a.png

Можно и на 20нс сдвинуть. Все запросто двигается. Что не так?

 

21 minutes ago, des00 said:

synthesis keep/noprune атрибутов или других, которые запрещают удалять модули с логическим bypass в этом софте нет? 

Спасибо за наводку, попробую поискать.

29 minutes ago, des00 said:

почему нельзя использовать DDR выход для передачи битового клока?

А это я просто не догоняю как. Никогда не пользовался DDR.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 надо сделать в отсчетах временного анализа, тогда он покажет как именно и через что он вел сигнал. Вы можете дать этот проект покрутить? Первый раз такое вижу, что-то тут не то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Возможно в констрейнтах я написал какую-то фигню, с ними начал разбираться буквально вчера. Но это в любом случае не отменяет факта, что просто оптимизация фиттера двигает фронты на наносекунды. И это явно не за счет пикосекундных модулей задержки.

Соб-но то же самое можно видеть на любом другом проекте, это я просто для примера привел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, dortonyan said:

Соб-но то же самое можно видеть на любом другом проекте, это я просто для примера привел.

спасибо посмотрю, лет 15 плотно работал с альтерой, от первого сыклона до пятой арии, у меня он никогда их не двигал в таком диапазоне. зайлинкс тоже не двигает, даже модули задержек не крутит, там все надо в ручную делать и констрейны там только что бы убедиться что все выполняется. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ура! Помогла директива /* synthesis syn_keep=1 */.

des00,  большое спасибо! Это гораздо проще констрейнтов (блин, еще выговори :)).

Так что данный вопрос для себя я закрыл. Тем более, что высокая точность фронтов мне не требуется, грубой подгонки вентилями хватит. Остальное доделает оптимизация трассировщика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

такс, покрутил выложенный проект, да, стоит запрет на использование регистров в портах ввода-вывода, но, никаких вставок не замечено, пины не прибиты, ква делает задержки размещая их куда хочет.  На скрине сверху то что при задержках 8/7, ниже 15/14. Но это тоже своего рода выравнивание. Прибью пины посмотрю что получится. 

результат.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, des00 said:

ква делает задержки размещая их куда хочет.

Понятно. Т.е. он оптимизирует не логикой, а чисто маппингом. Ну соб-но для меня как юзера пофиг, главное что оптимизирует.

 

11 minutes ago, des00 said:

Прибью пины посмотрю что получится. 

Должно получиться то же самое. На проектах с назначенными пинами тоже оптимизирует.

Фигово, что диамонд так не умеет. Походу он тупо оптимизирует на минимальные задержки маппинга.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну собственно чуда и не произшло (а то я уж было подумал что мне приснилось). Если прибить пины гвоздями, то результат как получится так получится) да, он пытается что-то сделать получше, но чисто за счет расстановки регистра источника, никаких добавить/поелозить по чипу круги и прочего он не умеет) 

2.thumb.png.7f5b9af932656959e3bd3d07f12d71ca.png

Сверху решение когда ставим 8/7, снизу 15/14. И да, все это за счет того что стоит запрет на размещение триггера в ячейке ввода-вывода. Если поставить регистр туда (Fast output = on), то все его шаги это те самые 0.5нс задержки в режиме вкл-выкл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24 minutes ago, des00 said:

Если прибить пины гвоздями, то результат как получится так получится) да, он пытается что-то сделать получше, но чисто за счет расстановки регистра источника, никаких добавить/поелозить по чипу круги и прочего он не умеет) 

Так перемещение триггеров это и есть "поелозить круги по чипу". )

В общем на проекте с назначенными пинами оно тоже работает, может похуже (я сильно не сравнивал), но фронты ровняет.

Я в одном проекте сразу пытался распиновку подбирать, чтобы получить сдвиги поровнее. Потом включил оптимизацию фиттера и понял, что занимался ерундой. )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 minutes ago, dortonyan said:

Так перемещение триггеров это и есть "поелозить круги по чипу". )

В общем на проекте с назначенными пинами оно тоже работает, может похуже (я сильно не сравнивал), но фронты ровняет.

ну да, просили 7-8нс на пин, он сделал 3.6нс и 5.3нс,

image.thumb.png.6e1c1c6f05c9ff5ad2b4239925e2fc97.png

когда попросили 15 и 7 он сделал 7.5 и 3.6. 

image.thumb.png.daee5f0df29a2dfa397f12cc8bb64fc0.png

Причем это только один coner case(slow) из двух-четырех который проверяется, в других другие задержки и другие разбросы) 

вот например что будет в fast при запрошеных 7-8 по oDL и 14-15 по oDR

image.thumb.png.351e38180483d63f56a45250b1e0f247.png

Одним словом К - качество) 

 

PS. Вы же сами писали " Типа если надо задержка, то просто добавляется пара инверторов и готово." не добавляется, не умеет он так)  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, des00 said:

PS. Вы же сами писали " Типа если надо задержка, то просто добавляется пара инверторов и готово." не добавляется, не умеет он так)  

Понятно, спасибо, буду знать.

Просто при включении оптимизации фиттера обычно ресурсов расходуется на несколько ячеек меньше. Я решил, что значит тасует логику.

Изменено пользователем dortonyan

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...