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
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...
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 |
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.