Ich habe ein recht Vorhaben mit fatalen Misserfolgen 8[
Es müßen vorerst 2 Bit gelatcht werden, die Ohne eine Taktflanke an
Eingängen des FPGAs ankommen. Soweit sogut. Das Recht einfache Design,
will komischerweise überhaupt nicht laufen und ich habe keine Idee,
wieso das so ist.
1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.ALL;
|
3 | use IEEE.STD_LOGIC_ARITH.ALL;
|
4 | use IEEE.STD_LOGIC_UNSIGNED.ALL;
|
5 |
|
6 | entity ALARM_LATCH is
|
7 | port(
|
8 | -- Steuesignale
|
9 | ena_alarms : in std_logic;
|
10 |
|
11 | -- Alarm Signale
|
12 | sig_1 : in std_logic;
|
13 | sig_2 : in std_logic;
|
14 |
|
15 | -- Alarm Vector Signale zum Top-Design
|
16 | alarm_vec_in : in std_logic_vector(7 downto 0);
|
17 | alarm_vec_out : out std_logic_vector(7 downto 0));
|
18 | end ALARM_LATCH;
|
19 |
|
20 | architecture Behavioral of ALARM_LATCH is
|
21 | signal alarm_flag : std_logic_vector(7 downto 0);
|
22 | begin
|
23 |
|
24 | det_alarm: process(ena_alarms, sig_1, sig_2)
|
25 | begin
|
26 | if(ena_alarms='1') then
|
27 | --//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
28 | -- Auf die Alarme reagieren
|
29 | --//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
30 | if (sig_1 ='1') then
|
31 | if(alarm_flag(0) ='0') then
|
32 | alarm_flag(0) <='1';
|
33 | alarm_vec_out(0) <='0';
|
34 | end if;
|
35 | end if;
|
36 |
|
37 | if (sig_2 ='1') then
|
38 | if(alarm_flag(1)='0') then
|
39 | alarm_flag(1) <='1';
|
40 | alarm_vec_out(1) <='1';
|
41 | end if;
|
42 | end if;
|
43 | --//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
44 | -- Alarme wieder ruecksetzen (durch den Benutzer)
|
45 | --//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
46 | --// Abfrage ob Alarm1 Latch rückgesetzt wurde
|
47 | if(alarm_vec_in(0)='0' and alarm_flag(0)='1') then
|
48 | alarm_flag(0) <='0';
|
49 | alarm_vec_out(1) <='0';
|
50 | end if;
|
51 |
|
52 | --// Abfrage ob Alarm2 Latch rückgesetzt wurde
|
53 | if(alarm_vec_in(1)='0' and alarm_flag(1)='1') then
|
54 | alarm_flag(1) <='0';
|
55 | alarm_vec_out(1) <='0';
|
56 | end if;
|
57 | end if;
|
58 |
|
59 | end process;
|
60 | end Behavioral;
|
Gedacht habe ich es so:
Wenn eine Änderung an den Pins passiert, sollen diese gelatcht und in
einem Weiteren Design gespeichert werden, und wenn der User diese im
Speicher überschreibt, sollte diese Entity das erkennen und Ausgänge auf
null setzen. Nur habe ich gerade starke Hirnlaggs und weiß nicht, was an
diesem Design faul ist. Habe Probiert, an die Pins 3,3V für kurze Zeit
anzulegen, keine Reaktion.