mikrocontroller.net

Forum: FPGA, VHDL & Co. if-else Frage in VHDL?


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

kann mir jemand helfen und erklären wo der Unterschied in einem Prozess 
zwischen ein "if" allein und "if else" ist? wird das signal 
"start_show_disp_data" im ersten Fall nicht gespeichert und im 2ter Fall 
doch schon, oder werden die signale shDD_ready,show_ram davon betroffen?

**************************  1 Fall: nur if  *********
      ...
      if start_show_disp_data = '1' then
        ShDD_ready <= '1';
        show_ram <= '1';
        ShDD_state <= ShDD_ST2 ;
      end if;
      ...
*************************** 2 Fall: if+else *********

      ...
      if start_show_disp_data = '1' then
        ShDD_ready <= '1';
        show_ram <= '1';
        ShDD_state <= ShDD_ST2 ;
      else
        ShDD_ready <= '0';
        show_ram <= '0';
        ShDD_state <= ShDD_ST1 ;
      end if;
      ...






*****************************************************

  SHOWDISPDATA_FSM: process (clock_fpga, reset)
  begin
  if reset='1'  then
     ShDD_state <= ShDD_ST1;
     ShDD_ready <= '0';
     show_ram <= '0';

  elsif rising_edge(clock_fpga) then

    case ShDD_state is
    when ShDD_ST1 => -- warten auf start gegenfalls ready signal setzen
      if start_show_disp_data = '1' then
        ShDD_ready <= '1';
        show_ram <= '1';
        ShDD_state <= ShDD_ST2 ;
      else
        ShDD_ready <= '0';
        show_ram <= '0';
        ShDD_state <= ShDD_ST1 ;
      end if;

    when ShDD_ST2 => -- unmittelbar show_ram = 0;

        ShDD_ready <= '1';
        show_ram <= '0';
        ShDD_state <= ShDD_ST3 ;


    when ShDD_ST3 => -- warten auf Datensignal
      if  cmd_ndata = '0' then
        ShDD_ready <= '0';
        show_ram <= '0';
        ShDD_state <= ShDD_ST1 ;
      elsif  adv_in_ud = '0' or new_command_occured = '1' then
        ShDD_state <= ShDD_ST1 ;
        ShDD_ready <= '0';
        show_ram <= '0';
      end if;

    end case;
  end if;
  end process;

MFG

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"IF ELSE" verzeigt in einen Konstrukt, der vollständig alternativ zum 
IF-Pfad abläuft, also nur dann abgefragt wird, wenn der erste IF nicht 
greift, während ein zweites IF parallel zum ersten ausgeführt wird, also 
auch dann gfs abgearbeitet wird, wenn auch der erste schon gegriffen 
hat.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke. Ja Du hast recht.Bei der successiven "if"s ist ein 
paralleliesierung da, aber ich meine was passiert auf der RTL-Ebene? 
welche signale werden gespeichert (FFs) und welche nicht, bei beiden 
Fälle?

MFG

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.