Ich bin noch ziemlicher FPGA-Neuling und habe jetzt ein paar Fragen zuu "Schnellen Designs": Alles Folgende gillt für MAX 10 unter Quartus Prime Lite a) Wenn ich in Verilog einen 32Bit Addierer aufbaue, wird dieser immer als (langsamer) Ripple-Carry-Adder synthetisiert. Gibts da nichts schnellers oder wie helfe ich dem Tool was schnelles (Carry lookahaed, Carry Skip o.ä) zu nehmen ? In Vivado (Xilinx,Device Zynq) werden bei sowas immer Carry Beschleunigung Baugruppen synthetisiert). b) Wenn ich in Verilog teste, ob ein 13-Bit Wert ==0 ist, wird eine Kaskade aus 4 Logikblöcken mit je 4 Eingängen synthetisiert, also eine Verzögerungszeit von 4 Stufen. Ich kann das ganze aber zweistufig mit den gleichen 4 Blöcken realisieren. Wenn ich diese Realisierung in Verilog hinschreibe und mir die zugehörige Beschreibung und Quartus als RTL ansehe, elimiert Quartus die Kaskade und macht daraus ein Oder Gatter mit 13 Eingänge, woraus der Synthetisierer dann wieder die Kaskade mit 4 Stufen macht. Wie kann ich eine bestimmte Art der Kaskadierung erzwingen?
Ein Thread pro Thema und User und Tag reicht, oder nicht? Martin O. schrieb: > woraus der Synthetisierer dann wieder die Kaskade mit 4 Stufen macht. Und was kommt letztendlich raus? Ein Lösungsansatz ist.in deinem anderen Thread im Beitrag "Re: Critical Path Carry Skip Adder" beschrieben
:
Bearbeitet durch Moderator
"Ich kann das ganze aber zweistufig mit den gleichen 4 Blöcken realisieren." Ich hab es geschafft, mein Design mittels
1 | wire z1 /* synthesis keep */ ; |
2 | assign z1=result[0]|result[1]|result[2]|result[3] ; |
zu erzwingen, und es ist tatsächlich etwas schneller als das von Quartus synthetisierte Design.
Martin O. schrieb: > und es ist tatsächlich etwas schneller als das von Quartus > synthetisierte Design. Sagt welcher Teil der Toolchain? Aus welchem Report liest du die Geschwindigkeit?
Ohne die "synthesis keep" Hinweise bekomme ich "timing violations". Wenn ich mit den "synthesis keep" Hinweisen mein Design erzwinge (Weniger Stufen hintereinander), erhalte ich keine timing violations. Ich kann auch mit dem "TimeQuest Timing Analyzer" sehen, ob "negativer slack" vorkommt, und ich kann mir damit auch die Timings einzelner Pfade ansehen, da sehe ich dann den Unterschied. Ich hoffe dass ich das so richtig mache, bin aber, wie gesagt, noch ein ziemlicher FPGA-Noob.
Ist da denn als Optimierungsziel Fläche oder Geschwindigkeit eingestellt?
unser Freund ist ja echt enthusiastisch, meint besser routen zu können,
als Quartus, naja ...
... wahrscheinlich hat er alles auf "balanced" stehen gehabt.
>Re: Schnelle Designe
Isse dasse neue Deutsche Rechteschreibunge?
Ich hab mal die folgende Option gewählt:
Info (16303): Aggressive Performance optimization mode selected --
timing performance will be prioritized at the potential cost of
increased logic area and compilation time
Nachwievor wählt Quartus eine Kaskade aus 4 Blöcken und es gibt Timing
Violations.
>Re: Schnelle Designe
Isse dasse neue Deutsche Rechteschreibunge?
Ne, war ein Tippfehler, sollte "Designs" heissen, aber man kann, meine
ich, den Betreff nicht mehr im Nachinein ändern.
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.