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


von VHDL_Bginner (Gast)


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

von Föntöter (Gast)


Lesenswert?

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;

von lkmiller (Gast)


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
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.

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.