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

выполнение таймингов, идеология расчетов ,xilinx, vivado

здравствуйте,

использую vivado 2015.4, artix xc7a200tfbg676-2. Нужно получить выходные сигалы под частоту 400МГц , данные DDR c setup>0.1n и hold >0.3n. Столкнулся с невыполнением таймингов.

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

Пусть будет hold.

Для данных считается максимально быстрое прохождение сигналов, для частоты максимально медленное. Но rise один и тот же.

Для данных - посчитали Source Clock Path - состоит из 5 составляющих. сюда прибавили Data Path - еще 3 составляющие.

Для частоты - считают Destination Clock Patch - пусть состоит из 7 составляющих.

При этом Source Clock Path и Destination Clock Patch первые 3 составляющие пути одни и те же. Но считаются для Source Clock Path по максимально быстрому , а для Destination Clock Patch по максимально медленному. Собственно именно здесь и получается большая часть ошибки тайминга. Но ведь это один и тот же фронт в одно и то же время. И не может быть разного прохождения именно этих 3-х участков.

 

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


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

При этом Source Clock Path и Destination Clock Patch первые 3 составляющие пути одни и те же. Но считаются для Source Clock Path по максимально быстрому , а для Destination Clock Patch по максимально медленному. Собственно именно здесь и получается большая часть ошибки тайминга. Но ведь это один и тот же фронт в одно и то же время. И не может быть разного прохождения именно этих 3-х участков.

Все правильно он считает. Почитайте документацию от производителя по ключевым словам timing corners. Если коротко и своими словами, то для анализа setup|hold у vivado есть две временные модели - fast|slow, и в зависимости от технологического разброса/температуры и напряжения пути будут иметь разную задержку - для сетапа и холда рассчитываются они по разному. Таким образом производитель гарантирует работоспособность всех чипов в заданном температурном диапазоне и просадках по питанию. Т.е. Ваше утверждение

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

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


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

... в зависимости от технологического разброса/температуры и напряжения пути будут иметь разную задержку - для сетапа и холда рассчитываются они по разному. Таким образом производитель гарантирует работоспособность всех чипов в заданном температурном диапазоне и просадках по питанию. ... т.к. допустим при минус 40 градусах время распространения сигнала будет существенно отличаться от него же при плюс 100.

я с этим и не спорю.

но есть вопросы.

с setup вопросов нет. там действительно 2 разных фронта ( и об этом говорит добавка 1.250нс при расчете времени пути). и это определяет то, что мы считаем макс. время для данных и мин. время для частоты на протяжении всего пути.

с hold же все не так. там один и тот же фронт ( то , что это один фронт - отсутствует добавка 1.250нс в расчетах и показано на нижнем рисунке) формируется на 1-3 частях пути, далее он разделяется и идет на данные по одному пути , а на вых.частоту по другому. так вот, мне кажется , что часть пути 1-3 не внесет изменений в подсчет времени hold при "температурном диапазоне и просадках по питанию" именно потому, что это физически один и тот же фронт. т.е. если что-то не так , то это "не так" одинаково скажется на данных и частоте. А дальше остальной путь, конечно, нужно считать по разному.

 

 

image.jpg

 

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


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

У Altera в TimeQuest есть вот такой параметр

 

Посмотрите что-то похожее у Xilinx.

Может быть, что этот параметр у Вас выключен.

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


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

т.е. если что-то не так , то это "не так" одинаково скажется на данных и частоте. А дальше остальной путь, конечно, нужно считать по разному.

Честно говоря, картинки для меня нечитабельны. Вы бы привели полностью пути по расчету сетапа и холда для конкретного пути и сказали, какое место с Вашей точки зрения не корректно рассчитывается. А так на самом деле уточню пару моментов:

- hold - это время в течение которого данные необходимо удерживать после фронта тактовой частоты,

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

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

PS посмотрите документ в поиске clock setup and hold slack analysis explained, может найдете для себя что-то новое.

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


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

У Altera в TimeQuest есть вот такой параметр

 

Посмотрите что-то похожее у Xilinx.

Может быть, что этот параметр у Вас выключен.

да, такой пораметр clock pessimism считается. и он как раз равен той величине , которая набегает при достижении точки раздвоения . но вот он почему-то усугубляет ситуацию. т.е. эта величина добавляется к Destination Clock Patch и увеличивает Required Time. и соответственно уменьшает hold.

 

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

общая часть - это одна и та же клоковая дорожка

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

 

image.jpg

 

image.jpg

 

image.jpg

 

сейчас, как я выяснил ранее, почти все считается правильно. но вот параметр clock pessimism усугубляет ситуацию, а должен улучшать. т.е. приближать две рассчетные величины друг к другу

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


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

тут мне непонятно следующее. параметр clock pessimism на самом деле уравнивает время в точке раздвоения. мне непонятны знаки времени до этой точки. при этом если Destination Clock Patch считается по макс. времени , а Source Clock Path по миним. времени , то в этой точке цифры должны быть наоборот т.е. Destination Clock Patch больше и тогда clock pessimism должен бы вычитаться. но счет идет не так. но в любом случае с учетом clock pessimism время уравнено.

и это подтверждается тем, что иногда все считается правильно по времени. но все равно со знакамиотрицательными Destination Clock Patch и Source Clock Path до точки раздвоения мне непонятно.

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

эти разные подсчеты (подходы, результаты) мне непонятны.

 

 

image.jpg

 

image.jpg

 

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


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

тут мне непонятно следующее. параметр clock pessimism на самом деле уравнивает время в точке раздвоения.

CPPR - Common Path Pessimism Removal занимается тем, что выравнивает задержки клока вплоть до последней общей точки. Начиная с этой вилки клоки до StartPoint и EndPoint идут по разному.

 

мне непонятны знаки времени до этой точки.

Отрицательное время - это значит, что клок пришел раньше; к примеру, фаза могла быть сдвинута PLL.

 

при этом если Destination Clock Patch считается по макс. времени , а Source Clock Path по миним. времени

Так и считается нарушение Hold: наихудший случай, это когда источник сработал очень рано, а клок приемника пришел очень поздно. Почитайте эту статью на хабре про сетап и холд https://habrahabr.ru/post/302806/

 

clock pessimism должен бы вычитаться. но счет идет не так. но в любом случае с учетом clock pessimism время уравнено.

clock pessimism в данном случае определяется исключительно результатами работы фиттера; поскольку дерево клока в ПЛИС не одинаково, то фиттер может расставить триггер-источник и триггер-приемник как с положительным clock pessimism, так и с отрицательным, причем значение clock pessimism тул очень точно рассчитывает, здесь нет каких прикидок и погрешностей - как тул написал, такой точно clock pessimism и будет в конкретно данной разводке. В Вашем случае clock pessimism получился отрицательным, почему - не знаю, надо у фиттера спросить.

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


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

В Вашем случае clock pessimism получился отрицательным, почему - не знаю, надо у фиттера спросить.

Спасибо,вроде бы все понятно, кроме того, что оставил. Но ведь нужно попробовать справиться с отрицательным hold. И я решил подвигать частоту, идущую на данные. Частоту Destination Clock я уже двигал- ничего не получилось. Проверил 3 проекта - 1. С одной и той же частотой т.е. исходный 2. проходящей через bufg b 3. проходящей через 2 bufg.

Получилось следующее. Начальный одинаковый путь частоты считается по разному. для 1-го одно, для 2-го другое. При этом один путь не удалось получить какие бы изменения я не делал. Значит это не совсем случайно. 1-й и 2-й вроде бы как должно приблизить значения. Для setup есть запас и вроде бы он немного съелся. а для hold минус тоже должен уменьшиться, но он вырос. И только в 3-м проекте уменьшился. Но там уже setup не выполняется. Вот таблица.

 

 

image.jpg

 

еще меня смущает разное время у Destination Clock в компонентах ODDR (0.418 0.204 ), OBUFDS (1.484 0.842). Да и у других это просматривается. OBUFDS ( 1.366 0.726).

 

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


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

Для setup есть запас и вроде бы он немного съелся. а для hold минус тоже должен уменьшиться, но он вырос. И только в 3-м проекте уменьшился. Но там уже setup не выполняется. Вот таблица.

setup и hold взаимосвязаны, если у Вас будет увеличиваться запас по setup, то будет уменьшаться запас по hold - это нормально. Теперь вопрос - что на максимальное быстродействие для DDR написано в даташите для конкретного чипа?

Думаю, что Вы пытаетесь работать на граничных условиях. Период 400МГц -> 2.5ns, в режиме DDR размер рабочего окна в идеальном случае соответствует 1.25ns из которых Вашими ограничениями съедается еще 0,4ns.

Кстати, распиновка у Вас фиксированная? Смотрю путь тактовой частоты - начало в координате x0y1 (это для клок контрола), а конец x0_y174, для данных x0_y192. Попробуйте вообще отвязать от пинов или подвинуть их ближе друг к другу и к переходу на клоковое дерево. Можно еще попробовать частоту пускать на прямую - без перехода на клоковый буфер.

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


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

setup и hold взаимосвязаны, если у Вас будет увеличиваться запас по setup, то будет уменьшаться запас по hold - это нормально. Теперь вопрос - что на максимальное быстродействие для DDR написано в даташите для конкретного чипа?

но когда я ставлю 1 bufg ( 1-й ---> 2-й) , то setup - запас уменьшается 0.867 ->0.656 , а hold запас тоже уменьшается -0.455 -> -0.709

 

 

чип xc7a200tfbg676-2, пока ставлю Artix-7 AC701 Evaluation Platform (xc7a200tfbg676-2)

DS181 ,стр.14

 

image.jpg

 

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


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

..И я решил подвигать частоту, идущую на данные. ...

Частоту двигать не стоит, поскольку дерево в ПЛИС фиксированное, и это может затруднить работу фиттера. Лучше буферы в данные добавлять.

Фокус вот в чем. Предположим, есть эндпоинт - приемный триггер. До его входа есть критический путь setup (самый медленный), и есть критический путь hold (самый быстрый). Эти два пути не совпадают, разумеется. Далее, если буфер поставить просто на входе триггера, то выправите Setup но угробите Hold.

Поэтому надо быть хитрее: найти общий элемент в обоих путях (критические сетап и холд), у которого через один вход проходит критический путь setup, а через другой - критический путь Hold. Понимаете фокус? Тогда буфер можно поставить на холдовый вход этого элемента: так и сетап не загубите, и холд вытащите. Вот только это техника из ASIC-ко строения, я не уверен что можно в ПЛИС таким тюнингом заниматься. Если получится, напишите, любопытно.

p.s. И еще раз отошлю к своей статье на хабре https://habrahabr.ru/post/302806/ Там очень подробно опино о природе нарушений сетап и холд, и о том, как с нарушениями бороться.

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


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

Кстати, распиновка у Вас фиксированная? Смотрю путь тактовой частоты - начало в координате x0y1 (это для клок контрола), а конец x0_y174, для данных x0_y192. Попробуйте вообще отвязать от пинов или подвинуть их ближе друг к другу и к переходу на клоковое дерево.

Распиновка фиксированная. В проекте частота приходит в одном банке и есть 2 выходных канала А и В по (16+1 + clk) LVDS пары. И они выходят в 2-х других банках. Изначально констрейны прописаны были для всего. Это ,наверное, то же , что и подвинуть ближе друг к другу. И везде были одинаковые проблемы такие же. Но даже для каналов А и В цифры в одной разводке отличалиь не более чем на 0.1нс. Это сейчас я рассматриваю 2 сигнала.

Можно еще попробовать частоту пускать на прямую - без перехода на клоковый буфер.

это я тоже пробовал. Происходит просто смещение величин на 0.3-0.5нс. также как и тогда когда я двигал выходную частоту. следующая таблица это показывает.

фаза -это смещение с шагом ~0.208нс . и 1-я без ODDR на выходе и 2-я c ODDR на выходе.

 

image.jpg

 

 

Лучше буферы в данные добавлять.

я не понял идею. хотя прочитал статью и там все вроде бы понял.

Но в любом случае буферы на данные на выходе поставить нельзя.

Мало того, что это заимствованный IP xilinx - selectio_wizard и туда трудно чего-то вставить. Вообще-то можно сделать самому подобное. Но там sourse clock записывает данные в OSERDESE2 примитив и далее выход приходит на obufds(в картинке ошибся) и далее выходной порт.

картинка

 

image.jpg

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

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


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

но когда я ставлю 1 bufg ( 1-й ---> 2-й) , то setup - запас уменьшается 0.867 ->0.656 , а hold запас тоже уменьшается -0.455 -> -0.709

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

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


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

В этих выходных буферах есть программируемая задержка (у артикса в некотрых банках есть такая возможность)?

нет , там только HR банки. В них только входная задержка.

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


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

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

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

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

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

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

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

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

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

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