Abend. Ich habe sowas hier: TYPE COLOR(RED,GREEN,BLUE); SIGNAL CLR: COLOR:=RED; A<=B WHEN CLR= RED OR GREEN; Leider gibt mein Compiler ein Fehler aus, da die RED, GREEN etc. nicht boolesche Typen sind, also darf man die nicht mit "OR" Verknüpfen. Gibt es ein Umweg, wie ich sowas richtig schreiben kann?
A<=B WHEN CLR=RED OR CLR=GREEN; Aber was willst du zuweisen, wenn die Bedingung mal nicht zutrifft? Ein Else-Zweig ist unbedingt notwendig...
Ja, ELSE Zweig ist vorhanden, ich wollte nur viele Bedienungen möglichst kompakt zusammenfassen.=)
Böser Kommunist schrieb: > Ja, ELSE Zweig ist vorhanden, ich wollte nur viele Bedienungen > möglichst kompakt zusammenfassen.=) Danke, waere die bessere Antwort gewesen. ;)
Böser Kommunist schrieb: > A<=B WHEN CLR= RED OR GREEN; > > Leider gibt mein Compiler ein Fehler aus, da die RED, GREEN etc. nicht > boolesche Typen sind, also darf man die nicht mit "OR" Verknüpfen. > > Gibt es ein Umweg, wie ich sowas richtig schreiben kann? Du könntest den OR Operator überladen. Der ist schließlich auch nur als Funktion definiert. Allerdings kann ich mir nicht so richtig vorstellen, wie man überhaupt Farben verodern könnte. Und auch nicht, wie wie die Ergebnisfarbe z.B. der Berechnung von "rot oder grün" bzw. "rosa oder braun" aussehen würde. Und am allerwenigsten, was man damit anfangen könnte... Du erkennst das Dilemma? > Gibt es ein Umweg, wie ich sowas richtig schreiben kann? Ergo ergibt sich aus meinen obigen Überlegungen, dass du die Farben tatsächlich nicht verodern wolltest, sondern (wie vorgeschlagen) abfragen wollstest, ob entweder die Farbe=rot oder ob die Farbe=grün ist...
:
Bearbeitet durch Moderator
Man müsst auch noch = überladen, aber dann wird es schwierig, auf einzelne Werte zu vergleichen. Das Problem ist daher eigentlich, dass unabhängige = und OR nicht funktionieren, wenn das = auch noch "normal" gehen soll.
Georg A. schrieb: > Man müsst auch noch = überladen Nicht, wenn "RED OR GREEN" wieder eine Farbe zurückliefern würde. Ich kann mir aber wie gesagt nicht vorstellen, was das für eine Farbe wäre, bzw. wie eine Veroderung von Farben überhaupt definiert sein könnte...
Naja, wenn es erstmal um den "Use-case" geht, dass man ein = mit veroderten Einzelfarben als Möglichkeit der Auswahl hat, kann man ja die Einzelfarben diskret auf die Bits eines Vektors legen und noch ein Flagbit für die Mischung setzen. Das = müsste das Bit dann auswerten und dann selbst nochmal binär ORen und bei !=0 (äh, /=0...) true zurückliefern. Anekdote am Rande: Das mit OR aus Auswahl ist recht intuitiv. Ich hatte mich bei meinen ersten Basteleien am ZX81 schon gefragt, warum "PRINT 2 OR 3" immer nur 1 ergab und nicht mal 2 oder 3 ;)
Hallo, Danke für die Hilfe. Die Farben repräsentieren einfach einen Zustand eines FSM: A<=B wenn Zustand RED oder Zustand Blau. So habe ich es gemeint.
Böser Kommunist schrieb: > A<=B wenn Zustand RED oder Zustand Blau. Wenn du es dann auch so hinschreibst, tut es ja A<=B when CLR=RED or CLR=BLUE; Der Vergleich CLR=RED liefert ein Ergebnis (Wahr oder Falsch) Der Vergleich CLR=BLUE liefert ein Ergebnis (Wahr oder Falsch) Der Operator OR verknüpft die beiden Wenn mindestens ein Vergleichsergebnis wahr ist, dann ist die Logische Verknüpfung wahr. Wenn du aber schreibst: ..when CLR=RED or BLUE, dann kann das keine logische Operation sein. CLR=RED liefert wahr oder falsch. Aber BLUE? Was soll das sein? wahr oder falsch? Also kann das or nichts damit anfangen. Das ist das Problem des alltäglichen Sprachgebrauchs. Gehe aus der Kneipe, wenn DU=BESOFFEN or PLEITE. Das ist aber Umgangssprache. Es wir implizit angenommen, dass sich PLEITE auch auf dich bezieht. Genaugenommen ist das aber falsch. Es könnte auch heißen, dass dein Kumpel pleite sein muss. Dann müsste die Gleichung Lauten: Gehe nach Hause, wenn DU=BESOFFEN or KUMPEL=PLEITE Und da der Compiler nicht raten kann, was du meinst, wer hier pleite sein soll, geschweige denn, Umgangssprache beherrscht, musst du ihm sagen, WER PLEITE sein muss .. oder in deinem Fall eben BLAU :-)
Schlumpf schrieb: > DU=BESOFFEN or PLEITE. Das passt zwar nicht mehr zum ursprünglichen Problem, aber wenn "besoffen" und "pleite" std_logic's sind, kann man in VHDL 2008 durchaus schreiben:
1 | IF ?? besoffen OR pleite THEN |
2 | ...
|
bzw. in dem Fall die ?? sogar weglassen.
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.