Forum: FPGA, VHDL & Co. Frequenzteiler(200 to 2)


von Neuling_1 (Gast)


Lesenswert?

hallo Alle!
ich will mir ein device mit 4 MHz steuern, aber ich habe 200 MHz CPLD 
Masterclock.ich hab mir überlegt ,dass ich ein frequenzteiler benutzen 
muss.
200*X=4<=> X=50 .
50=B110010
aber soclhe frequenzteiler ist mir schwer zu programmieren.Ein 
frequenzteiler mir geraden zahlen kann ich schon.die frage wie kann man 
solche freq_teiler programmieren(VHDL selbsverständlich)?
Ich bedanke mich für jede Hilfe!
mfg

von Helmut -. (dc3yc)


Lesenswert?

Neuling,

aber 50 ist doch eine gerade Zahl. Wo ist da das Problem?

Helmut.

von Neuling_1 (Gast)


Lesenswert?

ja genau!aber ein teiler von 2,4,8,32 ist einfacher zu programmieren als 
ein teiler von 10,12,...50.

von Morin (Gast)


Lesenswert?

Eben, und auch bei ner ungeraden Zahl hättest du eben nicht ganz genau 
50% duty cycle, das ist normalerweise auch nicht tragisch.

Also: Synchronen Zähler (6 Bit) und ein 1-Bit Ausgaberegister. Den 
Zähler zur 200 MHz Clock zählen lassen, sobald er bei 25 erreicht das 
Ausgaberegister auf 1, sobald er 50 erreicht resetten und 
Ausgaberegister auf 0.

Das Ausgaberegister ist nötig (du kannst nicht direkt ein Bit des 
Zählers verwenden) weil 50 != 2^n.

von Morin (Gast)


Lesenswert?

Achja, nebenbei verhindert das Ausgaberegister auch Glitches durch den 
Logikteil, also musst du dich nicht um Glitch-freie Logik kümmern. Das 
Ausgaberegister ist natürlich auch von den 200 MHz getaktet.

von Morin (Gast)


Lesenswert?

Und letzter Nachtrag (sorry für den Dreifachen): Wenn du den Zähler 
weiter bei 50 resettest, aber das Ausgaberegister nicht bei 0 und 25, 
sondern z.B. bei 5 und 30 schaltest, kannst du den erzeugten Takt 
phasenverschieben. Oder auch z.B. mit 5 und 25 einen kürzeren Duty Cycle 
erzeugen. Und so weiter...

von Neuling_1 (Gast)


Lesenswert?

Danke für die Antwort,aber ganz ehrlich zu Dir es ist mir noch net 
deutlich was ich machen soll?kannst Du mal bitte es noch spezifisch 
erlaütern.
Ich bedanke mich.

von Morin (Gast)


Lesenswert?

Bevor ich lange um den heißen Brei rede werd ich es mal als VHDL Code 
hinschreiben:
1
signal counter : integer range 0 to 49;
2
3
process (clk_in) begin
4
  if rising_edge (clk_in) then
5
    
6
    -- Erzeugung der Ausgabeclock
7
    if counter = 0 then
8
      clk_out <= '0';
9
    elsif counter = 25 then
10
      clk_out <= '1';
11
    end if;
12
13
    -- Weiterzählen
14
    if counter = 50 then
15
      counter <= 0;
16
    else
17
      counter <= counter + 1;
18
    end if;
19
20
  end if;
21
end process;

von Morin (Gast)


Lesenswert?

Kleiner Nachtrag wegen Fehler (editieren erlaubt dieses Forum 
anscheinend nicht...):

Der Vergleich counter = 50 muss counter = 49 heißen.

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.