Jump to content

    
Петр Юркевич

Настройка LVDS на Cyclone V

Recommended Posts

Здравствуйте!

Стоит задача генерировать внутри ПЛИС Altera Cyclone V (кит Terasic DE1-SoC) при помощи PLL некоторую частоту, передавать её на выход LVDS и принимать на другой вход этой же ПЛИС (необходимо для отладки частотомера).

По поводу LVDS долго пытался вчитываться в Cyclone V Handbook, но понял только то, что надо использовать функции Квартуса для приёма и передачи сигнала LVDS. Насколько я понял, при назначении в Pin Planner стандарта LVDS Квартус сам назначает пару выбранному пину. Информацию по поводу пар дифференциальных пинов нигде не смог найти. Я выбрал GPIO[12] и GPIO[14] (парные 15 и 13). Дальше создал входной и выходной буферы (ALTIOBUF), которые должны преобразовывать сигнал из моно в дифференциальный и обратно.

LVDS_BUF_IN lvds_in
(
	
	.datain(GPIO[15]),
	.datain_b(GPIO[12]),
	.dataout(clk_in)
	
);

LVDS_BUF_OUT lvds_out
(
	
	.datain(clk_0_2),
	.dataout_b(GPIO[13]),
	.dataout(GPIO[14])
	
);

По поводу выходной пары у Квартуса вопросов не возникло, а на входные пины вылезла ошибка: Error (169008): Can't turn on open-drain option for differential I/O pin GPIO[12]. И аналогичная на 15-й пин.

Если не создавать буфер, на выходную пару вылезает такая же ошибка, я читал, что Квартус не пропускает неправильно настроенные пины LVDS. Я знаю, что в LVDS должен быть на входе резистор между линиями. Может быть, ошибка из-за его отсутствия в программе? И его как-то настроить надо в самой ПЛИС?

Share this post


Link to post
Share on other sites
On 9/11/2020 at 12:42 AM, Петр Юркевич said:

Здравствуйте!

Стоит задача генерировать внутри ПЛИС Altera Cyclone V (кит Terasic DE1-SoC) при помощи PLL некоторую частоту, передавать её на выход LVDS и принимать на другой вход этой же ПЛИС (необходимо для отладки частотомера).

По поводу LVDS долго пытался вчитываться в Cyclone V Handbook, но понял только то, что надо использовать функции Квартуса для приёма и передачи сигнала LVDS. Насколько я понял, при назначении в Pin Planner стандарта LVDS Квартус сам назначает пару выбранному пину. Информацию по поводу пар дифференциальных пинов нигде не смог найти. Я выбрал GPIO[12] и GPIO[14] (парные 15 и 13). Дальше создал входной и выходной буферы (ALTIOBUF), которые должны преобразовывать сигнал из моно в дифференциальный и обратно.


LVDS_BUF_IN lvds_in
(
	
	.datain(GPIO[15]),
	.datain_b(GPIO[12]),
	.dataout(clk_in)
	
);

LVDS_BUF_OUT lvds_out
(
	
	.datain(clk_0_2),
	.dataout_b(GPIO[13]),
	.dataout(GPIO[14])
	
);

По поводу выходной пары у Квартуса вопросов не возникло, а на входные пины вылезла ошибка: Error (169008): Can't turn on open-drain option for differential I/O pin GPIO[12]. И аналогичная на 15-й пин.

Если не создавать буфер, на выходную пару вылезает такая же ошибка, я читал, что Квартус не пропускает неправильно настроенные пины LVDS. Я знаю, что в LVDS должен быть на входе резистор между линиями. Может быть, ошибка из-за его отсутствия в программе? И его как-то настроить надо в самой ПЛИС?

прошу прощения, найдите Pin Planner, скажите что у вас стандарт LVDS на выбранных пинах по входу,

может полегчает?

На приемном конце LVDS как можно ближе должен стоять 100 ом (обычно 0402),

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

 

И еще конечно сигналы должны быть разведены дифференциальными парами.

 

Информация про дифф пары - в PIn Planner слева пиктограммы вертикальные

Edited by En_Serg

Share this post


Link to post
Share on other sites
6 часов назад, En_Serg сказал:

прошу прощения, найдите Pin Planner, скажите что у вас стандарт LVDS на выбранных пинах по входу,

может полегчает?

На приемном конце LVDS как можно ближе должен стоять 100 ом (обычно 0402),

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

 

И еще конечно сигналы должны быть разведены дифференциальными парами.

 

Информация про дифф пары - в PIn Planner слева пиктограммы вертикальные

 

Спасибо за ответ! В принципе, уже разобрался. Была проблема в неправильном напряжении питания банка выводов (для LVDS требовалось 2.5, а стояло 3.3). Пришлось искусственно в Квартусе менять. А буферы даже не пригодились, оказалось, что можно просто подключаться к положительному выводу, назначенному как LVDS. При этом Квартус сам разбирается и формирует входной и выходной буферы (с резистором он видимо сам как-то порешал).

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.