mikrocontroller.net

Forum: FPGA, VHDL & Co. CLK-Teiler bzw. CLK-Enable


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Freunde des VHDL-Designs

Bin kein Experte, deswegen:
Stellt euch vor, ihr sollt generell mit einem 8MHZ-Takt arbeiten. Aber
um bei großen Zählern, sollt ihr mit einem heruntergetakten Zähler
arbeiten - sagen wir mal mit 125 000  Hz.
Frage 1:
Wie sieht dieser Teilerprozess aus?
Frage 2:
Wie arbeite man nun mit diesem 125KHz-Takt korrekt, wenn man
immer diese
IF RESET
ELSIF CLK'EVENT and CLK = '1'
END IF
Struktur einsetzen soll(te).
CLK ist dabei der 8 MHz Takt.

DANKE FÜR EURE HILFE.
DANKE!

Thomas

Autor: David Bermbach (zorg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. fürs teilen:
nimm ne dcm, das ist komfortabel, schnell und einfach zu bedienen.

2. für die prozesse, die mit 125kHz ablaufen statt der 8MHz einfach die
langsamere clock in die sensitivity liste eintragen

3. statt diesem clk'event etc. zeug finde ich immer übersichtlicher
den ausdruck "rising_edge(),:

transceiver1_data_delay : PROCESS (tsa_clk_156, rst_5d)
  begin
    if (rising_edge(tsa_clk_156)) then
      ...;
    end if;
  end PROCESS transceiver1_data_delay;

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DCM hat vermutlich Beschränkungen was min. Taktfrequenz
betrifft, das dürfte problematisch werden.
Aber so ein Teiler ist doch ganz einfach (ich schreib
jetzt hier mal schnell was hin, ohne zu compilieren...)

-- 8 MHz / 125 kHz = Faktor 64

signal teiler : integer range 0 to 63;
signal ena_q  : boolean;
signal my_counter : std_logic_vector(15 downto 0);

-- Vorteiler 64:1
process(reset, clk)
begin
   if reset='1' then
      teiler <= 0;
   elsif rising_edge(clk) then
      teiler <= (teiler +1) mod 64;
      ena_q  <= teiler = 0; -- Nulldurchgang
   end if;
end process;

-- Counter, der mit 125 kHz laufen soll
process(reset, clk) -- clk = 8MHz
begin
   if reset='1' then
      my_counter <= (others=>'0');
   elsif rising_edge(clk) then

      if ena_q then -- Clock-Ena nur alle 64 Takte, also mit 125kHz !
         my_counter <= my_counter +1;
      end if;
   end if;
end process;

Autor: MedMan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-was ist ein DCM ?

Autor: AxelM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DCM ist Digitales Clock managment.
Die DCM geht nicht bin 125kHz runter. Da muss man sich schon im
Megaherzbereich bewegen. Dafür würde ich aber auch keine DCM
verschwenden.
Also bei einer DCM kann man den Eingangstakt und Ausgangstakt vorgeben,
und dann macht der Baustein das für dich. Das ist die Grundfunktion.
Damit kann man auch noch mehr spielereien machen, aber da solltest du
dir mal die Dokumentation z.B. bei Xilinx anschauen.
In deinem Fall votier ich ganz klar (wie fast immer ) für die Lösung
von FPGA-User :-)

Autor: MedMan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich gehe davon aus, daß eine DCM mit PLLs arbeitet (?)

Wie auch immer: Ich habe ein Problem mit dem obigen Konstrukt: Im
Prinzip ist das ja nichts anderes als ein Zähler, der nach dem 64ten
clk auf hi geht. Nach meinem Empfinden steigt dessen Flanke aber nicht
mit der edge des clk-Taktes sondern erst beim nächsten.

???

Autor: Brutus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jupp geht mit einer PLL...
Hmmm steigt das erst bei der nächsten? na da kann ich mich heut abend
nicht mehr reindenken... :-) ansonsten machste aus der 64 ne 63.
Schon Modelsim befragt?

Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In diesem Falle der Verwendung eines statischen Taktteilers durch eine
FF-Kette (und nichts anderes ist der Zähler ja) muss das Umsetzen auf
Null beim nächsten Clock  nach 63 passieren - also der Reset des
Zählers. Der Zähler selber muss natürlich mit 64 Schritten zählen,
daher kann man das oben nicht einfach so auf 63 setzen. So wie es oben
formuliert ist, (mit dem MODULO) wird schon in der Berechung von "63"
auf "64" zur "0" umgeschaltet und der clock 1/64 gesetzt. Beim
nächsten echten CLK liegt also an den langsamen Eingängen schon der
Flankenwechsel an. So ist es korrekt. Interessant wäre, ob das jeweilge
Synthesetool auch tatsächlich nur 6bit für den Zähler spendiert.

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.