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
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.
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?
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.
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 '='.
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.
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"... :-/
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.
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.
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,
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?
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
Dann merke ich mir: Wenn es funktional nichts verändert auf '=' oder '!=" abfragen.
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 "/=".
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.
...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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.