Takterzeugung mit FPGA

Ich versuche, das Spartan 3E-Kit zu verwenden , um einen 50-MHz-Takt zu erzeugen. Das Kit wird mit einem 50-MHz-Quarz geliefert, den ich zu verwenden versuche.

Also habe ich einen einfachen Code geschrieben, um den Takt vom FPGA an den SMA-Anschluss auszugeben. Der Code lautet wie folgt:

module clock (in_clock, out_clock);

input in_clock;
output out_clock;

wire in_clock;
reg out_clock;

always @in_clock
out_clock = in_clock;

endmodule

Die UCF-Datei, die die Pin-Konfiguration erwähnt, lautet wie folgt:

NET "in_clock" LOC = C9;
NET "out_clock" LOC = A10;

Die Ausgangswellenform des 50-MHz-Takts sieht wie folgt aus. Die Wellenform beträgt 50 MHz, aber ich bekomme keine Rechteckimpulse. Außerdem ist der Spannungspegel zu klein (<10 mV). Kann mir bitte jemand sagen wo das Problem liegen könnte? 50-MHz-Takt http://www.ee.iitb.ac.in/student/~neelsmehta/2012-02-23%2011.08.20.jpg

Sind Sie sicher, dass Sie keinen 10X- oder 100X-Oszilloskoptastkopf verwenden?

Antworten (4)

Der 50-MHz-Takteingang sollte auf Pin D9 liegen, nicht auf C9. Sie sollten dies noch einmal überprüfen, da ich die Schaltpläne falsch lesen und zu viele Dinge annehmen könnte, die Sie bei Ihrer Frage ausgelassen haben.

Wenn Ihre Signalamplitude nahe bei 3,3 V wäre, wäre die nicht so quadratische Rechteckwelle das Ergebnis davon, wie Sie Ihr Signal terminieren (wahrscheinlich keine Terminierung) und schlechte O-Scope-Messtechniken. Da Ihr "Signal" jedoch nur 10 mV beträgt, gibt es meiner Meinung nach andere Probleme.

Ich sollte auch erwähnen, dass ich Verilog nicht kenne, also gehe ich davon aus, dass Ihr Verilog-Code gut ist. Ich bin eher ein VHDL-Mensch...

Also, meine beste Vermutung, was schief läuft, ist Folgendes ... Sie haben Ihren Takteingang am falschen Pin. Ihre Oszilloskopsonde ist auf dem richtigen Signal, aber da ist nichts. Aufgrund von Übersprechen und anderen Rauscheffekten sehen Sie auf dem Oszilloskop ein 50-MHz-Signal, und dieses Signal wird nicht wirklich vom FPGA ausgegeben.

Die hier verfügbare Dokumentation zeigt deutlich, dass sich der 50-MHz-Taktoszillator auf C9 befindet. Siehe Kapitel 3 Taktquellen. Das Bild auf Seite 21 hebt das auch hervor.
@NeelMehta Ummm ... Der Link, den Sie in Ihrer Frage angegeben haben, und der Link, den Sie im obigen Kommentar angegeben haben, verweisen auf verschiedene Boards! Welches ist also das richtige Board?
Es tut mir sehr leid, dass ich den falschen Link gesetzt hatte. Ich hatte auf das Spartan 3-Board statt auf das Spartan 3E-Board hingewiesen. Ich habe meinen Fehler in der Frage auch korrigiert. Die Verwirrung tut mir sehr leid.
@NeelMehta Na ja, Fehler passieren. Setzen Sie das Oszilloskop auf den direkten Ausgang des Oszillators, um zu sehen, wie ein "echter 50-MHz-Takt" aussehen sollte. Dadurch wird sichergestellt, dass der Bereich richtig eingerichtet ist. Abgesehen davon fällt mir nur ein, sicherzustellen, dass JP9 (Blatt 9/14 in den Schaltplänen) korrekt installiert ist.
Der Oszillator ist in das FPGA gelötet und kann daher nicht entfernt werden. Mit dem Jumper J9 wird die Spannung auf 3,3 V oder 2,5 V eingestellt und ist derzeit auf 3,3 V eingestellt. Ich bin mir nicht sicher, aber ist es möglich, dass die Verzerrung auf das Oszilloskopsondenkabel / -kabel zurückzuführen ist?
@NeelMehta Sie müssen die Verzerrung ignorieren, bis Sie das Amplitudenproblem herausgefunden haben. Das Oszilloskop und / oder die Sonde könnten dies verursachen, deshalb habe ich vorgeschlagen, es auf den Ausgang des Oszillators zu setzen, um zu sehen, wie es aussieht.

Dies kommt etwas spät, aber eine Sache, die erklären würde, dass nur 10 mV ausgegeben werden, ist, wenn JP9 keinen Jumper geladen hat. Das würde bedeuten, dass es für die IO-Puffer, die diesen Ausgang treiben sollten, keine Stromversorgung auf Platinenebene gibt, und Sie würden nominell überhaupt keinen Ausgang erwarten.

Es ist jedoch möglich, dass es einen parasitären Pfad zur Stromversorgung dieser Treiber von einem anderen Stromeingang gibt oder nur ein Signalleck durch die nicht mit Strom versorgten Schaltkreise, sodass Sie das sehr kleine Ausgangssignal sehen können.

Nein, der JP9 ist richtig auf 3,3 V eingestellt. Das Problem konnte ich bisher noch nicht erkennen. Also denke ich darüber nach, einen Frequenzteilercode zu schreiben, der die Frequenz auf kHz reduziert und dann versucht, die Wellenform zu sehen. Ich bin mir nicht sicher, aber das könnte helfen, die Ursache des Problems zu verstehen.

Dies beantwortet Ihre Frage nicht, aber um Davids Antwort weiterzuverfolgen, können Sie Ihren Code erheblich vereinfachen:

module clock (in_clock, out_clock);

input in_clock;
output out_clock;

assign out_clock = in_clock;

endmodule
  • wireEs ist nicht erforderlich, eine Eingabe als oder zu deklarieren reg, da es sich niemals um eine Registrierung handeln kann.

  • out_clockist besser als Draht als als Reg implementiert, da Sie es mit kombinatorischer Logik implementieren. Der einzige mir bekannte Fall, in dem kombinatorische Logik üblicherweise mit einem Always-Block ausgedrückt wird, ist die Erzeugung eines Multiplexers.

  • Es ist nicht erforderlich, ein Portnetz explizit als Draht zu deklarieren, da dies die Standardeinstellung ist.

Ich glaube, dass das, was Sie geschrieben haben, auch das gleiche Verhalten wie dieser Code aufweisen sollte, aber es lohnt sich, die einfachere Form auszuprobieren, da Synthesewerkzeuge funktionieren, indem sie allgemeine Muster in Ihrem Code erkennen, wenn Sie also Ihr Design auf "ungewöhnliche" Weise ausdrücken , ist es möglich, das Synthesetool zu verwirren. In diesem Fall könnte es Ihren Always-Block sehen und versuchen, ein Latch oder Flip-Flop zu implementieren. Was zu einer falschen Logik für Ihr Design führen würde.

Ich habe den vereinfachten Code ausgeführt und das Technologieschema überprüft, und das Schema ist immer noch dasselbe wie der ursprüngliche Code. Ich habe es sogar auf dem FPGA implementiert und getestet und die Wellenform ist immer noch verzerrt. Die Vereinfachung hat also nicht geholfen.

Die Eingangsimpedanz muss 1 MOhm und nicht 50 Ohm betragen.

Das würde reichen.