|
|
  |
Тайминговые констрейны - как правильно их назначать |
|
|
|
Nov 6 2010, 18:47
|
Злополезный
   
Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188

|
Цитата(AlphaMil @ Nov 6 2010, 16:22)  Уважаемые Гуру, подскажите где посмотреть/почитать про определение и назначение тайминговых констрейнов. САПР Xilinx ISE 12.2, хотя это к делу отношения наверное не имеет. Для ознакомления с работой самих временных constraint'ов, Вам необходимо прочитать %xilinx%/doc/usenglish/books/docs/cgd/cgd.pdf Цитата(AlphaMil @ Nov 6 2010, 16:22)  Для конкретности - как правильно ограничивать MAXDELAY и MAXSKEW для шин. Вот тут требуется уточнение: а для чего Вам это надо: 1. Если для задания временных соотношений на выходных I/O pins, то для этого необходимо использовать constraint offset out. 2. Если для задания временных соотношений на каких-либо внутренних линиях, то тут более должн подойти period на тактовый сигнал, стробирующий эти линии. 3. Если для задания временных соотношений на каких-либо внутренних линиях при переходах с одного clock domain в другой, то From to. Также в этом случае может понадобится constaint async_reg, облегчающий моделирование таких мерзких мест.
|
|
|
|
|
Nov 6 2010, 23:20
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
Констрейны наложенные на входной клок распространяются не только через BUFG, но и через DCM и PLL с учетом фаз, частот, скважности, джиттера и перекосов клоковых деревьев. Если все клоки происходят от одного опорного тактового сигнала, то его описания будет достаточно не только для одного домена, но и для анализа переходов между клоками. Если зависимые клоки имеют неудобное сочетание частот и/или фаз, анализатор обнаружит ошибку, которая может возникнуть через некоторое количество тактов. Независимые клоки нужно описывать отдельно, об этом написан раздел "Specifying Derived Clocks" в упомянутом Constraints Guide.
|
|
|
|
|
Nov 7 2010, 08:24
|
Частый гость
 
Группа: Участник
Сообщений: 135
Регистрация: 1-01-10
Из: Минск, Беларусь
Пользователь №: 54 588

|
Ув. Shtirlits, спасибо. Но вот вопрос: работаю с обработкой видео в реальном маштабе времени. Оцифровываю и вывожу видео м/с-ми Analog Devices. От компиляции к компиляции бывает такое: в полутоновых переходах иногда возникают артефакты (неправильно светящиеся точки). Подозрение на то, что отдельный бит или два в шине, по которой идет видео немножко запаздывают или опережают остальные, соответственно во время фронта число, записанное в регистр не соответствует реальному. Вобщем откомпилировал, прошил - нормально, поменял что-то в другой части проекта, скомпилировал, прошил - артефакты... Замечал наверное такой же эффект при подсчете пикселей и строк - есть режим картинка в картинке, так вот иногда все ок, а иногда координаты вроде неправильные и уменьшенное изображение сдвинуто или делится на несколько частей. Ведь если САПР просчитывает все относительно клока, то изменения в одной части проекта, не связанной функционально с другой частью, не должны влиять на эту дрегую часть...
|
|
|
|
|
Nov 7 2010, 14:14
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 4-03-08
Из: Москва
Пользователь №: 35 621

|
Цитата(AlphaMil @ Nov 7 2010, 11:24)  Подозрение на то, что отдельный бит или два в шине, по которой идет видео немножко запаздывают или опережают остальные, соответственно во время фронта число, записанное в регистр не соответствует реальному. Вобщем откомпилировал, прошил - нормально, поменял что-то в другой части проекта, скомпилировал, прошил - артефакты... Замечал наверное такой же эффект при подсчете пикселей и строк - есть режим картинка в картинке, так вот иногда все ок, а иногда координаты вроде неправильные и уменьшенное изображение сдвинуто или делится на несколько частей. Пересечение многоразрядным сигналом границы некратных тактовых - особый случай. Рекомендую ставшую почти классической статью http://www.sunburst-design.com/papers/Cumm...SJ_AsyncClk.pdf Без специальных мер - вполне может быть то, что Вы подозреваете. Из решений - код Грея для произвольных данных не подходит, так что для описанного Вами случая, ИМХО, нужны либо схема "рукопожатия", либо асинхронное FIFO.
--------------------
...а Сила, Брат - она - в несиловых решениях.
|
|
|
|
|
Nov 7 2010, 17:01
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
Поделюсь одной мыслью, которую нахожу жутко умной  Пересечение границы независимых клоковых доменов всегда рискованное мероприятние. Вероятность неприятных последствий можно лишь снизить до допустимого уровня, но нельзя устранить совсем. Защита от метастабильных состояний всегда требует времени на прохождение последовательных регистров - часто вижу синхронизаторы на 2-3 такта, но для надежности можно и больше! А что если по опасному пути передавать не всю широкую шину с полезными данными, а только информацию о соотношении клоков? Именно так делают в асинхронных FIFO. Полезные данные безопасно читаются из памяти по адресам, которые достаточно давно не менялись и не меняются, а информация о "клоке", то есть, о фактах записи и чтения, передается в коде Грея и защитные регистры - это указатель с противоположного конца. Путь простого человека, не обремененного заботой о низкой задержке данных- применить готовое dual clock FIFO. Сложный путь - развить идею FIFO на сам клок. При сохранении вероятности сбоя такой вариант даст выигрыш тех самых 2-3 тактов и позволит снижать вероятность сбоя не повышая задержку данных. Это возможно, если поведение клоков можно предсказать на время прохождения информации через синхронизирующие регистры. Еще одно условие - плохие данные можно догнать и придушить, если клок "дрыгнется" когда нельзя. Например, клоки периодические и данные сначала как-то обрабатываются пока идет синхронизация информации о фазе в момент захвата, а на "исполнительные механизмы" поступают когда уже известно, что нарушения времянок не было. Как это выглядит? Это может быть блок, который выдает разрешение для захвата сигналов с шины на данном такте или даже два разрешения - DDR. Наличие активного уровня на выходе означает, что на данном такте чтение безопасно. В качестве исходных данных этот блок получает некий сигнал с той стороны клокового домена, например, инвертируемый противоположным клоком регистр. Наблюдаемый с этой стороны стробоскопический эффект позволяет синхронизировать и подстраивать счетчики для предсказания фазы, учитывая задержку вызванную синхронизирующей (глосующей) схемой. Можно и в другую сторону - записывать данные только когда это безопасно с точки зрения читающей стороны.
|
|
|
|
|
Nov 10 2010, 17:51
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 4-03-08
Из: Москва
Пользователь №: 35 621

|
Цитата(Shtirlits @ Nov 7 2010, 20:01)  Сложный путь - развить идею FIFO на сам клок. А можете подробнее пояснить свою идею? Пока по Вашему описанию в голову приходят только схемы анализа фаз, реализованные через синхронизаторы, работающие на удвоенных / учетверённых частотах.
--------------------
...а Сила, Брат - она - в несиловых решениях.
|
|
|
|
|
Nov 11 2010, 09:33
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Использовал подобную технику для elastic buffer'а. Входная и выходная частота были одинаковые, еще был отдельный строб, обозначающий окно данных. Схема тактировалась входной частотой, умноженной на 4 и выходной. Пока сигнал окна данных не был установлен, работал фазовый детектор и определял сдвиг фаз между фронтами клоков (с точностью 90гр). Собственно данные, и исходный клок, подавались на сдвиговый регистр, отвод для снятия данных (длинна регистра) определялась спец. счетчиком, который инициализировался значением 1/2 длинны регистра +/- начальная фаза. С появлением сигнала 'окна данных' фазовый детектор переключался в режим слежения за фазой (по выходному клоку и задержанному в сдвиговом регистре), при набегании разницы фаз корректировалась точка отвода из регистра (значение счетчика). В модели работает, в железе еще не пробовал
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|