Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подстроиться под входную частоту
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
zombi
Есть проблемка.
В схеме юзаю альтеру EPM3256ATC144-7, на ее обе global_clk приходят 25MHz и 100MHz имеется внешний ресет (можно и програмный реализовать).
100MHz получены из 25 на внешнем PLL (ICS512B).
Проблема в том что фаза частоты 100MHz с PLL-ки случайна от включения к включению. Т.е. фазы частот либо совпадают либо они противоположны.
Можно ли както в альтере при включении питания (один раз) определить как пришла частота 100MHz относительно 25MHz.
И уже потом тактировать остальные блоки либо прямой либо инверсной частотой 100MHz.
Shtirlits
Вариантов два - заменить PLL, например, на рекомендованные в документации модели с фиксированной фазой, либо жертвовать драгоценные ресурсы cpld, а их может понадобится, на синхронизацию регистров 2-3, если не получится гарантировать соотношение фаз. И еще регистр, который будет помнить фазу, ну и регистр для сброса основной схемы.
des00
1. Странная у вас PLL, это точно PLL?
2. Не парить мозг, а получить 25МГц в ПЛИС.
zombi
Цитата(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. Нет нужно обязательно от внешней синхронизироваться.
des00
Цитата(zombi @ Oct 4 2010, 10:58) *
2. Нет нужно обязательно от внешней синхронизироваться.

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

К сожалению не знаю что значит нарезать laughing.gif ! и про детектор фронта можно подробнее плиз unsure.gif
des00
Цитата(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];
zombi
Цитата(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
des00
Цитата(zombi @ Oct 4 2010, 10:20) *
Не силен я в языках описания аппаратуры. Токо в граф редакторе шупортаюсь crying.gif

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

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

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

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

Интересно в плане энергопотребления ПЛИС.
Тактировать схему на Fclk = 100 МГц через enable Fclk/4 или на частоте Fclk = 25 МГц.
По идее ощутимо отличаться не должно.
Intekus
Цитата(zombi @ Oct 4 2010, 21:15) *
Нет. Мне надо 100MHz либо инвертировать либо нет в зависомости от 25MHz.

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

И всетаки не понимаю как clock enable использовать???
Maverick
Цитата(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
Shtirlits
страница 6 и 7
http://www.altera.com/literature/ds/m3000a.pdf
zombi
Цитата(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 использовать для определения фазы входной частоты???
sazh
Цитата(zombi @ Oct 4 2010, 21:53) *
Как DFF with Positive-Edge Clock and Clock Enable использовать для определения фазы входной частоты???


Просто Вам пытаются сказать, что одного клока 100 Мгц достаточно для Ваших нужд.
Иначе Вы бы не выбрали такое семейство для своего проекта.
А с фазой можно просто поступить.
По включению питания все триггера семейства устанавливаются в ноль.
Значит можно организовать по включению питания одноразовую работу счетчика на частоте 25 Мгц, который сформирует синхронный rst
на триггер tff, на "с" вход которого подать 200Мгц. на выходе 100, в фазе с 25. ( но фронт со сдвигом)
Shtirlits
Был совет не использовать внешний 25MHz-овый клок вовсе!
Питать всю схему 100MHz и разрешать кажый четвертый такт.

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

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

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

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


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

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

В любом случае ясно что проблему в лоб не решить.
Shtirlits
частота чего-то полезного 126.6MHz

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

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

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.