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
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; |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.