Перейти к содержанию
    

Проектирование LVDS на ПЛИС Altera

Кто проектировал канал 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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 yudu - зачем вам чтото городить своё ? Всё уже украдено до вас - есть ALT_LVDS (в мегавизарде) или как то так - там и клок и сериализатор, линий мало, скорость нормальная... Если соединять 2 циклона - с минимум линий и по LVDS - самое оно :laughing:

Там и примеры есть у альтеры как раз рабочие...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

А что делать, если имеется двухпроводной (двухпарный) LVDS, да еще с gated clock?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что делать, если имеется двухпроводной (двухпарный) LVDS, да еще с gated clock?

А с gated clock лучше кого-то застрелить сразу.

Откуда они вообще берутся эти gated clock-и в местах, где применяется LVDS ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А с gated clock лучше кого-то застрелить сразу.

Откуда они вообще берутся эти gated clock-и в местах, где применяется LVDS ?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 yudu - зачем вам чтото городить своё ? Всё уже украдено до вас - есть ALT_LVDS (в мегавизарде) или как то так - там и клок и сериализатор, линий мало, скорость нормальная... Если соединять 2 циклона - с минимум линий и по LVDS - самое оно :laughing:

Там и примеры есть у альтеры как раз рабочие...

 

Все дело в том, что канал LVDS должен давать данные пачками. После передачи должен быть основной режим для остальной части схемы,

а для плиса наступает режим молчания(подведено только питание). И еще, работа плиса должна на момент приема тактироваться сигналом клок(clk),

внешнего кварца нет. Data приходит на выводы 128/129, а клок на 49/50.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А с gated clock лучше кого-то застрелить сразу.

Откуда они вообще берутся эти gated clock-и в местах, где применяется LVDS ?

Например, линк-порты DSP TS201 TigerShark от Analog Devices.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

И что значит

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

Камень какой ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Например, линк-порты DSP TS201 TigerShark от Analog Devices.
Ну это же неправда, там контроль передачи ведется через ACK/BCMP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если

..на этих двух несчастных проводах несколько источников сигнала, ПЛИС и еще кто-то..
то тут действительно ALTLVDS не покатит, но почему не взять I2C, он же TWI, - защищённость от шумов похуже чем у LVDS-ных, но можно много посадить товарищей на шину без особого гемора, да и скорости свои можно задать + корка не сложная..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если то тут действительно ALTLVDS не покатит, но почему не взять I2C, он же TWI, - защищённость от шумов похуже чем у LVDS-ных, но можно много посадить товарищей на шину без особого гемора, да и скорости свои можно задать + корка не сложная..

 

Cyclon3. На проводах никого кроме 2-х плисов. Синхронизация 64 периода, 7 байт данных и 1 адресс. Эта синхронизация для диф. пары

данных и для работы самого плиса. Скорость передачи 100Мб/c.

Для ALTLVDS нужен PLL, для которого в свою очередь нужно время для запуска. Нужно городить самому. Есть предложения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PLL в визарде лучше выбирать встроенную в корку ALT_LVDS. Все работает. проверял на цикло2->циклон3 до 260 мегабит/c по одной линии. единственное требование. CLk должен заходить на входы CLK_IN на плисене. иначе не выдет.

я по началу пытался использовать PLL отдельно сгенерированную - ничего не вышло. самое главное указать на LVDS_RX правильную выходную частоту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 yudu - идеи есть всегда :biggrin:

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

 

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

 

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

 

Как говорится - "..огласите весь список пжалуста.." :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вы правильно подключили ножки ПЛИС? Входной клок подается на ножки DIFFCLK ?

Вместо конструкций: "if (ic='0') then i:=0; sta<='0';" используйте: if falling_edge(inclk) then ...

вместо "if ic='1' then ..." используйте "if rising_edge(inclk) then ..." Если подаете тактовый сигнал, то и используйте его.

 

Если есть сомнения происходит ли передача данных вообще, то можно это посмотреть в SignalTap.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...