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

 
 
> Подстроиться под входную частоту
zombi
сообщение Oct 4 2010, 15:12
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Есть проблемка.
В схеме юзаю альтеру EPM3256ATC144-7, на ее обе global_clk приходят 25MHz и 100MHz имеется внешний ресет (можно и програмный реализовать).
100MHz получены из 25 на внешнем PLL (ICS512B).
Проблема в том что фаза частоты 100MHz с PLL-ки случайна от включения к включению. Т.е. фазы частот либо совпадают либо они противоположны.
Можно ли както в альтере при включении питания (один раз) определить как пришла частота 100MHz относительно 25MHz.
И уже потом тактировать остальные блоки либо прямой либо инверсной частотой 100MHz.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 24)
Shtirlits
сообщение Oct 4 2010, 15:46
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Вариантов два - заменить PLL, например, на рекомендованные в документации модели с фиксированной фазой, либо жертвовать драгоценные ресурсы cpld, а их может понадобится, на синхронизацию регистров 2-3, если не получится гарантировать соотношение фаз. И еще регистр, который будет помнить фазу, ну и регистр для сброса основной схемы.
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 4 2010, 15:46
Сообщение #3


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



1. Странная у вас PLL, это точно PLL?
2. Не парить мозг, а получить 25МГц в ПЛИС.


--------------------
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 4 2010, 15:58
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(Shtirlits @ Oct 4 2010, 18:46) *
Вариантов два - заменить PLL, например, на рекомендованные в документации модели с фиксированной фазой,

В след. итерации обязательно заменю. А сейчас надо чтото с этой делать!
Цитата(Shtirlits @ Oct 4 2010, 18:46) *
жертвовать драгоценные ресурсы cpld, а их может понадобится, на синхронизацию регистров 2-3, если не получится гарантировать соотношение фаз. И еще регистр, который будет помнить фазу, ну и регистр для сброса основной схемы.

Согласен пожертвовать! Токо не знаю как unsure.gif

Цитата(des00 @ Oct 4 2010, 18:46) *
1. Странная у вас PLL, это точно PLL?
2. Не парить мозг, а получить 25МГц в ПЛИС.

1. Да точно PLL токо голимая.
2. Нет нужно обязательно от внешней синхронизироваться.
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 4 2010, 16:01
Сообщение #5


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(zombi @ Oct 4 2010, 10:58) *
2. Нет нужно обязательно от внешней синхронизироваться.

что на этих 25 метрах? а если нарезать на 100 и детектор фронта использовать? smile.gif


--------------------
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 4 2010, 16:04
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(des00 @ Oct 4 2010, 19:01) *
что на этих 25 метрах? а если нарезать на 100 и детектор фронта использовать? smile.gif

К сожалению не знаю что значит нарезать laughing.gif ! и про детектор фронта можно подробнее плиз unsure.gif
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 4 2010, 16:08
Сообщение #7


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(zombi @ Oct 4 2010, 11:04) *
К сожалению не знаю что значит нарезать laughing.gif ! и про детектор фронта можно подробнее плиз unsure.gif

пропустить через 2-3 триггера на частоте 100МГц и используя схему выделения фронтов пропускаемого сигнала (в вашем случае 25МГц) построить всю логику. Выделение фронтов делается так
Код
always @(posedge clk_100MHz)
  {r[1], r[0]} <= {r[0], pipa};

assign pipa_posedge = ~r[1] &  r[0];
assign pipa_negedge =  r[1] & ~r[0];
assign pipa_anyedge =  r[1] ^  r[0];


--------------------
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 4 2010, 16:20
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(des00 @ Oct 4 2010, 19:08) *
пропустить через 2-3 триггера на частоте 100МГц и используя схему выделения фронтов пропускаемого сигнала (в вашем случае 25МГц) построить всю логику. Выделение фронтов делается так
Код
always @(posedge clk_100MHz)
  {r[1], r[0]} <= {r[0], pipa};

assign pipa_posedge = ~r[1] &  r[0];
assign pipa_negedge =  r[1] & ~r[0];
assign pipa_anyedge =  r[1] ^  r[0];

Не силен я в языках описания аппаратуры. Токо в граф редакторе шупортаюсь crying.gif
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 4 2010, 16:31
Сообщение #9


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(zombi @ Oct 4 2010, 10:20) *
Не силен я в языках описания аппаратуры. Токо в граф редакторе шупортаюсь crying.gif

тут ничем помочь не могу, т.к. не рисую, r это регистры, ~ инверсия, остальные символы как в си %) Ну или ждите когда кто нить из форумчан нарисует.


--------------------
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Oct 4 2010, 16:36
Сообщение #10


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

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Как только вы свои 25МГц пропустите через логику, чтобы сделать инверсию - у нее фронт уплывет от фронта 100 МГц. Не мучайтесь, тактируйте все от 100 МГц, поставьте на них же счетчик до 4-х и от этого счетчика запитайте enable схемы, которая должна работать вчетверо медленнее.
Go to the top of the page
 
+Quote Post
sazh
сообщение Oct 4 2010, 17:07
Сообщение #11


Гуру
******

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



Цитата(zombi @ Oct 4 2010, 19:20) *
Не силен я в языках описания аппаратуры. Токо в граф редакторе шупортаюсь crying.gif

http://electronix.ru/forum/index.php?showt...mp;#entry819078

В 16 посте скачайте файлы. Там есть в графике переход из одного клокового домена в другой.
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Oct 4 2010, 17:12
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



QUOTE (DmitryR @ Oct 4 2010, 20:36) *
Как только вы свои 25МГц пропустите через логику, чтобы сделать инверсию - у нее фронт уплывет от фронта 100 МГц. Не мучайтесь, тактируйте все от 100 МГц, поставьте на них же счетчик до 4-х и от этого счетчика запитайте enable схемы, которая должна работать вчетверо медленнее.

+1
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 4 2010, 17:15
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(DmitryR @ Oct 4 2010, 19:36) *
Как только вы свои 25МГц пропустите через логику, чтобы сделать инверсию - у нее фронт уплывет от фронта 100 МГц. Не мучайтесь, тактируйте все от 100 МГц, поставьте на них же счетчик до 4-х и от этого счетчика запитайте enable схемы, которая должна работать вчетверо медленнее.

Нет. Мне надо 100MHz либо инвертировать либо нет в зависомости от 25MHz.

Код
always @(posedge clk_100MHz)
  {r[1], r[0]} <= {r[0], pipa};

assign pipa_posedge = ~r[1] &  r[0];
assign pipa_negedge =  r[1] & ~r[0];
assign pipa_anyedge =  r[1] ^  r[0];

Намалевал схемку, токо не знаю что дальше делать с PosE,NegE,AnyE?
В идеале хотелось бы подать на вход SEL mux0 0/1 для выбора нужной частоты (если оно так работать будет?)

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
x736C
сообщение Oct 4 2010, 17:27
Сообщение #14


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

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Цитата(DmitryR @ Oct 4 2010, 20:36) *
Как только вы свои 25МГц пропустите через логику, чтобы сделать инверсию - у нее фронт уплывет от фронта 100 МГц. Не мучайтесь, тактируйте все от 100 МГц, поставьте на них же счетчик до 4-х и от этого счетчика запитайте enable схемы, которая должна работать вчетверо медленнее.

Интересно в плане энергопотребления ПЛИС.
Тактировать схему на Fclk = 100 МГц через enable Fclk/4 или на частоте Fclk = 25 МГц.
По идее ощутимо отличаться не должно.
Go to the top of the page
 
+Quote Post
Intekus
сообщение Oct 4 2010, 17:31
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 4-03-08
Из: Москва
Пользователь №: 35 621



Цитата(zombi @ Oct 4 2010, 21:15) *
Нет. Мне надо 100MHz либо инвертировать либо нет в зависомости от 25MHz.

А почему "нет"? Присоединяюсь к советующим использовать clock enable.


--------------------
...а Сила, Брат - она - в несиловых решениях.
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 4 2010, 17:35
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(Intekus @ Oct 4 2010, 20:31) *
А почему "нет"? Присоединяюсь к советующим использовать clock enable.

И всетаки не понимаю как clock enable использовать???
Go to the top of the page
 
+Quote Post
Maverick
сообщение Oct 4 2010, 18:02
Сообщение #17


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(zombi @ Oct 4 2010, 20:35) *
И всетаки не понимаю как clock enable использовать???

управлять работой триггером/регистром, не пробовали? smile.gif

Возьмите ниже приведенное описание (выбирать описание Вам на VHDL или на Verilog - что больше нравиться smile.gif ) и промоделируйте DFF with Positive-Edge Clock and Clock Enable

Цитата
Описание выводов

D -- Data Input
C -- Positive-Edge Clock
CE -- Clock Enable (active High)
Q -- Data Output


Код
VHDL Code

Following is the equivalent VHDL code for the DFF with a positive-edge clock and clock Enable.

library ieee;
use ieee.std_logic_1164.all;


entity flop is
  port(C, D, CE  : in  std_logic;
      Q          : out std_logic);
end flop;
architecture archi of flop is
  begin
    process (C)
      begin
        if (C'event and C='1') then
          if (CE='1') then
            Q = D;
          end if;
        end if;
    end process;
end archi;

Verilog Code

Following is the equivalent Verilog code for the DFF with a positive-edge clock and clock enable.

module flop (C, D, CE, Q);
  input C, D, CE;
  output Q;
  reg Q;


  always @(posedge C)
    begin
      if (CE)
        Q = D;
    end
endmodule


И все поймете smile.gif


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Oct 4 2010, 18:20
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



страница 6 и 7
http://www.altera.com/literature/ds/m3000a.pdf
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 4 2010, 18:53
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(Maverick @ Oct 4 2010, 21:02) *
Возьмите ниже приведенное описание (выбирать описание Вам на VHDL или на Verilog - что больше нравиться smile.gif ) и промоделируйте DFF with Positive-Edge Clock and Clock Enable


Не, ну Вы даете! что такое clock enable я знаю biggrin.gif

Как DFF with Positive-Edge Clock and Clock Enable использовать для определения фазы входной частоты???
Go to the top of the page
 
+Quote Post
sazh
сообщение Oct 4 2010, 19:10
Сообщение #20


Гуру
******

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



Цитата(zombi @ Oct 4 2010, 21:53) *
Как DFF with Positive-Edge Clock and Clock Enable использовать для определения фазы входной частоты???


Просто Вам пытаются сказать, что одного клока 100 Мгц достаточно для Ваших нужд.
Иначе Вы бы не выбрали такое семейство для своего проекта.
А с фазой можно просто поступить.
По включению питания все триггера семейства устанавливаются в ноль.
Значит можно организовать по включению питания одноразовую работу счетчика на частоте 25 Мгц, который сформирует синхронный rst
на триггер tff, на "с" вход которого подать 200Мгц. на выходе 100, в фазе с 25. ( но фронт со сдвигом)
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Oct 4 2010, 19:12
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Был совет не использовать внешний 25MHz-овый клок вовсе!
Питать всю схему 100MHz и разрешать кажый четвертый такт.

Ваше изумление вероятно вызвано скрытым от нас знанием схемы, в которой, возможно, 25MHz тактирует какую-то периферию.

Честно говоря, я не нашел в документации на PLL никакого упоминания о соотношении фаз, на которые можно рассчитывать, только сказано, что оно может меняться от включения к включению.

Может, пусть cpld делит клок на 4 и выдает его наружу, а не напрямую с кварца? И PLL будет счастливее...
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 4 2010, 19:40
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(sazh @ Oct 4 2010, 22:10) *
Значит можно организовать по включению питания одноразовую работу счетчика на частоте 25 Мгц, который сформирует синхронный rst
на триггер tff, на "с" вход которого подать 200Мгц. на выходе 100, в фазе с 25. ( но фронт со сдвигом)

Хорошо бы еслиб альтера тянула 200.


Цитата(Shtirlits @ Oct 4 2010, 22:12) *
Честно говоря, я не нашел в документации на PLL никакого упоминания о соотношении фаз, на которые можно рассчитывать, только сказано, что оно может меняться от включения к включению.

Вы правы. Я осцилографом смотрел. Вроде фазы входной и умноженной частоты либо совпадают либо инверсны.
А может осцилом всего и не увидеть.

В любом случае ясно что проблему в лоб не решить.
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Oct 4 2010, 20:33
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



частота чего-то полезного 126.6MHz

Так скажите, выход REF к чему-то кроме CPLD подключен?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Oct 4 2010, 22:47
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(zombi @ Oct 5 2010, 02:40) *
Вы правы. Я осцилографом смотрел. Вроде фазы входной и умноженной частоты либо совпадают либо инверсны.
А может осцилом всего и не увидеть.

меня терзают смутные сомнения... а каким сигналом вы синхронизировались?
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 4 2010, 23:02
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Все оказалось банально просто когда я вместо ICS512 подключил ICS570 (у него фаза стабильна и совпадает с фазой входной чачтоты).
ISC570 вообще отказывался работать (наблюдался срыв т.е. на выходе вместо 100MHz было х.з. что).
Начал копать почему.
И оказалось что на шине данных (плис/озу) был конфликт (небольшой 3-4 нс) и этого хватало чтобы просадка по питанию сбивала его. Устранил.
Затем еще обнаружил что сигналом стробирую данные во внутреннем регистре плис и этот же сигнал вывожу для стробтрования во внешнем регистре (забыл про задержку).
Короче все работает и подстраиваться под входную частоту нет абсолютно никакой необходимости.
Как обычно проблема была в мозгах а не в частотах. laughing.gif
РАБОТАЕТ ГАДЮКА yeah.gif yeah.gif yeah.gif

Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 18:50
Рейтинг@Mail.ru


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