реклама на сайте
подробности

 
 
> выполнение таймингов, идеология расчетов ,xilinx, vivado
serg_k1
сообщение Nov 30 2016, 08:47
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368



здравствуйте,
использую 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-х участков.
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 20)
serg_k1
сообщение Dec 5 2016, 07:27
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368



Цитата(bogaev_roman @ Nov 30 2016, 13:57) *
у vivado есть две временные модели - fast|slow, и в зависимости от технологического разброса/температуры и напряжения пути будут иметь разную задержку - для сетапа и холда рассчитываются они по разному. Таким образом производитель гарантирует работоспособность всех чипов в заданном температурном диапазоне и просадках по питанию.

я так понял, что не получится выполнить тайминги с моими условиями. я на свой вопрос получил на форуме xilinx такой ответ

Цитата
From your constraints you are asking the tools to provide an edge aligned DDR interface with no more than -100ps to +300ps of skew. The tools are telling you (clearly and categorically) that it can't be done.

Without the ODDR, the tools are telling you that the total violation (setup slack + hold slack) is consistently around 980ps, meaning that it cannot give you a skew of less than 980ps plus the 400 you are asking for (around 1300ps of skew).

With the ODDR, the total violation is decreased - its around 450ps plus the 400 you are asking for, so 850ps.
So, no matter what, this will fail. From these numbers alone it is clear that there is no phase that can meet both the setup max and min skew. Furthermore, you are adjusting the skew in increments of 30 degrees - so 1/12 of your clock period. At 400MHz, this is therefore increments of 208ps - again, this is confirmed by your results (the difference in timing between, say, 90deg and 120dec is moving 208ps of slack from setup to hold). You also get into some launch/capture edge changes as you move from 0degrees to 30degrees (which can be fixed, but is not the root of your problem).

If you want to minimize skew, forget about trying to use different clocks on different phases of the MMCM - clock both the forwarded clock and forwarded data on the same clock using the same BUFG. This will minimize the skew (but likely still won't meet your requirements). Using different outputs of the MMCM add skew (about 200ps total) and using different BUFGs adds a fair bit of additional skew (as compared to using a single BUFG).

You might get (slightly) better results using a BUFH instead of a BUFG if your MMCM and all your outputs are in the same bank. There might even be a way to use a BUFIO, which could be slightly better yet. But, again, its not likely that any of these are going to meet your tight requirement.

That being said, Vivado is fairly pessimistic in these situations. The way it handles "on chip variation" is chip wide; the difference in timing between the longest and shortest paths it uses for timing (which is really what is creating all this skew) is the same ratio, regardless of whether the two structures are right beside each other or on opposite corners of the chip. So, if your forwarded clock and data are all in the same bank (ideally with the clock in the middle of the cluster of data), then the skew is going to be better (maybe even a fair bit better) than what the tools predict. Unfortunately, no one can really tell you "how much better".

So, if you really need the tightest possible skew, then just put everything in the same bank and use the same clock to clock both the forwarded clock (using the ODDR) and the output data (using an ODDR or OSERDES) - nothing you can do in the FPGA is better than that. If that isn't good enough, then (basically) you are out of luck...

Изменить временные требования я не могу. поэтому приходится что-то делать с граничными значениями. xilinx проводит проверку в slow process corner (высокая температура, низкое напряжение) и fast process corner (низкая температуры, высокое напряжение). Насколько схема будет работоспособна без этих граничных условий. как это можно проверить? Если я задаю
Код
config_timing_corners -corner fast -delay_type none

то у меня остаются ошибки в slow. и после задания
Код
config_timing_corners -corner slow -delay_type none

ошибки исчезают. но проводится ли какая-то проверка в этом случае?
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Dec 5 2016, 09:23
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(serg_k1 @ Dec 5 2016, 10:27) *
ошибки исчезают. но проводится ли какая-то проверка в этом случае?

Всего две модели, Вы отключаете обе, ничего анализироваться не будет.
Вообще я тестовый проектик делал для этого семейства на частоте 450МГц, с 4 линиями данных, правда с минимальными max|min delay. Чтобы тайминг выполнился пришлось прибивать выходные пины данных и частоту рядом друг с другом (частота была посередине между данными). На входе были такие же требования, там для выполнения таймингов пришлось частоту пускать напрямую, в обход клоковых буферов.
В Вашем случае для стабильной работы скорее всего придется снижать тактовую частоту.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Dec 5 2016, 13:18
Сообщение #18


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Раз уж подняли тему констейнов.... Не могли бы вы подсказать можно ли констнейны задавать кусками ?
Например у меня есть 3 модуля, которые я объединяю в модуле верхнего уровня. Могу ли я написать констрейны для каждого из модулей ? Или я должен писать только для верхнего уровня ?
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Dec 5 2016, 14:15
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(Flip-fl0p @ Dec 5 2016, 16:18) *
Раз уж подняли тему констейнов.... Не могли бы вы подсказать можно ли констнейны задавать кусками ?
Например у меня есть 3 модуля, которые я объединяю в модуле верхнего уровня. Могу ли я написать констрейны для каждого из модулей ? Или я должен писать только для верхнего уровня ?

Вивадо и квартус поддерживают в ограничениях стандарт sdс. Ни с какими ограничениями в задании constraint в подмодулях я не сталкивался. Нужно только следить за иерархической структурой - если название поменяется или сама структура проекта, то их придется или переназначать или переписывать пути.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Dec 5 2016, 17:51
Сообщение #20


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(bogaev_roman @ Dec 5 2016, 17:15) *
Вивадо и квартус поддерживают в ограничениях стандарт sdс. Ни с какими ограничениями в задании constraint в подмодулях я не сталкивался. Нужно только следить за иерархической структурой - если название поменяется или сама структура проекта, то их придется или переназначать или переписывать пути.

Спасибо за ответ.
Возник очень глупый вопрос, но что-то я не смог разобраться... Допустим у меня есть один из подмодулей для которого я пишу констрейны. А как мне входные и выходные порты этих модулей обконстрейнить ?
Если порты "внешние" т.е идут на память, матрицу, ацп и пр. То надо описать задержки на этих портах как-то так:
Код
set_output_delay -clock [get_clocks {ХХХ}] -max 5.0 [get_ports {YYY[*]}]
set_output_delay -clock [get_clocks {ХХХ}] -min -5.0 [get_ports {YYY[*]}]

А что делать с "внутренними портами" которые объединяют модули ?
Читаю я сейчас TimeQuest для чайников, общую суть уловил, но понимания пока толком нет.

Сообщение отредактировал Flip-fl0p - Dec 5 2016, 17:51
Go to the top of the page
 
+Quote Post
Shivers
сообщение Dec 5 2016, 21:02
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Цитата(Flip-fl0p @ Dec 5 2016, 20:51) *
...А как мне входные и выходные порты этих модулей обконстрейнить ? ...

Прочитайте сначала этот пост на хабре https://habrahabr.ru/post/273849/ В расчеты можно не вникать (хотя желательно), а вот как строится граф - надо разобраться обязательно, это основа STA.
А потом очень советую изучить эту книгу http://www.springer.com/us/book/9780387938196 с описанием всемх констрейнтов, какие бывают. Это лучшая книга, какую видел по STA, и отлично качается с либгена в формате PDF.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 21:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01427 секунд с 7
ELECTRONIX ©2004-2016