Forum: FPGA, VHDL & Co. VHDL und die Operatoren <, >, <=, >=


von Heinrich H. (Firma: Ich.AG) (hhanff)


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

von D. I. (Gast)


Lesenswert?

Funktioniert tadellos ....

von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

D. I. schrieb:
> Funktioniert tadellos ....
Sorry, ich hab mich unsauber ausgedrückt. Ich meinte ob die Wahl des 
Operators Auswirkungen auf die maximale Geschwindigkeit des 
synthetisierten Codes auf dem FPGA zur Folge hat.

von D. I. (Gast)


Lesenswert?

Heinrich H. schrieb:
> D. I. schrieb:
>> Funktioniert tadellos ....
> Sorry, ich hab mich unsauber ausgedrückt. Ich meinte ob die Wahl des
> Operators Auswirkungen auf die maximale Geschwindigkeit des
> synthetisierten Codes auf dem FPGA zur Folge hat.

Im Vergleich zu was?

von Klaus F. (kfalser)


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.

von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

D. I. schrieb:
> Heinrich H. schrieb:
>> D. I. schrieb:
>>> Funktioniert tadellos ....
>> Sorry, ich hab mich unsauber ausgedrückt. Ich meinte ob die Wahl des
>> Operators Auswirkungen auf die maximale Geschwindigkeit des
>> synthetisierten Codes auf dem FPGA zur Folge hat.
>
> Im Vergleich zu was?

Im Vergleich zu dem Vergleich auf '!=' oder '='.

von D. I. (Gast)


Lesenswert?

Und was machst du wenn du auf < prüfen willst?

von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

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.

von anony (Gast)


Lesenswert?

Heinrich H. schrieb:
> '<='
Das ist eine Zuweisung! Wie will man die anders ausdrücken?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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"...  :-/

von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

Lothar Miller schrieb:

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

Wenn du aber einen x-beliebigen Wert auf "gleich" oder größer gleich" 
vergleichst, dann ist das durchaus ein (auch funktionaler) Unterschied.

von Fpgakuechle K. (Gast)


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,

von Heinrich H. (Firma: Ich.AG) (hhanff)


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?

von Klaus F. (kfalser)


Lesenswert?

Heinrich H. schrieb:
> Aber setzt es meine maximale
> Geschwindigkeit des synthetisierten Codes auf dem FPGA herab,
Höchstwahrscheinlich

> weil "gleich" und "größer gleich" zu unterschiedlicher HW synthetisiert
> werden?

Ja

von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

Dann merke ich mir:
Wenn es funktional nichts verändert auf '=' oder '!=" abfragen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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 "/=".

von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

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.

von Stefan W. (wswbln)


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.

von Lattice User (Gast)


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.

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
Noch kein Account? Hier anmelden.