12,3 Mhz Frequenz

#677414
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
#677428
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.
Gast #677657
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
#677861
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

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