www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Zustandsautomat+register problem


Autor: VHDL_Bginner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin!
Ich habe ein zustandsautmat von 2 zustaenden(S0,S1) in Vhdl geschrieben.
:
signal reg_bit:std_logic_vector(2 downto 0):="00";
First:process(clk)
begin
if rising_edge(clk) then
   zustand<= folge_z;
end if;
end process First;

SECOND:process(x,zustand)
begin
when S0 => if x='1' then

            folge_z<=S0;
          else
            folge_z<=S1;
          end if;
when S1 =>reg_bit<= reg_bit(1 downto 0) & data;--Data im register 
speichern
           ausgabe<=reg_bit
           folge_z<=S0;
end case;
end process Second;
:
Mein problem liegt darin, dass ich wenn im zustand S1 für erte mal bin, 
kann ich kein data in meinem register speichern,aber das passiert erst 
beim dem zweiten mal wenn ich S1 wieder erreiche.Was hab ich falsch vh 
in meinem code gemacht?
mfg

Autor: Föntöter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommen die Daten synchron rein?
Wenn nicht, musst du sie synchronisieren:
process(clk)
  begin
    if rising_edge(clk) then
      data_synch1 <= data;
      data_synch2 <= data_synch1;
    end if;
  end process;

Und warum machst du die Statemachine nicht direkt synchron:
process(clk)
  begin
    if rising_edge(clk) then
      case zustand is

        when S0 => 
          if x='1' then
            zustand<=S0;
          else
            zustand<=S1;
          end if;
          
        when S1 =>
          reg_bit<= reg_bit(1 downto 0) & data_synch2;--Data speichern
          ausgabe<=reg_bit
          zustand<=S0;
      end case;
    end if;
end process;

Autor: lkmiller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht schon im Simulator schief, weil im SECOND-process
das Signal data nicht in der Sensitivity-List steht.

Das eigentliche Problem liegt aber darin,
dass die Beschreibung des Schieberegisters
reg_bit <= reg_bit(1 downto 0) & data;
kombinatorisch ist und somit
unendlich schnell und andauernd
während zustand=S1 ausgeführt werden müsste.

So eine Hardware kann nicht erzeugt werden.

Eine Zuweisung in ein Schieberegister muss immer mit einem Takt
erfolgen, weil ein Schieberegister ja aus FFs besteht.

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.