unsigned ganzzahl sqrt()

Gast #752132
Lesenswert?

Hi!

Ich möchte auf einem fpga die wurzel einer ganzen zahl berechnen.

Ich brauche 1 Berechnung pro Taktzyklus (~50mhz), Latenz ist egal (bis 
100 takte oder so ist ok).
Das ganze soll in einem Spartan3E/500 laufen, nebenbei kommt noch 
einiger anderer kram mit rein.

Am liebsten wären mir 48bit als Eingabe. Zur not gehen aber auch 32Bit.
Ist das machbar ? wieviel logik braucht sowas ?
Ich wollte den cordic3 aus dem Xilinx Coregen nehmen (oder was andres ?)

Hat da jemand Erfahrungswerte was noch machbar ist und was nicht ?
Ich kann nicht einschätzen wie komplex so eine sqrt berechnung ist :-\

Thnx
Gast #752658
Lesenswert?

Hm, der CORDIC sieht mir ganz schön groß aus wenn du nur sqrt berechnen 
willst. Kannst ihn ja trotzdem erstmal probieren, aber wenn der zu groß 
ist, meld dich nochmal, da kann man sicher mehr rausholen.
Gast #752714
Lesenswert?

Ich weis es nur für den Cyclone auswendig: 32Bit bei 50MHz erfordern 
etwa 12 Takte Latenz. Ich schätze mal, Du brauchts 20. Da das viel 
unnötige Logik kostet, wären einige parallele sicher besser.
Gast #753424
Lesenswert?

so habs mal getestet. scheint wirklich pro takt einen wert zu liefern.
komischerweise bleibt die simulation manchmal haengen, je nachdem wie
ich die eingabewerte anlege (timing) wird der ausgang nicht mehr 
geupdatet...
komisch :-\

Hier mal meine getesteten einstellungen (XC3S500E)

32bit, no  pipelining -> latency=2  ->  13 Mhz /  4% dev usage
32bit, opt pipelining -> latency=10 ->  90 Mhz /  5% dev usage
32bit, max pipelining -> latency=17 -> 154 Mhz /  6% dev usage

48bit, no  pipelining -> latency=2  ->   7 Mhz /  8% dev usage
48bit, opt pipelining -> latency=14 ->  78 Mhz / 10% dev usage
48bit, max pipelining -> latency=25 -> 145 Mhz / 13% dev usage

(webpack 8.2 / cordic core v3.0)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren