Hallo, folgender Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
Hier wird mir gesagt: (100) Illegal sequentiell statement Wenn ich das ganze mit case mache:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
funktionierts. Warum? Danke.
|
Anzeige
|
with select / case - FrageHallo, folgender Code:
Hier wird mir gesagt: (100) Illegal sequentiell statement Wenn ich das ganze mit case mache:
funktionierts. Warum? Danke.
Gast
#3373440
Weil die Konstruktion mit with-select nunmal nicht innerhalb von Prozessen stehen darf. Alternativ zum case könntest du eine bedingte Zuweisung mit 'when' benutzen.
Gast
#3373493
Er koennte es wahrscheinlich auch voellig nebenlaeufig hinter den process schreiben. Aber einen Sinn warum das mit dem with/select nicht geht gibt es nicht oder? Das ist einfach von den Synthesetools so festgelegt? Es gibt nun mal im VHDL Standard verschiedene Beschreibungen Prozesse und für außerhalb von Prozessen. Außerhalb von Prozessen geht z.B. auch kein if-then-else zu verwenden. Da muss man dann when nehmen, was wiederum innerhalb eines Prozesses nicht zulässig ist. Zumindest im 93er VHDL. Mit VHDL2008 ist da einiges etwas freier geworden.
Gast
#3375110
Bei the WITH-Kontrukt kann man halt keinen Takt ins Spiel bringen. Das ist ein statischer Multiplexer. Bei CASE kann man verschachteln und zeitliche Abhängigkeiten verwenden, womit erst klassische State Machines möglich werden. Im Prinzip kann man sich das WITH sparen, wie so viele Sachen in VHDL gibt es mehrere Wege nach ROM.
Gast
#3377197
Felix O. schrieb: > Aber einen Sinn warum das mit dem with/select nicht geht gibt es nicht > oder? Das ist einfach von den Synthesetools so festgelegt? Doch, denn gibt es. Das eine ist ein sequentielles Konstrukt, (nacheinander abarbeiten der Bedingungen) das anders ein paralleles (concurruent), bedingungen werden gleichzeitig abgearbeitet. Bei der uC programmierung ist fast alles sequential, alle Befehle werden nacheinander abgearbeitet, in der Hardware dagegen gibt bei der Beschreibung von Kombinatorik (Logikgatter) den Fall das alle bedingung gleichzeitig abgearbeitet werden. In Hardwarebeschreibungssprachen wird also nicht nur die Abbildung Ausgangvector = F(Eingangsvektor) beschrieben, sondern auch wie diese Abbildung in der Zeitebene gebildet wird. bei einem Process kann man festlegen mit welchen signal der Process abgearbeitet wird (wenn das in der senseliste sich ändert); bei with .. select werden die bedingungen immer dann abgecheckt und abgearbeit wenn sich das Signal hinter with ändert. Man kann es so verkürzen, alles wo FF im Spiel sind (FSM) -> Process(clk) mit case reine kombinatorik bspw encoder -> ausserhalb Process mit with oder Process mit allen encode eingängen in der sense liste und case im process. MfG Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|