Maximale Frequenz für ein FPGA-basiertes Rechtecksignal

Ich habe ein Verständnisproblem, was die maximal mögliche Frequenz für ein Rechtecksignal ist, das erzeugt werden kann.

Ich experimentiere derzeit mit einem FPGA-Board (Red Pitaya), das ein 125 MHz Xilinx Zynq FPGA hat. Wenn ich das Taktsignal über einen Binärzähler und Slice (Xilinx IPs) für das Bit #0 und einen Ausgangspin verbinde, messe ich etwa die halbe Frequenz (62,5 MHz).

Hier ist das Blockdiagramm von Xilinx Vivado
(32-Bit-Binärzähler im UP-Modus, 1-Bit-Slice Din From+ Din Down Tosind beide 0):

Geben Sie hier die Bildbeschreibung ein

Ich hätte erwartet, dass ich genau die Taktfrequenz am Ausgangsport sehen werde.

Kann mir bitte jemand erklären, warum die Frequenz halbiert wurde und was die maximale Rechteckwellenfrequenz ist, die von einem FPGA erzeugt werden kann?

Welcher Funktionsgenerator?
Nur das Taktsignal (Rechteckwelle mit 50 % Tastverhältnis)
Das habe ich schon gelesen, hat mir aber nicht weitergeholfen. Ich dachte, der Grund dafür hängt mit der Abtastrate / dem Nyquist-Shannon-Abtasttheorem zusammen, aber als Softwareentwickler habe ich nicht so viel Hintergrundwissen in Elektronik.
Das Softwarepaket auf dem Red Pitaya verfügt auch über eine Anwendung, mit der benutzerdefinierte Wellenformen generiert werden können. Dafür geben sie die maximale Frequenz an, die mit 50 MHz erzeugt werden kann: redpitaya.com/f145/oscilloscope-signal-generator/specifications
Welchen Funktionsgenerator (verwenden Sie)?
@Andy: Ich verwende nur das Taktsignal (125 MHz) vom FPGA, das direkt mit einem Ausgangsport verbunden ist. Dadurch wird einfach eine Rechteckwelle mit 50% Arbeitszyklus erzeugt.
Dann ist Ihre Frage verwirrend, weil die Leute "Funktionsgenerator" als gekauftes Gerät nehmen werden. Bitte ändern Sie Ihre Frage, um konkret zu sein.
Könnten Sie einen relevanten Code teilen?
Sie fragen nach der maximalen Frequenz, die ein FPGA machen kann, und beschweren sich gleichzeitig, dass nur die halbe Frequenz herauskommt. Wenn letzteres Ihre Hauptfrage ist, passen Sie bitte die Überschrift an.
Ich habe meine Frage aktualisiert und weitere Erklärungen hinzugefügt, was ich getan habe.
Ein Binärzähler ändert sein LSB in jedem Taktzyklus. Das Taktsignal ändert sich zweimal während eines Taktzyklus (bei steigender und fallender Flanke). Daher können Sie am CLK-Eingang eines Zählers und an seinem Ausgang nicht dieselbe Frequenz beobachten.
Bit 0 schaltet (ändert den Zustand) einmal pro vollständigem Taktzyklus ein; damit Bit 0 auf High und dann auf Low geht, sind daher zwei Eingangstaktzyklen erforderlich, was den Takt /2 ergibt. Daher ist dies das erwartete Verhalten.
Hinweis: Ein paar andere Begriffe für einen Ein-Bit-Zähler sind T-Flip-Flop und Frequenzteiler .

Antworten (3)

Sie können keine Frequenz erzeugen, die höher als die interne Uhr ist. Wenn Sie Zugang zu einem Phasenregelkreis oder PLL haben, können Sie dies möglicherweise tun.

Üblicherweise wird der externe Takt in eine PLL eingespeist und daraus der interne Takt generiert.

Wenn Ihre interne Uhr 125 MHz beträgt und Sie einen normalen Zähler verwenden (der nur auf der steigenden Flanke zählt), wird die schnellste Zählung, die Sie sehen werden, bei der Hälfte von 125 MHz oder 62,5 MHz liegen.

Es können Zähler gebaut werden, die an der steigenden und fallenden Flanke arbeiten , damit Sie mit 125 MHz zählen können

Um dies zu erweitern, empfiehlt Xilinx die Verwendung des ODDR-Grundelements zum Weiterleiten von Takten. Es liefert bessere Ergebnisse als das Mucking mit Pose- und Negedge-Anweisungen.

Wenn Sie den Takt nicht mit einem DDR-Flip-Flop speisen, ist die maximale Frequenz, die Sie erwarten würden, F C l k / 2 . Der Grund dafür ist, dass sich der Ausgang nur einmal für jeden vollständigen Taktzyklus ändern kann (eine steigende Flanke und eine fallende Flanke). Darüber hinaus ist dies das, was Sie von einem freilaufenden Binärzähler erwarten würden ... Bit 0 (das LSB) wird oszillieren F C l k / 2 , das Bit 1 an F C l k / 4 usw. Wenn Sie eine höhere Ausgangsfrequenz wünschen, müssen Sie zwei Dinge tun: einen schnelleren Takt verwenden und DDR-Ausgangsregister verwenden. Ich habe mit DDR-Ausgangsregistern erfolgreich Ausgänge bei 250 MHz und 500 MHz angesteuert.

Alle Xininx FPGAs (ab Serie 3,4,5,6,7 etc.) bieten umfangreiche Digital Clock Management (DCM) Blöcke, die selbstverständlich PLLs/DPLLs beinhalten. In neueren Angeboten heißen diese Blöcke MMCM – Mixed-Mode Clock Manager. Es gibt mehrere Blöcke in jedem FPGA, wodurch viele Taktdomänen in einem Design möglich sind. Die Zynq/Artix FPGAs/SoCs können interne Takte von bis zu 800 MHz und bis zu 5 MHz haben, die alle leicht von nahezu jedem externen Takt abgeleitet werden können.

Die Ausgangsleistung hängt von der Auswahl des Ausgangspuffertyps ab, je nach Puffertyp und Modus-/Stärkeauswahl. Ich glaube, 200-300-400 MHz Rechteckwelle sind leicht erreichbar, zumindest können sie es für DDR-Schnittstellen tun.