|
|
  |
Как передать все возможные значения счётчика из одного клокового домена в другой? |
|
|
|
Oct 20 2015, 11:02
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Классика : Код ---clk_1--- | --- clk2 ---- счетчик -> bin_to_gray -> reg -> reg ...-> gray_to_bin -> reg Успехов! Rob.
|
|
|
|
|
Oct 20 2015, 11:26
|
Знающий
   
Группа: Свой
Сообщений: 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). В результате имеем гарантированно стабильное чтение из памяти. Если правильно поборать фазировку сигналов  Можно ли как то формировать автоматически этот коэффициент для инкремента?
|
|
|
|
|
Oct 20 2015, 11:28
|

Знающий
   
Группа: Свой
Сообщений: 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". Далее тоже видно как передаются значения. С пропусками из-за синхронизации, но без искажения передаваемого значения.
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
Oct 20 2015, 11:33
|
Профессионал
    
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Oct 20 2015, 12:16
|
Знающий
   
Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783

|
Цитата(EvgenyNik @ Oct 20 2015, 14:28)  module cnt_copy Это я так понял запрос ответ с синхронизацией. Многовато кодов пропускает  Цитата(RobFPGA @ Oct 20 2015, 14:33)  И почему тут классика не годится ??? Потому что классика с Греем искажает коды. И чем больше разрядность счётчика тем больше.
|
|
|
|
|
Oct 20 2015, 12:28
|

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

|
Цитата(MegaVolt @ Oct 20 2015, 15:16)  Это я так понял запрос ответ с синхронизацией. Многовато кодов пропускает  Да, это запрос-ответ. Но и Цитата Для однобитного счётчика это позволяет реализовать обычный синхронизатор правда при условии что первая частота меньше второй. работало бы на такой же "скорости обмена". Чтобы пропускало меньше кода надо для счёта использовать не саму частоту тактирования, а поделенную на 2..4.
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
Oct 20 2015, 12:32
|
Знающий
   
Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783

|
Цитата(EvgenyNik @ Oct 20 2015, 15:28)  Чтобы пропускало меньше кода надо для счёта использовать не саму частоту тактирования, а поделенную на 2..4. Так каждый может  )))) Интересно решить оригинальную задачу. Вариант с двухпортовой памятью как идея очень даже ничего. Ищу другие.
|
|
|
|
|
Oct 20 2015, 12:43
|
Частый гость
 
Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311

|
Цитата(EvgenyNik @ Oct 20 2015, 14:28)  FIFO не подойдёт, т.к. подразумевается разница частот, а значит буфер или переполнится или будет пустым. У FIFO есть сигналы EMPTY, FULL. Если все сделать правильно, то пропусков не будет. Совсем.
|
|
|
|
|
Oct 20 2015, 12:49
|
Знающий
   
Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783

|
Цитата(XVR @ Oct 20 2015, 15:37)  Это с какого перепугу она искажает? Вы код Грея с бинарным не перепутали? Упс.... я вообще с чем то своим перепутал.... Согласен коды грея подходят если при частоте счёта меньше второй частоты. Как быть если счёт идёт на большей частоте. И потеря младших бит не выход? Цитата(dima32rus @ Oct 20 2015, 15:43)  У FIFO есть сигналы EMPTY, FULL. Если все сделать правильно, то пропусков не будет. Совсем. Если не секрет как именно их использовать? Я пока плохо понимаю саму идею.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|