mikrocontroller.net

Forum: FPGA, VHDL & Co. VHDL: 100 MHz Clock auf 100 kHz und 20 kHz teilen?


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich möchte folgende erzeugte Clock auf 100 kHz und 20 kHz teilen:

ARCHITECTURE clk of clock is

BEGIN
    PROCESS
    BEGIN
        clk <= '1';         -- ein HIGH-Puls von 5 ns
        WAIT FOR 5 ns;      -- gefolgt von einen
        clk <= '0';         -- LOW-Puls von 5 ns
        WAIT FOR 5 ns;      -- ergibt eine Periodendauer von 10 ns => f= 
100Mhz
    END PROCESS;
END clk;


Ich habe die 100 KHz so probiert, aber ist das okay so?

Freq_teiler: PROCESS (clk)  -- frequenz 100 Mhz auf 100 Khz runter 
bringen
    BEGIN
      IF rising_edge (clk) THEN
        IF reset = '1' THEN
          zaehler <= 0;
          clk_intern <= '0';
        ELSE
          zaehler <= zaehler + 1;
            IF zaehler = 250 THEN     -- zaehlt bis 250 , dann toggle
              zaehler <= 0;
              clk_intern <= NOT clk_intern;
              D_clock <= NOT clk_intern;
            END IF;
        END IF;
      END IF;
    END PROCESS Freq_teiler;


Vielen Dank,

gruß Frank

Autor: Armin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du bis 250 zählst, dann dauert eine Periode 500 Takte.
Dein Simulatorsignal hat 2x5ns = 10ns Periode
500 Takte * 10 ns = 5µs pro heruntergetakteter Periode
Damit kommst du auf eine Frequenz von 200 kHz.

Sonst müsste das passen - auch wenn die Schreibweise seltsam ist. Auch 
bin ich mir nicht sicher, ob das überflüssige Flipflop D_clock == 
clk_intern herausoptimiert wird. Ich würde diese Zuweisung lieber 
nebenläufig außerhalb des Prozess schreiben:
D_clock <= clk_intern;

Vielleicht wäre auch eine andere Benennung sinnvoll, denn soweit ich das 
verstanden habe, verwendet man ein solches heruntergetaktetes nicht am 
Clock-Eingang weiterer Logik, sondern es hat Enable-Funktion.
Dann müsste das Tastverhältnis aber aber anders sein, damit der Enable 
wirklich nur einen 100MHz-Takt lang an ist!

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Armin,

danke für die Hilfe und die Tipps (:

Viele Grüße Frank

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
    IF zaehler = 250 THEN     -- zaehlt bis 250 , dann toggle
Dein geteilter Takt ist zu langsam: 0...250 sind 251 Zählschritte  :-o
Du solltest bei 249 den Zähler zurücksetzen und toggeln. Denn das:
          zaehler <= zaehler + 1;
          IF zaehler = 250 THEN     -- zaehlt bis 250 , dann toggle
             zaehler <= 0;
             :
          END IF;
Ist genau das selbe wie das:
          IF zaehler = 250 THEN     -- zaehlt bis 250 , dann toggle
             zaehler <= 0;
             :
          ELSE
             zaehler <= zaehler + 1;
          END IF;
Stichworte: Signalzuweisung im Prozess

BTW:
   IF zaehler = 250 THEN     
       clk_intern <= NOT clk_intern;
Das ist sehr unsauber. So sollten in der Praxis keine internen Takte 
erzeugt werden. Siehe Taktung FPGA/CPLD..

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.