|
Как использовать временные ограничения в FPGA? |
|
|
|
Apr 25 2017, 05:34
|

Участник

Группа: Участник
Сообщений: 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. Говорят, этого недостаточно. А как делать правильно?
|
|
|
|
|
 |
Ответов
|
Apr 25 2017, 11:06
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
во-первых, у ксалинкса есть визард написания констраинов, очень рекомендую им воспользоваться. во-вторых, можно сгенерить IP корки каких-то сложных блоков типа контроллера DDR памяти или МАС езернета, и там будут приложены файлы ограничений их можно почитать. Дальше кратко по сути: - Задавать в 0 и пусть пыжится не вариант. Он будет долго пыжится, а потом может устать и вообще бросить что-то делать, то что получится не факт что самое лучшее или что это не сожрет кучу ресурсов. - Величина задержек вычисляется из документации и схемы, обычно оценочно и с генеральскими запасами -Временные группы нужны для удобства работы и описания, можно для каждого сигнала до другого описать констраины, а можно собрать сигналы в группы, и писать от группы до группы. Группировать можно через маски, иногда бывает удобно. Какие сигналы объединять в группы на совести разработчика, это просто для удобства описания. вот пособие от ксалинкса https://www.xilinx.com/itp/xilinx10/books/d...straints_ug.pdfесть еще общее описание юзер констраинов где оно главой
|
|
|
|
|
Apr 25 2017, 11:55
|

Участник

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

|
Цитата(Golikov A. @ Apr 25 2017, 18:06)  во-вторых, можно сгенерить IP корки каких-то сложных блоков типа контроллера DDR памяти или МАС езернета, и там будут приложены файлы ограничений их можно почитать. Спасибо, попробую. 1. Из примера: Код NET "SysCLk" TNM_NET = "SysClk"; TIMESPEC "TS_SysClk" = PERIOD "SysClk" 5 ns HIGH 50%; OFFSET = IN 1.25 ns VALID 2.5 ns BEFORE "SysClk" RISING; OFFSET = IN 1.25 ns VALID 2.5 ns BEFORE "SysClk" FALLING; Я же правильно понимаю, сначала идет: NET описание сигнала, а затем, применительно к этому сигналу идут спецификации: TIMESPEC различные OFFSET Или TIMESPEC и OFFSET это глобальное описание неких сущностей на весь проект? 2. Как описать требуемую задержку выходного сигнала относительно фронта клока вроде понятно, но совсем непонятно, как описать входную задержку сигнала, с учетом того, что он формируется во вне от нашего выходного клока, который также задерживается в выходном буфере oBUFG. Т.е. без осциллографа опять никак, ведь снаружи может набежать сколько угодно.
|
|
|
|
Сообщений в этой теме
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 Golikov A. Когда то беседовал со службой поддержки ксалинкса.... Apr 25 2017, 07:15 Vadim_nsk Не со всем предложенным еще ознакомился, но кое чт... Apr 25 2017, 10:43 iosifk Цитата(Vadim_nsk @ Apr 25 2017, 13:43) Не... Apr 25 2017, 10:59 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|