Forum: FPGA, VHDL & Co. Clock-Signal um die Hälfte verringern


von Marcel (Gast)


Lesenswert?

Hallo,

ich habe ein Clock-Signal mit 50MHz und möchte daraus ein Clocksignal 
mit 25MHz erstellen.

Ich habe schon Verilog-Code geschrieben, leider funktioniert er nicht 
richtig.

Wo ist der Fehler? Wie kann ich das besser/ einfacher machen?


Marcel




module clk25_generator(
clk50,
reset,
clk25
);

input clk50, reset;
output clk25;

reg clk25;

reg state;

always @(posedge clk50)
begin
   if (reset==1'b1) begin
   state<=1'b0;
   clk25<=1'b0;
   end
   else begin

   if (state==1'b1) begin
      clk25=~clk25;
      state<=state+1;
   end

     state<=state+1;

   end
end



always @(negedge clk50)
begin
  if (state==1'b1) begin
      clk25=~clk25;
  end
    state<=state+1;
  end

endmodule

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Nicht, dass ich Verilog könnte, aber wie wäre das:


module clk25_generator(
clk50,
reset,
clk25
);

input clk50, reset;
output clk25;

reg clk25;

always @(posedge clk50)
begin
   if (reset==1'b1) begin
       clk25<=1'b0;
   end
   else begin
      clk25=~clk25;      >>>>>>>> toggeln des Bits = teilen durch 2
   end
end

endmodule

Insbesondere, weil ich nicht glaube, dass du ein FF (innerhalb des 
FPGAs) findest, das du auf die pos. und die neg. Flanke triggern kannst.

von Tim R. (vref)


Lesenswert?

Die Frage ist auch, ob dein geteiltes Clocksignal unbedingt von Reset 
abhängig sein muss.
Wenn nicht, kannst du es dir auch noch einfacher machen:

reg clk2 = 1'b0;
always @(posedge clk)
begin
  clk2 <= ~clk2;
end

von Harald (Gast)


Lesenswert?

Das wird ein Schweiss Clock signal, wenn man es in derselben Domäne 
nutzen will,

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>Das wird ein Schweiss Clock signal, wenn man es in derselben
>Domäne nutzen will
Sowas nutzt man eh nur als Enable, dann hat das mit Schweiß nichts zu 
tun.

:
:
always @(posedge clk50)
begin
   clk25=~clk25;          >>>>>>>> toggeln des Bits = teilen durch 2
end

always @(posedge clk50)
begin
   if (clk25==1'b1) begin  >>>>>>> Clock-Domain 50MHz mit Enable 25MHz
      :
      :
   end
end
:
:

von Falk B. (falk)


Lesenswert?


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.