Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: формирование короткого импульса
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
dsp
есть тактовая частота 50 мгц и асинхронно к ней приходящий срез сигнала по этому срезу надо сформировать положительный импульс длительностью 1 такт тактовой частоты и синхронный с этой тактовой частотой пробовал что описано здесь что-то не получается подскажите пожалуйста что можно сделать ?
des00
Цитата(dsp @ Oct 26 2005, 05:31)
есть тактовая частота 50 мгц и асинхронно к ней приходящий срез сигнала по этому срезу надо сформировать положительный импульс длительностью 1 такт тактовой частоты и синхронный с этой тактовой частотой пробовал что описано здесь что-то не получается подскажите пожалуйста что можно сделать ?
*

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

wink.gif
Alexandr
Код
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;
Gate
Цитата(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 триггера.
dsp
я синтезирую Synplify 8.2 размещение Xilinx 7.1 Sp4 timing симуляция Activ-Hdl 6.3 Sp2 беру схему формирователя короткого импульса одну из описанных выше она корректно работает некоторое время а потом начинает глючить выходной сигнал одновременно 1 и 0 то же самое при размещении Altera 4.1
все работает нормально посему вопрос что за глюк и откуда ноги растут?
rezident
Я не знаком с языками HDL, но схемотехнически могу пояснить. Нужно использовать два триггера. Первым триггером входной асинхронный сигнал делается синхронным, а на втором триггере делается формирователь импульса по срезу или спаду (как вам хочется).
k0t
Если просто два триггера, есть возможность пропустить фронт. Лучше делать так:Нажмите для просмотра прикрепленного файла
Victor®
Цитата(k0t @ Oct 27 2005, 13:25)
Если просто два триггера, есть возможность пропустить фронт. Лучше делать так:Нажмите для просмотра прикрепленного файла
*


Если убрать средний тригер - получится схема из MAX+PLUS II Help.
Непонятно как можно не пропустить фронт в Вашем варианте,
особенно если между поступлением импульсов время будет меньше периода CLK?

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

Всего наилучшего.
k0t
Цитата(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-х тригерном варианте хорошо - так то, что
вероятность попадания в метастабильное состояние намного меньше.

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

lutik
Цитата(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 - могу предложить типа
lutik
Цитата(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

обьединяете два куска и получаете работоспособное решение вашей проблемы
lutik
Цитата(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;

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

извиняюсь дико
andrew_b
Цитата(lutik @ Nov 2 2005, 18:08)
во глюк то..

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

Вы как аффтар можете удалить свои сообщения, нажав соотвецтвующую кнопку.
YUV
Есть еще одна схемка...
Надеюсь, не нужно объяснять как она работает?
sazh
//Есть еще одна схемка...
Надеюсь, не нужно объяснять как она работает?//
Если открыть учебник Титца и Шенка Полупроводниковая схемотехника, на странице 360
Есть схема синхронного одновибратора. Все ясно и понятно.
Все потуги сделать что то лучше изначально обречены на провал. Хотя бы потому, что НЕЧИТАЕМО сходу. Вторая причина. Они ущербны. Что предложенные на автомате, что Ваша. Попробуйте подать на вход IN меандр с частотой CLK/2. Они будут пропускать эти данные.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.