Gast
#4691382
Ich benötige eine schnelle Winkelfunktion im FPGA. Es ist ein eher einfaches design, soll aber eine Winkelüberwachung liefern. Nun bin ich auf zwei Probleme gestossen: 1) Der Xilinx Cordic ist langsam, weswegen ich eine Alternative suche. Siehe auch hier: Beitrag "Re: CORDIC in VHDL" Ich hätte gerne eine Latenz von maximal 20 Takten bei 50 MHz und möchte den FPGA nicht gerne hochtakten. Leider habe ich 24 Bit Daten für den Eingang und brauche alle 4 Quadranten! 2) Der CORE möchte die Werte im Zweiterkomplement als fixed point eingespeist bekommen, aber es scheint was nicht zu passen. Die Werte sind vom Core her auf +1.0000 und -1.0000 limitiert wobei laut Datenblatt die Repräsentation folgende sein soll: "0100000000" => 01.00000000 => +1.0 "1100000000" => 11.00000000 => -1.0 Macht das Sinn? Weiter hinten ist nämlich die Ausgabe als Teile von PI erklärt, die lauten soll: "01100100100" => 011.00100100 => +3.14 "10011011100" => 100.11011100 => - 3.14 und da ist für mich ein Widerspruch! Wenn das erste Bit ein Minus ist, und angeblich das Zweikomplement gilt, dann wäre nur die PI-Darstellung richtig und die -1 im Beispiel oben falsch, weil die heissen müsste: "1000000000" => 10.00000000 => - 1.0 oder? Meine Werte kommen rein als echtes Zweierkomplement, wie wandle ich die? Einfach das höchste Bit vorne hinkopieren, damit das "-" stimmt? Mein Maximum (pos) wäre also gemäß dem Beispiel 0011111111, also ein digit weniger, als 0100000000 Mein Minium, )also das negative Maximum) wäre analog 1100000000, also genau der Wert. Das scheint aber so nicht zu stimmen. Es kommen komische Werte. Ich habe mir eine Matrix von 1024 x 1024 Punkten anzeigen lassen und speise -512 ... 511 für die beiden Werte X und Y ein. Rauskommen tut aber seltsamerweise nur etwas für die Winkel 45 bis 135 Grad, ausgehend von 0 =Norden, also für positive X-Achse innerhalb der Gerade Y<X sowie Y=-X. Es entstehen bildlich gesprochen nur gültige Werte für einen dreieckigen Sektor, der sozusagen nach ost öffnet. Komisch ist, dass er dabei offenbar negative Y/X verarbeiten kann, wenn das Y negativ ist. Denselben Wert, wenn x negativ ist, kriegt er nicht hin. ????