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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Проектирование 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
Kuzmi4
сообщение Aug 26 2009, 13:08
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 230
Регистрация: 13-02-07
Из: 49°25′58″ 11°53′5″
Пользователь №: 25 329



2 yudu - зачем вам чтото городить своё ? Всё уже украдено до вас - есть ALT_LVDS (в мегавизарде) или как то так - там и клок и сериализатор, линий мало, скорость нормальная... Если соединять 2 циклона - с минимум линий и по LVDS - самое оно laughing.gif
Там и примеры есть у альтеры как раз рабочие...
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Aug 26 2009, 14:01
Сообщение #3


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

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



Во-первых, почитайте хорошенько книжки по основам синхронного дизайна, чтобы никогда больше (по крайней мере до тех пор, пока вы не начнете проектировать крутые заказные микросхемы) не пытаться тактовую частоту обрабатывать асинхронно ("if (ic='0')" etc.). Тогда станет ясно, что по линии clk надо передавать просто тактовый сигнал, непрерывно, а передачу пакетов данных осуществлять придумав формат пакета, передаваемый по линии данных. Наперед скажу, что если надо передавать данные не постоянно, а пачками проще протянуть третий провод, который будет как clock enable, чем заморачиваться пакетами.
Go to the top of the page
 
+Quote Post
nonedub
сообщение Aug 26 2009, 21:15
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 21-06-09
Пользователь №: 50 504



Цитата(DmitryR @ Aug 26 2009, 18:01) *
Во-первых, почитайте хорошенько книжки по основам синхронного дизайна, чтобы никогда больше (по крайней мере до тех пор, пока вы не начнете проектировать крутые заказные микросхемы) не пытаться тактовую частоту обрабатывать асинхронно ("if (ic='0')" etc.). Тогда станет ясно, что по линии clk надо передавать просто тактовый сигнал, непрерывно, а передачу пакетов данных осуществлять придумав формат пакета, передаваемый по линии данных. Наперед скажу, что если надо передавать данные не постоянно, а пачками проще протянуть третий провод, который будет как clock enable, чем заморачиваться пакетами.


А что делать, если имеется двухпроводной (двухпарный) LVDS, да еще с gated clock?
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Aug 26 2009, 22:14
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Цитата(nonedub @ Aug 27 2009, 01:15) *
А что делать, если имеется двухпроводной (двухпарный) LVDS, да еще с gated clock?

А с gated clock лучше кого-то застрелить сразу.
Откуда они вообще берутся эти gated clock-и в местах, где применяется LVDS ?
Go to the top of the page
 
+Quote Post
des00
сообщение Aug 27 2009, 03:18
Сообщение #6


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 222
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Shtirlits @ Aug 26 2009, 16:14) *
А с gated clock лучше кого-то застрелить сразу.
Откуда они вообще берутся эти gated clock-и в местах, где применяется LVDS ?


да есть такие фанаты, которым надо передать кадры без потерь на синху а отдельную линию под строб зажали...


--------------------
Go to the top of the page
 
+Quote Post
yudu
сообщение Aug 27 2009, 04:27
Сообщение #7





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



Цитата(Kuzmi4 @ Aug 26 2009, 17:08) *
2 yudu - зачем вам чтото городить своё ? Всё уже украдено до вас - есть ALT_LVDS (в мегавизарде) или как то так - там и клок и сериализатор, линий мало, скорость нормальная... Если соединять 2 циклона - с минимум линий и по LVDS - самое оно laughing.gif
Там и примеры есть у альтеры как раз рабочие...


Все дело в том, что канал LVDS должен давать данные пачками. После передачи должен быть основной режим для остальной части схемы,
а для плиса наступает режим молчания(подведено только питание). И еще, работа плиса должна на момент приема тактироваться сигналом клок(clk),
внешнего кварца нет. Data приходит на выводы 128/129, а клок на 49/50.
Go to the top of the page
 
+Quote Post
nonedub
сообщение Aug 27 2009, 07:28
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 21-06-09
Пользователь №: 50 504



Цитата(Shtirlits @ Aug 27 2009, 02:14) *
А с gated clock лучше кого-то застрелить сразу.
Откуда они вообще берутся эти gated clock-и в местах, где применяется LVDS ?

Например, линк-порты DSP TS201 TigerShark от Analog Devices.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Aug 27 2009, 07:37
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 230
Регистрация: 13-02-07
Из: 49°25′58″ 11°53′5″
Пользователь №: 25 329



2 yudu - это конечно всё хорошо, но всё же не ясно , ЧТО ИМЕННО мешает использовать ALTLVDS?? Ставьте примитив и гоняйте данные пачками laughing.gif Или вопрос стоит именно соорудить всё это чЮдо самому ? Кстати , а у вас клок кто разадаёт ? Он не глохнет случаем когда ктот орешает что передача окончена ??


И что значит
Цитата
..Data приходит на выводы 128/129, а клок на 49/50...

Камень какой ?
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Aug 27 2009, 10:05
Сообщение #10


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

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



Цитата(yudu @ Aug 27 2009, 08:27) *
Все дело в том, что канал LVDS должен давать данные пачками. После передачи должен быть основной режим для остальной части схемы, а для плиса наступает режим молчания(подведено только питание).
То есть у вас еще ко всему на этих двух несчастных проводах несколько источников сигнала, ПЛИС и еще кто-то. Застрелиться, это и для опытного-то человека гимор. А частоты-то какие?

Цитата(nonedub @ Aug 27 2009, 11:28) *
Например, линк-порты DSP TS201 TigerShark от Analog Devices.
Ну это же неправда, там контроль передачи ведется через ACK/BCMP.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Aug 27 2009, 10:53
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 230
Регистрация: 13-02-07
Из: 49°25′58″ 11°53′5″
Пользователь №: 25 329



Если
Цитата
..на этих двух несчастных проводах несколько источников сигнала, ПЛИС и еще кто-то..
то тут действительно ALTLVDS не покатит, но почему не взять I2C, он же TWI, - защищённость от шумов похуже чем у LVDS-ных, но можно много посадить товарищей на шину без особого гемора, да и скорости свои можно задать + корка не сложная..
Go to the top of the page
 
+Quote Post
yudu
сообщение Aug 27 2009, 11:55
Сообщение #12





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



Цитата(Kuzmi4 @ Aug 27 2009, 14:53) *
Если то тут действительно ALTLVDS не покатит, но почему не взять I2C, он же TWI, - защищённость от шумов похуже чем у LVDS-ных, но можно много посадить товарищей на шину без особого гемора, да и скорости свои можно задать + корка не сложная..


Cyclon3. На проводах никого кроме 2-х плисов. Синхронизация 64 периода, 7 байт данных и 1 адресс. Эта синхронизация для диф. пары
данных и для работы самого плиса. Скорость передачи 100Мб/c.
Для ALTLVDS нужен PLL, для которого в свою очередь нужно время для запуска. Нужно городить самому. Есть предложения?
Go to the top of the page
 
+Quote Post
SFx
сообщение Aug 27 2009, 12:33
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 756
Регистрация: 11-07-05
Из: Понаехал (Мск)
Пользователь №: 6 688



PLL в визарде лучше выбирать встроенную в корку ALT_LVDS. Все работает. проверял на цикло2->циклон3 до 260 мегабит/c по одной линии. единственное требование. CLk должен заходить на входы CLK_IN на плисене. иначе не выдет.
я по началу пытался использовать PLL отдельно сгенерированную - ничего не вышло. самое главное указать на LVDS_RX правильную выходную частоту.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Aug 27 2009, 12:38
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 230
Регистрация: 13-02-07
Из: 49°25′58″ 11°53′5″
Пользователь №: 25 329



2 yudu - идеи есть всегда biggrin.gif
100Мб/с - это мегабайты или мегабиты ?? Если это мегабайты - что-то у меня есть сомнения, что по одной паре такое можно вытянуть на 3-м циклоне..

На счёт времени запуска PLL - это только в начале, после старта плиски, пару десятков клоков он конфигурироваться будет, а потом выставит валид и будет работать пока питание не пропадёт. Или у вас жёсткие условия начала работы после включения питания ?

И на счёт камня - какой именно циклончик ? а то может у вас клок приходит не на дедикейтед лапы и тогда и с ALTLVDS нужно будет тоже сильно колдовать 07.gif

Как говорится - "..огласите весь список пжалуста.." laughing.gif
Go to the top of the page
 
+Quote Post
IT_Pavel
сообщение Aug 27 2009, 12:42
Сообщение #15





Группа: Участник
Сообщений: 10
Регистрация: 29-10-07
Пользователь №: 31 849



А вы правильно подключили ножки ПЛИС? Входной клок подается на ножки DIFFCLK ?
Вместо конструкций: "if (ic='0') then i:=0; sta<='0';" используйте: if falling_edge(inclk) then ...
вместо "if ic='1' then ..." используйте "if rising_edge(inclk) then ..." Если подаете тактовый сигнал, то и используйте его.

Если есть сомнения происходит ли передача данных вообще, то можно это посмотреть в SignalTap.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st September 2017 - 08:58
Рейтинг@Mail.ru


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