|
Как работать по обоим фронтам клока?, Сопрягаем 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, 12:34
|
Частый гость
 
Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234

|
Цитата(bogaev_roman @ Apr 26 2010, 16:30)  У Альтеры для этих целей специально мегафункция altlvds есть и именно так она и работает. Вроде и у Xilinx я похожую корку видел, ее не пробовали использовать? Нет, корки вообще ещё не пробовал. Но беглый взгляд на список корок не увидел чего-либо отдалёно напоминающего
|
|
|
|
|
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, 17:02
|
Частый гость
 
Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234

|
Цитата(Mad_max @ Apr 26 2010, 20:48)  Для CDC используйте FIFO, а то с метастабильностью четрей не оберетесь. А то ж! Только для того, чтобы положить в FIFO, надо подать на него клок и строб записи, который через такт убрать. Строб, я пожалуй подать могу, а вот убрать его на следующем такте - хрен. Так что CDC придётся делать классической схемой для шины через флаг с двумя триггерами.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|