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

Выделение сигнала и счетчик

Всем привет. Прошу помощи с заданием по VHDL в Quartus

1. Есть clk и задается сигнал, по сигналу надо выделить момент фронта и спада сигнала, а затем на основе этих 2-х тактов построить сигнал

2. Опять же есть clk и нужно сделать счетчик тактов, а по окончанию работы счетчика выдать 1 такт

прикрепляю картинку с заданием, ибо из меня тот еще рассказчик

post-100998-1516007234_thumb.jpg

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


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

1.1 Момент фронта импульса и спада находятся при помощи схем - "детектор фронта" Первая же ссылка в google по поиску "VHDL детекторы фронта"

1.2 Что значит на основе этих 2 тактов построить сигнал ? Каков принцип его построения ? Я вижу в простейшем случае это вообще входной сигнал задержанный на 2 такта....

2.1. Ну так у вас обычный счетчик с сигналом переноса

Изменено пользователем Flip-fl0p

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


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

здесь на verilog, есть схема, по ней можно написать код на vhdl. https://marsohod.org/verilog/157-verilogedges

Изменено пользователем Evgeny72

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


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

1. Есть clk и задается сигнал, по сигналу надо выделить момент фронта и спада сигнала, а затем на основе этих 2-х тактов построить сигнал

Сигнал In пропускаем через D-триггер, получаем сигнал In0.

Сигнал In0 пропускаем через D-триггер, получаем сигнал In1.

Out_0 = In0 & ~In1;

Out_1 = ~In0 & In1;

Out_2 - это выход RS-триггера, на S-вход которого подано Out_0, на R-вход подано Out_1.

 

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


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

посмотрите это описание

 

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity pulse_len_measure is
generic (
  N                           : integer:=8);
port (
  i_clk                       : in  std_logic;
  i_rstb                      : in  std_logic;
  i_input                     : in  std_logic;
  o_pulse_len_hi              : out std_logic_vector(N-1 downto 0);
  o_pulse_len_lo              : out std_logic_vector(N-1 downto 0));
end pulse_len_measure;

architecture rtl of pulse_len_measure is
constant C_MAX_COUNT           : unsigned(N-1 downto 0):=(others=>'1');
signal r_count_hi_ena          : std_logic;
signal r_count_hi              : unsigned(N-1 downto 0);
signal r_count_lo              : unsigned(N-1 downto 0);
signal r_count_lo_ena          : std_logic;
signal r_rise                  : std_logic;
signal r_fall                  : std_logic;
signal p_input                 : std_logic_vector(0 to 2); -- input pipe

begin

p_edge_detector : process(i_clk,i_rstb)
begin
  if(i_rstb='0') then
    r_rise       <= '0';
    r_fall       <= '0';
    p_input      <= (others=>'0');
  elsif(rising_edge(i_clk)) then
    r_rise       <= not p_input(2) and p_input(1);
    r_fall       <= not p_input(1) and p_input(2);
    p_input      <= i_input&p_input(0 to p_input'length-2);
  end if;
end process p_edge_detector;

p_count_hi : process(i_clk,i_rstb)
begin
  if(i_rstb='0') then
    r_count_hi_ena  <= '0';
    r_count_hi      <= to_unsigned(1,N);
    o_pulse_len_hi  <= (others=>'0');
  elsif(rising_edge(i_clk)) then
    if(r_rise='1') then
      r_count_hi_ena  <= '1';
    elsif(r_fall='1') then
      r_count_hi_ena  <= '0';
      o_pulse_len_hi  <= std_logic_vector(r_count_hi);
    end if;

    if(r_count_hi_ena='1') then
      if(r_count_hi<C_MAX_COUNT)then
        r_count_hi      <= r_count_hi + 1;
      end if;
    else
      r_count_hi      <= to_unsigned(1,N);
    end if;
  end if;
end process p_count_hi;

p_count_lo : process(i_clk,i_rstb)
begin
  if(i_rstb='0') then
    r_count_lo_ena  <= '0';
    r_count_lo      <= to_unsigned(1,N);
    o_pulse_len_lo  <= (others=>'0');
  elsif(rising_edge(i_clk)) then
    if(r_fall='1') then
      r_count_lo_ena  <= '1';
    elsif(r_rise='1') then
      r_count_lo_ena  <= '0';
      o_pulse_len_lo  <= std_logic_vector(r_count_lo);
    end if;

    if(r_count_lo_ena='1') then
      if(r_count_lo<C_MAX_COUNT) then
        r_count_lo      <= r_count_lo + 1;
      end if;
    else
      r_count_lo      <= to_unsigned(1,N);
    end if;
  end if;
end process p_count_lo;

end rtl;

 

Строб готовности слелаете с помощью r_fall и/или r_rise пропустив через 1 битный сдвигающий регистр ...

PS В принципе это описание полностью подходит под Ваше задание, просто здесь сделано чуть-чуть больше...

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


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

Вот так помогай студентам

Ни спасибо ни пожалуйста...

Так этот хотя бы написал: "Прошу помощи"... А другие пишут проще: "нужно..."

И чего же Вы хотите? Лет через 5-6 придет к Вам новый начальник и даже не вспомнит, что у него были проблемы со счетчиком. Ему же уже показали, что такую работу за него всегда сделают...

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


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

Вот так помогай студентам

Ни спасибо ни пожалуйста...

Безусловно спасибо, код отличный, немного с избытком, но вы и предупреждали об этом.

Только у меня возникла небольшая проблема с моделированием данного кода, а именно с редактированием test bench-а

Просто если его не редактировать, то не создаются никакие сигналы, что на входе, что на выходе.

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


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

Только у меня возникла небольшая проблема с моделированием данного кода, а именно с редактированием test bench-а

Просто если его не редактировать, то не создаются никакие сигналы, что на входе, что на выходе.

Помогу на Verilog-е, если надо. Я так понимаю, это в универе требуют VHDL?

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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