Forum: FPGA, VHDL & Co. NCO im FPGA realisieren


von New I. (newie)


Lesenswert?

Hallo zusammen,

habe folgendes Problem:

Möchte einen NCO (Numeric Controled Oscillator) wie den AD9832 im 
Spartan 3A nachbilden.
D.h. Durch Laden eines Datenwortes ändert sich die Ausgangsfrequenz des 
Oszillators.

Ideal wäre ein DCM mit variabler Ausgangsfrequenz!
Finde im Core Generator nix dass diese Funktion abbilden könnte.

Ein Zähler würde prinzipiell auch gehen, aber die Auflösung (Delta f) 
ist nicht zufriedenstellend (auch wenn der FPGA intern mit 300 MHz 
läuft)!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

1
The AD9832 is a numerically controlled oscillator employing a phase 
2
accumulator, a sine look-up table and a 10-bit D/A converter integrated 
3
on a single CMOS chip.
Such mal nach DDS, DDFS und/oder schau dort nach:
http://www.lothar-miller.de/s9y/categories/31-DDFS

> Ideal wäre ein DCM mit variabler Ausgangsfrequenz!
Damit geht das nicht...

von Falk B. (falk)


Lesenswert?

@  Stanko T. (newie)

>Möchte einen NCO (Numeric Controled Oscillator) wie den AD9832 im
>Spartan 3A nachbilden.

Dann tu das doch einfach.

>Ideal wäre ein DCM mit variabler Ausgangsfrequenz!

Geht nicht.

>Ein Zähler würde prinzipiell auch gehen, aber die Auflösung (Delta f)
>ist nicht zufriedenstellend (auch wenn der FPGA intern mit 300 MHz
>läuft)!

Kaum. Eine DDS mit 300 MHz und 24 Bit Phasenakku hat 17,8 Hz 
Auflösung. Mit 32 Bit Phasenakku sind es 0,07 Hz Auflösung, allerdings 
muss man dann schon etwas tricksen, um den bei 300 MHz laufen lassen zu 
können.

MFg
Falk

von Antti (Gast)


Lesenswert?

300MHz geht schon, trick ist:
man benutzt 150mhz, kalkuliert 2 worte pro clock
und DDR I/O flop :)

Antti

von Antti (Gast)


Lesenswert?

http://groups.google.com/group/antti-brain/files?hl=en

bitte ISSUE JUNE und JULY lesen!

da ist ein project das NCO/DDS auf dem Spartan-3A platine benutzt
es lauft mit nur 210MHz, ich hatte es for die
DDS frequenz auf 640MHz hoch zu pumpen, habe aber noch nicht gemacht
aber moglich ist es, muss man 4 sample pro clock rechnen, dann
upconvert to 320mhz, und dann mit DDR I/O raus mit "virtuellen"
DDS update rate von 640MHz

viel spass fur alle, FPGA's sind es:)

Antti

von Max (Gast)


Lesenswert?

Hallo Antti,


>300MHz geht schon, trick ist:
>man benutzt 150mhz, kalkuliert 2 worte pro clock
>und DDR I/O flop :)

könntest du das bitte näher erläutern? Wenn du beim Kalkulieren 
(Addition im Phasenakku) durch die 150Mhz begrenzt bist, dann kannst du 
doch nicht durch DDR I/O schneller werden. Man kan doch nur das 
ausführen, was man zuvor gerechnet hat, oder? Wegen zwei Flanken wird 
der Addierer nicht schneller rechnen können.

Danke,

Max

von commtel (Gast)


Angehängte Dateien:

Lesenswert?

hhmm hab da was gefunden siehe anhang
seite 163

von Gast (Gast)


Lesenswert?

@Max: parallel x+1 und x+2 berechnen?

von Max (Gast)


Lesenswert?

>hhmm hab da was gefunden siehe anhang
>seite 163

Besten Dank commtel! Genau das habe ich gebraucht!

>@Max: parallel x+1 und x+2 berechnen?

Ja, gerechnet. Meiner ansicht nach, X+1 und X+2 das ist das maximum, was 
man dabei rausholen kann(?). X+1 brauch seine Zeit, und die kann man 
doch nicht verkürzen (?).

Danke, Commtel
Danke Gast.

von Commtel (Gast)


Lesenswert?

jo bitte

ich sitz vor dem gleichen problem nur leider hab ich keine zeit
für mein spartan3a board.

Ich hoffe du kommst schneller vorwärts als ich ud postet deine source

c.u
commtel

von Gast (Gast)


Lesenswert?

aber dadurch musst kannst du im nächsten schritt mit x+2+1 und x+2+2 
weitermachen, und das DDR (DoubleDataRate)-Interface kann halt in einem 
deiner Berechnungsschritte beide Werte ausgeben

von weltbester FPGA-Pongo (Gast)


Lesenswert?

Das kann man doch beliebig ausbauen,indem man nicht nur den Speicher 
verdoppelt sondern auch die Kanäle. Man muss eben 8 Kanäle mit 300 MHz 
treiben, diese 1/8 clocks versetzung und 8 AD-Wandler nutzen, deren 
Ausgang addiert wird.

von Uwe Bonnes (Gast)


Lesenswert?

Z.b.OSERDES bei neueren Bausteinen

von Duke Scarring (Gast)


Lesenswert?

@weltbester FPGA-Pongo:
> 8 AD-Wandler nutzen, deren Ausgang addiert wird.

Dann brauchst Du aber auch D/A-Wandler, deren Genauigkeit bei 1/8 Bit 
liegt. Dazu schaut man sich im Datenblatt die Angaben zu INL und DNL an.

Wenn Du einen passenden Wandler gefunden hast, kannst Du ja mal den Link 
hier posten.

Duke

von commtel (Gast)


Lesenswert?

@  Max

gibt es bei dir was neues?
wie weit bist du?

mfg
commtel

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.