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.std_logic_unsigned.all;
|
23 | use IEEE.NUMERIC_STD.ALL;
|
24 |
|
25 |
|
26 | ---- Uncomment the following library declaration if instantiating
|
27 | ---- any Xilinx primitives in this code.
|
28 | --library UNISIM;
|
29 | --use UNISIM.VComponents.all;
|
30 | -------------------------------------------------------------------------------
|
31 | entity Flanken_Detektierung_AD_Wandler is
|
32 | Port (
|
33 | Eingang_Flanken_Detektierung_AD_Wandler : in STD_LOGIC_vector (11 downto 0);
|
34 | Clk_20Mhz_Flanken_Detektierung : in STD_LOGIC;
|
35 | Analoge_Maximale_Amplitude_AD_Wandler : out STD_LOGIC_vector (11 downto 0);
|
36 | Analoge_Flanke_wurde_erkannt_vom_AD_Wandler : out std_logic);
|
37 |
|
38 |
|
39 |
|
40 | end Flanken_Detektierung_AD_Wandler ;
|
41 |
|
42 |
|
43 | architecture Behavioral of Flanken_Detektierung_AD_Wandler is
|
44 | -------------------------------------------------------------------------------
|
45 | -------------------------------------------------------------------------------
|
46 |
|
47 | -------------------------------------------------------------------------------
|
48 | Signal Flanken_Detektierung_Zwischenpuffer : STD_LOGIC_vector (11 downto 0):="000000000000";
|
49 | Signal Schmitt_Trigger_Level : unsigned (11 downto 0);
|
50 | Signal cnt : integer range 0 to 20000 ;
|
51 | signal zustand,Enable_Trigger : std_logic;
|
52 | sIGNAL Flanke_Erkannt,output_enable : std_logic:='0';
|
53 | Signal Maximal_Analog_Amplitude : STD_LOGIC_vector (11 downto 0):="000000000000";
|
54 | Signal Aktuelle_Analoge_Amplitude : STD_LOGIC_vector (11 downto 0):="000000000000";
|
55 | Signal Amplitude_Zwischenspeicher : STD_LOGIC_vector (11 downto 0):="000000000000";
|
56 |
|
57 | begin
|
58 | --------------------------------------------------------------------------------
|
59 | --------------------------------------------------------------------------------
|
60 |
|
61 | --------------SCHIEBEREGISTER-------------
|
62 | ------------------------------------------
|
63 | Schieben :process (Clk_20Mhz_Flanken_Detektierung )
|
64 | begin
|
65 | if falling_edge (Clk_20Mhz_Flanken_Detektierung ) then
|
66 | Flanken_Detektierung_Zwischenpuffer <= Eingang_Flanken_Detektierung_AD_Wandler ;
|
67 | Aktuelle_Analoge_Amplitude <= Flanken_Detektierung_Zwischenpuffer;
|
68 | if Enable_Trigger = '0' then -- WENN FLANKE ERKANNT WIRD DIE MAXIMALE ERKANNTE AMPLITUDE WIEDER AUF NULL GESETZT
|
69 | Maximal_Analog_Amplitude <= "000000000000"; --
|
70 | else
|
71 | if Aktuelle_Analoge_Amplitude > Maximal_Analog_Amplitude then
|
72 | Maximal_Analog_Amplitude <= Aktuelle_Analoge_Amplitude;
|
73 | else
|
74 | Maximal_Analog_Amplitude <= Maximal_Analog_Amplitude ;
|
75 | end if;
|
76 | end if;
|
77 | end process Schieben ;
|
78 | ------------------------------------------
|
79 |
|
80 | --------------------------------- FLANKEN ERKENNUNG ------------------------------------------------------
|
81 | ----------------------------------------------------------------------------------------------------------
|
82 | ----------------------------------------------------------------------------------------------------------
|
83 |
|
84 | --------------SIGNALZUWEISUNG-------------
|
85 | Analoge_Flanke_wurde_Erkannt_vom_AD_Wandler <=output_enable;
|
86 | Schmitt_Trigger_Level <=unsigned(Flanken_Detektierung_Zwischenpuffer);
|
87 | ------------------------------------------
|
88 |
|
89 | --------------TOTZEITERKENNUNG------------
|
90 | Totzeit:process(Clk_20Mhz_Flanken_Detektierung )
|
91 | begin
|
92 | if falling_edge(Clk_20Mhz_Flanken_Detektierung ) then
|
93 | if Flanke_Erkannt = '1' then
|
94 | output_enable <= '1';
|
95 | Enable_Trigger <='0'; -- BEI ERKANNTER ANALOGEN FLANKE WIRD TRIGGER AUF NULL GESTELLT
|
96 | cnt<=0;
|
97 | elsif cnt <= 19999 then -- HIER TOTZEIT FUER 1 msek, KEINE REAKTION AUF EINGANGSSIGNAL
|
98 | output_enable <= '1'; --
|
99 | Enable_Trigger <= '0';
|
100 | cnt <=cnt+1;
|
101 | else
|
102 | output_enable <= '0';
|
103 | Enable_Trigger <= '1'; -- BEIM ÜBERLAUF VON CNT IST TRIGGER WIEDER AUF 1, SOMIT WIRD
|
104 | end if; -- AUF FALLENDE FLANKE GESCHAUT;WENN SIE ERKANNT IST WIRD TRIGGER AUF
|
105 | end if; -- 0 GESETZT FÜR DIE TOTZEIT VON 8399 STELLEN
|
106 | end process Totzeit;
|
107 | ------------------------------------------
|
108 |
|
109 | --------------SCHMITT-TRIGGER-------------
|
110 | ------------------------------------------
|
111 | Trigger: process (Clk_20Mhz_Flanken_Detektierung )
|
112 | begin
|
113 | if falling_edge(Clk_20Mhz_Flanken_Detektierung ) then
|
114 | Flanke_Erkannt <= '0';
|
115 | if Enable_Trigger ='1' then
|
116 | if (Schmitt_Trigger_Level > "101001100101") then -- OBERE SCHWELLE HIER 65% VOM AD BEREICH
|
117 | zustand <= '1';
|
118 | end if;
|
119 | if (Schmitt_Trigger_Level < "011001100110") then -- UNTERE SCHWELLE HIER 40% VOM AD BEREICH
|
120 | zustand <= '0';
|
121 | if zustand = '1' then
|
122 | Flanke_Erkannt <= '1'; -- ANALOGE FLANKE ERKANNT WENN SCHWELLE_UNTEN WIEDER UNTERSCHRITTEN
|
123 | end if;
|
124 | end if;
|
125 | end if;
|
126 | end if;
|
127 | end process Trigger;
|
128 | ----------------------------------------------
|
129 | Analoge_Maximale_Amplitude_AD_Wandler <=Maximal_Analog_Amplitude;
|
130 |
|
131 |
|
132 |
|
133 | end Behavioral;
|