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

 
 
> Подстроиться под входную частоту
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
 
Start new topic
Ответов
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
zombi
сообщение Oct 4 2010, 15:58
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #4


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

Группа: Модераторы
Сообщений: 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
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #6


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

Группа: Модераторы
Сообщений: 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
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 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
DmitryR
сообщение Oct 4 2010, 16:36
Сообщение #8


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

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



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


Гуру
******

Группа: Свой
Сообщений: 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
Intekus
сообщение Oct 4 2010, 17:31
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #12


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

Группа: Модераторы
Сообщений: 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
zombi
сообщение Oct 4 2010, 18:53
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 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
zombi
сообщение Oct 4 2010, 19:40
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 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
vadimuzzz
сообщение Oct 4 2010, 22:47
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 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, 15:12
|- - des00   Цитата(zombi @ Oct 4 2010, 10:20) Не силе...   Oct 4 2010, 16:31
||- - Shtirlits   QUOTE (DmitryR @ Oct 4 2010, 20:36) Как т...   Oct 4 2010, 17:12
||- - x736C   Цитата(DmitryR @ Oct 4 2010, 20:36) Как т...   Oct 4 2010, 17:27
|- - sazh   Цитата(zombi @ Oct 4 2010, 19:20) Не силе...   Oct 4 2010, 17:07
- - des00   1. Странная у вас PLL, это точно PLL? 2. Не парить...   Oct 4 2010, 15:46
- - Shtirlits   страница 6 и 7 http://www.altera.com/literature/ds...   Oct 4 2010, 18:20
- - Shtirlits   Был совет не использовать внешний 25MHz-овый клок ...   Oct 4 2010, 19:12
- - Shtirlits   частота чего-то полезного 126.6MHz Так скажите, в...   Oct 4 2010, 20:33
- - zombi   Все оказалось банально просто когда я вместо ICS51...   Oct 4 2010, 23:02


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

 


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


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