ad.vhd


1
---------------------------------------------------------------------------------
2
-- Company: 
3
-- Engineer: 
4
-- 
5
-- Create Date:    12:54:46 11/30/2009 
6
-- Design Name: 
7
-- Module Name:    EINGANGS_REGISTER - Behavioral 
8
-- Project Name: 
9
-- Target Devices: 
10
-- Tool versions: 
11
-- Description: 
12
--
13
-- Dependencies: 
14
--
15
-- Revision: 
16
-- Revision 0.01 - File Created
17
-- Additional Comments: 
18
--
19
----------------------------------------------------------------------------------
20
library ieee;
21
use ieee.std_logic_1164.all;
22
use ieee.numeric_std.all;
23
24
25
-------------------------------------------------------------------------------
26
entity Flanken_Detektierung_AD_Wandler  is
27
    Port ( 
28
        Eingang_Flanken_Detektierung_AD_Wandler          : in   STD_LOGIC_vector (11 downto 0);
29
           Clk_20Mhz_Flanken_Detektierung                 : in   STD_LOGIC;
30
           Analoge_Maximale_Amplitude_AD_Wandler           : out STD_LOGIC_vector (11 downto 0);
31
        Analoge_Flanke_wurde_erkannt_vom_AD_Wandler       : out  std_logic);
32
       
33
        
34
          
35
end Flanken_Detektierung_AD_Wandler ;
36
37
38
architecture Behavioral of Flanken_Detektierung_AD_Wandler  is
39
-------------------------------------------------------------------------------
40
-------------------------------------------------------------------------------
41
42
-------------------------------------------------------------------------------
43
Signal Flanken_Detektierung_Zwischenpuffer                : STD_LOGIC_vector (11 downto 0):=(others => '0');
44
Signal Schmitt_Trigger_Level                              : unsigned (11 downto 0);
45
Signal cnt                                                : integer range  0 to 20000 ;
46
signal zustand,Enable_Trigger                             : std_logic;
47
sIGNAL Flanke_Erkannt,output_enable                       : std_logic:='0'; 
48
Signal Maximal_Analog_Amplitude                           : STD_LOGIC_vector(11 downto 0):=(others => '0');          
49
Signal Aktuelle_Analoge_Amplitude                         : STD_LOGIC_vector(11 downto 0):=(others => '0');          
50
Signal Amplitude_Zwischenspeicher                         : STD_LOGIC_vector(11 downto 0):=(others => '0');          
51
52
begin
53
--------------------------------------------------------------------------------
54
--------------------------------------------------------------------------------  
55
  
56
  --------------SCHIEBEREGISTER-------------
57
  ------------------------------------------ 
58
  Schieben :process (Clk_20Mhz_Flanken_Detektierung )
59
    begin
60
      if falling_edge (Clk_20Mhz_Flanken_Detektierung ) then
61
        Flanken_Detektierung_Zwischenpuffer <= Eingang_Flanken_Detektierung_AD_Wandler ;
62
        Aktuelle_Analoge_Amplitude       <=  Flanken_Detektierung_Zwischenpuffer;
63
        if Enable_Trigger = '0' then                            --  WENN FLANKE ERKANNT WIRD DIE MAXIMALE ERKANNTE AMPLITUDE WIEDER AUF NULL GESETZT
64
          Maximal_Analog_Amplitude <= (others => '0');                --  
65
        else
66
          if Aktuelle_Analoge_Amplitude > Maximal_Analog_Amplitude then
67
            Maximal_Analog_Amplitude <= Aktuelle_Analoge_Amplitude;
68
          else
69
            Maximal_Analog_Amplitude <= Maximal_Analog_Amplitude ;
70
          end if;
71
        end if;
72
      end if;
73
    end process Schieben;
74
  ------------------------------------------
75
      
76
  --------------------------------- FLANKEN ERKENNUNG ------------------------------------------------------
77
  ----------------------------------------------------------------------------------------------------------
78
  ----------------------------------------------------------------------------------------------------------
79
  
80
  --------------SIGNALZUWEISUNG-------------
81
  Analoge_Flanke_wurde_Erkannt_vom_AD_Wandler <= output_enable;
82
  Schmitt_Trigger_Level                       <= unsigned(Flanken_Detektierung_Zwischenpuffer);
83
  ------------------------------------------
84
  
85
  --------------TOTZEITERKENNUNG------------
86
  Totzeit:process(Clk_20Mhz_Flanken_Detektierung )
87
  begin
88
  if falling_edge(Clk_20Mhz_Flanken_Detektierung ) then
89
    if Flanke_Erkannt = '1' then
90
      output_enable <= '1';
91
      Enable_Trigger <='0';          -- BEI ERKANNTER ANALOGEN FLANKE WIRD TRIGGER AUF NULL GESTELLT 
92
      cnt<=0;                    
93
    elsif cnt <= 19999 then            -- HIER TOTZEIT FUER 1 msek, KEINE REAKTION AUF EINGANGSSIGNAL 
94
      output_enable  <= '1';          -- 
95
      Enable_Trigger <= '0';
96
      cnt <=cnt+1;
97
    else
98
      output_enable  <= '0';
99
      Enable_Trigger <= '1';          -- BEIM ÜBERLAUF VON CNT IST TRIGGER WIEDER AUF 1, SOMIT WIRD 
100
    end if;                      -- AUF FALLENDE FLANKE GESCHAUT;WENN SIE ERKANNT IST WIRD TRIGGER AUF
101
  end if;                        -- 0 GESETZT FÜR DIE TOTZEIT VON 8399 STELLEN
102
  end process Totzeit;
103
  ------------------------------------------
104
105
  --------------SCHMITT-TRIGGER-------------
106
  ------------------------------------------ 
107
   Trigger: process (Clk_20Mhz_Flanken_Detektierung )
108
   begin
109
      if falling_edge(Clk_20Mhz_Flanken_Detektierung ) then
110
      Flanke_Erkannt <= '0';                
111
       if Enable_Trigger ='1' then                      
112
        if (Schmitt_Trigger_Level > "101001100101")  then    -- OBERE SCHWELLE HIER 65% VOM AD BEREICH
113
          zustand <= '1';
114
        end if;
115
        if (Schmitt_Trigger_Level < "011001100110")  then    -- UNTERE SCHWELLE HIER 40%  VOM AD BEREICH  
116
          zustand <= '0';
117
          if zustand = '1' then
118
            Flanke_Erkannt <= '1';    -- ANALOGE FLANKE ERKANNT WENN SCHWELLE_UNTEN WIEDER UNTERSCHRITTEN 
119
          end if;
120
        end if;
121
      end if;
122
      end if;  
123
  end process Trigger;
124
  ----------------------------------------------
125
  Analoge_Maximale_Amplitude_AD_Wandler  <=Maximal_Analog_Amplitude;
126
  
127
  
128
129
end Behavioral;