реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Переключение входов I2S на плис
Evgeny72
сообщение Mar 6 2017, 11:02
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 4-01-14
Пользователь №: 79 899



Добрый день! Посоветуйте, как правильно реализовать. Имеется 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 - Mar 6 2017, 12:07
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 6 2017, 11:22
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 3 526
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Evgeny72 @ Mar 6 2017, 14:02) *
Добрый день! Посоветуйте, как правильно реализовать. Имеется 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 кГц? Зачем оно нужно?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Burenkov Sergey
сообщение Mar 6 2017, 12:17
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 10-01-13
Пользователь №: 75 145



Цитата(Evgeny72 @ Mar 6 2017, 14:02) *
Добрый день! Посоветуйте, как правильно реализовать. Имеется 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... Пересемплирование это вообще отдельная песняsm.gif

Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Mar 6 2017, 12:20
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 272
Регистрация: 11-06-13
Пользователь №: 77 140




Спрошу наверное в этой-же теме.
У меня вопрос возник по физическому подключению к шине I2C.
Как правильно выводы SLAVE устройства , реализованного в FPGA, подключать на эту шину ? Естественно порты будут назначены в файле верхнего уровня как INOUT. Требуется ли рекомендуемая подтяжка выводов к питанию через резистор 10 кОм ? На макетной плате все пользовательские выводы имеют токоограничивающий резистор, и защиту от перенапряжения через 2 диода Шоттки.
Основная задача, которую я хочу решить: хочу реализовать минимальный DDC (display data channel) на FPGA. Для того, чтобы источник DVI сигнала считал по этому интерфейсу данные о матрице и формировал сигнал под нужное мне разрешение. Физически общение происходит по I2C, собственно и начал осваивать этот интерфейс.

Сообщение отредактировал Flip-fl0p - Mar 6 2017, 12:20
Go to the top of the page
 
+Quote Post
Evgeny72
сообщение Mar 6 2017, 13:00
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 4-01-14
Пользователь №: 79 899



Цитата(Burenkov Sergey @ Mar 6 2017, 16:17) *
Не понятно что вы хотите сделать с sample rate... Пересемплирование это вообще отдельная песняsm.gif


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


Сообщение отредактировал Evgeny72 - Mar 6 2017, 13:06
Go to the top of the page
 
+Quote Post
zxcv
сообщение Mar 6 2017, 19:12
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 10-01-10
Пользователь №: 54 704



Цитата(Evgeny72 @ Mar 6 2017, 14:02) *
Имеется 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.
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Mar 7 2017, 02:45
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 784
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(Evgeny72 @ Mar 6 2017, 20:00) *
sample rate и frequency lrck, bck будут без изменений, т.е. что на входе, то и на выходе должно быть.

Что будет в момент переключения? В одном канале слово уже кончилось, а в другом - на середине интервала. "Растянуть" или "подвинуть" нельзя, интерфейсы-то синхронные.
ASRC вам корячится, а это довольно непростая штука.
Go to the top of the page
 
+Quote Post
hsoft
сообщение Mar 7 2017, 04:15
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 179
Регистрация: 13-02-17
Пользователь №: 95 415



Цитата(Flip-fl0p @ Mar 6 2017, 13:20) *
У меня вопрос возник по физическому подключению к шине I2C.
Как правильно выводы SLAVE устройства , реализованного в FPGA, подключать на эту шину ? Естественно порты будут назначены в файле верхнего уровня как INOUT. Требуется ли рекомендуемая подтяжка выводов к питанию через резистор 10 кОм ?

Шина I2C несмотря на простоту является на практике основным источником геморроя в России. Просто первое место sm.gif
Подтяжка 10К обязательна на обоих линиях, а лучше 2К. В общем касательно I2C если не хотите потратить месяцы на глючную работу этой шины
сделайте все строго по рекомендациям, как немцы, очень пунктуально. А как получите стабильную работу упрощайте сколько угодно.
Что касается DVI, нельзя с FPGA напрямую тащить линии на разъем DVI где он потом пойдет через кабель на монитор.
Правильное решение это поставать буфер I2C и снаружи у разъема обязательно защиту от статики.
Или как минимум сделайте как на макетной плате, резисторы по 100 ом последовательно и диоды Шоттки на землю и питание прямо у разъема.

Сообщение отредактировал hsoft - Mar 7 2017, 04:20
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Mar 7 2017, 05:14
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 272
Регистрация: 11-06-13
Пользователь №: 77 140



Цитата(hsoft @ Mar 7 2017, 07:15) *
Шина I2C несмотря на простоту является на практике основным источником геморроя в России. Просто первое место sm.gif
Подтяжка 10К обязательна на обоих линиях, а лучше 2К. В общем касательно I2C если не хотите потратить месяцы на глючную работу этой шины
сделайте все строго по рекомендациям, как немцы, очень пунктуально. А как получите стабильную работу упрощайте сколько угодно.
Что касается DVI, нельзя с FPGA напрямую тащить линии на разъем DVI где он потом пойдет через кабель на монитор.
Правильное решение это поставать буфер I2C и снаружи у разъема обязательно защиту от статики.
Или как минимум сделайте как на макетной плате, резисторы по 100 ом последовательно и диоды Шоттки на землю и питание прямо у разъема.

У меня несколько другая задача rolleyes.gif Принимаю DVI поток от источника DVI сигнала (например ПК), далее этот поток пересинхронизирую, расшифровываю T.M.D.S декодером. Ну а раскодированные данные я через кадровый буфер вывожу на матрицу через параллельный интерфейс. По сути я делаю свой монитор.
Матрица есть и она встроена в макетную плату DE1-SoC-MTL2 . Источник сигнала есть - обычный персональный компьютер.
Поэтому основная задача, которую надо решить в первую очередь - сообщить источнику DVI сигнала данные о матрице в соответствии со стандартом VESA. Для этого надо реализовать DDC канал.
На сколько я помню у ALTERA есть PULL_UP, PULL_DOWN. Можно же их использовать ?

Сообщение отредактировал Flip-fl0p - Mar 7 2017, 05:19
Go to the top of the page
 
+Quote Post
Evgeny72
сообщение Mar 7 2017, 05:35
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 4-01-14
Пользователь №: 79 899



Цитата(zxcv @ Mar 6 2017, 23:12) *
1. Для этого есть специальные микросхемы: SRC (Sample Rste Converters)


Спасибо, про микросхемы знаю, с AD1896 работал. Данный вариант не подойдет, как писал выше, входная частота может быть (LRCK) 384 КГц, они работают до 192. (Есть Asahi Kasei для этих же целей. Идея понятна: апсэмплить с разрядностью все до максимально возможного значения завести на ПЛИС, а там коммутировать входа.) И не только по этому не пройдёт вариант - что есть на конкретном входе, то и должно быть на выходе, 1 в 1.
За апликухи спасибо! rolleyes.gif
Go to the top of the page
 
+Quote Post
hsoft
сообщение Mar 7 2017, 05:39
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 179
Регистрация: 13-02-17
Пользователь №: 95 415



Цитата(Flip-fl0p @ Mar 7 2017, 06:14) *
а сколько я помню у 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 - Mar 7 2017, 05:42
Go to the top of the page
 
+Quote Post
Evgeny72
сообщение Mar 7 2017, 05:40
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 4-01-14
Пользователь №: 79 899



Цитата(Bad0512 @ Mar 7 2017, 06:45) *
Что будет в момент переключения? В одном канале слово уже кончилось, а в другом - на середине интервала. "Растянуть" или "подвинуть" нельзя, интерфейсы-то синхронные.
ASRC вам корячится, а это довольно непростая штука.

В момент переключения будет потеря данных, безусловно. Это не существенно, т.к. данные на всех входах могут быть разные. Можно сделать data mute на 0,5 -1 сек. по алгоритму: мутируем - переключаем - подаем данные. Снятие mute можно привязать к выходному сигналу lrck.
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Mar 7 2017, 05:44
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 784
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(Evgeny72 @ Mar 7 2017, 12:40) *
В момент переключения будет потеря данных, безусловно. Это не существенно, т.к. данные на всех входах могут быть разные. Можно сделать data mute на 0,5 -1 сек. по алгоритму: мутируем - переключаем - подаем данные. Снятие mute можно привязать к выходному сигналу lrck.

Дело не в потере данных. Сама синхра (LRCK,BCK) будет у вас неизбежно дёргаться в момент переключения. Как воспримет эти подергушки принимающее устройство?
Go to the top of the page
 
+Quote Post
Evgeny72
сообщение Mar 7 2017, 06:51
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 4-01-14
Пользователь №: 79 899



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


Мало того, что синра будет дергаться в момент переключения, её может вообще нигде не быть какое-то время. Вот почему и назрел этот вопрос. Может предложит кто-то что-то получше, чем придумал.
"Как воспримет эти подергушки принимающее устройство?" Конечно, не очень хорошо воспримет, теоретически.
Практически - пробный образец делал с применением на выходе микросхемы ЦАП. Коммутировались асинхронные входа I2S без ФИФО. На звуке шелчков при переключении не было.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Mar 7 2017, 07:00
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 272
Регистрация: 11-06-13
Пользователь №: 77 140



Цитата(hsoft @ Mar 7 2017, 08:39) *
Достаточно посмотреть документацию на 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 - Mar 7 2017, 07:02
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2017 - 08:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01484 секунд с 7
ELECTRONIX ©2004-2016