Как написать код для пропуска нарастающего фронта и продолжения счета до обнаружения второго нарастающего фронта в VHDL - PullRequest
0 голосов
/ 10 мая 2019

Мне нужно спроектировать систему для пропуска определенного переднего фронта и продолжения счета, пока не будет обнаружен следующий передний фронт, так как при обнаружении следующего переднего фронта он должен начать отсчет с нуля. Val1, val2, val3 имеют счетчики различных импульсов, которыеcom из внешнего поля. Эта последовательность импульсов повторяется.Я оставляю первый импульс для подсчета каждого импульса, и вторая последовательность импульсов обнаруживается, если счет больше, чем счет, или меньше, чем счет, который должен пропустить нарастающий фронт и перейти к следующему нарастающему фронту и начать отсчет.Я пробовал таким образом ..

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.std_logic_unsigned.all; 
use IEEE.Numeric_Std.all;
library work;
use work.all;

--use IEEE.NUMERIC_STD.ALL;



entity nxt_pwm is
  Port (  i_clk : in std_logic;
           signal_in: in std_logic;
            signal_in1: in std_logic;
        pwm_out: out std_logic);
end nxt_pwm;

architecture Behavioral of nxt_pwm is
  signal Q1,Q2,Q3 : unsigned(15 downto 0);

  signal reset,flag1,flag2,flag3,flag4: std_logic;
  signal val1,val2,val3:unsigned (15 downto 0); 
  signal cnt_f,count_q: unsigned (15 downto 0);
  signal  val_tot: unsigned (15 downto 0) ; 

begin
pulse_count:entity work.pulse port map(i_clk=>i_clk,signal_in1=>signal_in1,pwm_out=>pwm_out);

 uut3:   process (signal_in)
    --- variable    count_q : unsigned  (15 downto 0);
   --  variable reset: std_logic;   
           --  variable val_tot: unsigned (15 downto 0) ;              

                           begin
                           if rising_edge(signal_in) then
                           if (flag1 = '1') then
                            Q1 <= val2;

                            elsif (flag2 = '1') then
                             Q2 <= val1;

                             elsif (flag3 = '1') then
                            Q3 <= val3;

                            end if;



                            if (reset = '1') then
                            count_q <= "0000000000000000";
                           if (flag1 = '1') then
                           count_q <= val2;
                           count_q <= count_q - 1;      
                           if (signal_in'event and signal_in = '1') then
                            -- count_q <= count_q - 1;
                            end if;
                            elsif (flag2='1') then
                            count_q<=val1;
                            count_q <=count_q - 1;
                             if reset='0' then
                             if (signal_in'event and signal_in = '1') then
                                    -- count_q<= count_q -1 ;
                                  reset<='1';
                                  if (signal_in'event and signal_in = '1') then
                                  count_q<="0000";
                                  end if;
                  end if;
                  end if;                
                              elsif (flag3='1') then
                              count_q <=val3;
                           count_q <= count_q - 1;      
                           if (signal_in'event and signal_in = '1') then
                              flag1<='1';
                            end if;
                  end if;
                  end if;
                  end if;          

                          end process;

    UUT2:  process (i_clk,signal_in)
     begin


                             if rising_edge(signal_in) then
                             if flag1<='1' or flag2<='1' or flag3<='1' then
                            if (cnt_f /= val_tot)then
                            if (cnt_f< (val_tot/2)) then
                            pwm_out<='1';
                            else
                            pwm_out<='0';
                            end if;
                            cnt_f<=cnt_f+1;
                            end if;
                            end if;
                            END IF;
                        end process;
end Behavioral;
...