mikrocontroller.net

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


Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

entity PROZESS_CHECK_ENT is
  port(  AUSWAHL, EINLEITUNG : in std_logic;
      AUSGANG : out std_logic
      );
end PROZESS_CHECK_ENT;

architecture PROZESS_CHECK_ARCH of PROZESS_CHECK_ENT is
signal TEMP : boolean := true;
begin  
  PROCESS_INST : process(TEMP)
  begin
    if AUSWAHL = '0' then 
      AUSGANG <= '0';
    else
      AUSGANG <= '1';
    end if;
  end process PROCESS_INST;
  
  AUSLOESER : process
  begin
  wait until EINLEITUNG = '1' and EINLEITUNG'event;
  TEMP <= not TEMP;
  end process AUSLOESER;
  
end PROZESS_CHECK_ARCH;

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
  PROCESS_INST : process (auswahl) begin  -- warte auf beliebige Änderung von Auswahl
    if AUSWAHL = '0' then 
      AUSGANG <= '0';
    else
      AUSGANG <= '1';
    end if;
  end process PROCESS_INST;
Entspricht genau dem hier:
  PROCESS_INST : process begin
    wait until auswahl; -- warte auf beliebige Änderung von Auswahl
    if AUSWAHL = '0' then 
      AUSGANG <= '0';
    else
      AUSGANG <= '1';
    end if;
  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

Autor: guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...  :-/

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.