Max42 0 19 апреля, 2018 Опубликовано 19 апреля, 2018 · Жалоба Добрый день. Пытаемся реализовать преобразователь 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). Нами были выбраны соответствующие диф пары и режимы работы выходных ног ПЛИС: 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 не удалось найти подходящий настроек, чтобы убрать данную ошибку. Да и не понятно откуда ей взяться, ведь всё повторили по примеру вышеуказанной эволюшен боард. Кто-нибудь сталкивался с подобным? Что можете посоветовать попробовать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Realking 0 19 апреля, 2018 Опубликовано 19 апреля, 2018 · Жалоба https://www.altera.com/support/support-reso...032014_345.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Max42 0 19 апреля, 2018 Опубликовано 19 апреля, 2018 · Жалоба https://www.altera.com/support/support-reso...032014_345.html Написано лишь: 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 0 19 апреля, 2018 Опубликовано 19 апреля, 2018 · Жалоба Написано лишь: 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 12 19 апреля, 2018 Опубликовано 19 апреля, 2018 · Жалоба 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 0 19 апреля, 2018 Опубликовано 19 апреля, 2018 (изменено) · Жалоба код покажи какой примитив юзаешь? Кода нет, есть простейшая реализация на счётчике и мегафункции ALTLVDS (в 9 Квартусе другого не нашёл) в графическом виде: Проверьте ваш PIN_146 на FPGA - скорее всего он не поддерживает 'pseudo-differential I/O' Дифференциальный режим точно поддерживает: А как проверить его на соответствие псевдо-дифференциальности? Изменено 19 апреля, 2018 пользователем Max42 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 19 апреля, 2018 Опубликовано 19 апреля, 2018 · Жалоба Кода нет, есть простейшая реализация на счётчике и мегафункции ALTLVDS (в 9 Квартусе другого не нашёл) в графическом виде: Зачем на этой схеме буфер с управлением от button? Нельзя ли попробовать без него? Для сериализации 56МГц*8бит в 448МГц*1бит точно ли нужен именно ALTLVDS, а не какое-то другое IP-ядро? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Max42 0 19 апреля, 2018 Опубликовано 19 апреля, 2018 (изменено) · Жалоба Зачем на этой схеме буфер с управлением от button? Нельзя ли попробовать без него? Буфер нужен для возможности переводить вывод в z-состояние, это нужно для реализация CSI. Сам буфер физически размещается непосредственно в ноге ПЛИС ("Fast Output Enable Register" в Assignment Editor). В любом случае, без него - та же самая ошибка вылезает. Для сериализации 56МГц*8бит в 448МГц*1бит точно ли нужен именно ALTLVDS, а не какое-то другое IP-ядро? Вот это и я бы хотел узнать. Изменено 19 апреля, 2018 пользователем Max42 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Realking 0 20 апреля, 2018 Опубликовано 20 апреля, 2018 · Жалоба Буфер нужен для возможности переводить вывод в z-состояние, это нужно для реализация CSI. Сам буфер физически размещается непосредственно в ноге ПЛИС ("Fast Output Enable Register" в Assignment Editor). В любом случае, без него - та же самая ошибка вылезает. Вот это и я бы хотел узнать. просто в циклоне 5 я юзал cyclonev_pseudo_diff_out и уже после него 2 ALTIOBUF в циклоне 3 скорее всего тоже есть чтото подобное думаю (даже уверен), что в мегавизарде ALTIOBUF , если поставить use differential mode - pseudo_diff автоматом встроится Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 20 апреля, 2018 Опубликовано 20 апреля, 2018 · Жалоба А как проверить его на соответствие псевдо-дифференциальности? Скачайте отсюда https://www.altera.com/support/literature/l...tml#cyclone-iii таблицу с пинаутом и посмотрите в ней Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 22 апреля, 2018 Опубликовано 22 апреля, 2018 · Жалоба Скачайте отсюда https://www.altera.com/support/literature/l...tml#cyclone-iii таблицу с пинаутом и посмотрите в ней Мне стало любопытно и я скачал для примера https://www.altera.com/content/dam/altera-w...one3/ep3c16.pdf Чтоб мне провалиться на этом самом месте, если там есть хоть единое упоминание слова "pseudo". Нет ли никакой ошибки? Это правильная ссылка? На что смотреть в таблице??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Max42 0 23 апреля, 2018 Опубликовано 23 апреля, 2018 · Жалоба Скачайте отсюда 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, но при её активации ничего не меняется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 23 апреля, 2018 Опубликовано 23 апреля, 2018 · Жалоба Про дифференциальные 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 0 23 апреля, 2018 Опубликовано 23 апреля, 2018 · Жалоба Про дифференциальные HSTL можете забыть сразу: https://www.altera.com/content/dam/altera-w...iv/cyiv-5v1.pdf стр 141 (6-35) Когда тестировал назначение дифференциального режима выбирал пин 117 для p-полярности. Второй (пин 118) Квартус для n-полярности подставил сам. Это и есть PLL4_CLKOUTx - выводы у моего циклона. Получается, ошибок быть не должно, но они есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Max42 0 24 апреля, 2018 Опубликовано 24 апреля, 2018 · Жалоба Получается так, что если убрать функцию ALTLVDS, то появляется возможность управлять выводами по отдельности (в стандарте 1.8-V HSTL Class I). А с ней - не хочет хоть ты убейся. Существует ли какой-нибудь ещё способ засерилизовать параллельный поток данных, чтоб несколько сот Мбит потянуло? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться