Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: проблема с использованием clock
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Evgeny72
Добрый день!
Проблема вот в чем. Собрал проект, пара dual clock asynchronous FIFO. Наладку производил с установленным на этой же плате осциллятором. Все отлично работает. Но, нужно использовать clock с другой платы. При подключении clock сигнала с другой платы, как было изначально задумано, отлично работающий проект через несколько минут начинает "плыть". Частоты осциллятора и сигнала clock с другой платы одинаковы. Сигналы с осциллятора и сигнала сlock (с другой платы) заведены на входа ПЛИС группы PLL/DLL Input. При подаче клока с другой платы, пин с осциллятора на ПЛИС отключаю, удаляю в PIN Planer. Входные сигналы не меняю, меняется только способ подачи clock сигнала. Внутренний PLL ПЛИС не использую. Пробовал задействовать внутренний PLL плис, как с умножением на 2 и переделкой проекта под новую частоту, так и с коэффициентом умножения PLL равным 1. Результат то же - несколько минут начинает "плыть". ПЛИС 10M08SCE144. Может кто знает как решить проблему?
alexadmin
Хорошо бы уточнить что значит "плыть". А так смотреть на используемый стандарт, параметры входного сигнала и "связность" земель двух плат.
Evgeny72
Цитата(alexadmin @ May 3 2017, 12:58) *
Хорошо бы уточнить что значит "плыть". А так смотреть на используемый стандарт, параметры входного сигнала и "связность" земель двух плат.


плыть - перестает правильно работать. Земли... есть что проанализировать...
bugdesigner
Цитата(Evgeny72 @ May 3 2017, 12:15) *
плыть - перестает правильно работать. Земли... есть что проанализировать...

Попробуйте еще триггер Шмидта включить на этом пине. Если фронт сигнала клока "завален" это может помочь.
А частота клока у Вас какая? И что за источник клока? Может у Вас согласование неправильно сделано (или совсем не сделано)?
Jackov
Цитата(Evgeny72 @ May 3 2017, 09:39) *
проект через несколько минут начинает "плыть"

Плыть будет - проблема известная, сам с подобным сталкивался.
Всё дело в том что, у Вас такты идут с разных тактовых генераторов, хоть на них и написаны одинаковые циферки, но есть такая штука, как технологический разброс, невозможно изготовить две абсолютно одинаковые вещи, в том числе и тактовые генераторы, у них всегда будет разница в частотах. Если у одного, например, частота 50МГц и мы его берём за эталон, то у другого будет 50,0001МГц (зависит от точности производства), или 49,9999МГц. Это примерно как часы, которые периодически нужно подводить. И через некоторое время эта погрешность нарастает и становится критической.
Тут можно попробовать как-то изловчится и засинхронизировать внешнюю частоту с частотой проекта, либо пересмотреть архитектуру системы в целом.
krux
в нулевом приближении считаю, что у вас наблюдается overflow/underflow (или прокрутка указателей в памяти на 360 градусов), связанные с отличием ppm в генераторах на разных платах.

далее, по мелочи:
1) СХ) тактовую, полученную на эту плату с некоей удаленной на расстояние платы, обязательно необходимо пробуфферизировать.
2) ПР) убедиться, что полученный сигнал (ещё не тактовая!) пригоден для использования (частотомер в этой же плис, плюс использовать накопление показаний частотомера 5...10 сек)
3) ПР) только убедившись, что сигнал пригоден, после этого пытаться использовать этот сигнал как тактовый для asyncram, читай: только после этого отпускать async_reset от этой asyncram.
4) ПР) продолжать мониторить сигнал на отклонения (продолжать определять что сигнал - есть тактовая).
иначе глюки неизбежны.

где СХ - задача схемотехника, ПР - задача проектировщика на HDL.

Цитата
входа ПЛИС группы PLL/DLL Input

зачем вы это написали? с входа эти сигналы идут на DLL/PLL? если нет, то смысл, зачем туда вообще заводили?
Evgeny72
Цитата(bugdesigner @ May 3 2017, 19:32) *
Попробуйте еще триггер Шмидта включить на этом пине. Если фронт сигнала клока "завален" это может помочь.
А частота клока у Вас какая? И что за источник клока? Может у Вас согласование неправильно сделано (или совсем не сделано)?


частота 49.154 МГц. На плате (на которой расположена ПЛИС 10M08...) - обычный кварцевый генератор типоразмера 0705. С платы, с которой необходимо подать клок - кварцевый генератор заведен на плис MAXII EPM1270, через нее сигнал проброшен на шлейф. Этим шлейфом соединены обе платы. В шлейфе, провода по обеим сторонам от провода передающего клок, заземлены на приемной и передающей стороне. Пробовал миновать ПЛИС EPM1270, подключившись просто проводом к генератору, результат тот же. Пробовал подключать через 74LVC1G125.


Цитата(krux @ May 3 2017, 22:58) *
зачем вы это написали? с входа эти сигналы идут на DLL/PLL? если нет, то смысл, зачем туда вообще заводили?


Для общего понимания, что и куда я подал. Когда проектировал ПП, планировал задействовать ПЛЛ. На данный момент нет необходимости использовать ПЛЛ.
Была мысль - завести сигнал клока на простой пин, не входа DLL/PLL.
Golikov A.
Вообще не понимаю о чем вы тут говорите.

Был проект отлаженный на одном источнике клока. Источник клока сменили и проект стал плохо работать.
При чем тут разброс генераторов, при чем тут 2 клоковое FIFO?


Alex11
Какая длина провода между платами? Правильно делать передачу клока витой парой с диф. сигналом и соответствующими приемниками и передатчиками (можно реализовать и в ПЛИС). В вашей конструкции попробуйте поставить резистор 20-30 Ом в разрыв провода с тактовым сигналом. С какой стороны - надо подобрать. По идее, со стороны передатчика должно быть лучше.
Evgeny72
Цитата(Alex11 @ May 4 2017, 21:06) *
Какая длина провода между платами? Правильно делать передачу клока витой парой с диф. сигналом и соответствующими приемниками и передатчиками (можно реализовать и в ПЛИС). В вашей конструкции попробуйте поставить резистор 20-30 Ом в разрыв провода с тактовым сигналом. С какой стороны - надо подобрать. По идее, со стороны передатчика должно быть лучше.


Длина шлейфа 20 см. Резистор на 51 ом установлен на стороне передатчика. Пробовал его замыкать - толку не дало. Про диф пару понял, надо подумать, как реализовать в на имеющихся платах.
Maverick
Цитата(Evgeny72 @ May 5 2017, 10:34) *
Длина шлейфа 20 см. Резистор на 51 ом установлен на стороне передатчика. Пробовал его замыкать - толку не дало. Про диф пару понял, надо подумать, как реализовать в на имеющихся платах.

скорость передачи данных какая?
у меня SPI при такой длине шлейфа работает без ошибок не более чем на 7МГц для sclk

Можно попробовать:
lvds изолятор
Как ранее подсказали поставить на одной плате клоковый буфер с выходом lvds и на другой плате поробовать использовть этот lvds клок (например), а может лучше всего брать тактовый генератор с несколькими lvds выходами для двух плат одновременно

Но:
По хорошему надо делать передачу данных по LVDS (обмен между платами)
Golikov A.
да там вообще вроде не данные передают, а клок, все остальное в описании проблемы для драматизма%).
Можно ли по одному проводу передать 50 МГц с нормальными фронтами, житером и без помех на 20 см? - вот основной вопрос темы. И ответ походу - нет%)

И что-то мне говорит что там надо еще согласование какое-то делать, чтобы в проводе каша не началась и обычного резистора подобранного на глаз не хватит.

У ПЛИС иногда бывают диф входы клока и диф выходы, тут такой магии нет?
Evgeny72
Цитата(Maverick @ May 5 2017, 11:14) *
скорость передачи данных какая?


максимальная частота bit clock 24 мГц, но он уже идет в обратную сторону, от 10M08... к EPM1270...

Цитата(Golikov A. @ May 5 2017, 11:20) *
У ПЛИС иногда бывают диф входы клока и диф выходы, тут такой магии нет?


у 10M08... есть что-то подобное. Это должна быть группа clock pins или могут быть обычные пины готовые принять диф сигнал?
Golikov A.
Если вы хотите использовать сигнал как клок внутри ПЛИС, то есть в always@(posedge ...) блоках. То лучше чтобы это были спец пины готовые принять клок.
Обычные ноги тоже могут принять этот сигнал, но такой маршрут заставит мапер сначала дотянуть этот сигнал через буфер до клокового дерева, и только потом распространить его на схему, что вставляет ему дикую задержку и портит времянку.

А дальше уже зависит от вашей схемы и необходимой оперативности, как то я тянул 50 МГц СПИ, с заходом не через клоковую ногу на спартане 6. В целом если работать по одному фронту получилось. Но там 1 линия, параллельная шина может внести свои коррективы.
Evgeny72
попробовал все перечисленные варианты.
- укоротил шлейф до 10 см, не помогло, результат тот же, через некоторое время все начинает плыть.
- устанавливал на входной сигнал клока триггер- шмитта, не помогло, проблема стала "вылазить" быстрее, чем без него,
- завел клок через симметричный интерфейс, не помогло.
А кто-нибудь подскачет - какая разница (дельта) между частотами записи/чтения в ФИФО допустима, учитывая, что запись и чтение идет не прерывно? Нельзя остановить поток данных приходящих на ФИФО, на клоковые входа записи/чтения ФИФО подаются одинаковые частоты, например 24,576 Мгц. Клоки асинхронны.
Golikov A.
Если фифо сделано правильно, то любая.
Если неправильно то никакая...

Может реально не в клоке проблема?
А данные откуда идут? И как они с клоком связаны?
Evgeny72
Цитата(Golikov A. @ May 12 2017, 13:14) *
Если фифо сделано правильно, то любая.
Если неправильно то никакая...

Может реально не в клоке проблема?
А данные откуда идут? И как они с клоком связаны?


ФИФО сформировано Altera wizard. Данные идут по шине I2S. ФИФО используется в качестве переходного звена между клоковыми доменами с одинаковыми частотами, но асинхронными. В симуляторе все работает. Констрейны прописал.
Может с клоком никак и не связано, только с одним генератором клока устройство работает несколько часов, с другим работает несколько минут и все поплыло...
Golikov A.
принимается I2S как? Второй клок это клок I2S? Прием на его частоте и пихание на той же частоте в FIFO или как?

Опять же хорошо понять что есть поплыло. Что работать перестало понятно, но если подробнее описать как оно перестало работать, то возможно будет понятнее насчет причин.

Констраины какие прописаны? Просто путь от клока к клоку зафалсен или как?

С симулятором понятно.


В визарде при создании какой режим защиты от мета-стабильности был выставлен?

какие еще асинхронные и прочие входные сигналы есть? Защищены ли они от мета-стабильности?
sonycman
Цитата(Evgeny72 @ May 12 2017, 15:33) *
ФИФО сформировано Altera wizard. Данные идут по шине I2S. ФИФО используется в качестве переходного звена между клоковыми доменами с одинаковыми частотами, но асинхронными. В симуляторе все работает. Констрейны прописал.
Может с клоком никак и не связано, только с одним генератором клока устройство работает несколько часов, с другим работает несколько минут и все поплыло...

То есть у вас в ПЛИС схема, которая имеет собственный генератор клока - к примеру, 49.152 МГц, и есть второй клок с такой же аудио частотой, но подающийся с другой платы?
Получается I2S Master интерфейс с подачей внешнего мастер клока, и генерацией на его основе бит клока для источника данных?

И в FIFO вы пишете с частотой внешнего клока, а считываете его с частотой (пусть одинаковой) уже другого генератора?
Иначе откуда берётся асинхронность?

Тогда использование FIFO для записи и чтения просто по асинхронным клокам пусть и одинаковой частоты без учёта опустошения\переполнения неправильно.
Частота будет в любом случае разной, пусть и незначительно, что привёдет к рассинхронизации данных через определённое время.

Попробуйте в симуляторе, как будет работать двухклоковый FIFO, если на него подать немножко разные частоты, к примеру: 49.152000 и 49.152999 МГц.
Evgeny72
Цитата(Golikov A. @ May 12 2017, 15:05) *
принимается I2S как?

не совсем понял, попытаюсь описать. Имеем сигналы в I2S: BCK, LRCK, DATA. Со стороны записи в ФИФО. Сигналы BCK, LRCK, DATA не пропускаю через входные dff. Пробовал ставить на входах LRCK, DATA по одному или двум dff, тактовый на dff подавал входной сигнал BCK. По всей видимости не так отконстрейнил, не смог добиться исходного положения данных DATA, относительно сигнала LRCK - сместились на такт.
Цитата(Golikov A. @ May 12 2017, 15:05) *
Второй клок это клок I2S? Прием на его частоте и пихание на той же частоте в FIFO или как?

Отчасти да. Только не входной клок, это клок с генератора (CLK_EXT), с которого работает все на стороне чтения ФИФО и дальше после него, в том числе и микросхемы ЦАП.
Нужная сетка выходных частот BCK и LRCK осуществляется делителями (счетчиками) на стороне чтения. Из входного сигнала LRCK получаю импульс для записи данных в ФИФО и импульс указателя начала пакета для сигнала DATA на приемной стороне. Данные и импульс указателя передаю через ФИФО. Выходной сигнал LRCK формируется от импульса указателя начала пакета.
Да, пихание происходит на частоте входного сигнала BCK, без изменений.
Цитата(Golikov A. @ May 12 2017, 15:05) *
Опять же хорошо понять что есть поплыло. Что работать перестало понятно, но если подробнее описать как оно перестало работать, то возможно будет понятнее насчет причин.

Плывет импульс указателя начала пакета для сигнала DATA. На осциллографе этот импульс с выхода ФИФО начинает скакать на пол периода выходного сигнала LRCK.
Соответственно, начинает плыть выходной сигнал LRCK, он получен из этого импульса, ну и данные тоже. Вывел наружу асинхронный сигнал сброса ФИФО. Сбрасываю ФИФО после такого плывуна, какое-то время работает нормально.
Цитата(Golikov A. @ May 12 2017, 15:05) *
Констраины какие прописаны? Просто путь от клока к клоку зафалсен или как?


derive_clock_uncertainty
create_clock -name {CLK50Mhz} -period 20.000 -waveform { 0.000 10.000 } [get_ports {clk50Mhz}] клок для другой схемы не относящийся к данной теме
create_clock -name {BCK} -period 40.000 -waveform { 0.000 20.000 } [get_ports {BCK}] клок входного сигнала BCK, I2S
create_clock -name {CLK_EXT} -period 20.000 -waveform { 0.000 10.000 } [get_ports {CLK_EXT}] клок с генератора, со стороны чтения ФИФО

Возможно надо отконтстрейнить LRCK как клок?

set_clock_groups -exclusive -group [get_clocks {BCK}]
set_clock_groups -exclusive -group [get_clocks {CLK_EXT}]
set_clock_groups -exclusive -group [get_clocks {CLK50Mhz}]

пробовал так:

set_false_path -from [get_clocks {CLK_EXT}] -to [get_clocks {BCK}]
set_false_path -from [get_clocks {BCK}] -to [get_clocks {CLK_EXT}]

Для ФИФО.

set_false_path -from [get_registers {*dcfifo*delayed_wrptr_g[*]}] -to [get_registers {*dcfifo*rs_dgwp*}]
set_false_path -from [get_registers {*dcfifo*rdptr_g[*]}] -to [get_registers {*dcfifo*ws_dgrp*}]

Цитата(Golikov A. @ May 12 2017, 15:05) *
В визарде при создании какой режим защиты от мета-стабильности был выставлен?

3 режим - Best metastability protection, best fmax, unsynchronised clocks 3 or more sync stage... How many sync stage? - 4
Цитата(Golikov A. @ May 12 2017, 15:05) *
какие еще асинхронные и прочие входные сигналы есть? Защищены ли они от мета-стабильности?

Сигнал третьего клока 50 МГц сам по себе, для других узлов внутри этой же ПЛИС. Логические входа, где просто 0 или 1, с них сигнал пропущен через пару dff. dff тактируются от CLK_EXT.



Цитата(sonycman @ May 12 2017, 15:43) *
И в FIFO вы пишете с частотой внешнего клока, а считываете его с частотой (пусть одинаковой) уже другого генератора?
Иначе откуда берётся асинхронность?

Да, все так.
Цитата(sonycman @ May 12 2017, 15:43) *
Тогда использование FIFO для записи и чтения просто по асинхронным клокам пусть и одинаковой частоты без учёта опустошения\переполнения неправильно.
Частота будет в любом случае разной, пусть и незначительно, что привёдет к рассинхронизации данных через определённое время.

Попробуйте в симуляторе, как будет работать двухклоковый FIFO, если на него подать немножко разные частоты, к примеру: 49.152000 и 49.152999 МГц.

Начинаю считывать данные из ФИФО после смены состояния на выходе rdempty. Симулировал с разыми частотами, 1:1, 2:1, (вход:выход) все ок. Видимо 10мс длины симуляции мало для отображения этой проблемы.
sonycman
Цитата(Evgeny72 @ May 12 2017, 20:01) *
Начинаю считывать данные из ФИФО после смены состояния на выходе rdempty. Симулировал с разыми частотами, 1:1, 2:1, (вход:выход) все ок. Видимо 10мс длины симуляции мало для отображения этой проблемы.

Симулировать надо не кратными частотами, чтобы увидеть рассинхрон, и на большую длительность, чтобы стало заметно, как "поплывет" фаза фронтов тактовых сигналов.

К примеру, если взять 49.152000 и 49.152999 МГц, как говорил выше, то сдвиг фазы между клоками ровно на один период произойдёт примерно за одну миллисекунду.
Но это должен быть сдвиг только на один период BCLK, а не половина периода LRCK, как в вашем случае.

Но это если генератор со стороны чтения быстрее того, который со стороны записи.
Если наоборот - то будет переполнение FIFO.

А что мешает формировать BCK и LRCK для ЦАПа, взяв за основу мастер клок с входного порта I2S?
С того, где принимаете данные?

Вам в любом случае надо синхронизироваться от входного интерфейса, от его генератора.
Golikov A.
Блин какой-то тупикsm.gif Куча клоков и фифоsm.gif, а есть шанс нарисовать блок схему с тем откуда какие сигналы и на какой частоте?

Как я себе вижу задачу и как я бы ее решал.
BCK - это вроде как клок, к нему должны быть синхронны данные DATA и LRCK. Имеет смысл по этому клоку принять данные в сдвиговый регистр и собрать слово данных.
Дальше по этому же клоку слово надо пихать в FIFO, все синхронизации с LRCK должны быть сделаны здесь, то есть сразу собирайте слова для каналов.

А из фифо надо выгребать слова на другом клоке, тогда все будет работать без плаванья, ну кроме проблемы с переполнением или опустошением FIFO.

Констрайнить надо BCK на период с джитером, и офсет данных и клока от BCK, остальное должно фифо само законстраинить.



sonycman
Цитата(Golikov A. @ May 12 2017, 23:01) *
А из фифо надо выгребать слова на другом клоке, тогда все будет работать без плаванья, ну кроме проблемы с переполнением или опустошением FIFO.

Так у автора эта проблема и встаёт в полный рост.
Он подал на ФИФО клоки с разных генераторов и в ус не дует, что будет, когда начнётся переполнение\опустошение данных.
Проблема, имхо, решается либо просто - использованием одного и того же клока на входе I2S и на выходе ЦАПа - тогда и ФИФО не нужен особо.

Либо не совсем просто - если требуется пересемплирование, то надо входной клок I2S на PLL наверное подавать и множить на требуемый коэффициент.

Но тогда джиттер будет наверняка.
Andrew Su
Приветствую.
В похожем случае организовывал чтение из фифо на заведомо большей "внутренней" частоте, чем частота,
на которой оно заполняется.
Для этого пришлось добавить небольшой автомат, который отслеживал момент, когда фифо становится
"почти пустым".
Удачи.
sonycman
Цитата(Andrew Su @ May 12 2017, 23:33) *
Приветствую.
В похожем случае организовывал чтение из фифо на заведомо большей "внутренней" частоте, чем частота,
на которой оно заполняется.
Для этого пришлось добавить небольшой автомат, который отслеживал момент, когда фифо становится
"почти пустым".
Удачи.

Такой метод приведёт к большому джиттеру на ЦАПе, когда данные на него будут поступать неравномерно.
Для качественного воспроизведения аудио это не подходит.
Evgeny72
Цитата(sonycman @ May 12 2017, 20:24) *
Симулировать надо не кратными частотами, чтобы увидеть рассинхрон, и на большую длительность, чтобы стало заметно, как "поплывет" фаза фронтов тактовых сигналов.

К примеру, если взять 49.152000 и 49.152999 МГц, как говорил выше, то сдвиг фазы между клоками ровно на один период произойдёт примерно за одну миллисекунду.
Но это должен быть сдвиг только на один период BCLK, а не половина периода LRCK, как в вашем случае.

Но это если генератор со стороны чтения быстрее того, который со стороны записи.
Если наоборот - то будет переполнение FIFO.

А что мешает формировать BCK и LRCK для ЦАПа, взяв за основу мастер клок с входного порта I2S?
С того, где принимаете данные?

Вам в любом случае надо синхронизироваться от входного интерфейса, от его генератора.

Насчет симуляции - спасибо за совет, попробую.
Можно сформировать BCK и LRCK для ЦАПа из входного I2S, но тут полностью теряется смысл применения ФИФО - привязка входных сигналов к внутреннему генератору. Проще поставить кучу dff на входные сигналы I2S и тактировать их от CLK_EXT, в моем случае внутренний генератор, джиттер очистить другим способом.


Цитата(Golikov A. @ May 12 2017, 22:01) *
Блин какой-то тупикsm.gif Куча клоков и фифоsm.gif, а есть шанс нарисовать блок схему с тем откуда какие сигналы и на какой частоте?

Как я себе вижу задачу и как я бы ее решал.
BCK - это вроде как клок, к нему должны быть синхронны данные DATA и LRCK. Имеет смысл по этому клоку принять данные в сдвиговый регистр и собрать слово данных.
Дальше по этому же клоку слово надо пихать в FIFO, все синхронизации с LRCK должны быть сделаны здесь, то есть сразу собирайте слова для каналов.

А из фифо надо выгребать слова на другом клоке, тогда все будет работать без плаванья, ну кроме проблемы с переполнением или опустошением FIFO.

Констрайнить надо BCK на период с джитером, и офсет данных и клока от BCK, остальное должно фифо само законстраинить.


конечно нарисую. rolleyes.gif
В общем, так и сделано, как вы пишите. Скорее всего, у меня проблемы с переполнением или опустошением FIFO. Частоты входа I2S и внутреннего генератора никогда не будут точными.



Цитата(sonycman @ May 12 2017, 22:31) *
Так у автора эта проблема и встаёт в полный рост.
Он подал на ФИФО клоки с разных генераторов и в ус не дует, что будет, когда начнётся переполнение\опустошение данных.
Проблема, имхо, решается либо просто - использованием одного и того же клока на входе I2S и на выходе ЦАПа - тогда и ФИФО не нужен особо.

Точно, в ус не дул, пока до самого не дошло. biggrin.gif

А возможно применение в моем случае dual clock RAM?
sonycman
Цитата(Evgeny72 @ May 13 2017, 09:15) *
А возможно применение в моем случае dual clock RAM?

А для чего, вы можете объяснить?

Пока что, насколько я понимаю ситуацию, можно делать либо:
1. Прямая трансляция сигналов со входа I2S сразу на выход на DAC. Безо всяких промежуточных буферов\памяти\фифо.
Это если не требуется никакая обработка потока.

2. FIFO на входе, как у вас, ждём, пока накопится достаточное количество слов, вычитываем сразу все - обрабатываем - записываем в другое FIFO, на выходе.
Интерфейс I2S на входе и выходе тактируется строго от одного аудио мастер клока.
Обработка работает на бОльшей частоте, чем интерфейс.

3. DMA - слова со входа I2S сразу пишутся в нужное место в памяти для дальнейшей обработки.
На выходе другое DMA.

По констрейнам - надо, наверное, задать set_input_delay для сигналов LRCK и DATA относительно их BCK для входного I2S.
И на выходе на ЦАП - set_output_delay аналогично для LRCK и DATA относительно их BCK.

ЗЫ: так а клок BCK на входе I2S является входным сигналом относительно ПЛИС, или выходным?
Вы же указывали ранее, что "максимальная частота bit clock 24 мГц, но он уже идет в обратную сторону, от 10M08... к EPM1270..."
Evgeny72
Цитата(sonycman @ May 13 2017, 12:19) *
А для чего, вы можете объяснить?

ЗЫ: так а клок BCK на входе I2S является входным сигналом относительно ПЛИС, или выходным?
Вы же указывали ранее, что "максимальная частота bit clock 24 мГц, но он уже идет в обратную сторону, от 10M08... к EPM1270..."

осуществить Clock Domain Crossing посредством ФИФО, делал когда-то на нескольких dff, не понравилось, импульс на выходе сильно "дрожал" после этой цепочки dff. Ну и в "целях повышения образованности", как говаривал один персонаж. biggrin.gif
BCK на входе I2S является входным на ФИФО, но должен быть такой же выходной сигнал для дальнейшей обработки. Или проще - I2S вход на ПЛИС - ФИФО - полностью I2S совместимый выход с ПЛИС
Тут вот как - с 1270 идет клок 49.154 на 10M08, в 10M08 делится до той же частоты, что пришел с I2S входа на 10M08. С выхода 10M08 полностью I2S совместимый выход обратно приходит на 1270. Так уж получилось, две разные платы. На 1270 вся дальнейшая обработка осуществляется.
sonycman
Цитата(Evgeny72 @ May 13 2017, 17:10) *
Тут вот как - с 1270 идет клок 49.154 на 10M08, в 10M08 делится до той же частоты, что пришел с I2S входа на 10M08. С выхода 10M08 полностью I2S совместимый выход обратно приходит на 1270. Так уж получилось, две разные платы. На 1270 вся дальнейшая обработка осуществляется.

А входящий клок на 49 МГц синхронен клоку BCK интерфейса I2S?
Иными словами - это клок, на базе которого работает I2S 1270?
Evgeny72
Цитата(sonycman @ May 13 2017, 17:16) *
А входящий клок на 49 МГц синхронен клоку BCK интерфейса I2S?

нет, в том то и дело, что они не синхронны.

Цитата(sonycman @ May 13 2017, 17:16) *
Иными словами - это клок, на базе которого работает I2S в 1270?

да, все верно.
sonycman
Цитата(Evgeny72 @ May 14 2017, 09:51) *
нет, в том то и дело, что они не синхронны.

да, все верно.

Вы дали взаимоисключающий ответ.
Ещё раз, пожалуйста.

Имеется плата с ПЛИС 1270, с которой идёт мастер I2S интерфейс, где относительно MAX10 все сигналы (BCK, LRCK и DATA) - входы.
С той же платы идёт клок 49 МГц, на базе которого, как вы говорите, работает I2S 1270 (через делители).

Тогда получается, что интерфейсный входящий клок BCK синхронен клоку генератора 49 МГц.
Evgeny72
Цитата(sonycman @ May 14 2017, 12:26) *
Вы дали взаимоисключающий ответ.
Ещё раз, пожалуйста.

Имеется плата с ПЛИС 1270, с которой идёт мастер I2S интерфейс, где относительно MAX10 все сигналы (BCK, LRCK и DATA) - входы.
С той же платы идёт клок 49 МГц, на базе которого, как вы говорите, работает I2S 1270 (через делители).

Тогда получается, что интерфейсный входящий клок BCK синхронен клоку генератора 49 МГц.

приношу извинения, действительно не правильно написал. И с мастерами возможно тоже.
Клок 49 МГц с 1270 идет на 10М08, там получаются BCK, LRCK они идут на 1270. Входные BCK, LRCK синхронны 49 МГц на 1270.

sonycman
Цитата(Evgeny72 @ May 14 2017, 17:23) *
Клок 49 МГц с 1270 идет на 10М08, там получаются BCK, LRCK они идут на 1270. Входные BCK, LRCK синхронны 49 МГц на 1270.

Тогда 10М08 является мастером, который генерирует клоки I2S, а 1270 - слэйв, отдающий по этим клокам данные.
Имея базовый клок 49 МГц, логично дальше работать по нему - нормальная синхронная схема.

Если же им принципиально не пользоваться - его надо как то восстанавливать.
Ваша схема с ФИФО должна работать без проблем (хоть и с приличным джиттером), только со стороны чтения частота должна быть гарантированно выше записывающей стороны.
Evgeny72
вот схема. В принципе мне все понятно относительно ФИФО. Всем спасибо за советы и разъяснения!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.