|
Выделение сигнала и счетчик |
|
|
|
Jan 15 2018, 09:07
|
Группа: Участник
Сообщений: 8
Регистрация: 10-01-18
Пользователь №: 100 998

|
Всем привет. Прошу помощи с заданием по VHDL в Quartus 1. Есть clk и задается сигнал, по сигналу надо выделить момент фронта и спада сигнала, а затем на основе этих 2-х тактов построить сигнал 2. Опять же есть clk и нужно сделать счетчик тактов, а по окончанию работы счетчика выдать 1 такт прикрепляю картинку с заданием, ибо из меня тот еще рассказчик
|
|
|
|
|
 |
Ответов
|
Jan 15 2018, 15:37
|
Местный
  
Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485

|
Цитата(MAXHAX @ Jan 15 2018, 12:07)  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.
|
|
|
|
|
Jan 15 2018, 16:34
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
посмотрите это описание Код 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 В принципе это описание полностью подходит под Ваше задание, просто здесь сделано чуть-чуть больше...
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Jan 22 2018, 06:26
|
Группа: Участник
Сообщений: 8
Регистрация: 10-01-18
Пользователь №: 100 998

|
Цитата(Maverick @ Jan 19 2018, 00:01)  Вот так помогай студентам Ни спасибо ни пожалуйста... Безусловно спасибо, код отличный, немного с избытком, но вы и предупреждали об этом. Только у меня возникла небольшая проблема с моделированием данного кода, а именно с редактированием test bench-а Просто если его не редактировать, то не создаются никакие сигналы, что на входе, что на выходе.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|