|
|
  |
Генерация импульсов определенной длины |
|
|
|
May 27 2014, 06:31
|
Группа: Новичок
Сообщений: 9
Регистрация: 13-01-14
Пользователь №: 80 010

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

я только учусь...
     
Группа: Модераторы
Сообщений: 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.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
May 27 2014, 07:29
|
Гуру
     
Группа: Модераторы
Сообщений: 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
|
|
|
|
|
May 27 2014, 07:38
|
Группа: Новичок
Сообщений: 9
Регистрация: 13-01-14
Пользователь №: 80 010

|
Цитата(Maverick @ May 27 2014, 15:04)  зачем частота clk_5Mhz? По фронту clk_5Mhz начинается отсчет времени. Т.е. он инициирует начало отсчета. Например, нам нужно отсчитать 20 ns (с момента положительного фронта clk_5Mhz), а это 5 периодов сигнала clk_250Mhz.
|
|
|
|
|
May 27 2014, 07:46
|

я только учусь...
     
Группа: Модераторы
Сообщений: 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.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
May 27 2014, 08:04
|
Группа: Новичок
Сообщений: 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, если это, грубо говоря, управляющий сигнал и по его фронту начинается отсчет. Про разрядность счетчика тоже вопрос. Можно раскрыть подробнее, что вы имели в виду)
|
|
|
|
|
May 27 2014, 08:17
|

я только учусь...
     
Группа: Модераторы
Сообщений: 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.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|