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

 
 
> Проектирование LVDS на ПЛИС Altera, проектирование канала LVDS на Cyclone3
yudu
сообщение Aug 26 2009, 12:57
Сообщение #1





Группа: Участник
Сообщений: 5
Регистрация: 26-08-09
Пользователь №: 52 053



Кто проектировал канал LVDS помогите!
Соединяю два плиса Cyclone3 по lvds. Передатчик пашет, а вот на приемнике не могу считать данные. Имею две диф. пары, одна DATA и одна CLK.
Все вроде бы обозначил как надо. Снимаю принятые данные и клок на линейные выводы - точная копия того что давал на передачу. Но вот зацепить
клок внутри приемника не могу, не получается даже сосчитать импульсы. Другим словом в коде сигнал OK меняется раньше чем 64 импульса клока..sad.gif


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;
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Tue
сообщение Aug 17 2017, 15:10
Сообщение #2


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

Группа: Свой
Сообщений: 166
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340



Пытаюсь разработать два независимых (один туда, другой обратно) LVDS-канала передачи данных между двумя ПЛИС Cyclone 5 GX (конкретно 5CGXFC7C6F23I7). "Путаница" в документации, практически полное отсутствие примеров завели меня в тупик и я вынужден обратиться сюда.

В обоих ПЛИС делаю одинаковые ALTLVDS_TX, ALTLVDS_RX. Частота входных данных 150МГц, коэффициент сериализации 4, выходной поток 600Мбит/с на один LVDS-канал. Думаю это комфортные условия для данного кристалла. Всего 17 LVDS-каналов. ALTLVDS_TX, ALTLVDS_RX делаю НЕ в режиме "External PLL mode". То есть все частоты для работы блоки делают внутри себя сами.

В ALTLVDS_TX задаю параметр "outclock divide factor (cool.gif" равным 4, ставлю галку "Use 'tx_outclock' output port" и "Use 'tx_coreclock' output port". На входной порт ALTLVDS_TX/tx_inclock подаю 150МГц, питаю данными, выдаваемым схемой, которая запитывается от частоты tx_coreclock

В ALTLVDS_RX и задавать то особо нечего. Input data rate ставлю 600Мбит/с, input clock rate clock frequency ставлю 150МГц.

Выходной порт tx_outclock блока ALTLVDS_TX в одной ПЛИС соединяю с входным портом rx_inclock блока ALTLVDS_RX в другой ПЛИС. В моделировании tx_outclock выдает частоту 150МГц, в железе пока непонятно. В ModelSim все работает замечательно. В железе не работает, возникает много вопросов.

1. В документе "LVDS SERDES Transmitter/Receiver IP Cores User Guide" 2017.06.19 в таблице 2 для ALTLVDS Transmitter указаны частоты для моего (четного) коэффициента сериализации:

Fast Clock = Data Rate/2
Slow Clock (outclock)= Data Rate/2*B
Core Clock = Data Rate/J

То есть для моего случая должы быть такие значения: Fast Clock = 300МГц. Slow Clock = 1200МГц (если буквально понимать формулу). Если понимать ее как Slow Clock = Data Rate/(2*cool.gif, то должно быть 75МГЦ. Core clock = 150МГц. В TimeQuest'е я вижу Fast Clock = 600МГц, Slow Clock = 150МГц, Core Clock (который имеет скважность 100/J = 25% в моем случае) равен 150МГц.

Это первая неопределенность (фундаментальная), которая у меня возникает в разработке LVDS-канала.
Возможно документация (достаточно новая) для Cyclone-семейства исходит из того, что Cyclone до 5-го используют DDIO, а в 5-ом уже используется аппаратный блок сериализации, без DDIO. Отсюда возникает эта путаница, но от осознания этого легче не становится.

2. Из-за того, что в документации я вижу одно, в ModelSim другое, а в TimeQuest третье решил вывести в SignalTAP счетчики, запитать их разными частотами и посмотреть что же получается в железе.



На картинке фрагмент из SignalTAP'a. Частота SignalTAP равна 150МГц (назовем ее avl_clk). Счетчик здесь немного необычный. Считает не каждый первый такт, а каждый второй такт. Так лучше видно.

2.1 Из диаграмы видно, что первый счетчик (запитанный tx_coreclock) и второй счетчик (запитанный частотой SignalTAP avl_clk) идут одним темпом. Из этого становится понятно, что частота tx_coreclock равна avl_clk и обе равны 150МГц.

2.2 Дальше идет счетчик с частотой rx_coreclock (частота приемных десериализированных данных). Видно что он изменяется каждый первый такт. Это, как я понимаю, означает, что она в два раза выше частот avl_clk, tx_coreclock и равна 300МГц. Почему ? Непонятно

2.3 Дальше идет lvds_rx_inclk. Это tx_outclock (Slow Clock) от блока ALTLVDS_TX из соседней ПЛИС. Судя по тому, ка к меняются значения каждый такт (090h, 092h, 094h, 096h, 098h, ...) у меня складывается ощущение, что она в 4 раза выше частоты SignalTAP, то есть 600МГц. Почему ? Непонятно. Еще непонятны замирания счетчика (например на значении 0B6h на картинке)

2.4 Из-за такого поведения счетчика lvds_rx_inclk у меня нет уверенности в том, что tx_outclock равен 150МГц. Когда писал эти вопросы провел эксперимент. Подал на tx_outclock частоту не с ALTVDS_TX/tx_outclock, а частоту с PLL с гарантированно известной частотой 150МГц. Эта частота поступает с другой ПЛИС на lvds_rx_inclk в ПЛИС, с которой снимаю SignalTAP. 4-й счетчик стал считать аналогично 3-ему, то есть каждый такт менять значение. Как такое может быть, если эта частота и частота SignalTAP номинально равны (могут и быть незначительные отклонения в несколько десятков ppm) ?

3. Может быть я как-то неправильно настраиваю ALTLVDS_TX, ALTLVDS_RX ? Может кто-нибудь подсказать, как будет правильно их настроить? Что с чем соединять, чтобы получить LVDS-канал. Где какие должны быть частоты ? Поняв как правильно настроить передатчики и приемники буду двигать дальше.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - Flip-fl0p   LVDS у Вас запускается на DDR регистрах. Соответст...   Aug 17 2017, 15:54
- - Tue   Да, обучения я предусмотрел и сделал (в модели). Н...   Aug 17 2017, 16:00
- - Tue   Еще остались непонятными следующие вопросы: 1. Ес...   Aug 23 2017, 14:16
|- - Flip-fl0p   Цитата(Tue @ Aug 23 2017, 17:16) Еще оста...   Aug 24 2017, 07:26
|- - bogaev_roman   Цитата(Flip-fl0p @ Aug 24 2017, 10:2...   Aug 24 2017, 07:57
||- - Flip-fl0p   Цитата(bogaev_roman @ Aug 24 2017, 10:57)...   Aug 24 2017, 08:20
||- - bogaev_roman   Цитата(Flip-fl0p @ Aug 24 2017, 11:2...   Aug 24 2017, 08:25
||- - Flip-fl0p   Цитата(bogaev_roman @ Aug 24 2017, 11:25)...   Aug 24 2017, 08:34
||- - bogaev_roman   Цитата(Flip-fl0p @ Aug 24 2017, 11:3...   Aug 24 2017, 08:42
||- - Flip-fl0p   Цитата(bogaev_roman @ Aug 24 2017, 11:42)...   Aug 24 2017, 08:49
||- - bogaev_roman   Цитата(Flip-fl0p @ Aug 24 2017, 11:4...   Aug 24 2017, 08:54
||- - Flip-fl0p   Цитата(bogaev_roman @ Aug 24 2017, 11:54)...   Aug 24 2017, 09:05
|- - 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


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

 


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


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