Forum: FPGA, VHDL & Co. 12,3 Mhz Frequenz


von Edgard (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@ 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

von Jan M. (mueschel)


Lesenswert?

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.

von Edgard (Gast)


Lesenswert?

Vielen dank an ihre Beide,

Ich kaufe mich ein 24.57 MHz Oscillator, so kann ich einfach durch zwei 
teilen.

MFG

von Falk B. (falk)


Lesenswert?

@ 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

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

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ß.

von joergwolfram (Gast)


Lesenswert?

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

von Joerg W. (joergwolfram)


Lesenswert?

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