Hallo liebe mikrocontroller - Community,
Ich bin grad dabei einen Edgedetector in VHDL zu Bauen. Die Entity hat 4
Eingänge und einen Ausgang. Das Ziel wäre jetzt bei jeder steigenden
oder fallenden Flanke von jedem der 4 Eingänge den Ausgang einen
Taktzyklus auf '1' zu setzen.
Mein Ansatz wäre das aktuell anstehende Signal mit dem vorhergehenden
Signal von einem Registerausgang zu vergleichen.
1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.ALL;
|
3 |
|
4 | entity EdgeDetector is
|
5 | Port (
|
6 | -- Input ports
|
7 | clk : in STD_ULOGIC;
|
8 | signal_in : in STD_ULOGIC_VECTOR(3 downto 0);
|
9 | reset : in STD_ULOGIC;
|
10 |
|
11 | -- Output ports
|
12 | output : out STD_ULOGIC
|
13 | );
|
14 |
|
15 | end EdgeDetector;
|
16 |
|
17 |
|
18 | architecture Behavioral of EdgeDetector is
|
19 | signal signal_a:STD_ULOGIC;
|
20 | signal signal_b:STD_ULOGIC;
|
21 | signal signal_c:STD_ULOGIC;
|
22 | signal signal_d:STD_ULOGIC;
|
23 |
|
24 | signal detectedEdge_a:STD_ULOGIC;
|
25 | signal detectedEdge_b:STD_ULOGIC;
|
26 | signal detectedEdge_c:STD_ULOGIC;
|
27 | signal detectedEdge_d:STD_ULOGIC;
|
28 |
|
29 | signal output1:STD_ULOGIC;
|
30 | signal output2:STD_ULOGIC;
|
31 |
|
32 | begin
|
33 | process(clk, reset)
|
34 | begin
|
35 | if clk= '1' and clk'event then
|
36 | signal_a<=signal_in(0);
|
37 | signal_b<=signal_in(1);
|
38 | signal_c<=signal_in(2);
|
39 | signal_d<=signal_in(3);
|
40 |
|
41 | end if;
|
42 |
|
43 | end process;
|
44 |
|
45 | detectedEdge_a <= ((not signal_a) and signal_in(0)) or (signal_a and (not signal_in(0)));
|
46 | detectedEdge_b <= ((not signal_b) and signal_in(1)) or (signal_b and (not signal_in(1)));
|
47 | detectedEdge_c <= ((not signal_c) and signal_in(2)) or (signal_c and (not signal_in(2)));
|
48 | detectedEdge_d <= ((not signal_d) and signal_in(3)) or (signal_d and (not signal_in(3)));
|
49 |
|
50 | output1 <= detectedEdge_a or detectedEdge_b;
|
51 | output2 <= detectedEdge_c or detectedEdge_d;
|
52 |
|
53 | output <= output1 or output2;
|
54 |
|
55 | end Behavioral;
|
Der Edgedetector spricht auf die fallende und steigende Flanke von
Eingang 2 und 3 an also auf "signal_in(2) und signal_in(3)". Eingang 0
und 1 also "signal_in(0) und signal_in(1)" ignoriert mein Detector
leider.
Hat jemand eine Idee woran das liegen könnte?
PS: Der clk kommt von der PLL und hat einen Takt von 200MHz
LG,
Daniel