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

 
 
 
Reply to this topicStart new topic
> Генерация импульсов определенной длины
Anton2
сообщение May 27 2014, 06:31
Сообщение #1





Группа: Новичок
Сообщений: 9
Регистрация: 13-01-14
Пользователь №: 80 010



Добрый день!

Появился следующий вопрос, интересны ваши идеи. Есть 2 тактовых сигнала, полученных из одного источника - clk_250MHz и clk_5Mhz - они синхронизированы. Как получить сигнал Y следующего вида: по фронту clk_5MHz сигнал Y переходит в 1, затем находится в этом состоянии, скажем, 5 периодов сигнала clk_250MHz, потом сбрасывается в 0 и т. д.

Go to the top of the page
 
+Quote Post
Maverick
сообщение May 27 2014, 06:54
Сообщение #2


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

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



Цитата(Anton2 @ May 27 2014, 13:41) *
Добрый день!

Появился следующий вопрос, интересны ваши идеи. Есть 2 тактовых сигнала, полученных из одного источника - clk_250MHz и clk_5Mhz - они синхронизированы. Как получить сигнал Y следующего вида: по фронту clk_5MHz сигнал Y переходит в 1, затем находится в этом состоянии, скажем, 5 периодов сигнала clk_250MHz, потом сбрасывается в 0 и т. д.


зачем частота clk_5Mhz?


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

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
iosifk
сообщение May 27 2014, 07:29
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Anton2 @ May 27 2014, 14:41) *
Добрый день!

Появился следующий вопрос, интересны ваши идеи. Есть 2 тактовых сигнала, полученных из одного источника - clk_250MHz и clk_5Mhz - они синхронизированы. Как получить сигнал Y следующего вида: по фронту clk_5MHz сигнал Y переходит в 1, затем находится в этом состоянии, скажем, 5 периодов сигнала clk_250MHz, потом сбрасывается в 0 и т. д.


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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Anton2
сообщение May 27 2014, 07:38
Сообщение #4





Группа: Новичок
Сообщений: 9
Регистрация: 13-01-14
Пользователь №: 80 010



Цитата(Maverick @ May 27 2014, 15:04) *
зачем частота clk_5Mhz?


По фронту clk_5Mhz начинается отсчет времени. Т.е. он инициирует начало отсчета. Например, нам нужно отсчитать 20 ns (с момента положительного фронта clk_5Mhz), а это 5 периодов сигнала clk_250Mhz.
Go to the top of the page
 
+Quote Post
Maverick
сообщение May 27 2014, 07:46
Сообщение #5


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

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



Цитата(Anton2 @ May 27 2014, 14:48) *
По фронту clk_5Mhz начинается отсчет времени. Т.е. он инициирует начало отсчета. Например, нам нужно отсчитать 20 ns (с момента положительного фронта clk_5Mhz), а это 5 периодов сигнала clk_250Mhz.

просто это все можно сделать и с помощью тактовой частоты 250Mhz.
дискретность времени меньше и нет пересечения клоковых доменов, но разрадность счетчика больше ...

Как реализовывать Вам iosifk подсказал...

+

Цитата
Если надо считать "до константы", то меньше ресурсов будет тратиться, и работать будет быстрее, если перед началом счета эту константу загрузить, а потом считать до нуля... Особенно это влияет, если константа будет загружаться в какой-нибудь регистр, и потом будет сравниваться с состоянием счетчика. Так что лучше сразу привыкать вычислять время путем декрементов счетчика...


Т.е. основа это счетчик с предварительной загрузкой c компаратором, который при достижении счетчиком нуля остановит работу счетчика...

в результате получается примерно следующее описание:
Код
process (RSTn, CLK, load)
   begin
      if (RSTn = '0') then
         COUNT_VALUE <= (others => '0');
      elsif (CLK'event and CLK = '1') then
         if (load = '1') then
     COUNT_VALUE <= Number;
           else
               if COUNT_VALUE = "00000000" then  
             COUNT_VALUE <= COUNT_VALUE;  
                        imp_time <= '0';
         else
             COUNT_VALUE <= COUNT_VALUE - 1;
                         imp_time <= '1';
         end if;  end if; end if;
         end process;
   COUNT <= COUNT_VALUE;


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

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Anton2
сообщение May 27 2014, 08:04
Сообщение #6





Группа: Новичок
Сообщений: 9
Регистрация: 13-01-14
Пользователь №: 80 010



Цитата(Maverick @ May 27 2014, 15:56) *
просто это все можно сделать и с помощью тактовой частоты 250Mhz.
дискретность времени меньше и нет пересечения клоковых доменов, но разрадность счетчика больше ...

Как реализовывать Вам iosifk подсказал...


Да, действительно метод iosfik'a интересен, надо будет попробовать. Но вот вашу мысль, если честно, не уловил. Вроде бы пересечения клоковых доменов не наблюдается ( если говорить о сигналах clk_5MHz и clk_250MHz - они генерируются из 200MHz system clock через MMCM). Но в любом случае, как можно обойтись без clk_5MHz, если это, грубо говоря, управляющий сигнал и по его фронту начинается отсчет. Про разрядность счетчика тоже вопрос.
Можно раскрыть подробнее, что вы имели в виду)
Go to the top of the page
 
+Quote Post
Maverick
сообщение May 27 2014, 08:17
Сообщение #7


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

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



Цитата(Anton2 @ May 27 2014, 15:14) *
Да, действительно метод iosfik'a интересен, надо будет попробовать. Но вот вашу мысль, если честно, не уловил. Вроде бы пересечения клоковых доменов не наблюдается ( если говорить о сигналах clk_5MHz и clk_250MHz - они генерируются из 200MHz system clock через MMCM). Но в любом случае, как можно обойтись без clk_5MHz, если это, грубо говоря, управляющий сигнал и по его фронту начинается отсчет. Про разрядность счетчика тоже вопрос.
Можно раскрыть подробнее, что вы имели в виду)


см. предыдущее сообщение - отредактировал/добавил...
Пояснение дал, т.к. программируемый таймер можно сделать, чтобы таймер считал до какого-то значения или как я написал что значение загружается в таймер и таймер отсчитывает от загруженного значения до нуля. Оперируйте временем, которое нужно отсчитать например 40 нс, 95нс, 1мс, 4мкс и т.д, которое кратно периоду Вашей тактовой частоты.
И все равно у Вас будет пересечение клоковых доменов...
PS Сигнал imp_time это Ваш Y


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

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

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

 


RSS Текстовая версия Сейчас: 18th June 2025 - 00:38
Рейтинг@Mail.ru


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