VHDL und die Operatoren <, >, <=, >=

OP (Firma: Ich.AG) #2421874
Lesenswert?

Hallo!

Meine Frage ist dieses mal ganz kurz:

Wie kommen heutige Synthesetools mit den Operatoren '<', '>', '<=' und 
'>=' klar?

Ich meine gelernt zu haben, dass man sich, wenn möglich, auf die 
Operatoren '!=' und '=' beschränken soll. Trifft das heute noch zu?

Gruß,

     H
#2421938
Lesenswert?

Heinrich H. schrieb:
> Ich meinte ob die Wahl des
> Operators Auswirkungen auf die maximale Geschwindigkeit des
> synthetisierten Codes auf dem FPGA zur Folge hat.

Mit der Compiler hat das in erster Linie nichts zu tun.
Ein vergleich auf keiner oder größer benötigt kompliziertere Gleichungen 
als eine Test auf Gleichheit.
Ob das Auswirkungen auf die Performance hat, hängt von der Breite der zu 
vergleichenden Operanden ab und vom Baustein ab, bei größeren Breiten 
sicher.
Bei FPGAs ist das ganze weniger spürbar, bei klassischen CPLD's kann es 
einen großen Unterschied machen.
Moderator (Firma: Titel) Persönliche Seite #2422117
Lesenswert?

Heinrich H. schrieb:
> ob die Wahl des
> Operators Auswirkungen auf die maximale Geschwindigkeit des
> synthetisierten Codes auf dem FPGA zur Folge hat.
Ja, klar, hat sie. Denn wenn du schreibst
 if (i=100) then
oder
 if (i>=100) then
dann ist da durchaus ein Unterschied.

anony schrieb:
>> '<='
> Das ist eine Zuweisung! Wie will man die anders ausdrücken?
Das ist je nach Kontext auch mal ein "kleiner gleich"...  :-/
Gast #2422127
Lesenswert?

Heinrich H. schrieb:
> D. I. schrieb:
>> Und was machst du wenn du auf < prüfen willst?
>
> '<' versuche ich mit '!=' zu ersetzen. Bei Zählern ist das im
> Allgemeinen kein Problem.

Vorsicht, allgemein muß hier bedeuten das der counter nur einmal gereset 
wird. Bei bspw. Upcountern gibt es bei einem solchem Ersatz ein problem, 
falls er auch bei einem anderen als dem Maximalen Zählerstand auf den 
niedrigen wechseln kann, ebenso downcounter, wenn es andere wechsel auf 
den Maximalwert ausser beim Weiterzählen nach Erreichen des 
Minimalwertes gibt. Solche wechsel treten typischerweise bei einem 
Counterreset/restart auf.

MfG,
OP (Firma: Ich.AG) #2422138
Lesenswert?

Lothar Miller schrieb:
> Nochmal zurück zur Frage:
> Wenn du eine Abfrage z.B. für einen Zählerreset auf "gleich" oder aber
> auf "größer gleich" machst, dann macht das keinen Unterschied...
... funktional macht es keinen Unterschied. Aber setzt es meine maximale 
Geschwindigkeit des synthetisierten Codes auf dem FPGA herab, weil 
"gleich" und "größer gleich" zu unterschiedlicher HW synthetisiert 
werden?
Moderator (Firma: Titel) Persönliche Seite #2422245
Lesenswert?

Heinrich H. schrieb:
> Dann merke ich mir:
> Wenn es funktional nichts verändert auf '=' oder '!=" abfragen.
Ich habe schon ein paar Versuche gemacht und herausgefunden, dass es 
offenbar ganz einfach am Vergleichswert liegt, ob "=" oder "<=" besser 
optimiert werden kann. Es kann sich also durchaus lohnen, bei einem 
kritischen Design mal die "andere" Variante auszuprobieren. Aber auch 
meine Defualteinstellung ist "=" und "/=".
#2424896
Lesenswert?

...außerdem kann es sich lohnen (wenn man andere als = oder != 
Vergleiche braucht) mal in die synthetisierte Logik reinzuschauen, 
wieviele Stufen die resultierende Logik hat. Wenn man es sich vom Design 
her leisten kann (Latency), können ein paar Pipeline-Register die 
Systemfrequenz wesentlich beschleunigen.
Gast #2424914
Lesenswert?

Heinrich H. schrieb:
> Lothar Miller schrieb:
>> Ich habe schon ein paar Versuche gemacht und herausgefunden, dass es
>> offenbar ganz einfach am Vergleichswert liegt, ob "=" oder "<=" besser
>> optimiert werden kann.
>
> ... das überrascht mich.

Sei x ein unsigned 8 bit:
Bei x == 15 müssen alle 8 bit verglichen werden, bei x <= 15 reicht es 
die oberen 4 bits auf 0 zu vergleichen.

So optimieren geht natürlich nur bei Vergleich mit Konstanten.

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