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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Как передать все возможные значения счётчика из одного клокового домена в другой?
blackfin
сообщение Oct 20 2015, 12:57
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



FYI
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Oct 20 2015, 13:01
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783



Цитата(XVR @ Oct 20 2015, 15:52) *
В этом случае младшие биты будут отражать погоду на Марсе или фазу Луны. Ну или в крайнем случае нечто, зависящее от фаз клоков в 2х доменах, что мало отличается от фазы Луны.
Почему фазу луны? Например при схеме запрос ответ. Они отражают состояние счётчика на момент прихода запроса с точностью быстрого счётчика.
Цитата
Вам они точно нужны? rolleyes.gif
Да тут скорее любопытство чем реальная необходимость.


Кстати на счёт кода ГРЕЯ... насколько удобно использование кода для больших длинн данных. Например для 48.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Oct 20 2015, 13:06
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(MegaVolt @ Oct 20 2015, 15:49) *
Упс.... я вообще с чем то своим перепутал....
Уже легче

Цитата(MegaVolt @ Oct 20 2015, 15:49) *
Согласен коды грея подходят если при частоте счёта меньше второй частоты.
sm.gif
В каждом dual-clock FIFO стоит как минимум 2 классики для передачи указателей write/read соответственно на сторону read/write
и при этом отношение частот может быть как read > write так и read < write.

Цитата(MegaVolt @ Oct 20 2015, 15:49) *
Кстати на счёт кода ГРЕЯ... насколько удобно использование кода для больших длинн данных. Например для 48.
Все зависит от рабочей частот ну и от того для чего такой переход нужен.

Успехов! Rob
Go to the top of the page
 
+Quote Post
dima32rus
сообщение Oct 20 2015, 13:09
Сообщение #19


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

Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311



Цитата(MegaVolt @ Oct 20 2015, 15:49) *
Если не секрет как именно их использовать? Я пока плохо понимаю саму идею.


Если буфер FIFO пуст, то установится флаг EMPTY, прерываете чтение. Ждете, когда появятся данные. Это возникает, когда частота приемника выше частоты источника. Если наоборот, источник грузит данные быстрее, чем их выскребает приемник, то нужно увеличить размер буфера, чтобы не произошло переполнение (флаг FULL). Все зависит от конкретной задачи. Если же Вы хотите обрабатывать бесконечно длинную последовательность данных, то нужно обрезать младшие разряды, как правильно заметил XVR. Иначе никак.

Стесняюсь спросить, а зачем Вам гонять между доменами монотонно изменяющуюся последовательность? Проще передать сигнал запуска через синхронизатор, и, если надо, начальное значение. А считать уже на нужной частоте.
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Oct 20 2015, 13:15
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783



Цитата(blackfin @ Oct 20 2015, 15:57) *
Как в фифо реализована синхронизация я понимаю. Как применить фифо к задаче не очень sad.gif
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 20 2015, 13:24
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(MegaVolt @ Oct 20 2015, 16:01) *
Почему фазу луны? Например при схеме запрос ответ. Они отражают состояние счётчика на момент прихода запроса с точностью быстрого счётчика.
За один клок в приемном домене состояние младших битов счетчика в передающем изменятся на совершенно непредсказуемую величину (если фазы клоков не зафиксированы). Любые запросы из более медленного домена имеют неопределенность (для более быстрого) в один такт частоты медленного домена. Так как не имеет смысла фиксировать значение чего то в момент времени с точностью большей, чем точность определения этого самого момента, то и фиксация младших битов счетчика от строба в медленном домене смысла не имеет.

Имеет смысл зафиксировать состояние счетчика от строба в быстром домене (т.е. там, где расположен сам счетчик) и передать его в медленный домен, но это уже другая задача, а не передача текущего значения счетчика между доменами laughing.gif

Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Oct 20 2015, 13:33
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783



Цитата(dima32rus @ Oct 20 2015, 16:09) *
Если буфер FIFO пуст, то установится флаг EMPTY, прерываете чтение. Ждете, когда появятся данные. Это возникает, когда частота приемника выше частоты источника.
Мне думается тут будут проблемы. Если я читаю по EMPTY то первое значение я вычитаю с задержкой на синхронизацию. Последующие насыпавшиеся в FIFO за время синхронизации я вычитаю уже без начальной задержки. Т.е. значения не совсем будут связаны с начальным счётчиком.
Цитата
Если наоборот, источник грузит данные быстрее, чем их выскребает приемник, то нужно увеличить размер буфера, чтобы не произошло переполнение (флаг FULL). Все зависит от конкретной задачи. Если же Вы хотите обрабатывать бесконечно длинную последовательность данных, то нужно обрезать младшие разряды, как правильно заметил XVR. Иначе никак.
Во втором случае в идеале хотелось бы чтобы лишние коды пропускались сами.

Опять же пока не очень понимаю чем FIFO отличается от схемы запрос ответ?
Цитата
Стесняюсь спросить, а зачем Вам гонять между доменами монотонно изменяющуюся последовательность? Проще передать сигнал запуска через синхронизатор, и, если надо, начальное значение. А считать уже на нужной частоте.
Ну например передача шкалы времени из одного домена в другой с минимальной погрешностью.

Цитата(XVR @ Oct 20 2015, 16:24) *
Имеет смысл зафиксировать состояние счетчика от строба в быстром домене (т.е. там, где расположен сам счетчик) и передать его в медленный домен, но это уже другая задача, а не передача текущего значения счетчика между доменами laughing.gif
Именно эта задача. Просто то что спрашиваю я выросло из этой.

1. Начальная задача: запрос - защёлкивание - ответ.
2. Мысленно увеличим число запросов до максимума. Логично предположить что это меандр с половинной частотой.
3. Сделаем два канала запросов сдвинутых на период
4. Объединим результаты запросов
5. На выходе имеем все возможные коды.


Цитата(RobFPGA @ Oct 20 2015, 16:06) *
Уже легче
blush.gif
Цитата
В каждом dual-clock FIFO стоит как минимум 2 классики для передачи указателей write/read соответственно на сторону read/write
и при этом отношение частот может быть как read > write так и read < write.
Само собой. Но скорость работы самих синхронизаторов вполне стандартная. И не очень понятно как получить все коды.
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 20 2015, 13:43
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата
Именно эта задача. Просто то что спрашиваю я выросло из этой.

1. Начальная задача: запрос - защёлкивание - ответ.
2. Мысленно увеличим число запросов до максимума. Логично предположить что это меандр с половинной частотой.
Все, тут будет затык. Вы не сможете принять этот поток запросов на приемной стороне (в медленном клоковом домене), не хватит пропускной способности. Нужно будет либо пропускать некоторые данные (снизив тем самым поток на передающей стороне) либо передавать по нескольку запросов в параллель (расширив тем самым пропускную способность на приемной стороне)

Отбрасывание битов у счетчика и есть урезание потока на передающей стороне.
Передача запросов в параллель в этом подходе затруднена, т.к. для этого требуется передать фазу (точнее фазы) между стробом (клоком) на передающей стороне и клоком на приемной.
Go to the top of the page
 
+Quote Post
dima32rus
сообщение Oct 20 2015, 13:46
Сообщение #24


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

Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311



Цитата(MegaVolt @ Oct 20 2015, 16:33) *
Мне думается тут будут проблемы. Если я читаю по EMPTY то первое значение я вычитаю с задержкой на синхронизацию. Последующие насыпавшиеся в FIFO за время синхронизации я вычитаю уже без начальной задержки. Т.е. значения не совсем будут связаны с начальным счётчиком.

Биения будут иметь место, да. Но по-другому никак. Если частоты не равны, то вам все равно придется либо время от времени ждать, либо пропускать.

Цитата(MegaVolt @ Oct 20 2015, 16:33) *
Во втором случае в идеале хотелось бы чтобы лишние коды пропускались сами.

В таком случае просто не обращаете внимания на флаг FULL. Все лишнее само отрежется.

Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 20 2015, 13:46
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Поправка - сами коды счетчика можно передать в параллель. Для этого нужно разделить его на N штук счетчиков (N - отношение частот в доменах) и запустить их так, что бы каждый прибавлял на 1 за N клоков, при этом первый счетчик инкрементировался на 1м клоке, 2й на 2м и т.д. Потом все значения перевести в код Грея и передать в медленный домен
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Oct 20 2015, 13:59
Сообщение #26


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783



Цитата(XVR @ Oct 20 2015, 16:43) *
Все, тут будет затык. Вы не сможете принять этот поток запросов на приемной стороне (в медленном клоковом домене), не хватит пропускной способности.
Так это решение для приёма данных с быстрого счётчика. Все запросы должны проходить.
Цитата
Передача запросов в параллель в этом подходе затруднена, т.к. для этого требуется передать фазу (точнее фазы) между стробом (клоком) на передающей стороне и клоком на приемной.
Сейчас накидаю вариант sm.gif


Цитата(dima32rus @ Oct 20 2015, 16:46) *
Биения будут иметь место, да. Но по-другому никак. Если частоты не равны, то вам все равно придется либо время от времени ждать, либо пропускать.
Боюсь биения будут сильно больше чем те что должны быть от разности частот. Хотя нужно помоделировать...
Цитата
В таком случае просто не обращаете внимания на флаг FULL. Все лишнее само отрежется.
Надо попробовать.


Цитата(XVR @ Oct 20 2015, 16:46) *
Поправка - сами коды счетчика можно передать в параллель. Для этого нужно разделить его на N штук счетчиков (N - отношение частот в доменах) и запустить их так, что бы каждый прибавлял на 1 за N клоков, при этом первый счетчик инкрементировался на 1м клоке, 2й на 2м и т.д. Потом все значения перевести в код Грея и передать в медленный домен

Ага. Или N счётчиков или N регистров за одним счётчиком.
А N регистров вполне заменит кольцевой буфер на памяти.

Вопрос только как правильно читать в случае не кратных частот.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Oct 20 2015, 13:59
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(MegaVolt @ Oct 20 2015, 16:33) *
blush.gif Само собой. Но скорость работы самих синхронизаторов вполне стандартная. И не очень понятно как получить все коды.
wacko.gif wacko.gif Вы не решите эту задачу пока не зафиксируете требования к передаче.

Цитата(MegaVolt @ Oct 20 2015, 13:51) *
Есть ли решения для большей разрядности и не зависящие от соотношения частот? Искажения кодов не допустимы. Пропуск кода или повторные коды само собой допустимы.

Т.е. вот такие результаты выходов вполне допустимы
1: 1-2-4-5-7-8-10-11-...
2: 1-1-2-2-2-3-3-4-4-4-4-...
????


Успехов! Rob.

Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Oct 20 2015, 14:15
Сообщение #28


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783



Цитата(RobFPGA @ Oct 20 2015, 16:59) *
wacko.gif wacko.gif Вы не решите эту задачу пока не зафиксируете требования к передаче.

Пропуски и повторы допустимы если они вызываны разностью частот. И не допустимы если они вызваны тормозами синхронизатора.

Иначе говоря мне нужно на второй стороне иметь отображение счётчика. Где каждому такту второй частоты сопоставлен НОВЫЙ код насколько возможно его получить с учётом запрета на метастабильность. Само собой возможны 3 варианта:
1. clk1 < clk2 появятся повторные коды ибо нового кода ещё нет в природе
2. clk1 < clk2 появятся пропуски т.к. счётчик успеет сгенерить несколько кодов за один такт второй частоты
3. метастабидльность остаётся тот код который был до этого.

Варианты где мы в результате супер правильно синхронизации имеем на выходе один НОВЫЙ код за NNNNN тактов не подходят.

Код грея для случая clk1 < clk2 является отличным решением задачи.

Интересует решение и для второго случая когда clk1 > clk2
Go to the top of the page
 
+Quote Post
krux
сообщение Oct 20 2015, 14:30
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



если значение счетчика нужно прям кровь из носу - то в порядке бреда предложу сгородить изврат.
из медленного сегмента каждый такт выдавать запросы на получание нового кода, синхронизировать их в быстрый сегмент, выделить одиночные импульсы.
в быстром сегменте в зависимости от разности частот сформировать N штук синхронизаторов.
по одиночным импульсам запросов защелкивать в следующий синхронизатор текущее значение счетчика.
таким образом на выходе синхронизаторов будут очередные значения счетчика, максимально близкие к исходному.
останется сгородить на медленной стороне схему выбора.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Oct 20 2015, 14:36
Сообщение #30


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783



Цитата(krux @ Oct 20 2015, 17:30) *
в порядке бреда предложу сгородить изврат....
Как выбирать из регистров если частоты не кратный. А в реальном мире они просто не могут быть кратны ибо это чудо.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 30th June 2025 - 14:53
Рейтинг@Mail.ru


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