VHDL Signalarithmetik

Gast #297676
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
Gast #297677
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren