Moin ich hab mal eine blöde Frage: Ich hab mir gerade vom Xilinx CoreGen einen Divider machen lassen und würde nun gerne wissen wie ich erkennen kann, dass dieser mit der Division fertig ist. Ich brauch das für einen Automaten. Leider funktioniert es nicht auf die Flanken der Ausgangssignale zu warten. Danke euch schonmal im Vorraus!
Quecksilber schrieb: > Leider funktioniert es nicht auf die Flanken der Ausgangssignale zu > warten. Man wartet bei solchen Cores auch nicht auf irgendwelche Flanken, sondern fragt einen Pegel zum Zeitpunkt (bzw. durch) eine Taktflanke ab. > Ich hab mir gerade vom Xilinx CoreGen einen Divider machen lassen > und würde nun gerne wissen wie ich erkennen kann, dass dieser mit > der Division fertig ist. Ich würde da irgendein "Ready" oder "Done" Signal erwarten. Was sagt denn die Dokumentation dazu?
Danke dir für die schnelle Antwort. Der CoreGen kann laut Doku theoretisch zwei Arten von Dividierern bauen: Einen Radix2 und einen High Radix. Letzterer wäre schön, denn der hat durchaus einen RDY-Ausgang. Leider ist der auf dem Spartan3E nicht verfügbar. Der Radix2 hat nur die Ausgänge Quotient, Fractional und RFD (Ready for Data, ist immer high, wenn Clocks per Division = 1 ist). Ich hab auch schon das hier gefunden: http://www.lothar-miller.de/s9y/archives/29-Division-in-VHDL.html =) aber leider scheinst du da nur mit unsigned zu arbeiten, ich benötige aber auch signed-operationen. Kann man deinen Dividierer dahingehend leicht umschreiben? oder ist es leichter hinterher das Vorzeichen zu korrigieren? Danke nochmal!
ps: falls es jemanden interessiert: Hier nochmal die Doku
Steht doch alles drinnen. Das Ding ist im einfachen Fall nicht einfach "fertig" sondern kann je nach Modus alle 1/2/4/8 Takte ein Eingangsdatenpaar verarbeiten und gibt das Ergebnis nach einer stets gleichbleibenden Latenz aus (der High-Radix-Mode ist da variabel, deshalb braucht er ein RDY). Die Latenz ist in Tabelle 2 angegeben. Wenn du wissen willst, wann nach einem bestimmten Eingangswert der dazugehörige Ausgang rauskommt, brauchst du nur einen Zähler. Und falls der Teiler dauernd mit Daten versorgt wird, brauchst du ein Schieberegister, das das RFD um die Latenz verzögert.
Clocks per Division = 1 Was sagt uns das ?
Jeder Takt liefert ein Ergebnis. Wie lange es aber durch die Pipeline braucht, hängt von den Bitbreiten ab...
Georg A. schrieb: > Wie lange es aber durch die Pipeline braucht, hängt von den Bitbreiten > ab...
1 | With Clocks per Division set to 1, the core .... will have maximal throughput |
2 | of one division per clock cycle, but will use the most resources. |
Um zur ursprünglichen Frage zurückzukommen: Quecksilber schrieb: > Ich hab mir gerade vom Xilinx CoreGen einen Divider machen lassen und > würde nun gerne wissen wie ich erkennen kann, dass dieser mit > der Division fertig ist. Das kommt auf deine gewählte Implementation an. Für eine Basis-2 Implementation kannst du einfach die Takte abzählen:
1 | In general: |
2 | • Latency is of the order M for integer remainder dividers |
3 | • Latency is of the orderM + F for fractional remainder dividers |
Für eine andere Implementation gibt es das Ready-Signal:
1 | RDY Output Ready |
2 | Signals that a result is available at the output of the core. |
3 | : |
4 | : |
5 | Figure 4: High Radix Timing Diagram |
Danke euch für die Antworten, leider ist eines der Probleme dabei, dass ich nicht genau weiß wie groß die Dividenden und Divisoren sind bzw. wie breit. Diese werden nämlich mehr oder minder zufällig von einem LFSR erzeugt. Oder ist es so, dass ein 10-Bit breiter Dividierer genau so lange braucht um eine 10-Bit-Zahl durch eine weiter 10-Bit-Zahl zu teilen wie er brauchen würde und eine 2-Bit-Zahl durch eine 2-Bit-Zahl zu teilen?
PS: Lothar Miller schrieb: > Für eine andere Implementation gibt es das Ready-Signal:RDY Output Ready > Signals that a result is available at the output of the core. > : > : > Figure 4: High Radix Timing Diagram leider gibt es diesen RDY-Ausgang nur für High Radix. Mein FPGA kann aber nur Radix2.
Quecksilber schrieb: > Oder ist es so, dass ein 10-Bit breiter Dividierer genau so > lange braucht um eine 10-Bit-Zahl durch eine weiter 10-Bit-Zahl zu > teilen wie er brauchen würde und eine 2-Bit-Zahl durch eine 2-Bit-Zahl > zu teilen? Ja, denn es ist ja die selbe Hardware. Die unterschiedlichen Latenzen kommen nur durch eine unterschiedliche Konfiguration im Coregen. Wenn der Core mal gemacht ist, braucht er gleich viele Takte, ob du 6:2 oder -7345678:3456 rechnest.
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.