If Statement

OP #4828249
Lesenswert?

Was an diesem VHDL-Konstrukt funktioniert hier nicht?
1
procedure Calc_Flags_Logic(
2
  constant Data : in  std_logic_vector)
3
  is
4
  begin
5
    if (Data'left = '1') then
6
      do something;
7
    end if;
8
end procedure;

Modelsim bringt die Fehlermeldung: no feasible entry for "="
OP #4828460
Lesenswert?

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?
Moderator (Firma: Titel) Persönliche Seite #4828492
Lesenswert?

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 #4828542
Lesenswert?

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                    =   ==
Gast #4828596
Lesenswert?

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?
Moderator (Firma: Titel) Persönliche Seite #4828637
Lesenswert?

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 #4829339
Lesenswert?

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.
#4831515
Lesenswert?

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
Lesenswert?

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.
#4832262
Lesenswert?

> 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
Lesenswert?

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).
Gast #4832935
Lesenswert?

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 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