Forum: FPGA, VHDL & Co. Wurzel mit Xilinx Cordic Core


von Ralle (Gast)


Lesenswert?

Hallo, beim Lesen dieser Themen:

Beitrag "CORDIC und Wurzel"
Beitrag "Wurzel ziehen - VHDL"
Beitrag "CORDIC in VHDL"
Beitrag "Xilinx Systemgenerator + Spartan 6 + Cordic 4.0 mit 250Mhz"

... bin ich noch nicht schlauer geworden, daher eine Frage:

Ich ziehe die Wurzel aus einer positiven Zahl (unsigend, Vektor) mit der 
Breite (27 downto 0) und erhalte als Ergebnis aus dem Xilinx Cordic die 
Breite (14 downto 0).

28 Bit werden also beim Wurzeln 1 Bit breiter, als erwartet. Kann das 
jemand erklären? Oder wirft der Cordic eine komplexe Zahl raus?

von Achim S. (Gast)


Lesenswert?

Ralle schrieb:
> 28 Bit werden also beim Wurzeln 1 Bit breiter

zieh doch mal die Wurzel aus xFFFFFFF (und runde richtig...)

von Tom W. (Gast)


Lesenswert?

Achim S. schrieb:
> zieh doch mal die Wurzel aus xFFFFFFF (und runde richtig...)
Kann der VDHL-Kern runden? Soweit mir bekannt kommt doch da der Rest mit 
raus. Die Vorkommastellen sind immer genau die Hälfte der 
Nachkommastellen:

SQRT(255) -> 15.xx

von Achim S. (Gast)


Lesenswert?

Thomas Werner schrieb:
> Kann der VDHL-Kern runden? Soweit mir bekannt kommt doch da der Rest mit
> raus. Die Vorkommastellen sind immer genau die Hälfte der
> Nachkommastellen:

Soweit mir bekannt arbeitet der IP-Core für die Wurzel entweder mit 
positiven Ganzzahlen oder mit Fixpunktzahlen im Bereich zwischen 0 und 
2. Fürs Runden gibt es laut IP-Core Datenblatt folgende Optionen:

Output rounding modes: Truncation, Round to Pos
Infinity, Round to Pos/Neg Infinity, and Round to
Nearest Even

Mit Ganzzahlen und jedem Rundungs-Modus außer Truncation würde ich also 
für die Wurzel aus xFFFFFFF den Wert x4000 erwarten (15 Bit breit).

Ist aber nur meine Erwartung, ausprobiert habe ich es nicht - das könnte 
Ralle mit seiner Implementierung ja mal machen.

von Ralle (Gast)


Lesenswert?

Es ist egal, was ich als Rundung einstelle: Es bleibt bei 15 Bit 
Ausgabe. Der Eingang ist dabei ausdrücklich unsigned integer. Lediglich, 
wenn ich als Eingang "unsigned fraction" verwende, kann ich die 
Ausgangsbits zwischen 2 und 48 einstellen, was ich aber nicht verstehe.

Richtig wäre, die Vorkommazahlen und Nachkommazahlen anzugeben und der 
Core würde sich die Länge und die Darstellung des Ausgangs selber 
berechnen.

Ich verstehe auch noch nicht, was aus der Wurzel rauskommt. Die Werte 
sehen komisch aus.

von Ralle (Gast)


Lesenswert?

Im Datenblatt steht dazu auch nicht viel. Es gibt nur eine 
Implementierungsübersicht, die etwas über Inputs und  Outputs sagt, 
sowie ein Rechenbespiel für die Wurzel.

1) "Iput/Output Pins vs. Functional Configuration", scheint aber nicht 
zum THema zu passen.

2) Hier ist das Beispiel aus dem Datenblatt:

The input, Xin, is expressed as an unsigned integer. The output, Xout, 
is expressed as an unsigned integer. In this example the input width is 
set to 10 bits so the output width is automatically set to 6 bits.

Xin : “0000100000” => 32
Xout : “000110” => 6

Er scheint also zu runden. Ich nehme an, dass bei Truncation das oberste 
Bit 0 ist und ignoriert werden kann.

von Markus F. (Gast)


Lesenswert?

Was sagt denn die Simulation? Müsste sich doch direkt ablesen lassen, 
was der tut.

von J. S. (engineer) Benutzerseite


Lesenswert?

Der Ausgang ist korrekt so. Wenn Du die Aufrundgun nicht nutzt oder den 
den Core nicht voll ansteuerst, kannst Du das Bit getrost weglassen.

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.