Forum: FPGA, VHDL & Co. Signale ohne Clock-Leitung latchen


von Artur (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@ Artur (Gast)

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

Nix gut.
Wenn ich dir einen Rat geben darf. Lass den Quark mit wilden aynchronen 
Design, das geht schief. In deinem FPGA MUSS es einen Takt geben, der 
deine State Machines taktet. Nimm den zum Abtasten und speichern der 
Signale.

>diesem Design faul ist. Habe Probiert, an die Pins 3,3V für kurze Zeit
>anzulegen, keine Reaktion.

Und mit wildem Rumstochern an FPGA Pins testet man keine Schaltung. Da 
nimmt man wenigstens Taster.

MfG
Falk

von FPGA Spezialist (Gast)


Lesenswert?

Grundsätzlich kann man in einem FPGA natürlich sehr wohl reine 
Kombinatorik bauen. Das Problme ist nur, daß es hier einen 
Zustandspeocher gibt, der so schnell gelatched wird, daß er innerhalb 
einer Taktperiode toggelt. Hier muss ein Taktübergang rein, um es sicher 
zu machen. Ansonsten wird die Synthese nur einen Zustand sehen und den 
bauen.
Eine Möglichkeit, das zu umgehen, ist, den Zustandspeicher nach aussen 
auch einen Pin zu legen, und den wieder reinzurouten. Dann kann die 
Synthese d en nicht wegoptimieren und es geht.

Es scheint daneben noch einen Weg zu geben, die Synthese zu betrügen und 
ihr ausserhalb von Reset und Clock schnell asynchron togglende Signale 
vprgeben zu können - das habe ich aber noch nicht voll durch.

Ich habe aber ein Xilinx Design, das genau os läuft. Wenn ich anfange, 
das betreffende Signal in einen clock zu verschieben geht die Schaltung 
nicht mehr.

Ich bin kurz davor das zu posten, wie man sowas macht. Muss es aber noch 
bei Altera gegenchecken.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.