Forum: FPGA, VHDL & Co. unsigned ganzzahl sqrt()


von gast (Gast)


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

von Xenu (Gast)


Lesenswert?

Wieso nimmst Du nicht einfach den Core und synthetisierst ihn?
Dann siehst Du doch, wieviel er braucht. Dauert nur ein paar Minuten.

von Morin (Gast)


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.

von Betreuer (Gast)


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.

von gast (Gast)


Lesenswert?

Hi!

Ich bin mir nicht sicher ob der cordic core wirklich pro takt einen wert 
"ausspuckt".
In der Grafik sieht es irgendwie so aus als ob nur alle 2 takte ein Wert 
berechnet werden kann (S25, Fig 14)
http://www.xilinx.com/bvdocs/ipcenter/data_sheet/cordic.pdf

Naja ich werds heute abend einfach mal ausprobieren :)

von gast (Gast)


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)

von Chefingenieur (Gast)


Lesenswert?

Dann hast Du ein timing Problem.

von gast (Gast)


Lesenswert?

ne daran kanns nicht liegen, hab nur 20mhz als clock simuliert...

das scheint ein bug im core zu sein :-X
http://www.xilinx.com/support/answers/20371.htm

In der post route simulation funktioniert es nun korrekt ::)

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.