Frequenzteiler

Gast #939367
Lesenswert?
• ▲
▼
Hallo zusammen,
Ich hab die Folgende Programme geschrieben,die sind Frequenzteiler,sie 
teilen mir einmal den 50 Mhz Taktfrequenz zu 19,2 Khz,und einmal zu 100 
Hz..
könnte jemand mir sagen ob die Programme richtig sind oder nicht?und 
wenn nicht,wo liegt den fehler?
Danke im voraus..

50 Mhz zu 19,2 Khz:

ENTITY frequenzteiler IS
        PORT (clock        : IN     bit ;
              t_clk        : BUFFER bit ;

        END frequenzteiler ;

        ARCHITECTURE behaviour OF frequenzteiler IS
         BEGIN
          PROCESS
           VARIABLE count : integer RANGE 0 TO 2604 ;
           BEGIN
              WAIT UNTIL clock'event AND clock='1' ;
                 count := count+1 ;
                 CASE count IS
                   WHEN 0       =>  t_clk <= NOT t_clk ;
                   WHEN 2604/2  =>  t_clk <= NOT t_clk ;
                   WHEN 2604    =>  count := 0;
                   WHEN OTHERS  => NULL ;
                 END CASE ;

          END PROCESS;
        END behaviour;

50 Mhz zu 100 Hz:

ENTITY frequenzteiler IS
        PORT (clock        : IN     bit ;
              t_clk        : BUFFER bit ;

        END frequenzteiler ;

        ARCHITECTURE behaviour OF frequenzteiler IS
         BEGIN
          PROCESS
           VARIABLE count : integer RANGE 0 TO 500000 ;
           BEGIN
              WAIT UNTIL clock'event AND clock='1' ;
                 count := count+1 ;
                 CASE count IS
                   WHEN 0       =>  t_clk <= NOT t_clk ;
                   WHEN 500000/2  =>  t_clk <= NOT t_clk ;
                   WHEN 500000    =>  count := 0;
                   WHEN OTHERS  => NULL ;
                 END CASE ;

          END PROCESS;
        END behaviour;
#939438
Lesenswert?
• ▲
▼
In Zweierpotenzen zu dividieren ist ja wohl peanuts und kein Problem 
fuer die Synthese. Da es sich hier eh um Konstanten handelt gibt es auch 
bei der Synthese keine Einschraenkung fuer den Divisor.

Da das Ausgangssignal getoggelt wird, ist es ein Witz, das ganze mit 
einem case so aufzubauen, ein Zaehler fuer eine halbe Periode haette 
genuegt.

Die angestrebte Teilung ist um einen clock cycle zu lang.

Ein generischer Ansatz waehre besser, als wie hier zwei entities die 
gleich benannt sind und dann die Parameter via Taschenrechner 
hartcodiert.

Keine initialisierung von count und Ausgangssignal, kein Problem fuer 
die Synthese aber sehr wohl fuer die Simulation.

BUFFER outputs vermeiden und ein lokales signal verwenden.

Falls das fuer interne Logik genutzt wird, in clock enable aendern.

Cheers, Roger
Gast #939699
Lesenswert?
• ▲
▼
@Roger:
Die waits gehen mit modernen Synthesetools (ab ISE 8?) völlig in 
Ordnung.

Vorteil: Man spart sich die sensitivity list und eine if...end if 
Verzweigung.

Nachteil: Asynchroner Reset geht so nicht zu realisieren.

@Lu Kim:
Neben den schon gennanten Tipps: "wait until rising_edge(clk);" sieht 
hübscher (lesbarer) aus.

Rick

Antwort schreiben

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.

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.