Forum: FPGA, VHDL & Co. Xilinx CoreGen: Divider, erkennen wenn der fertig ist


von Quecksilber (Gast)


Lesenswert?

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!

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


Lesenswert?

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?

von Quecksilber (Gast)


Lesenswert?

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!

von Quecksilber (Gast)


Angehängte Dateien:

Lesenswert?

ps: falls es jemanden interessiert: Hier nochmal die Doku

von Georg A. (georga)


Lesenswert?

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.

von Uwe (Gast)


Lesenswert?

Clocks per Division = 1
Was sagt uns das ?

von Georg A. (georga)


Lesenswert?

Jeder Takt liefert ein Ergebnis. Wie lange es aber durch die Pipeline 
braucht, hängt von den Bitbreiten ab...

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


Lesenswert?

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 orderM + 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

von Quecksilber (Gast)


Lesenswert?

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?

von Quecksilber (Gast)


Lesenswert?

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.

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


Lesenswert?

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