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

 
 
> формирование короткого импульса, читал конференцию но есть вопрос
dsp
сообщение Oct 26 2005, 10:31
Сообщение #1


Участник
*

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



есть тактовая частота 50 мгц и асинхронно к ней приходящий срез сигнала по этому срезу надо сформировать положительный импульс длительностью 1 такт тактовой частоты и синхронный с этой тактовой частотой пробовал что описано здесь что-то не получается подскажите пожалуйста что можно сделать ?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
des00
сообщение Oct 26 2005, 10:57
Сообщение #2


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

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(dsp @ Oct 26 2005, 05:31)
есть тактовая частота 50 мгц и асинхронно к ней приходящий срез сигнала по этому срезу надо сформировать положительный импульс длительностью 1 такт тактовой частоты и синхронный с этой тактовой частотой пробовал что описано здесь что-то не получается подскажите пожалуйста что можно сделать ?
*

Без обид.
1. Сесть подумать, почему у всех работает а у вас нет.
2. Драйвера переставить.

wink.gif


--------------------
Go to the top of the page
 
+Quote Post
Alexandr
сообщение Oct 26 2005, 11:44
Сообщение #3


Знающий
****

Группа: Модераторы
Сообщений: 804
Регистрация: 1-12-04
Пользователь №: 1 283



Код
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;


--------------------
Иван Сусанин - первый полупроводник
Go to the top of the page
 
+Quote Post
Gate
сообщение Oct 26 2005, 13:48
Сообщение #4


Знающий
****

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


--------------------
"Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается." (с) С.Лем
Go to the top of the page
 
+Quote Post
dsp
сообщение Oct 27 2005, 05:41
Сообщение #5


Участник
*

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



я синтезирую Synplify 8.2 размещение Xilinx 7.1 Sp4 timing симуляция Activ-Hdl 6.3 Sp2 беру схему формирователя короткого импульса одну из описанных выше она корректно работает некоторое время а потом начинает глючить выходной сигнал одновременно 1 и 0 то же самое при размещении Altera 4.1
все работает нормально посему вопрос что за глюк и откуда ноги растут?
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 27 2005, 10:00
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Я не знаком с языками HDL, но схемотехнически могу пояснить. Нужно использовать два триггера. Первым триггером входной асинхронный сигнал делается синхронным, а на втором триггере делается формирователь импульса по срезу или спаду (как вам хочется).
Go to the top of the page
 
+Quote Post
k0t
сообщение Oct 27 2005, 10:25
Сообщение #7


Участник
*

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



Если просто два триггера, есть возможность пропустить фронт. Лучше делать так:
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
Victor®
сообщение Nov 1 2005, 16:27
Сообщение #8


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
Go to the top of the page
 
+Quote Post
k0t
сообщение Nov 2 2005, 11:39
Сообщение #9


Участник
*

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



Цитата(Victor® @ Nov 1 2005, 20:27)
Цитата(k0t @ Oct 27 2005, 13:25)
Если просто два триггера, есть возможность пропустить фронт. Лучше делать так:
Прикрепленное изображение

*


Если убрать средний тригер - получится схема из MAX+PLUS II Help.

Гм? Действительно smile.gif Но без среднего триггера хуже с точки зрения метастабильности (ИМХО).

Непонятно как можно не пропустить фронт в Вашем варианте,
особенно если между поступлением импульсов время будет меньше периода CLK?

Если частота следования импульсов больше clk, то вообще не возможно поймать ВСЕ фронты... Да и зачем это может быть нужно? smile.gif
Эта схема гарантированно ловит 1 фронт, какова бы не была длительность (в разумных пределах, конечно) импульса.

Мне кажется, что схема с 3 тригерами от этого не спасает.
Единственное, что в 3-х тригерном варианте хорошо - так то, что
вероятность попадания в метастабильное состояние намного меньше.

Всего наилучшего.
*

Go to the top of the page
 
+Quote Post
lutik
сообщение Nov 2 2005, 14:58
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 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 - могу предложить типа


--------------------
однако..
Go to the top of the page
 
+Quote Post
lutik
сообщение Nov 2 2005, 15:02
Сообщение #11


Частый гость
**

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

обьединяете два куска и получаете работоспособное решение вашей проблемы


--------------------
однако..
Go to the top of the page
 
+Quote Post
lutik
сообщение Nov 2 2005, 15:06
Сообщение #12


Частый гость
**

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

соедините два куска вместе и получите вполне работоспособное решение вашей проблемы


--------------------
однако..
Go to the top of the page
 
+Quote Post
lutik
сообщение Nov 2 2005, 15:08
Сообщение #13


Частый гость
**

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



во глюк то..

извиняюсь дико


--------------------
однако..
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Nov 3 2005, 06:22
Сообщение #14


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

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(lutik @ Nov 2 2005, 18:08)
во глюк то..

извиняюсь дико
*

Вы как аффтар можете удалить свои сообщения, нажав соотвецтвующую кнопку.
Go to the top of the page
 
+Quote Post
YUV
сообщение Nov 10 2005, 10:40
Сообщение #15


Участник
*

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



Есть еще одна схемка...
Надеюсь, не нужно объяснять как она работает?
Go to the top of the page
 
+Quote Post

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

 


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


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