Forum: FPGA, VHDL & Co. VHDL Signalarithmetik


von Christoph Lauer (Gast)


Lesenswert?

Hallo,

ich habe folgendes Problem:

ich mochte ein einfachen statechart in vhdl-gießen und habe dazu eine
zustandsvariable in form eines signals.

type states is (out_of_synch, in_synch, manipulating);
signal state: states := out_of_synch;

falls mein automat nun in einem bestimmten zustand ist soll eine
prozessvariable manipuliert werden:

when manipulating =>
if i = "11" then
state := in_synch;
mja_offset := scodeword(24 downto 17) + offset_reg(0 to 7);
scodeword(24 downto 17) := mja_offset;
ostream <= scodeword(31 downto 24);
end if;

dabei sind i, scodeward und offset_reg jeweils signale.
in der simulation erscheint es nun so, als ob die if-anweisung nicht
ausgeführt würde. ersetze ich die anweisungen durch eine einfach
konstantenzuweisung:

scodeword(24 downto 17) := X"ff";

verhält sich die simulation ganz wie erwartet.

ist da ein timing problem? ich habe auch schon versucht die signale
durch shared variables zu ersetzen. was mache ich falsch?

danke

von Henrik (Gast)


Lesenswert?

"mja_offset := scodeword(24 downto 17) + offset_reg(0 to 7);"
Willst du wirklich eine Addition machen, oder möchtest du die Vektoren
zusammenfügen? Wenn letzteres, dann muss das so aussehen:
mja_offset := scodeword(24 downto 17) & offset_reg(0 to 7);

Bei Automaten sollten die Zustandsänderungen, Abfragen und Zuweisungen
bei einem Taktsignal erfolgen.
Am besten mal den ganzen Code posten, aus den paar Zeilen kann man
(zumindest ich) nicht soviel ablesen.

Gruss Henrik

P.S.: Du bist hier leider im flaschen Unterforum.

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.