Zustandsautomat+register problem

Gast #891724
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
Gast #891775
Kommen die Daten synchron rein?
Wenn nicht, musst du sie synchronisieren:
1
process(clk)
2
  begin
3
    if rising_edge(clk) then
4
      data_synch1 <= data;
5
      data_synch2 <= data_synch1;
6
    end if;
7
  end process;

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

6
        when S0 => 
7
          if x='1' then
8
            zustand<=S0;
9
          else
10
            zustand<=S1;
11
          end if;
12
          
13
        when S1 =>
14
          reg_bit<= reg_bit(1 downto 0) & data_synch2;--Data speichern
15
          ausgabe<=reg_bit
16
          zustand<=S0;
17
      end case;
18
    end if;
19
end process;
Gast #893722
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
1
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.