Xilinx CoreGen: Divider, erkennen wenn der fertig ist

Gast #2475096
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!
Moderator (Firma: Titel) Persönliche Seite #2475140
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?
Gast #2475248
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!
#2475463
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.
Moderator (Firma: Titel) Persönliche Seite #2476315
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
Gast #2476400
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?
Moderator (Firma: Titel) Persönliche Seite #2476514
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.