Перейти к содержанию
    

формирование короткого импульса

есть тактовая частота 50 мгц и асинхронно к ней приходящий срез сигнала по этому срезу надо сформировать положительный импульс длительностью 1 такт тактовой частоты и синхронный с этой тактовой частотой пробовал что описано здесь что-то не получается подскажите пожалуйста что можно сделать ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть тактовая частота 50 мгц и асинхронно к ней приходящий срез сигнала по этому срезу надо сформировать положительный импульс длительностью 1 такт тактовой частоты и синхронный с этой тактовой частотой пробовал что описано здесь что-то не получается подскажите пожалуйста что можно сделать ?

Без обид.

1. Сесть подумать, почему у всех работает а у вас нет.

2. Драйвера переставить.

 

;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 триггера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

все работает нормально посему вопрос что за глюк и откуда ноги растут?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не знаком с языками HDL, но схемотехнически могу пояснить. Нужно использовать два триггера. Первым триггером входной асинхронный сигнал делается синхронным, а на втором триггере делается формирователь импульса по срезу или спаду (как вам хочется).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если просто два триггера, есть возможность пропустить фронт. Лучше делать так:post-1889-1130408614_thumb.jpg

 

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

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

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

 

Мне кажется, что схема с 3 тригерами от этого не спасает.

Единственное, что в 3-х тригерном варианте хорошо - так то, что

вероятность попадания в метастабильное состояние намного меньше.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если просто два триггера, есть возможность пропустить фронт. Лучше делать так:post-1889-1130408614_thumb.jpg

 

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

 

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

 

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

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

 

Если частота следования импульсов больше clk, то вообще не возможно поймать ВСЕ фронты... Да и зачем это может быть нужно? :)

Эта схема гарантированно ловит 1 фронт, какова бы не была длительность (в разумных пределах, конечно) импульса.

 

Мне кажется, что схема с 3 тригерами от этого не спасает.

Единственное, что в 3-х тригерном варианте хорошо - так то, что

вероятность попадания в метастабильное состояние намного меньше.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть тактовая частота 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 - могу предложить типа

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть тактовая частота 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 - оба :)

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть тактовая частота 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;

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

во глюк то..

 

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

Вы как аффтар можете удалить свои сообщения, нажав соотвецтвующую кнопку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...