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

 
 
> подскажите плз некий код Грея, только равномерный, в обычном рефлексном коде Грея биты неизменны 2 такта, а надо больше..
Krys
сообщение Jul 9 2010, 10:12
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Приветствую! Подскажите плз некий код Грея, только равномерный: в обычном рефлексном коде Грея биты неизменны 2 такта, а надо больше и равномернее. Сейчас объясню, что бы мне хотелось.
Берём обычный 2-битный код Грея. В нём каждый бит неизменен 2 такта. Это здОрово по сравнению с обычным бинарным кодом, в котором бит может меняться каждый такт. Однако берём тот же обычный код Грея на 3 разряда. Всё равно неизменность 2 такта. Берём 10 разрядов - всё равно 2 такта.
А мне бы хотелось иметь некий код, интервал неизменности каждого разряда которого увеличивался бы с увеличением числа бит в коде. Т.е. берём 2-битный код - имеем неизменность по одной линии 2 такта. Берём 4-битный код - неизменность 4 такта. Берём 10-битный код - неизменность 10 тактов по одной линии. Ну может не так линейно, например, для 10 битов неизменность 7 или 8 тактов, но всё равно, чтобы интервал неизменности увеличивался с числом бит кода.

Ну и при этом нужно, чтобы свойство кода Грея оставалось: в каждом такте меняется только один бит.

Такое вообще возможно?


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Jul 9 2010, 17:45
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Я как-то раз решал похожую задачу: нужен был тикающий счётчик в EEPROM, и надо было сделать wear-leveling, то есть чтобы при каждом приращении счётчика менялся только 1 байт, и частота изменения байтов счётчика была приблизительно одинаковой. У Вас не та же задача?
Пришёл к некому решению. Поиск по патентам США привёл к патенту, в котором та же задача решена точно так же :-) Если надо, могу попробовать снова найти этот патент.
Go to the top of the page
 
+Quote Post
Krys
сообщение Jul 19 2010, 04:51
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(scifi @ Jul 10 2010, 00:45) *
Пришёл к некому решению. Поиск по патентам США привёл к патенту, в котором та же задача решена точно так же :-) Если надо, могу попробовать снова найти этот патент.
Если не сильно у Вас отниму время - то был бы благодарен за информацию.


Цитата(scifi @ Jul 10 2010, 00:45) *
Я как-то раз решал похожую задачу: нужен был тикающий счётчик в EEPROM, и надо было сделать wear-leveling, то есть чтобы при каждом приращении счётчика менялся только 1 байт, и частота изменения байтов счётчика была приблизительно одинаковой. У Вас не та же задача?
Давайте я попробую обрисовать задачу, зачем мне это понадобилось.
Сразу скажу, что всё реализуется в ПЛИС. Есть счётчик (грубо говоря счётчик времени) с тактовой частотой 100 МГц, значения с его выхода поступают по шине в некий блок, в который заходит тактовая частота 30 МГц, другой нет. В этом блоке на частоте 30 МГц необходимо защёлкнуть значения времени, изменяющиеся с частотой 100 МГц. Поскольку частоты разные - при обычной бесхитростной реализации "в лоб" очень часто будет возникать метастабильность, гонки фронтов и т.п., в результате чего правильные значения времени будут защёлкиваться далеко не всегда. Поэтому невозможно гарантировать безошибочное защёлкивание показаний времени (пусть хотя бы с погрешностью, связанной с изменяющимся взаимным положением фронтов частот 100 МГц и 30 МГц), т.е. могут быть не только погрешности, но и грубые промахи отсчётов, когда, скажем, в результате метастабильности, неправильно защёлкнулся старший разряд.
Для подавления метастабильности зачастую используют код Грея, т.к. у него в один момент изменяется только 1 бит, и последовательно сменяющиеся значения могут приобрести ошибку всего на единицу: либо счётчик в момент защёлкивания останется в предыдущем состоянии (без изменений), либо защёлкнется новое значение. Однако применение кода Грея для борьбы с метастабильностью имеет смысл только, когда частоты сигналов приблизительно одинаковые, но фронты не синхронные.
В моём же случае частоты существенно разные: 100 МГц и 30 МГц. При использовании кода Грея я смогу получить изменение одного разряда с тактовой частотой в 2 раза ниже, чем 100 МГц, т.е. 50 МГц. А защёлкиваю я эти значения на частоте 30 МГц, т.е. ещё почти в 2 раза медленнее. Таким образом, из-за гонок фронтов, связанных с разностью длин связей отдельных разрядов шины данных, я опять не могу гарантировать отсутствие промахов (грубых ошибок) измерения временных отсчётов.
Ладно, если частота защёлкивания 30 МГц уже ближе к 50 МГц, уже можно что-то придумать. Но уже появился спортивный интерес найти универсальное решение, работающее в общем случае, не только, когда частоты близки друг к другу.
Вот тут и возникает потребность, как я писал в первом сообщении, в некоем коде Грея, только равномерном, интервал неизменности каждого разряда которого увеличивался бы с увеличением числа бит в коде. Т.е. берём 2-битный код - имеем неизменность по одной линии 2 такта. Берём 4-битный код - неизменность 4 такта. Берём 10-битный код - неизменность 10 тактов по одной линии. Ну может не так линейно, например, для 10 битов неизменность 7 или 8 тактов, но всё равно, чтобы интервал неизменности увеличивался с числом бит кода.
Ну и при этом нужно, чтобы свойство кода Грея оставалось: в каждом такте меняется только один бит.

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

Согласны?

Цитата(petrov @ Jul 9 2010, 18:00) *
Если из нескольких слов грея такой код составить?

Например

00 00
00 01
01 01
01 11
11 11
11 10
10 10
10 00
Спасибо, судя по Вашему примеру - то, что мне нужно.
... правда я пример понял, а как это образуется, какими формулами описывается и какие свойства (правда ли на всём диапазоне счёта будет изменяться не более 1 цифры за раз, правда ли частота повторения каждого разряда во всём диапазоне счёта ниже в несколько раз тактовой частоты исходного счётчика) у такого кода - не понял. Не разжуёте немножко теорию?


Цитата(Ant_m @ Jul 9 2010, 18:14) *
Просто, мне кажется, что цифра 2 берется от того, что код бинарный. Если брать тринарный код, то цифра будет 3, т.е бит в коде будет меняться за 3 такта. Ну и так далее, т.е это число определяется реализацией системы счисления.
Видимо, не совсем так. В двоичной системе такое тоже возможно, как показал уважаемый Oldring в этом сообщении.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Oldring
сообщение Jul 19 2010, 06:33
Сообщение #4


Гуру
******

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



Цитата(Krys @ Jul 19 2010, 08:51) *
Таким образом, из-за гонок фронтов, связанных с разностью длин связей отдельных разрядов шины данных, я опять не могу гарантировать отсутствие промахов (грубых ошибок) измерения временных отсчётов.


Мне кажется, вы переусложняете. Защелкиваете вы на 30 мегагерцах, но все триггера быстрые и окно неопределенности у каждого отногсительно 30-МГц фронта небольшое. А все выходы счетчиков изменяются с некоторым достаточно фиксированным разбросом относительно общего фронта 100 МГц клока. Поэтому Вам нужно всего-лишь как-то обконстрейнить счетчики и защелки в доменах таким образом, чтобы суммарный разброс времен в различных линиях между доменами был меньше такта счета, т. е. 10 нс, минус окно триггеров. Как обконстрейнить - навскидку не скажу, но наверняка это возможно и не очень сложно.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Krys
сообщение Jul 19 2010, 08:42
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(Oldring @ Jul 19 2010, 13:33) *
Мне кажется, вы переусложняете. Защелкиваете вы на 30 мегагерцах, но все триггера быстрые и окно неопределенности у каждого отногсительно 30-МГц фронта небольшое. А все выходы счетчиков изменяются с некоторым достаточно фиксированным разбросом относительно общего фронта 100 МГц клока
Да, Вы правы, я усложнил свою задачу искусственно. Но это лишь потому, что появился спортивный интерес найти решение для общего случая, а не для частного случая соотношения частот, такого, как у меня: 100 МГц и 30 МГц.
В своём случае у меня такая мысль (если не придумаю ничего интереснее, навроде равномерного кода Грея): расположить рядом (чтобы длина связей была не большая) со счётчиком 100 МГц регистр, в который производить запись значений счётчика по сигналу, пришедшему из модуля на другом конце ПЛИС (в котором есть только 30 МГц) и пропущенному через цепь подавления метастабильности (2 D-триггера последовательно). Но такое решение не очень хорошее, т.к. потребителей значений времени много, в разных концах ПЛИС, и на каждый потребуется вводить такой регистр с цепью подавления метастабильности.

Цитата(Oldring @ Jul 19 2010, 13:33) *
Поэтому Вам нужно всего-лишь как-то обконстрейнить счетчики и защелки в доменах таким образом, чтобы суммарный разброс времен в различных линиях между доменами был меньше такта счета, т. е. 10 нс, минус окно триггеров. Как обконстрейнить - навскидку не скажу, но наверняка это возможно и не очень сложно.
Вот констрейнить и не хотелось бы, т.к. при переходе на другую плиску это всё может не сработать. Хочется получить идеальное решение, которое бы работало само по себе, без констрейнтов.

Цитата(Oldring @ Jul 9 2010, 23:13) *
Легко показать, что для такого двоичного счетчика с периодом N и неизменностью N, период счета неизбежно равен 2N. Такой счетчик - это сдвиговый регистр, в который сначала вдвигается до полного заполнения единица, а потом - нуль. При N=2 он же есть счетчик в коде Грея. Но Вы, наверное, имеете в виду полный счетчик с периодом 2^N при N>2?
Ещё раз перечитал Ваше сообщение, и пришла такая идея:
А что, если реализовать необходимую мне задачу путём смешивания свдигового регистра и кода Грея? Под младшие биты используется сдвиговый регистр, под старшие - код Грея в обычной форме. Правда, тут получится, что 2 бита могут измениться одновременно: один в части кода Грея, один в сдвиговой части. А это плохо... Или в данном случае это нестрашно? Что-то не могу сообразить сразу навскидку.
Идея расчёта следующая. Предположим, что нам нужно принимать изменяющиеся данные на частоте в N раз меньше частоты изменяющихся данных. Учитываем, что код Грея "понижает" частоту изменения в 2 раза. Таким образом, нам нужно получить оставшееся понижение на сдвиговом регистре, т.е. понижение в N/2 раз. Из приведённой выше цитаты получается, что при неизменности N/2 период счёта равен N. А число разрядов сдвигового регистра - log2(N).
Да... всё красиво, только надо получить изменение не более 1 разряда в 1 такт...
Или не годится вообще такая идея?


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Krys   подскажите плз некий код Грея, только равномерный   Jul 9 2010, 10:12
- - Ant_m   Наверное да. Но не в бинарной логике, а например в...   Jul 9 2010, 10:18
- - Krys   надо некий компромисс в бинарной   Jul 9 2010, 10:57
- - petrov   Если из нескольких слов грея такой код составить? ...   Jul 9 2010, 11:00
- - Ant_m   ЦитатаБерём обычный 2-битный код Грея. В нём кажды...   Jul 9 2010, 11:14
- - Oldring   Цитата(Krys @ Jul 9 2010, 14:12) Т.е. бер...   Jul 9 2010, 16:13
|- - Krys   Цитата(Oldring @ Jul 9 2010, 23:13) Легко...   Jul 19 2010, 07:11
- - AndeyP   Кнут говорит что такие коды ищутся только полным п...   Jul 9 2010, 16:28
|- - Oldring   Цитата(AndeyP @ Jul 9 2010, 20:28) См. то...   Jul 9 2010, 16:31
|- - Oldring   Цитата(Krys @ Jul 19 2010, 12:27) Вот кон...   Jul 19 2010, 08:44
- - Krys   Спасибо всем за ответы, извините, что долго молчал...   Jul 19 2010, 02:59
- - Krys   Ну как минимум я хочу к этому приблизиться, наскол...   Jul 19 2010, 10:10


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:42
Рейтинг@Mail.ru


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