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


von Thomas (Gast)


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

von David B. (zorg)


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;

von FPGA-User (Gast)


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;

von MedMan (Gast)


Lesenswert?

-was ist ein DCM ?

von AxelM (Gast)


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 :-)

von MedMan (Gast)


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.

???

von Brutus (Gast)


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?

von J. S. (engineer) Benutzerseite


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.