MegaVolt 25 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба Есть первый клоковый домен. В нём реализован счётчик. Есть второй клоковый домен. Как можно передать все возможные значения счётчика во второй домен. Классическая реализация подразумевает запрос - ответ с использованием синхронизаторов. Есть ли решения позволяющие иметь на второй стороне все возможные значения счётчика. Поясню. Для однобитного счётчика это позволяет реализовать обычный синхронизатор правда при условии что первая частота меньше второй. Есть ли решения для большей разрядности и не зависящие от соотношения частот? Искажения кодов не допустимы. Пропуск кода или повторные коды само собой допустимы. Т.е. вот такие результаты выходов вполне допустимы 1: 1-2-4-5-7-8-10-11-... 2: 1-1-2-2-2-3-3-4-4-4-4-... Вопрос скорее теоретический. Любопытно возможно ли такое и как реализовать наиболее простым способом. Возможно есть частные решения для передачи из домена с болей частотой в домен с меньшей. Или наоборот. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
litv 0 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба FIFO Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба Приветствую! Классика : ---clk_1--- | --- clk2 ---- счетчик -> bin_to_gray -> reg -> reg ...-> gray_to_bin -> reg Успехов! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demon3200 0 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба 1. Код Грея (хорошо подходит для счетчиков). 2. Механизм рукопожатия (handshake). 3. FIFO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 25 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба Классика : ---clk_1--- | --- clk2 ---- счетчик -> bin_to_gray -> reg -> reg ...-> gray_to_bin -> reg Классика допускает искажение кодов. Причём как в плюс так и в минус. Причём чем большая разрядность тем большее искажение будет. 1. Код Грея (хорошо подходит для счетчиков).Он искажает коды2. Механизм рукопожатия (handshake).Как его применить для получения всех кодов?3. FIFO.Не очень понял идею? Что даст замена двух регистров на их аналог в виде памяти? Пока я вижу вариантом такой: Есть циклический буфер в который в домене один пишутся коды. На второй стороне идёт вычитывание из памяти по указателю с заранее сформированным инкрементом. Инкремент жёстко зависит от соотношения частот (некий аналог DDS). В результате имеем гарантированно стабильное чтение из памяти. Если правильно поборать фазировку сигналов :) Можно ли как то формировать автоматически этот коэффициент для инкремента? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EvgenyNik 0 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба FIFO не подойдёт, т.к. подразумевается разница частот, а значит буфер или переполнится или будет пустым. module cnt_copy ( input clk1, input clk2, output reg [7:0] cnt1, output reg [7:0] copy2 ); reg ready1 = 0; reg ready2 = 0; reg ready1_l1, ready1_l2; reg ready2_l1, ready2_l2; reg [7:0] cnt1_l; always @ (posedge clk1) begin ready2_l1 <= ready2; ready2_l2 <= ready2_l1; cnt1 <= cnt1 + 1; if (ready2_l2) begin if (~ready1) begin cnt1_l <= cnt1; ready1 <= 1'b1; end end else begin ready1 <= 1'b0; end end always @ (posedge clk2) begin ready1_l1 <= ready1; ready1_l2 <= ready1_l1; if (ready1_l2) begin if (ready2) begin copy2 <= cnt1_l; ready2 <= 1'b0; end end else begin ready2 <= 1'b1; end end endmodule Результат Указать таймбара стоит, как раз, на моменте, начиная с которого происходит передача значения "3". Далее тоже видно как передаются значения. С пропусками из-за синхронизации, но без искажения передаваемого значения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 25 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба Память двухпортовая само собой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба Приветствую! Ну понеслись решения ..... Смотрим требования TC ... Искажения кодов не допустимы. Пропуск кода или повторные коды само собой допустимы. Т.е. вот такие результаты выходов вполне допустимы 1: 1-2-4-5-7-8-10-11-... 2: 1-1-2-2-2-3-3-4-4-4-4-... И почему тут классика не годится ??? Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 25 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба module cnt_copyЭто я так понял запрос ответ с синхронизацией. Многовато кодов пропускает :( И почему тут классика не годится ???Потому что классика с Греем искажает коды. И чем больше разрядность счётчика тем больше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EvgenyNik 0 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба Это я так понял запрос ответ с синхронизацией. Многовато кодов пропускает :(Да, это запрос-ответ. Но и Для однобитного счётчика это позволяет реализовать обычный синхронизатор правда при условии что первая частота меньше второй.работало бы на такой же "скорости обмена". Чтобы пропускало меньше кода надо для счёта использовать не саму частоту тактирования, а поделенную на 2..4. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 25 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба Чтобы пропускало меньше кода надо для счёта использовать не саму частоту тактирования, а поделенную на 2..4.Так каждый может :))))) Интересно решить оригинальную задачу. Вариант с двухпортовой памятью как идея очень даже ничего. Ищу другие. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба Потому что классика с Греем искажает коды. И чем больше разрядность счётчика тем больше.Это с какого перепугу она искажает? Вы код Грея с бинарным не перепутали? Да, частота со счетчика должна быть гарантированно меньше, чем частота синхронизации в приемном домене. Это легко получить откинув младшие разряды (в исходном двоичном счетчике, до преобразования в код Грея) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demon3200 0 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба FIFO не подойдёт, т.к. подразумевается разница частот, а значит буфер или переполнится или будет пустым. У FIFO есть сигналы EMPTY, FULL. Если все сделать правильно, то пропусков не будет. Совсем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 25 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба Это с какого перепугу она искажает? Вы код Грея с бинарным не перепутали?Упс.... я вообще с чем то своим перепутал.... Согласен коды грея подходят если при частоте счёта меньше второй частоты. Как быть если счёт идёт на большей частоте. И потеря младших бит не выход? У FIFO есть сигналы EMPTY, FULL. Если все сделать правильно, то пропусков не будет. Совсем.Если не секрет как именно их использовать? Я пока плохо понимаю саму идею. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба Как быть если счёт идёт на большей частоте. И потеря младших бит не выход?В этом случае младшие биты будут отражать погоду на Марсе или фазу Луны. Ну или в крайнем случае нечто, зависящее от фаз клоков в 2х доменах, что мало отличается от фазы Луны. Вам они точно нужны? :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться