www.mikrocontroller.net

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


Autor: Neuling_1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Helmut -dc3yc (dc3yc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Neuling,

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

Helmut.

Autor: Neuling_1 (Gast)
Datum:

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

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Neuling_1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bevor ich lange um den heißen Brei rede werd ich es mal als VHDL Code 
hinschreiben:
signal counter : integer range 0 to 49;

process (clk_in) begin
  if rising_edge (clk_in) then
    
    -- Erzeugung der Ausgabeclock
    if counter = 0 then
      clk_out <= '0';
    elsif counter = 25 then
      clk_out <= '1';
    end if;

    -- Weiterzählen
    if counter = 50 then
      counter <= 0;
    else
      counter <= counter + 1;
    end if;

  end if;
end process;

Autor: Morin (Gast)
Datum:

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

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.