Spartan 6: Wie verwende ich meine Differentialuhr?

Mein SP601 Evaluierungsboard wird mit einem 2,5 V LVDS Differential 200 MHz Oszillator geliefert. Bisher habe ich nur die mit dem Board gelieferte Single-Ended-Clock verwendet. Ich habe Probleme mit der Formatierung der Benutzereinschränkungsdatei zur Verwendung der Differentialuhr. Folgendes habe ich bisher in meiner Benutzereinschränkungsdatei.

NET "clk_N" LOC = "K16"; ## 5 on U5 EG2121CA, 5 of U20 SI500D (DNP)
NET "clk_P" LOC = "K15"; ## 6 on U5 EG2121CA, 4 of U20 SI500D (DNP)

Was ich vorher hatte, als ich die Single-Ended-Clock benutzte, war:

NET "clk" LOC = "V10"; ## 5 on X2 USER OSC Socket
NET "clk" TNM_NET = "clk";
TIMESPEC "TS_clk" = PERIOD "clk" 37 ns HIGH 50%;

Welche Änderungen muss ich außerdem, nachdem ich die Uhr erfolgreich in meine Benutzereinschränkungsdatei aufgenommen habe, an meinem Code vornehmen, um von der Single-Ended-Uhr auf die differentielle Uhr umzuschalten? Ursprünglich habe ich ein Signal namens clk, und ich triggere die steigende Flanke dieses Signals. Jetzt, da ich zwei Signale habe, scheint die Methode der steigenden Flanke nicht zu funktionieren. Soll ich ein neues Signal machen, das heißt clk_1- clk_2, wo clk_1und clk_2sind die beiden Differenzsignale? Ich weiß nicht, ob das Ändern meiner Taktquelle Auswirkungen darauf haben sollte, wie der Rest meines Codes geschrieben wird.

Was ich sagen will, ist, dass ich neu bei FPGAs bin und eine Vorstellung davon habe, wie differenzielle Signalisierung theoretisch funktioniert, aber ich bin mir nicht sicher, wie es in der Praxis funktioniert. Ich verwende VHDL.

Antworten (1)

Gehen Sie für Einschränkungen wie folgt vor:

NET "clk_P" LOC = "K15" | IOSTANDARD=LVDS_33; ## 6 on U5 EG2121CA, 4 of U20 SI500D (DNP)
NET "clk_N" LOC = "K16" | IOSTANDARD=LVDS_33; ## 5 on U5 EG2121CA, 5 of U20 SI500D (DNP)
NET "clk_P" TNM_NET = "clk";
TIMESPEC "TS_clk" = PERIOD "clk" 5 ns HIGH 50%;

Sie müssen nur die P-Seite gemäß http://www.xilinx.com/support/answers/57109.html einschränken . Stellen Sie sicher, dass Sie den richtigen IOSTANDARD erhalten. Vielleicht LVPECL_25, LVPECL_33, LVDS_25 oder LVDS_33, je nach Taktquelle. Siehe Xilinx UG381. Möglicherweise müssen Sie auch DIFF_TERM = TRUE zusammen mit IOSTANDARD festlegen, um den internen 100-Ohm-Differentialabschluss zu aktivieren. Überprüfen Sie das Platinenlayout/Schaltbild, um festzustellen, ob bereits ein diskreter Abschlusswiderstand vorhanden ist. In diesem Fall sollten Sie DIFF_TERM aus lassen oder DIFF_TERM = FALSE hinzufügen.

Dann müssen Sie ein IBUFGDS anstelle eines IBUFG instanziieren, vielleicht so etwas wie das:

IBUFGDS ibufg_inst (.I(clk_P), .IB(clk_N), .O(clk_ibufg));
BUFG bufg_inst (.I(clk_ibufg), .O(clk));

Verwenden Sie dann einfach clk wie zuvor. Wenn Sie ein DCM oder PLL verwenden, sollten Sie in der Lage sein, die DCM- oder PLL-Instanz zwischen IBUFGDS und BUFG zu platzieren.

Man sollte auch den Schaltplan überprüfen, um zu sehen, ob eine interne Terminierung erforderlich ist.
Ja, darauf wollte ich hinaus. Ich nehme an, es wird benötigt, ich bin mir nicht sicher, warum sich ein Designer für einen diskreten Abschlusswiderstand für einen solchen differenziellen Takteingang entscheiden würde. Es könnte schwierig sein, es an der richtigen Stelle auf der Tafel zu platzieren.
Ich habe es schon einmal auf Xilinx-Entwicklungsboards gesehen, bin mir nicht sicher, ob es einen Grund gibt.
Ist FD_100 eine tatsächliche Einstellung? Ich dachte, es wäre DIFF_TERM = TRUE.
Hmm, vielleicht ist es nur DIFF_TERM = TRUE. Es gibt eine ganze Tabelle in UG381 mit verschiedenen Terminierungsstilen mit Namen, die so aussehen, als könnten sie in die UCF-Datei aufgenommen werden, wie FD_100 und FP_VCCO_50, NS_70_ND_187_FD_100 usw.
Beim weiteren Lesen sieht es so aus, als wären IN_TERM und OUT_TERM nur für Single-Ended-Signalisierung und es gibt nur DIFF_TERM für eine 100-Ohm-Terminierung für differenzielle Signalisierung.
Würde ich das dann schreiben? NET clk_P DIFF_TERM = TRUE;
Fügen Sie es einfach nach IOSTANDARD hinzu und trennen Sie es mit einem weiteren |
Aber ich nehme an, es würde auch funktionieren, es auf eine eigene Linie zu setzen