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

Передатчик CSI-2 на CycloneIII

Добрый день.

Пытаемся реализовать преобразователь HD-SDI видео в формат MIPI CSI-2. Схема проста: SDI проходит эквалайзер, реклокер и десериализотор, затем в виде 20-разрядного параллельного потока поступает в ПЛИС (EP3C16Q240C8), которая должна его должным образом обработать и в виде CSI-2 выдать наружу, чтобы затем подцепить Raspberry.

Интерфейс CSI-2 оказался весьма непростым, его физический уровень представляет собой сочетание дифференциального тактового сигнала и от 1 до N двухуровневых дифференциальных пар, работающих в низкоскоростном служебном (LP, low power) и высокоскоростном (HS, high speed, для передачи данных) режимах:

 

Pict_1.jpg

 

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

 

Pict_2.jpg

 

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 не удалось найти подходящий настроек, чтобы убрать данную ошибку. Да и не понятно откуда ей взяться, ведь всё повторили по примеру вышеуказанной эволюшен боард.

Кто-нибудь сталкивался с подобным? Что можете посоветовать попробовать?

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


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

Написано лишь:

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.

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


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

Написано лишь:

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.

 

код покажи

какой примитив юзаешь?

 

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


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

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'

 

 

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


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

код покажи

какой примитив юзаешь?

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

Pict_3.jpg

 

 

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

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

Pict_4.jpg

 

А как проверить его на соответствие псевдо-дифференциальности?

Изменено пользователем Max42

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


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

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

Зачем на этой схеме буфер с управлением от button? Нельзя ли попробовать без него?

Для сериализации 56МГц*8бит в 448МГц*1бит точно ли нужен именно ALTLVDS, а не какое-то другое IP-ядро?

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


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

Зачем на этой схеме буфер с управлением от button? Нельзя ли попробовать без него?

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

В любом случае, без него - та же самая ошибка вылезает.

 

Для сериализации 56МГц*8бит в 448МГц*1бит точно ли нужен именно ALTLVDS, а не какое-то другое IP-ядро?

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

Изменено пользователем Max42

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


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

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

В любом случае, без него - та же самая ошибка вылезает.

 

 

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

 

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

 

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

 

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

 

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

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


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

А как проверить его на соответствие псевдо-дифференциальности?

Скачайте отсюда https://www.altera.com/support/literature/l...tml#cyclone-iii таблицу с пинаутом и посмотрите в ней

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


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

Скачайте отсюда https://www.altera.com/support/literature/l...tml#cyclone-iii таблицу с пинаутом и посмотрите в ней

Мне стало любопытно и я скачал для примера https://www.altera.com/content/dam/altera-w...one3/ep3c16.pdf

Чтоб мне провалиться на этом самом месте, если там есть хоть единое упоминание слова "pseudo".

Нет ли никакой ошибки? Это правильная ссылка? На что смотреть в таблице???

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


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

Скачайте отсюда https://www.altera.com/support/literature/l...tml#cyclone-iii таблицу с пинаутом и посмотрите в ней

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

 

думаю (даже уверен), что в мегавизарде 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, но при её активации ничего не меняется.

 

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


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

Про дифференциальные 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)

 

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


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

Про дифференциальные HSTL можете забыть сразу:

 

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

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

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


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

Получается так, что если убрать функцию ALTLVDS, то появляется возможность управлять выводами по отдельности (в стандарте 1.8-V HSTL Class I).

А с ней - не хочет хоть ты убейся.

 

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

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


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

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

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

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

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

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

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

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

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

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