Hallo zusammen, Wie erzeuge ich mit VHDL ein Frequenz von 12,3 MHz mit ein Ozcillator von 50 MHz . 12,5 MHz geht schon aber 12,3 MHz ist für mich schwierig. Danke im voraus MFG
@ Edgard (Gast) >Wie erzeuge ich mit VHDL ein Frequenz von 12,3 MHz mit ein Ozcillator >von 50 MHz . 12,5 MHz geht schon aber 12,3 MHz ist für mich schwierig. In VHDL eigentlich gar nicht. Ausserdem ist das Problem kniffeliger als du denkst. Einen Teilfaktor von 50/12,3=4,06504 macht man mal nicht so nebenbei. Kauf dir einen DDS IC dafür. Oder gleich den richtigen Oszillator. MfG Falk
Was in den meisten Xilinx FPGAs mit DCM noch machbar waere, ist 50/49*12 = 12.244. Also die 50MHz erst mit Logik durch 49 teilen und dann mit DCM wieder um den Faktor 12 hoch. Noch genauer wird schwierig, da die DCM nur in bestimmten Grenzen arbeiten. Achja: Phasenlage etc zwischen beiden Frequenzen ist damit natuerlich voellig undefiniert.
Vielen dank an ihre Beide, Ich kaufe mich ein 24.57 MHz Oscillator, so kann ich einfach durch zwei teilen. MFG
@ Edgard (Gast) >Vielen dank an ihre Beide, ^^^^ >Ich kaufe mich ein 24.57 MHz Oscillator, so kann ich einfach durch zwei >teilen. Und einen Duden gleich dazu . . . :-0 MfG Falk
Ein 36,9 MHz-Quarz auf der Grundfrequenz 12,3MHz wäre noch möglich, oder ein 27,675 MHz-Quarz auf der Grundfrequenz 9,225 vervierfacht und wieder gedrittelt - wenn es so genau sein muß.
Das geht mit DDS und ein paar kleinen Modifikationen: 50/12,3 = 500/123 Dazu braucht man ein 10 Bit breites Register. Wenn Bit 9=0, dann werden beim nächsten Takt 123 addiert, wenn bit 9=1, dann werden 647 addiert. Die Ausgangsfrequenz von 12,3 MHz liegt dann an Bit 8 an, allerdings mit ziemlichem Jitter. Gruß Jörg
vom Speed her würde ein XC9536 mit 15ns reichen (52,6MHz nach timing-report, alle Zellen im STD-Modus). Ob es auch wie gewünscht funktioniert, habe ich aber nicht getestet.
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 divtest is |
7 | -------------------------------------------------------------------------------
|
8 | --- io
|
9 | -------------------------------------------------------------------------------
|
10 | port ( |
11 | inclk: in std_logic; |
12 | outclk: out std_logic); |
13 | |
14 | end entity divtest; |
15 | |
16 | architecture main of divtest is |
17 | -------------------------------------------------------------------------
|
18 | --- internal signals
|
19 | -------------------------------------------------------------------------
|
20 | signal counter: std_logic_vector(9 downto 0); |
21 | |
22 | begin
|
23 | -------------------------------------------------------------------------
|
24 | --- divider
|
25 | -------------------------------------------------------------------------
|
26 | process (inclk) is |
27 | begin
|
28 | if (rising_edge(inclk)) then |
29 | if counter(9)='1' then |
30 | counter <= counter + 647; |
31 | else
|
32 | counter <= counter + 123; |
33 | end if; |
34 | end if; |
35 | end process; |
36 | |
37 | outclk <= counter(8); |
38 | -------------------------------------------------------------------------
|
39 | --- minimal configuration
|
40 | -------------------------------------------------------------------------
|
41 | end architecture main; |
42 | |
43 | configuration main of mctest is |
44 | for main |
45 | end for; |
46 | end configuration main; |
Gruß Jörg
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.