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

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


Знающий
****

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



Есть первый клоковый домен. В нём реализован счётчик. Есть второй клоковый домен. Как можно передать все возможные значения счётчика во второй домен.

Классическая реализация подразумевает запрос - ответ с использованием синхронизаторов.

Есть ли решения позволяющие иметь на второй стороне все возможные значения счётчика.

Поясню. Для однобитного счётчика это позволяет реализовать обычный синхронизатор правда при условии что первая частота меньше второй.

Есть ли решения для большей разрядности и не зависящие от соотношения частот? Искажения кодов не допустимы. Пропуск кода или повторные коды само собой допустимы.

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

Вопрос скорее теоретический. Любопытно возможно ли такое и как реализовать наиболее простым способом.
Возможно есть частные решения для передачи из домена с болей частотой в домен с меньшей. Или наоборот.
Go to the top of the page
 
+Quote Post
litv
сообщение Oct 20 2015, 10:58
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 6-10-04
Из: Воронеж
Пользователь №: 806



FIFO
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Oct 20 2015, 11:02
Сообщение #3


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

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



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

Классика :
Код
             ---clk_1---      |         ---  clk2  ----
счетчик -> bin_to_gray -> reg -> reg ...-> gray_to_bin -> reg


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


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

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



1. Код Грея (хорошо подходит для счетчиков).
2. Механизм рукопожатия (handshake).
3. FIFO.
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Oct 20 2015, 11:26
Сообщение #5


Знающий
****

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



Цитата(RobFPGA @ Oct 20 2015, 14:02) *
Классика :
Код
             ---clk_1---      |         ---  clk2  ----
счетчик -> bin_to_gray -> reg -> reg ...-> gray_to_bin -> reg
Классика допускает искажение кодов. Причём как в плюс так и в минус. Причём чем большая разрядность тем большее искажение будет.

Цитата(dima32rus @ Oct 20 2015, 14:06) *
1. Код Грея (хорошо подходит для счетчиков).
Он искажает коды
Цитата
2. Механизм рукопожатия (handshake).
Как его применить для получения всех кодов?
Цитата
3. FIFO.
Не очень понял идею? Что даст замена двух регистров на их аналог в виде памяти?


Пока я вижу вариантом такой:
Есть циклический буфер в который в домене один пишутся коды. На второй стороне идёт вычитывание из памяти по указателю с заранее сформированным инкрементом. Инкремент жёстко зависит от соотношения частот (некий аналог DDS). В результате имеем гарантированно стабильное чтение из памяти. Если правильно поборать фазировку сигналов sm.gif

Можно ли как то формировать автоматически этот коэффициент для инкремента?
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Oct 20 2015, 11:28
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



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". Далее тоже видно как передаются значения. С пропусками из-за синхронизации, но без искажения передаваемого значения.


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Oct 20 2015, 11:29
Сообщение #7


Знающий
****

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



Память двухпортовая само собой.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Oct 20 2015, 11:33
Сообщение #8


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

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



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

Ну понеслись решения .....
Смотрим требования TC

Цитата(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, 12:16
Сообщение #9


Знающий
****

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



Цитата(EvgenyNik @ Oct 20 2015, 14:28) *
module cnt_copy
Это я так понял запрос ответ с синхронизацией. Многовато кодов пропускает sad.gif

Цитата(RobFPGA @ Oct 20 2015, 14:33) *
И почему тут классика не годится ???
Потому что классика с Греем искажает коды. И чем больше разрядность счётчика тем больше.
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Oct 20 2015, 12:28
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



Цитата(MegaVolt @ Oct 20 2015, 15:16) *
Это я так понял запрос ответ с синхронизацией. Многовато кодов пропускает sad.gif
Да, это запрос-ответ. Но и
Цитата
Для однобитного счётчика это позволяет реализовать обычный синхронизатор правда при условии что первая частота меньше второй.
работало бы на такой же "скорости обмена".
Чтобы пропускало меньше кода надо для счёта использовать не саму частоту тактирования, а поделенную на 2..4.


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Oct 20 2015, 12:32
Сообщение #11


Знающий
****

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



Цитата(EvgenyNik @ Oct 20 2015, 15:28) *
Чтобы пропускало меньше кода надо для счёта использовать не саму частоту тактирования, а поделенную на 2..4.
Так каждый может sm.gif))))

Интересно решить оригинальную задачу.

Вариант с двухпортовой памятью как идея очень даже ничего. Ищу другие.
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 20 2015, 12:37
Сообщение #12


Гуру
******

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



Цитата(MegaVolt @ Oct 20 2015, 15:16) *
Потому что классика с Греем искажает коды. И чем больше разрядность счётчика тем больше.
Это с какого перепугу она искажает? Вы код Грея с бинарным не перепутали?

Да, частота со счетчика должна быть гарантированно меньше, чем частота синхронизации в приемном домене. Это легко получить откинув младшие разряды (в исходном двоичном счетчике, до преобразования в код Грея)

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


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

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



Цитата(EvgenyNik @ Oct 20 2015, 14:28) *
FIFO не подойдёт, т.к. подразумевается разница частот, а значит буфер или переполнится или будет пустым.


У FIFO есть сигналы EMPTY, FULL. Если все сделать правильно, то пропусков не будет. Совсем.
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Oct 20 2015, 12:49
Сообщение #14


Знающий
****

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



Цитата(XVR @ Oct 20 2015, 15:37) *
Это с какого перепугу она искажает? Вы код Грея с бинарным не перепутали?
Упс.... я вообще с чем то своим перепутал.... Согласен коды грея подходят если при частоте счёта меньше второй частоты.

Как быть если счёт идёт на большей частоте. И потеря младших бит не выход?


Цитата(dima32rus @ Oct 20 2015, 15:43) *
У FIFO есть сигналы EMPTY, FULL. Если все сделать правильно, то пропусков не будет. Совсем.
Если не секрет как именно их использовать? Я пока плохо понимаю саму идею.
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 20 2015, 12:52
Сообщение #15


Гуру
******

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



Цитата(MegaVolt @ Oct 20 2015, 15:49) *
Как быть если счёт идёт на большей частоте. И потеря младших бит не выход?
В этом случае младшие биты будут отражать погоду на Марсе или фазу Луны. Ну или в крайнем случае нечто, зависящее от фаз клоков в 2х доменах, что мало отличается от фазы Луны.
Вам они точно нужны? rolleyes.gif
Go to the top of the page
 
+Quote Post

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

 


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


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