Frequenzteiler(200 to 2)

Gast #883451
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
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
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
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
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.
Gast
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.