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?
Ralle schrieb: > 28 Bit werden also beim Wurzeln 1 Bit breiter zieh doch mal die Wurzel aus xFFFFFFF (und runde richtig...)
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
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.
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.
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.
Was sagt denn die Simulation? Müsste sich doch direkt ablesen lassen, was der tut.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.