Frequenzteiler(200 to 2)

Gast #883451
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
Gast #883497
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.
Gast #883500
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.
Gast #883502
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...
Gast #883690
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;

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