|
Как работать по обоим фронтам клока?, Сопрягаем Virtex-5 с ADSP-TS201 |
|
|
|
Apr 26 2010, 12:15
|
Частый гость
 
Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234

|
Друзья, помогите пожалуйста. Есть TigerSHARC-201, у которого есть LVDS-линки, которые передают по четыре бита на каждый фронт клока, но обязательно пачками, кратными 128-битам. И клок, и данные приходят с TigerSHARC'а. При чём клок активен, только когда что-то передаётся. Попытался "в лоб". В VHDL написал if(clk'event) и т.д. Синтезатор выдал, что dual edge clock не поддерживается. Теоретически можно попробовать сделать два процесса. Один по одному фронту, другой по другому, а данные потом как-то склеить. Но, честно говоря, в этом видится некоторый геморрой, так как "потом" получается очень хреново, из-за того, что клок пропадает после того, как передаются последние 4-бита и за этот такт нужно и склеить и положить данные в FIFO. Либо нужно склеивать и класть в FIFO на другом клоке и для этого делать CDC, что тоже в общем не красиво  Неужели нет более красивого и прямого пути?
|
|
|
|
|
 |
Ответов
|
Apr 26 2010, 16:28
|
Частый гость
 
Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234

|
Цитата(sazh @ Apr 26 2010, 18:17)  У Альтеры есть документ an332.pdf и готовая корка при нем. Правда под альтеровские мегафункции. Но если въехать в проект, переделать под xilinx наверно можно. (прием данных так красиво сделан. Прерывистый клок - не помеха). У xilinx вроде бы xapp 727 Спасибо! Только вот почему XAPP727 на сайте хилиньких убрали. Гугл нашел его только у нас на форуме  А XAPP635 - это тоже самое, но для Virtex-II. Там всё более геморройно. Цитата(rloc @ Apr 26 2010, 19:33)  SERDES очень не любят, когда клоки пропадают, пользуйтесь примитивами IBUFDS+IDDR, до частоты 400 МГц хорошо работают, выше - не пробовал. А IDDR'ы их обожают? Как-то я не очень врубаюсь как тут можно заюзать IDDR? По крайней мере считывать два бита на одном фронте (режим SAME_EDGE) как-то не очень получается. А если использовать OPPOSITE_EDGE - то как-то всё равно криво получается
|
|
|
|
|
Apr 26 2010, 16:54
|
Частый гость
 
Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234

|
Цитата(rloc @ Apr 26 2010, 20:41)  Загляните в документ ug070.pdf на Virtex-4 и тогда будет понятно, что такое SAME_EDGE и OPPOSITE_EDGE. В документах на Virtex-5 этот момент не так наглядно расписан. А для такого пропадающего клока вы рекомендуете использовать IBUFDS или IBUFGDS? Я чего-то не углядел в чём разница, кроме того, что последний рекомендуют для клоков.
|
|
|
|
|
Apr 26 2010, 21:18
|
Частый гость
 
Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234

|
Цитата(rloc @ Apr 26 2010, 20:59)  IBUFGDS = IBUFDS + BUFG Хм... а согласно доке от Xilinx, perfomance у BUFG хуже чем у BUFIO. Поэтому не лучше ли использовать связку IBUFDS + BUFIO? Цитата(dvladim @ Apr 26 2010, 23:27)  Тут передним/задним фронтами не обойдешся. Нужно считывать данные по восстановленному клоку или опорному с повышенной частотой. Обязательно нужно умножение частоты. И с рваным клоком будут серьезные проблемы. Ну или не "по 4 бита на каждый фронт". Я забыл написать в начале поста (казалось, очевидным), что четыре бита передаются по четырем LVDS-парам, а не по одной  Так что не надо тут умножений и восстановлений. Тем более ни один DCM и PLL по рванному клоку не будет, наверное, работать.
|
|
|
|
|
Apr 28 2010, 17:35
|
Частый гость
 
Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234

|
Цитата(rloc @ Apr 27 2010, 18:06)  Давно работаю с Xilinx, но понять сути вопроса не в состоянии. Складывается такое впечатление, что Вы хотите или постов набрать или найти бесплатных репетиторов для обучения, не прикладывая собственных усилий для самообучения. Зачем мне набирать посты? Я, извиняюсь, не дрочу на число постов. Я действительно не спец в ПЛИСах, т.е. написать на VHDL'е некоторый модуль я могу запросто, но вот сталкиваться уже непосредственно с тонкостями реализации Xilinx'ом клоков, DDR и LVDS мне раньше не приходилось. По сути вопроса поясню. В доке UG-190 сказанно, что есть глобальные клоки, есть региональные клоки. В каком-то другом мануале (или в app note, уже не помню) видел утверждение, что региональные клоки имеют лучшие характеристики по сравнению с глобальными. Теперь если я правильно понимаю, то сигнал пропущенный, через BUFG попадает в глобальные клоки, через BUFR- в региональные, а через и BUFIO - в I/O clock net данного региона (или банка, вот здесь я ещё не разобрался), что и рекомендуется для source synchronous систем и именно последний я и хотел бы (следуя рекомендации) использовать. Однако, написано, что BUFIO может запитываться только напрямую от clock capable I/O, то есть получается что сигнал пропущенный через BUFG уже не может драйвить BUFIO. Более того, не сказано в доке (если сказано, то ткните туда носом), что после того как я собираю LVDS-сигнал с помощью IBUF*DS, он продолжает оставаться clock capable, если был снят с соответствующей пары пинов. Вы говорите, что IBUFGDS = IBUFDS + BUFG. То есть я не могу на конец это цепочки подсоединить BUFIO. Однако IBUFDS + BUFIO почему-то у меня не разводится, может дело в том, что сигнал на выходе IBUFDS уже не clock capable? Я правильно понимаю эту концепцию или я сбит с толку суффиксами G, R и IO в этих обозначениях? Или вы бесплатно не отвечаете на такие вопросы?  Я может быть тупой и ПЛИСам не обучен, но кажется, что Xilinx пишет доки, которые не проясняют до состояния очевидности такие моменты.
|
|
|
|
|
Apr 28 2010, 17:51
|
Знающий
   
Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741

|
Цитата(DMax @ Apr 28 2010, 20:35)  Зачем мне набирать посты? Я, извиняюсь, не дрочу на число постов. Я действительно не спец в ПЛИСах, т.е. написать на VHDL'е некоторый модуль я могу запросто, но вот сталкиваться уже непосредственно с тонкостями реализации Xilinx'ом клоков, DDR и LVDS мне раньше не приходилось. По сути вопроса поясню. В доке UG-190 сказанно, что есть глобальные клоки, есть региональные клоки. В каком-то другом мануале (или в app note, уже не помню) видел утверждение, что региональные клоки имеют лучшие характеристики по сравнению с глобальными. Теперь если я правильно понимаю, то сигнал пропущенный, через BUFG попадает в глобальные клоки, а через BUFR и BUFIO - в региональные, хотя разницу между последними двумя я не особо понимаю - знаю лишь, что BUFR может делить клок, в отличие от BUFIO. Я правильно понимаю эту концепцию или я сбит с толку суффиксами G и R в этих обозначениях? Или вы бесплатно не отвечаете на такие вопросы?  Дело не в том, что быстрее или медленнее. Просто локальная (региональная) тактовая сетка - единственный вариант работы ISERDES с прерывистой тактовой.
|
|
|
|
|
Apr 28 2010, 18:02
|
Частый гость
 
Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234

|
Цитата(dmitry-tomsk @ Apr 28 2010, 21:51)  Дело не в том, что быстрее или медленнее. Просто локальная (региональная) тактовая сетка - единственный вариант работы ISERDES с прерывистой тактовой. Решение с ISERDES'ами мне не очень нравится. Я решил остановится на IDDR. Всё, чего я не понимаю, это последовательность комбинации примитивов IBUF*DS, BUFIO, BUFR и того, какие конкретно надо использовать, чтобы грамотно сделать клоки. Варианты: 1) IBUFDS => IDDR 2) IBUFGDS => IDDR 3) IBUFDS => BUFIO => IDDR (не разводится почему-то) 4) IBUFGDS => BUFIO => IDDR (не проверял на тему разведется или нет) 5) IBUFGDS => BUFR => IDDR (тоже ещё не проверял) Кроме того, если останавливаться на варианте с BUFIO, то не понятно каким клоком тактовать логику, которая обрабатывает выходы IDDR, так как BUFIO вроде бы не может тактовать логику.
|
|
|
|
Сообщений в этой теме
DMax Как работать по обоим фронтам клока? Apr 26 2010, 12:15 bogaev_roman ЦитатаТеоретически можно попробовать сделать два п... Apr 26 2010, 12:30 DMax Цитата(bogaev_roman @ Apr 26 2010, 16:30)... Apr 26 2010, 12:34  DmitryR if(falling_edge(clk))
input_neg<=input;
end ... Apr 26 2010, 13:24 DMax В общем мои изыскания приводят к тому, что надо по... Apr 26 2010, 13:53 rloc Цитата(DMax @ Apr 26 2010, 17:53) В общем... Apr 26 2010, 15:33 faa Цитата(sazh @ Apr 26 2010, 18:17) У xilin... Apr 26 2010, 15:08  Mad_max Для записи по обом фронтам IDDR, как раз то что ва... Apr 26 2010, 16:48   DMax Цитата(Mad_max @ Apr 26 2010, 20:48) Для ... Apr 26 2010, 17:02    dmitry-tomsk Цитата(DMax @ Apr 26 2010, 20:02) А то ж... Apr 26 2010, 17:52    sazh Цитата(DMax @ Apr 26 2010, 20:02) А то ж... Apr 26 2010, 18:15    Mad_max Цитата(DMax @ Apr 26 2010, 21:02) А то ж... Apr 27 2010, 09:29     DMax Цитата(Mad_max @ Apr 27 2010, 13:29) А ес... Apr 27 2010, 14:11      sazh Цитата(DMax @ Apr 27 2010, 17:11) а значи... Apr 27 2010, 14:23       DMax Цитата(sazh @ Apr 27 2010, 18:23) А шина ... Apr 28 2010, 08:35        sazh Цитата(DMax @ Apr 28 2010, 11:35) Ещё раз... Apr 28 2010, 08:49 dvladim Цитата(yuri_d @ Apr 26 2010, 12:49) Топол... Apr 26 2010, 19:27 Victor Вообще в таких ситуациях, когда тактовая есть толь... Apr 28 2010, 14:52 Victor Если вас не пугает "повисший" последний ... Apr 29 2010, 08:50
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|