|
|
  |
Синхронный ввод данных в ПЛИС |
|
|
|
Jul 22 2009, 13:32
|
Частый гость
 
Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354

|
Здравствуйте. Может ли кто-нибудь подсказать какой-либо конкретный пример констрейнов для входных данных от синхронного источника для стратиксов. "Source-syncronous <...>" читал, использую данные оттуда, но в связи со слабым знанием технического английского при возникновении иных странностей в работе системы начинают грызть определенные сомнения относительно правильности понимания мной написанного. То есть, допустим имеется параллельный АЦП на 100 МГц с центрированным тактовым выходом. Сигналы заводятся на согласующий FIFO внутри ПЛИС.
Я правильно понимаю, что для описания констрейнов на вход необходимо (и достаточно) 1) Указать базовый виртуальный клок на 100 МГц; 2) Указать наследованный клок на 100 МГц с 180 градусным сдвигом и привязать его ко входу сигнала готовности АЦП; 3) Задать th, tsu данных АЦП относительно наследованного клока; 4) Запретить анализ путей из домена АЦП в глобальный домен и обратно; 5) Сделать сигнал готовности данных АЦП глобальным (по совету Design Assistant).
Какие th и tsu нужно указать для такого случая? Я указываю, со скидкой на tco АЦП, трассировку платы и создание примерно наносекундного запаса, th=3.5 и tsu=3.5.
--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
|
|
|
|
|
Jul 22 2009, 17:07
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 2-11-08
Из: Ростов-на-Дону
Пользователь №: 41 331

|
В общем все верно, только не совсем понял, зачем Вам пункт 2. Что за такой хитрый сигнал готовности АЦП, который еще и глобальным должен быть ? tsu и th считаете на основе даташита на ваш АЦП, по tco min, tco max. Вот в этой теме я уже писал, как это делается http://electronix.ru/forum/index.php?act=f...&pid=520219
|
|
|
|
|
Jul 24 2009, 07:31
|
Частый гость
 
Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354

|
Цитата(murmel1) зачем Вам пункт 2 По совету из руководства к обконстрейнивании синхронного входа. Виртуальный клок - это launch clock, реальный клок - latch clock. Цитата(murmel1) Что за такой хитрый сигнал готовности АЦП Выходной клок АЦП. Design assistant пишет, что клоки нужно делать глобальными. И даже если не сделать глобальным, то квартус им делает автопромоут. Или для входных клоков синхронного входа глобальность стоит запрещать? Цитата(murmel1) tsu и th считаете на основе даташита на ваш АЦП В описании АЦП есть среднее время задержки вх. клок-данные и вх. клок- вых. клок. Плюс есть skew в виде диапазона (min; typ; max) между выходными данными и выходным клоком. Как я понимаю, это то самое tco и есть? А если выходной клок АЦП не center-alligned, а edge-alligned? В том же руководстве указано, что в этом случае для высокоскоростного синхронного входа необходимо ставить PLL на входе и двигать сигнал в ПЛИС, чтобы подогнать фронт синхросигнала под центр данных. Как в этом случае считать и задавать констрейны данных? Относительно входного клока или относительно сгенеренного PLL? Или тогда проще перейти к описанию через делеи относительно исходного виртуального клока?
Сообщение отредактировал Ethereal - Jul 24 2009, 07:53
--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
|
|
|
|
|
Jul 24 2009, 13:32
|
Местный
  
Группа: Свой
Сообщений: 388
Регистрация: 27-02-06
Из: Москва
Пользователь №: 14 759

|
Цитата(Ethereal @ Jul 22 2009, 17:32)  Здравствуйте. Может ли кто-нибудь подсказать какой-либо конкретный пример констрейнов для входных данных от синхронного источника для стратиксов. "Source-syncronous <...>" читал, использую данные оттуда, но в связи со слабым знанием технического английского при возникновении иных странностей в работе системы начинают грызть определенные сомнения относительно правильности понимания мной написанного. То есть, допустим имеется параллельный АЦП на 100 МГц с центрированным тактовым выходом. Сигналы заводятся на согласующий FIFO внутри ПЛИС.
Я правильно понимаю, что для описания констрейнов на вход необходимо (и достаточно) 1) Указать базовый виртуальный клок на 100 МГц; 2) Указать наследованный клок на 100 МГц с 180 градусным сдвигом и привязать его ко входу сигнала готовности АЦП; 3) Задать th, tsu данных АЦП относительно наследованного клока; 4) Запретить анализ путей из домена АЦП в глобальный домен и обратно; 5) Сделать сигнал готовности данных АЦП глобальным (по совету Design Assistant).
Какие th и tsu нужно указать для такого случая? Я указываю, со скидкой на tco АЦП, трассировку платы и создание примерно наносекундного запаса, th=3.5 и tsu=3.5. Я бы завел клок через BUFG, а входы данных защелкивал бы используя триггеры в IO и с констрейнами не парился бы. При необходимости можно и клок подвигать ПЛЛом. Это не та частота для стратикса, чтобы констрейны писать. Это конечно только мое мнение
|
|
|
|
|
Jul 24 2009, 19:36
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 2-11-08
Из: Ростов-на-Дону
Пользователь №: 41 331

|
Просто не встречался еще с такими проектами, где и launch clock и latch clock (по вашей терминологии) заводятся на ПЛИС. В констрейнах нужно указывать только те клоки, которые попадут в ПЛИС. Считать tsu и th надо по tco вашего АЦП. Грубо говоря: если период тактовой равен T, tsu должно быть < T - tcomax th должно быть < tcomin Align не играет никакой роли, рассчитывается точно также, только исходные данные (tco) меняются. Применять PLL может и не потребоваться. Синтезатор легко крутит задержки на входных регистрах +- ~10 нс (в 90% случаев). Разберитесь со знаком th. В квартусах th иметт обратный знак от tsu. То есть отсчитываются они в таких направлениях: <---------------|----------------> tsu фронт тактовой th положительное значение tsu - до фронта, положительное значение th - после фронта Если хотите в понедельник могу привести рисунки из которых вам уже все станет ясно. Цитата(axalay @ Jul 24 2009, 17:32)  Я бы завел клок через BUFG, а входы данных защелкивал бы используя триггеры в IO и с констрейнами не парился бы. При необходимости можно и клок подвигать ПЛЛом. Это не та частота для стратикса, чтобы констрейны писать. Это конечно только мое мнение  Ошибаетесь. Величина частоты здесь не играет роли, можно и на низких частотах попасть впросак. Нужно посчитать и установить констрейны. При ручном переборе можно выбрать положение "на грани", когда схема "кажется" работает, но при нагреве/изменении напряжении питания начнет сбоить. Да и сборка "толстого" проекта (а для стратикса он таким и будет) слишком много времени занимает. Можно определить правильность захвата данных в регистре с помощью 2-лучевого осциллографа. Но эта методика на целую статью тянет.
Сообщение отредактировал murmel1 - Jul 24 2009, 19:43
|
|
|
|
|
Jul 25 2009, 08:52
|
Местный
  
Группа: Свой
Сообщений: 388
Регистрация: 27-02-06
Из: Москва
Пользователь №: 14 759

|
Цитата(murmel1 @ Jul 24 2009, 23:36)  Просто не встречался еще с такими проектами, где и launch clock и latch clock (по вашей терминологии) заводятся на ПЛИС. В констрейнах нужно указывать только те клоки, которые попадут в ПЛИС.
Считать tsu и th надо по tco вашего АЦП. Грубо говоря: если период тактовой равен T, tsu должно быть < T - tcomax th должно быть < tcomin
Align не играет никакой роли, рассчитывается точно также, только исходные данные (tco) меняются. Применять PLL может и не потребоваться. Синтезатор легко крутит задержки на входных регистрах +- ~10 нс (в 90% случаев).
Разберитесь со знаком th. В квартусах th иметт обратный знак от tsu. То есть отсчитываются они в таких направлениях: <---------------|----------------> tsu фронт тактовой th положительное значение tsu - до фронта, положительное значение th - после фронта
Если хотите в понедельник могу привести рисунки из которых вам уже все станет ясно.
Ошибаетесь. Величина частоты здесь не играет роли, можно и на низких частотах попасть впросак. Нужно посчитать и установить констрейны. При ручном переборе можно выбрать положение "на грани", когда схема "кажется" работает, но при нагреве/изменении напряжении питания начнет сбоить. Да и сборка "толстого" проекта (а для стратикса он таким и будет) слишком много времени занимает.
Можно определить правильность захвата данных в регистре с помощью 2-лучевого осциллографа. Но эта методика на целую статью тянет. Ясень пень надо клок при необходимости подвинуть чтобы не было на грани. по поводу того что частота не играет роли-это Вы зря. Вот если на 250 и по обоим фронтам-то констрейны нужны. А тут как Вы и сами сказали-2х лучевым осцилом убедиться что не на грани - и все будет пучком, если клок заведен на глобальную линию.
|
|
|
|
|
Jul 25 2009, 09:42
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 2-11-08
Из: Ростов-на-Дону
Пользователь №: 41 331

|
Цитата(axalay @ Jul 25 2009, 12:52)  Ясень пень надо клок при необходимости подвинуть чтобы не было на грани. по поводу того что частота не играет роли-это Вы зря. Вот если на 250 и по обоим фронтам-то констрейны нужны. А тут как Вы и сами сказали-2х лучевым осцилом убедиться что не на грани - и все будет пучком, если клок заведен на глобальную линию. Если Вам так проще - дело Ваше. Все далее написанное - это не спор с Вами, а совет от чистого сердца. Однако посчитать и задать констрейны будет и методолигически правильнее (как сказал-то а?) и проще сделать. 1 рассчет = 1 минута, 10 компиляций + 10 проверок = ?. Однажды проведя 10 компиляций по 20 минут (согласитесь, это еще не так долго, как могло бы быть), я бы вам не советовал действовать так же. "На грани" я имел в виду в более широком смысле. Например у всех микросхем есть part-to-part skew. А еще времена ползут в зависимости от температуры. +25 и -40 градусов - будет существенная разница. Провести испытания на серии с разными температурами ? Тут стоить довериться авторам микросхем. Они уже померяли характеристики серий своих изделий в разных режимах. И самое главное !!! Если констрейны не заданы !!!, то квартус будет считать, что времена не важны !!! И есть вероятность, что при перекомпиляции времена ПОМЕНЯЮТСЯ. Несколько лет назад сам действовал, как предлагаете Вы, нашел оптимальную фазу PLL, проверил осциллографом и функционально. Более того - залочил всю логику, отвечающую за ввод. Несколько раз перекомпилировал - все было нормально, но после энного раза - перестало работать. Поскольку я не каждый раз проверял именно этот узел осциллографом, начал грешить на другую часть проекта, с которой в тот момент работал. Не сразу понял, где ошибка. И что же вы думаете ? Оказывается, квартус переставил мою PLL на другое место. И времена tsu, th сместились на 2 нс.
Отсюда либо: 1) Иметь тесты, проверяющие работоспособность всех узлов ввода-вывода и запускать их в каждой новой версии. 2) Посомтреть на наличие красных строк в отчете временного анализатора. Что проще - подумайте. Я уже подумал. Проверка осциллографом - последняя стадия... Если проект грамотно сдеалан, проверка только подтверждает правильность работы.
Сообщение отредактировал murmel1 - Jul 25 2009, 09:44
|
|
|
|
|
Jul 27 2009, 07:21
|
Местный
  
Группа: Свой
Сообщений: 388
Регистрация: 27-02-06
Из: Москва
Пользователь №: 14 759

|
Цитата(murmel1 @ Jul 25 2009, 13:42)  Если Вам так проще - дело Ваше. Все далее написанное - это не спор с Вами, а совет от чистого сердца.
Однако посчитать и задать констрейны будет и методолигически правильнее (как сказал-то а?) и проще сделать. 1 рассчет = 1 минута, 10 компиляций + 10 проверок = ?.
Однажды проведя 10 компиляций по 20 минут (согласитесь, это еще не так долго, как могло бы быть), я бы вам не советовал действовать так же.
"На грани" я имел в виду в более широком смысле. Например у всех микросхем есть part-to-part skew. А еще времена ползут в зависимости от температуры. +25 и -40 градусов - будет существенная разница. Провести испытания на серии с разными температурами ? Тут стоить довериться авторам микросхем. Они уже померяли характеристики серий своих изделий в разных режимах.
И самое главное !!! Если констрейны не заданы !!!, то квартус будет считать, что времена не важны !!! И есть вероятность, что при перекомпиляции времена ПОМЕНЯЮТСЯ. Несколько лет назад сам действовал, как предлагаете Вы, нашел оптимальную фазу PLL, проверил осциллографом и функционально. Более того - залочил всю логику, отвечающую за ввод. Несколько раз перекомпилировал - все было нормально, но после энного раза - перестало работать. Поскольку я не каждый раз проверял именно этот узел осциллографом, начал грешить на другую часть проекта, с которой в тот момент работал. Не сразу понял, где ошибка. И что же вы думаете ? Оказывается, квартус переставил мою PLL на другое место. И времена tsu, th сместились на 2 нс.
Отсюда либо: 1) Иметь тесты, проверяющие работоспособность всех узлов ввода-вывода и запускать их в каждой новой версии. 2) Посомтреть на наличие красных строк в отчете временного анализатора. Что проще - подумайте. Я уже подумал.
Проверка осциллографом - последняя стадия... Если проект грамотно сдеалан, проверка только подтверждает правильность работы. Сдвиговый регистр работает по следующим соображениям всегда без констрейнов (ну если конечно клок на глобальной линии): время распространения данных всегда больше или равно времени распространиния клока (что куда и откуда писать не буду-и так ясно). Это и без констрейнов. Ну а по поводу того что выставив фазу клока однажды нормально она из-за температуры или чего то другого уйдет в красную зону (период тактового сигнала 10 нан)-значит ничего не выставлено. Ну а расчитывать то что производитель микрухи поменяет что то там в характеристиках... Да и обычно защелкивается все прекрасно и без сдвига фазы. У каждого свои соображения. Удачи!
|
|
|
|
|
Jul 28 2009, 22:42
|
Частый гость
 
Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354

|
Цитата("murmel1") Просто не встречался еще с такими проектами, где и launch clock и latch clock (по вашей терминологии) заводятся на ПЛИС. В констрейнах нужно указывать только те клоки, которые попадут в ПЛИС. Они не заводятся. Просто дана методика описания latch клока и данных относительно виртуального клока запуска. Я так понимаю, что для описания распространения в виде задержек сигналов относительно исходного клока. Терминология не моя, списана из an433 и какого-то там qts  Цитата("murmel1") положительное значение tsu - до фронта, положительное значение th - после фронта А если после компиляции получаются отрицательные величины? Цитата Сдвиговый регистр работает по следующим соображениям всегда без констрейнов АЦП с параллельной шиной.
--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
|
|
|
|
|
Jul 29 2009, 17:08
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 2-11-08
Из: Ростов-на-Дону
Пользователь №: 41 331

|
Цитата(Ethereal @ Jul 29 2009, 02:42)  А если после компиляции получаются отрицательные величины? Соответственно, отсчитывайте по осям, что я нарисовал, в обратную сторону. Для tsu это означает, что данные должны быть задержаны после фронта, а для th - что их можно снимать еще до фронта. Это нормально. Цитата(Ethereal @ Jul 29 2009, 02:42)  АЦП с параллельной шиной. Да вы его не слушайте. То что он написал - про потроха ПЛИС, а у вас - связь потроха-внешний мир. Эти случаи существенно различаются.
|
|
|
|
|
Jul 30 2009, 14:33
|
Частый гость
 
Группа: Свой
Сообщений: 114
Регистрация: 7-05-08
Из: РФ, Москва
Пользователь №: 37 354

|
Спасибо. А еще два вопроса можно?
1) Имеет ли смысл использовать PLL для входных частот от 200 МГц в режиме компенсации синхронного источника? Или это лишняя блажь? 2) Если я использую PLL со сдвигом фазы клока источника для защелкивание входного сигнала, то надо ли смещать th и tsu?
--------------------
SystemVerilog - язык, заточенный Альтерой под свои кристаллы теми же приемами использования примитивов, что и AHDL. ©
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|