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

Переключение входов I2S на плис

Добрый день! Посоветуйте, как правильно реализовать. Имеется 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?

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

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


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

Добрый день! Посоветуйте, как правильно реализовать. Имеется 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 кГц? Зачем оно нужно?

 

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


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

Добрый день! Посоветуйте, как правильно реализовать. Имеется 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... Пересемплирование это вообще отдельная песня:)

 

 

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


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

 

Спрошу наверное в этой-же теме.

У меня вопрос возник по физическому подключению к шине I2C.

Как правильно выводы SLAVE устройства , реализованного в FPGA, подключать на эту шину ? Естественно порты будут назначены в файле верхнего уровня как INOUT. Требуется ли рекомендуемая подтяжка выводов к питанию через резистор 10 кОм ? На макетной плате все пользовательские выводы имеют токоограничивающий резистор, и защиту от перенапряжения через 2 диода Шоттки.

Основная задача, которую я хочу решить: хочу реализовать минимальный DDC (display data channel) на FPGA. Для того, чтобы источник DVI сигнала считал по этому интерфейсу данные о матрице и формировал сигнал под нужное мне разрешение. Физически общение происходит по I2C, собственно и начал осваивать этот интерфейс.

Изменено пользователем Flip-fl0p

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


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

Не понятно что вы хотите сделать с sample rate... Пересемплирование это вообще отдельная песня:)

 

sample rate и frequency lrck, bck будут без изменений, т.е. что на входе, то и на выходе должно быть.

 

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

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


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

Имеется 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.

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


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

sample rate и frequency lrck, bck будут без изменений, т.е. что на входе, то и на выходе должно быть.

Что будет в момент переключения? В одном канале слово уже кончилось, а в другом - на середине интервала. "Растянуть" или "подвинуть" нельзя, интерфейсы-то синхронные.

ASRC вам корячится, а это довольно непростая штука.

 

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


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

У меня вопрос возник по физическому подключению к шине I2C.

Как правильно выводы SLAVE устройства , реализованного в FPGA, подключать на эту шину ? Естественно порты будут назначены в файле верхнего уровня как INOUT. Требуется ли рекомендуемая подтяжка выводов к питанию через резистор 10 кОм ?

Шина I2C несмотря на простоту является на практике основным источником геморроя в России. Просто первое место :)

Подтяжка 10К обязательна на обоих линиях, а лучше 2К. В общем касательно I2C если не хотите потратить месяцы на глючную работу этой шины

сделайте все строго по рекомендациям, как немцы, очень пунктуально. А как получите стабильную работу упрощайте сколько угодно.

Что касается DVI, нельзя с FPGA напрямую тащить линии на разъем DVI где он потом пойдет через кабель на монитор.

Правильное решение это поставать буфер I2C и снаружи у разъема обязательно защиту от статики.

Или как минимум сделайте как на макетной плате, резисторы по 100 ом последовательно и диоды Шоттки на землю и питание прямо у разъема.

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

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


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

Шина 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. Можно же их использовать ?

Изменено пользователем Flip-fl0p

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


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

1. Для этого есть специальные микросхемы: SRC (Sample Rste Converters)

 

Спасибо, про микросхемы знаю, с AD1896 работал. Данный вариант не подойдет, как писал выше, входная частота может быть (LRCK) 384 КГц, они работают до 192. (Есть Asahi Kasei для этих же целей. Идея понятна: апсэмплить с разрядностью все до максимально возможного значения завести на ПЛИС, а там коммутировать входа.) И не только по этому не пройдёт вариант - что есть на конкретном входе, то и должно быть на выходе, 1 в 1.

За апликухи спасибо! :rolleyes:

 

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


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

а сколько я помню у ALTERA есть PULL_UP, PULL_DOWN. Можно же их использовать ?

Достаточно посмотреть документацию на SoC, там резисторы названы как "weak pull-up" и значение приводится 25К.

https://www.altera.com/en_US/pdfs/literatur...-v/cv_51002.pdf стр.16.

Использовать такие для шины I2C рискованно.

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

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


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

Что будет в момент переключения? В одном канале слово уже кончилось, а в другом - на середине интервала. "Растянуть" или "подвинуть" нельзя, интерфейсы-то синхронные.

ASRC вам корячится, а это довольно непростая штука.

В момент переключения будет потеря данных, безусловно. Это не существенно, т.к. данные на всех входах могут быть разные. Можно сделать data mute на 0,5 -1 сек. по алгоритму: мутируем - переключаем - подаем данные. Снятие mute можно привязать к выходному сигналу lrck.

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


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

В момент переключения будет потеря данных, безусловно. Это не существенно, т.к. данные на всех входах могут быть разные. Можно сделать data mute на 0,5 -1 сек. по алгоритму: мутируем - переключаем - подаем данные. Снятие mute можно привязать к выходному сигналу lrck.

Дело не в потере данных. Сама синхра (LRCK,BCK) будет у вас неизбежно дёргаться в момент переключения. Как воспримет эти подергушки принимающее устройство?

 

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


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

Дело не в потере данных. Сама синхра (LRCK,BCK) будет у вас неизбежно дёргаться в момент переключения. Как воспримет эти подергушки принимающее устройство?

 

Мало того, что синра будет дергаться в момент переключения, её может вообще нигде не быть какое-то время. Вот почему и назрел этот вопрос. Может предложит кто-то что-то получше, чем придумал.

"Как воспримет эти подергушки принимающее устройство?" Конечно, не очень хорошо воспримет, теоретически.

Практически - пробный образец делал с применением на выходе микросхемы ЦАП. Коммутировались асинхронные входа I2S без ФИФО. На звуке шелчков при переключении не было.

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


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

Достаточно посмотреть документацию на 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 Пф.

Изменено пользователем Flip-fl0p

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


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

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

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

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

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

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

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

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

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

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