Frequenzgenerator in VHDL

Gast #1393542
Lesenswert?

Ok, wenn ichs richtig verstehe, wird zum generieren der Frequenz das 
oberste Bit des "phase accumulators" genommen. Wenn man pro Clocktick 
zusätzlich eins mehr draufaddiert, so verdoppelt man die 
Ausgabefrequenz.

Wie muss man ein DDS denn ansteuern, damit man die erzeugten Frequenzen 
in kleinen Schritten durchspringen kann? Also: 0.01Hz -> 0.02Hz -> 
0.03Hz usw. und sich die Frequenz nicht immer verdoppelt?
Gast #1393583
Lesenswert?

-- Bestimmung von Takt und L<E4>nge des Phasenz<E4>hlers:
--
--      Taktfrequenz: f_takt
--      Phasenz<E4>hler: phase
--      Bitbreite des Phasenz<E4>hlers : w_phase bit
--      L<E4>nge des Phasenz<E4>hlers: l_phase = 2^w_phase
--      Bei jedem Takt zum Phasenz<E4>hler addierter Wert: d_phase
--      => Kleinste einzustellende Frequenz: f_min = f_takt / l_phase
--      => Generierte Frequenz: f_gen = f_min * d_phase
--      => oder d_phase = f_gen / f_min
--      wobei f_takt und l_phase und damit f_min beim Design 
festzulegende Konstanten sind.
--      Gibt man f_min und f_takt vor, so ergibt sich die L<E4>nge des 
Phasenz<E4>hlers zu
--      => l_phase = f_min / f_takt
--      Der Maximalwert d_phase_max von d_phase ergibt sich aus der 
maximal zu generierenden
--      Frequenz f_gen_max zu
--      => d_phase_max = f_gen_max / f_min
--
--      Ganz einfaches Beispiel:
--      w_phase = 8 bit
--      => l_phase = 2^8 = 256
--      => phase = 0..255
--      f_takt = 128 Hz
--      => f_min = 128 Hz / 256 = 0.5 Hz
--      f_gen = 1 Hz soll eingestellt werden
--      => d_phase = 1 Hz / 0.5 Hz = 2
--
--      Konkretes Beispiel:
--      Forderungen:
--              f_min = 0.01 Hz
--              f_max = 10 MHz
--              etwa 2-fach Oversampling bei 10 MHz, damit analoge 
Filterung einfacher wird
--      => f_takt ca. 40 MHz
--
--      => l_phase ca. 4e7 / 0.01 = 4e9 => w_phase = 32 bit => l_phase = 
2^32 = 4294967296
--      => f_takt = l_phase * f_min = 42949672.96 Hz = 4194304 Hz * 
32/10 * 32/10
--      => Quarz mit 2^22 Hz = 4194304 Hz und zwei nachgeschaltete DCM 
mit jeweils
--      CLKFX_MULTIPLY = 32 und CLKFX_DIVIDE = 10
--      Achtung: Wird der DCM mit solch niedriger Eingangs-Frequenz 
betrieben, d<FC>rfen die
-- PLL-Ausg<E4>nge nicht genutzt werden!
--      Alternativ: 50 MHz Quarz  17  24  19  25 = 42947368 Hz
--      => d_phase_max = 1e7 / 0.01 = 1e9 => w_d_phase = 30 bit
--      => f_gen_max = 2^30 * 0.01 = 10737418.23 Hz (einstellbar)
-- Ausgabe erfolgt mit x8000 Offset f<FC>r DAC
-- Pegeleinstellung ebenfalls mit x8000 Offset, x8000= Null, xFFFF = 
Max., x0000 = Max. invertiert

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