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

 
 
> Как использовать временные ограничения в FPGA?
Vadim_nsk
сообщение Apr 25 2017, 05:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-09-05
Из: г. Новосибирск
Пользователь №: 8 335



Работаю с FPGA Xilinx, Spartan-3e[6]
У кого-нибудь есть пример использования временных ограничений (констрейнов)? Документация то понятно. Но как на реальном примере этим всем пользоваться? Интересует что-нибудь очень простенькое, вроде захвата данных с АЦП или шины SRAM с процессором. Я всегда считал, что стробирования входных и выходных сигналов триггерами, расположенными в IOB в моменты, где данные уже устаканились (смотрел осциллографом) достаточное условие для правильного захвата данных. А также, использование клоком, порожденных от одного входного посредством DCM. Но вот столкнулся с тем, что изменение в проекте стали затрагивать правильность захвата данных с АЦП. Люди советуют использовать констрейны. Посмотрел документацию и понял, что этого не достаточно. Не хватает понимания как всем этим пользоваться. Нужны простые примеры от которых можно было бы оттолкнуться в более сложные ситуации.

1. Например, имеем АЦП с параллельной шиной и выходной клок: ADC_clk, ADC_data(11 downto 0). Я всегда смотрю на задержку данных относительно выхода клока и стробирую по фронту в безопасной зоне, имея ввиду, что задержка во входном буфере будет порядка 4 нс. И слежу, чтобы все сигналы проходили через триггеры в IOB.

2. Самый частый пример это шина с каким-нибудь контроллером. Там есть шина адреса, данных, управления. Тут тоже, просто стробирую входные сигналы сначала повышенной частотой, затем рабочей. Оба клока получаются посредством DCM, следовательно синфазны. Таким образом, снижаю задержку на перестробирование и ухожу от метастабильности. Но и тут никогда не использую констрейны, т.к. все сигналы проходят через триггеры в IOB. Говорят, этого недостаточно. А как делать правильно?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Apr 25 2017, 07:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Когда то беседовал со службой поддержки ксалинкса.

У ксалинкса есть возможность задать ограничение выхода сигнала относительно основного клока, то есть можно гарантировать что сигналы появятся на ножке не позже чем заданное время от фронта клока. При констраине на период по умолчанию время выхода ставиться период. При этом нет возможность задать чтобы данные появились не раньше. То есть время выхода сигнала от 0 до указанного времени. Задать нижнюю границу больше 0 нет никакой возможности. Во всяком случае до 6 серии включительно.

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

Входные констрайны еще более бедные.


Изложив это все поддержке получил следующий ответ.
Для любого управляемого соотношения между сигналами их надо щелкать в IOBах. Архитектурно клок до этих элементов выровнен и разница между приходом клока к ним минимальна и описана в даташите. Там же описана максимальная разница в пути от IOB до ножки. Так что весь вход - выход управляемо работает только при размещении его в IOB, а времянка входа выхода управляется кратно такту частоты.


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


Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Vadim_nsk   Как использовать временные ограничения в FPGA?   Apr 25 2017, 05:34
- - Nick Potapov   Идеология хорошо расписана вот здесь http://embedd...   Apr 25 2017, 06:23
- - litv   Насчет триггеров - правильно . https://habrahabr...   Apr 25 2017, 06:32
- - Vadim_nsk   Не со всем предложенным еще ознакомился, но кое чт...   Apr 25 2017, 10:43
|- - iosifk   Цитата(Vadim_nsk @ Apr 25 2017, 13:43) Не...   Apr 25 2017, 10:59
- - Golikov A.   во-первых, у ксалинкса есть визард написания конст...   Apr 25 2017, 11:06
|- - Vadim_nsk   Цитата(Golikov A. @ Apr 25 2017, 18:06) в...   Apr 25 2017, 11:55
- - Golikov A.   Правильно понимаете. Вы иминуете сигнал SysClk как...   Apr 25 2017, 12:44
- - GAYVER   RE: Как использовать временные ограничения в FPGA?   Apr 27 2017, 09:19
|- - Vadim_nsk   Цитата(GAYVER @ Apr 27 2017, 16:19) CODE#...   Apr 27 2017, 12:27
- - Golikov A.   ЦитатаЭто ошибка копипаста или что-то осмысленное?...   Apr 28 2017, 06:29
|- - Vadim_nsk   Цитата(Golikov A. @ Apr 28 2017, 13:29) Я...   Apr 28 2017, 09:31
- - Golikov A.   | - это как раз знак что несколько параметров в о...   Apr 28 2017, 14:31


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

 


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


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