mikrocontroller.net

Forum: FPGA, VHDL & Co. Frequenzteiler


Autor: Lu Kim (Gast)
Datum:

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

Autor: Matthias F. (flint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe nicht, wo count initialisiert wird.

Autor: Nephilim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also was mit grad auffällt is, dass das /2 glaub nicht synthetisierbar 
ist, man kann es zwar schreiben und simulieren aber man wirds nicht auf 
einen FPGA bringen können.

Autor: Roger Steiner (edge)
Datum:

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

Autor: Roger Steiner (edge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach ja, wenn das synthetisiert werden soll, dann in einen getakteten 
process umformen (if rising_edge(clock)...) und das wait rausschmeissen.

Cheers, Roger

Autor: Rick Dangerus (Gast)
Datum:

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

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.