Forum: FPGA, VHDL & Co. fpga liefert ClockSignal für delta-Sigma-AD-Wandler


von tomy (Gast)


Lesenswert?

hallo zusammen,

ich will gerade ein Sigma-Delta AD-Wandler mit Spartan 3a FPGA 
(Starterkit) ansteuern. Der AD-Baustein ist AD7401A, der einen 
Modulation-Clock braucht. Ich möchte ihn mit clock = 10MHz(eventuell 
bisschen mehr) (sein max. zulässige ist 20MHz) ausprobieren.

Die Frage ist: Wie kann ich das ClockSignal nach draußen führen? Gehts 
einfach mit DCM, 50MHz-Input auf 10MHz, dann auf ein IO-Output zuweisen? 
Oder eventuell mit einem Counter,Clk-Divider (InputClk = 50Mhz)?

Vielen Dank im Voraus!^^

schönes WE für alle noch!

Gruß Tomy

von Georg A. (georga)


Lesenswert?

Kannst du alles machen, wobei die DCM-Variante aber sicher ein 
saubereres Signal liefert. Allerdings sollte man bedenken, dass auch die 
DCM keine PLL ist und damit der Ausgangstakt einen relativ grossen 
Jitter hat (AFAIR so 40-50ps). Jitter führt bei Wandlern zu einem 
zusätzlichen Rauschen, da es im Prinzip eine Frequenzmodulation des 
Signals mit dem Jitter erzeugt. Ob das tolerierbar ist, musst du 
entscheiden/messen. Ich würde aber sagen, dass man den DCM-Jitter bei 
weniger als 15-16Bit ignorieren kann...

von tomy (Gast)


Lesenswert?

danke für Deine schnelle Antwort!:-)

Georg A. schrieb:
> Ich würde aber sagen, dass man den DCM-Jitter bei
> weniger als 15-16Bit ignorieren kann...

Meinst Du 15-16Bit ADC? (durch Decimation?). Ich will das Standard sinc3 
+ 10Mhz + Decimation M = 256 (-->> Bits = 3*log(2)(256) = 24-Bits für 
Berechnung, für DataOutput nehmen ich 16- MSB von 24-Bits).

Ist das Primitive ODDR2 für solche Fälle (clockOuput) zuständig?
zb.
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.STD_LOGIC_ARITH.ALL;
4
use IEEE.STD_LOGIC_UNSIGNED.ALL;
5
6
entity toplevel is
7
    Port ( CLK_50MHZ         : in  STD_LOGIC;
8
           SigmaDeltaAD_Mclk  : out  STD_LOGIC);
9
end toplevel;
10
11
architecture Behavioral of toplevel is
12
13
  -- Clock
14
  COMPONENT dcm1
15
  PORT(
16
    CLKIN_IN : IN std_logic;
17
    RST_IN : IN std_logic;          
18
    CLKDV_OUT : OUT std_logic;
19
    CLKIN_IBUFG_OUT : OUT std_logic;
20
    CLK0_OUT : OUT std_logic
21
    );
22
  END COMPONENT;
23
        
24
        signal Clk10Mhz, nClk10Mhz : std_logic;
25
26
begin
27
  -- clock
28
  Inst_dcm1: dcm1 
29
  PORT MAP(
30
      CLKIN_IN => CLK_50MHZ,
31
      RST_IN => '0',
32
      CLKDV_OUT => Clk10Mhz,
33
      CLKIN_IBUFG_OUT => open,
34
      CLK0_OUT => open
35
    );
36
  nClk10Mhz <= not Clk10Mhz;
37
38
  AD_Mclk :  ODDR2  Port map(Q   => SigmaDeltaAD_Mclk, C0 => Clk10Mhz, C1 => nClk10Mhz, CE => '1', D0 => '1', D1 => '0', R => '0', S => '0');
39
40
end Behavioral

von Duke Scarring (Gast)


Lesenswert?

tomy schrieb:
> use IEEE.STD_LOGIC_ARITH.ALL;
> use IEEE.STD_LOGIC_UNSIGNED.ALL;
Nimm die raus. Die sind hier unnötig.

tomy schrieb:
> Die Frage ist: Wie kann ich das ClockSignal nach draußen führen? Gehts
> einfach mit DCM, 50MHz-Input auf 10MHz, dann auf ein IO-Output zuweisen?
> Oder eventuell mit einem Counter,Clk-Divider (InputClk = 50Mhz)?
Wenn Du die Chance hast, es richtig zu machen, dann mach es richtig:
ADC-Takte sollte man nie im FPGA generieren. Schon gar nicht aus der 
DCM. Da hast Du Jitter ohne Ende. Bau einen extra Quarzoszillator dran 
und nimm dessen Ausgang als ADC-Takt und als Taktquelle für den FPGA 
(Clock-Input) und gut.

Duke

von tomy (Gast)


Lesenswert?

Duke Scarring schrieb:
> Nimm die raus. Die sind hier unnötig.

erledigt! ^^

Duke Scarring schrieb:
> Wenn Du die Chance hast, es richtig zu machen, dann mach es richtig:
> ADC-Takte sollte man nie im FPGA generieren. Schon gar nicht aus der
> DCM. Da hast Du Jitter ohne Ende. Bau einen extra Quarzoszillator dran
> und nimm dessen Ausgang als ADC-Takt und als Taktquelle für den FPGA
> (Clock-Input) und gut.

Ich versuche grad mit dem starter-kit spartan 3a den delta-sigma-ADC 
anzusteuern. Deswegen hab noch keine Gelegentheit mit einem extern 
Quarzoszillator.

Danke dir für die Empfehlung!^^

Lg Tomy

von B.B. (Gast)


Lesenswert?

Ich würde lieber direkt an den Quarz gehen!

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.