john72 0 6 марта, 2017 Опубликовано 6 марта, 2017 (изменено) · Жалоба Добрый день! Посоветуйте, как правильно реализовать. Имеется 4 асинхронных друг от друга входные группы сигналов I2S (сигналы data, lrck, bck внутри одной группы между собой синхронны). Необходимо переключать эти группы на выход и полученную на выходе группу сигналов необходимо перепривязать к другому тактовому сигналу (EXTERNAL) асинхронному входным сигналам I2S. Сетки частот групп сигналов I2S могут быть разными (lrck - 44,1; 48; 88,2; 96 ... 384 KHz соответственно меняется bck от 2,8 MHz до 24,576 MHz), Данные могут быть 16 или 24 бита. Может просто отсутствовать группа сигналов I2S по любому из входов, это нормально. Иными словами, на одном из входов может быть 48 kHz, 24 bit, на другом входе - 88,2 kHz, 16 bit. Как правильно это сделать? 1. Входные сигналы каждой групп завести на мультиплексоры, переключать, потом подать dual clock FIFO, получить новую стеку сигналов lrck, bck привязанную к тактовому сигналу (EXTERNAL). 2. Установить на каждой входной группе I2S по dual clock FIFO, получить новую стеку сигналов lrck, bck привязанную к тактовому сигналу (EXTERNAL) и подать на мультиплексоры? 3. Что-то другое? PLL в предложенных мною вариантах не задействовано. Может вместо DC FIFO использовать dual clock RAM? Изменено 6 марта, 2017 пользователем Evgeny72 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 6 марта, 2017 Опубликовано 6 марта, 2017 · Жалоба Добрый день! Посоветуйте, как правильно реализовать. Имеется 4 асинхронных друг от друга входные группы сигналов I2S (сигналы data, lrck, bck внутри одной группы между собой синхронны). Необходимо переключать эти группы на выход и полученную на выходе группу сигналов необходимо перепривязать к другому тактовому сигналу (EXTERNAL) асинхронному входным сигналам I2S. Сетки частот групп сигналов I2S могут быть разными (lrck - 44,1; 48; 88,2; 96 ... KHz соответственно меняется bck), Данные могут быть 16 или 24 бита. Может просто отсутствовать группа сигналов I2S по любому из входов, это нормально. Иными словами, на одном из входов может быть 48 kHz, 24 bit, на другом входе - 88,2 kHz, 16 bit. Как правильно это сделать? 1. Входные сигналы каждой групп завести на мультиплексоры, переключать, потом подать dual clock FIFO, получить новую стеку сигналов lrck, bck привязанную к тактовому сигналу (EXTERNAL). 2. Установить на каждой входной группе I2S по dual clock FIFO, получить новую стеку сигналов lrck, bck привязанную к тактовому сигналу (EXTERNAL) и подать на мультиплексоры? 3. Что-то другое? PLL в предложенных мною вариантах не задействовано. Может вместо DC FIFO использовать dual clock RAM? Даже 96 KHz это гораздо меньше, чем 50 или 100 Мгц частоты всего остального проекта. Я бы сразу же на входе сделал привязку к системной частоте через пару триггеров. И потом бы сделал автоматы для приема-передачи... По поводу FIFO... А что на 50 или 100 Мгц Вы не успеете принять 96 кГц? Зачем оно нужно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Burenkov 0 6 марта, 2017 Опубликовано 6 марта, 2017 · Жалоба Добрый день! Посоветуйте, как правильно реализовать. Имеется 4 асинхронных друг от друга входные группы сигналов I2S (сигналы data, lrck, bck внутри одной группы между собой синхронны). Необходимо переключать эти группы на выход и полученную на выходе группу сигналов необходимо перепривязать к другому тактовому сигналу (EXTERNAL) асинхронному входным сигналам I2S. Сетки частот групп сигналов I2S могут быть разными (lrck - 44,1; 48; 88,2; 96 ... KHz соответственно меняется bck), Данные могут быть 16 или 24 бита. Может просто отсутствовать группа сигналов I2S по любому из входов, это нормально. Иными словами, на одном из входов может быть 48 kHz, 24 bit, на другом входе - 88,2 kHz, 16 bit. Как правильно это сделать? 1. Входные сигналы каждой групп завести на мультиплексоры, переключать, потом подать dual clock FIFO, получить новую стеку сигналов lrck, bck привязанную к тактовому сигналу (EXTERNAL). 2. Установить на каждой входной группе I2S по dual clock FIFO, получить новую стеку сигналов lrck, bck привязанную к тактовому сигналу (EXTERNAL) и подать на мультиплексоры? 3. Что-то другое? PLL в предложенных мною вариантах не задействовано. Может вместо DC FIFO использовать dual clock RAM? Если у вас источники синхронизации разные, то нужно придумывать аналог frame rate converter, даже самый небольшой расснинхрон частоты рано или поздно приведет к переполнению фифо вверх или вниз. Я бы на каждый вход завел буфер в памяти и писал туда постоянно, а выходной блок начинал бы читать из нужного буфера в соответствии с тем с какого входа надо брать данные. Не понятно что вы хотите сделать с sample rate... Пересемплирование это вообще отдельная песня:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 6 марта, 2017 Опубликовано 6 марта, 2017 (изменено) · Жалоба Спрошу наверное в этой-же теме. У меня вопрос возник по физическому подключению к шине I2C. Как правильно выводы SLAVE устройства , реализованного в FPGA, подключать на эту шину ? Естественно порты будут назначены в файле верхнего уровня как INOUT. Требуется ли рекомендуемая подтяжка выводов к питанию через резистор 10 кОм ? На макетной плате все пользовательские выводы имеют токоограничивающий резистор, и защиту от перенапряжения через 2 диода Шоттки. Основная задача, которую я хочу решить: хочу реализовать минимальный DDC (display data channel) на FPGA. Для того, чтобы источник DVI сигнала считал по этому интерфейсу данные о матрице и формировал сигнал под нужное мне разрешение. Физически общение происходит по I2C, собственно и начал осваивать этот интерфейс. Изменено 6 марта, 2017 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
john72 0 6 марта, 2017 Опубликовано 6 марта, 2017 (изменено) · Жалоба Не понятно что вы хотите сделать с sample rate... Пересемплирование это вообще отдельная песня:) sample rate и frequency lrck, bck будут без изменений, т.е. что на входе, то и на выходе должно быть. Изменено 6 марта, 2017 пользователем Evgeny72 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zxcv 0 6 марта, 2017 Опубликовано 6 марта, 2017 · Жалоба Имеется 4 асинхронных друг от друга входные группы сигналов I2S ... 1. Для этого есть специальные микросхемы: SRC (Sample Rste Converters) Их делают в том числе Cirrus Logic и Analog Devices 2. У Xilinx до ISE 14.2 для Spartan 6 и Virtex 6 была Asynchronous Sample Rate Converter Core 3. У Xilinx есть несколько апликух, в которых есть примеры реализации SRC: xapp514 и xapp1014. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба sample rate и frequency lrck, bck будут без изменений, т.е. что на входе, то и на выходе должно быть. Что будет в момент переключения? В одном канале слово уже кончилось, а в другом - на середине интервала. "Растянуть" или "подвинуть" нельзя, интерфейсы-то синхронные. ASRC вам корячится, а это довольно непростая штука. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hsoft 0 7 марта, 2017 Опубликовано 7 марта, 2017 (изменено) · Жалоба У меня вопрос возник по физическому подключению к шине I2C. Как правильно выводы SLAVE устройства , реализованного в FPGA, подключать на эту шину ? Естественно порты будут назначены в файле верхнего уровня как INOUT. Требуется ли рекомендуемая подтяжка выводов к питанию через резистор 10 кОм ? Шина I2C несмотря на простоту является на практике основным источником геморроя в России. Просто первое место :) Подтяжка 10К обязательна на обоих линиях, а лучше 2К. В общем касательно I2C если не хотите потратить месяцы на глючную работу этой шины сделайте все строго по рекомендациям, как немцы, очень пунктуально. А как получите стабильную работу упрощайте сколько угодно. Что касается DVI, нельзя с FPGA напрямую тащить линии на разъем DVI где он потом пойдет через кабель на монитор. Правильное решение это поставать буфер I2C и снаружи у разъема обязательно защиту от статики. Или как минимум сделайте как на макетной плате, резисторы по 100 ом последовательно и диоды Шоттки на землю и питание прямо у разъема. Изменено 7 марта, 2017 пользователем hsoft Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 7 марта, 2017 Опубликовано 7 марта, 2017 (изменено) · Жалоба Шина I2C несмотря на простоту является на практике основным источником геморроя в России. Просто первое место :) Подтяжка 10К обязательна на обоих линиях, а лучше 2К. В общем касательно I2C если не хотите потратить месяцы на глючную работу этой шины сделайте все строго по рекомендациям, как немцы, очень пунктуально. А как получите стабильную работу упрощайте сколько угодно. Что касается DVI, нельзя с FPGA напрямую тащить линии на разъем DVI где он потом пойдет через кабель на монитор. Правильное решение это поставать буфер I2C и снаружи у разъема обязательно защиту от статики. Или как минимум сделайте как на макетной плате, резисторы по 100 ом последовательно и диоды Шоттки на землю и питание прямо у разъема. У меня несколько другая задача :rolleyes: Принимаю DVI поток от источника DVI сигнала (например ПК), далее этот поток пересинхронизирую, расшифровываю T.M.D.S декодером. Ну а раскодированные данные я через кадровый буфер вывожу на матрицу через параллельный интерфейс. По сути я делаю свой монитор. Матрица есть и она встроена в макетную плату DE1-SoC-MTL2 . Источник сигнала есть - обычный персональный компьютер. Поэтому основная задача, которую надо решить в первую очередь - сообщить источнику DVI сигнала данные о матрице в соответствии со стандартом VESA. Для этого надо реализовать DDC канал. На сколько я помню у ALTERA есть PULL_UP, PULL_DOWN. Можно же их использовать ? Изменено 7 марта, 2017 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
john72 0 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба 1. Для этого есть специальные микросхемы: SRC (Sample Rste Converters) Спасибо, про микросхемы знаю, с AD1896 работал. Данный вариант не подойдет, как писал выше, входная частота может быть (LRCK) 384 КГц, они работают до 192. (Есть Asahi Kasei для этих же целей. Идея понятна: апсэмплить с разрядностью все до максимально возможного значения завести на ПЛИС, а там коммутировать входа.) И не только по этому не пройдёт вариант - что есть на конкретном входе, то и должно быть на выходе, 1 в 1. За апликухи спасибо! :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hsoft 0 7 марта, 2017 Опубликовано 7 марта, 2017 (изменено) · Жалоба а сколько я помню у ALTERA есть PULL_UP, PULL_DOWN. Можно же их использовать ? Достаточно посмотреть документацию на SoC, там резисторы названы как "weak pull-up" и значение приводится 25К. https://www.altera.com/en_US/pdfs/literatur...-v/cv_51002.pdf стр.16. Использовать такие для шины I2C рискованно. Изменено 7 марта, 2017 пользователем hsoft Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
john72 0 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба Что будет в момент переключения? В одном канале слово уже кончилось, а в другом - на середине интервала. "Растянуть" или "подвинуть" нельзя, интерфейсы-то синхронные. ASRC вам корячится, а это довольно непростая штука. В момент переключения будет потеря данных, безусловно. Это не существенно, т.к. данные на всех входах могут быть разные. Можно сделать data mute на 0,5 -1 сек. по алгоритму: мутируем - переключаем - подаем данные. Снятие mute можно привязать к выходному сигналу lrck. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба В момент переключения будет потеря данных, безусловно. Это не существенно, т.к. данные на всех входах могут быть разные. Можно сделать data mute на 0,5 -1 сек. по алгоритму: мутируем - переключаем - подаем данные. Снятие mute можно привязать к выходному сигналу lrck. Дело не в потере данных. Сама синхра (LRCK,BCK) будет у вас неизбежно дёргаться в момент переключения. Как воспримет эти подергушки принимающее устройство? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
john72 0 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба Дело не в потере данных. Сама синхра (LRCK,BCK) будет у вас неизбежно дёргаться в момент переключения. Как воспримет эти подергушки принимающее устройство? Мало того, что синра будет дергаться в момент переключения, её может вообще нигде не быть какое-то время. Вот почему и назрел этот вопрос. Может предложит кто-то что-то получше, чем придумал. "Как воспримет эти подергушки принимающее устройство?" Конечно, не очень хорошо воспримет, теоретически. Практически - пробный образец делал с применением на выходе микросхемы ЦАП. Коммутировались асинхронные входа I2S без ФИФО. На звуке шелчков при переключении не было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 7 марта, 2017 Опубликовано 7 марта, 2017 (изменено) · Жалоба Достаточно посмотреть документацию на SoC, там резисторы названы как "weak pull-up" и значение приводится 25К. https://www.altera.com/en_US/pdfs/literatur...-v/cv_51002.pdf стр.16. Использовать такие для шины I2C рискованно. Согласен. Но с другой стороны, у нас так-же подтяжка к питанию должна быть выполнена на стороне MASTER (передатчик DVI). И если я включу weak pull-up, он особо на схему влиять и не должен, Другая проблема если на стороне мастера линия не подтянута... Да вроде как и величину подтягивающего резистора по большей части определяет суммарная ёмкость линии. Ёмкость пина - 6 пФ. Думаю вся линия будет не больше 15...20 Пф. Изменено 7 марта, 2017 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться