Heim Der Blog Blog Details

Wie erzeugt man niedrige Taktfrequenzen in FPGA?

May 06 2025
Ampheo

Anfrage

Globaler Lieferant elektronischer Komponenten AMPHEO PTY LTD: Umfangreiches Inventar für One-Stop-Shopping. Einfache Anfragen, schnelle, individuelle Lösungen und Angebote.

SCHNELLE ANFRAGE
ZUR RFQ-LISTE HINZUFÜGEN
Für die Erzeugung niedriger Taktfrequenzen in FPGAs gibt es mehrere bewährte Methoden, die unterschiedliche Vor- und Nachteile bieten.

Für die Erzeugung niedriger Taktfrequenzen in FPGAs gibt es mehrere bewährte Methoden, die unterschiedliche Vor- und Nachteile bieten:

Wie erzeugt man niedrige Taktfrequenzen in FPGA? - Blog - Ampheo

1. Taktteilung mit Zählern (einfachste Methode)

verilog
 
module Taktteiler (
    input clk,          // Eingangstakt (z.B. 50MHz)
    input reset,
    output reg slow_clk // Geteilter Takt
);

parameter TEILER = 50_000_000 / 2;  // 2Hz aus 50MHz

reg [31:0] zaehler;

always @(posedge clk or posedge reset) begin
    if (reset) begin
        zaehler <= 0;
        slow_clk <= 0;
    end
    else if (zaehler == (TEILER/2)-1) begin
        zaehler <= 0;
        slow_clk <= ~slow_clk;
    end
    else begin
        zaehler <= zaehler + 1;
    end
end
endmodule

Vorteile:

  • Einfache Implementierung

  • Geringer Ressourcenverbrauch

Nachteile:

  • Nur ganzzahlige Teilung möglich

  • Potenzielle Glitches

2. Pulsgenerierung (Taktfreigabe)

verilog
 
module Pulsgenerator (
    input clk,
    input reset,
    output puls
);

parameter PERIODE = 50_000_000; // 1 Sekunde bei 50MHz

reg [31:0] zaehler;

assign puls = (zaehler == PERIODE-1);

always @(posedge clk or posedge reset) begin
    if (reset) begin
        zaehler <= 0;
    end
    else if (puls) begin
        zaehler <= 0;
    end
    else begin
        zaehler <= zaehler + 1;
    end
end
endmodule

Vorteile:

  • Keine neuen Taktdomänen

  • Bessere Timing-Eigenschaften

3. PLL-Nutzung (präziseste Methode)

Für die DE1-SoC (Cyclone V):

  1. PLL-IP-Kern in Quartus Platform Designer einbinden

  2. Konfiguration:

    • Eingangsfrequenz (z.B. 50MHz)

    • Gewünschte Ausgangsfrequenz einstellen

    • Ggfs. Phasenverschiebung anpassen

verilog
 
// PLL-Instanziierung
sys_pll pll_inst (
    .refclk(CLOCK_50),   // 50MHz Eingang
    .rst(reset),
    .outclk_0(clk_1hz),  // 1Hz Ausgang
    .locked(pll_locked)
);

4. Kombinierter Ansatz (PLL + Zähler)

  1. PLL erzeugt mittlere Frequenz (z.B. 1MHz)

  2. Zähler teilt weiter auf Ziel-Frequenz herunter

Wichtige Hinweise für die DE1-SoC:

  1. Taktsignal-Integrität:

    • Immer dedizierte Taktpuffer (BUFG) verwenden

    • Taktgatterung vermeiden

  2. Timing Constraints:

    tcl
     
    create_clock -name clk_50mhz -period 20 [get_ports CLOCK_50]
    create_generated_clock -name clk_1hz -source [get_pins pll_inst|outclk_0] \
        -divide_by 50_000_000 [get_nets clk_1hz]
  3. Besonderheiten des Cyclone V:

    • 4 PLLs pro FPGA verfügbar

    • Minimale Ausgangsfrequenz ~1-5MHz

    • Für sehr niedrige Frequenzen (<1Hz) Zähler verwenden

Empfehlungen:

  • Für einfache Anwendungen: Zähler-basierte Lösung

  • Für präzise Takte: PLL nutzen

  • Für synchrones Design: Taktfreigabe (Clock Enable) bevorzugen

  • Immer richtige Constraints definieren

Ampheo