Forum: FPGA, VHDL & Co. Sensitivity list wird ignoriert


von guest (Gast)


Lesenswert?

Hallo,

da ich z.Zt. einen FPGA zur Hand hab und bisherigen Code nur via 
Modelsim testen konnte, bin ich auf ein kleines Problem gestoßen.

Im folgenden gehts nur darum, dass das Simulationsergebnis von dem 
tatsächlichem Verhalten abweicht. Dabei lässt sich mit dem FPGA der 
"AUSGANG" direkt über "AUSWAHL" setzen, unabhängig vom Prozess 
"AUSLOESER". In der Simulation muss sich erst "TEMP" ändern um in den 
Prozess mit der sensitivity list einzusteigen, so wie ich es auch 
erwartet hab.
Wo liegt das Problem?

1
entity PROZESS_CHECK_ENT is
2
  port(  AUSWAHL, EINLEITUNG : in std_logic;
3
      AUSGANG : out std_logic
4
      );
5
end PROZESS_CHECK_ENT;
6
7
architecture PROZESS_CHECK_ARCH of PROZESS_CHECK_ENT is
8
signal TEMP : boolean := true;
9
begin  
10
  PROCESS_INST : process(TEMP)
11
  begin
12
    if AUSWAHL = '0' then 
13
      AUSGANG <= '0';
14
    else
15
      AUSGANG <= '1';
16
    end if;
17
  end process PROCESS_INST;
18
  
19
  AUSLOESER : process
20
  begin
21
  wait until EINLEITUNG = '1' and EINLEITUNG'event;
22
  TEMP <= not TEMP;
23
  end process AUSLOESER;
24
  
25
end PROZESS_CHECK_ARCH;

von D. I. (Gast)


Lesenswert?

Das ist trotzdem nicht richtig, Temp muss in die Liste von Ausloeser, 
weil temp da gelesen wird, sollte einleitung ein Takt sein dann nicht, 
dann muss aber einleitung in die liste, dann wirds auch funktionieren, 
aber so wie es gerade ist ist es nicht richtig

von guest (Gast)


Lesenswert?

Hallo,

erst mal Danke für die fixe Antwort. Jedoch versteh ich noch nicht wo 
genau das Problem liegt.
Soweit ich weis gibt es doch zwei Möglichkeiten einen Prozess zu 
implementieren.
1. Über die sensitivity list wie es im meinem oberen Prozess der Fall 
ist.
2. Ohne sens. list mit nur einer einzigen wait Anweisung die zudem zu 
Beginn des Prozesses stehen muss. (Bei mir der AUSLOESER Prozess)

Die Frage die sich mir bei diesem Code stellt ist folgende: Wie kann in 
den Prozess mit der sensitivity list immer wieder eingestiegen werden 
obwohl keine steigende Flanke von EINLEITUNG anliegt und somit TEMP 
nicht verändert wird??

von D. I. (Gast)


Lesenswert?

jetzt: im oberen prozess fehlt auswahl in der liste und temp dafür raus, 
den unteren prozess ohne liste, dann passts.
Merke in kombinatorischen prozessen, müssen alle gelesenen signale in 
die liste und das ist im oberen prozess auswahl, dann sollte es auch tun

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Soweit ich weis gibt es doch zwei Möglichkeiten einen Prozess zu
> implementieren.
> 1. Über die sensitivity list wie es im meinem oberen Prozess der Fall
> ist.
> 2. Ohne sens. list mit nur einer einzigen wait Anweisung die zudem zu
> Beginn des Prozesses stehen muss. (Bei mir der AUSLOESER Prozess)
Eine Sensitivliste ist nichts anderes als ein verstecktes wait until
Das hier:
1
  PROCESS_INST : process (auswahl) begin  -- warte auf beliebige Änderung von Auswahl
2
    if AUSWAHL = '0' then 
3
      AUSGANG <= '0';
4
    else
5
      AUSGANG <= '1';
6
    end if;
7
  end process PROCESS_INST;
Entspricht genau dem hier:
1
  PROCESS_INST : process begin
2
    wait until auswahl; -- warte auf beliebige Änderung von Auswahl
3
    if AUSWAHL = '0' then 
4
      AUSGANG <= '0';
5
    else
6
      AUSGANG <= '1';
7
    end if;
8
  end process PROCESS_INST;

Die Sensitivliste ist übrigens ausschliesslich für den Simulator 
interessant!! Die Synthese fügt fehlende Signale selbständig dazu und 
meldet das mit einer knappen Info. Das wäre im ersten Codebeispiel aus 
dem ersten Post passiert...  :-o

von guest (Gast)


Lesenswert?

Ah jetzt machts klick. Hätte man ja selber drauf kommen können das die 
Synthese automatisch die fehlenden Signale einfügt. Ist ja in 
unvollständigen bedingten Verzweigungen auch der Fall das automatisch 
Register eingefügt werden, warum dann nicht auch anderweitig nachhelfen 
<:
Danke nochmals.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Ist ja in unvollständigen bedingten Verzweigungen auch der Fall
> das automatisch Register eingefügt werden,
Schlimmer: es werden Latches eingefügt.
Aber wenigstens gibt es dafür eine Warnung...  :-/

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.