Forum: FPGA, VHDL & Co. Verständnis Frage(FSM)!


von Gast (Gast)


Lesenswert?

Hello Alle!
ich will mir ein zustandsautomat in Vhdl implementieren.In einem Zustand 
muss ich da meine Daten in einem 16 bit register speichern.Soll ich mir 
in diesem Zustand ein register mit 16 als Wert intialisieren und mit 
jeder Positiven Flanke wird ein bit gespeichert und register wert wird 
verringert oder gibt es eine andere lösung.Ich hoffe,dass meine frage 
deutlich ist.
Best regard

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Wenn die 16 Bit seriell kommen, würde ich das in 16 verschiedenen 
Zuständen (oder sogar 32) formulieren, nicht als nur einen einzigen.

von Gast (Gast)


Lesenswert?

Danke erstmal für Deine Antwort.Die Bits werden seriell gekommen,aber 
ich muss nach jedem Bit Auslesen 4 clocks warten und da hab ich mir 4 
leere zustände hinzugefügt.Das heisst ich lese ein bit dann muss ich 4 
clocks warten und dann wieder Bit Auslesen .Wenn ich die 16 Bits 
erreiche ,gehe zum anfangszustand zurück.

von Thomas H. (mac4ever)


Lesenswert?

Ich würde eine FSM mit 5 Zuständen machen ... 1x lesen 4x warten
Zusätzlich noch einen Counter der die eingelesenen Bits zählt. Wenn der 
Counter den Wert 16 erreicht hat ein Flag setzen, dass die 16 Bits 
angekommen sind und anschließend kannst Du die Daten weiterverarbeiten 
...

Ansonsten müsstest du ja eine FSM mit 16 x 5 Zuständen machen ... wer 
will das schon ;)

von Gast (Gast)


Lesenswert?

ja eine sache ist mir noch nicht deutlich!ok nehmen wir an ädass ich in 
diesem zustand einncounter der bis 16 zaehlen soll programmiert.Aber die 
daten was ich bekomme,muss ich auch in einem register speichern.meine 
frage kann ich den register programm auch in meinen zustand schreibe.Das 
heisst ich lese ein bit wird in register gespeichert und counter wird 
inkrementiert(naechstes clock bit wird nach links geschoben und 
counter++..) wenn ich 16 erreiche dann wieder anfangszustand.Vielleicht 
war ein Algorithmus frage aber ich bin neu in der Vhdl Welt.

von Thomas H. (mac4ever)


Lesenswert?

Ich beschränke das ganze mal auf den Zustand der das Bit ausliest.
1
entity bits_lesen is
2
 port(
3
  clk    : in std_logic;
4
  bit_in : in std_logic );
5
end entity
6
7
architecture arch of bits_lesen is
8
9
 signal bit_reg_16 : std_logic_vector(15 downto 0);
10
 signal reg_full   : std_logic; -- Flag für 16 Bit gelesen;
11
12
 type state_type is (lese_bit, wait1, wait2, wait3, wait4);
13
 signal current_state: state_type;
14
15
begin
16
...
17
 process(clk)
18
 begin
19
  -- hier ist die FSM drin
20
 case current_state is
21
  when lese_bit =>
22
   if counter < 16 then
23
    counter <= counter + 1;
24
    16_bit_reg <= 16_bit_reg(14 downto 0) & bit_in;
25
   else
26
    reg_full <= '1';
27
    counter <= (others=>'0');
28
   end if;
29
   current_state <= wait1;
30
  -- restliche FSM
31
 end process;
32
...
33
end arch;

Fehlt halt noch einiges, aber wenigstens ein Anfang. Das bit_reg_16 ist 
im Prinzip ein Schieberegister.

von ijuz (Gast)


Lesenswert?

Um mal etwas Werbung zu machen:
http://sourceforge.net/projects/fsmdesigner/

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.