Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передатчик CSI-2 на CycloneIII
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Max42
Добрый день.
Пытаемся реализовать преобразователь HD-SDI видео в формат MIPI CSI-2. Схема проста: SDI проходит эквалайзер, реклокер и десериализотор, затем в виде 20-разрядного параллельного потока поступает в ПЛИС (EP3C16Q240C8), которая должна его должным образом обработать и в виде CSI-2 выдать наружу, чтобы затем подцепить Raspberry.
Интерфейс CSI-2 оказался весьма непростым, его физический уровень представляет собой сочетание дифференциального тактового сигнала и от 1 до N двухуровневых дифференциальных пар, работающих в низкоскоростном служебном (LP, low power) и высокоскоростном (HS, high speed, для передачи данных) режимах:



Как реализовать такой режим подсмотрели в отладочной плате 10m50 eval board от той же Altera. С единственным отличием - там используется другое семейство ПЛИС, MAX10 (10M50DAF484C6GES). Нами были выбраны соответствующие диф пары и режимы работы выходных ног ПЛИС:



CODE
set_location_assignment PIN_146 -to TX_HS_CN
set_location_assignment PIN_147 -to TX_HS_CP
set_location_assignment PIN_135 -to TX_HS_DN0
set_location_assignment PIN_142 -to TX_HS_DN1
set_location_assignment PIN_137 -to TX_HS_DP0
set_location_assignment PIN_143 -to TX_HS_DP1
set_instance_assignment -name IO_STANDARD "1.8-V HSTL CLASS I" -to TX_HS_CN
set_instance_assignment -name IO_STANDARD "1.8-V HSTL CLASS I" -to TX_HS_CP
set_instance_assignment -name IO_STANDARD "1.8-V HSTL CLASS I" -to TX_HS_DN0
set_instance_assignment -name IO_STANDARD "1.8-V HSTL CLASS I" -to TX_HS_DN1
set_instance_assignment -name IO_STANDARD "1.8-V HSTL CLASS I" -to TX_HS_DP0
set_instance_assignment -name IO_STANDARD "1.8-V HSTL CLASS I" -to TX_HS_DP1

Таким образом на физическом уровне мы выдержали все рекомендации, которые удалось найти.
Далее создали простой тестовый проект в Quartus9.1 для передатчика данных по SCI-2. На данном этапе нам необходимо убедиться, что выбранные нами порты ПЛИС поддерживают требуемые стандарты, и что фиттер всё сможет развести хотя бы в таком примитивном виде. Не хотелось бы попадать в ситуацию, когда печатные платы уже произведены, и только потом обнаружить, что развели их неправильно.
Quartus выдал следующий варнинг:
Error: Pin "TX_HS_CP" requires a pseudo-differential I/O assignment.
Error: Can't fit design in device


В Assignment Editor не удалось найти подходящий настроек, чтобы убрать данную ошибку. Да и не понятно откуда ей взяться, ведь всё повторили по примеру вышеуказанной эволюшен боард.
Кто-нибудь сталкивался с подобным? Что можете посоветовать попробовать?
Max42
Цитата(Realking @ Apr 19 2018, 15:22) *

Написано лишь:
differential SSTL or HSTL outputs can only be implemented as single-ended pseudo-differential outputs

Но оно и так понятно, не зря мы в качестве I/O стандарта в Pin Planer выбрали 1.8-V HSTL Class I (который как раз single-ended), хотя там можно было б указать Differential 1.8-V HSTL Class I.
Realking
Цитата(Max42 @ Apr 19 2018, 15:37) *
Написано лишь:
differential SSTL or HSTL outputs can only be implemented as single-ended pseudo-differential outputs

Но оно и так понятно, не зря мы в качестве I/O стандарта в Pin Planer выбрали 1.8-V HSTL Class I (который как раз single-ended), хотя там можно было б указать Differential 1.8-V HSTL Class I.


код покажи
какой примитив юзаешь?
XVR
Цитата(Max42 @ Apr 19 2018, 14:15) *
CODE
set_location_assignment PIN_146 -to TX_HS_CN

Quartus выдал следующий варнинг:
Error: Pin "TX_HS_CP" requires a pseudo-differential I/O assignment.
Error: Can't fit design in device
Проверьте ваш PIN_146 на FPGA - скорее всего он не поддерживает 'pseudo-differential I/O'

Max42
Цитата(Realking @ Apr 19 2018, 16:23) *
код покажи
какой примитив юзаешь?

Кода нет, есть простейшая реализация на счётчике и мегафункции ALTLVDS (в 9 Квартусе другого не нашёл) в графическом виде:



Цитата(XVR)
Проверьте ваш PIN_146 на FPGA - скорее всего он не поддерживает 'pseudo-differential I/O'

Дифференциальный режим точно поддерживает:


А как проверить его на соответствие псевдо-дифференциальности?
AVR
Цитата(Max42 @ Apr 19 2018, 17:13) *
Кода нет, есть простейшая реализация на счётчике и мегафункции ALTLVDS (в 9 Квартусе другого не нашёл) в графическом виде:

Зачем на этой схеме буфер с управлением от button? Нельзя ли попробовать без него?
Для сериализации 56МГц*8бит в 448МГц*1бит точно ли нужен именно ALTLVDS, а не какое-то другое IP-ядро?
Max42
Цитата(AVR @ Apr 19 2018, 17:23) *
Зачем на этой схеме буфер с управлением от button? Нельзя ли попробовать без него?

Буфер нужен для возможности переводить вывод в z-состояние, это нужно для реализация CSI. Сам буфер физически размещается непосредственно в ноге ПЛИС ("Fast Output Enable Register" в Assignment Editor).
В любом случае, без него - та же самая ошибка вылезает.

Цитата(AVR @ Apr 19 2018, 17:23) *
Для сериализации 56МГц*8бит в 448МГц*1бит точно ли нужен именно ALTLVDS, а не какое-то другое IP-ядро?

Вот это и я бы хотел узнать.
Realking
Цитата(Max42 @ Apr 19 2018, 17:36) *
Буфер нужен для возможности переводить вывод в z-состояние, это нужно для реализация CSI. Сам буфер физически размещается непосредственно в ноге ПЛИС ("Fast Output Enable Register" в Assignment Editor).
В любом случае, без него - та же самая ошибка вылезает.


Вот это и я бы хотел узнать.


просто в циклоне 5 я юзал cyclonev_pseudo_diff_out

и уже после него 2 ALTIOBUF

в циклоне 3 скорее всего тоже есть чтото подобное

думаю (даже уверен), что в мегавизарде ALTIOBUF , если поставить use differential mode - pseudo_diff автоматом встроится
XVR
Цитата(Max42 @ Apr 19 2018, 17:13) *
А как проверить его на соответствие псевдо-дифференциальности?

Скачайте отсюда https://www.altera.com/support/literature/l...tml#cyclone-iii таблицу с пинаутом и посмотрите в ней
AVR
Цитата(XVR @ Apr 20 2018, 08:50) *
Скачайте отсюда https://www.altera.com/support/literature/l...tml#cyclone-iii таблицу с пинаутом и посмотрите в ней

Мне стало любопытно и я скачал для примера https://www.altera.com/content/dam/altera-w...one3/ep3c16.pdf
Чтоб мне провалиться на этом самом месте, если там есть хоть единое упоминание слова "pseudo".
Нет ли никакой ошибки? Это правильная ссылка? На что смотреть в таблице???
Max42
Цитата(XVR @ Apr 20 2018, 08:50) *
Скачайте отсюда https://www.altera.com/support/literature/l...tml#cyclone-iii таблицу с пинаутом и посмотрите в ней

Выбранные мной пины поддерживают дифференциальный режим, в таблице это указано ровно как и в пинпланере (рисунок прикреплял ранее). Но поддержка псевдо-дифференциальности не указана нигде. Сами то смотрели?

Цитата(Realking)
думаю (даже уверен), что в мегавизарде ALTIOBUF , если поставить use differential mode - pseudo_diff автоматом встроится

Мегафункция ALTIOBUF нашлась. Режим псевдо-дифференциальных выходов подключился. Но фиттер всё равно ругается:

1) Если стандарты выводов выбираем 1.8-V HSTL Class I:
Error: Can't place node "TX_HS_CP" -- node is a differential I/O node

2) Если стандарты выводов выбираем Differential 1.8-V HSTL Class I:
Error: Can't place differential I/O pins and/or associated SERDES transmitters or receivers -- location assignments are illegal
Error: Pin "TX_HS_CP" with Differential 1.8-V HSTL Class I I/O standard must be driven by the external clock output of an enhanced PLL

Т.е. вроде как продвижение есть. Получается, что выводы выбраны правильно, осталось только подключить некую enhanced PLL. Кто-нибудь знает что это за зверь такой?
В мегафункции сериализации ALTLVDS есть такая галка Use External PLL, но при её активации ничего не меняется.
XVR
Про дифференциальные HSTL можете забыть сразу:
Цитата
The
differential HSTL input standard is available on GCLK pins only, treating the
differential inputs as two single-ended HSTL and only decoding one of them. The
differential HSTL output standard is only supported at the PLL#_CLKOUT pins using
two single-ended HSTL output buffers (PLL#_CLKOUTp and PLL#_CLKOUTn), with the
second output programmed to have opposite polarity.

https://www.altera.com/content/dam/altera-w...iv/cyiv-5v1.pdf стр 141 (6-35)
Max42
Цитата(XVR @ Apr 23 2018, 17:23) *
Про дифференциальные HSTL можете забыть сразу:

https://www.altera.com/content/dam/altera-w...iv/cyiv-5v1.pdf стр 141 (6-35)

Когда тестировал назначение дифференциального режима выбирал пин 117 для p-полярности. Второй (пин 118) Квартус для n-полярности подставил сам. Это и есть PLL4_CLKOUTx - выводы у моего циклона. Получается, ошибок быть не должно, но они есть.
Max42
Получается так, что если убрать функцию ALTLVDS, то появляется возможность управлять выводами по отдельности (в стандарте 1.8-V HSTL Class I).
А с ней - не хочет хоть ты убейся.

Существует ли какой-нибудь ещё способ засерилизовать параллельный поток данных, чтоб несколько сот Мбит потянуло?
Flip-fl0p
Цитата(Max42 @ Apr 24 2018, 10:55) *
Получается так, что если убрать функцию ALTLVDS, то появляется возможность управлять выводами по отдельности (в стандарте 1.8-V HSTL Class I).
А с ней - не хочет хоть ты убейся.

Существует ли какой-нибудь ещё способ засерилизовать параллельный поток данных, чтоб несколько сот Мбит потянуло?

LVDS приемник я писал свой. Максимум по спецификации на чип вытягивал.
Не думаю, что нельзя написать свой передатчик.
P.S. Главное, чтобы выходы с DDR регистров можно было назначить на соответствующий стандарт.
AVR
Цитата(Flip-fl0p @ Apr 24 2018, 11:04) *
LVDS приемник я писал свой. Максимум по спецификации на чип вытягивал.
Не думаю, что нельзя написать свой передатчик.
P.S. Главное, чтобы выходы с DDR регистров можно было назначить на соответствующий стандарт.

Я немного удивлен, разве ALTLVDS не использует некий аппаратный компонент? Неужели там простейшая логика, которая тактируется на допустим восьмикратной частоте от обычного PLL? А как же синхронизация?

Насколько я понял, у автора темы проблема, что "по отдельности выводы работают в HSTL" на соответствующих выводах. А добавление ALTLVDS всё ломает.
Flip-fl0p
Цитата(AVR @ Apr 24 2018, 11:16) *
Я немного удивлен, разве ALTLVDS не использует некий аппаратный компонент? Неужели там простейшая логика, которая тактируется на допустим восьмикратной частоте от обычного PLL? А как же синхронизация?

Насколько я понял, у автора темы проблема, что "по отдельности выводы работают в HSTL" на соответствующих выводах. А добавление ALTLVDS всё ломает.

Писал свой приемник для cyclone V. Среди аппаратных блоков - там есть специальный высокоскоростной FIFO буфер и DDR регистр по входу. FIFO буфер подключается только при использовании мегафункции ALT_LVDS_RX. К сожалению, найти способ как получить доступ к этому буферу в обход мегафункции я не нашел. Однако полноценные 800 Mbs по спецификации и даже чуточку больше я получил.
Насколько я помню, в cyclone III есть только DDR регистры во входных\выходных ножках. А вот высокоскоростного FIFO там нет. Поэтому и считаю, что приемник или передатчик можно написать самому применяя примитивы DDR регистров.
AVR
Цитата(Flip-fl0p @ Apr 24 2018, 12:25) *
Насколько я помню, в cyclone III есть только DDR регистры во входных\выходных ножках. А вот высокоскоростного FIFO там нет. Поэтому и считаю, что приемник или передатчик можно написать самому применяя примитивы DDR регистров.

Ясно, получается, для вывода 400 Мбит достаточно лишь заклокать DDR регистр от 200 МГц? Учитывая малую локализацию этого кусочка схемы, на такой частоте вполне заведется.
Flip-fl0p
Цитата(AVR @ Apr 24 2018, 12:29) *
Ясно, получается, для вывода 400 Мбит достаточно лишь заклокать DDR регистр от 200 МГц? Учитывая малую локализацию этого кусочка схемы, на такой частоте вполне заведется.

Именно так.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.