Was an diesem VHDL-Konstrukt funktioniert hier nicht?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Modelsim bringt die Fehlermeldung: no feasible entry for "="
|
Anzeige
|
If StatementWas an diesem VHDL-Konstrukt funktioniert hier nicht?
Modelsim bringt die Fehlermeldung: no feasible entry for "="
Gast
#4828255
weil '1' kein std_logic_vector ist
Gast
#4828256
Data'left ein Integer und '1' ein std_logic ist
Gast
#4828311
Data(Data'left) = '1' aber wurde ja auch gesagt :) Lösungen? ;-)
Also Data'left ist der Wert des linkesten Bits des std_logic_vectors.
Ein Integer, der dem Status entspricht (also X,0,1 und was es halt sonst
noch so gibt). Eine Möglichkeit wäre somit Data'left=3, da Pos('1') bei
std_logic 3 entspricht?
Geht das auch schöner?
Gast
#4828486
Kann man in VHDL den Zuweisungsoperator '=' für den logischen Vergleich '==' verwenden? M. M. schrieb: > Also Data'left ist der Wert des linkesten Bits des std_logic_vectors. Nein. Es ist der Index des linkesten Bits. Wenn du z.B. sowas hast: signal a : std_logic_vector(7 downto 3); dann ist a'left = 7 und a'right = 3. Lars Schmitt schrieb: > Kann man in VHDL den Zuweisungsoperator '=' für den logischen Vergleich > '==' verwenden? Man kann nicht. Man MUSS, denn es gibt kein '==' in VHDL, weil gilt "VHDL ist nicht C" Leih' dir mal das Buch "VHDL-Synthese" aus und lies das...
Gast
#4828522
Lothar M. schrieb: > Man kann nicht. Man MUSS, denn es gibt kein '==' in VHDL, weil gilt > "VHDL ist nicht C" Das doppelte Verwenden des '='-Operators für den logischen Vergleich ist ja keine reine C-Sache. Schade das man sich für diese Lösung entschieden hat.
Gast
#4828542
Lars Schmitt schrieb: > Lothar M. schrieb: >> Man kann nicht. Man MUSS, denn es gibt kein '==' in VHDL, weil gilt >> "VHDL ist nicht C" > > Das doppelte Verwenden des '='-Operators für den logischen Vergleich ist > ja keine reine C-Sache. Schade das man sich für diese Lösung entschieden > hat. Also ich finde die VHDL Regelung besser als in C VHDL C Zuweisung variable := = Zuwesung Signal <= n.a. Vergleich = == Lars Schmitt schrieb: > Das doppelte Verwenden des '='-Operators für den logischen Vergleich ist > ja keine reine C-Sache. Schade das man sich für diese Lösung entschieden > hat. Naja, sieh mal das hier:
Du hast in C noch nie sowas programmiert? Ich schon. In VHDL aber noch nie... ;-)
Gast
#4828596
bitwurschtler schrieb: > VHDL C > Zuweisung variable := = > Zuwesung Signal <= n.a. > Vergleich = == Im Prinzip ist es ja auch nur eine Syntax die irgendwann am Anfang mal festgelegt wurde. Mir gefällt die Zuweisung im Sinne der Definition in Mathe. Der Vergleich finde ich aber trotzdem mit dem doppelten '=='-Zeichen intuitiver ;-) Lothar M. schrieb: > Naja, sieh mal das hier: if (a=3) > machwas(); > Du hast in C noch nie sowas programmiert? Ich schon. > In VHDL aber noch nie... ;-) Ich verstehe den Witz irgendwie nicht. Wo steckt er denn? Lars Schmitt schrieb: > Ich verstehe den Witz irgendwie nicht. Wo steckt er denn? Im "if (a=3)" ... Ist dir das echt noch nie passiert? Das ist eine Zuweisung, obwohl da sicher ein Vergleich gewollt war. Und der Compiler verdaut das (mehr oder minder) klaglos. Heute spuckt er wenigstens eine Warnung aus, weil das jeder (Compilerbauer auch) schon mal falsch gemacht hat...
Gast
#4828701
Lothar M. schrieb: > Im "if (a=3)" ... deshalb hab ich's mir mittlerweile angewoehnt (auch wenn's am Anfang bloed ausschaut), das ganze so zu schreiben: "if (3==a)" ... Wenn ich dann ein = vergesse hagelt es keine Warning sondern einen Error. Und ja, es ist reine Gewohnheitssache...
Gast
#4829339
Lothar M. schrieb: > Ist dir das echt noch nie passiert? Doch klar natürlich. Hatte nur nicht geblickt was du gemeint hattest, sry :-) berndl schrieb: > deshalb hab ich's mir mittlerweile angewoehnt (auch wenn's am Anfang > bloed ausschaut), das ganze so zu schreiben: "if (3==a)" ... Ich versuche es mittlerweile auch so, auch wenn es mir vom Lesefluss immer ein Dorn im Auge ist da es einfach nicht das ist was ich in einer Condition erwarte. Der Vorteil überwiegt aber dagegen klar. Mir fällt wieder auf das ich in solchen Sachen manchmal einfach zu pingelig bin. berndl schrieb: > Lothar M. schrieb: >> Im "if (a=3)" ... > > deshalb hab ich's mir mittlerweile angewoehnt (auch wenn's am Anfang > bloed ausschaut), das ganze so zu schreiben: "if (3==a)" ... Ungewohnt vielleicht, aber blöd bestimmt nicht. Beide Schreibweisen sind äquivalent - also spricht nichts dagegen, sich vom Compiler vor eigener Schussligkeit schützen zu lassen.
Gast
#4831527
Burkhard K. schrieb: > berndl schrieb: >> Lothar M. schrieb: >>> Im "if (a=3)" ... >> >> deshalb hab ich's mir mittlerweile angewoehnt (auch wenn's am Anfang >> bloed ausschaut), das ganze so zu schreiben: "if (3==a)" ... > > Ungewohnt vielleicht, aber blöd bestimmt nicht. Beide Schreibweisen sind > äquivalent - also spricht nichts dagegen, sich vom Compiler vor eigener > Schussligkeit schützen zu lassen. Lesbarkeit das höchste Gut ist. Lint und Warnungen es für alles andere gibt. Yoda-Sprech in C nicht blöd aber nervig ist. > Lesbarkeit das höchste Gut ist.
Was bitte an (3 == a) ist nicht lesbar???
Tatsächlich gehört diese Schreibweise zu den etablierten Praktiken der
C-Programmierung, siehe z.B. Andrew Koenig's "C Traps and Pitfalls"
(literateprogramming.com/ctraps.pdf) und erfahrene Programmierer kennen
(und lesen) sie selbstverständlich.
Wer das "Yoda-Sprech" nennt, hat Grundlegendes nicht verstanden - ein
Programm ist eben keine Prosa.
Gast
#4832298
Burkhard K. schrieb: >> Lesbarkeit das höchste Gut ist. > > Was bitte an (3 == a) ist nicht lesbar??? > Warnungen -> Fehler und dann darauf verzichten, die Katze von hinten nach vorne bürsten. > Andrew Koenig's "C Traps and Pitfalls" Ja, der gute Koenig von 1888, als die Compiler noch mit Dampf betrieben wurden (ok, ich will nicht übertreiben - ein paar immer noch brauchbare Tipps kann man dort natürlich finden). Klops schrieb: > Warnungen -> Fehler und dann darauf verzichten, die Katze von hinten > nach vorne bürsten. So halte ich das auch und compiliere immer mit -Wall. Dann will der gcc um die Zuweisung noch ein zusätzliches Klammerpaar sehen. Und das ist für mich die richtige, moderne und "schöne" Schreibweise.
Gast
#4832935
Burkhard K. schrieb: > Wer das "Yoda-Sprech" nennt, hat Grundlegendes nicht verstanden - ein > Programm ist eben keine Prosa. was denn dann? Der Computer käme auch mit Nullen und Einsen klar. Wenn (Ausgaben==5€)...: ist nahe an Prosa. Wenn (5€==Ausgaben)...: ist Yoda. Wenn (Einnahmen=Ausgaben)..: Wofür brauche ich Yoda, wenn er mir nicht dort hilft, wo mir WALL sowieso hilft? Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|