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

Подкинте идейку :)

Имеется два входа: вход SIGNAL и вход CLK

И есть выход DETECTED.

 

У CLK частота - пусть 15 ns.

 

Как сделать, чтобы детектилась вот такая форма сигнала (SIGNAL) :

 

|"""""""""""""""|_____|"""""""""""""""|_____|"""""""""""""""|

 

|<---320ns--->|100ns|<---320ns--->|

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


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

Извините ошибся не правильно понял, так пришлось полностью отредактировать сообщение.

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


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

Спасибо!

:a14:

 

Удалось реализовать, другим методом:

 

process(clk)
--###########
--# Detect signal #
--###########
            
if SIGNAL = '0' then
    
    if SIGNAL_prev = '1' then
        SIGNAL_prev <= '0';
        d_wc <= conv_std_logic_vector(1,16);
        if d_wc < 20 then
            d_pc <= conv_std_logic_vector(0,16);
        else
            d_pc <= d_pc + 1;
        end if;
    elsif d_wc <= 8 then
        d_wc <= d_wc + 1;
    else
        d_pc <= conv_std_logic_vector(0,16);
    end if;
                
else
                
    if SIGNAL_prev = '0' then
        SIGNAL_prev <= '1';
        d_wc <= conv_std_logic_vector(1,16);
        if d_wc < 6 then
            d_pc <= conv_std_logic_vector(0,16);
        else
            d_pc <= d_pc + 1;
        end if;
    elsif d_wc <= 22 then
        d_wc <= d_wc + 1;
    else
        d_pc <= conv_std_logic_vector(0,16);
    end if;

end if;
            
if d_pc <= conv_std_logic_vector(4,16) then
    DETECTED <= '0';
else
    DETECTED <= '1';
end if;

 

в переменной d_pc - количество верных обнаруженных периодов, если их накопилось больше 4, то сигнал обнаружен. Работает! :maniac:

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


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

Детектировать сигнал сложной формы можно сдвиговым регистром и сравнением его с паттерном.

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


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

Детектировать сигнал сложной формы можно сдвиговым регистром и сравнением его с паттерном.

 

Можно. Но вот думаю - это был бы здоровущий мультиплексор. Да и паттерн такого размера самому неизвестно как набивать. B)

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


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

Имеется два входа: вход SIGNAL и вход CLK

И есть выход DETECTED.

 

signal shift_reg : std_logic_vector(2 downto 0);

 

begin

shift:process(CLK)

begin

if rising_edge(CLK) then

shift_reg <= shift_reg(1 downto 0) & SIGN;

end if;

end process;

DETECTED <= shift_reg(2) xor shift_reg(1);

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


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

signal shift_reg : std_logic_vector(2 downto 0);

 

begin

shift:process(CLK)

begin

if rising_edge(CLK) then

shift_reg <= shift_reg(1 downto 0) & SIGN;

end if;

end process;

DETECTED <= shift_reg(2) xor shift_reg(1);

 

там временные интервалы у сигнала есть - при единице - 320ns и при нуле - 100ns.

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


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

там временные интервалы у сигнала есть - при единице - 320ns и при нуле - 100ns.

 

А что значит детектировать. Если этот сигнал для собственных нужд, от периода к периоду этого сигнала при тактировании клоком с длительностью периода 15нс получите разное количество отсчетов как при уровне1, так и при уровне 0.

Даже при длительности периода 10нс получите набег.

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


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

А что значит детектировать. Если этот сигнал для собственных нужд, от периода к периоду этого сигнала при тактировании клоком с длительностью периода 15нс получите разное количество отсчетов как при уровне1, так и при уровне 0.

Даже при длительности периода 10нс получите набег.

 

Погрешность в несколько тактов при перепадах? учитывается.

 

Незнаю. может я глупость написал. Но вроде моделируется. Посмотрим что на практике будет.

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


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

Имеется два входа: вход SIGNAL и вход CLK

И есть выход DETECTED.

 

У CLK частота - пусть 15 ns.

 

Как сделать, чтобы детектилась вот такая форма сигнала (SIGNAL) :

 

|"""""""""""""""|_____|"""""""""""""""|_____|"""""""""""""""|

 

|<---320ns--->|100ns|<---320ns--->|

А с какой точностью формируются временные интервалы?

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


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

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

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

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

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

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

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

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

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

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