Ich verwende das Basys 2 Spartan-3E FPGA-Board mit Xilinx. Ich brauche den pmod i/o auf 1,8 V, also verwende ich LVCMOS18 IOSTANDARD.
In diesem Dokument finden Sie alle für Spartan-3E verfügbaren IOSTANDARDs .
Immer wenn ich versuche, mein Projekt zu kompilieren, tritt immer ein Fehler in der Place & Route
Phase auf, die besagt:
ERROR:Place:864 - Incompatible IOB's are locked to the same bank 0
Conflicting IO Standards are:
IO Standard 1: Name = LVCMOS25, VREF = NR, VCCO = 2.50, TERM = NONE, DIR = INPUT, DRIVE_STR = NR
List of locked IOB's:
mclk
ERROR:Place:864 - Incompatible IOB's are locked to the same bank 3
Conflicting IO Standards are:
IO Standard 1: Name = LVCMOS25, VREF = NR, VCCO = 2.50, TERM = NONE, DIR = OUTPUT, DRIVE_STR = NR
List of locked IOB's:
LEDs<7>
Ich habe einige Nachforschungen zu diesem Fehler angestellt und glaube, dass dies bedeutet, dass es verschiedene IOSTANDARDs auf derselben Bank gibt. Die Pins, die ich direkt setze, sind auf Bank 1, aber die Konflikte sind auf Bank 0 und Bank 3. Wenn ich den IOSTANDARD aus dem pmod i/o entferne, wird er erfolgreich kompiliert, aber diese Pins sind dann nicht 1,8 V.
Meine Constraints-Datei sieht so aus:
# clock pin for Basys2 Board
NET "mclk" LOC = "B8" ; # Bank = 0, Signal name = MCLK
NET "mclk" CLOCK_DEDICATED_ROUTE = FALSE;
# Pin assignment for LEDs
NET "LEDs<7>" LOC = "G1" ; # Bank = 3, Signal name = LD7
NET "LEDs<6>" LOC = "P4" ; # Bank = 2, Signal name = LD6
NET "LEDs<5>" LOC = "N4" ; # Bank = 2, Signal name = LD5
NET "LEDs<4>" LOC = "N5" ; # Bank = 2, Signal name = LD4
NET "LEDs<3>" LOC = "P6" ; # Bank = 2, Signal name = LD3
NET "LEDs<2>" LOC = "P7" ; # Bank = 3, Signal name = LD2
NET "LEDs<1>" LOC = "M11" ; # Bank = 2, Signal name = LD1
NET "LEDs<0>" LOC = "M5" ; # Bank = 2, Signal name = LD0
# Loop Back only tested signals
NET "spi_si" LOC = "B2" | DRIVE = 2 | IOSTANDARD = LVCMOS18 | PULLDOWN ; # Bank = 1, Signal name = JA1
NET "spi_so" LOC = "A3" | DRIVE = 2 | IOSTANDARD = LVCMOS18 | PULLDOWN ; # Bank = 1, Signal name = JA2
NET "spi_cs" LOC = "J3" | DRIVE = 2 | IOSTANDARD = LVCMOS18 | PULLDOWN ; # Bank = 1, Signal name = JA3
NET "spi_sck" LOC = "B5" | DRIVE = 2 | IOSTANDARD = LVCMOS18 | PULLDOWN ; # Bank = 1, Signal name = JA4
NET "sw0" LOC = "P11"; # Bank = 2, Signal name = SW0
Wie behebe ich diese Konflikte?
Das Basys2 hat das CP132-Paket. Hier ist das Chipdiagramm und das Bankschema:
Wie Sie vermutet haben, erhalten Sie Fehler, wenn Sie inkompatible IO-Standards in derselben Bank haben. Es ist am besten, genau zu wissen, wie dieses Zeug funktioniert, denn die Tools geben Ihnen gerne ein Bitfile, das Ihr FPGA aufgrund inkompatibler IO ausbrennt.
Wie Sie oben gepostet haben, können wir das Datenblatt von Xilinx für die Gerätefamilie DS312 konsultieren. Unterstützte IOSTANDARDs werden vom VCCO einer bestimmten Bank festgelegt. Beachten Sie, dass Eingang und Ausgang nur unterstützt werden, wenn die Zahl im IOSTANDARD mit der Spannung übereinstimmt; Eingabe wird für alles gleich oder niedriger unterstützt.
Sehen Sie sich nun die letzte Seite des Basys2-Schemas an.
Es scheint, dass alle VCCOs an 3,3 Volt angeschlossen sind. Dies bedeutet, dass Sie LVCMOS33-Eingabe/Ausgabe und alle anderen LVCMOS-Eingaben ausführen können. Sie können nicht die LVCMOS18-Ausgabe ausführen, die Sie gerne ausführen würden. Wenn der UCF für LVCMOS33 auf allen anderen Pins eingerichtet wurde, würden die Tools die Unmöglichkeit dessen erkennen, was Sie versuchen zu tun, und einen Fehler ausgeben. So wie es aussieht, sind die IOSTANDARDs in der UCF leer, was standardmäßig LVCMOS25 ist, und daher erkennen die Tools eine Diskrepanz.
Sie fragen sich vielleicht, warum Diligent ihre UCF so eingerichtet hat, wie sie es getan haben, da alles standardmäßig auf 2,5 Volt eingestellt ist, obwohl das Board tatsächlich 3,3 Volt hat. Ich weiß nicht. Der Punkt ist, dass das FPGA Pin-Einstellungen ohne Beanstandung akzeptiert, solange die Einstellungen innerhalb der Bank konsistent sind; Es liegt an Ihnen, sicherzustellen, dass die externe Spannung übereinstimmt. Sie könnten Ihr Problem also "beheben", indem Sie eine ganze Bank auf LVCMOS18 setzen, aber dann würden Sie Ihr SPI-Gerät wahrscheinlich mit 3,3 Volt braten.
So wie ich das sehe, hast du mehrere Möglichkeiten.
Schwere Operation auf der Basys2-Platine, entsprechende Änderung der VCCOs. Wahrscheinlich nicht wert.
Externe Pegelverschiebungsschaltung. Sie können den seriellen Eingang gut lesen, aber die anderen SPI-Signale müssen nach unten verschoben werden. Sie können dies entweder mit einem Logikchip der 74LVC-Serie, einigen Serien-FETs oder nur mit Widerstandsteilern tun.
Strombegrenzungswiderstände. Diese Methode stützt sich auf die Begrenzungsdiode im Zielgerät, um die Spannung zu begrenzen, und der Widerstand begrenzt den Strom auf ein sicheres Niveau. Es gibt Widerstände an den PMOD-Pins, aber sie reichen wahrscheinlich nicht aus. Gehen Sie sorgfältig vor, wenn Sie diese Option wählen.
2,5 V ist die Standardeinstellung. Wenn Sie die Spannung nicht definieren, verwendet die Software diese.
Mehrere Spannungen in einer Bank sind nicht fixierbar. Sie müssen für alle Pins einer Bank dieselbe I/O-Spannung verwenden. Außerdem sind alle I/O-Stromanschlüsse für eine Bank miteinander verbunden.
Für den Anfang haben Sie einige Fehler in Ihren Pinbelegungen.
LEDs<2>, Pin P7, is bank 2 and not 3.
spi_si, pin B2, is Bank 3 and not 1.
spi_so, pin A3, is Bank 0 and not 1.
spi_cs, pin J3, is Bank 3 and not 1.
spi_sclk, pin B5, is Bank 0 and not 1.
Ich habe nie ein Problem mit der Standardeinstellung der Software auf 2,5 V festgestellt, wie Brian Carlton sagte. Es kann ein Problem sein, und ich bin einfach nicht auf dieses Problem gestoßen.
MLM
Das Photon
Amoch
mng