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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Как работать по обоим фронтам клока?, Сопрягаем Virtex-5 с ADSP-TS201
DMax
сообщение Apr 26 2010, 12:15
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234



Друзья, помогите пожалуйста.

Есть TigerSHARC-201, у которого есть LVDS-линки, которые передают по четыре бита на каждый фронт клока, но обязательно пачками, кратными 128-битам. И клок, и данные приходят с TigerSHARC'а. При чём клок активен, только когда что-то передаётся.

Попытался "в лоб". В VHDL написал if(clk'event) и т.д. Синтезатор выдал, что dual edge clock не поддерживается.

Теоретически можно попробовать сделать два процесса. Один по одному фронту, другой по другому, а данные потом как-то склеить. Но, честно говоря, в этом видится некоторый геморрой, так как "потом" получается очень хреново, из-за того, что клок пропадает после того, как передаются последние 4-бита и за этот такт нужно и склеить и положить данные в FIFO. Либо нужно склеивать и класть в FIFO на другом клоке и для этого делать CDC, что тоже в общем не красиво smile.gif Неужели нет более красивого и прямого пути?
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Apr 26 2010, 12:30
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата
Теоретически можно попробовать сделать два процесса. Один по одному фронту, другой по другому, а данные потом как-то склеить

У Альтеры для этих целей специально мегафункция altlvds есть и именно так она и работает. Вроде и у Xilinx я похожую корку видел, ее не пробовали использовать?
Go to the top of the page
 
+Quote Post
DMax
сообщение Apr 26 2010, 12:34
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234



Цитата(bogaev_roman @ Apr 26 2010, 16:30) *
У Альтеры для этих целей специально мегафункция altlvds есть и именно так она и работает. Вроде и у Xilinx я похожую корку видел, ее не пробовали использовать?


Нет, корки вообще ещё не пробовал. Но беглый взгляд на список корок не увидел чего-либо отдалёно напоминающего sad.gif
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Apr 26 2010, 13:24
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



if(falling_edge(clk))
input_neg<=input;
end if;

if(rising_edge(clk))
input_d<=input;
input_d1(3 downto 0)<=input_d; -- Поменять местами со след. оператором, если по падающему идут младшие биты
input_d1(7 downto 4)<=input_neg;
end if;
Go to the top of the page
 
+Quote Post
DMax
сообщение Apr 26 2010, 13:53
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234



В общем мои изыскания приводят к тому, что надо пользоваться примитивом ISERDES_NODELAY для этих целей. Один только не понятный момент - у него два порта для "быстрых" (последовательных клоков). В режиме DDR один порт нужно подсоединить к клоку, а другой - к инвертированному клоку. А у меня клок вроде как не внутри моей FPGA, а приходит снаружи. Как бы его напрямую завести на оба порта да так, чтобы на одном он инвертирован был?
Go to the top of the page
 
+Quote Post
sazh
сообщение Apr 26 2010, 14:17
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(DMax @ Apr 26 2010, 15:15) *
Есть TigerSHARC-201, у которого есть LVDS-линки, которые передают по четыре бита на каждый фронт клока, но обязательно пачками, кратными 128-битам. И клок, и данные приходят с TigerSHARC'а. При чём клок активен, только когда что-то передаётся.


У Альтеры есть документ an332.pdf и готовая корка при нем. Правда под альтеровские мегафункции. Но если въехать в проект, переделать под xilinx наверно можно. (прием данных так красиво сделан. Прерывистый клок - не помеха).
У xilinx вроде бы xapp 727
Go to the top of the page
 
+Quote Post
faa
сообщение Apr 26 2010, 15:08
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 726
Регистрация: 14-09-06
Из: Москва
Пользователь №: 20 394



Цитата(sazh @ Apr 26 2010, 18:17) *
У xilinx вроде бы xapp 727

XAPP634 и XAPP635

Сообщение отредактировал faa - Apr 26 2010, 15:09
Go to the top of the page
 
+Quote Post
rloc
сообщение Apr 26 2010, 15:33
Сообщение #8


Узкополосный широкополосник
******

Группа: Свой
Сообщений: 2 316
Регистрация: 13-12-04
Из: Moscow
Пользователь №: 1 462



Цитата(DMax @ Apr 26 2010, 17:53) *
В общем мои изыскания приводят к тому, что надо пользоваться примитивом ISERDES_NODELAY для этих целей.


SERDES очень не любят, когда клоки пропадают, пользуйтесь примитивами IBUFDS+IDDR, до частоты 400 МГц хорошо работают, выше - не пробовал.
Go to the top of the page
 
+Quote Post
DMax
сообщение Apr 26 2010, 16:28
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234



Цитата(sazh @ Apr 26 2010, 18:17) *
У Альтеры есть документ an332.pdf и готовая корка при нем. Правда под альтеровские мегафункции. Но если въехать в проект, переделать под xilinx наверно можно. (прием данных так красиво сделан. Прерывистый клок - не помеха).
У xilinx вроде бы xapp 727


Спасибо! Только вот почему XAPP727 на сайте хилиньких убрали. Гугл нашел его только у нас на форуме smile.gif

А XAPP635 - это тоже самое, но для Virtex-II. Там всё более геморройно.

Цитата(rloc @ Apr 26 2010, 19:33) *
SERDES очень не любят, когда клоки пропадают, пользуйтесь примитивами IBUFDS+IDDR, до частоты 400 МГц хорошо работают, выше - не пробовал.


А IDDR'ы их обожают? Как-то я не очень врубаюсь как тут можно заюзать IDDR? По крайней мере считывать два бита на одном фронте (режим SAME_EDGE) как-то не очень получается. А если использовать OPPOSITE_EDGE - то как-то всё равно криво получается sad.gif
Go to the top of the page
 
+Quote Post
rloc
сообщение Apr 26 2010, 16:41
Сообщение #10


Узкополосный широкополосник
******

Группа: Свой
Сообщений: 2 316
Регистрация: 13-12-04
Из: Moscow
Пользователь №: 1 462



Цитата(DMax @ Apr 26 2010, 20:28) *
А IDDR'ы их обожают? Как-то я не очень врубаюсь как тут можно заюзать IDDR? По крайней мере считывать два бита на одном фронте (режим SAME_EDGE) как-то не очень получается. А если использовать OPPOSITE_EDGE - то как-то всё равно криво получается sad.gif


Загляните в документ ug070.pdf на Virtex-4 и тогда будет понятно, что такое SAME_EDGE и OPPOSITE_EDGE. В документах на Virtex-5 этот момент не так наглядно расписан.
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Apr 26 2010, 16:48
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



Для записи по обом фронтам IDDR, как раз то что вам нужно.
В DS на virtex в поиске вбейте DDR, там будет картинки и времянки,
сразу станет понятно, как это работает.
А то что клок пропадает после завершения передачи это конечно плохо.
Для CDC используйте FIFO, а то с метастабильностью четрей не оберетесь.
Go to the top of the page
 
+Quote Post
DMax
сообщение Apr 26 2010, 16:54
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234



Цитата(rloc @ Apr 26 2010, 20:41) *
Загляните в документ ug070.pdf на Virtex-4 и тогда будет понятно, что такое SAME_EDGE и OPPOSITE_EDGE. В документах на Virtex-5 этот момент не так наглядно расписан.


А для такого пропадающего клока вы рекомендуете использовать IBUFDS или IBUFGDS? Я чего-то не углядел в чём разница, кроме того, что последний рекомендуют для клоков.
Go to the top of the page
 
+Quote Post
rloc
сообщение Apr 26 2010, 16:59
Сообщение #13


Узкополосный широкополосник
******

Группа: Свой
Сообщений: 2 316
Регистрация: 13-12-04
Из: Moscow
Пользователь №: 1 462



IBUFGDS = IBUFDS + BUFG
Go to the top of the page
 
+Quote Post
DMax
сообщение Apr 26 2010, 17:02
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234



Цитата(Mad_max @ Apr 26 2010, 20:48) *
Для CDC используйте FIFO, а то с метастабильностью четрей не оберетесь.


А то ж! Только для того, чтобы положить в FIFO, надо подать на него клок и строб записи, который через такт убрать. Строб, я пожалуй подать могу, а вот убрать его на следующем такте - хрен. Так что CDC придётся делать классической схемой для шины через флаг с двумя триггерами.
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Apr 26 2010, 17:52
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



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

Как то давно делал интерфейс с TS201 для V-4. Лучше всего ISERDES подойдёт, если только тактовый сигнал данных подан на тактовый вход и можно задействовать локальную тактовую сеть для IO. Можно и IDDR только тактовую нужно подать отдельно с системной шины шарка для всей схемы и использовать вход наличия данных. От тактового входа данных в этом случае лучше отказаться.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 15th July 2025 - 06:26
Рейтинг@Mail.ru


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