Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Генерация импульсов определенной длины
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Anton2
Добрый день!

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

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

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


зачем частота clk_5Mhz?
iosifk
Цитата(Anton2 @ May 27 2014, 14:41) *
Добрый день!

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


Программируемый таймер. У него есть сигнал запуска, он загружается константой или из регистра - число тактов выдержки времени..
Думаю, на открытых проектах их полно. Даже в моем "Кратком Курсе" есть пример...
Anton2
Цитата(Maverick @ May 27 2014, 15:04) *
зачем частота clk_5Mhz?


По фронту clk_5Mhz начинается отсчет времени. Т.е. он инициирует начало отсчета. Например, нам нужно отсчитать 20 ns (с момента положительного фронта clk_5Mhz), а это 5 периодов сигнала clk_250Mhz.
Maverick
Цитата(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;
Anton2
Цитата(Maverick @ May 27 2014, 15:56) *
просто это все можно сделать и с помощью тактовой частоты 250Mhz.
дискретность времени меньше и нет пересечения клоковых доменов, но разрадность счетчика больше ...

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


Да, действительно метод iosfik'a интересен, надо будет попробовать. Но вот вашу мысль, если честно, не уловил. Вроде бы пересечения клоковых доменов не наблюдается ( если говорить о сигналах clk_5MHz и clk_250MHz - они генерируются из 200MHz system clock через MMCM). Но в любом случае, как можно обойтись без clk_5MHz, если это, грубо говоря, управляющий сигнал и по его фронту начинается отсчет. Про разрядность счетчика тоже вопрос.
Можно раскрыть подробнее, что вы имели в виду)
Maverick
Цитата(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
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.