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;
|