Jump to content

    
Sign in to follow this  
MegaVolt

Как передать все возможные значения счётчика из одного клокового домена в другой?

Recommended Posts

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

 

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

 

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

 

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

 

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

 

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

1: 1-2-4-5-7-8-10-11-...

2: 1-1-2-2-2-3-3-4-4-4-4-...

 

Вопрос скорее теоретический. Любопытно возможно ли такое и как реализовать наиболее простым способом.

Возможно есть частные решения для передачи из домена с болей частотой в домен с меньшей. Или наоборот.

Share this post


Link to post
Share on other sites
Классика :
             ---clk_1---      |         ---  clk2  ---- 
счетчик -> bin_to_gray -> reg -> reg ...-> gray_to_bin -> reg

Классика допускает искажение кодов. Причём как в плюс так и в минус. Причём чем большая разрядность тем большее искажение будет.

 

1. Код Грея (хорошо подходит для счетчиков).
Он искажает коды
2. Механизм рукопожатия (handshake).
Как его применить для получения всех кодов?
3. FIFO.
Не очень понял идею? Что даст замена двух регистров на их аналог в виде памяти?

 

 

Пока я вижу вариантом такой:

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

 

Можно ли как то формировать автоматически этот коэффициент для инкремента?

Share this post


Link to post
Share on other sites

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

Результат

post-17402-1445340651_thumb.png

Указать таймбара стоит, как раз, на моменте, начиная с которого происходит передача значения "3". Далее тоже видно как передаются значения. С пропусками из-за синхронизации, но без искажения передаваемого значения.

Share this post


Link to post
Share on other sites

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

 

Ну понеслись решения .....

Смотрим требования TC

 

... Искажения кодов не допустимы. Пропуск кода или повторные коды само собой допустимы.

 

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

1: 1-2-4-5-7-8-10-11-...

2: 1-1-2-2-2-3-3-4-4-4-4-...

 

И почему тут классика не годится ???

 

Удачи! Rob.

 

Share this post


Link to post
Share on other sites
module cnt_copy
Это я так понял запрос ответ с синхронизацией. Многовато кодов пропускает :(

 

И почему тут классика не годится ???
Потому что классика с Греем искажает коды. И чем больше разрядность счётчика тем больше.

Share this post


Link to post
Share on other sites
Это я так понял запрос ответ с синхронизацией. Многовато кодов пропускает :(
Да, это запрос-ответ. Но и

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

Чтобы пропускало меньше кода надо для счёта использовать не саму частоту тактирования, а поделенную на 2..4.

Share this post


Link to post
Share on other sites
Чтобы пропускало меньше кода надо для счёта использовать не саму частоту тактирования, а поделенную на 2..4.
Так каждый может :)))))

 

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

 

Вариант с двухпортовой памятью как идея очень даже ничего. Ищу другие.

Share this post


Link to post
Share on other sites
Потому что классика с Греем искажает коды. И чем больше разрядность счётчика тем больше.
Это с какого перепугу она искажает? Вы код Грея с бинарным не перепутали?

 

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

 

 

Share this post


Link to post
Share on other sites
FIFO не подойдёт, т.к. подразумевается разница частот, а значит буфер или переполнится или будет пустым.

 

У FIFO есть сигналы EMPTY, FULL. Если все сделать правильно, то пропусков не будет. Совсем.

 

Share this post


Link to post
Share on other sites
Это с какого перепугу она искажает? Вы код Грея с бинарным не перепутали?
Упс.... я вообще с чем то своим перепутал.... Согласен коды грея подходят если при частоте счёта меньше второй частоты.

 

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

 

 

У FIFO есть сигналы EMPTY, FULL. Если все сделать правильно, то пропусков не будет. Совсем.
Если не секрет как именно их использовать? Я пока плохо понимаю саму идею.

 

Share this post


Link to post
Share on other sites
Как быть если счёт идёт на большей частоте. И потеря младших бит не выход?
В этом случае младшие биты будут отражать погоду на Марсе или фазу Луны. Ну или в крайнем случае нечто, зависящее от фаз клоков в 2х доменах, что мало отличается от фазы Луны.

Вам они точно нужны? :rolleyes:

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this