реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Выделение сигнала и счетчик
MAXHAX
сообщение Jan 15 2018, 09:07
Сообщение #1





Группа: Участник
Сообщений: 8
Регистрация: 10-01-18
Пользователь №: 100 998



Всем привет. Прошу помощи с заданием по VHDL в Quartus
1. Есть clk и задается сигнал, по сигналу надо выделить момент фронта и спада сигнала, а затем на основе этих 2-х тактов построить сигнал
2. Опять же есть clk и нужно сделать счетчик тактов, а по окончанию работы счетчика выдать 1 такт
прикрепляю картинку с заданием, ибо из меня тот еще рассказчик
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Jan 15 2018, 10:51
Сообщение #2


В поисках себя...
****

Группа: Свой
Сообщений: 692
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(MAXHAX @ Jan 15 2018, 12:07) *

1.1 Момент фронта импульса и спада находятся при помощи схем - "детектор фронта" Первая же ссылка в google по поиску "VHDL детекторы фронта"
1.2 Что значит на основе этих 2 тактов построить сигнал ? Каков принцип его построения ? Я вижу в простейшем случае это вообще входной сигнал задержанный на 2 такта....
2.1. Ну так у вас обычный счетчик с сигналом переноса

Сообщение отредактировал Flip-fl0p - Jan 15 2018, 10:51
Go to the top of the page
 
+Quote Post
Evgeny72
сообщение Jan 15 2018, 12:33
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 4-01-14
Пользователь №: 79 899



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

Сообщение отредактировал Evgeny72 - Jan 15 2018, 12:38
Go to the top of the page
 
+Quote Post
Jackov
сообщение Jan 15 2018, 15:37
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 293
Регистрация: 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.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Jan 15 2018, 16:34
Сообщение #5


я только учусь...
******

Группа: Модераторы
Сообщений: 3 441
Регистрация: 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.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Maverick
сообщение Jan 18 2018, 21:01
Сообщение #6


я только учусь...
******

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



Вот так помогай студентам
Ни спасибо ни пожалуйста...


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jan 18 2018, 21:10
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 3 982
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Maverick @ Jan 19 2018, 00:01) *
Вот так помогай студентам
Ни спасибо ни пожалуйста...

Так этот хотя бы написал: "Прошу помощи"... А другие пишут проще: "нужно..."
И чего же Вы хотите? Лет через 5-6 придет к Вам новый начальник и даже не вспомнит, что у него были проблемы со счетчиком. Ему же уже показали, что такую работу за него всегда сделают...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
MAXHAX
сообщение Jan 22 2018, 06:26
Сообщение #8





Группа: Участник
Сообщений: 8
Регистрация: 10-01-18
Пользователь №: 100 998



Цитата(Maverick @ Jan 19 2018, 00:01) *
Вот так помогай студентам
Ни спасибо ни пожалуйста...

Безусловно спасибо, код отличный, немного с избытком, но вы и предупреждали об этом.
Только у меня возникла небольшая проблема с моделированием данного кода, а именно с редактированием test bench-а
Просто если его не редактировать, то не создаются никакие сигналы, что на входе, что на выходе.
Go to the top of the page
 
+Quote Post
AVR
сообщение Jan 22 2018, 08:45
Сообщение #9


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 320
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(MAXHAX @ Jan 22 2018, 09:26) *
Только у меня возникла небольшая проблема с моделированием данного кода, а именно с редактированием test bench-а
Просто если его не редактировать, то не создаются никакие сигналы, что на входе, что на выходе.

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


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th August 2018 - 23:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.00914 секунд с 7
ELECTRONIX ©2004-2016