|
Проектирование LVDS на ПЛИС Altera, проектирование канала LVDS на Cyclone3 |
|
|
|
Aug 26 2009, 12:57
|
Группа: Участник
Сообщений: 5
Регистрация: 26-08-09
Пользователь №: 52 053

|
Кто проектировал канал LVDS помогите! Соединяю два плиса Cyclone3 по lvds. Передатчик пашет, а вот на приемнике не могу считать данные. Имею две диф. пары, одна DATA и одна CLK. Все вроде бы обозначил как надо. Снимаю принятые данные и клок на линейные выводы - точная копия того что давал на передачу. Но вот зацепить клок внутри приемника не могу, не получается даже сосчитать импульсы. Другим словом в коде сигнал OK меняется раньше чем 64 импульса клока..  LIBRARY ieee; USE ieee.std_logic_1164.all; -- Entity Declaration ENTITY priem IS -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! PORT ( inclk : IN STD_LOGIC; indat : IN STD_LOGIC; data : out STD_LOGIC :='0';-- линия данных buff : out STD_LOGIC_VECTOR(55 downto 0):=x"00000000000000"; --data dly upravlyemogo ustroystva st,s1,s2: out STD_LOGIC:='0'; C : out STD_LOGIC :='0'; EN : out STD_LOGIC_vector(0 to 1):=b"00" ); -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! END priem; -- Architecture Body ARCHITECTURE priem_architecture OF priem IS signal adr:STD_LOGIC_vector (3 downto 0):=x"5";-- АДРЕСС ПРИЕМНИКА signal datbuf:STD_LOGIC_VECTOR(0 to 63):=x"0000000000000000"; -- adres + data signal id,ic:STD_LOGIC:='0'; signal ok,pr_adr,c1:STD_LOGIC:='0'; signal sta:STD_LOGIC:='0'; --сигнал старт-бита / сброс передачи данных BEGIN id<=indat; ic<=inclk; --прием старт-бита / сброс передачи данных --при выполнении условия приема старт-бита --на линии STA появляется импульс --priem start bita --------------------------------------------------------------------------------------------- process (id,ic) variable i: integer:=0; begin if (ic='0') then i:=0; sta<='0'; end if; if ic='1' then if (id='0' and i=0) then i:=1; elsif (id='1' and i=1) then i:=2; elsif (id='0' and i=2) then sta<='1'; end if; end if; end process; --------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------- process (sta,ic) --запись данных variable i: integer:=0; begin if (ic'event and ic='1') then if i<64 then datbuf(i)<=id; i:=i+1; if i=64 then ok<=not ok; end if; end if; end if; if sta='1' then i:=0; end if; end process; --------------------------------------------------------------------------------------------- st<=sta; s1<=ic; s2<=ok; END priem_architecture;
|
|
|
|
|
 |
Ответов
|
Aug 23 2017, 14:16
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340

|
Еще остались непонятными следующие вопросы:
1. Если говорим о передаче (ALTLVDS_TX) нужно ли вместе с tx_out выдавать tx_outclock ? 1.1 Если да, то что за частоту нужно выдавать, откуда ее брать ? Частоту параллельных данных (slow_clock) ? 1.2 Выдавать как I/O Standard LVDS ? Или как обычный, не диф. парой, однополярный ? 1.3 Как вообще констрейнится через sdc такой интерфейс ?
2. По приему (ALTLVDS_RX) тоже подобные вопросы. Нужно ли заводить rx_inclock ? 2.1 Он нужен просто для получения частоты fast_clock (скажем 600Мбит/с -> 600МГц) ? Могу ли для получения такой частоты (а также rx_enable, rx_coreclock) использовать обычную PLL и любую частоту для разгона PLL ? 2.2 Непонятно про сигнал rx_channel_data_align. Дергаю его, но никакого изменения. Если речь идет о многоразрядном LVDS-канале, то каждый разряд rx_channel_data_align отвечает за свою LVDS линию и их можно дергать независимо ли это не так ? 2.3 Тот же вопрос про констрейны через sdc ?
Если у кого-то есть рабочий проект с LVDS-приемником/передатчиком для Cyclone 5, можно выложить тут архив проекта, касающийся только приема-передачи. Вместе с назначениями пинов и их I/O Standard ?
|
|
|
|
|
Aug 24 2017, 07:26
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата(Tue @ Aug 23 2017, 17:16)  Еще остались непонятными следующие вопросы:
1. Если говорим о передаче (ALTLVDS_TX) нужно ли вместе с tx_out выдавать tx_outclock ? 1.1 Если да, то что за частоту нужно выдавать, откуда ее брать ? Частоту параллельных данных (slow_clock) ? 1.2 Выдавать как I/O Standard LVDS ? Или как обычный, не диф. парой, однополярный ? 1.3 Как вообще констрейнится через sdc такой интерфейс ?
2. По приему (ALTLVDS_RX) тоже подобные вопросы. Нужно ли заводить rx_inclock ? 2.1 Он нужен просто для получения частоты fast_clock (скажем 600Мбит/с -> 600МГц) ? Могу ли для получения такой частоты (а также rx_enable, rx_coreclock) использовать обычную PLL и любую частоту для разгона PLL ? 2.2 Непонятно про сигнал rx_channel_data_align. Дергаю его, но никакого изменения. Если речь идет о многоразрядном LVDS-канале, то каждый разряд rx_channel_data_align отвечает за свою LVDS линию и их можно дергать независимо ли это не так ? 2.3 Тот же вопрос про констрейны через sdc ?
Если у кого-то есть рабочий проект с LVDS-приемником/передатчиком для Cyclone 5, можно выложить тут архив проекта, касающийся только приема-передачи. Вместе с назначениями пинов и их I/O Standard ? В модуле ALT_LVDS_RX в режиме с внутренним PLL, порт rx_inclock - это опорная частота PLL. В режиме внешнего PLL (external PLL) порт rx_inclock - частота дессерилизации (учитывайте в каком режиме работает ALT_LVDS_RX. В режиме DDR или SDR. Если в режиме DDR - то частота дессерилизации соответственно в 2 раза ниже). Сигнал rx_channel_data_align нужен для "обучения" приёмника, подали одиночный сигнал, и приём сдвинулся на 1 бит. Таким образом вы настраиваетесь на правильный порядок приёма бит. При многоканальном приёме каждый rx_channel_data_align отвечает за свой канал. Как я понял их можно дергать независимо друг от друга. Но лучше посмотрите при моделировании.
Сообщение отредактировал Flip-fl0p - Aug 24 2017, 07:29
|
|
|
|
|
Aug 24 2017, 07:57
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(Flip-fl0p @ Aug 24 2017, 10:26)  В модуле ALT_LVDS_RX в режиме с внутренним PLL, порт rx_inclock - это опорная частота PLL. В режиме внешнего PLL (external PLL) порт rx_inclock - частота дессерилизации (учитывайте в каком режиме работает ALT_LVDS_RX. В режиме DDR или SDR. Если в режиме DDR - то частота дессерилизации соответственно в 2 раза ниже). Есть проект, в котором используется именно внешняя pll и data_alignment, работоспособность зависит от компиляции к компиляции, т. е. вроде проблемы с таймингами. При попытке посмотреть временные пути столкнулся с проблемой - физика реализована на жестких блоках, анализ закрыт. Как там вообще физика реализована, нужно что-то прописывать во временных ограничениях кроме мультицикла на выходе и частоты на входе pll и ее производных? Временных ошибок нет, анализ unconstraint_patch говорит, что необконстрейненых путей тоже нет. ЗЫ. Кстати, каким образом принудительно задать режим работы DDR - там настройки такой нет, только с помощью настроек pll?
|
|
|
|
|
Aug 24 2017, 08:20
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата(bogaev_roman @ Aug 24 2017, 10:57)  Есть проект, в котором используется именно внешняя pll и data_alignment, работоспособность зависит от компиляции к компиляции, т. е. вроде проблемы с таймингами. При попытке посмотреть временные пути столкнулся с проблемой - физика реализована на жестких блоках, анализ закрыт. Как там вообще физика реализована, нужно что-то прописывать во временных ограничениях кроме мультицикла на выходе и частоты на входе pll и ее производных? Временных ошибок нет, анализ unconstraint_patch говорит, что необконстрейненых путей тоже нет. Скажу так: В LVDS SERDES Transmitter/Receiver IP Cores User Guide явного указания что-либо констрейнить кроме входного клока и данных я не увидел, хотя если честно я совсем плохой советчик по констрейнам. Изучать боле-менее осмысленно я их стал относительно недавно, для меня они ещё темный лес Интересно, а можно ли как-то получить доступ к жестким блокам ALT_LVDS_RX ? Уж jочень заманчива мысль получить доступ к IR_FIFO_SERDES, который , как я понял, является "железным" высокоскоростным FIFO. А в режиме extrenal PLL вы так-же ставили клоковый буфер между PLL и LVDS_RX ?
Сообщение отредактировал Flip-fl0p - Aug 24 2017, 08:21
|
|
|
|
Сообщений в этой теме
yudu Проектирование LVDS на ПЛИС Altera Aug 26 2009, 12:57 Kuzmi4 2 yudu - зачем вам чтото городить своё ? Всё уже у... Aug 26 2009, 13:08 DmitryR Во-первых, почитайте хорошенько книжки по основам ... Aug 26 2009, 14:01  nonedub Цитата(DmitryR @ Aug 26 2009, 18:01) Во-п... Aug 26 2009, 21:15   Shtirlits Цитата(nonedub @ Aug 27 2009, 01:15) А чт... Aug 26 2009, 22:14    des00 Цитата(Shtirlits @ Aug 26 2009, 16:14) А ... Aug 27 2009, 03:18    nonedub Цитата(Shtirlits @ Aug 27 2009, 02:14) А ... Aug 27 2009, 07:28 yudu Цитата(Kuzmi4 @ Aug 26 2009, 17:08) 2 yud... Aug 27 2009, 04:27  DmitryR Цитата(yudu @ Aug 27 2009, 08:27) Все дел... Aug 27 2009, 10:05   nonedub Цитата(DmitryR @ Aug 27 2009, 14:05) Ну э... Aug 27 2009, 17:10    DmitryR Наличие линий управления не просто упрощает интерф... Aug 28 2009, 06:04     nonedub Цитата(DmitryR @ Aug 28 2009, 10:04) Нали... Aug 28 2009, 17:22 Kuzmi4 2 yudu - это конечно всё хорошо, но всё же не ясно... Aug 27 2009, 07:37 Kuzmi4 Если Цитата..на этих двух несчастных проводах неск... Aug 27 2009, 10:53 yudu Цитата(Kuzmi4 @ Aug 27 2009, 14:53) Если ... Aug 27 2009, 11:55  DmitryR Цитата(yudu @ Aug 27 2009, 15:55) Cyclon3... Aug 27 2009, 13:49 SFx PLL в визарде лучше выбирать встроенную в корку AL... Aug 27 2009, 12:33 Kuzmi4 2 yudu - идеи есть всегда
100Мб/с - это мегабай... Aug 27 2009, 12:38 yudu Цитата(Kuzmi4 @ Aug 27 2009, 16:38) 2 yud... Aug 28 2009, 11:52  DmitryR Цитата(yudu @ Aug 28 2009, 15:52) синхрон... Aug 28 2009, 12:59   yudu Цитата(DmitryR @ Aug 28 2009, 16:59) Если... Aug 31 2009, 05:31    DmitryR Цитата(yudu @ Aug 31 2009, 09:31) Кстати ... Aug 31 2009, 06:01 IT_Pavel А вы правильно подключили ножки ПЛИС? Входной клок... Aug 27 2009, 12:42 Алексей_1990 Здравствуйте. Разъясните, пожалуйста, как я могу п... Feb 10 2016, 12:46 andrew_b Цитата(Алексей_1990 @ Feb 10 2016, 16:46)... Feb 11 2016, 05:47  Алексей_1990 Цитата(andrew_b @ Feb 11 2016, 09:47) Дел... Feb 15 2016, 07:09   andrew_b Цитата(Алексей_1990 @ Feb 15 2016, 11:09)... Feb 15 2016, 07:26    Алексей_1990 Цитата(andrew_b @ Feb 15 2016, 11:26) Не ... Feb 15 2016, 07:51     andrew_b Цитата(Алексей_1990 @ Feb 15 2016, 11:51)... Feb 15 2016, 08:02      Алексей_1990 Цитата(andrew_b @ Feb 15 2016, 12:02) А п... Feb 15 2016, 11:40       Александр77 Цитата(Алексей_1990 @ Feb 15 2016, 14:40)... Feb 15 2016, 18:36        Алексей_1990 Цитата(Александр77 @ Feb 15 2016, 22:36) ... Feb 16 2016, 02:57 Tue Пытаюсь разработать два независимых (один туда, др... Aug 17 2017, 15:10 Flip-fl0p LVDS у Вас запускается на DDR регистрах. Соответст... Aug 17 2017, 15:54 Tue Да, обучения я предусмотрел и сделал (в модели). Н... Aug 17 2017, 16:00  Tue Цитата(Flip-fl0p @ Aug 24 2017, 10:2... Aug 24 2017, 12:34   Flip-fl0p Цитата(Tue @ Aug 24 2017, 15:34) Это поня... Aug 24 2017, 13:36    Tue Цитата(Flip-fl0p @ Aug 24 2017, 16:3... Aug 25 2017, 06:21 Magnum А на какое расстояние надо передавать данные? Aug 25 2017, 05:56 Magnum ЦитатаЕсли для rx_inclock меняю I/O Standard на 2.... Aug 25 2017, 06:34 Tue Я говорил об установлении стандарта ввода-вывода п... Aug 25 2017, 07:35 Magnum А, невнимательно прочитал. Для LVDS, есть некоторы... Aug 25 2017, 08:10
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|