|
формирование короткого импульса, читал конференцию но есть вопрос |
|
|
|
Oct 26 2005, 10:31
|
Участник

Группа: Свой
Сообщений: 61
Регистрация: 24-07-04
Пользователь №: 377

|
есть тактовая частота 50 мгц и асинхронно к ней приходящий срез сигнала по этому срезу надо сформировать положительный импульс длительностью 1 такт тактовой частоты и синхронный с этой тактовой частотой пробовал что описано здесь что-то не получается подскажите пожалуйста что можно сделать ?
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Oct 26 2005, 13:48
|
Знающий
   
Группа: Свой
Сообщений: 859
Регистрация: 7-04-05
Из: Санкт-Петербург
Пользователь №: 3 943

|
Цитата(Alexandr @ Oct 26 2005, 15:44) Код process(clk) variable i: std_logic:='0';
begin if rising_edge(clk) then if ext_imp='1' then i:='0'; int_imp<='0'; else if i='0' then int_imp<='1'; i:='1'; else int_imp<='0'; end if; end if; end if; end process; Код я не проверял, но на первый беглый взгляд он не подходит для практической имплементации - не учитывается и не исправляется возможная метастабильность. Обычно ставят последовательно 2 триггера.
--------------------
"Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается." (с) С.Лем
|
|
|
|
|
Oct 27 2005, 05:41
|
Участник

Группа: Свой
Сообщений: 61
Регистрация: 24-07-04
Пользователь №: 377

|
я синтезирую Synplify 8.2 размещение Xilinx 7.1 Sp4 timing симуляция Activ-Hdl 6.3 Sp2 беру схему формирователя короткого импульса одну из описанных выше она корректно работает некоторое время а потом начинает глючить выходной сигнал одновременно 1 и 0 то же самое при размещении Altera 4.1 все работает нормально посему вопрос что за глюк и откуда ноги растут?
|
|
|
|
|
Oct 27 2005, 10:25
|
Участник

Группа: Свой
Сообщений: 53
Регистрация: 11-01-05
Пользователь №: 1 889

|
Если просто два триггера, есть возможность пропустить фронт. Лучше делать так:
|
|
|
|
|
Nov 1 2005, 16:27
|

Lazy
     
Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76

|
Цитата(k0t @ Oct 27 2005, 13:25) Если просто два триггера, есть возможность пропустить фронт. Лучше делать так:
Если убрать средний тригер - получится схема из MAX+PLUS II Help. Непонятно как можно не пропустить фронт в Вашем варианте, особенно если между поступлением импульсов время будет меньше периода CLK? Мне кажется, что схема с 3 тригерами от этого не спасает. Единственное, что в 3-х тригерном варианте хорошо - так то, что вероятность попадания в метастабильное состояние намного меньше. Всего наилучшего.
--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
|
|
|
|
|
Nov 2 2005, 11:39
|
Участник

Группа: Свой
Сообщений: 53
Регистрация: 11-01-05
Пользователь №: 1 889

|
Цитата(Victor® @ Nov 1 2005, 20:27) Цитата(k0t @ Oct 27 2005, 13:25) Если просто два триггера, есть возможность пропустить фронт. Лучше делать так:
Если убрать средний тригер - получится схема из MAX+PLUS II Help. Гм? Действительно  Но без среднего триггера хуже с точки зрения метастабильности (ИМХО). Непонятно как можно не пропустить фронт в Вашем варианте, особенно если между поступлением импульсов время будет меньше периода CLK? Если частота следования импульсов больше clk, то вообще не возможно поймать ВСЕ фронты... Да и зачем это может быть нужно?  Эта схема гарантированно ловит 1 фронт, какова бы не была длительность (в разумных пределах, конечно) импульса. Мне кажется, что схема с 3 тригерами от этого не спасает. Единственное, что в 3-х тригерном варианте хорошо - так то, что вероятность попадания в метастабильное состояние намного меньше. Всего наилучшего.
|
|
|
|
|
Nov 2 2005, 14:58
|

Частый гость
 
Группа: Свой
Сообщений: 128
Регистрация: 30-06-04
Из: Odessa
Пользователь №: 216

|
Цитата(dsp @ Oct 26 2005, 13:31) есть тактовая частота 50 мгц и асинхронно к ней приходящий срез сигнала по этому срезу надо сформировать положительный импульс длительностью 1 такт тактовой частоты и синхронный с этой тактовой частотой пробовал что описано здесь что-то не получается подскажите пожалуйста что можно сделать ? предлагаю разбить задачу на 2этапа 1 - перевод асинхронного входного сигнала в клок домен 2 - выделение заднего фронта синхронного сигнала 1- смотрите как делать во вложении.. что то типа signal inS_async, inS, inSdly : std_logic; process begin wait until (clk='1' and clk'event); inSdly <= inS_async; inS <= inSdly; end process; 2 - могу предложить типа
--------------------
однако..
|
|
|
|
|
Nov 2 2005, 15:02
|

Частый гость
 
Группа: Свой
Сообщений: 128
Регистрация: 30-06-04
Из: Odessa
Пользователь №: 216

|
Цитата(dsp @ Oct 26 2005, 13:31) есть тактовая частота 50 мгц и асинхронно к ней приходящий срез сигнала по этому срезу надо сформировать положительный импульс длительностью 1 такт тактовой частоты и синхронный с этой тактовой частотой пробовал что описано здесь что-то не получается подскажите пожалуйста что можно сделать ? предлагаю разбить задачу на 2этапа 1 - перевод асинхронного входного сигнала в клок домен 2 - выделение заднего фронта синхронного сигнала 1- смотрите как делать во вложении.. что то типа signal inS_async, inS, inSdly : std_logic; process begin wait until (clk='1' and clk'event); inSdly <= inS_async; inS <= inSdly; end process; 2 - могу предложить типа port (data,clk : in std_logic; pQ,mQ,dQ : out std_logic ); ----------------------------------- signal s : std_logic ; ----------------------------------- process begin wait until (clk='1' and clk'event); s <= not data after 5ns; end process ; pQ <= data and s ; mQ <= not(data or s); dQ <= not data xor s ; pQ - положительный фронт mQ - отрицательный фронт dQ - оба  обьединяете два куска и получаете работоспособное решение вашей проблемы
--------------------
однако..
|
|
|
|
|
Nov 2 2005, 15:06
|

Частый гость
 
Группа: Свой
Сообщений: 128
Регистрация: 30-06-04
Из: Odessa
Пользователь №: 216

|
Цитата(dsp @ Oct 26 2005, 13:31) есть тактовая частота 50 мгц и асинхронно к ней приходящий срез сигнала по этому срезу надо сформировать положительный импульс длительностью 1 такт тактовой частоты и синхронный с этой тактовой частотой пробовал что описано здесь что-то не получается подскажите пожалуйста что можно сделать ? разбейте задачу на две: 1-приведение асинхронного сигнала в клок домен 2-выделение из синхронного сигнала заднего фронта 1'е решается сдвиговым регистром из 2-3х триггеров 2'e чем то типа entity front is port (data,clk : in std_logic; pQ,mQ,dQ : out std_logic); end; architecture arc of Front is signal s : std_logic ; begin process(clk) begin if clk='1' and clk'event then s <= not data after 5ns; end if ; end process ; pQ <= data and s ; mQ <= not(data or s); dQ <= not data xor s ; end; соедините два куска вместе и получите вполне работоспособное решение вашей проблемы
--------------------
однако..
|
|
|
|
|
Nov 3 2005, 06:22
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(lutik @ Nov 2 2005, 18:08) во глюк то.. извиняюсь дико Вы как аффтар можете удалить свои сообщения, нажав соотвецтвующую кнопку.
|
|
|
|
|
Nov 10 2005, 10:40
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 27-04-05
Пользователь №: 4 551

|
Есть еще одна схемка... Надеюсь, не нужно объяснять как она работает?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|